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