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