30896598f477c5253e29f20d231ac1d542c5e9e6
[apex-tripleo-heat-templates.git] / overcloud-source.yaml
1 description: Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
2   server,Dedicated RabbitMQ Server,Group of Nova Computes
3 heat_template_version: 2013-05-23
4 parameters:
5   AdminPassword:
6     default: unset
7     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
8     type: string
9     hidden: true
10   AdminToken:
11     default: unset
12     description: The keystone auth secret.
13     type: string
14     hidden: true
15   CeilometerComputeAgent:
16     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
17     type: string
18     default: ''
19     constraints:
20     - allowed_values: ['', Present]
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 account.
29     type: string
30     hidden: true
31   CinderISCSIHelper:
32     default: tgtadm
33     description: The iSCSI helper to use with cinder.
34     type: string
35   CinderLVMLoopDeviceSize:
36     default: 5000
37     description: The size of the loopback file used by the cinder LVM driver.
38     type: number
39   CinderPassword:
40     default: unset
41     description: The password for the cinder service account, used by cinder-api.
42     type: string
43     hidden: true
44   CloudName:
45     default: ''
46     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
47     type: string
48   ControlFixedIPs:
49     default: []
50     description: Should be used for arbitrary ips.
51     type: json
52   controllerExtraConfig:
53     default: {}
54     description: |
55       Controller specific configuration to inject into the cluster. Same
56       structure as ExtraConfig.
57     type: json
58   controllerImage:
59     type: string
60     default: overcloud-control
61     constraints:
62       - custom_constraint: glance.image
63   ControlVirtualInterface:
64     default: 'br-ex'
65     description: Interface where virtual ip will be assigned.
66     type: string
67   Debug:
68     default: ''
69     description: Set to True to enable debugging on all services.
70     type: string
71   DefaultSignalTransport:
72     default: CFN_SIGNAL
73     description: Transport to use for software-config signals.
74     type: string
75     constraints:
76       - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
77   ExtraConfig:
78     default: {}
79     description: |
80       Additional configuration to inject into the cluster. The JSON should have
81       the following structure:
82         {"FILEKEY":
83           {"config":
84             [{"section": "SECTIONNAME",
85               "values":
86                 [{"option": "OPTIONNAME",
87                   "value": "VALUENAME"
88                  }
89                 ]
90              }
91             ]
92           }
93         }
94       For instance:
95         {"nova":
96           {"config":
97             [{"section": "default",
98               "values":
99                 [{"option": "force_config_drive",
100                   "value": "always"
101                  }
102                 ]
103              },
104              {"section": "cells",
105               "values":
106                 [{"option": "driver",
107                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
108                  }
109                 ]
110              }
111             ]
112           }
113         }
114     type: json
115   GlanceLogFile:
116     description: The filepath of the file to use for logging messages from Glance.
117     type: string
118     default: ''
119   GlancePassword:
120     default: unset
121     description: The password for the glance service account, used by the glance services.
122     type: string
123     hidden: true
124   GlancePort:
125     default: 9292
126     description: Glance port.
127     type: string
128   GlanceProtocol:
129     default: http
130     description: Protocol to use when connecting to glance, set to https for SSL.
131     type: string
132   GlanceNotifierStrategy:
133     description: Strategy to use for Glance notification queue
134     type: string
135     default: noop
136   HeatPassword:
137     default: unset
138     description: The password for the Heat service account, used by the Heat services.
139     type: string
140     hidden: true
141   HeatStackDomainAdminPassword:
142     description: Password for heat_domain_admin user.
143     type: string
144     default: ''
145     hidden: true
146   HypervisorNeutronPhysicalBridge:
147     default: 'br-ex'
148     description: >
149       An OVS bridge to create on each hypervisor. This defaults to br-ex the
150       same as the control plane nodes, as we have a uniform configuration of
151       the openvswitch agent. Typically should not need to be changed.
152     type: string
153   HypervisorNeutronPublicInterface:
154     default: 'eth0'
155     description: What interface to add to the HypervisorNeutronPhysicalBridge.
156     type: string
157   ImageUpdatePolicy:
158     default: 'REBUILD_PRESERVE_EPHEMERAL'
159     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
160     type: string
161   KeyName:
162     default: default
163     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
164     type: string
165     constraints:
166       - custom_constraint: nova.keypair
167   KeystoneCACertificate:
168     default: ''
169     description: Keystone self-signed certificate authority certificate.
170     type: string
171   KeystoneSigningCertificate:
172     default: ''
173     description: Keystone certificate for verifying token validity.
174     type: string
175   KeystoneSigningKey:
176     default: ''
177     description: Keystone key for signing tokens.
178     type: string
179     hidden: true
180   KeystoneSSLCertificate:
181     default: ''
182     description: Keystone certificate for verifying token validity.
183     type: string
184   KeystoneSSLCertificateKey:
185     default: ''
186     description: Keystone key for signing tokens.
187     type: string
188     hidden: true
189   MysqlInnodbBufferPoolSize:
190     description: >
191         Specifies the size of the buffer pool in megabytes. Setting to
192         zero should be interpreted as "no value" and will defer to the
193         lower level default.
194     type: number
195     default: 0
196   NeutronBridgeMappings:
197     description: >
198       The OVS logical->physical bridge mappings to use. See the Neutron
199       documentation for details. Defaults to mapping br-ex - the external
200       bridge on hosts - to a physical name 'datacentre' which can be used
201       to create provider networks (and we use this for the default floating
202       network) - if changing this either use different post-install network
203       scripts or be sure to keep 'datacentre' as a mapping network name.
204     type: string
205     default: "datacentre:br-ex"
206   NeutronControlPlaneID:
207     default: ''
208     type: string
209     description: Neutron ID for ctlplane network.
210   NeutronDnsmasqOptions:
211     default: 'dhcp-option-force=26,1400'
212     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
213     type: string
214   NeutronFlatNetworks:
215     type: string
216     default: 'datacentre'
217     description: >
218       If set, flat networks to configure in neutron plugins. Defaults to
219       'datacentre' to permit external network creation.
220   NeutronNetworkType:
221     default: 'gre'
222     description: The tenant network type for Neutron, either gre or vxlan.
223     type: string
224   NeutronNetworkVLANRanges:
225     default: 'datacentre'
226     description: >
227       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
228       Neutron documentation for permitted values. Defaults to permitting any
229       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
230     type: string
231   NeutronPassword:
232     default: unset
233     description: The password for the neutron service account, used by neutron agents.
234     type: string
235     hidden: true
236   NeutronPublicInterface:
237     default: eth0
238     description: What interface to bridge onto br-ex for network nodes.
239     type: string
240   NeutronPublicInterfaceDefaultRoute:
241     default: ''
242     description: A custom default route for the NeutronPublicInterface.
243     type: string
244   NeutronPublicInterfaceIP:
245     default: ''
246     description: A custom IP address to put onto the NeutronPublicInterface.
247     type: string
248   NeutronPublicInterfaceRawDevice:
249     default: ''
250     description: If set, the public interface is a vlan with this device as the raw device.
251     type: string
252   NeutronPublicInterfaceTag:
253     default: ''
254     description: >
255       VLAN tag for creating a public VLAN. The tag will be used to
256       create an access port on the exterior bridge for each control plane node,
257       and that port will be given the IP address returned by neutron from the
258       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
259       overcloud.yaml to include the deployment of VLAN ports to the control
260       plane.
261     type: string
262   NeutronComputeAgentMode:
263     default: 'dvr'
264     description: Agent mode for the neutron-l3-agent on the compute hosts
265     type: string
266   NeutronAgentMode:
267     default: 'dvr_snat'
268     description: Agent mode for the neutron-l3-agent on the controller hosts
269     type: string
270   NeutronDVR:
271     default: 'False'
272     description: Whether to configure Neutron Distributed Virtual Routers
273     type: string
274   NeutronMetadataProxySharedSecret:
275     default: 'unset'
276     description: Shared secret to prevent spoofing
277     type: string
278   NeutronTunnelTypes:
279     default: 'gre'
280     description: |
281         The tunnel types for the Neutron tenant network. To specify multiple
282         values, use a comma separated string, like so: 'gre,vxlan'
283     type: string
284   NeutronMechanismDrivers:
285     default: 'openvswitch'
286     description: |
287         The mechanism drivers for the Neutron tenant network. To specify multiple
288         values, use a comma separated string, like so: 'openvswitch,l2_population'
289     type: string
290   NeutronAllowL3AgentFailover:
291     default: 'True'
292     description: Allow automatic l3-agent failover
293     type: string
294   NovaComputeDriver:
295     default: libvirt.LibvirtDriver
296     type: string
297   NovaComputeExtraConfig:
298     default: {}
299     description: |
300       NovaCompute specific configuration to inject into the cluster. Same
301       structure as ExtraConfig.
302     type: json
303   NovaComputeLibvirtType:
304     default: ''
305     type: string
306   NovaImage:
307     type: string
308     default: overcloud-compute
309     constraints:
310       - custom_constraint: glance.image
311   NovaPassword:
312     default: unset
313     description: The password for the nova service account, used by nova-api.
314     type: string
315     hidden: true
316   NtpServer:
317     type: string
318     default: ''
319   OvercloudComputeFlavor:
320     default: baremetal
321     description: Flavor for compute nodes to request when deploying.
322     type: string
323     constraints:
324       - custom_constraint: nova.flavor
325   OvercloudControlFlavor:
326     default: baremetal
327     description: Flavor for control nodes to request when deploying.
328     type: string
329     constraints:
330       - custom_constraint: nova.flavor
331   PublicVirtualFixedIPs:
332     default: []
333     description: >
334         Control the IP allocation for the PublicVirtualInterface port. E.g.
335         [{'ip_address':'1.2.3.4'}]
336     type: json
337   PublicVirtualInterface:
338     default: 'br-ex'
339     description: >
340         Specifies the interface where the public-facing virtual ip will be assigned.
341         This should be int_public when a VLAN is being used.
342     type: string
343   PublicVirtualNetwork:
344     default: 'ctlplane'
345     type: string
346     description: >
347         Neutron network to allocate public virtual IP port on.
348   RabbitCookieSalt:
349     type: string
350     default: unset
351     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
352   RabbitPassword:
353     default: guest
354     description: The password for RabbitMQ
355     type: string
356     hidden: true
357   RabbitUserName:
358     default: guest
359     description: The username for RabbitMQ
360     type: string
361   RabbitClientUseSSL:
362     default: false
363     description: >
364         Rabbit client subscriber parameter to specify
365         an SSL connection to the RabbitMQ host.
366     type: string
367   RabbitClientPort:
368     default: 5672
369     description: Set rabbit subscriber port, change this if using SSL
370     type: number
371   SnmpdReadonlyUserName:
372     default: ro_snmp_user
373     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
374     type: string
375   SnmpdReadonlyUserPassword:
376     default: unset
377     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
378     type: string
379     hidden: true
380 resources:
381   ControlVirtualIP:
382     type: OS::Neutron::Port
383     properties:
384       name: control_virtual_ip
385       network_id: {get_param: NeutronControlPlaneID}
386       fixed_ips:
387         get_param: ControlFixedIPs
388       replacement_policy: AUTO
389   MysqlClusterUniquePart:
390     type: OS::Heat::RandomString
391     properties:
392       length: 10
393   MysqlRootPassword:
394     type: OS::Heat::RandomString
395     properties:
396       length: 10
397   PublicVirtualIP:
398     type: OS::Neutron::Port
399     properties:
400       name: public_virtual_ip
401       network: {get_param: PublicVirtualNetwork}
402       fixed_ips:
403         get_param: PublicVirtualFixedIPs
404       replacement_policy: AUTO
405   RabbitCookie:
406     type: OS::Heat::RandomString
407     properties:
408       length: 20
409       salt:
410         get_param: RabbitCookieSalt
411   NovaCompute0Deployment:
412     type: FileInclude
413     Path: nova-compute-instance.yaml
414     SubKey: resources.NovaCompute0Deployment
415     parameters:
416         DefaultSignalTransport:
417             get_param: DefaultSignalTransport
418         NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
419         KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
420         NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
421         GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
422         RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
423         NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
424         CeilometerDSN:
425           Fn::Join:
426             - ''
427             - - mysql://ceilometer:unset@
428               - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
429               - /ceilometer
430         NeutronDSN:
431           Fn::Join:
432             - ''
433             - - mysql://neutron:unset@
434               - *compute_database_host
435               - /ovs_neutron
436         NeutronNetworkType:
437             get_param: NeutronNetworkType
438         NeutronTunnelTypes:
439             get_param: NeutronTunnelTypes
440         NeutronEnableTunnelling: "True"
441         NeutronFlatNetworks:
442             get_param: NeutronFlatNetworks
443         NeutronNetworkVLANRanges:
444             get_param: NeutronNetworkVLANRanges
445         NeutronPhysicalBridge:
446             get_param: HypervisorNeutronPhysicalBridge
447         NeutronPublicInterface:
448             get_param: HypervisorNeutronPublicInterface
449         NeutronBridgeMappings:
450             get_param: NeutronBridgeMappings
451         NeutronDVR:
452             get_param: NeutronDVR
453         NeutronAgentMode:
454             get_param: NeutronComputeAgentMode
455         NeutronPublicInterfaceRawDevice:
456             get_param: NeutronPublicInterfaceRawDevice
457         NeutronMechanismDrivers:
458             get_param: NeutronMechanismDrivers
459         NeutronAllowL3AgentFailover:
460             get_param: NeutronAllowL3AgentFailover
461   NovaCompute0AllNodesDeployment:
462     type: FileInclude
463     Path: nova-compute-instance.yaml
464     SubKey: resources.NovaCompute0AllNodesDeployment
465     parameters:
466         AllNodesConfig: {get_resource: allNodesConfig}
467   NovaCompute0:
468     type: FileInclude
469     Path: nova-compute-instance.yaml
470     SubKey: resources.NovaCompute0
471   NovaCompute0Passthrough:
472     type: FileInclude
473     Path: nova-compute-instance.yaml
474     SubKey: resources.NovaCompute0Passthrough
475     parameters:
476         passthrough_config: {get_param: ExtraConfig}
477   NovaCompute0PassthroughSpecific:
478     type: FileInclude
479     Path: nova-compute-instance.yaml
480     SubKey: resources.NovaCompute0PassthroughSpecific
481     parameters:
482         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
483   controllerConfig:
484     type: OS::Heat::StructuredConfig
485     properties:
486       group: os-apply-config
487       config:
488         admin-password:
489           get_param: AdminPassword
490         admin-token:
491           get_param: AdminToken
492         bootstack:
493           public_interface_ip:
494             get_param: NeutronPublicInterfaceIP
495         bootstrap_host:
496           bootstrap_nodeid:
497             Fn::Select:
498             - 0
499             - Fn::Select:
500               - 0
501               - Merge::Map:
502                   controller0:
503                   - get_attr:
504                     - controller0
505                     - name
506           nodeid: {get_input: bootstack_nodeid}
507         database:
508           host: &database_host
509             {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
510         cinder:
511           db:
512             Fn::Join:
513               - ''
514               - - mysql://cinder:unset@
515                 - *database_host
516                 - /cinder
517           debug: {get_param: Debug}
518           volume_size_mb:
519             get_param: CinderLVMLoopDeviceSize
520           service-password:
521             get_param: CinderPassword
522           iscsi-helper:
523             get_param: CinderISCSIHelper
524         controller-address:
525           get_input: controller_host
526         corosync:
527           bindnetaddr: {get_input: controller_host}
528           mcastport: 5577
529           nodes:
530             Merge::Map:
531               controller0:
532                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
533         pacemaker:
534           stonith_enabled : false
535           recheck_interval : 5
536           quorum_policy : ignore
537         db-password: unset
538         glance:
539           registry:
540             host: {get_input: controller_virtual_ip}
541           backend: swift
542           db:
543             Fn::Join:
544               - ''
545               - - mysql://glance:unset@
546                 - *database_host
547                 - /glance
548           debug: {get_param: Debug}
549           host:
550             get_input: controller_virtual_ip
551           port:
552             get_param: GlancePort
553           protocol:
554             get_param: GlanceProtocol
555           service-password:
556             get_param: GlancePassword
557           swift-store-user: service:glance
558           swift-store-key:
559             get_param: GlancePassword
560           notifier-strategy:
561             get_param: GlanceNotifierStrategy
562           log-file:
563             get_param: GlanceLogFile
564         heat:
565           admin_password:
566             get_param: HeatPassword
567           admin_tenant_name: service
568           admin_user: heat
569           auth_encryption_key: unset___________
570           db:
571             Fn::Join:
572               - ''
573               - - mysql://heat:unset@
574                 - *database_host
575                 - /heat
576           debug: {get_param: Debug}
577           stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
578           watch_server_url: {get_input: heat.watch_server_url}
579           metadata_server_url: {get_input: heat.metadata_server_url}
580           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
581         horizon:
582           caches:
583             memcached:
584               nodes:
585                 Merge::Map:
586                   controller0:
587                     {get_attr: [controller0, name]}
588         keystone:
589           db:
590             Fn::Join:
591               - ''
592               - - mysql://keystone:unset@
593                 - *database_host
594                 - /keystone
595           debug: {get_param: Debug}
596           host:
597             get_input: controller_virtual_ip
598           ca_certificate: {get_param: KeystoneCACertificate}
599           signing_key: {get_param: KeystoneSigningKey}
600           signing_certificate: {get_param: KeystoneSigningCertificate}
601           ssl:
602               certificate: {get_param: KeystoneSSLCertificate}
603               certificate_key: {get_param: KeystoneSSLCertificateKey}
604         mysql:
605           innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
606           local_bind: true
607           root-password: {get_resource: MysqlRootPassword}
608           nodes:
609             Merge::Map:
610               controller0:
611                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
612           cluster_name:
613             Fn::Join:
614               - '-'
615               - - 'tripleo'
616                 - {get_resource: MysqlClusterUniquePart}
617         neutron:
618           debug: {get_param: Debug}
619           flat-networks: {get_param: NeutronFlatNetworks}
620           host: {get_input: controller_virtual_ip}
621           metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
622           agent_mode: {get_param: NeutronAgentMode}
623           router_distributed: {get_param: NeutronDVR}
624           mechanism_drivers: {get_param: NeutronMechanismDrivers}
625           allow_automatic_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
626           ovs:
627             enable_tunneling: 'True'
628             local_ip:
629               get_input: controller_host
630             network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
631             bridge_mappings: {get_param: NeutronBridgeMappings}
632             public_interface:
633               get_param: NeutronPublicInterface
634             public_interface_raw_device:
635               get_param: NeutronPublicInterfaceRawDevice
636             public_interface_route:
637               get_param: NeutronPublicInterfaceDefaultRoute
638             public_interface_tag:
639               get_param: NeutronPublicInterfaceTag
640             physical_bridge: br-ex
641             tenant_network_type:
642               get_param: NeutronNetworkType
643             tunnel_types:
644               get_param: NeutronTunnelTypes
645           ovs_db:
646             Fn::Join:
647               - ''
648               - - mysql://neutron:unset@
649                 - *database_host
650                 - /ovs_neutron?charset=utf8
651           service-password:
652             get_param: NeutronPassword
653           dnsmasq-options:
654             get_param: NeutronDnsmasqOptions
655         ceilometer:
656           db:
657             Fn::Join:
658               - ''
659               - - mysql://ceilometer:unset@
660                 - *database_host
661                 - /ceilometer
662           debug: {get_param: Debug}
663           metering_secret: {get_param: CeilometerMeteringSecret}
664           service-password:
665             get_param: CeilometerPassword
666         snmpd:
667           export_MIB: UCD-SNMP-MIB
668           readonly_user_name:
669             get_param: SnmpdReadonlyUserName
670           readonly_user_password:
671             get_param: SnmpdReadonlyUserPassword
672         nova:
673           compute_driver: libvirt.LibvirtDriver
674           db:
675             Fn::Join:
676               - ''
677               - - mysql://nova:unset@
678                 - *database_host
679                 - /nova
680           default_floating_pool:
681             ext-net
682           host: {get_input: controller_virtual_ip}
683           metadata-proxy: true
684           service-password:
685             get_param: NovaPassword
686         rabbit:
687           host: {get_input: controller_virtual_ip}
688           username:
689             get_param: RabbitUserName
690           password:
691             get_param: RabbitPassword
692           cookie:
693             get_attr:
694             - RabbitCookie
695             - value
696           rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
697           rabbit_port: {get_param: RabbitClientPort}
698         ntp:
699           servers:
700               - {server: {get_param: NtpServer}, fudge: "stratum 0"}
701         virtual_interfaces:
702           instances:
703             - vrrp_instance_name: VI_CONTROL
704               virtual_router_id: 51
705               keepalive_interface:
706                 get_param: ControlVirtualInterface
707               priority: 101
708               virtual_ips:
709               - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
710                 interface:
711                   get_param: ControlVirtualInterface
712             - vrrp_instance_name: VI_PUBLIC
713               virtual_router_id: 52
714               keepalive_interface:
715                 get_param: PublicVirtualInterface
716               priority: 101
717               virtual_ips:
718               - ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
719                 interface:
720                   get_param: PublicVirtualInterface
721           vrrp_sync_groups:
722             - name: VG1
723               members:
724                 - VI_CONTROL
725                 - VI_PUBLIC
726         keepalived:
727           keepalive_interface:
728             get_param: PublicVirtualInterface
729           priority: 101
730         virtual_ips:
731             -
732               ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
733               interface:
734                 get_param: ControlVirtualInterface
735             -
736               ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
737               interface:
738                 get_param: PublicVirtualInterface
739         haproxy:
740           nodes:
741             Merge::Map:
742               controller0:
743                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
744                 name: {get_attr: [controller0, name]}
745           net_binds:
746             - &control_vip {ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}}
747             - &public_vip {ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}}
748           options:
749             - option httpchk GET /
750           services:
751             - name: keystone_admin
752               port: 35357
753             - name: keystone_public
754               port: 5000
755             - name: horizon
756               port: 80
757             - name: neutron
758               port: 9696
759             - name: cinder
760               port: 8776
761             - name: glance_api
762               port: 9292
763             - name: glance_registry
764               port: 9191
765               options: # overwrite options as glace_reg needs auth for http req
766             - name: heat_api
767               port: 8004
768             - name: heat_cloudwatch
769               port: 8003
770             - name: heat_cfn
771               port: 8000
772             - name: mysql
773               port: 3306
774               net_binds:
775                 - *control_vip
776               extra_server_params:
777                 - backup
778               options:
779                 - timeout client 0
780                 - timeout server 0
781             - name: nova_ec2
782               port: 8773
783             - name: nova_osapi
784               port: 8774
785             - name: nova_metadata
786               port: 8775
787             - name: nova_novncproxy
788               port: 6080
789             - name: ceilometer
790               port: 8777
791               options: # overwrite options as ceil needs auth for http req
792             - name: swift_proxy_server
793               port: 8080
794               options:
795                 - option httpchk GET /info
796             - name: rabbitmq
797               port: 5672
798               net_binds:
799                 - *control_vip
800               options:
801                 - timeout client 0
802                 - timeout server 0
803   controllerPassthrough:
804     type: OS::Heat::StructuredConfig
805     properties:
806       group: os-apply-config
807       config: {get_input: passthrough_config}
808   controllerPassthroughSpecific:
809     type: OS::Heat::StructuredConfig
810     properties:
811       group: os-apply-config
812       config: {get_input: passthrough_config_specific}
813   controller0:
814     type: OS::Nova::Server
815     properties:
816       image:
817         get_param: controllerImage
818       image_update_policy:
819         get_param: ImageUpdatePolicy
820       flavor:
821         get_param: OvercloudControlFlavor
822       key_name:
823         get_param: KeyName
824       networks:
825         - network: ctlplane
826       user_data_format: SOFTWARE_CONFIG
827   controller0AllNodesDeployment:
828     depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0PassthroughSpecific]
829     type: OS::Heat::StructuredDeployment
830     properties:
831       signal_transport: {get_param: DefaultSignalTransport}
832       config: {get_resource: allNodesConfig}
833       server: {get_resource: controller0}
834   controller0Deployment:
835     type: OS::Heat::StructuredDeployment
836     properties:
837       signal_transport: NO_SIGNAL
838       config: {get_resource: controllerConfig}
839       server: {get_resource: controller0}
840       input_values:
841         bootstack_nodeid: {get_attr: [controller0, name]}
842         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
843         controller_virtual_ip:
844           {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
845         heat.watch_server_url:
846           Fn::Join:
847             - ''
848             - - 'http://'
849               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
850               - ':8003'
851         heat.metadata_server_url:
852           Fn::Join:
853             - ''
854             - - 'http://'
855               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
856               - ':8000'
857         heat.waitcondition_server_url:
858           Fn::Join:
859             - ''
860             - - 'http://'
861               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
862               - ':8000/v1/waitcondition'
863   allNodesConfig:
864     type: OS::Heat::StructuredConfig
865     properties:
866       config:
867         completion-signal: {get_input: deploy_signal_id}
868         hosts:
869           Fn::Join:
870           - "\n"
871           - - Fn::Join:
872               - "\n"
873               - Merge::Map:
874                   NovaCompute0:
875                     Fn::Join:
876                     - ' '
877                     - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
878                       - {get_attr: [NovaCompute0, name]}
879                       - Fn::Join:
880                         - '.'
881                         - - {get_attr: [NovaCompute0, name]}
882                           - 'novalocal'
883             - Fn::Join:
884               - "\n"
885               - Merge::Map:
886                   BlockStorage0:
887                     Fn::Join:
888                     - ' '
889                     - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
890                       - {get_attr: [BlockStorage0, name]}
891                       - Fn::Join:
892                         - '.'
893                         - - {get_attr: [BlockStorage0, name]}
894                           - 'novalocal'
895             - Fn::Join:
896               - "\n"
897               - Merge::Map:
898                   SwiftStorage0:
899                     Fn::Join:
900                     - ' '
901                     - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
902                       - {get_attr: [SwiftStorage0, name]}
903                       - Fn::Join:
904                         - '.'
905                         - - {get_attr: [SwiftStorage0, name]}
906                           - 'novalocal'
907             - Fn::Join:
908               - "\n"
909               - Merge::Map:
910                   controller0:
911                     Fn::Join:
912                     - ' '
913                     - - {get_attr: [controller0, networks, ctlplane, 0]}
914                       - {get_attr: [controller0, name]}
915                       - Fn::Join:
916                         - '.'
917                         - - {get_attr: [controller0, name]}
918                           - 'novalocal'
919                       - {get_param: CloudName}
920         rabbit:
921           nodes:
922             Fn::Join:
923               - ','
924               - Merge::Map:
925                   controller0:
926                     {get_attr: [controller0, name]}
927   controller0SSLDeployment:
928     type: OS::Heat::StructuredDeployment
929     properties:
930       config: {get_resource: SSLConfig}
931       server: {get_resource: controller0}
932       signal_transport: NO_SIGNAL
933       input_values:
934         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
935         ssl_certificate: {get_param: SSLCertificate}
936         ssl_key: {get_param: SSLKey}
937         ssl_ca_certificate: {get_param: SSLCACertificate}
938   controller0Passthrough:
939     type: OS::Heat::StructuredDeployment
940     properties:
941       config: {get_resource: controllerPassthrough}
942       server: {get_resource: controller0}
943       signal_transport: NO_SIGNAL
944       input_values:
945         passthrough_config: {get_param: ExtraConfig}
946   controller0PassthroughSpecific:
947     depends_on: [controller0Passthrough]
948     type: OS::Heat::StructuredDeployment
949     properties:
950       config: {get_resource: controllerPassthroughSpecific}
951       server: {get_resource: controller0}
952       signal_transport: NO_SIGNAL
953       input_values:
954         passthrough_config_specific: {get_param: controllerExtraConfig}
955 outputs:
956   KeystoneURL:
957     description: URL for the Overcloud Keystone service
958     value:
959       Fn::Join:
960       - ''
961       - - http://
962         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
963         - :5000/v2.0/