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