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