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