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