Merge "Make rabbitmq bind on ctlplane instead of 0.0.0.0"
[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   Controller:
520     type: OS::Heat::ResourceGroup
521     properties:
522       count: {get_param: ControllerCount}
523       resource_def:
524         type: OS::TripleO::Controller
525         properties:
526           AdminPassword: {get_param: AdminPassword}
527           AdminToken: {get_param: AdminToken}
528           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
529           CeilometerPassword: {get_param: CeilometerPassword}
530           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
531           CinderPassword: {get_param: CinderPassword}
532           CinderISCSIHelper: {get_param: CinderISCSIHelper}
533           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
534           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
535           CloudName: {get_param: CloudName}
536           ControlVirtualInterface: {get_param: ControlVirtualInterface}
537           ControllerExtraConfig: {get_param: controllerExtraConfig}
538           Debug: {get_param: Debug}
539           EnableGalera: {get_param: EnableGalera}
540           ExtraConfig: {get_param: ExtraConfig}
541           Flavor: {get_param: OvercloudControlFlavor}
542           GlancePort: {get_param: GlancePort}
543           GlanceProtocol: {get_param: GlanceProtocol}
544           GlancePassword: {get_param: GlancePassword}
545           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
546           GlanceLogFile: {get_param: GlanceLogFile}
547           HeatPassword: {get_param: HeatPassword}
548           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
549           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
550           Image: {get_param: controllerImage}
551           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
552           KeyName: {get_param: KeyName}
553           KeystoneCACertificate: {get_param: KeystoneCACertificate}
554           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
555           KeystoneSigningKey: {get_param: KeystoneSigningKey}
556           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
557           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
558           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
559           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
560           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
561           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
562           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
563           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
564           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
565           NeutronPublicInterface: {get_param: NeutronPublicInterface}
566           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
567           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
568           NeutronPassword: {get_param: NeutronPassword}
569           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
570           NeutronDVR: {get_param: NeutronDVR}
571           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
572           NeutronAgentMode: {get_param: NeutronAgentMode}
573           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
574           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
575           NeutronL3HA: {get_param: NeutronL3HA}
576           NeutronNetworkType: {get_param: NeutronNetworkType}
577           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
578           NovaPassword: {get_param: NovaPassword}
579           NtpServer: {get_param: NtpServer}
580           PublicVirtualInterface: {get_param: PublicVirtualInterface}
581           RabbitPassword: {get_param: RabbitPassword}
582           RabbitUserName: {get_param: RabbitUserName}
583           RabbitCookie: {get_attr: [RabbitCookie, value]}
584           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
585           RabbitClientPort: {get_param: RabbitClientPort}
586           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
587           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
588           SSLCertificate: {get_param: SSLCertificate}
589           SSLKey: {get_param: SSLKey}
590           SSLCACertificate: {get_param: SSLCACertificate}
591           SwiftHashSuffix: {get_param: SwiftHashSuffix}
592           SwiftMountCheck: {get_param: SwiftMountCheck}
593           SwiftMinPartHours: {get_param: SwiftMinPartHours}
594           SwiftPartPower: {get_param: SwiftPartPower}
595           SwiftPassword: {get_param: SwiftPassword}
596           SwiftReplicas: { get_param: SwiftReplicas}
597           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
598           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
599
600   Compute:
601     type: OS::Heat::ResourceGroup
602     properties:
603       count: {get_param: ComputeCount}
604       resource_def:
605         type: OS::TripleO::Compute
606         properties:
607           AdminPassword: {get_param: AdminPassword}
608           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
609           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
610           CeilometerPassword: {get_param: CeilometerPassword}
611           Debug: {get_param: Debug}
612           ExtraConfig: {get_param: ExtraConfig}
613           Flavor: {get_param: OvercloudComputeFlavor}
614           GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
615           GlancePort: {get_param: GlancePort}
616           GlanceProtocol: {get_param: GlanceProtocol}
617           Image: {get_param: NovaImage}
618           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
619           KeyName: {get_param: KeyName}
620           KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
621           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
622           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
623           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
624           NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
625           NeutronNetworkType: {get_param: NeutronNetworkType}
626           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
627           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
628           NeutronPassword: {get_param: NeutronPassword}
629           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
630           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
631           NeutronDVR: {get_param: NeutronDVR}
632           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
633           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
634           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
635           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
636           # L3 HA and Failover is not relevant for Computes, should be removed
637           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
638           NeutronL3HA: {get_param: NeutronL3HA}
639           NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
640           NovaComputeDriver: {get_param: NovaComputeDriver}
641           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
642           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
643           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
644           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
645           NovaPassword: {get_param: NovaPassword}
646           NtpServer: {get_param: NtpServer}
647           RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
648           RabbitPassword: {get_param: RabbitPassword}
649           RabbitUserName: {get_param: RabbitUserName}
650           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
651           RabbitClientPort: {get_param: RabbitClientPort}
652           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
653           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
654
655   BlockStorage:
656     type: OS::Heat::ResourceGroup
657     properties:
658       count: {get_param: BlockStorageCount}
659       resource_def:
660         type: OS::TripleO::BlockStorage
661         properties:
662           Debug: {get_param: Debug}
663           Image: {get_param: BlockStorageImage}
664           CinderISCSIHelper: {get_param: CinderISCSIHelper}
665           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
666           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
667           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
668           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
669           KeyName: {get_param: KeyName}
670           Flavor: {get_param: OvercloudBlockStorageFlavor}
671           RabbitPassword: {get_param: RabbitPassword}
672           RabbitUserName: {get_param: RabbitUserName}
673           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
674           RabbitClientPort: {get_param: RabbitClientPort}
675           NtpServer: {get_param: NtpServer}
676
677   ObjectStorage:
678     type: OS::Heat::ResourceGroup
679     properties:
680       count: {get_param: ObjectStorageCount}
681       resource_def:
682         type: OS::TripleO::ObjectStorage
683         properties:
684           KeyName: {get_param: KeyName}
685           Flavor: {get_param: OvercloudSwiftStorageFlavor}
686           HashSuffix: {get_param: SwiftHashSuffix}
687           MountCheck: {get_param: SwiftMountCheck}
688           MinPartHours: {get_param: SwiftMinPartHours}
689           PartPower: {get_param: SwiftPartPower}
690           Image: {get_param: SwiftStorageImage}
691           Replicas: { get_param: SwiftReplicas}
692           NtpServer: {get_param: NtpServer}
693
694   CephStorage:
695     type: OS::Heat::ResourceGroup
696     properties:
697       count: {get_param: CephStorageCount}
698       resource_def:
699         type: OS::TripleO::CephStorage
700         properties:
701           Image: {get_param: CephStorageImage}
702           KeyName: {get_param: KeyName}
703           Flavor: {get_param: OvercloudCephStorageFlavor}
704           NtpServer: {get_param: NtpServer}
705
706   allNodesConfig:
707     type: OS::TripleO::AllNodes::SoftwareConfig
708     properties:
709       compute_hosts: {get_attr: [Compute, hosts_entry]}
710       controller_hosts: {get_attr: [Controller, hosts_entry]}
711       controller_ips: {get_attr: [Controller, ip_address]}
712       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
713       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
714       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
715       controller_names: {get_attr: [Controller, hostname]}
716
717   MysqlRootPassword:
718     type: OS::Heat::RandomString
719     properties:
720       length: 10
721
722   MysqlClusterUniquePart:
723     type: OS::Heat::RandomString
724     properties:
725       length: 10
726
727   RabbitCookie:
728     type: OS::Heat::RandomString
729     properties:
730       length: 20
731       salt: {get_param: RabbitCookieSalt}
732
733   ControlVirtualIP:
734     type: OS::Neutron::Port
735     properties:
736       name: control_virtual_ip
737       network_id: {get_param: NeutronControlPlaneID}
738       fixed_ips: {get_param: ControlFixedIPs}
739       replacement_policy: AUTO
740
741   PublicVirtualIP:
742     type: OS::Neutron::Port
743     properties:
744       name: public_virtual_ip
745       network: {get_param: PublicVirtualNetwork}
746       fixed_ips: {get_param: PublicVirtualFixedIPs}
747       replacement_policy: AUTO
748
749   ControllerBootstrapNodeConfig:
750     type: OS::TripleO::BootstrapNode::SoftwareConfig
751     properties:
752       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
753       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
754
755   ControllerBootstrapNodeDeployment:
756     type: OS::Heat::StructuredDeployments
757     properties:
758       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
759       servers: {get_attr: [Controller, attributes, nova_server_resource]}
760       signal_transport: NO_SIGNAL
761
762   ControllerSwiftDeployment:
763     type: OS::Heat::StructuredDeployments
764     properties:
765       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
766       servers: {get_attr: [Controller, attributes, nova_server_resource]}
767       signal_transport: NO_SIGNAL
768
769   ObjectStorageSwiftDeployment:
770     type: OS::Heat::StructuredDeployments
771     properties:
772       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
773       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
774       signal_transport: NO_SIGNAL
775
776   SwiftDevicesAndProxyConfig:
777     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
778     properties:
779       controller_swift_devices: {get_attr: [Controller, swift_device]}
780       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
781       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
782
783   ComputeCephDeployment:
784     type: OS::Heat::StructuredDeployments
785     properties:
786       config: {get_attr: [CephClusterConfig, config_id]}
787       servers: {get_attr: [Compute, attributes, nova_server_resource]}
788
789   ControllerCephDeployment:
790     type: OS::Heat::StructuredDeployments
791     properties:
792       config: {get_attr: [CephClusterConfig, config_id]}
793       servers: {get_attr: [Controller, attributes, nova_server_resource]}
794
795   CephStorageCephDeployment:
796     type: OS::Heat::StructuredDeployments
797     properties:
798       config: {get_attr: [CephClusterConfig, config_id]}
799       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
800
801   CephClusterConfig:
802     type: OS::TripleO::CephClusterConfig::SoftwareConfig
803     properties:
804       ceph_fsid: {get_param: CephClusterFSID}
805       ceph_mon_key: {get_param: CephMonKey}
806       ceph_admin_key: {get_param: CephAdminKey}
807       ceph_mon_names: {get_attr: [Controller, hostname]}
808       ceph_mon_ips: {get_attr: [Controller, ip_address]}
809
810   ControllerClusterConfig:
811     type: OS::Heat::StructuredConfig
812     properties:
813       config:
814         corosync:
815           nodes: {get_attr: [Controller, corosync_node]}
816         horizon:
817           caches:
818             memcached:
819               nodes: {get_attr: [Controller, hostname]}
820         mysql:
821           nodes: {get_attr: [Controller, corosync_node]}
822         haproxy:
823           nodes: {get_attr: [Controller, corosync_node]}
824
825   ControllerClusterDeployment:
826     type: OS::Heat::StructuredDeployments
827     properties:
828       config: {get_resource: ControllerClusterConfig}
829       servers: {get_attr: [Controller, attributes, nova_server_resource]}
830       signal_transport: NO_SIGNAL
831
832   ControllerAllNodesDeployment:
833     type: OS::Heat::StructuredDeployments
834     properties:
835       config: {get_attr: [allNodesConfig, config_id]}
836       servers: {get_attr: [Controller, attributes, nova_server_resource]}
837
838   ComputeAllNodesDeployment:
839     type: OS::Heat::StructuredDeployments
840     properties:
841       config: {get_attr: [allNodesConfig, config_id]}
842       servers: {get_attr: [Compute, attributes, nova_server_resource]}
843
844   BlockStorageAllNodesDeployment:
845     type: OS::Heat::StructuredDeployments
846     properties:
847       config: {get_attr: [allNodesConfig, config_id]}
848       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
849
850   ObjectStorageAllNodesDeployment:
851     type: OS::Heat::StructuredDeployments
852     properties:
853       config: {get_attr: [allNodesConfig, config_id]}
854       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
855
856   CephStorageAllNodesDeployment:
857     type: OS::Heat::StructuredDeployments
858     properties:
859       config: {get_attr: [allNodesConfig, config_id]}
860       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
861
862   # Nested stack deployment runs after all other controller deployments
863   ControllerNodesPostDeployment:
864     type: OS::TripleO::ControllerPostDeployment
865     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
866     properties:
867       servers: {get_attr: [Controller, attributes, nova_server_resource]}
868
869   ComputeNodesPostDeployment:
870     type: OS::TripleO::ComputePostDeployment
871     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
872     properties:
873       servers: {get_attr: [Compute, attributes, nova_server_resource]}
874
875   ObjectStorageNodesPostDeployment:
876     type: OS::TripleO::ObjectStoragePostDeployment
877     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
878     properties:
879       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
880
881   BlockStorageNodesPostDeployment:
882     type: OS::TripleO::BlockStoragePostDeployment
883     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
884     properties:
885       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
886
887   CephStorageNodesPostDeployment:
888     type: OS::TripleO::CephStoragePostDeployment
889     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
890     properties:
891       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
892
893 outputs:
894   KeystoneURL:
895     description: URL for the Overcloud Keystone service
896     value:
897       list_join:
898       - ''
899       - - http://
900         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
901         - :5000/v2.0/