fce322c8946f271c3ba4479e15126f763b787cbc
[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   CeilometerBackend:
19     default: 'mongodb'
20     description: The ceilometer backend type.
21     type: string
22   CeilometerMeteringSecret:
23     default: unset
24     description: Secret shared by the ceilometer services.
25     type: string
26     hidden: true
27   CeilometerPassword:
28     default: unset
29     description: The password for the ceilometer service account.
30     type: string
31     hidden: true
32   # This has to be an UUID so for now we generate it outside the template
33   CephClusterFSID:
34     default: ''
35     type: string
36     description: The Ceph cluster FSID. Must be a UUID.
37   CephMonKey:
38     default: ''
39     description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
40     type: string
41   CephAdminKey:
42     default: ''
43     description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
44     type: string
45   CinderEnableIscsiBackend:
46     default: true
47     description: Whether to enable or not the Iscsi backend for Cinder
48     type: boolean
49   CloudName:
50     default: ''
51     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
52     type: string
53   ControlFixedIPs:
54     default: []
55     description: Should be used for arbitrary ips.
56     type: json
57   Debug:
58     default: ''
59     description: Set to True to enable debugging on all services.
60     type: string
61   DefaultSignalTransport:
62     default: CFN_SIGNAL
63     description: Transport to use for software-config signals.
64     type: string
65     constraints:
66       - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
67   GlancePort:
68     default: "9292"
69     description: Glance port.
70     type: string
71   GlanceProtocol:
72     default: http
73     description: Protocol to use when connecting to glance, set to https for SSL.
74     type: string
75   ImageUpdatePolicy:
76     default: 'REBUILD_PRESERVE_EPHEMERAL'
77     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
78     type: string
79   KeyName:
80     default: default
81     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
82     type: string
83     constraints:
84       - custom_constraint: nova.keypair
85   NeutronBridgeMappings:
86     description: >
87       The OVS logical->physical bridge mappings to use. See the Neutron
88       documentation for details. Defaults to mapping br-ex - the external
89       bridge on hosts - to a physical name 'datacentre' which can be used
90       to create provider networks (and we use this for the default floating
91       network) - if changing this either use different post-install network
92       scripts or be sure to keep 'datacentre' as a mapping network name.
93     type: string
94     default: "datacentre:br-ex"
95   NeutronControlPlaneID:
96     default: ''
97     type: string
98     description: Neutron ID for ctlplane network.
99   NeutronEnableTunnelling:
100     type: string
101     default: "True"
102   NeutronFlatNetworks:
103     type: string
104     default: 'datacentre'
105     description: >
106       If set, flat networks to configure in neutron plugins. Defaults to
107       'datacentre' to permit external network creation.
108   NeutronNetworkType:
109     default: 'gre'
110     description: The tenant network type for Neutron, either gre or vxlan.
111     type: string
112   NeutronPassword:
113     default: unset
114     description: The password for the neutron service account, used by neutron agents.
115     type: string
116     hidden: true
117   NeutronPublicInterface:
118     default: nic1
119     description: What interface to bridge onto br-ex for network nodes.
120     type: string
121   NeutronPublicInterfaceTag:
122     default: ''
123     description: >
124       VLAN tag for creating a public VLAN. The tag will be used to
125       create an access port on the exterior bridge for each control plane node,
126       and that port will be given the IP address returned by neutron from the
127       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
128       overcloud.yaml to include the deployment of VLAN ports to the control
129       plane.
130     type: string
131   NeutronComputeAgentMode:
132     default: 'dvr'
133     description: Agent mode for the neutron-l3-agent on the compute hosts
134     type: string
135   NeutronAgentMode:
136     default: 'dvr_snat'
137     description: Agent mode for the neutron-l3-agent on the controller hosts
138     type: string
139   NeutronDVR:
140     default: 'False'
141     description: Whether to configure Neutron Distributed Virtual Routers
142     type: string
143   NeutronMetadataProxySharedSecret:
144     default: 'unset'
145     description: Shared secret to prevent spoofing
146     type: string
147   NeutronTunnelTypes:
148     default: 'gre'
149     description: |
150         The tunnel types for the Neutron tenant network. To specify multiple
151         values, use a comma separated string, like so: 'gre,vxlan'
152     type: string
153   NeutronMechanismDrivers:
154     default: 'openvswitch'
155     description: |
156         The mechanism drivers for the Neutron tenant network. To specify multiple
157         values, use a comma separated string, like so: 'openvswitch,l2_population'
158     type: string
159   NeutronAllowL3AgentFailover:
160     default: 'True'
161     description: Allow automatic l3-agent failover
162     type: string
163   NeutronL3HA:
164     default: 'False'
165     description: Whether to enable l3-agent HA
166     type: string
167   NovaPassword:
168     default: unset
169     description: The password for the nova service account, used by nova-api.
170     type: string
171     hidden: true
172   NtpServer:
173     type: string
174     default: ''
175   PublicVirtualFixedIPs:
176     default: []
177     description: >
178         Control the IP allocation for the PublicVirtualInterface port. E.g.
179         [{'ip_address':'1.2.3.4'}]
180     type: json
181   PublicVirtualNetwork:
182     default: 'ctlplane'
183     type: string
184     description: >
185         Neutron network to allocate public virtual IP port on.
186   RabbitCookieSalt:
187     type: string
188     default: unset
189     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
190   # FIXME: 'guest' is provisioned in RabbitMQ by default, we should create a user if these are changed
191   RabbitUserName:
192     default: guest
193     description: The username for RabbitMQ
194     type: string
195   RabbitPassword:
196     default: guest
197     description: The password for RabbitMQ
198     type: string
199     hidden: true
200   RabbitClientUseSSL:
201     default: false
202     description: >
203         Rabbit client subscriber parameter to specify
204         an SSL connection to the RabbitMQ host.
205     type: string
206   RabbitClientPort:
207     default: 5672
208     description: Set rabbit subscriber port, change this if using SSL
209     type: number
210   SnmpdReadonlyUserName:
211     default: ro_snmp_user
212     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
213     type: string
214   SnmpdReadonlyUserPassword:
215     default: unset
216     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
217     type: string
218     hidden: true
219
220   # Controller-specific params
221   AdminToken:
222     default: unset
223     description: The keystone auth secret.
224     type: string
225     hidden: true
226   CinderEnableRbdBackend:
227     default: false
228     description: Whether to enable or not the Rbd backend for Cinder
229     type: boolean
230   CinderLVMLoopDeviceSize:
231     default: 5000
232     description: The size of the loopback file used by the cinder LVM driver.
233     type: number
234   CinderPassword:
235     default: unset
236     description: The password for the cinder service account, used by cinder-api.
237     type: string
238     hidden: true
239   CinderISCSIHelper:
240     default: tgtadm
241     description: The iSCSI helper to use with cinder.
242     type: string
243   ControllerCount:
244     type: number
245     default: 1
246   controllerExtraConfig:
247     default: {}
248     description: |
249       Controller specific configuration to inject into the cluster. Same
250       structure as ExtraConfig.
251     type: json
252   controllerImage:
253     type: string
254     default: overcloud-control
255     constraints:
256       - custom_constraint: glance.image
257   OvercloudControlFlavor:
258     description: Flavor for control nodes to request when deploying.
259     type: string
260     constraints:
261       - custom_constraint: nova.flavor
262   ControlVirtualInterface:
263     default: 'br-ex'
264     description: Interface where virtual ip will be assigned.
265     type: string
266   EnableGalera:
267     default: true
268     description: Whether to use Galera instead of regular MariaDB.
269     type: boolean
270   EnablePacemaker:
271     default: false
272     description: If enabled services will be monitored by Pacemaker; it
273       will manage VIPs as well, in place of Keepalived.
274     type: boolean
275   ControllerEnableCephStorage:
276     default: false
277     description: Whether to deploy Ceph Storage (OSD) on the Controller
278     type: boolean
279   ControllerEnableSwiftStorage:
280     default: true
281     description: Whether to enable Swift Storage on the Controller
282     type: boolean
283   ExtraConfig:
284     default: {}
285     description: |
286       Additional configuration to inject into the cluster. The JSON should have
287       the following structure:
288         {"FILEKEY":
289           {"config":
290             [{"section": "SECTIONNAME",
291               "values":
292                 [{"option": "OPTIONNAME",
293                   "value": "VALUENAME"
294                  }
295                 ]
296              }
297             ]
298           }
299         }
300       For instance:
301         {"nova":
302           {"config":
303             [{"section": "default",
304               "values":
305                 [{"option": "force_config_drive",
306                   "value": "always"
307                  }
308                 ]
309              },
310              {"section": "cells",
311               "values":
312                 [{"option": "driver",
313                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
314                  }
315                 ]
316              }
317             ]
318           }
319         }
320     type: json
321   GlanceLogFile:
322     description: The filepath of the file to use for logging messages from Glance.
323     type: string
324     default: ''
325   GlanceNotifierStrategy:
326     description: Strategy to use for Glance notification queue
327     type: string
328     default: noop
329   GlancePassword:
330     default: unset
331     description: The password for the glance service account, used by the glance services.
332     type: string
333     hidden: true
334   HeatPassword:
335     default: unset
336     description: The password for the Heat service account, used by the Heat services.
337     type: string
338     hidden: true
339   HeatStackDomainAdminPassword:
340     description: Password for heat_domain_admin user.
341     type: string
342     default: ''
343     hidden: true
344   KeystoneCACertificate:
345     default: ''
346     description: Keystone self-signed certificate authority certificate.
347     type: string
348   KeystoneSigningCertificate:
349     default: ''
350     description: Keystone certificate for verifying token validity.
351     type: string
352   KeystoneSigningKey:
353     default: ''
354     description: Keystone key for signing tokens.
355     type: string
356     hidden: true
357   KeystoneSSLCertificate:
358     default: ''
359     description: Keystone certificate for verifying token validity.
360     type: string
361   KeystoneSSLCertificateKey:
362     default: ''
363     description: Keystone key for signing tokens.
364     type: string
365     hidden: true
366   MysqlInnodbBufferPoolSize:
367     description: >
368         Specifies the size of the buffer pool in megabytes. Setting to
369         zero should be interpreted as "no value" and will defer to the
370         lower level default.
371     type: number
372     default: 0
373   NeutronDnsmasqOptions:
374     default: 'dhcp-option-force=26,1400'
375     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
376     type: string
377   NeutronPublicInterfaceDefaultRoute:
378     default: ''
379     description: A custom default route for the NeutronPublicInterface.
380     type: string
381   NeutronPublicInterfaceIP:
382     default: ''
383     description: A custom IP address to put onto the NeutronPublicInterface.
384     type: string
385   NeutronPublicInterfaceRawDevice:
386     default: ''
387     description: If set, the public interface is a vlan with this device as the raw device.
388     type: string
389   PublicVirtualInterface:
390     default: 'br-ex'
391     description: >
392         Specifies the interface where the public-facing virtual ip will be assigned.
393         This should be int_public when a VLAN is being used.
394     type: string
395   SSLCertificate:
396     default: ''
397     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
398     type: string
399     hidden: true
400   SSLKey:
401     default: ''
402     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
403     type: string
404     hidden: true
405   SSLCACertificate:
406     default: ''
407     description: If set, the contents of an SSL certificate authority file.
408     type: string
409   SwiftHashSuffix:
410     default: unset
411     description: A random string to be used as a salt when hashing to determine mappings in the ring.
412     type: string
413     hidden: true
414   SwiftPassword:
415     default: unset
416     description: The password for the swift service account, used by the swift proxy services.
417     type: string
418     hidden: true
419   SwiftMountCheck:
420     default: 'false'
421     description: Value of mount_check in Swift account/container/object -server.conf
422     type: boolean
423   SwiftMinPartHours:
424     type: number
425     default: 1
426     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
427   SwiftPartPower:
428     default: 10
429     description: Partition Power to use when building Swift rings
430     type: number
431   SwiftReplicas:
432     type: number
433     default: 3
434     description: How many replicas to use in the swift rings.
435
436 # Compute-specific params
437   CeilometerComputeAgent:
438     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
439     type: string
440     default: ''
441     constraints:
442     - allowed_values: ['', Present]
443   ComputeCount:
444     type: number
445     default: 1
446   HypervisorNeutronPhysicalBridge:
447     default: 'br-ex'
448     description: >
449       An OVS bridge to create on each hypervisor. This defaults to br-ex the
450       same as the control plane nodes, as we have a uniform configuration of
451       the openvswitch agent. Typically should not need to be changed.
452     type: string
453   HypervisorNeutronPublicInterface:
454     default: nic1
455     description: What interface to add to the HypervisorNeutronPhysicalBridge.
456     type: string
457   NeutronNetworkVLANRanges:
458     default: 'datacentre'
459     description: >
460       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
461       Neutron documentation for permitted values. Defaults to permitting any
462       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
463     type: string
464   NovaComputeDriver:
465     type: string
466     default: libvirt.LibvirtDriver
467   NovaComputeExtraConfig:
468     default: {}
469     description: |
470       NovaCompute specific configuration to inject into the cluster. Same
471       structure as ExtraConfig.
472     type: json
473   NovaComputeLibvirtType:
474     default: ''
475     type: string
476   NovaEnableRbdBackend:
477     default: false
478     description: Whether to enable or not the Rbd backend for Nova
479     type: boolean
480   NovaImage:
481     type: string
482     default: overcloud-compute
483     constraints:
484       - custom_constraint: glance.image
485   OvercloudComputeFlavor:
486     description: Use this flavor
487     type: string
488     constraints:
489       - custom_constraint: nova.flavor
490
491 # Block storage specific parameters
492   BlockStorageCount:
493     type: number
494     default: 0
495   BlockStorageImage:
496     default: overcloud-cinder-volume
497     type: string
498   OvercloudBlockStorageFlavor:
499     description: Flavor for block storage nodes to request when deploying.
500     type: string
501     constraints:
502       - custom_constraint: nova.flavor
503
504 # Object storage specific parameters
505   ObjectStorageCount:
506     type: number
507     default: 0
508   OvercloudSwiftStorageFlavor:
509     description: Flavor for Swift storage nodes to request when deploying.
510     type: string
511     constraints:
512       - custom_constraint: nova.flavor
513   SwiftStorageImage:
514     default: overcloud-swift-storage
515     type: string
516
517 # Ceph storage specific parameters
518   CephStorageCount:
519     type: number
520     default: 0
521   CephStorageImage:
522     default: overcloud-ceph-storage
523     type: string
524   OvercloudCephStorageFlavor:
525     default: baremetal
526     description: Flavor for Ceph storage nodes to request when deploying.
527     type: string
528     constraints:
529       - custom_constraint: nova.flavor
530
531 resources:
532
533   HeatAuthEncryptionKey:
534     type: OS::Heat::RandomString
535
536   PcsdPassword:
537     type: OS::Heat::RandomString
538     properties:
539       length: 16
540
541   Controller:
542     type: OS::Heat::ResourceGroup
543     properties:
544       count: {get_param: ControllerCount}
545       resource_def:
546         type: OS::TripleO::Controller
547         properties:
548           AdminPassword: {get_param: AdminPassword}
549           AdminToken: {get_param: AdminToken}
550           CeilometerBackend: {get_param: CeilometerBackend}
551           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
552           CeilometerPassword: {get_param: CeilometerPassword}
553           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
554           CinderPassword: {get_param: CinderPassword}
555           CinderISCSIHelper: {get_param: CinderISCSIHelper}
556           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
557           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
558           CloudName: {get_param: CloudName}
559           ControlVirtualInterface: {get_param: ControlVirtualInterface}
560           ControllerExtraConfig: {get_param: controllerExtraConfig}
561           Debug: {get_param: Debug}
562           EnableGalera: {get_param: EnableGalera}
563           EnablePacemaker: {get_param: EnablePacemaker}
564           EnableCephStorage: {get_param: ControllerEnableCephStorage}
565           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
566           ExtraConfig: {get_param: ExtraConfig}
567           Flavor: {get_param: OvercloudControlFlavor}
568           GlancePort: {get_param: GlancePort}
569           GlanceProtocol: {get_param: GlanceProtocol}
570           GlancePassword: {get_param: GlancePassword}
571           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
572           GlanceLogFile: {get_param: GlanceLogFile}
573           HeatPassword: {get_param: HeatPassword}
574           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
575           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
576           Image: {get_param: controllerImage}
577           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
578           KeyName: {get_param: KeyName}
579           KeystoneCACertificate: {get_param: KeystoneCACertificate}
580           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
581           KeystoneSigningKey: {get_param: KeystoneSigningKey}
582           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
583           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
584           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
585           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
586           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
587           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
588           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
589           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
590           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
591           NeutronPublicInterface: {get_param: NeutronPublicInterface}
592           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
593           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
594           NeutronPassword: {get_param: NeutronPassword}
595           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
596           NeutronDVR: {get_param: NeutronDVR}
597           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
598           NeutronAgentMode: {get_param: NeutronAgentMode}
599           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
600           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
601           NeutronL3HA: {get_param: NeutronL3HA}
602           NeutronNetworkType: {get_param: NeutronNetworkType}
603           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
604           NovaPassword: {get_param: NovaPassword}
605           NtpServer: {get_param: NtpServer}
606           PcsdPassword: {get_resource: PcsdPassword}
607           PublicVirtualInterface: {get_param: PublicVirtualInterface}
608           RabbitPassword: {get_param: RabbitPassword}
609           RabbitUserName: {get_param: RabbitUserName}
610           RabbitCookie: {get_attr: [RabbitCookie, value]}
611           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
612           RabbitClientPort: {get_param: RabbitClientPort}
613           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
614           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
615           SSLCertificate: {get_param: SSLCertificate}
616           SSLKey: {get_param: SSLKey}
617           SSLCACertificate: {get_param: SSLCACertificate}
618           SwiftHashSuffix: {get_param: SwiftHashSuffix}
619           SwiftMountCheck: {get_param: SwiftMountCheck}
620           SwiftMinPartHours: {get_param: SwiftMinPartHours}
621           SwiftPartPower: {get_param: SwiftPartPower}
622           SwiftPassword: {get_param: SwiftPassword}
623           SwiftReplicas: { get_param: SwiftReplicas}
624           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
625           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
626
627   Compute:
628     type: OS::Heat::ResourceGroup
629     properties:
630       count: {get_param: ComputeCount}
631       resource_def:
632         type: OS::TripleO::Compute
633         properties:
634           AdminPassword: {get_param: AdminPassword}
635           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
636           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
637           CeilometerPassword: {get_param: CeilometerPassword}
638           Debug: {get_param: Debug}
639           ExtraConfig: {get_param: ExtraConfig}
640           Flavor: {get_param: OvercloudComputeFlavor}
641           GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
642           GlancePort: {get_param: GlancePort}
643           GlanceProtocol: {get_param: GlanceProtocol}
644           Image: {get_param: NovaImage}
645           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
646           KeyName: {get_param: KeyName}
647           KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
648           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
649           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
650           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
651           NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
652           NeutronNetworkType: {get_param: NeutronNetworkType}
653           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
654           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
655           NeutronPassword: {get_param: NeutronPassword}
656           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
657           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
658           NeutronDVR: {get_param: NeutronDVR}
659           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
660           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
661           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
662           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
663           # L3 HA and Failover is not relevant for Computes, should be removed
664           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
665           NeutronL3HA: {get_param: NeutronL3HA}
666           NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
667           NovaComputeDriver: {get_param: NovaComputeDriver}
668           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
669           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
670           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
671           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
672           NovaPassword: {get_param: NovaPassword}
673           NtpServer: {get_param: NtpServer}
674           RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
675           RabbitPassword: {get_param: RabbitPassword}
676           RabbitUserName: {get_param: RabbitUserName}
677           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
678           RabbitClientPort: {get_param: RabbitClientPort}
679           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
680           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
681
682   BlockStorage:
683     type: OS::Heat::ResourceGroup
684     properties:
685       count: {get_param: BlockStorageCount}
686       resource_def:
687         type: OS::TripleO::BlockStorage
688         properties:
689           Debug: {get_param: Debug}
690           Image: {get_param: BlockStorageImage}
691           CinderISCSIHelper: {get_param: CinderISCSIHelper}
692           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
693           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
694           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
695           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
696           KeyName: {get_param: KeyName}
697           Flavor: {get_param: OvercloudBlockStorageFlavor}
698           RabbitPassword: {get_param: RabbitPassword}
699           RabbitUserName: {get_param: RabbitUserName}
700           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
701           RabbitClientPort: {get_param: RabbitClientPort}
702           NtpServer: {get_param: NtpServer}
703
704   ObjectStorage:
705     type: OS::Heat::ResourceGroup
706     properties:
707       count: {get_param: ObjectStorageCount}
708       resource_def:
709         type: OS::TripleO::ObjectStorage
710         properties:
711           KeyName: {get_param: KeyName}
712           Flavor: {get_param: OvercloudSwiftStorageFlavor}
713           HashSuffix: {get_param: SwiftHashSuffix}
714           MountCheck: {get_param: SwiftMountCheck}
715           MinPartHours: {get_param: SwiftMinPartHours}
716           PartPower: {get_param: SwiftPartPower}
717           Image: {get_param: SwiftStorageImage}
718           Replicas: { get_param: SwiftReplicas}
719           NtpServer: {get_param: NtpServer}
720
721   CephStorage:
722     type: OS::Heat::ResourceGroup
723     properties:
724       count: {get_param: CephStorageCount}
725       resource_def:
726         type: OS::TripleO::CephStorage
727         properties:
728           Image: {get_param: CephStorageImage}
729           KeyName: {get_param: KeyName}
730           Flavor: {get_param: OvercloudCephStorageFlavor}
731           NtpServer: {get_param: NtpServer}
732
733   allNodesConfig:
734     type: OS::TripleO::AllNodes::SoftwareConfig
735     properties:
736       compute_hosts: {get_attr: [Compute, hosts_entry]}
737       controller_hosts: {get_attr: [Controller, hosts_entry]}
738       controller_ips: {get_attr: [Controller, ip_address]}
739       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
740       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
741       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
742       controller_names: {get_attr: [Controller, hostname]}
743
744   MysqlRootPassword:
745     type: OS::Heat::RandomString
746     properties:
747       length: 10
748
749   MysqlClusterUniquePart:
750     type: OS::Heat::RandomString
751     properties:
752       length: 10
753
754   RabbitCookie:
755     type: OS::Heat::RandomString
756     properties:
757       length: 20
758       salt: {get_param: RabbitCookieSalt}
759
760   ControlVirtualIP:
761     type: OS::Neutron::Port
762     properties:
763       name: control_virtual_ip
764       network_id: {get_param: NeutronControlPlaneID}
765       fixed_ips: {get_param: ControlFixedIPs}
766       replacement_policy: AUTO
767
768   PublicVirtualIP:
769     type: OS::Neutron::Port
770     properties:
771       name: public_virtual_ip
772       network: {get_param: PublicVirtualNetwork}
773       fixed_ips: {get_param: PublicVirtualFixedIPs}
774       replacement_policy: AUTO
775
776   ControllerBootstrapNodeConfig:
777     type: OS::TripleO::BootstrapNode::SoftwareConfig
778     properties:
779       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
780       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
781
782   ControllerBootstrapNodeDeployment:
783     type: OS::Heat::StructuredDeployments
784     properties:
785       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
786       servers: {get_attr: [Controller, attributes, nova_server_resource]}
787       signal_transport: NO_SIGNAL
788
789   ControllerSwiftDeployment:
790     type: OS::Heat::StructuredDeployments
791     properties:
792       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
793       servers: {get_attr: [Controller, attributes, nova_server_resource]}
794       signal_transport: NO_SIGNAL
795
796   ObjectStorageSwiftDeployment:
797     type: OS::Heat::StructuredDeployments
798     properties:
799       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
800       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
801       signal_transport: NO_SIGNAL
802
803   SwiftDevicesAndProxyConfig:
804     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
805     properties:
806       controller_swift_devices: {get_attr: [Controller, swift_device]}
807       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
808       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
809
810   ComputeCephDeployment:
811     type: OS::Heat::StructuredDeployments
812     properties:
813       config: {get_attr: [CephClusterConfig, config_id]}
814       servers: {get_attr: [Compute, attributes, nova_server_resource]}
815
816   ControllerCephDeployment:
817     type: OS::Heat::StructuredDeployments
818     properties:
819       config: {get_attr: [CephClusterConfig, config_id]}
820       servers: {get_attr: [Controller, attributes, nova_server_resource]}
821
822   CephStorageCephDeployment:
823     type: OS::Heat::StructuredDeployments
824     properties:
825       config: {get_attr: [CephClusterConfig, config_id]}
826       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
827
828   CephClusterConfig:
829     type: OS::TripleO::CephClusterConfig::SoftwareConfig
830     properties:
831       ceph_fsid: {get_param: CephClusterFSID}
832       ceph_mon_key: {get_param: CephMonKey}
833       ceph_admin_key: {get_param: CephAdminKey}
834       ceph_mon_names: {get_attr: [Controller, hostname]}
835       ceph_mon_ips: {get_attr: [Controller, ip_address]}
836
837   ControllerClusterConfig:
838     type: OS::Heat::StructuredConfig
839     properties:
840       config:
841         corosync:
842           nodes: {get_attr: [Controller, corosync_node]}
843         horizon:
844           caches:
845             memcached:
846               nodes: {get_attr: [Controller, hostname]}
847         mysql:
848           nodes: {get_attr: [Controller, corosync_node]}
849         haproxy:
850           nodes: {get_attr: [Controller, corosync_node]}
851
852   ControllerClusterDeployment:
853     type: OS::Heat::StructuredDeployments
854     properties:
855       config: {get_resource: ControllerClusterConfig}
856       servers: {get_attr: [Controller, attributes, nova_server_resource]}
857       signal_transport: NO_SIGNAL
858
859   ControllerAllNodesDeployment:
860     type: OS::Heat::StructuredDeployments
861     properties:
862       config: {get_attr: [allNodesConfig, config_id]}
863       servers: {get_attr: [Controller, attributes, nova_server_resource]}
864
865   ComputeAllNodesDeployment:
866     type: OS::Heat::StructuredDeployments
867     properties:
868       config: {get_attr: [allNodesConfig, config_id]}
869       servers: {get_attr: [Compute, attributes, nova_server_resource]}
870
871   BlockStorageAllNodesDeployment:
872     type: OS::Heat::StructuredDeployments
873     properties:
874       config: {get_attr: [allNodesConfig, config_id]}
875       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
876
877   ObjectStorageAllNodesDeployment:
878     type: OS::Heat::StructuredDeployments
879     properties:
880       config: {get_attr: [allNodesConfig, config_id]}
881       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
882
883   CephStorageAllNodesDeployment:
884     type: OS::Heat::StructuredDeployments
885     properties:
886       config: {get_attr: [allNodesConfig, config_id]}
887       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
888
889   # Nested stack deployment runs after all other controller deployments
890   ControllerNodesPostDeployment:
891     type: OS::TripleO::ControllerPostDeployment
892     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
893     properties:
894       servers: {get_attr: [Controller, attributes, nova_server_resource]}
895
896   ComputeNodesPostDeployment:
897     type: OS::TripleO::ComputePostDeployment
898     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
899     properties:
900       servers: {get_attr: [Compute, attributes, nova_server_resource]}
901
902   ObjectStorageNodesPostDeployment:
903     type: OS::TripleO::ObjectStoragePostDeployment
904     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
905     properties:
906       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
907
908   BlockStorageNodesPostDeployment:
909     type: OS::TripleO::BlockStoragePostDeployment
910     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
911     properties:
912       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
913
914   CephStorageNodesPostDeployment:
915     type: OS::TripleO::CephStoragePostDeployment
916     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
917     properties:
918       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
919
920 outputs:
921   KeystoneURL:
922     description: URL for the Overcloud Keystone service
923     value:
924       list_join:
925       - ''
926       - - http://
927         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
928         - :5000/v2.0/