8cb041b79d7554b1055c96e6b9d6e886706f2f10
[apex-tripleo-heat-templates.git] / overcloud-without-mergepy.yaml
1 heat_template_version: 2014-10-16
2
3 description: >
4   Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
5   server,Dedicated RabbitMQ Server,Group of Nova Computes
6
7
8 # TODO(shadower): we should probably use the parameter groups to put
9 # some order in here.
10 parameters:
11
12   # Common parameters (not specific to a role)
13   AdminPassword:
14     default: unset
15     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
16     type: string
17     hidden: true
18   CeilometerMeteringSecret:
19     default: unset
20     description: Secret shared by the ceilometer services.
21     type: string
22     hidden: true
23   CeilometerPassword:
24     default: unset
25     description: The password for the ceilometer service account.
26     type: string
27     hidden: true
28   CloudName:
29     default: ''
30     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
31     type: string
32   ControlFixedIPs:
33     default: []
34     description: Should be used for arbitrary ips.
35     type: json
36   Debug:
37     default: ''
38     description: Set to True to enable debugging on all services.
39     type: string
40   DefaultSignalTransport:
41     default: CFN_SIGNAL
42     description: Transport to use for software-config signals.
43     type: string
44     constraints:
45       - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
46   GlancePort:
47     default: "9292"
48     description: Glance port.
49     type: string
50   GlanceProtocol:
51     default: http
52     description: Protocol to use when connecting to glance, set to https for SSL.
53     type: string
54   ImageUpdatePolicy:
55     default: 'REBUILD_PRESERVE_EPHEMERAL'
56     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
57     type: string
58   KeyName:
59     default: default
60     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
61     type: string
62     constraints:
63       - custom_constraint: nova.keypair
64   NeutronBridgeMappings:
65     description: >
66       The OVS logical->physical bridge mappings to use. See the Neutron
67       documentation for details. Defaults to mapping br-ex - the external
68       bridge on hosts - to a physical name 'datacentre' which can be used
69       to create provider networks (and we use this for the default floating
70       network) - if changing this either use different post-install network
71       scripts or be sure to keep 'datacentre' as a mapping network name.
72     type: string
73     default: "datacentre:br-ex"
74   NeutronControlPlaneID:
75     default: ''
76     type: string
77     description: Neutron ID for ctlplane network.
78   NeutronEnableTunnelling:
79     type: string
80     default: "True"
81   NeutronFlatNetworks:
82     type: string
83     default: 'datacentre'
84     description: >
85       If set, flat networks to configure in neutron plugins. Defaults to
86       'datacentre' to permit external network creation.
87   NeutronNetworkType:
88     default: 'gre'
89     description: The tenant network type for Neutron, either gre or vxlan.
90     type: string
91   NeutronPassword:
92     default: unset
93     description: The password for the neutron service account, used by neutron agents.
94     type: string
95     hidden: true
96   NeutronPublicInterface:
97     default: nic1
98     description: What interface to bridge onto br-ex for network nodes.
99     type: string
100   NeutronPublicInterfaceTag:
101     default: ''
102     description: >
103       VLAN tag for creating a public VLAN. The tag will be used to
104       create an access port on the exterior bridge for each control plane node,
105       and that port will be given the IP address returned by neutron from the
106       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
107       overcloud.yaml to include the deployment of VLAN ports to the control
108       plane.
109     type: string
110   NeutronTunnelTypes:
111     default: 'gre'
112     description: |
113         The tunnel types for the Neutron tenant network. To specify multiple
114         values, use a comma separated string, like so: 'gre,vxlan'
115     type: string
116   NovaPassword:
117     default: unset
118     description: The password for the nova service account, used by nova-api.
119     type: string
120     hidden: true
121   NtpServer:
122     type: string
123     default: ''
124   PublicVirtualFixedIPs:
125     default: []
126     description: >
127         Control the IP allocation for the PublicVirtualInterface port. E.g.
128         [{'ip_address':'1.2.3.4'}]
129     type: json
130   PublicVirtualNetwork:
131     default: 'ctlplane'
132     type: string
133     description: >
134         Neutron network to allocate public virtual IP port on.
135   RabbitCookieSalt:
136     type: string
137     default: unset
138     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
139   RabbitUserName:
140     default: guest
141     description: The username for RabbitMQ
142     type: string
143   RabbitPassword:
144     default: guest
145     description: The password for RabbitMQ
146     type: string
147     hidden: true
148   SnmpdReadonlyUserName:
149     default: ro_snmp_user
150     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
151     type: string
152   SnmpdReadonlyUserPassword:
153     default: unset
154     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
155     type: string
156     hidden: true
157
158
159   # Controller-specific params
160   AdminToken:
161     default: unset
162     description: The keystone auth secret.
163     type: string
164     hidden: true
165   CinderLVMLoopDeviceSize:
166     default: 5000
167     description: The size of the loopback file used by the cinder LVM driver.
168     type: number
169   CinderPassword:
170     default: unset
171     description: The password for the cinder service account, used by cinder-api.
172     type: string
173     hidden: true
174   CinderISCSIHelper:
175     default: tgtadm
176     description: The iSCSI helper to use with cinder.
177     type: string
178   ControllerCount:
179     type: number
180     default: 1
181   controllerExtraConfig:
182     default: {}
183     description: |
184       Controller specific configuration to inject into the cluster. Same
185       structure as ExtraConfig.
186     type: json
187   controllerImage:
188     type: string
189     default: overcloud-control
190     constraints:
191       - custom_constraint: glance.image
192   OvercloudControlFlavor:
193     default: baremetal
194     description: Flavor for control nodes to request when deploying.
195     type: string
196     constraints:
197       - custom_constraint: nova.flavor
198   ControlVirtualInterface:
199     default: 'br-ex'
200     description: Interface where virtual ip will be assigned.
201     type: string
202   ExtraConfig:
203     default: {}
204     description: |
205       Additional configuration to inject into the cluster. The JSON should have
206       the following structure:
207         {"FILEKEY":
208           {"config":
209             [{"section": "SECTIONNAME",
210               "values":
211                 [{"option": "OPTIONNAME",
212                   "value": "VALUENAME"
213                  }
214                 ]
215              }
216             ]
217           }
218         }
219       For instance:
220         {"nova":
221           {"config":
222             [{"section": "default",
223               "values":
224                 [{"option": "force_config_drive",
225                   "value": "always"
226                  }
227                 ]
228              },
229              {"section": "cells",
230               "values":
231                 [{"option": "driver",
232                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
233                  }
234                 ]
235              }
236             ]
237           }
238         }
239     type: json
240   GlanceLogFile:
241     description: The filepath of the file to use for logging messages from Glance.
242     type: string
243     default: ''
244   GlanceNotifierStrategy:
245     description: Strategy to use for Glance notification queue
246     type: string
247     default: noop
248   GlancePassword:
249     default: unset
250     description: The password for the glance service account, used by the glance services.
251     type: string
252     hidden: true
253   HeatPassword:
254     default: unset
255     description: The password for the Heat service account, used by the Heat services.
256     type: string
257     hidden: true
258   HeatStackDomainAdminPassword:
259     description: Password for heat_domain_admin user.
260     type: string
261     default: ''
262     hidden: true
263   KeystoneCACertificate:
264     default: ''
265     description: Keystone self-signed certificate authority certificate.
266     type: string
267   KeystoneSigningCertificate:
268     default: ''
269     description: Keystone certificate for verifying token validity.
270     type: string
271   KeystoneSigningKey:
272     default: ''
273     description: Keystone key for signing tokens.
274     type: string
275     hidden: true
276   MysqlInnodbBufferPoolSize:
277     description: >
278         Specifies the size of the buffer pool in megabytes. Setting to
279         zero should be interpreted as "no value" and will defer to the
280         lower level default.
281     type: number
282     default: 0
283   NeutronDnsmasqOptions:
284     default: 'dhcp-option-force=26,1400'
285     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
286     type: string
287   NeutronPublicInterfaceDefaultRoute:
288     default: ''
289     description: A custom default route for the NeutronPublicInterface.
290     type: string
291   NeutronPublicInterfaceIP:
292     default: ''
293     description: A custom IP address to put onto the NeutronPublicInterface.
294     type: string
295   NeutronPublicInterfaceRawDevice:
296     default: ''
297     description: If set, the public interface is a vlan with this device as the raw device.
298     type: string
299   PublicVirtualInterface:
300     default: 'br-ex'
301     description: >
302         Specifies the interface where the public-facing virtual ip will be assigned.
303         This should be int_public when a VLAN is being used.
304     type: string
305   SSLCertificate:
306     default: ''
307     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
308     type: string
309     hidden: true
310   SSLKey:
311     default: ''
312     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
313     type: string
314     hidden: true
315   SSLCACertificate:
316     default: ''
317     description: If set, the contents of an SSL certificate authority file.
318     type: string
319   SwiftHashSuffix:
320     default: unset
321     description: A random string to be used as a salt when hashing to determine mappings in the ring.
322     type: string
323     hidden: true
324   SwiftPassword:
325     default: unset
326     description: The password for the swift service account, used by the swift proxy services.
327     type: string
328     hidden: true
329   SwiftPartPower:
330     default: 10
331     description: Partition Power to use when building Swift rings
332     type: number
333   SwiftReplicas:
334     type: number
335     default: 1
336     description: How many replicas to use in the swift rings.
337
338 # Compute-specific params
339   CeilometerComputeAgent:
340     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
341     type: string
342     default: ''
343     constraints:
344     - allowed_values: ['', Present]
345   ComputeCount:
346     type: number
347     default: 1
348   HypervisorNeutronPhysicalBridge:
349     default: 'br-ex'
350     description: >
351       An OVS bridge to create on each hypervisor. This defaults to br-ex the
352       same as the control plane nodes, as we have a uniform configuration of
353       the openvswitch agent. Typically should not need to be changed.
354     type: string
355   HypervisorNeutronPublicInterface:
356     default: nic1
357     description: What interface to add to the HypervisorNeutronPhysicalBridge.
358     type: string
359   NeutronNetworkVLANRanges:
360     default: 'datacentre'
361     description: >
362       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
363       Neutron documentation for permitted values. Defaults to permitting any
364       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
365     type: string
366   NovaComputeDriver:
367     type: string
368     default: libvirt.LibvirtDriver
369   NovaComputeExtraConfig:
370     default: {}
371     description: |
372       NovaCompute specific configuration to inject into the cluster. Same
373       structure as ExtraConfig.
374     type: json
375   NovaComputeLibvirtType:
376     default: ''
377     type: string
378   NovaImage:
379     type: string
380     default: overcloud-compute
381     constraints:
382       - custom_constraint: glance.image
383   OvercloudComputeFlavor:
384     description: Use this flavor
385     type: string
386     default: baremetal
387     constraints:
388       - custom_constraint: nova.flavor
389
390 # Block storage specific parameters
391   BlockStorageCount:
392     type: number
393     default: 1
394   BlockStorageImage:
395     default: overcloud-cinder-volume
396     type: string
397   OvercloudBlockStorageFlavor:
398     default: baremetal
399     description: Flavor for block storage nodes to request when deploying.
400     type: string
401
402 # Object storage specific parameters
403   ObjectStorageCount:
404     type: number
405     default: 0
406   OvercloudSwiftStorageFlavor:
407     default: baremetal
408     description: Flavor for Swift storage nodes to request when deploying.
409     type: string
410   SwiftStorageImage:
411     default: overcloud-swift-storage
412     type: string
413
414 resources:
415
416   Controller:
417     type: OS::Heat::ResourceGroup
418     properties:
419       count: {get_param: ControllerCount}
420       resource_def:
421         type: OS::TripleO::Controller
422         properties:
423           AdminPassword: {get_param: AdminPassword}
424           AdminToken: {get_param: AdminToken}
425           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
426           CeilometerPassword: {get_param: CeilometerPassword}
427           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
428           CinderPassword: {get_param: CinderPassword}
429           CinderISCSIHelper: {get_param: CinderISCSIHelper}
430           CloudName: {get_param: CloudName}
431           ControlVirtualInterface: {get_param: ControlVirtualInterface}
432           ControllerExtraConfig: {get_param: controllerExtraConfig}
433           ExtraConfig: {get_param: ExtraConfig}
434           Flavor: {get_param: OvercloudControlFlavor}
435           GlancePort: {get_param: GlancePort}
436           GlanceProtocol: {get_param: GlanceProtocol}
437           GlancePassword: {get_param: GlancePassword}
438           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
439           GlanceLogFile: {get_param: GlanceLogFile}
440           HeatPassword: {get_param: HeatPassword}
441           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
442           Image: {get_param: controllerImage}
443           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
444           KeyName: {get_param: KeyName}
445           KeystoneCACertificate: {get_param: KeystoneCACertificate}
446           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
447           KeystoneSigningKey: {get_param: KeystoneSigningKey}
448           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
449           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
450           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
451           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
452           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
453           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
454           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
455           NeutronPublicInterface: {get_param: NeutronPublicInterface}
456           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
457           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
458           NeutronPassword: {get_param: NeutronPassword}
459           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
460           NovaPassword: {get_param: NovaPassword}
461           NtpServer: {get_param: NtpServer}
462           PublicVirtualInterface: {get_param: PublicVirtualInterface}
463           RabbitUserName: {get_param: RabbitUserName}
464           RabbitPassword: {get_param: RabbitPassword}
465           RabbitCookie: {get_attr: [RabbitCookie, value]}
466           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
467           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
468           SSLCertificate: {get_param: SSLCertificate}
469           SSLKey: {get_param: SSLKey}
470           SSLCACertificate: {get_param: SSLCACertificate}
471           SwiftHashSuffix: {get_param: SwiftHashSuffix}
472           SwiftPartPower: {get_param: SwiftPartPower}
473           SwiftPassword: {get_param: SwiftPassword}
474           SwiftReplicas: { get_param: SwiftReplicas}
475           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
476           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
477
478   Compute:
479     type: OS::Heat::ResourceGroup
480     properties:
481       count: {get_param: ComputeCount}
482       resource_def:
483         type: OS::TripleO::Compute
484         properties:
485           AdminPassword: {get_param: AdminPassword}
486           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
487           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
488           CeilometerPassword: {get_param: CeilometerPassword}
489           ExtraConfig: {get_param: ExtraConfig}
490           Flavor: {get_param: OvercloudComputeFlavor}
491           GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
492           GlancePort: {get_param: GlancePort}
493           GlanceProtocol: {get_param: GlanceProtocol}
494           Image: {get_param: NovaImage}
495           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
496           KeyName: {get_param: KeyName}
497           KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
498           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
499           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
500           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
501           NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
502           NeutronNetworkType: {get_param: NeutronNetworkType}
503           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
504           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
505           NeutronPassword: {get_param: NeutronPassword}
506           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
507           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
508           NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
509           NovaComputeDriver: {get_param: NovaComputeDriver}
510           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
511           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
512           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
513           NovaPassword: {get_param: NovaPassword}
514           NtpServer: {get_param: NtpServer}
515           RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
516           RabbitPassword: {get_param: RabbitPassword}
517           RabbitUserName: {get_param: RabbitUserName}
518           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
519           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
520           NovaDSN:
521             list_join:
522               - ''
523               - - mysql://nova:unset@
524                 - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
525                 - /nova
526           CeilometerDSN:
527             list_join:
528               - ''
529               - - mysql://ceilometer:unset@
530                 - *compute_database_host
531                 - /ceilometer
532           NeutronDSN:
533             list_join:
534               - ''
535               - - mysql://neutron:unset@
536                 - *compute_database_host
537                 - /ovs_neutron
538
539   BlockStorage:
540     type: OS::Heat::ResourceGroup
541     properties:
542       count: {get_param: BlockStorageCount}
543       resource_def:
544         type: OS::TripleO::BlockStorage
545         properties:
546           AdminPassword: {get_param: AdminPassword}
547           Image: {get_param: BlockStorageImage}
548           CinderISCSIHelper: {get_param: CinderISCSIHelper}
549           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
550           CinderPassword: {get_param: CinderPassword}
551           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
552           KeyName: {get_param: KeyName}
553           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
554           NeutronNetworkType: {get_param: NeutronNetworkType}
555           NeutronPassword: {get_param: NeutronPassword}
556           NeutronPublicInterface: {get_param: NeutronPublicInterface}
557           Flavor: {get_param: OvercloudBlockStorageFlavor}
558           RabbitPassword: {get_param: RabbitPassword}
559           RabbitUserName: {get_param: RabbitUserName}
560
561   ObjectStorage:
562     type: OS::Heat::ResourceGroup
563     properties:
564       count: {get_param: ObjectStorageCount}
565       resource_def:
566         type: OS::TripleO::ObjectStorage
567         properties:
568           ControllerIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
569           KeyName: {get_param: KeyName}
570           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
571           NeutronNetworkType: {get_param: NeutronNetworkType}
572           Flavor: {get_param: OvercloudSwiftStorageFlavor}
573           HashSuffix: {get_param: SwiftHashSuffix}
574           PartPower: {get_param: SwiftPartPower}
575           Password: {get_param: SwiftPassword}
576           Image: {get_param: SwiftStorageImage}
577           Replicas: { get_param: SwiftReplicas}
578
579
580   allNodesConfig:
581     type: OS::Heat::StructuredConfig
582     properties:
583       config:
584         completion-signal: {get_input: deploy_signal_id}
585         hosts:
586           list_join:
587           - "\n"
588           - - list_join:
589               - "\n"
590               - {get_attr: [Compute, hosts_entry]}
591             - list_join:
592               - "\n"
593               - {get_attr: [Controller, hosts_entry]}
594             - list_join:
595               - "\n"
596               - {get_attr: [BlockStorage, hosts_entry]}
597             - list_join:
598               - "\n"
599               - {get_attr: [ObjectStorage, hosts_entry]}
600         rabbit:
601           nodes:
602             list_join:
603             - ','
604             - {get_attr: [Controller, hostname]}
605
606   MysqlRootPassword:
607     type: OS::Heat::RandomString
608     properties:
609       length: 10
610
611   MysqlClusterUniquePart:
612     type: OS::Heat::RandomString
613     properties:
614       length: 10
615
616   RabbitCookie:
617     type: OS::Heat::RandomString
618     properties:
619       length: 20
620       salt: {get_param: RabbitCookieSalt}
621
622   ControlVirtualIP:
623     type: OS::Neutron::Port
624     properties:
625       name: control_virtual_ip
626       network_id: {get_param: NeutronControlPlaneID}
627       fixed_ips: {get_param: ControlFixedIPs}
628       replacement_policy: AUTO
629
630   PublicVirtualIP:
631     type: OS::Neutron::Port
632     properties:
633       name: public_virtual_ip
634       network: {get_param: PublicVirtualNetwork}
635       fixed_ips: {get_param: PublicVirtualFixedIPs}
636       replacement_policy: AUTO
637
638   ControllerBootstrapNodeConfig:
639     type: OS::Heat::StructuredConfig
640     properties:
641       group: os-apply-config
642       config:
643         bootstrap_host:
644           bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
645
646   ControllerBootstrapNodeDeployment:
647     type: OS::Heat::StructuredDeployments
648     properties:
649       config: {get_resource: ControllerBootstrapNodeConfig}
650       servers: {get_attr: [Controller, attributes, nova_server_resource]}
651       signal_transport: NO_SIGNAL
652
653   ControllerSwiftDeployment:
654     type: OS::Heat::StructuredDeployments
655     properties:
656       config: {get_resource: SwiftDevicesAndProxyConfig}
657       servers: {get_attr: [Controller, attributes, nova_server_resource]}
658       signal_transport: NO_SIGNAL
659
660   ObjectStorageSwiftDeployment:
661     type: OS::Heat::StructuredDeployments
662     properties:
663       config: {get_resource: SwiftDevicesAndProxyConfig}
664       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
665       signal_transport: NO_SIGNAL
666
667   SwiftDevicesAndProxyConfig:
668     type: OS::Heat::StructuredConfig
669     properties:
670       group: os-apply-config
671       config:
672         swift:
673           devices:
674             list_join:
675             - ", "
676             - - list_join:
677                 - ", "
678                 - {get_attr: [Controller, swift_device]}
679               - list_join:
680                 - ", "
681                 - {get_attr: [ObjectStorage, swift_device]}
682           proxy-memcache:
683             list_join:
684             - ","
685             - {get_attr: [Controller, swift_proxy_memcache]}
686
687   ControllerClusterConfig:
688     type: OS::Heat::StructuredConfig
689     properties:
690       config:
691         corosync:
692           nodes: {get_attr: [Controller, corosync_node]}
693         horizon:
694           caches:
695             memcached:
696               nodes: {get_attr: [Controller, hostname]}
697         mysql:
698           nodes: {get_attr: [Controller, corosync_node]}
699         haproxy:
700           nodes: {get_attr: [Controller, corosync_node]}
701
702   ControllerClusterDeployment:
703     type: OS::Heat::StructuredDeployments
704     properties:
705       config: {get_resource: ControllerClusterConfig}
706       servers: {get_attr: [Controller, attributes, nova_server_resource]}
707       signal_transport: NO_SIGNAL
708
709   ControllerAllNodesDeployment:
710     type: OS::Heat::StructuredDeployments
711     properties:
712       config: {get_resource: allNodesConfig}
713       servers: {get_attr: [Controller, attributes, nova_server_resource]}
714
715   ComputeAllNodesDeployment:
716     type: OS::Heat::StructuredDeployments
717     properties:
718       config: {get_resource: allNodesConfig}
719       servers: {get_attr: [Compute, attributes, nova_server_resource]}
720
721
722 outputs:
723   KeystoneURL:
724     description: URL for the Overcloud Keystone service
725     value:
726       list_join:
727       - ''
728       - - http://
729         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
730         - :5000/v2.0/