Merge "Don't replace OS::Neutron::Port on update"
[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   RabbitClientUseSSL:
347     default: false
348     description: >
349         Rabbit client subscriber parameter to specify
350         an SSL connection to the RabbitMQ host.
351     type: string
352   RabbitClientPort:
353     default: 5672
354     description: Set rabbit subscriber port, change this if using SSL
355     type: number
356   SnmpdReadonlyUserName:
357     default: ro_snmp_user
358     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
359     type: string
360   SnmpdReadonlyUserPassword:
361     default: unset
362     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
363     type: string
364     hidden: true
365 resources:
366   ControlVirtualIP:
367     type: OS::Neutron::Port
368     properties:
369       name: control_virtual_ip
370       network_id: {get_param: NeutronControlPlaneID}
371       fixed_ips:
372         get_param: ControlFixedIPs
373       replacement_policy: AUTO
374   MysqlClusterUniquePart:
375     type: OS::Heat::RandomString
376     properties:
377       length: 10
378   MysqlRootPassword:
379     type: OS::Heat::RandomString
380     properties:
381       length: 10
382   PublicVirtualIP:
383     type: OS::Neutron::Port
384     properties:
385       name: public_virtual_ip
386       network: {get_param: PublicVirtualNetwork}
387       fixed_ips:
388         get_param: PublicVirtualFixedIPs
389       replacement_policy: AUTO
390   RabbitCookie:
391     type: OS::Heat::RandomString
392     properties:
393       length: 20
394       salt:
395         get_param: RabbitCookieSalt
396   NovaCompute0Deployment:
397     type: FileInclude
398     Path: nova-compute-instance.yaml
399     SubKey: resources.NovaCompute0Deployment
400     parameters:
401         DefaultSignalTransport:
402             get_param: DefaultSignalTransport
403         NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
404         KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
405         NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
406         GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
407         RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
408         NovaDSN:
409           Fn::Join:
410             - ''
411             - - mysql://nova:unset@
412               - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
413               - /nova
414         NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
415         CeilometerDSN:
416           Fn::Join:
417             - ''
418             - - mysql://ceilometer:unset@
419               - *compute_database_host
420               - /ceilometer
421         NeutronDSN:
422           Fn::Join:
423             - ''
424             - - mysql://neutron:unset@
425               - *compute_database_host
426               - /ovs_neutron
427         NeutronNetworkType:
428             get_param: NeutronNetworkType
429         NeutronTunnelTypes:
430             get_param: NeutronTunnelTypes
431         NeutronEnableTunnelling: "True"
432         NeutronFlatNetworks:
433             get_param: NeutronFlatNetworks
434         NeutronNetworkVLANRanges:
435             get_param: NeutronNetworkVLANRanges
436         NeutronPhysicalBridge:
437             get_param: HypervisorNeutronPhysicalBridge
438         NeutronPublicInterface:
439             get_param: HypervisorNeutronPublicInterface
440         NeutronBridgeMappings:
441             get_param: NeutronBridgeMappings
442   NovaCompute0AllNodesDeployment:
443     type: FileInclude
444     Path: nova-compute-instance.yaml
445     SubKey: resources.NovaCompute0AllNodesDeployment
446     parameters:
447         AllNodesConfig: {get_resource: allNodesConfig}
448   NovaCompute0:
449     type: FileInclude
450     Path: nova-compute-instance.yaml
451     SubKey: resources.NovaCompute0
452   NovaCompute0Passthrough:
453     type: FileInclude
454     Path: nova-compute-instance.yaml
455     SubKey: resources.NovaCompute0Passthrough
456     parameters:
457         passthrough_config: {get_param: ExtraConfig}
458   NovaCompute0PassthroughSpecific:
459     type: FileInclude
460     Path: nova-compute-instance.yaml
461     SubKey: resources.NovaCompute0PassthroughSpecific
462     parameters:
463         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
464   controllerConfig:
465     type: OS::Heat::StructuredConfig
466     properties:
467       group: os-apply-config
468       config:
469         admin-password:
470           get_param: AdminPassword
471         admin-token:
472           get_param: AdminToken
473         bootstack:
474           public_interface_ip:
475             get_param: NeutronPublicInterfaceIP
476         bootstrap_host:
477           bootstrap_nodeid:
478             Fn::Select:
479             - 0
480             - Fn::Select:
481               - 0
482               - Merge::Map:
483                   controller0:
484                   - get_attr:
485                     - controller0
486                     - name
487           nodeid: {get_input: bootstack_nodeid}
488         database:
489           host: &database_host
490             {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
491         cinder:
492           db:
493             Fn::Join:
494               - ''
495               - - mysql://cinder:unset@
496                 - *database_host
497                 - /cinder
498           debug: {get_param: Debug}
499           volume_size_mb:
500             get_param: CinderLVMLoopDeviceSize
501           service-password:
502             get_param: CinderPassword
503           iscsi-helper:
504             get_param: CinderISCSIHelper
505         controller-address:
506           get_input: controller_host
507         corosync:
508           bindnetaddr: {get_input: controller_host}
509           mcastport: 5577
510           nodes:
511             Merge::Map:
512               controller0:
513                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
514         pacemaker:
515           stonith_enabled : false
516           recheck_interval : 5
517           quorum_policy : ignore
518         db-password: unset
519         glance:
520           registry:
521             host: {get_input: controller_virtual_ip}
522           backend: swift
523           db:
524             Fn::Join:
525               - ''
526               - - mysql://glance:unset@
527                 - *database_host
528                 - /glance
529           debug: {get_param: Debug}
530           host:
531             get_input: controller_virtual_ip
532           port:
533             get_param: GlancePort
534           protocol:
535             get_param: GlanceProtocol
536           service-password:
537             get_param: GlancePassword
538           swift-store-user: service:glance
539           swift-store-key:
540             get_param: GlancePassword
541           notifier-strategy:
542             get_param: GlanceNotifierStrategy
543           log-file:
544             get_param: GlanceLogFile
545         heat:
546           admin_password:
547             get_param: HeatPassword
548           admin_tenant_name: service
549           admin_user: heat
550           auth_encryption_key: unset___________
551           db:
552             Fn::Join:
553               - ''
554               - - mysql://heat:unset@
555                 - *database_host
556                 - /heat
557           debug: {get_param: Debug}
558           stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
559           watch_server_url: {get_input: heat.watch_server_url}
560           metadata_server_url: {get_input: heat.metadata_server_url}
561           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
562         horizon:
563           caches:
564             memcached:
565               nodes:
566                 Merge::Map:
567                   controller0:
568                     {get_attr: [controller0, name]}
569         keystone:
570           db:
571             Fn::Join:
572               - ''
573               - - mysql://keystone:unset@
574                 - *database_host
575                 - /keystone
576           debug: {get_param: Debug}
577           host:
578             get_input: controller_virtual_ip
579           ca_certificate: {get_param: KeystoneCACertificate}
580           signing_key: {get_param: KeystoneSigningKey}
581           signing_certificate: {get_param: KeystoneSigningCertificate}
582           ssl:
583               certificate: {get_param: KeystoneSSLCertificate}
584               certificate_key: {get_param: KeystoneSSLCertificateKey}
585         mysql:
586           innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
587           local_bind: true
588           root-password: {get_resource: MysqlRootPassword}
589           nodes:
590             Merge::Map:
591               controller0:
592                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
593           cluster_name:
594             Fn::Join:
595               - '-'
596               - - 'tripleo'
597                 - {get_resource: MysqlClusterUniquePart}
598         neutron:
599           debug: {get_param: Debug}
600           flat-networks: {get_param: NeutronFlatNetworks}
601           host: {get_input: controller_virtual_ip}
602           metadata_proxy_shared_secret: unset
603           ovs:
604             enable_tunneling: 'True'
605             local_ip:
606               get_input: controller_host
607             network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
608             bridge_mappings: {get_param: NeutronBridgeMappings}
609             public_interface:
610               get_param: NeutronPublicInterface
611             public_interface_raw_device:
612               get_param: NeutronPublicInterfaceRawDevice
613             public_interface_route:
614               get_param: NeutronPublicInterfaceDefaultRoute
615             public_interface_tag:
616               get_param: NeutronPublicInterfaceTag
617             physical_bridge: br-ex
618             tenant_network_type:
619               get_param: NeutronNetworkType
620             tunnel_types:
621               get_param: NeutronTunnelTypes
622           ovs_db:
623             Fn::Join:
624               - ''
625               - - mysql://neutron:unset@
626                 - *database_host
627                 - /ovs_neutron?charset=utf8
628           service-password:
629             get_param: NeutronPassword
630           dnsmasq-options:
631             get_param: NeutronDnsmasqOptions
632         ceilometer:
633           db:
634             Fn::Join:
635               - ''
636               - - mysql://ceilometer:unset@
637                 - *database_host
638                 - /ceilometer
639           debug: {get_param: Debug}
640           metering_secret: {get_param: CeilometerMeteringSecret}
641           service-password:
642             get_param: CeilometerPassword
643         snmpd:
644           export_MIB: UCD-SNMP-MIB
645           readonly_user_name:
646             get_param: SnmpdReadonlyUserName
647           readonly_user_password:
648             get_param: SnmpdReadonlyUserPassword
649         nova:
650           compute_driver: libvirt.LibvirtDriver
651           db:
652             Fn::Join:
653               - ''
654               - - mysql://nova:unset@
655                 - *database_host
656                 - /nova
657           default_floating_pool:
658             ext-net
659           host: {get_input: controller_virtual_ip}
660           metadata-proxy: true
661           service-password:
662             get_param: NovaPassword
663         rabbit:
664           host: {get_input: controller_virtual_ip}
665           username:
666             get_param: RabbitUserName
667           password:
668             get_param: RabbitPassword
669           cookie:
670             get_attr:
671             - RabbitCookie
672             - value
673           rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
674           rabbit_port: {get_param: RabbitClientPort}
675         ntp:
676           servers:
677               - {server: {get_param: NtpServer}, fudge: "stratum 0"}
678         virtual_interfaces:
679           instances:
680             - vrrp_instance_name: VI_CONTROL
681               virtual_router_id: 51
682               keepalive_interface:
683                 get_param: ControlVirtualInterface
684               priority: 101
685               virtual_ips:
686               - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
687                 interface:
688                   get_param: ControlVirtualInterface
689             - vrrp_instance_name: VI_PUBLIC
690               virtual_router_id: 52
691               keepalive_interface:
692                 get_param: PublicVirtualInterface
693               priority: 101
694               virtual_ips:
695               - ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
696                 interface:
697                   get_param: PublicVirtualInterface
698           vrrp_sync_groups:
699             - name: VG1
700               members:
701                 - VI_CONTROL
702                 - VI_PUBLIC
703         keepalived:
704           keepalive_interface:
705             get_param: PublicVirtualInterface
706           priority: 101
707         virtual_ips:
708             -
709               ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
710               interface:
711                 get_param: ControlVirtualInterface
712             -
713               ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
714               interface:
715                 get_param: PublicVirtualInterface
716         haproxy:
717           nodes:
718             Merge::Map:
719               controller0:
720                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
721                 name: {get_attr: [controller0, name]}
722           net_binds:
723             - &control_vip {ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}}
724             - &public_vip {ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}}
725           services:
726             - name: keystone_admin
727               port: 35357
728             - name: keystone_public
729               port: 5000
730             - name: horizon
731               port: 80
732             - name: neutron
733               port: 9696
734             - name: cinder
735               port: 8776
736             - name: glance_api
737               port: 9292
738             - name: glance_registry
739               port: 9191
740             - name: heat_api
741               port: 8004
742             - name: heat_cloudwatch
743               port: 8003
744             - name: heat_cfn
745               port: 8000
746             - name: mysql
747               port: 3306
748               net_binds:
749                 - *control_vip
750               extra_server_params:
751                 - backup
752               options:
753                 - timeout client 0
754                 - timeout server 0
755             - name: nova_ec2
756               port: 8773
757             - name: nova_osapi
758               port: 8774
759             - name: nova_metadata
760               port: 8775
761             - name: nova_novncproxy
762               port: 6080
763             - name: ceilometer
764               port: 8777
765             - name: swift_proxy_server
766               port: 8080
767             - name: rabbitmq
768               port: 5672
769               net_binds:
770                 - *control_vip
771               options:
772                 - timeout client 0
773                 - timeout server 0
774   controllerPassthrough:
775     type: OS::Heat::StructuredConfig
776     properties:
777       group: os-apply-config
778       config: {get_input: passthrough_config}
779   controllerPassthroughSpecific:
780     type: OS::Heat::StructuredConfig
781     properties:
782       group: os-apply-config
783       config: {get_input: passthrough_config_specific}
784   controller0:
785     type: OS::Nova::Server
786     properties:
787       image:
788         get_param: controllerImage
789       image_update_policy:
790         get_param: ImageUpdatePolicy
791       flavor:
792         get_param: OvercloudControlFlavor
793       key_name:
794         get_param: KeyName
795       networks:
796         - network: ctlplane
797       user_data_format: SOFTWARE_CONFIG
798   controller0AllNodesDeployment:
799     depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0PassthroughSpecific]
800     type: OS::Heat::StructuredDeployment
801     properties:
802       signal_transport: {get_param: DefaultSignalTransport}
803       config: {get_resource: allNodesConfig}
804       server: {get_resource: controller0}
805   controller0Deployment:
806     type: OS::Heat::StructuredDeployment
807     properties:
808       signal_transport: NO_SIGNAL
809       config: {get_resource: controllerConfig}
810       server: {get_resource: controller0}
811       input_values:
812         bootstack_nodeid: {get_attr: [controller0, name]}
813         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
814         controller_virtual_ip:
815           {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
816         heat.watch_server_url:
817           Fn::Join:
818             - ''
819             - - 'http://'
820               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
821               - ':8003'
822         heat.metadata_server_url:
823           Fn::Join:
824             - ''
825             - - 'http://'
826               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
827               - ':8000'
828         heat.waitcondition_server_url:
829           Fn::Join:
830             - ''
831             - - 'http://'
832               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
833               - ':8000/v1/waitcondition'
834   allNodesConfig:
835     type: OS::Heat::StructuredConfig
836     properties:
837       config:
838         completion-signal: {get_input: deploy_signal_id}
839         hosts:
840           Fn::Join:
841           - "\n"
842           - - Fn::Join:
843               - "\n"
844               - Merge::Map:
845                   NovaCompute0:
846                     Fn::Join:
847                     - ' '
848                     - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
849                       - {get_attr: [NovaCompute0, name]}
850                       - Fn::Join:
851                         - '.'
852                         - - {get_attr: [NovaCompute0, name]}
853                           - 'novalocal'
854             - Fn::Join:
855               - "\n"
856               - Merge::Map:
857                   BlockStorage0:
858                     Fn::Join:
859                     - ' '
860                     - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
861                       - {get_attr: [BlockStorage0, name]}
862                       - Fn::Join:
863                         - '.'
864                         - - {get_attr: [BlockStorage0, name]}
865                           - 'novalocal'
866             - Fn::Join:
867               - "\n"
868               - Merge::Map:
869                   SwiftStorage0:
870                     Fn::Join:
871                     - ' '
872                     - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
873                       - {get_attr: [SwiftStorage0, name]}
874                       - Fn::Join:
875                         - '.'
876                         - - {get_attr: [SwiftStorage0, name]}
877                           - 'novalocal'
878             - Fn::Join:
879               - "\n"
880               - Merge::Map:
881                   controller0:
882                     Fn::Join:
883                     - ' '
884                     - - {get_attr: [controller0, networks, ctlplane, 0]}
885                       - {get_attr: [controller0, name]}
886                       - Fn::Join:
887                         - '.'
888                         - - {get_attr: [controller0, name]}
889                           - 'novalocal'
890                       - {get_param: CloudName}
891         rabbit:
892           nodes:
893             Fn::Join:
894               - ','
895               - Merge::Map:
896                   controller0:
897                     {get_attr: [controller0, name]}
898   controller0SSLDeployment:
899     type: OS::Heat::StructuredDeployment
900     properties:
901       config: {get_resource: SSLConfig}
902       server: {get_resource: controller0}
903       signal_transport: NO_SIGNAL
904       input_values:
905         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
906         ssl_certificate: {get_param: SSLCertificate}
907         ssl_key: {get_param: SSLKey}
908         ssl_ca_certificate: {get_param: SSLCACertificate}
909   controller0Passthrough:
910     type: OS::Heat::StructuredDeployment
911     properties:
912       config: {get_resource: controllerPassthrough}
913       server: {get_resource: controller0}
914       signal_transport: NO_SIGNAL
915       input_values:
916         passthrough_config: {get_param: ExtraConfig}
917   controller0PassthroughSpecific:
918     depends_on: [controller0Passthrough]
919     type: OS::Heat::StructuredDeployment
920     properties:
921       config: {get_resource: controllerPassthroughSpecific}
922       server: {get_resource: controller0}
923       signal_transport: NO_SIGNAL
924       input_values:
925         passthrough_config_specific: {get_param: controllerExtraConfig}
926 outputs:
927   KeystoneURL:
928     description: URL for the Overcloud Keystone service
929     value:
930       Fn::Join:
931       - ''
932       - - http://
933         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
934         - :5000/v2.0/