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