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