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