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