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