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