Use Cinder multibackend by default
[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   # This has to be an UUID so for now we generate it outside the template
29   CephClusterFSID:
30     default: ''
31     type: string
32     description: The Ceph cluster FSID.
33   CephMonKey:
34     default: ''
35     description: The Ceph monitors key.
36     type: string
37   CephAdminKey:
38     default: ''
39     description: The Ceph admin client key.
40     type: string
41   CinderEnableIscsiBackend:
42     default: true
43     description: Whether to enable or not the Iscsi backend for Cinder
44     type: boolean
45   CloudName:
46     default: ''
47     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
48     type: string
49   ControlFixedIPs:
50     default: []
51     description: Should be used for arbitrary ips.
52     type: json
53   Debug:
54     default: ''
55     description: Set to True to enable debugging on all services.
56     type: string
57   DefaultSignalTransport:
58     default: CFN_SIGNAL
59     description: Transport to use for software-config signals.
60     type: string
61     constraints:
62       - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
63   GlancePort:
64     default: "9292"
65     description: Glance port.
66     type: string
67   GlanceProtocol:
68     default: http
69     description: Protocol to use when connecting to glance, set to https for SSL.
70     type: string
71   ImageUpdatePolicy:
72     default: 'REBUILD_PRESERVE_EPHEMERAL'
73     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
74     type: string
75   KeyName:
76     default: default
77     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
78     type: string
79     constraints:
80       - custom_constraint: nova.keypair
81   NeutronBridgeMappings:
82     description: >
83       The OVS logical->physical bridge mappings to use. See the Neutron
84       documentation for details. Defaults to mapping br-ex - the external
85       bridge on hosts - to a physical name 'datacentre' which can be used
86       to create provider networks (and we use this for the default floating
87       network) - if changing this either use different post-install network
88       scripts or be sure to keep 'datacentre' as a mapping network name.
89     type: string
90     default: "datacentre:br-ex"
91   NeutronControlPlaneID:
92     default: ''
93     type: string
94     description: Neutron ID for ctlplane network.
95   NeutronEnableTunnelling:
96     type: string
97     default: "True"
98   NeutronFlatNetworks:
99     type: string
100     default: 'datacentre'
101     description: >
102       If set, flat networks to configure in neutron plugins. Defaults to
103       'datacentre' to permit external network creation.
104   NeutronNetworkType:
105     default: 'gre'
106     description: The tenant network type for Neutron, either gre or vxlan.
107     type: string
108   NeutronPassword:
109     default: unset
110     description: The password for the neutron service account, used by neutron agents.
111     type: string
112     hidden: true
113   NeutronPublicInterface:
114     default: nic1
115     description: What interface to bridge onto br-ex for network nodes.
116     type: string
117   NeutronPublicInterfaceTag:
118     default: ''
119     description: >
120       VLAN tag for creating a public VLAN. The tag will be used to
121       create an access port on the exterior bridge for each control plane node,
122       and that port will be given the IP address returned by neutron from the
123       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
124       overcloud.yaml to include the deployment of VLAN ports to the control
125       plane.
126     type: string
127   NeutronComputeAgentMode:
128     default: 'dvr'
129     description: Agent mode for the neutron-l3-agent on the compute hosts
130     type: string
131   NeutronAgentMode:
132     default: 'dvr_snat'
133     description: Agent mode for the neutron-l3-agent on the controller hosts
134     type: string
135   NeutronDVR:
136     default: 'False'
137     description: Whether to configure Neutron Distributed Virtual Routers
138     type: string
139   NeutronMetadataProxySharedSecret:
140     default: 'unset'
141     description: Shared secret to prevent spoofing
142     type: string
143   NeutronTunnelTypes:
144     default: 'gre'
145     description: |
146         The tunnel types for the Neutron tenant network. To specify multiple
147         values, use a comma separated string, like so: 'gre,vxlan'
148     type: string
149   NeutronMechanismDrivers:
150     default: 'openvswitch'
151     description: |
152         The mechanism drivers for the Neutron tenant network. To specify multiple
153         values, use a comma separated string, like so: 'openvswitch,l2_population'
154     type: string
155   NeutronAllowL3AgentFailover:
156     default: 'True'
157     description: Allow automatic l3-agent failover
158     type: string
159   NeutronL3HA:
160     default: 'False'
161     description: Whether to enable l3-agent HA
162     type: string
163   NovaPassword:
164     default: unset
165     description: The password for the nova service account, used by nova-api.
166     type: string
167     hidden: true
168   NtpServer:
169     type: string
170     default: ''
171   PublicVirtualFixedIPs:
172     default: []
173     description: >
174         Control the IP allocation for the PublicVirtualInterface port. E.g.
175         [{'ip_address':'1.2.3.4'}]
176     type: json
177   PublicVirtualNetwork:
178     default: 'ctlplane'
179     type: string
180     description: >
181         Neutron network to allocate public virtual IP port on.
182   RabbitCookieSalt:
183     type: string
184     default: unset
185     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
186   RabbitUserName:
187     default: guest
188     description: The username for RabbitMQ
189     type: string
190   RabbitPassword:
191     default: guest
192     description: The password for RabbitMQ
193     type: string
194     hidden: true
195   RabbitClientUseSSL:
196     default: false
197     description: >
198         Rabbit client subscriber parameter to specify
199         an SSL connection to the RabbitMQ host.
200     type: string
201   RabbitClientPort:
202     default: 5672
203     description: Set rabbit subscriber port, change this if using SSL
204     type: number
205   SnmpdReadonlyUserName:
206     default: ro_snmp_user
207     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
208     type: string
209   SnmpdReadonlyUserPassword:
210     default: unset
211     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
212     type: string
213     hidden: true
214
215   # Controller-specific params
216   AdminToken:
217     default: unset
218     description: The keystone auth secret.
219     type: string
220     hidden: true
221   CinderLVMLoopDeviceSize:
222     default: 5000
223     description: The size of the loopback file used by the cinder LVM driver.
224     type: number
225   CinderPassword:
226     default: unset
227     description: The password for the cinder service account, used by cinder-api.
228     type: string
229     hidden: true
230   CinderISCSIHelper:
231     default: tgtadm
232     description: The iSCSI helper to use with cinder.
233     type: string
234   ControllerCount:
235     type: number
236     default: 1
237   controllerExtraConfig:
238     default: {}
239     description: |
240       Controller specific configuration to inject into the cluster. Same
241       structure as ExtraConfig.
242     type: json
243   controllerImage:
244     type: string
245     default: overcloud-control
246     constraints:
247       - custom_constraint: glance.image
248   OvercloudControlFlavor:
249     description: Flavor for control nodes to request when deploying.
250     type: string
251     constraints:
252       - custom_constraint: nova.flavor
253   ControlVirtualInterface:
254     default: 'br-ex'
255     description: Interface where virtual ip will be assigned.
256     type: string
257   ExtraConfig:
258     default: {}
259     description: |
260       Additional configuration to inject into the cluster. The JSON should have
261       the following structure:
262         {"FILEKEY":
263           {"config":
264             [{"section": "SECTIONNAME",
265               "values":
266                 [{"option": "OPTIONNAME",
267                   "value": "VALUENAME"
268                  }
269                 ]
270              }
271             ]
272           }
273         }
274       For instance:
275         {"nova":
276           {"config":
277             [{"section": "default",
278               "values":
279                 [{"option": "force_config_drive",
280                   "value": "always"
281                  }
282                 ]
283              },
284              {"section": "cells",
285               "values":
286                 [{"option": "driver",
287                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
288                  }
289                 ]
290              }
291             ]
292           }
293         }
294     type: json
295   GlanceLogFile:
296     description: The filepath of the file to use for logging messages from Glance.
297     type: string
298     default: ''
299   GlanceNotifierStrategy:
300     description: Strategy to use for Glance notification queue
301     type: string
302     default: noop
303   GlancePassword:
304     default: unset
305     description: The password for the glance service account, used by the glance services.
306     type: string
307     hidden: true
308   HeatPassword:
309     default: unset
310     description: The password for the Heat service account, used by the Heat services.
311     type: string
312     hidden: true
313   HeatStackDomainAdminPassword:
314     description: Password for heat_domain_admin user.
315     type: string
316     default: ''
317     hidden: true
318   KeystoneCACertificate:
319     default: ''
320     description: Keystone self-signed certificate authority certificate.
321     type: string
322   KeystoneSigningCertificate:
323     default: ''
324     description: Keystone certificate for verifying token validity.
325     type: string
326   KeystoneSigningKey:
327     default: ''
328     description: Keystone key for signing tokens.
329     type: string
330     hidden: true
331   KeystoneSSLCertificate:
332     default: ''
333     description: Keystone certificate for verifying token validity.
334     type: string
335   KeystoneSSLCertificateKey:
336     default: ''
337     description: Keystone key for signing tokens.
338     type: string
339     hidden: true
340   MysqlInnodbBufferPoolSize:
341     description: >
342         Specifies the size of the buffer pool in megabytes. Setting to
343         zero should be interpreted as "no value" and will defer to the
344         lower level default.
345     type: number
346     default: 0
347   NeutronDnsmasqOptions:
348     default: 'dhcp-option-force=26,1400'
349     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
350     type: string
351   NeutronPublicInterfaceDefaultRoute:
352     default: ''
353     description: A custom default route for the NeutronPublicInterface.
354     type: string
355   NeutronPublicInterfaceIP:
356     default: ''
357     description: A custom IP address to put onto the NeutronPublicInterface.
358     type: string
359   NeutronPublicInterfaceRawDevice:
360     default: ''
361     description: If set, the public interface is a vlan with this device as the raw device.
362     type: string
363   PublicVirtualInterface:
364     default: 'br-ex'
365     description: >
366         Specifies the interface where the public-facing virtual ip will be assigned.
367         This should be int_public when a VLAN is being used.
368     type: string
369   SSLCertificate:
370     default: ''
371     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
372     type: string
373     hidden: true
374   SSLKey:
375     default: ''
376     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
377     type: string
378     hidden: true
379   SSLCACertificate:
380     default: ''
381     description: If set, the contents of an SSL certificate authority file.
382     type: string
383   SwiftHashSuffix:
384     default: unset
385     description: A random string to be used as a salt when hashing to determine mappings in the ring.
386     type: string
387     hidden: true
388   SwiftPassword:
389     default: unset
390     description: The password for the swift service account, used by the swift proxy services.
391     type: string
392     hidden: true
393   SwiftMountCheck:
394     default: 'false'
395     description: Value of mount_check in Swift account/container/object -server.conf
396     type: boolean
397   SwiftMinPartHours:
398     type: number
399     default: 1
400     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
401   SwiftPartPower:
402     default: 10
403     description: Partition Power to use when building Swift rings
404     type: number
405   SwiftReplicas:
406     type: number
407     default: 3
408     description: How many replicas to use in the swift rings.
409
410 # Compute-specific params
411   CeilometerComputeAgent:
412     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
413     type: string
414     default: ''
415     constraints:
416     - allowed_values: ['', Present]
417   ComputeCount:
418     type: number
419     default: 1
420   HypervisorNeutronPhysicalBridge:
421     default: 'br-ex'
422     description: >
423       An OVS bridge to create on each hypervisor. This defaults to br-ex the
424       same as the control plane nodes, as we have a uniform configuration of
425       the openvswitch agent. Typically should not need to be changed.
426     type: string
427   HypervisorNeutronPublicInterface:
428     default: nic1
429     description: What interface to add to the HypervisorNeutronPhysicalBridge.
430     type: string
431   NeutronNetworkVLANRanges:
432     default: 'datacentre'
433     description: >
434       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
435       Neutron documentation for permitted values. Defaults to permitting any
436       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
437     type: string
438   NovaComputeDriver:
439     type: string
440     default: libvirt.LibvirtDriver
441   NovaComputeExtraConfig:
442     default: {}
443     description: |
444       NovaCompute specific configuration to inject into the cluster. Same
445       structure as ExtraConfig.
446     type: json
447   NovaComputeLibvirtType:
448     default: ''
449     type: string
450   NovaImage:
451     type: string
452     default: overcloud-compute
453     constraints:
454       - custom_constraint: glance.image
455   OvercloudComputeFlavor:
456     description: Use this flavor
457     type: string
458     constraints:
459       - custom_constraint: nova.flavor
460
461 # Block storage specific parameters
462   BlockStorageCount:
463     type: number
464     default: 0
465   BlockStorageImage:
466     default: overcloud-cinder-volume
467     type: string
468   OvercloudBlockStorageFlavor:
469     description: Flavor for block storage nodes to request when deploying.
470     type: string
471     constraints:
472       - custom_constraint: nova.flavor
473
474 # Object storage specific parameters
475   ObjectStorageCount:
476     type: number
477     default: 0
478   OvercloudSwiftStorageFlavor:
479     description: Flavor for Swift storage nodes to request when deploying.
480     type: string
481     constraints:
482       - custom_constraint: nova.flavor
483   SwiftStorageImage:
484     default: overcloud-swift-storage
485     type: string
486
487 # Ceph storage specific parameters
488   CephStorageCount:
489     type: number
490     default: 0
491   CephStorageImage:
492     default: overcloud-ceph-storage
493     type: string
494   OvercloudCephStorageFlavor:
495     default: baremetal
496     description: Flavor for Ceph storage nodes to request when deploying.
497     type: string
498     constraints:
499       - custom_constraint: nova.flavor
500
501 resources:
502
503   Controller:
504     type: OS::Heat::ResourceGroup
505     properties:
506       count: {get_param: ControllerCount}
507       resource_def:
508         type: OS::TripleO::Controller
509         properties:
510           AdminPassword: {get_param: AdminPassword}
511           AdminToken: {get_param: AdminToken}
512           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
513           CeilometerPassword: {get_param: CeilometerPassword}
514           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
515           CinderPassword: {get_param: CinderPassword}
516           CinderISCSIHelper: {get_param: CinderISCSIHelper}
517           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
518           CloudName: {get_param: CloudName}
519           ControlVirtualInterface: {get_param: ControlVirtualInterface}
520           ControllerExtraConfig: {get_param: controllerExtraConfig}
521           ExtraConfig: {get_param: ExtraConfig}
522           Flavor: {get_param: OvercloudControlFlavor}
523           GlancePort: {get_param: GlancePort}
524           GlanceProtocol: {get_param: GlanceProtocol}
525           GlancePassword: {get_param: GlancePassword}
526           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
527           GlanceLogFile: {get_param: GlanceLogFile}
528           HeatPassword: {get_param: HeatPassword}
529           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
530           Image: {get_param: controllerImage}
531           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
532           KeyName: {get_param: KeyName}
533           KeystoneCACertificate: {get_param: KeystoneCACertificate}
534           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
535           KeystoneSigningKey: {get_param: KeystoneSigningKey}
536           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
537           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
538           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
539           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
540           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
541           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
542           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
543           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
544           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
545           NeutronPublicInterface: {get_param: NeutronPublicInterface}
546           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
547           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
548           NeutronPassword: {get_param: NeutronPassword}
549           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
550           NeutronDVR: {get_param: NeutronDVR}
551           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
552           NeutronAgentMode: {get_param: NeutronAgentMode}
553           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
554           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
555           NeutronL3HA: {get_param: NeutronL3HA}
556           NeutronNetworkType: {get_param: NeutronNetworkType}
557           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
558           NovaPassword: {get_param: NovaPassword}
559           NtpServer: {get_param: NtpServer}
560           PublicVirtualInterface: {get_param: PublicVirtualInterface}
561           RabbitUserName: {get_param: RabbitUserName}
562           RabbitPassword: {get_param: RabbitPassword}
563           RabbitCookie: {get_attr: [RabbitCookie, value]}
564           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
565           RabbitClientPort: {get_param: RabbitClientPort}
566           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
567           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
568           SSLCertificate: {get_param: SSLCertificate}
569           SSLKey: {get_param: SSLKey}
570           SSLCACertificate: {get_param: SSLCACertificate}
571           SwiftHashSuffix: {get_param: SwiftHashSuffix}
572           SwiftMountCheck: {get_param: SwiftMountCheck}
573           SwiftMinPartHours: {get_param: SwiftMinPartHours}
574           SwiftPartPower: {get_param: SwiftPartPower}
575           SwiftPassword: {get_param: SwiftPassword}
576           SwiftReplicas: { get_param: SwiftReplicas}
577           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
578           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
579
580   Compute:
581     type: OS::Heat::ResourceGroup
582     properties:
583       count: {get_param: ComputeCount}
584       resource_def:
585         type: OS::TripleO::Compute
586         properties:
587           AdminPassword: {get_param: AdminPassword}
588           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
589           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
590           CeilometerPassword: {get_param: CeilometerPassword}
591           ExtraConfig: {get_param: ExtraConfig}
592           Flavor: {get_param: OvercloudComputeFlavor}
593           GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
594           GlancePort: {get_param: GlancePort}
595           GlanceProtocol: {get_param: GlanceProtocol}
596           Image: {get_param: NovaImage}
597           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
598           KeyName: {get_param: KeyName}
599           KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
600           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
601           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
602           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
603           NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
604           NeutronNetworkType: {get_param: NeutronNetworkType}
605           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
606           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
607           NeutronPassword: {get_param: NeutronPassword}
608           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
609           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
610           NeutronDVR: {get_param: NeutronDVR}
611           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
612           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
613           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
614           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
615           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
616           NeutronL3HA: {get_param: NeutronL3HA}
617           NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
618           NovaComputeDriver: {get_param: NovaComputeDriver}
619           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
620           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
621           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
622           NovaPassword: {get_param: NovaPassword}
623           NtpServer: {get_param: NtpServer}
624           RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
625           RabbitPassword: {get_param: RabbitPassword}
626           RabbitUserName: {get_param: RabbitUserName}
627           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
628           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
629
630   BlockStorage:
631     type: OS::Heat::ResourceGroup
632     properties:
633       count: {get_param: BlockStorageCount}
634       resource_def:
635         type: OS::TripleO::BlockStorage
636         properties:
637           Image: {get_param: BlockStorageImage}
638           CinderISCSIHelper: {get_param: CinderISCSIHelper}
639           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
640           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
641           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
642           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
643           KeyName: {get_param: KeyName}
644           Flavor: {get_param: OvercloudBlockStorageFlavor}
645           RabbitPassword: {get_param: RabbitPassword}
646           RabbitUserName: {get_param: RabbitUserName}
647           NtpServer: {get_param: NtpServer}
648
649   ObjectStorage:
650     type: OS::Heat::ResourceGroup
651     properties:
652       count: {get_param: ObjectStorageCount}
653       resource_def:
654         type: OS::TripleO::ObjectStorage
655         properties:
656           KeyName: {get_param: KeyName}
657           Flavor: {get_param: OvercloudSwiftStorageFlavor}
658           HashSuffix: {get_param: SwiftHashSuffix}
659           MountCheck: {get_param: SwiftMountCheck}
660           MinPartHours: {get_param: SwiftMinPartHours}
661           PartPower: {get_param: SwiftPartPower}
662           Image: {get_param: SwiftStorageImage}
663           Replicas: { get_param: SwiftReplicas}
664           NtpServer: {get_param: NtpServer}
665
666   CephStorage:
667     type: OS::Heat::ResourceGroup
668     properties:
669       count: {get_param: CephStorageCount}
670       resource_def:
671         type: OS::TripleO::CephStorage
672         properties:
673           Image: {get_param: CephStorageImage}
674           KeyName: {get_param: KeyName}
675           Flavor: {get_param: OvercloudCephStorageFlavor}
676           NtpServer: {get_param: NtpServer}
677
678   allNodesConfig:
679     type: OS::TripleO::AllNodes::SoftwareConfig
680     properties:
681       compute_hosts: {get_attr: [Compute, hosts_entry]}
682       controller_hosts: {get_attr: [Controller, hosts_entry]}
683       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
684       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
685       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
686       controller_names: {get_attr: [Controller, hostname]}
687
688   MysqlRootPassword:
689     type: OS::Heat::RandomString
690     properties:
691       length: 10
692
693   MysqlClusterUniquePart:
694     type: OS::Heat::RandomString
695     properties:
696       length: 10
697
698   RabbitCookie:
699     type: OS::Heat::RandomString
700     properties:
701       length: 20
702       salt: {get_param: RabbitCookieSalt}
703
704   ControlVirtualIP:
705     type: OS::Neutron::Port
706     properties:
707       name: control_virtual_ip
708       network_id: {get_param: NeutronControlPlaneID}
709       fixed_ips: {get_param: ControlFixedIPs}
710       replacement_policy: AUTO
711
712   PublicVirtualIP:
713     type: OS::Neutron::Port
714     properties:
715       name: public_virtual_ip
716       network: {get_param: PublicVirtualNetwork}
717       fixed_ips: {get_param: PublicVirtualFixedIPs}
718       replacement_policy: AUTO
719
720   ControllerBootstrapNodeConfig:
721     type: OS::TripleO::BootstrapNode::SoftwareConfig
722     properties:
723       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
724
725   ControllerBootstrapNodeDeployment:
726     type: OS::Heat::StructuredDeployments
727     properties:
728       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
729       servers: {get_attr: [Controller, attributes, nova_server_resource]}
730       signal_transport: NO_SIGNAL
731
732   ControllerSwiftDeployment:
733     type: OS::Heat::StructuredDeployments
734     properties:
735       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
736       servers: {get_attr: [Controller, attributes, nova_server_resource]}
737       signal_transport: NO_SIGNAL
738
739   ObjectStorageSwiftDeployment:
740     type: OS::Heat::StructuredDeployments
741     properties:
742       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
743       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
744       signal_transport: NO_SIGNAL
745
746   SwiftDevicesAndProxyConfig:
747     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
748     properties:
749       controller_swift_devices: {get_attr: [Controller, swift_device]}
750       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
751       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
752
753   ControllerCephDeployment:
754     type: OS::Heat::StructuredDeployments
755     properties:
756       config: {get_attr: [CephClusterConfig, config_id]}
757       servers: {get_attr: [Controller, attributes, nova_server_resource]}
758
759   CephStorageCephDeployment:
760     type: OS::Heat::StructuredDeployments
761     properties:
762       config: {get_attr: [CephClusterConfig, config_id]}
763       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
764
765   CephClusterConfig:
766     type: OS::TripleO::CephClusterConfig::SoftwareConfig
767     properties:
768       ceph_fsid: {get_param: CephClusterFSID}
769       ceph_mon_key: {get_param: CephMonKey}
770       ceph_admin_key: {get_param: CephAdminKey}
771       ceph_mon_names: {get_attr: [Controller, hostname]}
772       ceph_mon_ips: {get_attr: [Controller, ip_address]}
773
774   ControllerClusterConfig:
775     type: OS::Heat::StructuredConfig
776     properties:
777       config:
778         corosync:
779           nodes: {get_attr: [Controller, corosync_node]}
780         horizon:
781           caches:
782             memcached:
783               nodes: {get_attr: [Controller, hostname]}
784         mysql:
785           nodes: {get_attr: [Controller, corosync_node]}
786         haproxy:
787           nodes: {get_attr: [Controller, corosync_node]}
788
789   ControllerClusterDeployment:
790     type: OS::Heat::StructuredDeployments
791     properties:
792       config: {get_resource: ControllerClusterConfig}
793       servers: {get_attr: [Controller, attributes, nova_server_resource]}
794       signal_transport: NO_SIGNAL
795
796   ControllerAllNodesDeployment:
797     type: OS::Heat::StructuredDeployments
798     properties:
799       config: {get_attr: [allNodesConfig, config_id]}
800       servers: {get_attr: [Controller, attributes, nova_server_resource]}
801
802   ComputeAllNodesDeployment:
803     type: OS::Heat::StructuredDeployments
804     properties:
805       config: {get_attr: [allNodesConfig, config_id]}
806       servers: {get_attr: [Compute, attributes, nova_server_resource]}
807
808   BlockStorageAllNodesDeployment:
809     type: OS::Heat::StructuredDeployments
810     properties:
811       config: {get_attr: [allNodesConfig, config_id]}
812       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
813
814   ObjectStorageAllNodesDeployment:
815     type: OS::Heat::StructuredDeployments
816     properties:
817       config: {get_attr: [allNodesConfig, config_id]}
818       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
819
820   CephStorageAllNodesDeployment:
821     type: OS::Heat::StructuredDeployments
822     properties:
823       config: {get_attr: [allNodesConfig, config_id]}
824       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
825
826   # Nested stack deployment runs after all other controller deployments
827   ControllerNodesPostDeployment:
828     type: OS::TripleO::ControllerPostDeployment
829     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
830     properties:
831       servers: {get_attr: [Controller, attributes, nova_server_resource]}
832
833   ComputeNodesPostDeployment:
834     type: OS::TripleO::ComputePostDeployment
835     depends_on: ComputeAllNodesDeployment
836     properties:
837       servers: {get_attr: [Compute, attributes, nova_server_resource]}
838
839   ObjectStorageNodesPostDeployment:
840     type: OS::TripleO::ObjectStoragePostDeployment
841     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
842     properties:
843       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
844
845   BlockStorageNodesPostDeployment:
846     type: OS::TripleO::BlockStoragePostDeployment
847     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
848     properties:
849       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
850
851   CephStorageNodesPostDeployment:
852     type: OS::TripleO::CephStoragePostDeployment
853     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
854     properties:
855       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
856
857 outputs:
858   KeystoneURL:
859     description: URL for the Overcloud Keystone service
860     value:
861       list_join:
862       - ''
863       - - http://
864         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
865         - :5000/v2.0/