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