Merge "Remove keystone PKI related parameters"
[apex-tripleo-heat-templates.git] / overcloud.yaml
1 heat_template_version: 2016-04-08
2
3 description: >
4   Deploy an OpenStack environment, consisting of several node types (roles),
5   Controller, Compute, BlockStorage, SwiftStorage and CephStorage.  The Storage
6   roles enable independent scaling of the storage components, but the minimal
7   deployment is one Controller and one Compute node.
8
9
10 # TODO(shadower): we should probably use the parameter groups to put
11 # some order in here.
12 parameters:
13
14   # Common parameters (not specific to a role)
15   AdminPassword:
16     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
17     type: string
18     hidden: true
19   CinderEnableNfsBackend:
20     default: false
21     description: Whether to enable or not the NFS backend for Cinder
22     type: boolean
23   CinderEnableRbdBackend:
24     default: false
25     description: Whether to enable or not the Rbd backend for Cinder
26     type: boolean
27   CloudName:
28     default: overcloud
29     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
30     type: string
31   ControlFixedIPs:
32     default: []
33     description: Should be used for arbitrary ips.
34     type: json
35   Debug:
36     default: ''
37     description: Set to True to enable debugging on all services.
38     type: string
39   InternalApiVirtualFixedIPs:
40     default: []
41     description: >
42         Control the IP allocation for the InternalApiVirtualInterface port. E.g.
43         [{'ip_address':'1.2.3.4'}]
44     type: json
45   NeutronControlPlaneID:
46     default: 'ctlplane'
47     type: string
48     description: Neutron ID or name for ctlplane network.
49   NeutronPassword:
50     description: The password for the neutron service account, used by neutron agents.
51     type: string
52     hidden: true
53   NeutronPublicInterface:
54     default: nic1
55     description: What interface to bridge onto br-ex for network nodes.
56     type: string
57   NovaIPv6:
58     default: false
59     description: Enable IPv6 features in Nova
60     type: boolean
61   NovaPassword:
62     description: The password for the nova service account, used by nova-api.
63     type: string
64     hidden: true
65   PublicVirtualFixedIPs:
66     default: []
67     description: >
68         Control the IP allocation for the PublicVirtualInterface port. E.g.
69         [{'ip_address':'1.2.3.4'}]
70     type: json
71   RabbitCookieSalt:
72     type: string
73     default: unset
74     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
75   RabbitUserName:
76     default: guest
77     description: The username for RabbitMQ
78     type: string
79   RabbitPassword:
80     description: The password for RabbitMQ
81     type: string
82     hidden: true
83   RabbitClientUseSSL:
84     default: false
85     description: >
86         Rabbit client subscriber parameter to specify
87         an SSL connection to the RabbitMQ host.
88     type: string
89   RabbitClientPort:
90     default: 5672
91     description: Set rabbit subscriber port, change this if using SSL
92     type: number
93   StorageVirtualFixedIPs:
94     default: []
95     description: >
96         Control the IP allocation for the StorageVirtualInterface port. E.g.
97         [{'ip_address':'1.2.3.4'}]
98     type: json
99   StorageMgmtVirtualFixedIPs:
100     default: []
101     description: >
102         Control the IP allocation for the StorageMgmgVirtualInterface port. E.g.
103         [{'ip_address':'1.2.3.4'}]
104     type: json
105   CloudDomain:
106     default: 'localdomain'
107     type: string
108     description: >
109       The DNS domain used for the hosts. This should match the dhcp_domain
110       configured in the Undercloud neutron. Defaults to localdomain.
111   ServerMetadata:
112     default: {}
113     description: >
114       Extra properties or metadata passed to Nova for the created nodes in
115       the overcloud. It's accessible via the Nova metadata API.
116     type: json
117
118   # Controller-specific params
119   ControllerCount:
120     type: number
121     default: 1
122   controllerExtraConfig:
123     default: {}
124     description: |
125       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
126     type: json
127   OvercloudControlFlavor:
128     description: Flavor for control nodes to request when deploying.
129     default: baremetal
130     type: string
131     constraints:
132       - custom_constraint: nova.flavor
133   ExtraConfig:
134     default: {}
135     description: |
136       Additional configuration to inject into the cluster. The format required
137       may be implementation specific, e.g puppet hieradata.  Any role specific
138       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
139     type: json
140   SwiftHashSuffix:
141     description: A random string to be used as a salt when hashing to determine mappings in the ring.
142     type: string
143     hidden: true
144
145
146 # Compute-specific params
147   ComputeCount:
148     type: number
149     default: 1
150   HypervisorNeutronPhysicalBridge:
151     default: 'br-ex'
152     description: >
153       An OVS bridge to create on each hypervisor. This defaults to br-ex the
154       same as the control plane nodes, as we have a uniform configuration of
155       the openvswitch agent. Typically should not need to be changed.
156     type: string
157   HypervisorNeutronPublicInterface:
158     default: nic1
159     description: What interface to add to the HypervisorNeutronPhysicalBridge.
160     type: string
161   NovaComputeDriver:
162     type: string
163     default: libvirt.LibvirtDriver
164   NovaComputeExtraConfig:
165     default: {}
166     description: |
167       NovaCompute specific configuration to inject into the cluster. Same
168       structure as ExtraConfig.
169     type: json
170   NovaComputeLibvirtType:
171     default: kvm
172     type: string
173   NovaComputeLibvirtVifDriver:
174     default: ''
175     description: Libvirt VIF driver configuration for the network
176     type: string
177   NovaEnableRbdBackend:
178     default: false
179     description: Whether to enable or not the Rbd backend for Nova
180     type: boolean
181   NovaOVSBridge:
182     default: 'br-int'
183     description: Name of integration bridge used by Open vSwitch
184     type: string
185   NovaSecurityGroupAPI:
186     default: 'neutron'
187     description: The full class name of the security API class
188     type: string
189   OvercloudComputeFlavor:
190     description: Use this flavor
191     default: baremetal
192     type: string
193     constraints:
194       - custom_constraint: nova.flavor
195   ServiceNetMap:
196     default:
197       NeutronTenantNetwork: tenant
198       CeilometerApiNetwork: internal_api
199       AodhApiNetwork: internal_api
200       GnocchiApiNetwork: internal_api
201       MongoDbNetwork: internal_api
202       CinderApiNetwork: internal_api
203       CinderIscsiNetwork: storage
204       GlanceApiNetwork: storage
205       GlanceRegistryNetwork: internal_api
206       IronicApiNetwork: internal_api
207       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
208       KeystonePublicApiNetwork: internal_api
209       ManilaApiNetwork: internal_api
210       NeutronApiNetwork: internal_api
211       HeatApiNetwork: internal_api
212       NovaApiNetwork: internal_api
213       NovaMetadataNetwork: internal_api
214       NovaVncProxyNetwork: internal_api
215       SwiftMgmtNetwork: storage_mgmt
216       SwiftProxyNetwork: storage
217       SaharaApiNetwork: internal_api
218       HorizonNetwork: internal_api
219       MemcachedNetwork: internal_api
220       RabbitMqNetwork: internal_api
221       RedisNetwork: internal_api
222       MysqlNetwork: internal_api
223       CephClusterNetwork: storage_mgmt
224       CephPublicNetwork: storage
225       ControllerHostnameResolveNetwork: internal_api
226       ComputeHostnameResolveNetwork: internal_api
227       BlockStorageHostnameResolveNetwork: internal_api
228       ObjectStorageHostnameResolveNetwork: internal_api
229       CephStorageHostnameResolveNetwork: storage
230     description: Mapping of service_name -> network name. Typically set
231                  via parameter_defaults in the resource registry.
232     type: json
233
234   ControllerServices:
235     default:
236       - OS::TripleO::Services::CephMon
237       - OS::TripleO::Services::CephExternal
238       - OS::TripleO::Services::CinderApi
239       - OS::TripleO::Services::CinderScheduler
240       - OS::TripleO::Services::CinderVolume
241       - OS::TripleO::Services::Core
242       - OS::TripleO::Services::Kernel
243       - OS::TripleO::Services::Keystone
244       - OS::TripleO::Services::GlanceApi
245       - OS::TripleO::Services::GlanceRegistry
246       - OS::TripleO::Services::HeatApi
247       - OS::TripleO::Services::HeatApiCfn
248       - OS::TripleO::Services::HeatApiCloudwatch
249       - OS::TripleO::Services::HeatEngine
250       - OS::TripleO::Services::MySQL
251       - OS::TripleO::Services::NeutronDhcpAgent
252       - OS::TripleO::Services::NeutronL3Agent
253       - OS::TripleO::Services::NeutronMetadataAgent
254       - OS::TripleO::Services::NeutronServer
255       - OS::TripleO::Services::NeutronCorePlugin
256       - OS::TripleO::Services::NeutronOvsAgent
257       - OS::TripleO::Services::RabbitMQ
258       - OS::TripleO::Services::HAproxy
259       - OS::TripleO::Services::Keepalived
260       - OS::TripleO::Services::Memcached
261       - OS::TripleO::Services::Pacemaker
262       - OS::TripleO::Services::Redis
263       - OS::TripleO::Services::NovaConductor
264       - OS::TripleO::Services::MongoDb
265       - OS::TripleO::Services::NovaApi
266       - OS::TripleO::Services::NovaScheduler
267       - OS::TripleO::Services::NovaConsoleauth
268       - OS::TripleO::Services::NovaVncproxy
269       - OS::TripleO::Services::Ntp
270       - OS::TripleO::Services::SwiftProxy
271       - OS::TripleO::Services::SwiftStorage
272       - OS::TripleO::Services::SwiftRingBuilder
273       - OS::TripleO::Services::Snmp
274       - OS::TripleO::Services::Timezone
275       - OS::TripleO::Services::CeilometerApi
276       - OS::TripleO::Services::CeilometerCollector
277       - OS::TripleO::Services::CeilometerExpirer
278       - OS::TripleO::Services::CeilometerAgentCentral
279       - OS::TripleO::Services::CeilometerAgentNotification
280       - OS::TripleO::Services::Horizon
281       - OS::TripleO::Services::GnocchiApi
282       - OS::TripleO::Services::GnocchiMetricd
283       - OS::TripleO::Services::GnocchiStatsd
284       - OS::Tripleo::Services::ManilaApi
285       - OS::Tripleo::Services::ManilaScheduler
286       - OS::Tripleo::Services::ManilaShare
287       - OS::TripleO::Services::AodhApi
288       - OS::TripleO::Services::AodhEvaluator
289       - OS::TripleO::Services::AodhNotifier
290       - OS::TripleO::Services::AodhListener
291     description: A list of service resources (configured in the Heat
292                  resource_registry) which represent nested stacks
293                  for each service that should get installed on the Controllers.
294     type: comma_delimited_list
295
296   ComputeServices:
297     default:
298       - OS::TripleO::Services::CephClient
299       - OS::TripleO::Services::CephExternal
300       - OS::TripleO::Services::Timezone
301       - OS::TripleO::Services::Ntp
302       - OS::TripleO::Services::Snmp
303       - OS::TripleO::Services::NovaCompute
304       - OS::TripleO::Services::NovaLibvirt
305       - OS::TripleO::Services::Kernel
306       - OS::TripleO::Services::ComputeNeutronCorePlugin
307       - OS::TripleO::Services::ComputeNeutronOvsAgent
308       - OS::TripleO::Services::ComputeCeilometerAgent
309       - OS::TripleO::Services::ComputeNeutronL3Agent
310       - OS::TripleO::Services::ComputeNeutronMetadataAgent
311     description: A list of service resources (configured in the Heat
312                  resource_registry) which represent nested stacks
313                  for each service that should get installed on the Compute Nodes.
314     type: comma_delimited_list
315
316 # Block storage specific parameters
317   BlockStorageCount:
318     type: number
319     default: 0
320   OvercloudBlockStorageFlavor:
321     description: Flavor for block storage nodes to request when deploying.
322     default: baremetal
323     type: string
324     constraints:
325       - custom_constraint: nova.flavor
326   BlockStorageExtraConfig:
327     default: {}
328     description: |
329       BlockStorage specific configuration to inject into the cluster. Same
330       structure as ExtraConfig.
331     type: json
332   BlockStorageServices:
333     default:
334       - OS::TripleO::Services::CinderVolume
335       - OS::TripleO::Services::Kernel
336       - OS::TripleO::Services::Ntp
337       - OS::TripleO::Services::Timezone
338       - OS::TripleO::Services::Snmp
339     description: A list of service resources (configured in the Heat
340                  resource_registry) which represent nested stacks
341                  for each service that should get installed on the BlockStorage nodes.
342     type: comma_delimited_list
343
344 # Object storage specific parameters
345   ObjectStorageCount:
346     type: number
347     default: 0
348   OvercloudSwiftStorageFlavor:
349     description: Flavor for Swift storage nodes to request when deploying.
350     default: baremetal
351     type: string
352     constraints:
353       - custom_constraint: nova.flavor
354   ObjectStorageExtraConfig:
355     default: {}
356     description: |
357       ObjectStorage specific configuration to inject into the cluster. Same
358       structure as ExtraConfig.
359     type: json
360   ObjectStorageServices:
361     default:
362       - OS::TripleO::Services::Kernel
363       - OS::TripleO::Services::Ntp
364       - OS::TripleO::Services::SwiftStorage
365       - OS::TripleO::Services::SwiftRingBuilder
366       - OS::TripleO::Services::Snmp
367       - OS::TripleO::Services::Timezone
368     description: A list of service resources (configured in the Heat
369                  resource_registry) which represent nested stacks
370                  for each service that should get installed on the ObjectStorage nodes.
371                  Note this role currently only supports steps 2, 3 and 4 configuration.
372     type: comma_delimited_list
373
374
375 # Ceph storage specific parameters
376   CephStorageCount:
377     type: number
378     default: 0
379   OvercloudCephStorageFlavor:
380     default: baremetal
381     description: Flavor for Ceph storage nodes to request when deploying.
382     type: string
383     constraints:
384       - custom_constraint: nova.flavor
385   CephStorageExtraConfig:
386     default: {}
387     description: |
388       CephStorage specific configuration to inject into the cluster. Same
389       structure as ExtraConfig.
390     type: json
391   CephStorageServices:
392     default:
393       - OS::TripleO::Services::CephOSD
394       - OS::TripleO::Services::Kernel
395       - OS::TripleO::Services::Ntp
396       - OS::TripleO::Services::Timezone
397     description: A list of service resources (configured in the Heat
398                  resource_registry) which represent nested stacks
399                  for each service that should get installed on the CephStorage nodes.
400     type: comma_delimited_list
401
402   # Hostname format for each role
403   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
404   # and %stackname% is replaced with OS::stack_name in the template below.
405   # If you want to use the heat generated names, pass '' (empty string).
406   ControllerHostnameFormat:
407     type: string
408     description: Format for Controller node hostnames
409     default: '%stackname%-controller-%index%'
410   ComputeHostnameFormat:
411     type: string
412     description: Format for Compute node hostnames
413     default: '%stackname%-novacompute-%index%'
414   BlockStorageHostnameFormat:
415     type: string
416     description: Format for BlockStorage node hostnames
417     default: '%stackname%-blockstorage-%index%'
418   ObjectStorageHostnameFormat:
419     type: string
420     description: Format for SwiftStorage node hostnames
421     default: '%stackname%-objectstorage-%index%'
422   CephStorageHostnameFormat:
423     type: string
424     description: Format for CephStorage node hostnames
425     default: '%stackname%-cephstorage-%index%'
426
427   # Identifiers to trigger tasks on nodes
428   UpdateIdentifier:
429     default: ''
430     type: string
431     description: >
432       Setting to a previously unused value during stack-update will trigger
433       package update on all nodes
434   DeployIdentifier:
435     default: ''
436     type: string
437     description: >
438       Setting this to a unique value will re-run any deployment tasks which
439       perform configuration on a Heat stack-update.
440
441   # If you want to remove a specific node from a resource group, you can pass
442   # the node name or id as a <Group>RemovalPolicies parameter, for example:
443   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
444   ControllerRemovalPolicies:
445     default: []
446     type: json
447     description: >
448       List of resources to be removed from ControllerResourceGroup when
449       doing an update which requires removal of specific resources.
450   ComputeRemovalPolicies:
451     default: []
452     type: json
453     description: >
454       List of resources to be removed from ComputeResourceGroup when
455       doing an update which requires removal of specific resources.
456   BlockStorageRemovalPolicies:
457     default: []
458     type: json
459     description: >
460       List of resources to be removed from BlockStorageResourceGroup when
461       doing an update which requires removal of specific resources.
462   ObjectStorageRemovalPolicies:
463     default: []
464     type: json
465     description: >
466       List of resources to be removed from ObjectStorageResourceGroup when
467       doing an update which requires removal of specific resources.
468   CephStorageRemovalPolicies:
469     default: []
470     type: json
471     description: >
472       List of resources to be removed from CephStorageResourceGroup when
473       doing an update which requires removal of specific resources.
474
475 parameter_groups:
476 - label: deprecated
477   description: Do not use deprecated params, they will be removed.
478   parameters:
479   - controllerExtraConfig
480
481
482 resources:
483
484   HeatAuthEncryptionKey:
485     type: OS::Heat::RandomString
486
487   PcsdPassword:
488     type: OS::Heat::RandomString
489     properties:
490       length: 16
491
492   HorizonSecret:
493     type: OS::Heat::RandomString
494     properties:
495       length: 10
496
497   EndpointMap:
498     type: OS::TripleO::EndpointMap
499     properties:
500       CloudName: {get_param: CloudName}
501       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
502       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
503       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
504       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
505       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
506       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
507       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
508       IronicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
509       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
510       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
511       ManilaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
512       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
513       MysqlNoBracketsVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
514       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
515       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
516       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
517       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
518       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
519
520   ControllerServiceChain:
521     type: OS::TripleO::Services
522     properties:
523       Services: {get_param: ControllerServices}
524       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
525
526   Controller:
527     type: OS::Heat::ResourceGroup
528     depends_on: Networks
529     properties:
530       count: {get_param: ControllerCount}
531       removal_policies: {get_param: ControllerRemovalPolicies}
532       resource_def:
533         type: OS::TripleO::Controller
534         properties:
535           controllerExtraConfig: {get_param: controllerExtraConfig}
536           Flavor: {get_param: OvercloudControlFlavor}
537           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
538           HorizonSecret: {get_resource: HorizonSecret}
539           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
540           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
541           PcsdPassword: {get_resource: PcsdPassword}
542           RabbitCookie: {get_attr: [RabbitCookie, value]}
543           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
544           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
545           ServiceNetMap: {get_param: ServiceNetMap}
546           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
547           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
548           Hostname:
549             str_replace:
550               template: {get_param: ControllerHostnameFormat}
551               params:
552                 '%stackname%': {get_param: 'OS::stack_name'}
553           NodeIndex: '%index%'
554           ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
555           ServiceNames: {get_attr: [ControllerServiceChain, role_data, service_names]}
556
557   ComputeServiceChain:
558
559     type: OS::TripleO::Services
560     properties:
561       Services: {get_param: ComputeServices}
562       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
563
564   Compute:
565     type: OS::Heat::ResourceGroup
566     depends_on: Networks
567     properties:
568       count: {get_param: ComputeCount}
569       removal_policies: {get_param: ComputeRemovalPolicies}
570       resource_def:
571         type: OS::TripleO::Compute
572         properties:
573           AdminPassword: {get_param: AdminPassword}
574           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
575           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
576           Debug: {get_param: Debug}
577           ExtraConfig: {get_param: ExtraConfig}
578           Flavor: {get_param: OvercloudComputeFlavor}
579           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
580           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
581           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
582           NeutronPassword: {get_param: NeutronPassword}
583           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
584           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
585           # L3 HA and Failover is not relevant for Computes, should be removed
586           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
587           NovaComputeDriver: {get_param: NovaComputeDriver}
588           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
589           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
590           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
591           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
592           NovaIPv6: {get_param: NovaIPv6}
593           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
594           NovaPassword: {get_param: NovaPassword}
595           NovaOVSBridge: {get_param: NovaOVSBridge}
596           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
597           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
598           RabbitPassword: {get_param: RabbitPassword}
599           RabbitUserName: {get_param: RabbitUserName}
600           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
601           RabbitClientPort: {get_param: RabbitClientPort}
602           ServiceNetMap: {get_param: ServiceNetMap}
603           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
604           UpdateIdentifier: {get_param: UpdateIdentifier}
605           Hostname:
606             str_replace:
607               template: {get_param: ComputeHostnameFormat}
608               params:
609                 '%stackname%': {get_param: 'OS::stack_name'}
610           CloudDomain: {get_param: CloudDomain}
611           ServerMetadata: {get_param: ServerMetadata}
612           NodeIndex: '%index%'
613           ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
614           ServiceNames: {get_attr: [ComputeServiceChain, role_data, service_names]}
615
616   BlockStorageServiceChain:
617     type: OS::TripleO::Services
618     properties:
619       Services: {get_param: BlockStorageServices}
620       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
621
622   BlockStorage:
623     type: OS::Heat::ResourceGroup
624     depends_on: Networks
625     properties:
626       count: {get_param: BlockStorageCount}
627       removal_policies: {get_param: BlockStorageRemovalPolicies}
628       resource_def:
629         type: OS::TripleO::BlockStorage
630         properties:
631           Flavor: {get_param: OvercloudBlockStorageFlavor}
632           UpdateIdentifier: {get_param: UpdateIdentifier}
633           Hostname:
634             str_replace:
635               template: {get_param: BlockStorageHostnameFormat}
636               params:
637                 '%stackname%': {get_param: 'OS::stack_name'}
638           ServiceNetMap: {get_param: ServiceNetMap}
639           ExtraConfig: {get_param: ExtraConfig}
640           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
641           CloudDomain: {get_param: CloudDomain}
642           ServerMetadata: {get_param: ServerMetadata}
643           NodeIndex: '%index%'
644           ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
645           ServiceNames: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
646
647   ObjectStorageServiceChain:
648     type: OS::TripleO::Services
649     properties:
650       Services: {get_param: ObjectStorageServices}
651       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
652
653   ObjectStorage:
654     type: OS::Heat::ResourceGroup
655     depends_on: Networks
656     properties:
657       count: {get_param: ObjectStorageCount}
658       removal_policies: {get_param: ObjectStorageRemovalPolicies}
659       resource_def:
660         type: OS::TripleO::ObjectStorage
661         properties:
662           Flavor: {get_param: OvercloudSwiftStorageFlavor}
663           HashSuffix: {get_param: SwiftHashSuffix}
664           UpdateIdentifier: {get_param: UpdateIdentifier}
665           ServiceNetMap: {get_param: ServiceNetMap}
666           Hostname:
667             str_replace:
668               template: {get_param: ObjectStorageHostnameFormat}
669               params:
670                 '%stackname%': {get_param: 'OS::stack_name'}
671           ExtraConfig: {get_param: ExtraConfig}
672           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
673           CloudDomain: {get_param: CloudDomain}
674           ServerMetadata: {get_param: ServerMetadata}
675           NodeIndex: '%index%'
676           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
677           ServiceNames: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
678
679   CephStorageServiceChain:
680     type: OS::TripleO::Services
681     properties:
682       Services: {get_param: CephStorageServices}
683       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
684
685   CephStorage:
686     type: OS::Heat::ResourceGroup
687     depends_on: Networks
688     properties:
689       count: {get_param: CephStorageCount}
690       removal_policies: {get_param: CephStorageRemovalPolicies}
691       resource_def:
692         type: OS::TripleO::CephStorage
693         properties:
694           Flavor: {get_param: OvercloudCephStorageFlavor}
695           ServiceNetMap: {get_param: ServiceNetMap}
696           UpdateIdentifier: {get_param: UpdateIdentifier}
697           Hostname:
698             str_replace:
699               template: {get_param: CephStorageHostnameFormat}
700               params:
701                 '%stackname%': {get_param: 'OS::stack_name'}
702           ExtraConfig: {get_param: ExtraConfig}
703           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
704           CloudDomain: {get_param: CloudDomain}
705           ServerMetadata: {get_param: ServerMetadata}
706           NodeIndex: '%index%'
707           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
708           ServiceNames: {get_attr: [CephStorageServiceChain, role_data, service_names]}
709
710   ControllerIpListMap:
711     type: OS::TripleO::Network::Ports::NetIpListMap
712     properties:
713       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
714       ExternalIpList: {get_attr: [Controller, external_ip_address]}
715       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
716       StorageIpList: {get_attr: [Controller, storage_ip_address]}
717       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
718       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
719       ManagementIpList: {get_attr: [Controller, management_ip_address]}
720
721   allNodesConfig:
722     type: OS::TripleO::AllNodes::SoftwareConfig
723     properties:
724       compute_hosts: {get_attr: [Compute, hosts_entry]}
725       controller_hosts: {get_attr: [Controller, hosts_entry]}
726       controller_ips: {get_attr: [Controller, ip_address]}
727       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
728       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
729       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
730       controller_names: {get_attr: [Controller, hostname]}
731       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
732       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
733       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
734       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
735       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
736       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
737       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
738       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
739       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
740       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
741       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
742       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
743       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
744       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
745       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
746       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
747       manila_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
748       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
749       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
750       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
751       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
752       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
753       ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
754       ceph_mon_node_names: {get_attr: [Controller, hostname]}
755       DeployIdentifier: {get_param: DeployIdentifier}
756       UpdateIdentifier: {get_param: UpdateIdentifier}
757
758   MysqlRootPassword:
759     type: OS::Heat::RandomString
760     properties:
761       length: 10
762
763   MysqlClusterUniquePart:
764     type: OS::Heat::RandomString
765     properties:
766       length: 10
767
768   RabbitCookie:
769     type: OS::Heat::RandomString
770     properties:
771       length: 20
772       salt: {get_param: RabbitCookieSalt}
773
774   # creates the network architecture
775   Networks:
776     type: OS::TripleO::Network
777
778   ControlVirtualIP:
779     type: OS::Neutron::Port
780     depends_on: Networks
781     properties:
782       name: control_virtual_ip
783       network: {get_param: NeutronControlPlaneID}
784       fixed_ips: {get_param: ControlFixedIPs}
785       replacement_policy: AUTO
786
787   RedisVirtualIP:
788     depends_on: Networks
789     type: OS::TripleO::Network::Ports::RedisVipPort
790     properties:
791       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
792       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
793       PortName: redis_virtual_ip
794       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
795       ServiceName: redis
796
797   # The public VIP is on the External net, falls back to ctlplane
798   PublicVirtualIP:
799     depends_on: Networks
800     type: OS::TripleO::Network::Ports::ExternalVipPort
801     properties:
802       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
803       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
804       PortName: public_virtual_ip
805       FixedIPs: {get_param: PublicVirtualFixedIPs}
806
807   InternalApiVirtualIP:
808     depends_on: Networks
809     type: OS::TripleO::Network::Ports::InternalApiVipPort
810     properties:
811       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
812       PortName: internal_api_virtual_ip
813       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
814
815   StorageVirtualIP:
816     depends_on: Networks
817     type: OS::TripleO::Network::Ports::StorageVipPort
818     properties:
819       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
820       PortName: storage_virtual_ip
821       FixedIPs: {get_param: StorageVirtualFixedIPs}
822
823   StorageMgmtVirtualIP:
824     depends_on: Networks
825     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
826     properties:
827       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
828       PortName: storage_management_virtual_ip
829       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
830
831   VipMap:
832     type: OS::TripleO::Network::Ports::NetVipMap
833     properties:
834       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
835       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
836       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
837       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
838       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
839       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
840       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
841       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
842       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
843       # No tenant or management VIP required
844
845   VipConfig:
846     type: OS::TripleO::VipConfig
847
848   VipDeployment:
849     type: OS::Heat::StructuredDeployments
850     properties:
851       name: VipDeployment
852       config: {get_resource: VipConfig}
853       servers: {get_attr: [Controller, attributes, nova_server_resource]}
854       input_values:
855         # service VIP mappings
856         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
857         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
858         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
859         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
860         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
861         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
862         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
863         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
864         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
865         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
866         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
867         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
868         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
869         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
870         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
871         manila_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
872         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
873         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
874         # direct configuration of Virtual IPs for each network
875         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
876         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
877         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
878         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
879         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
880         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
881         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
882
883   ControllerSwiftDeployment:
884     type: OS::Heat::StructuredDeployments
885     properties:
886       name: ControllerSwiftDeployment
887       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
888       servers: {get_attr: [Controller, attributes, nova_server_resource]}
889
890   ObjectStorageSwiftDeployment:
891     type: OS::Heat::StructuredDeployments
892     properties:
893       name: ObjectStorageSwiftDeployment
894       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
895       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
896
897   SwiftDevicesAndProxyConfig:
898     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
899     properties:
900       controller_swift_devices: {get_attr: [Controller, swift_device]}
901       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
902       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
903
904   ControllerAllNodesDeployment:
905     type: OS::Heat::StructuredDeployments
906     properties:
907       name: ControllerAllNodesDeployment
908       config: {get_attr: [allNodesConfig, config_id]}
909       servers: {get_attr: [Controller, attributes, nova_server_resource]}
910       input_values:
911         bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
912         bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
913
914   ComputeAllNodesDeployment:
915     type: OS::Heat::StructuredDeployments
916     properties:
917       name: ComputeAllNodesDeployment
918       config: {get_attr: [allNodesConfig, config_id]}
919       servers: {get_attr: [Compute, attributes, nova_server_resource]}
920       input_values:
921         bootstrap_nodeid: {get_attr: [Compute, resource.0.hostname]}
922         bootstrap_nodeid_ip: {get_attr: [Compute, resource.0.ip_address]}
923
924   BlockStorageAllNodesDeployment:
925     type: OS::Heat::StructuredDeployments
926     properties:
927       name: BlockStorageAllNodesDeployment
928       config: {get_attr: [allNodesConfig, config_id]}
929       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
930       input_values:
931         bootstrap_nodeid: {get_attr: [BlockStorage, resource.0.hostname]}
932         bootstrap_nodeid_ip: {get_attr: [BlockStorage, resource.0.ip_address]}
933
934   ObjectStorageAllNodesDeployment:
935     type: OS::Heat::StructuredDeployments
936     properties:
937       name: ObjectStorageAllNodesDeployment
938       config: {get_attr: [allNodesConfig, config_id]}
939       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
940       input_values:
941         bootstrap_nodeid: {get_attr: [ObjectStorage, resource.0.hostname]}
942         bootstrap_nodeid_ip: {get_attr: [ObjectStorage, resource.0.ip_address]}
943
944   CephStorageAllNodesDeployment:
945     type: OS::Heat::StructuredDeployments
946     properties:
947       name: CephStorageAllNodesDeployment
948       config: {get_attr: [allNodesConfig, config_id]}
949       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
950       input_values:
951         bootstrap_nodeid: {get_attr: [CephStorage, resource.0.hostname]}
952         bootstrap_nodeid_ip: {get_attr: [CephStorage, resource.0.ip_address]}
953
954   # All Nodes Validations
955   AllNodesValidationConfig:
956     type: OS::TripleO::AllNodes::Validation
957     properties:
958       PingTestIps:
959         list_join:
960         - ' '
961         - - {get_attr: [Controller, resource.0.external_ip_address]}
962           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
963           - {get_attr: [Controller, resource.0.storage_ip_address]}
964           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
965           - {get_attr: [Controller, resource.0.tenant_ip_address]}
966
967   ControllerAllNodesValidationDeployment:
968     type: OS::Heat::StructuredDeployments
969     depends_on: ControllerAllNodesDeployment
970     properties:
971       name: ControllerAllNodesValidationDeployment
972       config: {get_resource: AllNodesValidationConfig}
973       servers: {get_attr: [Controller, attributes, nova_server_resource]}
974
975   ComputeAllNodesValidationDeployment:
976     type: OS::Heat::StructuredDeployments
977     depends_on: ComputeAllNodesDeployment
978     properties:
979       name: ComputeAllNodesValidationDeployment
980       config: {get_resource: AllNodesValidationConfig}
981       servers: {get_attr: [Compute, attributes, nova_server_resource]}
982
983   BlockStorageAllNodesValidationDeployment:
984     type: OS::Heat::StructuredDeployments
985     depends_on: BlockStorageAllNodesDeployment
986     properties:
987       name: BlockStorageAllNodesValidationDeployment
988       config: {get_resource: AllNodesValidationConfig}
989       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
990
991   ObjectStorageAllNodesValidationDeployment:
992     type: OS::Heat::StructuredDeployments
993     depends_on: ObjectStorageAllNodesDeployment
994     properties:
995       name: ObjectStorageAllNodesValidationDeployment
996       config: {get_resource: AllNodesValidationConfig}
997       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
998
999   CephStorageAllNodesValidationDeployment:
1000     type: OS::Heat::StructuredDeployments
1001     depends_on: CephStorageAllNodesDeployment
1002     properties:
1003       name: CephStorageAllNodesValidationDeployment
1004       config: {get_resource: AllNodesValidationConfig}
1005       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1006
1007   UpdateWorkflow:
1008     type: OS::TripleO::Tasks::UpdateWorkflow
1009     properties:
1010       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1011       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1012       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1013       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1014       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1015       input_values:
1016         deploy_identifier: {get_param: DeployIdentifier}
1017         update_identifier: {get_param: UpdateIdentifier}
1018
1019   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1020   # the nested template may configure each role differently (or not at all)
1021   AllNodesExtraConfig:
1022     type: OS::TripleO::AllNodesExtraConfig
1023     depends_on:
1024       - UpdateWorkflow
1025       - ComputeAllNodesValidationDeployment
1026       - BlockStorageAllNodesValidationDeployment
1027       - ObjectStorageAllNodesValidationDeployment
1028       - CephStorageAllNodesValidationDeployment
1029       - ControllerAllNodesValidationDeployment
1030     properties:
1031       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1032       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1033       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1034       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1035       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1036
1037   # Nested stack deployment runs after all other controller deployments
1038   ControllerNodesPostDeployment:
1039     type: OS::TripleO::ControllerPostDeployment
1040     depends_on: [ControllerAllNodesDeployment, ControllerSwiftDeployment]
1041     properties:
1042       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1043       RoleData: {get_attr: [ControllerServiceChain, role_data]}
1044
1045   ComputeNodesPostDeployment:
1046     type: OS::TripleO::ComputePostDeployment
1047     depends_on: [ComputeAllNodesDeployment]
1048     properties:
1049       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1050       RoleData: {get_attr: [ComputeServiceChain, role_data]}
1051
1052   ObjectStorageNodesPostDeployment:
1053     type: OS::TripleO::ObjectStoragePostDeployment
1054     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1055     properties:
1056       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1057       RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
1058
1059   BlockStorageNodesPostDeployment:
1060     type: OS::TripleO::BlockStoragePostDeployment
1061     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1062     properties:
1063       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1064       RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
1065
1066   CephStorageNodesPostDeployment:
1067     type: OS::TripleO::CephStoragePostDeployment
1068     depends_on: [ControllerNodesPostDeployment, CephStorageAllNodesDeployment]
1069     properties:
1070       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1071       RoleData: {get_attr: [CephStorageServiceChain, role_data]}
1072
1073 outputs:
1074   KeystoneURL:
1075     description: URL for the Overcloud Keystone service
1076     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1077   KeystoneAdminVip:
1078     description: Keystone Admin VIP endpoint
1079     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1080   PublicVip:
1081     description: Controller VIP for public API endpoints
1082     value: {get_attr: [VipMap, net_ip_map, external]}
1083   AodhInternalVip:
1084     description: VIP for Aodh API internal endpoint
1085     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1086   CeilometerInternalVip:
1087     description: VIP for Ceilometer API internal endpoint
1088     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1089   CinderInternalVip:
1090     description: VIP for Cinder API internal endpoint
1091     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1092   GlanceInternalVip:
1093     description: VIP for Glance API internal endpoint
1094     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1095   GnocchiInternalVip:
1096     description: VIP for Gnocchi API internal endpoint
1097     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1098   HeatInternalVip:
1099     description: VIP for Heat API internal endpoint
1100     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1101   IronicInternalVip:
1102     description: VIP for Ironic API internal endpoint
1103     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1104   KeystoneInternalVip:
1105     description: VIP for Keystone API internal endpoint
1106     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1107   ManilaInternalVip:
1108     description: VIP for Manila API internal endpoint
1109     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
1110   NeutronInternalVip:
1111     description: VIP for Neutron API internal endpoint
1112     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1113   NovaInternalVip:
1114     description: VIP for Nova API internal endpoint
1115     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1116   SaharaInternalVip:
1117     description: VIP for Sahara API internal endpoint
1118     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1119   SwiftInternalVip:
1120     description: VIP for Swift Proxy internal endpoint
1121     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1122   EndpointMap:
1123     description: |
1124       Mapping of the resources with the needed info for their endpoints.
1125       This includes the protocol used, the IP, port and also a full
1126       representation of the URI.
1127     value: {get_attr: [EndpointMap, endpoint_map]}
1128   HostsEntry:
1129     description: |
1130       The content that should be appended to your /etc/hosts if you want to get
1131       hostname-based access to the deployed nodes (useful for testing without
1132       setting up a DNS).
1133     value: {get_attr: [allNodesConfig, hosts_entries]}