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