3dbd5712a8d991c138f083b1228bc40ee2ce79c1
[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                   - Fn::Select:
451                     - name
452                     - get_attr:
453                       - controller0
454                       - show
455           nodeid: {get_input: bootstack_nodeid}
456         database:
457           host: &database_host
458             {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
459         cinder:
460           db:
461             Fn::Join:
462               - ''
463               - - mysql://cinder:unset@
464                 - *database_host
465                 - /cinder
466           debug: {get_param: Debug}
467           volume_size_mb:
468             get_param: CinderLVMLoopDeviceSize
469           service-password:
470             get_param: CinderPassword
471           iscsi-helper:
472             get_param: CinderISCSIHelper
473         controller-address:
474           get_input: controller_host
475         corosync:
476           bindnetaddr: {get_input: controller_host}
477           mcastport: 5577
478           nodes:
479             Merge::Map:
480               controller0:
481                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
482         pacemaker:
483           stonith_enabled : false
484           recheck_interval : 5
485           quorum_policy : ignore
486         db-password: unset
487         glance:
488           registry:
489             host: {get_input: controller_virtual_ip}
490           backend: swift
491           db:
492             Fn::Join:
493               - ''
494               - - mysql://glance:unset@
495                 - *database_host
496                 - /glance
497           debug: {get_param: Debug}
498           host:
499             get_input: controller_virtual_ip
500           port:
501             get_param: GlancePort
502           protocol:
503             get_param: GlanceProtocol
504           service-password:
505             get_param: GlancePassword
506           swift-store-user: service:glance
507           swift-store-key:
508             get_param: GlancePassword
509           notifier-strategy:
510             get_param: GlanceNotifierStrategy
511           log-file:
512             get_param: GlanceLogFile
513         heat:
514           admin_password:
515             get_param: HeatPassword
516           admin_tenant_name: service
517           admin_user: heat
518           auth_encryption_key: unset___________
519           db:
520             Fn::Join:
521               - ''
522               - - mysql://heat:unset@
523                 - *database_host
524                 - /heat
525           debug: {get_param: Debug}
526           stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
527           watch_server_url: {get_input: heat.watch_server_url}
528           metadata_server_url: {get_input: heat.metadata_server_url}
529           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
530         horizon:
531           caches:
532             memcached:
533               nodes:
534                 Merge::Map:
535                   controller0:
536                     {get_attr: [controller0, show, name]}
537         keystone:
538           db:
539             Fn::Join:
540               - ''
541               - - mysql://keystone:unset@
542                 - *database_host
543                 - /keystone
544           debug: {get_param: Debug}
545           host:
546             get_input: controller_virtual_ip
547           ca_certificate: {get_param: KeystoneCACertificate}
548           signing_key: {get_param: KeystoneSigningKey}
549           signing_certificate: {get_param: KeystoneSigningCertificate}
550         mysql:
551           innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
552           local_bind: true
553           root-password: {get_resource: MysqlRootPassword}
554           nodes:
555             Merge::Map:
556               controller0:
557                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
558           cluster_name:
559             Fn::Join:
560               - '-'
561               - - 'tripleo'
562                 - {get_resource: MysqlClusterUniquePart}
563         neutron:
564           debug: {get_param: Debug}
565           flat-networks: {get_param: NeutronFlatNetworks}
566           host: {get_input: controller_virtual_ip}
567           metadata_proxy_shared_secret: unset
568           ovs:
569             enable_tunneling: 'True'
570             local_ip:
571               get_input: controller_host
572             network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
573             bridge_mappings: {get_param: NeutronBridgeMappings}
574             public_interface:
575               get_param: NeutronPublicInterface
576             public_interface_raw_device:
577               get_param: NeutronPublicInterfaceRawDevice
578             public_interface_route:
579               get_param: NeutronPublicInterfaceDefaultRoute
580             public_interface_tag:
581               get_param: NeutronPublicInterfaceTag
582             physical_bridge: br-ex
583             tenant_network_type: gre
584           ovs_db:
585             Fn::Join:
586               - ''
587               - - mysql://neutron:unset@
588                 - *database_host
589                 - /ovs_neutron?charset=utf8
590           service-password:
591             get_param: NeutronPassword
592           dnsmasq-options:
593             get_param: NeutronDnsmasqOptions
594         ceilometer:
595           db:
596             Fn::Join:
597               - ''
598               - - mysql://ceilometer:unset@
599                 - *database_host
600                 - /ceilometer
601           debug: {get_param: Debug}
602           metering_secret: {get_param: CeilometerMeteringSecret}
603           service-password:
604             get_param: CeilometerPassword
605         snmpd:
606           export_MIB: UCD-SNMP-MIB
607           readonly_user_name:
608             get_param: SnmpdReadonlyUserName
609           readonly_user_password:
610             get_param: SnmpdReadonlyUserPassword
611         nova:
612           compute_driver: libvirt.LibvirtDriver
613           db:
614             Fn::Join:
615               - ''
616               - - mysql://nova:unset@
617                 - *database_host
618                 - /nova
619           default_floating_pool:
620             ext-net
621           host: {get_input: controller_virtual_ip}
622           metadata-proxy: true
623           service-password:
624             get_param: NovaPassword
625         rabbit:
626           host: {get_input: controller_virtual_ip}
627           username:
628             get_param: RabbitUserName
629           password:
630             get_param: RabbitPassword
631           cookie:
632             get_attr:
633             - RabbitCookie
634             - value
635         ntp:
636           servers:
637               - {server: {get_param: NtpServer}, fudge: "stratum 0"}
638         virtual_interfaces:
639           instances:
640             - vrrp_instance_name: VI_CONTROL
641               virtual_router_id: 51
642               keepalive_interface:
643                 get_param: ControlVirtualInterface
644               priority: 101
645               virtual_ips:
646               - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
647                 interface:
648                   get_param: ControlVirtualInterface
649             - vrrp_instance_name: VI_PUBLIC
650               virtual_router_id: 52
651               keepalive_interface:
652                 get_param: PublicVirtualInterface
653               priority: 101
654               virtual_ips:
655               - ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
656                 interface:
657                   get_param: PublicVirtualInterface
658           vrrp_sync_groups:
659             - name: VG1
660               members:
661                 - VI_CONTROL
662                 - VI_PUBLIC
663         keepalived:
664           keepalive_interface:
665             get_param: PublicVirtualInterface
666           priority: 101
667         virtual_ips:
668             -
669               ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
670               interface:
671                 get_param: ControlVirtualInterface
672             -
673               ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
674               interface:
675                 get_param: PublicVirtualInterface
676         haproxy:
677           nodes:
678             Merge::Map:
679               controller0:
680                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
681                 name: {get_attr: [controller0, show, name]}
682           net_binds:
683             - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
684           services:
685             - name: keystone_admin
686               port: 35357
687               net_binds: &public_binds
688                 - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
689                 - ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
690             - name: keystone_public
691               port: 5000
692               net_binds: *public_binds
693             - name: horizon
694               port: 80
695               net_binds: *public_binds
696             - name: neutron
697               port: 9696
698               net_binds: *public_binds
699             - name: cinder
700               port: 8776
701               net_binds: *public_binds
702             - name: glance_api
703               port: 9292
704               net_binds: *public_binds
705             - name: glance_registry
706               port: 9191
707               net_binds: *public_binds
708             - name: heat_api
709               port: 8004
710               net_binds: *public_binds
711             - name: heat_cloudwatch
712               port: 8003
713               net_binds: *public_binds
714             - name: heat_cfn
715               port: 8000
716               net_binds: *public_binds
717             - name: mysql
718               port: 3306
719               extra_server_params:
720                 - backup
721               options:
722                 - timeout client 0
723                 - timeout server 0
724             - name: nova_ec2
725               port: 8773
726             - name: nova_osapi
727               port: 8774
728               net_binds: *public_binds
729             - name: nova_metadata
730               port: 8775
731               net_binds: *public_binds
732             - name: ceilometer
733               port: 8777
734               net_binds: *public_binds
735             - name: swift_proxy_server
736               port: 8080
737               net_binds: *public_binds
738             - name: rabbitmq
739               port: 5672
740               options:
741                 - timeout client 0
742                 - timeout server 0
743   controllerPassthrough:
744     type: OS::Heat::StructuredConfig
745     properties:
746       group: os-apply-config
747       config: {get_input: passthrough_config}
748   controllerPassthroughSpecific:
749     type: OS::Heat::StructuredConfig
750     properties:
751       group: os-apply-config
752       config: {get_input: passthrough_config_specific}
753   controller0:
754     type: OS::Nova::Server
755     properties:
756       image:
757         get_param: controllerImage
758       image_update_policy:
759         get_param: ImageUpdatePolicy
760       flavor:
761         get_param: OvercloudControlFlavor
762       key_name:
763         get_param: KeyName
764       networks:
765         - network: ctlplane
766       user_data_format: SOFTWARE_CONFIG
767   controller0AllNodesDeployment:
768     depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0PassthroughSpecific]
769     type: OS::Heat::StructuredDeployment
770     properties:
771       signal_transport: {get_param: DefaultSignalTransport}
772       config: {get_resource: allNodesConfig}
773       server: {get_resource: controller0}
774   controller0Deployment:
775     type: OS::Heat::StructuredDeployment
776     properties:
777       signal_transport: NO_SIGNAL
778       config: {get_resource: controllerConfig}
779       server: {get_resource: controller0}
780       input_values:
781         bootstack_nodeid: {get_attr: [controller0, show, name]}
782         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
783         controller_virtual_ip:
784           {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
785         heat.watch_server_url:
786           Fn::Join:
787             - ''
788             - - 'http://'
789               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
790               - ':8003'
791         heat.metadata_server_url:
792           Fn::Join:
793             - ''
794             - - 'http://'
795               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
796               - ':8000'
797         heat.waitcondition_server_url:
798           Fn::Join:
799             - ''
800             - - 'http://'
801               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
802               - ':8000/v1/waitcondition'
803   allNodesConfig:
804     type: OS::Heat::StructuredConfig
805     properties:
806       config:
807         completion-signal: {get_input: deploy_signal_id}
808         hosts:
809           Fn::Join:
810           - "\n"
811           - - Fn::Join:
812               - "\n"
813               - Merge::Map:
814                   NovaCompute0:
815                     Fn::Join:
816                     - ' '
817                     - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
818                       - {get_attr: [NovaCompute0, show, name]}
819                       - Fn::Join:
820                         - '.'
821                         - - {get_attr: [NovaCompute0, show, name]}
822                           - 'novalocal'
823             - Fn::Join:
824               - "\n"
825               - Merge::Map:
826                   BlockStorage0:
827                     Fn::Join:
828                     - ' '
829                     - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
830                       - {get_attr: [BlockStorage0, show, name]}
831                       - Fn::Join:
832                         - '.'
833                         - - {get_attr: [BlockStorage0, show, name]}
834                           - 'novalocal'
835             - Fn::Join:
836               - "\n"
837               - Merge::Map:
838                   SwiftStorage0:
839                     Fn::Join:
840                     - ' '
841                     - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
842                       - {get_attr: [SwiftStorage0, show, name]}
843                       - Fn::Join:
844                         - '.'
845                         - - {get_attr: [SwiftStorage0, show, name]}
846                           - 'novalocal'
847             - Fn::Join:
848               - "\n"
849               - Merge::Map:
850                   controller0:
851                     Fn::Join:
852                     - ' '
853                     - - {get_attr: [controller0, networks, ctlplane, 0]}
854                       - {get_attr: [controller0, show, name]}
855                       - Fn::Join:
856                         - '.'
857                         - - {get_attr: [controller0, show, name]}
858                           - 'novalocal'
859                       - {get_param: CloudName}
860         rabbit:
861           nodes:
862             Fn::Join:
863               - ','
864               - Merge::Map:
865                   controller0:
866                     {get_attr: [controller0, show, name]}
867   controller0SSLDeployment:
868     type: OS::Heat::StructuredDeployment
869     properties:
870       config: {get_resource: SSLConfig}
871       server: {get_resource: controller0}
872       signal_transport: NO_SIGNAL
873       input_values:
874         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
875         ssl_certificate: {get_param: SSLCertificate}
876         ssl_key: {get_param: SSLKey}
877         ssl_ca_certificate: {get_param: SSLCACertificate}
878   controller0Passthrough:
879     type: OS::Heat::StructuredDeployment
880     properties:
881       config: {get_resource: controllerPassthrough}
882       server: {get_resource: controller0}
883       signal_transport: NO_SIGNAL
884       input_values:
885         passthrough_config: {get_param: ExtraConfig}
886   controller0PassthroughSpecific:
887     depends_on: [controller0Passthrough]
888     type: OS::Heat::StructuredDeployment
889     properties:
890       config: {get_resource: controllerPassthroughSpecific}
891       server: {get_resource: controller0}
892       signal_transport: NO_SIGNAL
893       input_values:
894         passthrough_config_specific: {get_param: controllerExtraConfig}
895 outputs:
896   KeystoneURL:
897     description: URL for the Overcloud Keystone service
898     value:
899       Fn::Join:
900       - ''
901       - - http://
902         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
903         - :5000/v2.0/