068c8532efb9599b4a895acf6049d95f9c552516
[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 HeatTemplateFormatVersion: '2012-12-12'
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     NoEcho: true
10   AdminToken:
11     Default: unset
12     Description: The keystone auth secret.
13     Type: String
14     NoEcho: true
15   CinderPassword:
16     Default: unset
17     Description: The password for the cinder service account, used by cinder-api.
18     Type: String
19     NoEcho: 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     NoEcho: 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     NoEcho: 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     NoEcho: 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     AllowedValues: ['', Present]
122   CeilometerMeteringSecret:
123     Default: unset
124     Description: Secret shared by the ceilometer services.
125     Type: String
126     NoEcho: true
127   CeilometerPassword:
128     Default: unset
129     Description: The password for the ceilometer service account.
130     Type: String
131     NoEcho: true
132   SnmpdReadonlyUserName:
133     Default: ro_snmp_user
134     Description: The user name for SNMPd with readonly rights running on all Overcloud nodes
135     Type: String
136   SnmpdReadonlyUserPassword:
137     Default: unset
138     Description: The user password for SNMPd with readonly rights running on all Overcloud nodes
139     Type: String
140     NoEcho: true
141   CloudName:
142     Default: ''
143     Description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
144     Type: String
145   NovaComputeDriver:
146     Default: libvirt.LibvirtDriver
147     Type: String
148   NovaComputeLibvirtType:
149     Default: ''
150     Type: String
151   NovaImage:
152     Type: String
153     Default: overcloud-compute
154   NovaPassword:
155     Default: unset
156     Description: The password for the nova service account, used by nova-api.
157     Type: String
158     NoEcho: true
159   NeutronFlatNetworks:
160     Type: String
161     Default: ''
162     Description: If set, flat networks to configure in neutron plugins.
163   HypervisorNeutronPhysicalBridge:
164     Default: ''
165     Description: An OVS bridge to create on each hypervisor.
166     Type: String
167   HypervisorNeutronPublicInterface:
168     Default: ''
169     Description: What interface to add to the HypervisorNeutronPhysicalBridge.
170     Type: String
171   NeutronPublicInterface:
172     Default: eth0
173     Description: What interface to bridge onto br-ex for network nodes.
174     Type: String
175   NeutronPublicInterfaceDefaultRoute:
176     Default: ''
177     Description: A custom default route for the NeutronPublicInterface.
178     Type: String
179   NeutronPublicInterfaceIP:
180     Default: ''
181     Description: A custom IP address to put onto the NeutronPublicInterface.
182     Type: String
183   NeutronPublicInterfaceRawDevice:
184     Default: ''
185     Description: If set, the public interface is a vlan with this device as the raw device.
186     Type: String
187   NeutronControlPlaneID:
188     Default: ''
189     Type: String
190     Description: Neutron ID for ctlplane network.
191   NeutronDnsmasqOptions:
192     Default: 'dhcp-option-force=26,1400'
193     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.
194     Type: String
195   controllerImage:
196     Type: String
197     Default: overcloud-control
198   NtpServer:
199     Type: String
200     Default: ''
201   RabbitUserName:
202     Default: guest
203     Description: The username for RabbitMQ
204     Type: String
205   RabbitPassword:
206     Default: guest
207     Description: The password for RabbitMQ
208     Type: String
209     NoEcho: true
210   RabbitCookieSalt:
211     Type: String
212     Default: unset
213     Description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
214   HeatStackDomainAdminPassword:
215     Description: Password for heat_domain_admin user.
216     Type: String
217     Default: ''
218     NoEcho: true
219   LiveUpdateUserName:
220     Type: String
221     Description: The live-update username for the undercloud Glance API.
222     Default: ''
223   LiveUpdateTenantName:
224     Type: String
225     Description: The live-update tenant name for the undercloud Glance API.
226     Default: ''
227   LiveUpdateHost:
228     Type: String
229     Description: The IP address for the undercloud Glance API.
230     Default: ''
231   LiveUpdatePassword:
232     Type: String
233     Default: ''
234     Description: The live-update password for the undercloud Glance API.
235     NoEcho: true
236   LiveUpdateComputeImage:
237     Type: String
238     Description: The image ID for live-updates to the overcloud compute nodes.
239     Default: ''
240   MysqlInnodbBufferPoolSize:
241     Description: >
242         Specifies the size of the buffer pool in megabytes. Setting to
243         zero should be interpreted as "no value" and will defer to the
244         lower level default.
245     Type: Number
246     Default: 0
247   ControlVirtualInterface:
248     Default: 'br-ex'
249     Description: Interface where virtual ip will be assigned.
250     Type: String
251   ControlFixedIPs:
252     Default: []
253     Description: Should be used for arbitrary ips.
254     Type: Json
255   PublicVirtualFixedIPs:
256     Default: []
257     Description: |
258         Control the IP allocation for the PublicVirtualInterface port. E.g.
259         [{'ip_address':'1.2.3.4'}]
260     Type: Json
261   PublicVirtualInterface:
262     Default: 'br-ex'
263     Description: >
264         Specifies the interface where the public-facing virtual ip will be assigned.
265         This should be int_public when a VLAN is being used.
266     Type: String
267   PublicVirtualNetwork:
268     Default: 'ctlplane'
269     Type: String
270     Description: >
271         Neutron network to allocate public virtual IP port on.
272   KeystoneCACertificate:
273     Default: ''
274     Description: Keystone self-signed certificate authority certificate.
275     Type: String
276   KeystoneSigningCertificate:
277     Default: ''
278     Description: Keystone certificate for verifying token validity.
279     Type: String
280   KeystoneSigningKey:
281     Default: ''
282     Description: Keystone key for signing tokens.
283     Type: String
284     NoEcho: true
285 Resources:
286   ControlVirtualIP:
287     Type: OS::Neutron::Port
288     Properties:
289       name: control_virtual_ip
290       network_id: {Ref: NeutronControlPlaneID}
291       fixed_ips:
292         Ref: ControlFixedIPs
293   MysqlClusterUniquePart:
294     Type: OS::Heat::RandomString
295     Properties:
296       length: 10
297   PublicVirtualIP:
298     Type: OS::Neutron::Port
299     Properties:
300       name: public_virtual_ip
301       network: {Ref: PublicVirtualNetwork}
302       fixed_ips:
303         Ref: PublicVirtualFixedIPs
304   RabbitCookie:
305     Type: OS::Heat::RandomString
306     Properties:
307       length: 20
308       salt:
309         Ref: RabbitCookieSalt
310   NovaCompute0Config:
311     Type: FileInclude
312     Path: nova-compute-instance.yaml
313     SubKey: Resources.NovaCompute0Deploy
314     Parameters:
315         NovaApiHost: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
316         KeystoneHost: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
317         NeutronHost: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
318         GlanceHost: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
319         NovaDSN: {"Fn::Join": ['', ['mysql://nova:unset@', {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}, '/nova']]}
320         CeilometerDSN: {"Fn::Join": ['', ['mysql://ceilometer:unset@', {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}, '/ceilometer']]}
321         NeutronDSN: {"Fn::Join": ['', ['mysql://neutron:unset@', {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}, '/ovs_neutron']]}
322         NeutronNetworkType: "gre"
323         NeutronEnableTunnelling: "True"
324         NeutronFlatNetworks:
325             Ref: NeutronFlatNetworks
326         NeutronNetworkVLANRanges: ""
327         NeutronPhysicalBridge:
328             Ref: HypervisorNeutronPhysicalBridge
329         NeutronPublicInterface:
330             Ref: HypervisorNeutronPublicInterface
331         NeutronBridgeMappings:
332             Ref: NeutronBridgeMappings
333   NovaCompute0AllNodes:
334     Type: FileInclude
335     Path: nova-compute-instance.yaml
336     SubKey: Resources.NovaCompute0AllNodesDeploy
337     Parameters:
338         AllNodesConfig: {Ref: allNodesConfig}
339   NovaCompute0Passthrough:
340     Type: OS::Heat::StructuredDeployment
341     Properties:
342       config: {Ref: NovaComputePassthrough}
343       server: {Ref: NovaCompute0}
344       signal_transport: NO_SIGNAL
345       input_values:
346         passthrough_config: {Ref: ExtraConfig}
347   NovaCompute0:
348     Type: FileInclude
349     Path: nova-compute-instance.yaml
350     SubKey: Resources.NovaCompute0
351   controllerConfig:
352     Type: OS::Heat::StructuredConfig
353     Properties:
354       group: os-apply-config
355       config:
356         admin-password:
357           Ref: AdminPassword
358         admin-token:
359           Ref: AdminToken
360         bootstack:
361           public_interface_ip:
362             Ref: NeutronPublicInterfaceIP
363         bootstrap_host:
364           bootstrap_nodeid:
365             Fn::Select:
366             - 0
367             - Fn::Select:
368               - 0
369               - Merge::Map:
370                   controller0:
371                   - Fn::Select:
372                     - name
373                     - Fn::GetAtt:
374                       - controller0
375                       - show
376           nodeid: {get_input: bootstack_nodeid}
377         cinder:
378           db: mysql://cinder:unset@localhost/cinder
379           volume_size_mb:
380             Ref: CinderLVMLoopDeviceSize
381           service-password:
382             Ref: CinderPassword
383           iscsi-helper:
384             Ref: CinderISCSIHelper
385         controller-address:
386           get_input: controller_host
387         corosync:
388           bindnetaddr: {get_input: controller_host}
389           mcastport: 5577
390           nodes:
391             Merge::Map:
392               controller0:
393                 ip: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] }
394         pacemaker:
395           stonith_enabled : false
396           recheck_interval : 5
397           quorum_policy : ignore
398         db-password: unset
399         glance:
400           registry:
401             host: {get_input: controller_virtual_ip}
402           backend: swift
403           db: mysql://glance:unset@localhost/glance
404           host:
405             get_input: controller_virtual_ip
406           port:
407             Ref: GlancePort
408           protocol:
409             Ref: GlanceProtocol
410           service-password:
411             Ref: GlancePassword
412           swift-store-user: service:glance
413           swift-store-key:
414             Ref: GlancePassword
415           notifier-strategy:
416             Ref: GlanceNotifierStrategy
417           log-file:
418             Ref: GlanceLogFile
419         heat:
420           admin_password:
421             Ref: HeatPassword
422           admin_tenant_name: service
423           admin_user: heat
424           auth_encryption_key: unset___________
425           db: mysql://heat:unset@localhost/heat
426           stack_domain_admin_password: {Ref: HeatStackDomainAdminPassword}
427           watch_server_url: {get_input: heat.watch_server_url}
428           metadata_server_url: {get_input: heat.metadata_server_url}
429           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
430         horizon:
431           caches:
432             memcached:
433               nodes:
434                 Merge::Map:
435                   controller0:
436                     {"Fn::Select": [ name, {"Fn::GetAtt": [controller0, show]} ] }
437         keystone:
438           db: mysql://keystone:unset@localhost/keystone
439           host:
440             get_input: controller_virtual_ip
441           ca_certificate: {Ref: KeystoneCACertificate}
442           signing_key: {Ref: KeystoneSigningKey}
443           signing_certificate: {Ref: KeystoneSigningCertificate}
444         mysql:
445           innodb_buffer_pool_size: {Ref: MysqlInnodbBufferPoolSize}
446           nodes:
447             Merge::Map:
448               controller0:
449                 ip: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] }
450           cluster_name:
451             Fn::Join:
452               - '-'
453               - - 'tripleo'
454                 - {Ref: MysqlClusterUniquePart}
455         neutron:
456           flat-networks: {Ref: NeutronFlatNetworks}
457           host: {get_input: controller_virtual_ip}
458           metadata_proxy_shared_secret: unset
459           ovs:
460             enable_tunneling: 'True'
461             local_ip:
462               get_input: controller_host
463             bridge_mappings: {Ref: NeutronBridgeMappings}
464             public_interface:
465               Ref: NeutronPublicInterface
466             public_interface_raw_device:
467               Ref: NeutronPublicInterfaceRawDevice
468             public_interface_route:
469               Ref: NeutronPublicInterfaceDefaultRoute
470             physical_bridge: br-ex
471             tenant_network_type: gre
472           ovs_db: mysql://neutron:unset@localhost/ovs_neutron?charset=utf8
473           service-password:
474             Ref: NeutronPassword
475           dnsmasq-options:
476             Ref: NeutronDnsmasqOptions
477         ceilometer:
478           db: mysql://ceilometer:unset@localhost/ceilometer
479           metering_secret: {Ref: CeilometerMeteringSecret}
480           service-password:
481             Ref: CeilometerPassword
482         snmpd:
483           export_MIB: UCD-SNMP-MIB
484           readonly_user_name:
485             Ref: SnmpdReadonlyUserName
486           readonly_user_password:
487             Ref: SnmpdReadonlyUserPassword
488         nova:
489           compute_driver: libvirt.LibvirtDriver
490           db: mysql://nova:unset@localhost/nova
491           default_floating_pool:
492             ext-net
493           host: {get_input: controller_virtual_ip}
494           metadata-proxy: true
495           service-password:
496             Ref: NovaPassword
497         rabbit:
498           username:
499             Ref: RabbitUserName
500           password:
501             Ref: RabbitPassword
502           cookie:
503             Fn::GetAtt:
504             - RabbitCookie
505             - value
506         ntp:
507           servers:
508               - {server: {Ref: NtpServer}, fudge: "stratum 0"}
509         virtual_interfaces:
510           instances:
511             - vrrp_instance_name: VI_CONTROL
512               virtual_router_id: 51
513               keepalive_interface:
514                 Ref: ControlVirtualInterface
515               priority: 101
516               virtual_ips:
517               - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
518                 interface:
519                   Ref: ControlVirtualInterface
520             - vrrp_instance_name: VI_PUBLIC
521               virtual_router_id: 52
522               keepalive_interface:
523                 Ref: PublicVirtualInterface
524               priority: 101
525               virtual_ips:
526               - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [PublicVirtualIP, fixed_ips]]]}
527                 interface:
528                   Ref: PublicVirtualInterface
529           vrrp_sync_groups:
530             - name: VG1
531               members:
532                 - VI_CONTROL
533                 - VI_PUBLIC
534         keepalived:
535           keepalive_interface:
536             Ref: PublicVirtualInterface
537           priority: 101
538         virtual_ips:
539             -
540               ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
541               interface:
542                 Ref: ControlVirtualInterface
543             -
544               ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [PublicVirtualIP, fixed_ips]]]}
545               interface:
546                 Ref: PublicVirtualInterface
547         haproxy:
548           nodes:
549             Merge::Map:
550               controller0:
551                 ip: {"Fn::Select": [ 0, {"Fn::Select": [ "ctlplane", {"Fn::GetAtt": [controller0, networks]} ]} ] }
552                 name: {"Fn::Select": [ name, {"Fn::GetAtt": [controller0, show]} ] }
553           net_binds:
554             - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
555           services:
556             - name: keystone_admin
557               port: 35357
558               net_binds: &public_binds
559                 - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
560                 - ip: {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [PublicVirtualIP, fixed_ips]]]}
561             - name: keystone_public
562               port: 5000
563               net_binds: *public_binds
564             - name: horizon
565               port: 80
566               net_binds: *public_binds
567             - name: neutron
568               port: 9696
569               net_binds: *public_binds
570             - name: cinder
571               port: 8776
572               net_binds: *public_binds
573             - name: glance_api
574               port: 9292
575               net_binds: *public_binds
576             - name: glance_registry
577               port: 9191
578               net_binds: *public_binds
579             - name: heat_api
580               port: 8004
581               net_binds: *public_binds
582             - name: heat_cloudwatch
583               port: 8003
584               net_binds: *public_binds
585             - name: heat_cfn
586               port: 8000
587               net_binds: *public_binds
588             - name: nova_ec2
589               port: 8773
590             - name: nova_osapi
591               port: 8774
592               net_binds: *public_binds
593             - name: nova_metadata
594               port: 8775
595               net_binds: *public_binds
596             - name: ceilometer
597               port: 8777
598               net_binds: *public_binds
599             - name: swift_proxy_server
600               port: 8080
601               net_binds: *public_binds
602   controllerPassthrough:
603     Type: OS::Heat::StructuredConfig
604     Properties:
605       group: os-apply-config
606       config: {get_input: passthrough_config}
607   controller0:
608     Type: OS::Nova::Server
609     Properties:
610       image:
611         Ref: controllerImage
612       image_update_policy:
613         Ref: ImageUpdatePolicy
614       flavor:
615         Ref: OvercloudControlFlavor
616       key_name:
617         Ref: KeyName
618       networks:
619         - network: ctlplane
620       user_data_format: SOFTWARE_CONFIG
621   controller0AllNodesConfig:
622     Type: OS::Heat::StructuredDeployment
623     Properties:
624       config: {Ref: allNodesConfig}
625       server: {Ref: controller0}
626   controller0Deployment:
627     Type: OS::Heat::StructuredDeployment
628     Properties:
629       signal_transport: NO_SIGNAL
630       config: {Ref: controllerConfig}
631       server: {Ref: controller0}
632       input_values:
633         bootstack_nodeid:
634           Fn::Select:
635           - name
636           - Fn::GetAtt:
637             - controller0
638             - show
639         controller_host:
640           Fn::Select:
641             - 0
642             - Fn::Select:
643               - ctlplane
644               - Fn::GetAtt:
645                 - controller0
646                 - networks
647         controller_virtual_ip:
648           {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
649         heat.watch_server_url:
650           Fn::Join:
651             - ''
652             - - 'http://'
653               - {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
654               - ':8003'
655         heat.metadata_server_url:
656           Fn::Join:
657             - ''
658             - - 'http://'
659               - {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
660               - ':8000'
661         heat.waitcondition_server_url:
662           Fn::Join:
663             - ''
664             - - 'http://'
665               - {'Fn::Select': [ip_address, 'Fn::Select': [0, 'Fn::GetAtt': [ControlVirtualIP, fixed_ips]]]}
666               - ':8000/v1/waitcondition'
667   allNodesConfig:
668     Type: OS::Heat::StructuredConfig
669     Properties:
670       config:
671         completion-signal: {get_input: deploy_signal_id}
672         hosts:
673           Fn::Join:
674           - "\n"
675           - - Fn::Join:
676               - "\n"
677               - Merge::Map:
678                   NovaCompute0:
679                     Fn::Join:
680                     - ' '
681                     - - Fn::Select:
682                         - 0
683                         - Fn::Select:
684                           - ctlplane
685                           - Fn::GetAtt:
686                             - NovaCompute0
687                             - networks
688                       - Fn::Select:
689                         - name
690                         - Fn::GetAtt:
691                           - NovaCompute0
692                           - show
693                       - Fn::Join:
694                         - '.'
695                         - - Fn::Select:
696                             - name
697                             - Fn::GetAtt:
698                               - NovaCompute0
699                               - show
700                           - 'novalocal'
701             - Fn::Join:
702               - "\n"
703               - Merge::Map:
704                   controller0:
705                     Fn::Join:
706                     - ' '
707                     - - Fn::Select:
708                         - 0
709                         - Fn::Select:
710                           - ctlplane
711                           - Fn::GetAtt:
712                             - controller0
713                             - networks
714                       - Fn::Select:
715                         - name
716                         - Fn::GetAtt:
717                           - controller0
718                           - show
719                       - Fn::Join:
720                         - '.'
721                         - - Fn::Select:
722                             - name
723                             - Fn::GetAtt:
724                               - controller0
725                               - show
726                           - 'novalocal'
727                       - {Ref: CloudName}
728         rabbit:
729           nodes:
730             Fn::Join:
731               - ','
732               - Merge::Map:
733                   controller0:
734                     {"Fn::Select": [ name, {"Fn::GetAtt": [controller0, show]} ] }
735   controller0SSLDeployment:
736     Type: OS::Heat::StructuredDeployment
737     Properties:
738       config: {Ref: SSLConfig}
739       server: {Ref: controller0}
740       signal_transport: NO_SIGNAL
741       input_values:
742         ssl_certificate: {Ref: SSLCertificate}
743         ssl_key: {Ref: SSLKey}
744         ssl_ca_certificate: {Ref: SSLCACertificate}
745   controller0Passthrough:
746     Type: OS::Heat::StructuredDeployment
747     Properties:
748       config: {Ref: controllerPassthrough}
749       server: {Ref: controller0}
750       signal_transport: NO_SIGNAL
751       input_values:
752         passthrough_config: {Ref: ExtraConfig}
753 Outputs:
754   KeystoneURL:
755     Description: URL for the Overcloud Keystone service
756     Value:
757       Fn::Join:
758       - ''
759       - - http://
760         - Fn::Select:
761           - ip_address
762           - Fn::Select:
763             - 0
764             - Fn::GetAtt:
765               - ControlVirtualIP
766               - fixed_ips
767         - :5000/v2.0/