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