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