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