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