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