Perform basic setup of pacemaker cluster on controllers
[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. Must be a UUID.
33   CephMonKey:
34     default: ''
35     description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
36     type: string
37   CephAdminKey:
38     default: ''
39     description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-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   # FIXME: 'guest' is provisioned in RabbitMQ by default, we should create a user if these are changed
187   RabbitUserName:
188     default: guest
189     description: The username for RabbitMQ
190     type: string
191   RabbitPassword:
192     default: guest
193     description: The password for RabbitMQ
194     type: string
195     hidden: true
196   RabbitClientUseSSL:
197     default: false
198     description: >
199         Rabbit client subscriber parameter to specify
200         an SSL connection to the RabbitMQ host.
201     type: string
202   RabbitClientPort:
203     default: 5672
204     description: Set rabbit subscriber port, change this if using SSL
205     type: number
206   SnmpdReadonlyUserName:
207     default: ro_snmp_user
208     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
209     type: string
210   SnmpdReadonlyUserPassword:
211     default: unset
212     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
213     type: string
214     hidden: true
215
216   # Controller-specific params
217   AdminToken:
218     default: unset
219     description: The keystone auth secret.
220     type: string
221     hidden: true
222   CinderEnableRbdBackend:
223     default: false
224     description: Whether to enable or not the Rbd backend for Cinder
225     type: boolean
226   CinderLVMLoopDeviceSize:
227     default: 5000
228     description: The size of the loopback file used by the cinder LVM driver.
229     type: number
230   CinderPassword:
231     default: unset
232     description: The password for the cinder service account, used by cinder-api.
233     type: string
234     hidden: true
235   CinderISCSIHelper:
236     default: tgtadm
237     description: The iSCSI helper to use with cinder.
238     type: string
239   ControllerCount:
240     type: number
241     default: 1
242   controllerExtraConfig:
243     default: {}
244     description: |
245       Controller specific configuration to inject into the cluster. Same
246       structure as ExtraConfig.
247     type: json
248   controllerImage:
249     type: string
250     default: overcloud-control
251     constraints:
252       - custom_constraint: glance.image
253   OvercloudControlFlavor:
254     description: Flavor for control nodes to request when deploying.
255     type: string
256     constraints:
257       - custom_constraint: nova.flavor
258   ControlVirtualInterface:
259     default: 'br-ex'
260     description: Interface where virtual ip will be assigned.
261     type: string
262   EnableGalera:
263     default: true
264     description: Whether to use Galera instead of regular MariaDB.
265     type: boolean
266   ExtraConfig:
267     default: {}
268     description: |
269       Additional configuration to inject into the cluster. The JSON should have
270       the following structure:
271         {"FILEKEY":
272           {"config":
273             [{"section": "SECTIONNAME",
274               "values":
275                 [{"option": "OPTIONNAME",
276                   "value": "VALUENAME"
277                  }
278                 ]
279              }
280             ]
281           }
282         }
283       For instance:
284         {"nova":
285           {"config":
286             [{"section": "default",
287               "values":
288                 [{"option": "force_config_drive",
289                   "value": "always"
290                  }
291                 ]
292              },
293              {"section": "cells",
294               "values":
295                 [{"option": "driver",
296                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
297                  }
298                 ]
299              }
300             ]
301           }
302         }
303     type: json
304   GlanceLogFile:
305     description: The filepath of the file to use for logging messages from Glance.
306     type: string
307     default: ''
308   GlanceNotifierStrategy:
309     description: Strategy to use for Glance notification queue
310     type: string
311     default: noop
312   GlancePassword:
313     default: unset
314     description: The password for the glance service account, used by the glance services.
315     type: string
316     hidden: true
317   HeatPassword:
318     default: unset
319     description: The password for the Heat service account, used by the Heat services.
320     type: string
321     hidden: true
322   HeatStackDomainAdminPassword:
323     description: Password for heat_domain_admin user.
324     type: string
325     default: ''
326     hidden: true
327   KeystoneCACertificate:
328     default: ''
329     description: Keystone self-signed certificate authority certificate.
330     type: string
331   KeystoneSigningCertificate:
332     default: ''
333     description: Keystone certificate for verifying token validity.
334     type: string
335   KeystoneSigningKey:
336     default: ''
337     description: Keystone key for signing tokens.
338     type: string
339     hidden: true
340   KeystoneSSLCertificate:
341     default: ''
342     description: Keystone certificate for verifying token validity.
343     type: string
344   KeystoneSSLCertificateKey:
345     default: ''
346     description: Keystone key for signing tokens.
347     type: string
348     hidden: true
349   MysqlInnodbBufferPoolSize:
350     description: >
351         Specifies the size of the buffer pool in megabytes. Setting to
352         zero should be interpreted as "no value" and will defer to the
353         lower level default.
354     type: number
355     default: 0
356   NeutronDnsmasqOptions:
357     default: 'dhcp-option-force=26,1400'
358     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
359     type: string
360   NeutronPublicInterfaceDefaultRoute:
361     default: ''
362     description: A custom default route for the NeutronPublicInterface.
363     type: string
364   NeutronPublicInterfaceIP:
365     default: ''
366     description: A custom IP address to put onto the NeutronPublicInterface.
367     type: string
368   NeutronPublicInterfaceRawDevice:
369     default: ''
370     description: If set, the public interface is a vlan with this device as the raw device.
371     type: string
372   PublicVirtualInterface:
373     default: 'br-ex'
374     description: >
375         Specifies the interface where the public-facing virtual ip will be assigned.
376         This should be int_public when a VLAN is being used.
377     type: string
378   SSLCertificate:
379     default: ''
380     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
381     type: string
382     hidden: true
383   SSLKey:
384     default: ''
385     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
386     type: string
387     hidden: true
388   SSLCACertificate:
389     default: ''
390     description: If set, the contents of an SSL certificate authority file.
391     type: string
392   SwiftHashSuffix:
393     default: unset
394     description: A random string to be used as a salt when hashing to determine mappings in the ring.
395     type: string
396     hidden: true
397   SwiftPassword:
398     default: unset
399     description: The password for the swift service account, used by the swift proxy services.
400     type: string
401     hidden: true
402   SwiftMountCheck:
403     default: 'false'
404     description: Value of mount_check in Swift account/container/object -server.conf
405     type: boolean
406   SwiftMinPartHours:
407     type: number
408     default: 1
409     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
410   SwiftPartPower:
411     default: 10
412     description: Partition Power to use when building Swift rings
413     type: number
414   SwiftReplicas:
415     type: number
416     default: 3
417     description: How many replicas to use in the swift rings.
418
419 # Compute-specific params
420   CeilometerComputeAgent:
421     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
422     type: string
423     default: ''
424     constraints:
425     - allowed_values: ['', Present]
426   ComputeCount:
427     type: number
428     default: 1
429   HypervisorNeutronPhysicalBridge:
430     default: 'br-ex'
431     description: >
432       An OVS bridge to create on each hypervisor. This defaults to br-ex the
433       same as the control plane nodes, as we have a uniform configuration of
434       the openvswitch agent. Typically should not need to be changed.
435     type: string
436   HypervisorNeutronPublicInterface:
437     default: nic1
438     description: What interface to add to the HypervisorNeutronPhysicalBridge.
439     type: string
440   NeutronNetworkVLANRanges:
441     default: 'datacentre'
442     description: >
443       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
444       Neutron documentation for permitted values. Defaults to permitting any
445       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
446     type: string
447   NovaComputeDriver:
448     type: string
449     default: libvirt.LibvirtDriver
450   NovaComputeExtraConfig:
451     default: {}
452     description: |
453       NovaCompute specific configuration to inject into the cluster. Same
454       structure as ExtraConfig.
455     type: json
456   NovaComputeLibvirtType:
457     default: ''
458     type: string
459   NovaEnableRbdBackend:
460     default: false
461     description: Whether to enable or not the Rbd backend for Nova
462     type: boolean
463   NovaImage:
464     type: string
465     default: overcloud-compute
466     constraints:
467       - custom_constraint: glance.image
468   OvercloudComputeFlavor:
469     description: Use this flavor
470     type: string
471     constraints:
472       - custom_constraint: nova.flavor
473
474 # Block storage specific parameters
475   BlockStorageCount:
476     type: number
477     default: 0
478   BlockStorageImage:
479     default: overcloud-cinder-volume
480     type: string
481   OvercloudBlockStorageFlavor:
482     description: Flavor for block storage nodes to request when deploying.
483     type: string
484     constraints:
485       - custom_constraint: nova.flavor
486
487 # Object storage specific parameters
488   ObjectStorageCount:
489     type: number
490     default: 0
491   OvercloudSwiftStorageFlavor:
492     description: Flavor for Swift storage nodes to request when deploying.
493     type: string
494     constraints:
495       - custom_constraint: nova.flavor
496   SwiftStorageImage:
497     default: overcloud-swift-storage
498     type: string
499
500 # Ceph storage specific parameters
501   CephStorageCount:
502     type: number
503     default: 0
504   CephStorageImage:
505     default: overcloud-ceph-storage
506     type: string
507   OvercloudCephStorageFlavor:
508     default: baremetal
509     description: Flavor for Ceph storage nodes to request when deploying.
510     type: string
511     constraints:
512       - custom_constraint: nova.flavor
513
514 resources:
515
516   HeatAuthEncryptionKey:
517     type: OS::Heat::RandomString
518
519   CorosyncAuthKey:
520     type: OS::Heat::RandomString
521     properties:
522       length: 128
523
524   Controller:
525     type: OS::Heat::ResourceGroup
526     properties:
527       count: {get_param: ControllerCount}
528       resource_def:
529         type: OS::TripleO::Controller
530         properties:
531           AdminPassword: {get_param: AdminPassword}
532           AdminToken: {get_param: AdminToken}
533           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
534           CeilometerPassword: {get_param: CeilometerPassword}
535           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
536           CinderPassword: {get_param: CinderPassword}
537           CinderISCSIHelper: {get_param: CinderISCSIHelper}
538           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
539           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
540           CloudName: {get_param: CloudName}
541           ControlVirtualInterface: {get_param: ControlVirtualInterface}
542           ControllerExtraConfig: {get_param: controllerExtraConfig}
543           CorosyncAuthKey: {get_resource: CorosyncAuthKey}
544           Debug: {get_param: Debug}
545           EnableGalera: {get_param: EnableGalera}
546           ExtraConfig: {get_param: ExtraConfig}
547           Flavor: {get_param: OvercloudControlFlavor}
548           GlancePort: {get_param: GlancePort}
549           GlanceProtocol: {get_param: GlanceProtocol}
550           GlancePassword: {get_param: GlancePassword}
551           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
552           GlanceLogFile: {get_param: GlanceLogFile}
553           HeatPassword: {get_param: HeatPassword}
554           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
555           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
556           Image: {get_param: controllerImage}
557           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
558           KeyName: {get_param: KeyName}
559           KeystoneCACertificate: {get_param: KeystoneCACertificate}
560           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
561           KeystoneSigningKey: {get_param: KeystoneSigningKey}
562           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
563           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
564           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
565           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
566           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
567           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
568           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
569           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
570           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
571           NeutronPublicInterface: {get_param: NeutronPublicInterface}
572           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
573           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
574           NeutronPassword: {get_param: NeutronPassword}
575           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
576           NeutronDVR: {get_param: NeutronDVR}
577           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
578           NeutronAgentMode: {get_param: NeutronAgentMode}
579           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
580           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
581           NeutronL3HA: {get_param: NeutronL3HA}
582           NeutronNetworkType: {get_param: NeutronNetworkType}
583           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
584           NovaPassword: {get_param: NovaPassword}
585           NtpServer: {get_param: NtpServer}
586           PublicVirtualInterface: {get_param: PublicVirtualInterface}
587           RabbitPassword: {get_param: RabbitPassword}
588           RabbitUserName: {get_param: RabbitUserName}
589           RabbitCookie: {get_attr: [RabbitCookie, value]}
590           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
591           RabbitClientPort: {get_param: RabbitClientPort}
592           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
593           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
594           SSLCertificate: {get_param: SSLCertificate}
595           SSLKey: {get_param: SSLKey}
596           SSLCACertificate: {get_param: SSLCACertificate}
597           SwiftHashSuffix: {get_param: SwiftHashSuffix}
598           SwiftMountCheck: {get_param: SwiftMountCheck}
599           SwiftMinPartHours: {get_param: SwiftMinPartHours}
600           SwiftPartPower: {get_param: SwiftPartPower}
601           SwiftPassword: {get_param: SwiftPassword}
602           SwiftReplicas: { get_param: SwiftReplicas}
603           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
604           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
605
606   Compute:
607     type: OS::Heat::ResourceGroup
608     properties:
609       count: {get_param: ComputeCount}
610       resource_def:
611         type: OS::TripleO::Compute
612         properties:
613           AdminPassword: {get_param: AdminPassword}
614           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
615           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
616           CeilometerPassword: {get_param: CeilometerPassword}
617           Debug: {get_param: Debug}
618           ExtraConfig: {get_param: ExtraConfig}
619           Flavor: {get_param: OvercloudComputeFlavor}
620           GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
621           GlancePort: {get_param: GlancePort}
622           GlanceProtocol: {get_param: GlanceProtocol}
623           Image: {get_param: NovaImage}
624           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
625           KeyName: {get_param: KeyName}
626           KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
627           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
628           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
629           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
630           NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
631           NeutronNetworkType: {get_param: NeutronNetworkType}
632           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
633           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
634           NeutronPassword: {get_param: NeutronPassword}
635           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
636           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
637           NeutronDVR: {get_param: NeutronDVR}
638           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
639           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
640           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
641           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
642           # L3 HA and Failover is not relevant for Computes, should be removed
643           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
644           NeutronL3HA: {get_param: NeutronL3HA}
645           NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
646           NovaComputeDriver: {get_param: NovaComputeDriver}
647           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
648           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
649           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
650           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
651           NovaPassword: {get_param: NovaPassword}
652           NtpServer: {get_param: NtpServer}
653           RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
654           RabbitPassword: {get_param: RabbitPassword}
655           RabbitUserName: {get_param: RabbitUserName}
656           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
657           RabbitClientPort: {get_param: RabbitClientPort}
658           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
659           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
660
661   BlockStorage:
662     type: OS::Heat::ResourceGroup
663     properties:
664       count: {get_param: BlockStorageCount}
665       resource_def:
666         type: OS::TripleO::BlockStorage
667         properties:
668           Debug: {get_param: Debug}
669           Image: {get_param: BlockStorageImage}
670           CinderISCSIHelper: {get_param: CinderISCSIHelper}
671           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
672           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
673           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
674           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
675           KeyName: {get_param: KeyName}
676           Flavor: {get_param: OvercloudBlockStorageFlavor}
677           RabbitPassword: {get_param: RabbitPassword}
678           RabbitUserName: {get_param: RabbitUserName}
679           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
680           RabbitClientPort: {get_param: RabbitClientPort}
681           NtpServer: {get_param: NtpServer}
682
683   ObjectStorage:
684     type: OS::Heat::ResourceGroup
685     properties:
686       count: {get_param: ObjectStorageCount}
687       resource_def:
688         type: OS::TripleO::ObjectStorage
689         properties:
690           KeyName: {get_param: KeyName}
691           Flavor: {get_param: OvercloudSwiftStorageFlavor}
692           HashSuffix: {get_param: SwiftHashSuffix}
693           MountCheck: {get_param: SwiftMountCheck}
694           MinPartHours: {get_param: SwiftMinPartHours}
695           PartPower: {get_param: SwiftPartPower}
696           Image: {get_param: SwiftStorageImage}
697           Replicas: { get_param: SwiftReplicas}
698           NtpServer: {get_param: NtpServer}
699
700   CephStorage:
701     type: OS::Heat::ResourceGroup
702     properties:
703       count: {get_param: CephStorageCount}
704       resource_def:
705         type: OS::TripleO::CephStorage
706         properties:
707           Image: {get_param: CephStorageImage}
708           KeyName: {get_param: KeyName}
709           Flavor: {get_param: OvercloudCephStorageFlavor}
710           NtpServer: {get_param: NtpServer}
711
712   allNodesConfig:
713     type: OS::TripleO::AllNodes::SoftwareConfig
714     properties:
715       compute_hosts: {get_attr: [Compute, hosts_entry]}
716       controller_hosts: {get_attr: [Controller, hosts_entry]}
717       controller_ips: {get_attr: [Controller, ip_address]}
718       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
719       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
720       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
721       controller_names: {get_attr: [Controller, hostname]}
722
723   MysqlRootPassword:
724     type: OS::Heat::RandomString
725     properties:
726       length: 10
727
728   MysqlClusterUniquePart:
729     type: OS::Heat::RandomString
730     properties:
731       length: 10
732
733   RabbitCookie:
734     type: OS::Heat::RandomString
735     properties:
736       length: 20
737       salt: {get_param: RabbitCookieSalt}
738
739   ControlVirtualIP:
740     type: OS::Neutron::Port
741     properties:
742       name: control_virtual_ip
743       network_id: {get_param: NeutronControlPlaneID}
744       fixed_ips: {get_param: ControlFixedIPs}
745       replacement_policy: AUTO
746
747   PublicVirtualIP:
748     type: OS::Neutron::Port
749     properties:
750       name: public_virtual_ip
751       network: {get_param: PublicVirtualNetwork}
752       fixed_ips: {get_param: PublicVirtualFixedIPs}
753       replacement_policy: AUTO
754
755   ControllerBootstrapNodeConfig:
756     type: OS::TripleO::BootstrapNode::SoftwareConfig
757     properties:
758       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
759       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
760
761   ControllerBootstrapNodeDeployment:
762     type: OS::Heat::StructuredDeployments
763     properties:
764       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
765       servers: {get_attr: [Controller, attributes, nova_server_resource]}
766       signal_transport: NO_SIGNAL
767
768   ControllerSwiftDeployment:
769     type: OS::Heat::StructuredDeployments
770     properties:
771       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
772       servers: {get_attr: [Controller, attributes, nova_server_resource]}
773       signal_transport: NO_SIGNAL
774
775   ObjectStorageSwiftDeployment:
776     type: OS::Heat::StructuredDeployments
777     properties:
778       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
779       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
780       signal_transport: NO_SIGNAL
781
782   SwiftDevicesAndProxyConfig:
783     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
784     properties:
785       controller_swift_devices: {get_attr: [Controller, swift_device]}
786       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
787       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
788
789   ComputeCephDeployment:
790     type: OS::Heat::StructuredDeployments
791     properties:
792       config: {get_attr: [CephClusterConfig, config_id]}
793       servers: {get_attr: [Compute, attributes, nova_server_resource]}
794
795   ControllerCephDeployment:
796     type: OS::Heat::StructuredDeployments
797     properties:
798       config: {get_attr: [CephClusterConfig, config_id]}
799       servers: {get_attr: [Controller, attributes, nova_server_resource]}
800
801   CephStorageCephDeployment:
802     type: OS::Heat::StructuredDeployments
803     properties:
804       config: {get_attr: [CephClusterConfig, config_id]}
805       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
806
807   CephClusterConfig:
808     type: OS::TripleO::CephClusterConfig::SoftwareConfig
809     properties:
810       ceph_fsid: {get_param: CephClusterFSID}
811       ceph_mon_key: {get_param: CephMonKey}
812       ceph_admin_key: {get_param: CephAdminKey}
813       ceph_mon_names: {get_attr: [Controller, hostname]}
814       ceph_mon_ips: {get_attr: [Controller, ip_address]}
815
816   ControllerClusterConfig:
817     type: OS::Heat::StructuredConfig
818     properties:
819       config:
820         corosync:
821           nodes: {get_attr: [Controller, corosync_node]}
822         horizon:
823           caches:
824             memcached:
825               nodes: {get_attr: [Controller, hostname]}
826         mysql:
827           nodes: {get_attr: [Controller, corosync_node]}
828         haproxy:
829           nodes: {get_attr: [Controller, corosync_node]}
830
831   ControllerClusterDeployment:
832     type: OS::Heat::StructuredDeployments
833     properties:
834       config: {get_resource: ControllerClusterConfig}
835       servers: {get_attr: [Controller, attributes, nova_server_resource]}
836       signal_transport: NO_SIGNAL
837
838   ControllerAllNodesDeployment:
839     type: OS::Heat::StructuredDeployments
840     properties:
841       config: {get_attr: [allNodesConfig, config_id]}
842       servers: {get_attr: [Controller, attributes, nova_server_resource]}
843
844   ComputeAllNodesDeployment:
845     type: OS::Heat::StructuredDeployments
846     properties:
847       config: {get_attr: [allNodesConfig, config_id]}
848       servers: {get_attr: [Compute, attributes, nova_server_resource]}
849
850   BlockStorageAllNodesDeployment:
851     type: OS::Heat::StructuredDeployments
852     properties:
853       config: {get_attr: [allNodesConfig, config_id]}
854       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
855
856   ObjectStorageAllNodesDeployment:
857     type: OS::Heat::StructuredDeployments
858     properties:
859       config: {get_attr: [allNodesConfig, config_id]}
860       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
861
862   CephStorageAllNodesDeployment:
863     type: OS::Heat::StructuredDeployments
864     properties:
865       config: {get_attr: [allNodesConfig, config_id]}
866       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
867
868   # Nested stack deployment runs after all other controller deployments
869   ControllerNodesPostDeployment:
870     type: OS::TripleO::ControllerPostDeployment
871     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
872     properties:
873       servers: {get_attr: [Controller, attributes, nova_server_resource]}
874
875   ComputeNodesPostDeployment:
876     type: OS::TripleO::ComputePostDeployment
877     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
878     properties:
879       servers: {get_attr: [Compute, attributes, nova_server_resource]}
880
881   ObjectStorageNodesPostDeployment:
882     type: OS::TripleO::ObjectStoragePostDeployment
883     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
884     properties:
885       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
886
887   BlockStorageNodesPostDeployment:
888     type: OS::TripleO::BlockStoragePostDeployment
889     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
890     properties:
891       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
892
893   CephStorageNodesPostDeployment:
894     type: OS::TripleO::CephStoragePostDeployment
895     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
896     properties:
897       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
898
899 outputs:
900   KeystoneURL:
901     description: URL for the Overcloud Keystone service
902     value:
903       list_join:
904       - ''
905       - - http://
906         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
907         - :5000/v2.0/