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