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