Merge "Set the nova scheduler ram_allocation_ration to 1.0"
[apex-tripleo-heat-templates.git] / controller.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack control plane node. Can be wrapped in a ResourceGroup for scaling.
5
6 parameters:
7   AdminPassword:
8     default: unset
9     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
10     type: string
11     hidden: true
12   AdminToken:
13     default: unset
14     description: The keystone auth secret and db password.
15     type: string
16     hidden: true
17   CeilometerBackend:
18     default: 'mongodb'
19     description: The ceilometer backend type.
20     type: string
21   CeilometerMeteringSecret:
22     default: unset
23     description: Secret shared by the ceilometer services.
24     type: string
25     hidden: true
26   CeilometerPassword:
27     default: unset
28     description: The password for the ceilometer service and db account.
29     type: string
30     hidden: true
31   CinderEnableNfsBackend:
32     default: false
33     description: Whether to enable or not the NFS backend for Cinder
34     type: boolean
35   CinderEnableIscsiBackend:
36     default: true
37     description: Whether to enable or not the Iscsi backend for Cinder
38     type: boolean
39   CinderEnableRbdBackend:
40     default: false
41     description: Whether to enable or not the Rbd backend for Cinder
42     type: boolean
43   CinderISCSIHelper:
44     default: tgtadm
45     description: The iSCSI helper to use with cinder.
46     type: string
47   CinderLVMLoopDeviceSize:
48     default: 5000
49     description: The size of the loopback file used by the cinder LVM driver.
50     type: number
51   CinderNfsMountOptions:
52     default: ''
53     description: >
54       Mount options for NFS mounts used by Cinder NFS backend. Effective
55       when CinderEnableNfsBackend is true.
56     type: string
57   CinderNfsServers:
58     default: ''
59     description: >
60       NFS servers used by Cinder NFS backend. Effective when
61       CinderEnableNfsBackend is true.
62     type: comma_delimited_list
63   CinderPassword:
64     default: unset
65     description: The password for the cinder service and db account, used by cinder-api.
66     type: string
67     hidden: true
68   CloudName:
69     default: ''
70     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
71     type: string
72   ControllerExtraConfig:
73     default: {}
74     description: |
75       Controller specific configuration to inject into the cluster. Same
76       structure as ExtraConfig.
77     type: json
78   ControlVirtualInterface:
79     default: 'br-ex'
80     description: Interface where virtual ip will be assigned.
81     type: string
82   Debug:
83     default: ''
84     description: Set to True to enable debugging on all services.
85     type: string
86   EnableFencing:
87     default: false
88     description: Whether to enable fencing in Pacemaker or not.
89     type: boolean
90   EnableGalera:
91     default: true
92     description: Whether to use Galera instead of regular MariaDB.
93     type: boolean
94   EnableCephStorage:
95     default: false
96     description: Whether to deploy Ceph Storage (OSD) on the Controller
97     type: boolean
98   EnableSwiftStorage:
99     default: true
100     description: Whether to enable Swift Storage on the Controller
101     type: boolean
102   ExtraConfig:
103     default: {}
104     description: |
105       Additional configuration to inject into the cluster. The JSON should have
106       the following structure:
107         {"FILEKEY":
108           {"config":
109             [{"section": "SECTIONNAME",
110               "values":
111                 [{"option": "OPTIONNAME",
112                   "value": "VALUENAME"
113                  }
114                 ]
115              }
116             ]
117           }
118         }
119       For instance:
120         {"nova":
121           {"config":
122             [{"section": "default",
123               "values":
124                 [{"option": "compute_manager",
125                   "value": "ironic.nova.compute.manager.ClusterComputeManager"
126                  }
127                 ]
128              },
129              {"section": "cells",
130               "values":
131                 [{"option": "driver",
132                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
133                  }
134                 ]
135              }
136             ]
137           }
138         }
139     type: json
140   FencingConfig:
141     default: {}
142     description: |
143       Pacemaker fencing configuration. The JSON should have
144       the following structure:
145         {
146           "devices": [
147             {
148               "agent": "AGENT_NAME",
149               "host_mac": "HOST_MAC_ADDRESS",
150               "params": {"PARAM_NAME": "PARAM_VALUE"}
151             }
152           ]
153         }
154       For instance:
155         {
156           "devices": [
157             {
158               "agent": "fence_xvm",
159               "host_mac": "52:54:00:aa:bb:cc",
160               "params": {
161                 "multicast_address": "225.0.0.12",
162                 "port": "baremetal_0",
163                 "manage_fw": true,
164                 "manage_key_file": true,
165                 "key_file": "/etc/fence_xvm.key",
166                 "key_file_password": "abcdef"
167               }
168             }
169           ]
170         }
171     type: json
172   Flavor:
173     description: Flavor for control nodes to request when deploying.
174     type: string
175     constraints:
176       - custom_constraint: nova.flavor
177   GlanceNotifierStrategy:
178     description: Strategy to use for Glance notification queue
179     type: string
180     default: noop
181   GlanceLogFile:
182     description: The filepath of the file to use for logging messages from Glance.
183     type: string
184     default: ''
185   GlancePassword:
186     default: unset
187     description: The password for the glance service and db account, used by the glance services.
188     type: string
189     hidden: true
190   GlancePort:
191     default: "9292"
192     description: Glance port.
193     type: string
194   GlanceProtocol:
195     default: http
196     description: Protocol to use when connecting to glance, set to https for SSL.
197     type: string
198   GlanceBackend:
199     default: swift
200     description: The short name of the Glance backend to use. Should be one
201       of swift, rbd, or file
202     type: string
203     constraints:
204     - allowed_values: ['swift', 'file', 'rbd']
205   HeatPassword:
206     default: unset
207     description: The password for the Heat service and db account, used by the Heat services.
208     type: string
209     hidden: true
210   HeatStackDomainAdminPassword:
211     description: Password for heat_domain_admin user.
212     type: string
213     default: ''
214     hidden: true
215   HeatAuthEncryptionKey:
216     description: Auth encryption key for heat-engine
217     type: string
218   HorizonSecret:
219     description: Secret key for Django
220     type: string
221   Image:
222     type: string
223     default: overcloud-control
224     constraints:
225       - custom_constraint: glance.image
226   ImageUpdatePolicy:
227     default: 'REBUILD_PRESERVE_EPHEMERAL'
228     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
229     type: string
230   KeyName:
231     default: default
232     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
233     type: string
234     constraints:
235       - custom_constraint: nova.keypair
236   KeystoneCACertificate:
237     default: ''
238     description: Keystone self-signed certificate authority certificate.
239     type: string
240   KeystoneSigningCertificate:
241     default: ''
242     description: Keystone certificate for verifying token validity.
243     type: string
244   KeystoneSigningKey:
245     default: ''
246     description: Keystone key for signing tokens.
247     type: string
248     hidden: true
249   KeystoneSSLCertificate:
250     default: ''
251     description: Keystone certificate for verifying token validity.
252     type: string
253   KeystoneSSLCertificateKey:
254     default: ''
255     description: Keystone key for signing tokens.
256     type: string
257     hidden: true
258   KeystoneNotificationDriver:
259     description: Comma-separated list of Oslo notification drivers used by Keystone
260     default: ['messaging']
261     type: comma_delimited_list
262   KeystoneNotificationFormat:
263     description: The Keystone notification format
264     default: 'basic'
265     type: string
266     constraints:
267       - allowed_values: [ 'basic', 'cadf' ]
268   MysqlClusterUniquePart:
269     description: A unique identifier of the MySQL cluster the controller is in.
270     type: string
271     default: 'unset'  # Has to be here because of the ignored empty value bug
272     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
273     # constraints:
274     # - length: {min: 4, max: 10}
275   MysqlInnodbBufferPoolSize:
276     description: >
277         Specifies the size of the buffer pool in megabytes. Setting to
278         zero should be interpreted as "no value" and will defer to the
279         lower level default.
280     type: number
281     default: 0
282   MysqlMaxConnections:
283     description: Configures MySQL max_connections config setting
284     type: number
285     default: 4096
286   MysqlRootPassword:
287     type: string
288     hidden: true
289     default: ''  # Has to be here because of the ignored empty value bug
290   NeutronExternalNetworkBridge:
291     description: Name of bridge used for external network traffic.
292     type: string
293     default: 'br-ex'
294   NeutronBridgeMappings:
295     description: >
296       The OVS logical->physical bridge mappings to use. See the Neutron
297       documentation for details. Defaults to mapping br-ex - the external
298       bridge on hosts - to a physical name 'datacentre' which can be used
299       to create provider networks (and we use this for the default floating
300       network) - if changing this either use different post-install network
301       scripts or be sure to keep 'datacentre' as a mapping network name.
302     type: string
303     default: "datacentre:br-ex"
304   NeutronDnsmasqOptions:
305     default: 'dhcp-option-force=26,1400'
306     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the gre tunnel overhead.
307     type: string
308   NeutronAgentMode:
309     default: 'dvr_snat'
310     description: Agent mode for the neutron-l3-agent on the controller hosts
311     type: string
312   NeutronDVR:
313     default: 'False'
314     description: Whether to configure Neutron Distributed Virtual Routers
315     type: string
316   NeutronMetadataProxySharedSecret:
317     default: 'unset'
318     description: Shared secret to prevent spoofing
319     type: string
320   NeutronMechanismDrivers:
321     default: 'openvswitch'
322     description: |
323         The mechanism drivers for the Neutron tenant network. To specify multiple
324         values, use a comma separated string, like so: 'openvswitch,l2_population'
325     type: string
326   NeutronAllowL3AgentFailover:
327     default: 'True'
328     description: Allow automatic l3-agent failover
329     type: string
330   NeutronL3HA:
331     default: 'False'
332     description: Whether to enable l3-agent HA
333     type: string
334   NeutronDhcpAgentsPerNetwork:
335     type: number
336     default: 3
337     description: The number of neutron dhcp agents to schedule per network
338   NeutronEnableTunnelling:
339     type: string
340     default: "True"
341   NeutronFlatNetworks:
342     type: string
343     default: 'datacentre'
344     description: If set, flat networks to configure in neutron plugins.
345   NeutronNetworkType:
346     default: 'gre'
347     description: The tenant network type for Neutron, either gre or vxlan.
348     type: string
349   NeutronNetworkVLANRanges:
350     default: 'datacentre'
351     description: >
352       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
353       Neutron documentation for permitted values. Defaults to permitting any
354       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
355     type: comma_delimited_list
356   NeutronPassword:
357     default: unset
358     description: The password for the neutron service and db account, used by neutron agents.
359     type: string
360     hidden: true
361   NeutronPublicInterface:
362     default: nic1
363     description: What interface to bridge onto br-ex for network nodes.
364     type: string
365   NeutronPublicInterfaceTag:
366     default: ''
367     description: >
368       VLAN tag for creating a public VLAN. The tag will be used to
369       create an access port on the exterior bridge for each control plane node,
370       and that port will be given the IP address returned by neutron from the
371       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
372       overcloud.yaml to include the deployment of VLAN ports to the control
373       plane.
374     type: string
375   NeutronPublicInterfaceDefaultRoute:
376     default: ''
377     description: A custom default route for the NeutronPublicInterface.
378     type: string
379   NeutronPublicInterfaceIP:
380     default: ''
381     description: A custom IP address to put onto the NeutronPublicInterface.
382     type: string
383   NeutronPublicInterfaceRawDevice:
384     default: ''
385     description: If set, the public interface is a vlan with this device as the raw device.
386     type: string
387   NeutronTunnelTypes:
388     default: 'gre'
389     description: |
390         The tunnel types for the Neutron tenant network. To specify multiple
391         values, use a comma separated string, like so: 'gre,vxlan'
392     type: string
393   NeutronTunnelIdRanges:
394     description: |
395         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
396         of GRE tunnel IDs that are available for tenant network allocation
397     default: ["1:1000", ]
398     type: comma_delimited_list
399   NeutronVniRanges:
400     description: |
401         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
402         of VXLAN VNI IDs that are available for tenant network allocation
403     default: ["1:1000", ]
404     type: comma_delimited_list
405   NovaPassword:
406     default: unset
407     description: The password for the nova service and db account, used by nova-api.
408     type: string
409     hidden: true
410   MongoDbNoJournal:
411     default: false
412     description: Should MongoDb journaling be disabled
413     type: boolean
414   NtpServer:
415     type: string
416     default: ''
417   PcsdPassword:
418     type: string
419     description: The password for the 'pcsd' user.
420   PublicVirtualInterface:
421     default: 'br-ex'
422     description: >
423         Specifies the interface where the public-facing virtual ip will be assigned.
424         This should be int_public when a VLAN is being used.
425     type: string
426   PublicVirtualIP:
427     type: string
428     default: ''  # Has to be here because of the ignored empty value bug
429   RabbitCookie:
430     type: string
431     default: ''  # Has to be here because of the ignored empty value bug
432     hidden: true
433   RabbitPassword:
434     default: guest
435     description: The password for RabbitMQ
436     type: string
437     hidden: true
438   RabbitUserName:
439     default: guest
440     description: The username for RabbitMQ
441     type: string
442   RabbitClientUseSSL:
443     default: false
444     description: >
445         Rabbit client subscriber parameter to specify
446         an SSL connection to the RabbitMQ host.
447     type: string
448   RabbitClientPort:
449     default: 5672
450     description: Set rabbit subscriber port, change this if using SSL
451     type: number
452   RedisVirtualIP:
453     type: string
454     default: ''  # Has to be here because of the ignored empty value bug
455   SnmpdReadonlyUserName:
456     default: ro_snmp_user
457     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
458     type: string
459   SnmpdReadonlyUserPassword:
460     default: unset
461     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
462     type: string
463     hidden: true
464   SSLCACertificate:
465     default: ''
466     description: If set, the contents of an SSL certificate authority file.
467     type: string
468   SSLCertificate:
469     default: ''
470     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
471     type: string
472     hidden: true
473   SSLKey:
474     default: ''
475     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
476     type: string
477     hidden: true
478   SwiftHashSuffix:
479     default: unset
480     description: A random string to be used as a salt when hashing to determine mappings
481       in the ring.
482     hidden: true
483     type: string
484   SwiftMountCheck:
485     default: 'false'
486     description: Value of mount_check in Swift account/container/object -server.conf
487     type: boolean
488   SwiftMinPartHours:
489     type: number
490     default: 1
491     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
492   SwiftPartPower:
493     default: 10
494     description: Partition Power to use when building Swift rings
495     type: number
496   SwiftPassword:
497     default: unset
498     description: The password for the swift service account, used by the swift proxy
499       services.
500     hidden: true
501     type: string
502   SwiftReplicas:
503     type: number
504     default: 3
505     description: How many replicas to use in the swift rings.
506   VirtualIP:
507     type: string
508     default: ''  # Has to be here because of the ignored empty value bug
509   HeatApiVirtualIP:
510     type: string
511     default: ''
512   GlanceApiVirtualIP:
513     type: string
514     default: ''
515   MysqlVirtualIP:
516     type: string
517     default: ''
518   KeystoneAdminApiVirtualIP:
519     type: string
520     default: ''
521   KeystonePublicApiVirtualIP:
522     type: string
523     default: ''
524   NeutronApiVirtualIP:
525     type: string
526     default: ''
527   ServiceNetMap:
528     default: {}
529     description: Mapping of service_name -> network name. Typically set
530                  via parameter_defaults in the resource registry.
531     type: json
532   UpdateIdentifier:
533     default: ''
534     type: string
535     description: >
536       Setting to a previously unused value during stack-update will trigger
537       package update on all nodes
538   Hostname:
539     type: string
540     default: '' # Defaults to Heat created hostname
541
542 resources:
543
544   Controller:
545     type: OS::Nova::Server
546     properties:
547       image: {get_param: Image}
548       image_update_policy: {get_param: ImageUpdatePolicy}
549       flavor: {get_param: Flavor}
550       key_name: {get_param: KeyName}
551       networks:
552         - network: ctlplane
553       user_data_format: SOFTWARE_CONFIG
554       user_data: {get_resource: NodeUserData}
555       name: {get_param: Hostname}
556
557   NodeUserData:
558     type: OS::TripleO::NodeUserData
559
560   ExternalPort:
561     type: OS::TripleO::Controller::Ports::ExternalPort
562     properties:
563       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
564
565   InternalApiPort:
566     type: OS::TripleO::Controller::Ports::InternalApiPort
567     properties:
568       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
569
570   StoragePort:
571     type: OS::TripleO::Controller::Ports::StoragePort
572     properties:
573       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
574
575   StorageMgmtPort:
576     type: OS::TripleO::Controller::Ports::StorageMgmtPort
577     properties:
578       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
579
580   TenantPort:
581     type: OS::TripleO::Controller::Ports::TenantPort
582     properties:
583       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
584
585   NetworkConfig:
586     type: OS::TripleO::Controller::Net::SoftwareConfig
587     properties:
588       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
589       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
590       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
591       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
592       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
593
594   NetworkDeployment:
595     type: OS::TripleO::SoftwareDeployment
596     properties:
597       signal_transport: NO_SIGNAL
598       config: {get_resource: NetworkConfig}
599       server: {get_resource: Controller}
600       input_values:
601         bridge_name: br-ex
602         interface_name: {get_param: NeutronPublicInterface}
603
604   ControllerPassthroughConfig:
605     type: OS::Heat::StructuredConfig
606     properties:
607       group: os-apply-config
608       config: {get_input: passthrough_config}
609
610   ControllerPassthroughConfigSpecific:
611     type: OS::Heat::StructuredConfig
612     properties:
613       group: os-apply-config
614       config: {get_input: passthrough_config_specific}
615
616   ControllerConfig:
617     type: OS::Heat::StructuredConfig
618     properties:
619       group: os-apply-config
620       config:
621         admin-password: {get_input: admin_password}
622         admin-token: {get_input: admin_token}
623         bootstack:
624           public_interface_ip: {get_input: neutron_public_interface_ip}
625         bootstrap_host:
626           nodeid: {get_input: bootstack_nodeid}
627         cinder:
628           db: {get_input: cinder_dsn}
629           debug: {get_input: debug}
630           volume_size_mb: {get_input: cinder_lvm_loop_device_size}
631           service-password: {get_input: cinder_password}
632           iscsi-helper: {get_input: CinderISCSIHelper}
633         controller-address: {get_input: controller_host}
634         corosync:
635           bindnetaddr: {get_input: controller_host}
636           mcastport: 5577
637         pacemaker:
638           stonith_enabled : false
639           recheck_interval : 5
640           quorum_policy : ignore
641         db-password: unset
642         glance:
643           registry:
644             host: {get_input: controller_virtual_ip}
645           backend: swift
646           db: {get_input: glance_dsn}
647           debug: {get_input: debug}
648           host: {get_input: controller_virtual_ip}
649           port: {get_input: glance_port}
650           protocol: {get_input: glance_protocol}
651           service-password: {get_input: glance_password}
652           swift-store-user: service:glance
653           swift-store-key: {get_input: glance_password}
654           notifier-strategy: {get_input: glance_notifier_strategy}
655           log-file: {get_input: glance_log_file}
656         heat:
657           admin_password: {get_input: heat_password}
658           admin_tenant_name: service
659           admin_user: heat
660           auth_encryption_key: {get_input: heat_auth_encryption_key}
661           db: {get_input: heat_dsn}
662           debug: {get_input: debug}
663           stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
664           watch_server_url: {get_input: heat.watch_server_url}
665           metadata_server_url: {get_input: heat.metadata_server_url}
666           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
667         keystone:
668           db: {get_input: keystone_dsn}
669           debug: {get_input: debug}
670           host: {get_input: controller_virtual_ip}
671           ca_certificate: {get_input: keystone_ca_certificate}
672           signing_key: {get_input: keystone_signing_key}
673           signing_certificate: {get_input: keystone_signing_certificate}
674           ssl:
675               certificate: {get_input: keystone_ssl_certificate}
676               certificate_key: {get_input: keystone_ssl_certificate_key}
677         mysql:
678           innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
679           local_bind: true
680           root-password: {get_input: mysql_root_password}
681           cluster_name: {get_input: mysql_cluster_name}
682         neutron:
683           debug: {get_input: debug}
684           flat-networks: {get_input: neutron_flat_networks}
685           host: {get_input: controller_virtual_ip}
686           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
687           agent_mode: {get_input: neutron_agent_mode}
688           router_distributed: {get_input: neutron_router_distributed}
689           mechanism_drivers: {get_input: neutron_mechanism_drivers}
690           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
691           l3_ha: {get_input: neutron_l3_ha}
692           dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
693           ovs:
694             enable_tunneling: {get_input: neutron_enable_tunneling}
695             local_ip: {get_input: controller_host}
696             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
697             bridge_mappings: {get_input: neutron_bridge_mappings}
698             public_interface: {get_input: neutron_public_interface}
699             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
700             public_interface_route: {get_input: neutron_public_interface_default_route}
701             public_interface_tag: {get_input: neutron_public_interface_tag}
702             physical_bridge: br-ex
703             tenant_network_type: {get_input: neutron_tenant_network_type}
704             tunnel_types: {get_input: neutron_tunnel_types}
705             tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
706             vni_ranges: {get_input: neutron_vni_ranges}
707           ovs_db: {get_input: neutron_dsn}
708           service-password: {get_input: neutron_password}
709           dnsmasq-options: {get_input: neutron_dnsmasq_options}
710         ceilometer:
711           db: {get_input: ceilometer_dsn}
712           debug: {get_input: debug}
713           metering_secret: {get_input: ceilometer_metering_secret}
714           service-password: {get_input: ceilometer_password}
715         snmpd:
716           export_MIB: UCD-SNMP-MIB
717           readonly_user_name: {get_input: snmpd_readonly_user_name}
718           readonly_user_password: {get_input: snmpd_readonly_user_password}
719         nova:
720           compute_driver: libvirt.LibvirtDriver
721           db: {get_input: nova_dsn}
722           default_floating_pool:
723             ext-net
724           host: {get_input: controller_virtual_ip}
725           metadata-proxy: true
726           service-password: {get_input: nova_password}
727         mongodb:
728           nojournal: {get_input: mongodb_no_journal}
729         rabbit:
730           host: {get_input: controller_virtual_ip}
731           username: {get_input: rabbit_username}
732           password: {get_input: rabbit_password}
733           cookie: {get_input: rabbit_cookie}
734           rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
735           rabbit_port: {get_input: rabbit_client_port}
736         ntp:
737           servers:
738               - {server: {get_input: ntp_server}}
739         virtual_interfaces:
740           instances:
741             - vrrp_instance_name: VI_CONTROL
742               virtual_router_id: 51
743               keepalive_interface: {get_input: control_virtual_interface}
744               priority: 101
745               virtual_ips:
746               - ip: {get_input: controller_virtual_ip}
747                 interface: {get_input: control_virtual_interface}
748             - vrrp_instance_name: VI_PUBLIC
749               virtual_router_id: 52
750               keepalive_interface: {get_input: public_virtual_interface}
751               priority: 101
752               virtual_ips:
753               - ip: {get_input: public_virtual_ip}
754                 interface: {get_input: public_virtual_interface}
755           vrrp_sync_groups:
756             - name: VG1
757               members:
758                 - VI_CONTROL
759                 - VI_PUBLIC
760         keepalived:
761           keepalive_interface: {get_input: public_virtual_interface}
762           priority: 101
763         virtual_ips:
764             -
765               ip: {get_input: controller_virtual_ip}
766               interface: {get_input: control_virtual_interface}
767             -
768               ip: {get_input: public_virtual_ip}
769               interface: {get_input: public_virtual_interface}
770         haproxy:
771           net_binds:
772             - ip: {get_input: controller_virtual_ip}
773           options:
774             - option httpchk GET /
775           services:
776             - name: keystone_admin
777               port: 35357
778               net_binds: &public_binds
779                 - ip: {get_input: controller_virtual_ip}
780                 - ip: {get_input: public_virtual_ip}
781             - name: keystone_public
782               port: 5000
783               net_binds: *public_binds
784             - name: horizon
785               port: 80
786               net_binds: *public_binds
787             - name: neutron
788               port: 9696
789               net_binds: *public_binds
790             - name: cinder
791               port: 8776
792               net_binds: *public_binds
793             - name: glance_api
794               port: 9292
795               net_binds: *public_binds
796             - name: glance_registry
797               port: 9191
798               net_binds: *public_binds
799               options: # overwrite options as glace_reg needs auth for http req
800             - name: heat_api
801               port: 8004
802               net_binds: *public_binds
803             - name: heat_cloudwatch
804               port: 8003
805               net_binds: *public_binds
806             - name: heat_cfn
807               port: 8000
808               net_binds: *public_binds
809             - name: mysql
810               port: 3306
811               extra_server_params:
812                 - backup
813               options:
814                 - timeout client 0
815                 - timeout server 0
816             - name: nova_ec2
817               port: 8773
818             - name: nova_osapi
819               port: 8774
820               net_binds: *public_binds
821             - name: nova_metadata
822               port: 8775
823               net_binds: *public_binds
824             - name: nova_novncproxy
825               port: 6080
826               net_binds: *public_binds
827             - name: ceilometer
828               port: 8777
829               net_binds: *public_binds
830               options: # overwrite options as ceil needs auth for http req
831             - name: swift_proxy_server
832               port: 8080
833               net_binds: *public_binds
834               options:
835                 - option httpchk GET /info
836             - name: rabbitmq
837               port: 5672
838               options:
839                 - timeout client 0
840                 - timeout server 0
841                 - maxconn 1500
842
843   ControllerDeployment:
844     type: OS::TripleO::SoftwareDeployment
845     properties:
846       signal_transport: NO_SIGNAL
847       config: {get_resource: ControllerConfig}
848       server: {get_resource: Controller}
849       input_values:
850         bootstack_nodeid: {get_attr: [Controller, name]}
851         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
852         controller_virtual_ip: {get_param: VirtualIP}
853         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
854         heat.watch_server_url:
855           list_join:
856             - ''
857             - - 'http://'
858               - {get_param: VirtualIP}
859               - ':8003'
860         heat.metadata_server_url:
861           list_join:
862             - ''
863             - - 'http://'
864               - {get_param: VirtualIP}
865               - ':8000'
866         heat.waitcondition_server_url:
867           list_join:
868             - ''
869             - - 'http://'
870               - {get_param: VirtualIP}
871               - ':8000/v1/waitcondition'
872         admin_password: {get_param: AdminPassword}
873         admin_token: {get_param: AdminToken}
874         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
875         debug: {get_param: Debug}
876         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
877         cinder_password: {get_param: CinderPassword}
878         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
879         cinder_dsn:
880           list_join:
881             - ''
882             - - 'mysql://cinder:'
883               - {get_param: CinderPassword}
884               - '@'
885               - {get_param: VirtualIP}
886               - '/cinder'
887         glance_port: {get_param: GlancePort}
888         glance_protocol: {get_param: GlanceProtocol}
889         glance_password: {get_param: GlancePassword}
890         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
891         glance_log_file: {get_param: GlanceLogFile}
892         glance_dsn:
893           list_join:
894             - ''
895             - - 'mysql://glance:'
896               - {get_param: GlancePassword}
897               - '@'
898               - {get_param: VirtualIP}
899               - '/glance'
900         heat_password: {get_param: HeatPassword}
901         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
902         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
903         heat_dsn:
904           list_join:
905             - ''
906             - - 'mysql://heat:'
907               - {get_param: HeatPassword}
908               - '@'
909               - {get_param: VirtualIP}
910               - '/heat'
911         keystone_ca_certificate: {get_param: KeystoneCACertificate}
912         keystone_signing_key: {get_param: KeystoneSigningKey}
913         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
914         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
915         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
916         keystone_dsn:
917           list_join:
918             - ''
919             - - 'mysql://keystone:'
920               - {get_param: AdminToken}
921               - '@'
922               - {get_param: VirtualIP}
923               - '/keystone'
924         mongodb_no_journal: {get_param: MongoDbNoJournal}
925         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
926         mysql_root_password: {get_param: MysqlRootPassword}
927         mysql_cluster_name:
928           str_replace:
929             template: tripleo-CLUSTER
930             params:
931               CLUSTER: {get_param: MysqlClusterUniquePart}
932         neutron_flat_networks: {get_param: NeutronFlatNetworks}
933         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
934         neutron_agent_mode: {get_param: NeutronAgentMode}
935         neutron_router_distributed: {get_param: NeutronDVR}
936         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
937         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
938         neutron_l3_ha: {get_param: NeutronL3HA}
939         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
940         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
941         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
942         neutron_public_interface: {get_param: NeutronPublicInterface}
943         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
944         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
945         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
946         neutron_tenant_network_type: {get_param: NeutronNetworkType}
947         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
948         neutron_tunnel_id_ranges:
949           str_replace:
950             template: "['RANGES']"
951             params:
952               RANGES:
953                 list_join:
954                 - "','"
955                 - {get_param: NeutronTunnelIdRanges}
956         neutron_vni_ranges:
957           str_replace:
958             template: "['RANGES']"
959             params:
960               RANGES:
961                 list_join:
962                 - "','"
963                 - {get_param: NeutronVniRanges}
964         neutron_password: {get_param: NeutronPassword}
965         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
966         neutron_dsn:
967           list_join:
968             - ''
969             - - 'mysql://neutron:'
970               - {get_param: NeutronPassword}
971               - '@'
972               - {get_param: VirtualIP}
973               - '/ovs_neutron?charset=utf8'
974         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
975         ceilometer_password: {get_param: CeilometerPassword}
976         ceilometer_dsn:
977           list_join:
978             - ''
979             - - 'mysql://ceilometer:'
980               - {get_param: CeilometerPassword}
981               - '@'
982               - {get_param: VirtualIP}
983               - '/ceilometer'
984         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
985         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
986         nova_password: {get_param: NovaPassword}
987         nova_dsn:
988           list_join:
989             - ''
990             - - 'mysql://nova:'
991               - {get_param: NovaPassword}
992               - '@'
993               - {get_param: VirtualIP}
994               - '/nova'
995         rabbit_username: {get_param: RabbitUserName}
996         rabbit_password: {get_param: RabbitPassword}
997         rabbit_cookie: {get_param: RabbitCookie}
998         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
999         rabbit_client_port: {get_param: RabbitClientPort}
1000         ntp_server: {get_param: NtpServer}
1001         control_virtual_interface: {get_param: ControlVirtualInterface}
1002         public_virtual_interface: {get_param: PublicVirtualInterface}
1003         public_virtual_ip: {get_param: PublicVirtualIP}
1004
1005   SSLConfig:
1006     type: OS::Heat::StructuredConfig
1007     properties:
1008       group: os-apply-config
1009       config:
1010         ssl:
1011           ca_certificate: {get_input: ssl_ca_certificate}
1012         stunnel:
1013           cert: {get_input: ssl_certificate}
1014           key: {get_input: ssl_key}
1015           cacert: {get_input: ssl_ca_certificate}
1016           ports:
1017            - name: 'ec2'
1018              accept: 13773
1019              connect: 8773
1020              connect_host: {get_input: controller_host}
1021            - name: 'image'
1022              accept: 13292
1023              connect: 9292
1024              connect_host: {get_input: controller_host}
1025            - name: 'identity'
1026              accept: 13000
1027              connect: 5000
1028              connect_host: {get_input: controller_host}
1029            - name: 'network'
1030              accept: 13696
1031              connect: 9696
1032              connect_host: {get_input: controller_host}
1033            - name: 'compute'
1034              accept: 13774
1035              connect: 8774
1036              connect_host: {get_input: controller_host}
1037            - name: 'swift-proxy'
1038              accept: 13080
1039              connect: 8080
1040              connect_host: {get_input: controller_host}
1041            - name: 'cinder'
1042              accept: 13776
1043              connect: 8776
1044              connect_host: {get_input: controller_host}
1045            - name: 'ceilometer'
1046              accept: 13777
1047              connect: 8777
1048              connect_host: {get_input: controller_host}
1049
1050   ControllerSSLDeployment:
1051     type: OS::Heat::StructuredDeployment
1052     properties:
1053       config: {get_resource: SSLConfig}
1054       server: {get_resource: Controller}
1055       signal_transport: NO_SIGNAL
1056       input_values:
1057         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
1058         ssl_certificate: {get_param: SSLCertificate}
1059         ssl_key: {get_param: SSLKey}
1060         ssl_ca_certificate: {get_param: SSLCACertificate}
1061
1062   ControllerPassthroughDeployment:
1063     type: OS::Heat::StructuredDeployment
1064     properties:
1065       config: {get_resource: ControllerPassthroughConfig}
1066       server: {get_resource: Controller}
1067       signal_transport: NO_SIGNAL
1068       input_values:
1069         passthrough_config: {get_param: ExtraConfig}
1070
1071   ControllerPassthroughSpecificDeployment:
1072     depends_on: [ControllerPassthroughDeployment]
1073     type: OS::Heat::StructuredDeployment
1074     properties:
1075       config: {get_resource: ControllerPassthroughConfigSpecific}
1076       server: {get_resource: Controller}
1077       signal_transport: NO_SIGNAL
1078       input_values:
1079         passthrough_config_specific: {get_param: ControllerExtraConfig}
1080
1081   SwiftConfig:
1082     type: OS::Heat::StructuredConfig
1083     properties:
1084       group: os-apply-config
1085       config:
1086         swift:
1087           hash: { get_input: swift_hash_suffix }
1088           part-power: { get_input: swift_part_power }
1089           mount-check: { get_input: swift_mount_check }
1090           min-part-hours: { get_input: swift_min_part_hours }
1091           replicas: {get_input: swift_replicas }
1092           service-password: { get_input: swift_password }
1093
1094   SwiftStorageDeploy:
1095     type: OS::Heat::StructuredDeployment
1096     properties:
1097       server: {get_resource: Controller}
1098       config: {get_resource: SwiftConfig}
1099       signal_transport: NO_SIGNAL
1100       input_values:
1101         swift_hash_suffix: {get_param: SwiftHashSuffix}
1102         swift_mount_check: {get_param: SwiftMountCheck}
1103         swift_password: {get_param: SwiftPassword}
1104         swift_min_part_hours: {get_param: SwiftMinPartHours}
1105         swift_part_power: {get_param: SwiftPartPower}
1106         swift_replicas: { get_param: SwiftReplicas}
1107
1108 outputs:
1109   ip_address:
1110     description: IP address of the server in the ctlplane network
1111     value: {get_attr: [Controller, networks, ctlplane, 0]}
1112   external_ip_address:
1113     description: IP address of the server in the external network
1114     value: {get_attr: [ExternalPort, ip_address]}
1115   internal_api_ip_address:
1116     description: IP address of the server in the internal_api network
1117     value: {get_attr: [InternalApiPort, ip_address]}
1118   storage_ip_address:
1119     description: IP address of the server in the storage network
1120     value: {get_attr: [StoragePort, ip_address]}
1121   storage_mgmt_ip_address:
1122     description: IP address of the server in the storage_mgmt network
1123     value: {get_attr: [StorageMgmtPort, ip_address]}
1124   tenant_ip_address:
1125     description: IP address of the server in the tenant network
1126     value: {get_attr: [TenantPort, ip_address]}
1127   hostname:
1128     description: Hostname of the server
1129     value: {get_attr: [Controller, name]}
1130   corosync_node:
1131     description: >
1132       Node object in the format {ip: ..., name: ...} format that the corosync
1133       element expects
1134     value:
1135       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1136       name: {get_attr: [Controller, name]}
1137   hosts_entry:
1138     description: >
1139       Server's IP address and hostname in the /etc/hosts format
1140     value:
1141       str_replace:
1142         template: IP HOST CLOUDNAME
1143         params:
1144           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1145           HOST: {get_attr: [Controller, name]}
1146           CLOUDNAME: {get_param: CloudName}
1147   nova_server_resource:
1148     description: Heat resource handle for the Nova compute server
1149     value:
1150       {get_resource: Controller}
1151   swift_device:
1152     description: Swift device formatted for swift-ring-builder
1153     value:
1154       str_replace:
1155         template: 'r1z1-IP:%PORT%/d1'
1156         params:
1157           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1158   swift_proxy_memcache:
1159     description: Swift proxy-memcache value
1160     value:
1161       str_replace:
1162         template: "IP:11211"
1163         params:
1164           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1165   config_identifier:
1166     description: identifier which changes if the node configuration may need re-applying
1167     value: "None - NO_SIGNAL"