Merge "bump up the number of sesson limit for rabbitmq"
[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         NovaDSN:
424           Fn::Join:
425             - ''
426             - - mysql://nova:unset@
427               - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
428               - /nova
429         NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
430         CeilometerDSN:
431           Fn::Join:
432             - ''
433             - - mysql://ceilometer:unset@
434               - *compute_database_host
435               - /ceilometer
436         NeutronDSN:
437           Fn::Join:
438             - ''
439             - - mysql://neutron:unset@
440               - *compute_database_host
441               - /ovs_neutron
442         NeutronNetworkType:
443             get_param: NeutronNetworkType
444         NeutronTunnelTypes:
445             get_param: NeutronTunnelTypes
446         NeutronEnableTunnelling: "True"
447         NeutronFlatNetworks:
448             get_param: NeutronFlatNetworks
449         NeutronNetworkVLANRanges:
450             get_param: NeutronNetworkVLANRanges
451         NeutronPhysicalBridge:
452             get_param: HypervisorNeutronPhysicalBridge
453         NeutronPublicInterface:
454             get_param: HypervisorNeutronPublicInterface
455         NeutronBridgeMappings:
456             get_param: NeutronBridgeMappings
457         NeutronDVR:
458             get_param: NeutronDVR
459         NeutronAgentMode:
460             get_param: NeutronComputeAgentMode
461         NeutronPublicInterfaceRawDevice:
462             get_param: NeutronPublicInterfaceRawDevice
463         NeutronMechanismDrivers:
464             get_param: NeutronMechanismDrivers
465         NeutronAllowL3AgentFailover:
466             get_param: NeutronAllowL3AgentFailover
467   NovaCompute0AllNodesDeployment:
468     type: FileInclude
469     Path: nova-compute-instance.yaml
470     SubKey: resources.NovaCompute0AllNodesDeployment
471     parameters:
472         AllNodesConfig: {get_resource: allNodesConfig}
473   NovaCompute0:
474     type: FileInclude
475     Path: nova-compute-instance.yaml
476     SubKey: resources.NovaCompute0
477   NovaCompute0Passthrough:
478     type: FileInclude
479     Path: nova-compute-instance.yaml
480     SubKey: resources.NovaCompute0Passthrough
481     parameters:
482         passthrough_config: {get_param: ExtraConfig}
483   NovaCompute0PassthroughSpecific:
484     type: FileInclude
485     Path: nova-compute-instance.yaml
486     SubKey: resources.NovaCompute0PassthroughSpecific
487     parameters:
488         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
489   controllerConfig:
490     type: OS::Heat::StructuredConfig
491     properties:
492       group: os-apply-config
493       config:
494         admin-password:
495           get_param: AdminPassword
496         admin-token:
497           get_param: AdminToken
498         bootstack:
499           public_interface_ip:
500             get_param: NeutronPublicInterfaceIP
501         bootstrap_host:
502           bootstrap_nodeid:
503             Fn::Select:
504             - 0
505             - Fn::Select:
506               - 0
507               - Merge::Map:
508                   controller0:
509                   - get_attr:
510                     - controller0
511                     - name
512           nodeid: {get_input: bootstack_nodeid}
513         database:
514           host: &database_host
515             {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
516         cinder:
517           db:
518             Fn::Join:
519               - ''
520               - - mysql://cinder:unset@
521                 - *database_host
522                 - /cinder
523           debug: {get_param: Debug}
524           volume_size_mb:
525             get_param: CinderLVMLoopDeviceSize
526           service-password:
527             get_param: CinderPassword
528           iscsi-helper:
529             get_param: CinderISCSIHelper
530         controller-address:
531           get_input: controller_host
532         corosync:
533           bindnetaddr: {get_input: controller_host}
534           mcastport: 5577
535           nodes:
536             Merge::Map:
537               controller0:
538                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
539         pacemaker:
540           stonith_enabled : false
541           recheck_interval : 5
542           quorum_policy : ignore
543         db-password: unset
544         glance:
545           registry:
546             host: {get_input: controller_virtual_ip}
547           backend: swift
548           db:
549             Fn::Join:
550               - ''
551               - - mysql://glance:unset@
552                 - *database_host
553                 - /glance
554           debug: {get_param: Debug}
555           host:
556             get_input: controller_virtual_ip
557           port:
558             get_param: GlancePort
559           protocol:
560             get_param: GlanceProtocol
561           service-password:
562             get_param: GlancePassword
563           swift-store-user: service:glance
564           swift-store-key:
565             get_param: GlancePassword
566           notifier-strategy:
567             get_param: GlanceNotifierStrategy
568           log-file:
569             get_param: GlanceLogFile
570         heat:
571           admin_password:
572             get_param: HeatPassword
573           admin_tenant_name: service
574           admin_user: heat
575           auth_encryption_key: unset___________
576           db:
577             Fn::Join:
578               - ''
579               - - mysql://heat:unset@
580                 - *database_host
581                 - /heat
582           debug: {get_param: Debug}
583           stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
584           watch_server_url: {get_input: heat.watch_server_url}
585           metadata_server_url: {get_input: heat.metadata_server_url}
586           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
587         horizon:
588           caches:
589             memcached:
590               nodes:
591                 Merge::Map:
592                   controller0:
593                     {get_attr: [controller0, name]}
594         keystone:
595           db:
596             Fn::Join:
597               - ''
598               - - mysql://keystone:unset@
599                 - *database_host
600                 - /keystone
601           debug: {get_param: Debug}
602           host:
603             get_input: controller_virtual_ip
604           ca_certificate: {get_param: KeystoneCACertificate}
605           signing_key: {get_param: KeystoneSigningKey}
606           signing_certificate: {get_param: KeystoneSigningCertificate}
607           ssl:
608               certificate: {get_param: KeystoneSSLCertificate}
609               certificate_key: {get_param: KeystoneSSLCertificateKey}
610         mysql:
611           innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
612           local_bind: true
613           root-password: {get_resource: MysqlRootPassword}
614           nodes:
615             Merge::Map:
616               controller0:
617                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
618           cluster_name:
619             Fn::Join:
620               - '-'
621               - - 'tripleo'
622                 - {get_resource: MysqlClusterUniquePart}
623         neutron:
624           debug: {get_param: Debug}
625           flat-networks: {get_param: NeutronFlatNetworks}
626           host: {get_input: controller_virtual_ip}
627           metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
628           agent_mode: {get_param: NeutronAgentMode}
629           router_distributed: {get_param: NeutronDVR}
630           mechanism_drivers: {get_param: NeutronMechanismDrivers}
631           allow_automatic_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
632           ovs:
633             enable_tunneling: 'True'
634             local_ip:
635               get_input: controller_host
636             network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
637             bridge_mappings: {get_param: NeutronBridgeMappings}
638             public_interface:
639               get_param: NeutronPublicInterface
640             public_interface_raw_device:
641               get_param: NeutronPublicInterfaceRawDevice
642             public_interface_route:
643               get_param: NeutronPublicInterfaceDefaultRoute
644             public_interface_tag:
645               get_param: NeutronPublicInterfaceTag
646             physical_bridge: br-ex
647             tenant_network_type:
648               get_param: NeutronNetworkType
649             tunnel_types:
650               get_param: NeutronTunnelTypes
651           ovs_db:
652             Fn::Join:
653               - ''
654               - - mysql://neutron:unset@
655                 - *database_host
656                 - /ovs_neutron?charset=utf8
657           service-password:
658             get_param: NeutronPassword
659           dnsmasq-options:
660             get_param: NeutronDnsmasqOptions
661         ceilometer:
662           db:
663             Fn::Join:
664               - ''
665               - - mysql://ceilometer:unset@
666                 - *database_host
667                 - /ceilometer
668           debug: {get_param: Debug}
669           metering_secret: {get_param: CeilometerMeteringSecret}
670           service-password:
671             get_param: CeilometerPassword
672         snmpd:
673           export_MIB: UCD-SNMP-MIB
674           readonly_user_name:
675             get_param: SnmpdReadonlyUserName
676           readonly_user_password:
677             get_param: SnmpdReadonlyUserPassword
678         nova:
679           compute_driver: libvirt.LibvirtDriver
680           db:
681             Fn::Join:
682               - ''
683               - - mysql://nova:unset@
684                 - *database_host
685                 - /nova
686           default_floating_pool:
687             ext-net
688           host: {get_input: controller_virtual_ip}
689           metadata-proxy: true
690           service-password:
691             get_param: NovaPassword
692         rabbit:
693           host: {get_input: controller_virtual_ip}
694           username:
695             get_param: RabbitUserName
696           password:
697             get_param: RabbitPassword
698           cookie:
699             get_attr:
700             - RabbitCookie
701             - value
702           rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
703           rabbit_port: {get_param: RabbitClientPort}
704         ntp:
705           servers:
706               - {server: {get_param: NtpServer}, fudge: "stratum 0"}
707         virtual_interfaces:
708           instances:
709             - vrrp_instance_name: VI_CONTROL
710               virtual_router_id: 51
711               keepalive_interface:
712                 get_param: ControlVirtualInterface
713               priority: 101
714               virtual_ips:
715               - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
716                 interface:
717                   get_param: ControlVirtualInterface
718             - vrrp_instance_name: VI_PUBLIC
719               virtual_router_id: 52
720               keepalive_interface:
721                 get_param: PublicVirtualInterface
722               priority: 101
723               virtual_ips:
724               - ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
725                 interface:
726                   get_param: PublicVirtualInterface
727           vrrp_sync_groups:
728             - name: VG1
729               members:
730                 - VI_CONTROL
731                 - VI_PUBLIC
732         keepalived:
733           keepalive_interface:
734             get_param: PublicVirtualInterface
735           priority: 101
736         virtual_ips:
737             -
738               ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
739               interface:
740                 get_param: ControlVirtualInterface
741             -
742               ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
743               interface:
744                 get_param: PublicVirtualInterface
745         haproxy:
746           nodes:
747             Merge::Map:
748               controller0:
749                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
750                 name: {get_attr: [controller0, name]}
751           net_binds:
752             - &control_vip {ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}}
753             - &public_vip {ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}}
754           options:
755             - option httpchk GET /
756           services:
757             - name: keystone_admin
758               port: 35357
759             - name: keystone_public
760               port: 5000
761             - name: horizon
762               port: 80
763             - name: neutron
764               port: 9696
765             - name: cinder
766               port: 8776
767             - name: glance_api
768               port: 9292
769             - name: glance_registry
770               port: 9191
771               options: # overwrite options as glace_reg needs auth for http req
772             - name: heat_api
773               port: 8004
774             - name: heat_cloudwatch
775               port: 8003
776             - name: heat_cfn
777               port: 8000
778             - name: mysql
779               port: 3306
780               net_binds:
781                 - *control_vip
782               extra_server_params:
783                 - backup
784               options:
785                 - timeout client 0
786                 - timeout server 0
787             - name: nova_ec2
788               port: 8773
789             - name: nova_osapi
790               port: 8774
791             - name: nova_metadata
792               port: 8775
793             - name: nova_novncproxy
794               port: 6080
795             - name: ceilometer
796               port: 8777
797               options: # overwrite options as ceil needs auth for http req
798             - name: swift_proxy_server
799               port: 8080
800               options:
801                 - option httpchk GET /info
802             - name: rabbitmq
803               port: 5672
804               net_binds:
805                 - *control_vip
806               options:
807                 - timeout client 0
808                 - timeout server 0
809                 - maxconn 1500
810   controllerPassthrough:
811     type: OS::Heat::StructuredConfig
812     properties:
813       group: os-apply-config
814       config: {get_input: passthrough_config}
815   controllerPassthroughSpecific:
816     type: OS::Heat::StructuredConfig
817     properties:
818       group: os-apply-config
819       config: {get_input: passthrough_config_specific}
820   controller0:
821     type: OS::Nova::Server
822     properties:
823       image:
824         get_param: controllerImage
825       image_update_policy:
826         get_param: ImageUpdatePolicy
827       flavor:
828         get_param: OvercloudControlFlavor
829       key_name:
830         get_param: KeyName
831       networks:
832         - network: ctlplane
833       user_data_format: SOFTWARE_CONFIG
834   controller0AllNodesDeployment:
835     depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0PassthroughSpecific]
836     type: OS::Heat::StructuredDeployment
837     properties:
838       signal_transport: {get_param: DefaultSignalTransport}
839       config: {get_resource: allNodesConfig}
840       server: {get_resource: controller0}
841   controller0Deployment:
842     type: OS::Heat::StructuredDeployment
843     properties:
844       signal_transport: NO_SIGNAL
845       config: {get_resource: controllerConfig}
846       server: {get_resource: controller0}
847       input_values:
848         bootstack_nodeid: {get_attr: [controller0, name]}
849         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
850         controller_virtual_ip:
851           {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
852         heat.watch_server_url:
853           Fn::Join:
854             - ''
855             - - 'http://'
856               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
857               - ':8003'
858         heat.metadata_server_url:
859           Fn::Join:
860             - ''
861             - - 'http://'
862               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
863               - ':8000'
864         heat.waitcondition_server_url:
865           Fn::Join:
866             - ''
867             - - 'http://'
868               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
869               - ':8000/v1/waitcondition'
870   allNodesConfig:
871     type: OS::Heat::StructuredConfig
872     properties:
873       config:
874         completion-signal: {get_input: deploy_signal_id}
875         hosts:
876           Fn::Join:
877           - "\n"
878           - - Fn::Join:
879               - "\n"
880               - Merge::Map:
881                   NovaCompute0:
882                     Fn::Join:
883                     - ' '
884                     - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
885                       - {get_attr: [NovaCompute0, name]}
886                       - Fn::Join:
887                         - '.'
888                         - - {get_attr: [NovaCompute0, name]}
889                           - 'novalocal'
890             - Fn::Join:
891               - "\n"
892               - Merge::Map:
893                   BlockStorage0:
894                     Fn::Join:
895                     - ' '
896                     - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
897                       - {get_attr: [BlockStorage0, name]}
898                       - Fn::Join:
899                         - '.'
900                         - - {get_attr: [BlockStorage0, name]}
901                           - 'novalocal'
902             - Fn::Join:
903               - "\n"
904               - Merge::Map:
905                   SwiftStorage0:
906                     Fn::Join:
907                     - ' '
908                     - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
909                       - {get_attr: [SwiftStorage0, name]}
910                       - Fn::Join:
911                         - '.'
912                         - - {get_attr: [SwiftStorage0, name]}
913                           - 'novalocal'
914             - Fn::Join:
915               - "\n"
916               - Merge::Map:
917                   controller0:
918                     Fn::Join:
919                     - ' '
920                     - - {get_attr: [controller0, networks, ctlplane, 0]}
921                       - {get_attr: [controller0, name]}
922                       - Fn::Join:
923                         - '.'
924                         - - {get_attr: [controller0, name]}
925                           - 'novalocal'
926                       - {get_param: CloudName}
927         rabbit:
928           nodes:
929             Fn::Join:
930               - ','
931               - Merge::Map:
932                   controller0:
933                     {get_attr: [controller0, name]}
934   controller0SSLDeployment:
935     type: OS::Heat::StructuredDeployment
936     properties:
937       config: {get_resource: SSLConfig}
938       server: {get_resource: controller0}
939       signal_transport: NO_SIGNAL
940       input_values:
941         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
942         ssl_certificate: {get_param: SSLCertificate}
943         ssl_key: {get_param: SSLKey}
944         ssl_ca_certificate: {get_param: SSLCACertificate}
945   controller0Passthrough:
946     type: OS::Heat::StructuredDeployment
947     properties:
948       config: {get_resource: controllerPassthrough}
949       server: {get_resource: controller0}
950       signal_transport: NO_SIGNAL
951       input_values:
952         passthrough_config: {get_param: ExtraConfig}
953   controller0PassthroughSpecific:
954     depends_on: [controller0Passthrough]
955     type: OS::Heat::StructuredDeployment
956     properties:
957       config: {get_resource: controllerPassthroughSpecific}
958       server: {get_resource: controller0}
959       signal_transport: NO_SIGNAL
960       input_values:
961         passthrough_config_specific: {get_param: controllerExtraConfig}
962 outputs:
963   KeystoneURL:
964     description: URL for the Overcloud Keystone service
965     value:
966       Fn::Join:
967       - ''
968       - - http://
969         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
970         - :5000/v2.0/