643f10eaa6645d9486bf74b624cc45c13ba96091
[apex-tripleo-heat-templates.git] / overcloud-without-mergepy.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
5   server,Dedicated RabbitMQ Server,Group of Nova Computes
6
7
8 # TODO(shadower): we should probably use the parameter groups to put
9 # some order in here.
10 parameters:
11
12   # Common parameters (not specific to a role)
13   AdminPassword:
14     default: unset
15     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
16     type: string
17     hidden: true
18   CeilometerBackend:
19     default: 'mongodb'
20     description: The ceilometer backend type.
21     type: string
22   CeilometerMeteringSecret:
23     default: unset
24     description: Secret shared by the ceilometer services.
25     type: string
26     hidden: true
27   CeilometerPassword:
28     default: unset
29     description: The password for the ceilometer service account.
30     type: string
31     hidden: true
32   # This has to be an UUID so for now we generate it outside the template
33   CephClusterFSID:
34     default: ''
35     type: string
36     description: The Ceph cluster FSID. Must be a UUID.
37   CephMonKey:
38     default: ''
39     description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
40     type: string
41   CephAdminKey:
42     default: ''
43     description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
44     type: string
45   CinderEnableNfsBackend:
46     default: false
47     description: Whether to enable or not the NFS backend for Cinder
48     type: boolean
49   CinderEnableIscsiBackend:
50     default: true
51     description: Whether to enable or not the Iscsi backend for Cinder
52     type: boolean
53   CloudName:
54     default: ''
55     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
56     type: string
57   ControlFixedIPs:
58     default: []
59     description: Should be used for arbitrary ips.
60     type: json
61   Debug:
62     default: ''
63     description: Set to True to enable debugging on all services.
64     type: string
65   GlancePort:
66     default: "9292"
67     description: Glance port.
68     type: string
69   GlanceProtocol:
70     default: http
71     description: Protocol to use when connecting to glance, set to https for SSL.
72     type: string
73   ImageUpdatePolicy:
74     default: 'REBUILD_PRESERVE_EPHEMERAL'
75     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
76     type: string
77   KeyName:
78     default: default
79     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
80     type: string
81     constraints:
82       - custom_constraint: nova.keypair
83   NeutronBridgeMappings:
84     description: >
85       The OVS logical->physical bridge mappings to use. See the Neutron
86       documentation for details. Defaults to mapping br-ex - the external
87       bridge on hosts - to a physical name 'datacentre' which can be used
88       to create provider networks (and we use this for the default floating
89       network) - if changing this either use different post-install network
90       scripts or be sure to keep 'datacentre' as a mapping network name.
91     type: string
92     default: "datacentre:br-ex"
93   NeutronControlPlaneID:
94     default: ''
95     type: string
96     description: Neutron ID for ctlplane network.
97   NeutronEnableTunnelling:
98     type: string
99     default: "True"
100   NeutronFlatNetworks:
101     type: string
102     default: 'datacentre'
103     description: >
104       If set, flat networks to configure in neutron plugins. Defaults to
105       'datacentre' to permit external network creation.
106   NeutronNetworkType:
107     default: 'gre'
108     description: The tenant network type for Neutron, either gre or vxlan.
109     type: string
110   NeutronPassword:
111     default: unset
112     description: The password for the neutron service account, used by neutron agents.
113     type: string
114     hidden: true
115   NeutronPublicInterface:
116     default: nic1
117     description: What interface to bridge onto br-ex for network nodes.
118     type: string
119   NeutronPublicInterfaceTag:
120     default: ''
121     description: >
122       VLAN tag for creating a public VLAN. The tag will be used to
123       create an access port on the exterior bridge for each control plane node,
124       and that port will be given the IP address returned by neutron from the
125       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
126       overcloud.yaml to include the deployment of VLAN ports to the control
127       plane.
128     type: string
129   NeutronComputeAgentMode:
130     default: 'dvr'
131     description: Agent mode for the neutron-l3-agent on the compute hosts
132     type: string
133   NeutronAgentMode:
134     default: 'dvr_snat'
135     description: Agent mode for the neutron-l3-agent on the controller hosts
136     type: string
137   NeutronDVR:
138     default: 'False'
139     description: Whether to configure Neutron Distributed Virtual Routers
140     type: string
141   NeutronMetadataProxySharedSecret:
142     default: 'unset'
143     description: Shared secret to prevent spoofing
144     type: string
145   NeutronTunnelTypes:
146     default: 'gre'
147     description: |
148         The tunnel types for the Neutron tenant network. To specify multiple
149         values, use a comma separated string, like so: 'gre,vxlan'
150     type: string
151   NeutronMechanismDrivers:
152     default: 'openvswitch'
153     description: |
154         The mechanism drivers for the Neutron tenant network. To specify multiple
155         values, use a comma separated string, like so: 'openvswitch,l2_population'
156     type: string
157   NeutronAllowL3AgentFailover:
158     default: 'True'
159     description: Allow automatic l3-agent failover
160     type: string
161   NeutronL3HA:
162     default: 'False'
163     description: Whether to enable l3-agent HA
164     type: string
165   NovaPassword:
166     default: unset
167     description: The password for the nova service account, used by nova-api.
168     type: string
169     hidden: true
170   NtpServer:
171     type: string
172     default: ''
173   PublicVirtualFixedIPs:
174     default: []
175     description: >
176         Control the IP allocation for the PublicVirtualInterface port. E.g.
177         [{'ip_address':'1.2.3.4'}]
178     type: json
179   PublicVirtualNetwork:
180     default: 'ctlplane'
181     type: string
182     description: >
183         Neutron network to allocate public virtual IP port on.
184   RabbitCookieSalt:
185     type: string
186     default: unset
187     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
188   # FIXME: 'guest' is provisioned in RabbitMQ by default, we should create a user if these are changed
189   RabbitUserName:
190     default: guest
191     description: The username for RabbitMQ
192     type: string
193   RabbitPassword:
194     default: guest
195     description: The password for RabbitMQ
196     type: string
197     hidden: true
198   RabbitClientUseSSL:
199     default: false
200     description: >
201         Rabbit client subscriber parameter to specify
202         an SSL connection to the RabbitMQ host.
203     type: string
204   RabbitClientPort:
205     default: 5672
206     description: Set rabbit subscriber port, change this if using SSL
207     type: number
208   SnmpdReadonlyUserName:
209     default: ro_snmp_user
210     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
211     type: string
212   SnmpdReadonlyUserPassword:
213     default: unset
214     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
215     type: string
216     hidden: true
217
218   # Controller-specific params
219   AdminToken:
220     default: unset
221     description: The keystone auth secret.
222     type: string
223     hidden: true
224   CinderEnableRbdBackend:
225     default: false
226     description: Whether to enable or not the Rbd backend for Cinder
227     type: boolean
228   CinderLVMLoopDeviceSize:
229     default: 5000
230     description: The size of the loopback file used by the cinder LVM driver.
231     type: number
232   CinderNfsMountOptions:
233     default: ''
234     description: >
235       Mount options for NFS mounts used by Cinder NFS backend. Effective
236       when CinderEnableNfsBackend is true.
237     type: string
238   CinderNfsServers:
239     default: ''
240     description: >
241       NFS servers used by Cinder NFS backend. Effective when
242       CinderEnableNfsBackend is true.
243     type: comma_delimited_list
244   CinderPassword:
245     default: unset
246     description: The password for the cinder service account, used by cinder-api.
247     type: string
248     hidden: true
249   CinderISCSIHelper:
250     default: tgtadm
251     description: The iSCSI helper to use with cinder.
252     type: string
253   ControllerCount:
254     type: number
255     default: 1
256   controllerExtraConfig:
257     default: {}
258     description: |
259       Controller specific configuration to inject into the cluster. Same
260       structure as ExtraConfig.
261     type: json
262   controllerImage:
263     type: string
264     default: overcloud-control
265     constraints:
266       - custom_constraint: glance.image
267   OvercloudControlFlavor:
268     description: Flavor for control nodes to request when deploying.
269     type: string
270     constraints:
271       - custom_constraint: nova.flavor
272   ControlVirtualInterface:
273     default: 'br-ex'
274     description: Interface where virtual ip will be assigned.
275     type: string
276   EnableFencing:
277     default: false
278     description: Whether to enable fencing in Pacemaker or not.
279     type: boolean
280   EnableGalera:
281     default: true
282     description: Whether to use Galera instead of regular MariaDB.
283     type: boolean
284   ControllerEnableCephStorage:
285     default: false
286     description: Whether to deploy Ceph Storage (OSD) on the Controller
287     type: boolean
288   ControllerEnableSwiftStorage:
289     default: true
290     description: Whether to enable Swift Storage on the Controller
291     type: boolean
292   ExtraConfig:
293     default: {}
294     description: |
295       Additional configuration to inject into the cluster. The JSON should have
296       the following structure:
297         {"FILEKEY":
298           {"config":
299             [{"section": "SECTIONNAME",
300               "values":
301                 [{"option": "OPTIONNAME",
302                   "value": "VALUENAME"
303                  }
304                 ]
305              }
306             ]
307           }
308         }
309       For instance:
310         {"nova":
311           {"config":
312             [{"section": "default",
313               "values":
314                 [{"option": "force_config_drive",
315                   "value": "always"
316                  }
317                 ]
318              },
319              {"section": "cells",
320               "values":
321                 [{"option": "driver",
322                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
323                  }
324                 ]
325              }
326             ]
327           }
328         }
329     type: json
330   FencingConfig:
331     default: {}
332     description: |
333       Pacemaker fencing configuration. The JSON should have
334       the following structure:
335         {
336           "devices": [
337             {
338               "agent": "AGENT_NAME",
339               "host_mac": "HOST_MAC_ADDRESS",
340               "params": {"PARAM_NAME": "PARAM_VALUE"}
341             }
342           ]
343         }
344       For instance:
345         {
346           "devices": [
347             {
348               "agent": "fence_xvm",
349               "host_mac": "52:54:00:aa:bb:cc",
350               "params": {
351                 "multicast_address": "225.0.0.12",
352                 "port": "baremetal_0",
353                 "manage_fw": true,
354                 "manage_key_file": true,
355                 "key_file": "/etc/fence_xvm.key",
356                 "key_file_password": "abcdef"
357               }
358             }
359           ]
360         }
361     type: json
362   GlanceLogFile:
363     description: The filepath of the file to use for logging messages from Glance.
364     type: string
365     default: ''
366   GlanceNotifierStrategy:
367     description: Strategy to use for Glance notification queue
368     type: string
369     default: noop
370   GlancePassword:
371     default: unset
372     description: The password for the glance service account, used by the glance services.
373     type: string
374     hidden: true
375   GlanceBackend:
376     default: swift
377     description: The short name of the Glance backend to use. Should be one
378       of swift, rbd or file
379     type: string
380     constraints:
381     - allowed_values: ['swift', 'file', 'rbd']
382   HeatPassword:
383     default: unset
384     description: The password for the Heat service account, used by the Heat services.
385     type: string
386     hidden: true
387   HeatStackDomainAdminPassword:
388     description: Password for heat_domain_admin user.
389     type: string
390     default: ''
391     hidden: true
392   KeystoneCACertificate:
393     default: ''
394     description: Keystone self-signed certificate authority certificate.
395     type: string
396   KeystoneSigningCertificate:
397     default: ''
398     description: Keystone certificate for verifying token validity.
399     type: string
400   KeystoneSigningKey:
401     default: ''
402     description: Keystone key for signing tokens.
403     type: string
404     hidden: true
405   KeystoneSSLCertificate:
406     default: ''
407     description: Keystone certificate for verifying token validity.
408     type: string
409   KeystoneSSLCertificateKey:
410     default: ''
411     description: Keystone key for signing tokens.
412     type: string
413     hidden: true
414   MysqlInnodbBufferPoolSize:
415     description: >
416         Specifies the size of the buffer pool in megabytes. Setting to
417         zero should be interpreted as "no value" and will defer to the
418         lower level default.
419     type: number
420     default: 0
421   NeutronDnsmasqOptions:
422     default: 'dhcp-option-force=26,1400'
423     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
424     type: string
425   NeutronPublicInterfaceDefaultRoute:
426     default: ''
427     description: A custom default route for the NeutronPublicInterface.
428     type: string
429   NeutronPublicInterfaceIP:
430     default: ''
431     description: A custom IP address to put onto the NeutronPublicInterface.
432     type: string
433   NeutronPublicInterfaceRawDevice:
434     default: ''
435     description: If set, the public interface is a vlan with this device as the raw device.
436     type: string
437   PublicVirtualInterface:
438     default: 'br-ex'
439     description: >
440         Specifies the interface where the public-facing virtual ip will be assigned.
441         This should be int_public when a VLAN is being used.
442     type: string
443   SSLCertificate:
444     default: ''
445     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
446     type: string
447     hidden: true
448   SSLKey:
449     default: ''
450     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
451     type: string
452     hidden: true
453   SSLCACertificate:
454     default: ''
455     description: If set, the contents of an SSL certificate authority file.
456     type: string
457   SwiftHashSuffix:
458     default: unset
459     description: A random string to be used as a salt when hashing to determine mappings in the ring.
460     type: string
461     hidden: true
462   SwiftPassword:
463     default: unset
464     description: The password for the swift service account, used by the swift proxy services.
465     type: string
466     hidden: true
467   SwiftMountCheck:
468     default: 'false'
469     description: Value of mount_check in Swift account/container/object -server.conf
470     type: boolean
471   SwiftMinPartHours:
472     type: number
473     default: 1
474     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
475   SwiftPartPower:
476     default: 10
477     description: Partition Power to use when building Swift rings
478     type: number
479   SwiftReplicas:
480     type: number
481     default: 3
482     description: How many replicas to use in the swift rings.
483
484 # Compute-specific params
485   CeilometerComputeAgent:
486     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
487     type: string
488     default: ''
489     constraints:
490     - allowed_values: ['', Present]
491   ComputeCount:
492     type: number
493     default: 1
494   HypervisorNeutronPhysicalBridge:
495     default: 'br-ex'
496     description: >
497       An OVS bridge to create on each hypervisor. This defaults to br-ex the
498       same as the control plane nodes, as we have a uniform configuration of
499       the openvswitch agent. Typically should not need to be changed.
500     type: string
501   HypervisorNeutronPublicInterface:
502     default: nic1
503     description: What interface to add to the HypervisorNeutronPhysicalBridge.
504     type: string
505   NeutronNetworkVLANRanges:
506     default: 'datacentre'
507     description: >
508       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
509       Neutron documentation for permitted values. Defaults to permitting any
510       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
511     type: comma_delimited_list
512   NovaComputeDriver:
513     type: string
514     default: libvirt.LibvirtDriver
515   NovaComputeExtraConfig:
516     default: {}
517     description: |
518       NovaCompute specific configuration to inject into the cluster. Same
519       structure as ExtraConfig.
520     type: json
521   NovaComputeLibvirtType:
522     default: ''
523     type: string
524   NovaEnableRbdBackend:
525     default: false
526     description: Whether to enable or not the Rbd backend for Nova
527     type: boolean
528   NovaImage:
529     type: string
530     default: overcloud-compute
531     constraints:
532       - custom_constraint: glance.image
533   OvercloudComputeFlavor:
534     description: Use this flavor
535     type: string
536     constraints:
537       - custom_constraint: nova.flavor
538   ServiceNetMap:
539     default:
540       NeutronTenantNetwork: tenant
541       CeilometerApiNetwork: internal_api
542       MongoDbNetwork: internal_api
543       CinderApiNetwork: internal_api
544       CinderIscsiNetwork: storage
545       GlanceApiNetwork: storage
546       GlanceRegistryNetwork: internal_api
547       KeystoneAdminApiNetwork: internal_api
548       KeystonePublicApiNetwork: internal_api
549       NeutronApiNetwork: internal_api
550       HeatApiNetwork: internal_api
551       NovaApiNetwork: internal_api
552       NovaMetadataNetwork: internal_api
553       NovaVncProxyNetwork: internal_api
554       SwiftMgmtNetwork: storage_mgmt
555       SwiftProxyNetwork: storage
556       HorizonNetwork: internal_api
557       MemcachedNetwork: internal_api
558       RabbitMqNetwork: internal_api
559       RedisNetwork: internal_api
560       MysqlNetwork: internal_api
561       CephClusterNetwork: storage_mgmt
562       CephPublicNetwork: storage
563     description: Mapping of service_name -> network name. Typically set
564                  via parameter_defaults in the resource registry.
565     type: json
566
567 # Block storage specific parameters
568   BlockStorageCount:
569     type: number
570     default: 0
571   BlockStorageImage:
572     default: overcloud-cinder-volume
573     type: string
574   OvercloudBlockStorageFlavor:
575     description: Flavor for block storage nodes to request when deploying.
576     type: string
577     constraints:
578       - custom_constraint: nova.flavor
579
580 # Object storage specific parameters
581   ObjectStorageCount:
582     type: number
583     default: 0
584   OvercloudSwiftStorageFlavor:
585     description: Flavor for Swift storage nodes to request when deploying.
586     type: string
587     constraints:
588       - custom_constraint: nova.flavor
589   SwiftStorageImage:
590     default: overcloud-swift-storage
591     type: string
592
593 # Ceph storage specific parameters
594   CephStorageCount:
595     type: number
596     default: 0
597   CephStorageImage:
598     default: overcloud-ceph-storage
599     type: string
600   OvercloudCephStorageFlavor:
601     default: baremetal
602     description: Flavor for Ceph storage nodes to request when deploying.
603     type: string
604     constraints:
605       - custom_constraint: nova.flavor
606
607   # Hostname format for each role
608   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
609   # and %stackname% is replaced with OS::stack_name in the template below.
610   # If you want to use the heat generated names, pass '' (empty string).
611   ControllerHostnameFormat:
612     type: string
613     description: Format for Controller node hostnames
614     default: '%stackname%-controller-%index%'
615   ComputeHostnameFormat:
616     type: string
617     description: Format for Compute node hostnames
618     default: '%stackname%-novacompute-%index%'
619   BlockStorageHostnameFormat:
620     type: string
621     description: Format for BlockStorage node hostnames
622     default: '%stackname%-blockstorage-%index%'
623   ObjectStorageHostnameFormat:
624     type: string
625     description: Format for SwiftStorage node hostnames
626     default: '%stackname%-objectstorage-%index%'
627   CephStorageHostnameFormat:
628     type: string
629     description: Format for CephStorage node hostnames
630     default: '%stackname%-cephstorage-%index%'
631
632   # Identifiers to trigger tasks on nodes
633   UpdateIdentifier:
634     default: ''
635     type: string
636     description: >
637       Setting to a previously unused value during stack-update will trigger
638       package update on all nodes
639
640
641
642 resources:
643
644   HeatAuthEncryptionKey:
645     type: OS::Heat::RandomString
646
647   PcsdPassword:
648     type: OS::Heat::RandomString
649     properties:
650       length: 16
651
652   HorizonSecret:
653     type: OS::Heat::RandomString
654     properties:
655       length: 10
656
657   Controller:
658     type: OS::Heat::ResourceGroup
659     depends_on: Networks
660     properties:
661       count: {get_param: ControllerCount}
662       resource_def:
663         type: OS::TripleO::Controller
664         properties:
665           AdminPassword: {get_param: AdminPassword}
666           AdminToken: {get_param: AdminToken}
667           CeilometerBackend: {get_param: CeilometerBackend}
668           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
669           CeilometerPassword: {get_param: CeilometerPassword}
670           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
671           CinderNfsMountOptions: {get_param: CinderNfsMountOptions}
672           CinderNfsServers: {get_param: CinderNfsServers}
673           CinderPassword: {get_param: CinderPassword}
674           CinderISCSIHelper: {get_param: CinderISCSIHelper}
675           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
676           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
677           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
678           CloudName: {get_param: CloudName}
679           ControlVirtualInterface: {get_param: ControlVirtualInterface}
680           ControllerExtraConfig: {get_param: controllerExtraConfig}
681           Debug: {get_param: Debug}
682           EnableFencing: {get_param: EnableFencing}
683           EnableGalera: {get_param: EnableGalera}
684           EnableCephStorage: {get_param: ControllerEnableCephStorage}
685           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
686           ExtraConfig: {get_param: ExtraConfig}
687           FencingConfig: {get_param: FencingConfig}
688           Flavor: {get_param: OvercloudControlFlavor}
689           GlancePort: {get_param: GlancePort}
690           GlanceProtocol: {get_param: GlanceProtocol}
691           GlancePassword: {get_param: GlancePassword}
692           GlanceBackend: {get_param: GlanceBackend}
693           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
694           GlanceLogFile: {get_param: GlanceLogFile}
695           HeatPassword: {get_param: HeatPassword}
696           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
697           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
698           HorizonSecret: {get_resource: HorizonSecret}
699           Image: {get_param: controllerImage}
700           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
701           KeyName: {get_param: KeyName}
702           KeystoneCACertificate: {get_param: KeystoneCACertificate}
703           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
704           KeystoneSigningKey: {get_param: KeystoneSigningKey}
705           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
706           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
707           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
708           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
709           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
710           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
711           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
712           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
713           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
714           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
715           NeutronPublicInterface: {get_param: NeutronPublicInterface}
716           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
717           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
718           NeutronPassword: {get_param: NeutronPassword}
719           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
720           NeutronDVR: {get_param: NeutronDVR}
721           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
722           NeutronAgentMode: {get_param: NeutronAgentMode}
723           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
724           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
725           NeutronL3HA: {get_param: NeutronL3HA}
726           NeutronNetworkType: {get_param: NeutronNetworkType}
727           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
728           NovaPassword: {get_param: NovaPassword}
729           NtpServer: {get_param: NtpServer}
730           PcsdPassword: {get_resource: PcsdPassword}
731           PublicVirtualInterface: {get_param: PublicVirtualInterface}
732           RabbitPassword: {get_param: RabbitPassword}
733           RabbitUserName: {get_param: RabbitUserName}
734           RabbitCookie: {get_attr: [RabbitCookie, value]}
735           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
736           RabbitClientPort: {get_param: RabbitClientPort}
737           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
738           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
739           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
740           SSLCertificate: {get_param: SSLCertificate}
741           SSLKey: {get_param: SSLKey}
742           SSLCACertificate: {get_param: SSLCACertificate}
743           SwiftHashSuffix: {get_param: SwiftHashSuffix}
744           SwiftMountCheck: {get_param: SwiftMountCheck}
745           SwiftMinPartHours: {get_param: SwiftMinPartHours}
746           SwiftPartPower: {get_param: SwiftPartPower}
747           SwiftPassword: {get_param: SwiftPassword}
748           SwiftReplicas: { get_param: SwiftReplicas}
749           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} # deprecated. Use per service VIP settings instead now.
750           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]} # deprecated. Use per service VIP settings instead now.
751           ServiceNetMap: {get_param: ServiceNetMap}
752           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
753           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
754           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
755           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
756           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
757           UpdateIdentifier: {get_param: UpdateIdentifier}
758           Hostname:
759             str_replace:
760               template: {get_param: ControllerHostnameFormat}
761               params:
762                 '%stackname%': {get_param: 'OS::stack_name'}
763
764   Compute:
765     type: OS::Heat::ResourceGroup
766     depends_on: Networks
767     properties:
768       count: {get_param: ComputeCount}
769       resource_def:
770         type: OS::TripleO::Compute
771         properties:
772           AdminPassword: {get_param: AdminPassword}
773           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
774           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
775           CeilometerPassword: {get_param: CeilometerPassword}
776           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
777           Debug: {get_param: Debug}
778           ExtraConfig: {get_param: ExtraConfig}
779           Flavor: {get_param: OvercloudComputeFlavor}
780           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
781           GlancePort: {get_param: GlancePort}
782           GlanceProtocol: {get_param: GlanceProtocol}
783           Image: {get_param: NovaImage}
784           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
785           KeyName: {get_param: KeyName}
786           KeystoneHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
787           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
788           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
789           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
790           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
791           NeutronNetworkType: {get_param: NeutronNetworkType}
792           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
793           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
794           NeutronPassword: {get_param: NeutronPassword}
795           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
796           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
797           NeutronDVR: {get_param: NeutronDVR}
798           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
799           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
800           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
801           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
802           # L3 HA and Failover is not relevant for Computes, should be removed
803           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
804           NeutronL3HA: {get_param: NeutronL3HA}
805           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
806           NovaComputeDriver: {get_param: NovaComputeDriver}
807           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
808           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
809           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
810           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
811           NovaPassword: {get_param: NovaPassword}
812           NtpServer: {get_param: NtpServer}
813           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
814           RabbitPassword: {get_param: RabbitPassword}
815           RabbitUserName: {get_param: RabbitUserName}
816           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
817           RabbitClientPort: {get_param: RabbitClientPort}
818           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
819           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
820           ServiceNetMap: {get_param: ServiceNetMap}
821           UpdateIdentifier: {get_param: UpdateIdentifier}
822           Hostname:
823             str_replace:
824               template: {get_param: ComputeHostnameFormat}
825               params:
826                 '%stackname%': {get_param: 'OS::stack_name'}
827
828   BlockStorage:
829     type: OS::Heat::ResourceGroup
830     depends_on: Networks
831     properties:
832       count: {get_param: BlockStorageCount}
833       resource_def:
834         type: OS::TripleO::BlockStorage
835         properties:
836           Debug: {get_param: Debug}
837           Image: {get_param: BlockStorageImage}
838           CinderISCSIHelper: {get_param: CinderISCSIHelper}
839           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
840           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
841           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
842           CinderPassword: {get_param: CinderPassword}
843           KeyName: {get_param: KeyName}
844           Flavor: {get_param: OvercloudBlockStorageFlavor}
845           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
846           GlancePort: {get_param: GlancePort}
847           GlanceProtocol: {get_param: GlanceProtocol}
848           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
849           RabbitPassword: {get_param: RabbitPassword}
850           RabbitUserName: {get_param: RabbitUserName}
851           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
852           RabbitClientPort: {get_param: RabbitClientPort}
853           NtpServer: {get_param: NtpServer}
854           UpdateIdentifier: {get_param: UpdateIdentifier}
855           Hostname:
856             str_replace:
857               template: {get_param: BlockStorageHostnameFormat}
858               params:
859                 '%stackname%': {get_param: 'OS::stack_name'}
860           ServiceNetMap: {get_param: ServiceNetMap}
861           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
862
863   ObjectStorage:
864     type: OS::Heat::ResourceGroup
865     depends_on: Networks
866     properties:
867       count: {get_param: ObjectStorageCount}
868       resource_def:
869         type: OS::TripleO::ObjectStorage
870         properties:
871           KeyName: {get_param: KeyName}
872           Flavor: {get_param: OvercloudSwiftStorageFlavor}
873           HashSuffix: {get_param: SwiftHashSuffix}
874           MountCheck: {get_param: SwiftMountCheck}
875           MinPartHours: {get_param: SwiftMinPartHours}
876           PartPower: {get_param: SwiftPartPower}
877           Image: {get_param: SwiftStorageImage}
878           Replicas: { get_param: SwiftReplicas}
879           NtpServer: {get_param: NtpServer}
880           UpdateIdentifier: {get_param: UpdateIdentifier}
881           ServiceNetMap: {get_param: ServiceNetMap}
882           Hostname:
883             str_replace:
884               template: {get_param: ObjectStorageHostnameFormat}
885               params:
886                 '%stackname%': {get_param: 'OS::stack_name'}
887
888   CephStorage:
889     type: OS::Heat::ResourceGroup
890     depends_on: Networks
891     properties:
892       count: {get_param: CephStorageCount}
893       resource_def:
894         type: OS::TripleO::CephStorage
895         properties:
896           Image: {get_param: CephStorageImage}
897           KeyName: {get_param: KeyName}
898           Flavor: {get_param: OvercloudCephStorageFlavor}
899           NtpServer: {get_param: NtpServer}
900           ServiceNetMap: {get_param: ServiceNetMap}
901           UpdateIdentifier: {get_param: UpdateIdentifier}
902           Hostname:
903             str_replace:
904               template: {get_param: CephStorageHostnameFormat}
905               params:
906                 '%stackname%': {get_param: 'OS::stack_name'}
907
908   ControllerIpListMap:
909     type: OS::TripleO::Network::Ports::NetIpListMap
910     properties:
911       ExternalIpList: {get_attr: [Controller, external_ip_address]}
912       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
913       StorageIpList: {get_attr: [Controller, storage_ip_address]}
914       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
915       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
916
917   allNodesConfig:
918     type: OS::TripleO::AllNodes::SoftwareConfig
919     properties:
920       compute_hosts: {get_attr: [Compute, hosts_entry]}
921       controller_hosts: {get_attr: [Controller, hosts_entry]}
922       controller_ips: {get_attr: [Controller, ip_address]}
923       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
924       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
925       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
926       controller_names: {get_attr: [Controller, hostname]}
927       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
928       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
929       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
930       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
931       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
932       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
933       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
934       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
935       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
936       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
937       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
938       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
939       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
940       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
941       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
942       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
943       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
944
945   MysqlRootPassword:
946     type: OS::Heat::RandomString
947     properties:
948       length: 10
949
950   MysqlClusterUniquePart:
951     type: OS::Heat::RandomString
952     properties:
953       length: 10
954
955   RabbitCookie:
956     type: OS::Heat::RandomString
957     properties:
958       length: 20
959       salt: {get_param: RabbitCookieSalt}
960
961   # creates the network architecture
962   Networks:
963     type: OS::TripleO::Network
964
965   ControlVirtualIP:
966     type: OS::Neutron::Port
967     depends_on: Networks
968     properties:
969       name: control_virtual_ip
970       network_id: {get_param: NeutronControlPlaneID}
971       fixed_ips: {get_param: ControlFixedIPs}
972       replacement_policy: AUTO
973
974   RedisVirtualIP:
975     depends_on: Networks
976     type: OS::TripleO::Controller::Ports::RedisVipPort
977     properties:
978       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
979       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
980       PortName: redis_virtual_ip
981       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
982
983   # same as external
984   PublicVirtualIP:
985     type: OS::Neutron::Port
986     depends_on: Networks
987     properties:
988       name: public_virtual_ip
989       network: {get_param: PublicVirtualNetwork}
990       fixed_ips: {get_param: PublicVirtualFixedIPs}
991       replacement_policy: AUTO
992
993   InternalApiVirtualIP:
994     depends_on: Networks
995     type: OS::TripleO::Controller::Ports::InternalApiPort
996     properties:
997       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
998       PortName: internal_api_virtual_ip
999
1000   StorageVirtualIP:
1001     depends_on: Networks
1002     type: OS::TripleO::Controller::Ports::StoragePort
1003     properties:
1004       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1005       PortName: storage_virtual_ip
1006
1007   StorageMgmtVirtualIP:
1008     depends_on: Networks
1009     type: OS::TripleO::Controller::Ports::StorageMgmtPort
1010     properties:
1011       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1012       PortName: storage_management_virtual_ip
1013
1014   VipMap:
1015     type: OS::TripleO::Network::Ports::NetIpMap
1016     properties:
1017       ExternalIp: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1018       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1019       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1020       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1021       # No tenant VIP required
1022
1023   VipConfig:
1024     type: OS::TripleO::VipConfig
1025
1026   VipDeployment:
1027     type: OS::Heat::StructuredDeployments
1028     properties:
1029       config: {get_resource: VipConfig}
1030       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1031       input_values:
1032         # service VIP mappings
1033         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1034         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1035         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1036         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1037         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1038         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1039         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1040         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1041         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1042         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1043         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1044         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1045         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1046         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1047         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1048         # direct configuration of Virtual IPs for each network
1049         control_virtual_ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1050         public_virtual_ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1051         internal_api_virtual_ip: {get_attr: [InternalApiVirtualIP, ip_address]}
1052         storage_virtual_ip: {get_attr: [StorageVirtualIP, ip_address]}
1053         storage_mgmt_virtual_ip: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1054
1055   ControllerBootstrapNodeConfig:
1056     type: OS::TripleO::BootstrapNode::SoftwareConfig
1057     properties:
1058       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1059       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1060
1061   ControllerBootstrapNodeDeployment:
1062     type: OS::Heat::StructuredDeployments
1063     properties:
1064       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1065       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1066
1067   ControllerSwiftDeployment:
1068     type: OS::Heat::StructuredDeployments
1069     properties:
1070       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1071       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1072
1073   ObjectStorageSwiftDeployment:
1074     type: OS::Heat::StructuredDeployments
1075     properties:
1076       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1077       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1078
1079   SwiftDevicesAndProxyConfig:
1080     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1081     properties:
1082       controller_swift_devices: {get_attr: [Controller, swift_device]}
1083       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1084       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1085
1086   ComputeCephDeployment:
1087     type: OS::Heat::StructuredDeployments
1088     properties:
1089       config: {get_attr: [CephClusterConfig, config_id]}
1090       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1091
1092   ControllerCephDeployment:
1093     type: OS::Heat::StructuredDeployments
1094     properties:
1095       config: {get_attr: [CephClusterConfig, config_id]}
1096       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1097
1098   CephStorageCephDeployment:
1099     type: OS::Heat::StructuredDeployments
1100     properties:
1101       config: {get_attr: [CephClusterConfig, config_id]}
1102       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1103
1104   CephClusterConfig:
1105     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1106     properties:
1107       ceph_fsid: {get_param: CephClusterFSID}
1108       ceph_mon_key: {get_param: CephMonKey}
1109       ceph_admin_key: {get_param: CephAdminKey}
1110       ceph_mon_names: {get_attr: [Controller, hostname]}
1111       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1112
1113   ControllerClusterConfig:
1114     type: OS::Heat::StructuredConfig
1115     properties:
1116       group: os-apply-config
1117       config:
1118         corosync:
1119           nodes: {get_attr: [Controller, corosync_node]}
1120         horizon:
1121           caches:
1122             memcached:
1123               nodes: {get_attr: [Controller, hostname]}
1124         mysql:
1125           nodes: {get_attr: [Controller, corosync_node]}
1126         haproxy:
1127           nodes: {get_attr: [Controller, corosync_node]}
1128
1129   ControllerClusterDeployment:
1130     type: OS::Heat::StructuredDeployments
1131     properties:
1132       config: {get_resource: ControllerClusterConfig}
1133       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1134
1135   ControllerAllNodesDeployment:
1136     type: OS::Heat::StructuredDeployments
1137     properties:
1138       config: {get_attr: [allNodesConfig, config_id]}
1139       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1140
1141   ComputeAllNodesDeployment:
1142     type: OS::Heat::StructuredDeployments
1143     properties:
1144       config: {get_attr: [allNodesConfig, config_id]}
1145       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1146
1147   BlockStorageAllNodesDeployment:
1148     type: OS::Heat::StructuredDeployments
1149     properties:
1150       config: {get_attr: [allNodesConfig, config_id]}
1151       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1152
1153   ObjectStorageAllNodesDeployment:
1154     type: OS::Heat::StructuredDeployments
1155     properties:
1156       config: {get_attr: [allNodesConfig, config_id]}
1157       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1158
1159   CephStorageAllNodesDeployment:
1160     type: OS::Heat::StructuredDeployments
1161     properties:
1162       config: {get_attr: [allNodesConfig, config_id]}
1163       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1164
1165   # Nested stack deployment runs after all other controller deployments
1166   ControllerNodesPostDeployment:
1167     type: OS::TripleO::ControllerPostDeployment
1168     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1169     properties:
1170       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1171       NodeConfigIdentifiers: {get_attr: [Controller, attributes, config_identifier]}
1172
1173   ComputeNodesPostDeployment:
1174     type: OS::TripleO::ComputePostDeployment
1175     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1176     properties:
1177       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1178       NodeConfigIdentifiers: {get_attr: [Compute, attributes, config_identifier]}
1179
1180   ObjectStorageNodesPostDeployment:
1181     type: OS::TripleO::ObjectStoragePostDeployment
1182     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1183     properties:
1184       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1185       NodeConfigIdentifiers: {get_attr: [ObjectStorage, attributes, config_identifier]}
1186
1187
1188   BlockStorageNodesPostDeployment:
1189     type: OS::TripleO::BlockStoragePostDeployment
1190     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1191     properties:
1192       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1193       NodeConfigIdentifiers: {get_attr: [BlockStorage, attributes, config_identifier]}
1194
1195   CephStorageNodesPostDeployment:
1196     type: OS::TripleO::CephStoragePostDeployment
1197     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1198     properties:
1199       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1200       NodeConfigIdentifiers: {get_attr: [CephStorage, attributes, config_identifier]}
1201
1202 outputs:
1203   KeystoneURL:
1204     description: URL for the Overcloud Keystone service
1205     value:
1206       list_join:
1207       - ''
1208       - - http://
1209         - {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1210         - :5000/v2.0/