Merge "Add EnabledServices output to overcloud.yaml"
[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       - OS::TripleO::Services::SaharaApi
292       - OS::TripleO::Services::SaharaEngine
293     description: A list of service resources (configured in the Heat
294                  resource_registry) which represent nested stacks
295                  for each service that should get installed on the Controllers.
296     type: comma_delimited_list
297
298   ComputeServices:
299     default:
300       - OS::TripleO::Services::CephClient
301       - OS::TripleO::Services::CephExternal
302       - OS::TripleO::Services::Timezone
303       - OS::TripleO::Services::Ntp
304       - OS::TripleO::Services::Snmp
305       - OS::TripleO::Services::NovaCompute
306       - OS::TripleO::Services::NovaLibvirt
307       - OS::TripleO::Services::Kernel
308       - OS::TripleO::Services::ComputeNeutronCorePlugin
309       - OS::TripleO::Services::ComputeNeutronOvsAgent
310       - OS::TripleO::Services::ComputeCeilometerAgent
311       - OS::TripleO::Services::ComputeNeutronL3Agent
312       - OS::TripleO::Services::ComputeNeutronMetadataAgent
313     description: A list of service resources (configured in the Heat
314                  resource_registry) which represent nested stacks
315                  for each service that should get installed on the Compute Nodes.
316     type: comma_delimited_list
317
318 # Block storage specific parameters
319   BlockStorageCount:
320     type: number
321     default: 0
322   OvercloudBlockStorageFlavor:
323     description: Flavor for block storage nodes to request when deploying.
324     default: baremetal
325     type: string
326     constraints:
327       - custom_constraint: nova.flavor
328   BlockStorageExtraConfig:
329     default: {}
330     description: |
331       BlockStorage specific configuration to inject into the cluster. Same
332       structure as ExtraConfig.
333     type: json
334   BlockStorageServices:
335     default:
336       - OS::TripleO::Services::CinderVolume
337       - OS::TripleO::Services::Kernel
338       - OS::TripleO::Services::Ntp
339       - OS::TripleO::Services::Timezone
340       - OS::TripleO::Services::Snmp
341     description: A list of service resources (configured in the Heat
342                  resource_registry) which represent nested stacks
343                  for each service that should get installed on the BlockStorage nodes.
344     type: comma_delimited_list
345
346 # Object storage specific parameters
347   ObjectStorageCount:
348     type: number
349     default: 0
350   OvercloudSwiftStorageFlavor:
351     description: Flavor for Swift storage nodes to request when deploying.
352     default: baremetal
353     type: string
354     constraints:
355       - custom_constraint: nova.flavor
356   ObjectStorageExtraConfig:
357     default: {}
358     description: |
359       ObjectStorage specific configuration to inject into the cluster. Same
360       structure as ExtraConfig.
361     type: json
362   ObjectStorageServices:
363     default:
364       - OS::TripleO::Services::Kernel
365       - OS::TripleO::Services::Ntp
366       - OS::TripleO::Services::SwiftStorage
367       - OS::TripleO::Services::SwiftRingBuilder
368       - OS::TripleO::Services::Snmp
369       - OS::TripleO::Services::Timezone
370     description: A list of service resources (configured in the Heat
371                  resource_registry) which represent nested stacks
372                  for each service that should get installed on the ObjectStorage nodes.
373                  Note this role currently only supports steps 2, 3 and 4 configuration.
374     type: comma_delimited_list
375
376
377 # Ceph storage specific parameters
378   CephStorageCount:
379     type: number
380     default: 0
381   OvercloudCephStorageFlavor:
382     default: baremetal
383     description: Flavor for Ceph storage nodes to request when deploying.
384     type: string
385     constraints:
386       - custom_constraint: nova.flavor
387   CephStorageExtraConfig:
388     default: {}
389     description: |
390       CephStorage specific configuration to inject into the cluster. Same
391       structure as ExtraConfig.
392     type: json
393   CephStorageServices:
394     default:
395       - OS::TripleO::Services::CephOSD
396       - OS::TripleO::Services::Kernel
397       - OS::TripleO::Services::Ntp
398       - OS::TripleO::Services::Timezone
399     description: A list of service resources (configured in the Heat
400                  resource_registry) which represent nested stacks
401                  for each service that should get installed on the CephStorage nodes.
402     type: comma_delimited_list
403
404   # Hostname format for each role
405   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
406   # and %stackname% is replaced with OS::stack_name in the template below.
407   # If you want to use the heat generated names, pass '' (empty string).
408   ControllerHostnameFormat:
409     type: string
410     description: Format for Controller node hostnames
411     default: '%stackname%-controller-%index%'
412   ComputeHostnameFormat:
413     type: string
414     description: Format for Compute node hostnames
415     default: '%stackname%-novacompute-%index%'
416   BlockStorageHostnameFormat:
417     type: string
418     description: Format for BlockStorage node hostnames
419     default: '%stackname%-blockstorage-%index%'
420   ObjectStorageHostnameFormat:
421     type: string
422     description: Format for SwiftStorage node hostnames
423     default: '%stackname%-objectstorage-%index%'
424   CephStorageHostnameFormat:
425     type: string
426     description: Format for CephStorage node hostnames
427     default: '%stackname%-cephstorage-%index%'
428
429   # Identifiers to trigger tasks on nodes
430   UpdateIdentifier:
431     default: ''
432     type: string
433     description: >
434       Setting to a previously unused value during stack-update will trigger
435       package update on all nodes
436   DeployIdentifier:
437     default: ''
438     type: string
439     description: >
440       Setting this to a unique value will re-run any deployment tasks which
441       perform configuration on a Heat stack-update.
442
443   # If you want to remove a specific node from a resource group, you can pass
444   # the node name or id as a <Group>RemovalPolicies parameter, for example:
445   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
446   ControllerRemovalPolicies:
447     default: []
448     type: json
449     description: >
450       List of resources to be removed from ControllerResourceGroup when
451       doing an update which requires removal of specific resources.
452   ComputeRemovalPolicies:
453     default: []
454     type: json
455     description: >
456       List of resources to be removed from ComputeResourceGroup when
457       doing an update which requires removal of specific resources.
458   BlockStorageRemovalPolicies:
459     default: []
460     type: json
461     description: >
462       List of resources to be removed from BlockStorageResourceGroup when
463       doing an update which requires removal of specific resources.
464   ObjectStorageRemovalPolicies:
465     default: []
466     type: json
467     description: >
468       List of resources to be removed from ObjectStorageResourceGroup when
469       doing an update which requires removal of specific resources.
470   CephStorageRemovalPolicies:
471     default: []
472     type: json
473     description: >
474       List of resources to be removed from CephStorageResourceGroup when
475       doing an update which requires removal of specific resources.
476
477 parameter_groups:
478 - label: deprecated
479   description: Do not use deprecated params, they will be removed.
480   parameters:
481   - controllerExtraConfig
482
483
484 resources:
485
486   HeatAuthEncryptionKey:
487     type: OS::Heat::RandomString
488
489   PcsdPassword:
490     type: OS::Heat::RandomString
491     properties:
492       length: 16
493
494   HorizonSecret:
495     type: OS::Heat::RandomString
496     properties:
497       length: 10
498
499   EndpointMap:
500     type: OS::TripleO::EndpointMap
501     properties:
502       CloudName: {get_param: CloudName}
503       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
504       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
505       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
506       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
507       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
508       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
509       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
510       IronicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
511       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
512       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
513       ManilaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
514       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
515       MysqlNoBracketsVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
516       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
517       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
518       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
519       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
520       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
521
522   ControllerServiceChain:
523     type: OS::TripleO::Services
524     properties:
525       Services: {get_param: ControllerServices}
526       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
527
528   Controller:
529     type: OS::Heat::ResourceGroup
530     depends_on: Networks
531     properties:
532       count: {get_param: ControllerCount}
533       removal_policies: {get_param: ControllerRemovalPolicies}
534       resource_def:
535         type: OS::TripleO::Controller
536         properties:
537           controllerExtraConfig: {get_param: controllerExtraConfig}
538           Flavor: {get_param: OvercloudControlFlavor}
539           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
540           HorizonSecret: {get_resource: HorizonSecret}
541           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
542           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
543           PcsdPassword: {get_resource: PcsdPassword}
544           RabbitCookie: {get_attr: [RabbitCookie, value]}
545           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
546           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
547           ServiceNetMap: {get_param: ServiceNetMap}
548           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
549           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
550           Hostname:
551             str_replace:
552               template: {get_param: ControllerHostnameFormat}
553               params:
554                 '%stackname%': {get_param: 'OS::stack_name'}
555           NodeIndex: '%index%'
556           ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
557           ServiceNames: {get_attr: [ControllerServiceChain, role_data, service_names]}
558
559   ComputeServiceChain:
560
561     type: OS::TripleO::Services
562     properties:
563       Services: {get_param: ComputeServices}
564       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
565
566   Compute:
567     type: OS::Heat::ResourceGroup
568     depends_on: Networks
569     properties:
570       count: {get_param: ComputeCount}
571       removal_policies: {get_param: ComputeRemovalPolicies}
572       resource_def:
573         type: OS::TripleO::Compute
574         properties:
575           AdminPassword: {get_param: AdminPassword}
576           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
577           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
578           Debug: {get_param: Debug}
579           ExtraConfig: {get_param: ExtraConfig}
580           Flavor: {get_param: OvercloudComputeFlavor}
581           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
582           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
583           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
584           NeutronPassword: {get_param: NeutronPassword}
585           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
586           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
587           # L3 HA and Failover is not relevant for Computes, should be removed
588           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
589           NovaComputeDriver: {get_param: NovaComputeDriver}
590           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
591           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
592           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
593           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
594           NovaIPv6: {get_param: NovaIPv6}
595           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
596           NovaPassword: {get_param: NovaPassword}
597           NovaOVSBridge: {get_param: NovaOVSBridge}
598           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
599           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
600           RabbitPassword: {get_param: RabbitPassword}
601           RabbitUserName: {get_param: RabbitUserName}
602           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
603           RabbitClientPort: {get_param: RabbitClientPort}
604           ServiceNetMap: {get_param: ServiceNetMap}
605           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
606           UpdateIdentifier: {get_param: UpdateIdentifier}
607           Hostname:
608             str_replace:
609               template: {get_param: ComputeHostnameFormat}
610               params:
611                 '%stackname%': {get_param: 'OS::stack_name'}
612           CloudDomain: {get_param: CloudDomain}
613           ServerMetadata: {get_param: ServerMetadata}
614           NodeIndex: '%index%'
615           ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
616           ServiceNames: {get_attr: [ComputeServiceChain, role_data, service_names]}
617
618   BlockStorageServiceChain:
619     type: OS::TripleO::Services
620     properties:
621       Services: {get_param: BlockStorageServices}
622       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
623
624   BlockStorage:
625     type: OS::Heat::ResourceGroup
626     depends_on: Networks
627     properties:
628       count: {get_param: BlockStorageCount}
629       removal_policies: {get_param: BlockStorageRemovalPolicies}
630       resource_def:
631         type: OS::TripleO::BlockStorage
632         properties:
633           Flavor: {get_param: OvercloudBlockStorageFlavor}
634           UpdateIdentifier: {get_param: UpdateIdentifier}
635           Hostname:
636             str_replace:
637               template: {get_param: BlockStorageHostnameFormat}
638               params:
639                 '%stackname%': {get_param: 'OS::stack_name'}
640           ServiceNetMap: {get_param: ServiceNetMap}
641           ExtraConfig: {get_param: ExtraConfig}
642           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
643           CloudDomain: {get_param: CloudDomain}
644           ServerMetadata: {get_param: ServerMetadata}
645           NodeIndex: '%index%'
646           ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
647           ServiceNames: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
648
649   ObjectStorageServiceChain:
650     type: OS::TripleO::Services
651     properties:
652       Services: {get_param: ObjectStorageServices}
653       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
654
655   ObjectStorage:
656     type: OS::Heat::ResourceGroup
657     depends_on: Networks
658     properties:
659       count: {get_param: ObjectStorageCount}
660       removal_policies: {get_param: ObjectStorageRemovalPolicies}
661       resource_def:
662         type: OS::TripleO::ObjectStorage
663         properties:
664           Flavor: {get_param: OvercloudSwiftStorageFlavor}
665           HashSuffix: {get_param: SwiftHashSuffix}
666           UpdateIdentifier: {get_param: UpdateIdentifier}
667           ServiceNetMap: {get_param: ServiceNetMap}
668           Hostname:
669             str_replace:
670               template: {get_param: ObjectStorageHostnameFormat}
671               params:
672                 '%stackname%': {get_param: 'OS::stack_name'}
673           ExtraConfig: {get_param: ExtraConfig}
674           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
675           CloudDomain: {get_param: CloudDomain}
676           ServerMetadata: {get_param: ServerMetadata}
677           NodeIndex: '%index%'
678           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
679           ServiceNames: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
680
681   CephStorageServiceChain:
682     type: OS::TripleO::Services
683     properties:
684       Services: {get_param: CephStorageServices}
685       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
686
687   CephStorage:
688     type: OS::Heat::ResourceGroup
689     depends_on: Networks
690     properties:
691       count: {get_param: CephStorageCount}
692       removal_policies: {get_param: CephStorageRemovalPolicies}
693       resource_def:
694         type: OS::TripleO::CephStorage
695         properties:
696           Flavor: {get_param: OvercloudCephStorageFlavor}
697           ServiceNetMap: {get_param: ServiceNetMap}
698           UpdateIdentifier: {get_param: UpdateIdentifier}
699           Hostname:
700             str_replace:
701               template: {get_param: CephStorageHostnameFormat}
702               params:
703                 '%stackname%': {get_param: 'OS::stack_name'}
704           ExtraConfig: {get_param: ExtraConfig}
705           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
706           CloudDomain: {get_param: CloudDomain}
707           ServerMetadata: {get_param: ServerMetadata}
708           NodeIndex: '%index%'
709           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
710           ServiceNames: {get_attr: [CephStorageServiceChain, role_data, service_names]}
711
712   ControllerIpListMap:
713     type: OS::TripleO::Network::Ports::NetIpListMap
714     properties:
715       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
716       ExternalIpList: {get_attr: [Controller, external_ip_address]}
717       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
718       StorageIpList: {get_attr: [Controller, storage_ip_address]}
719       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
720       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
721       ManagementIpList: {get_attr: [Controller, management_ip_address]}
722
723   allNodesConfig:
724     type: OS::TripleO::AllNodes::SoftwareConfig
725     properties:
726       compute_hosts: {get_attr: [Compute, hosts_entry]}
727       controller_hosts: {get_attr: [Controller, hosts_entry]}
728       controller_ips: {get_attr: [Controller, ip_address]}
729       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
730       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
731       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
732       controller_names: {get_attr: [Controller, hostname]}
733       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
734       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
735       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
736       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
737       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
738       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
739       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
740       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
741       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
742       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
743       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
744       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
745       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
746       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
747       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
748       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
749       manila_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
750       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
751       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
752       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
753       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
754       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
755       ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
756       ceph_mon_node_names: {get_attr: [Controller, hostname]}
757       DeployIdentifier: {get_param: DeployIdentifier}
758       UpdateIdentifier: {get_param: UpdateIdentifier}
759
760   MysqlRootPassword:
761     type: OS::Heat::RandomString
762     properties:
763       length: 10
764
765   MysqlClusterUniquePart:
766     type: OS::Heat::RandomString
767     properties:
768       length: 10
769
770   RabbitCookie:
771     type: OS::Heat::RandomString
772     properties:
773       length: 20
774       salt: {get_param: RabbitCookieSalt}
775
776   # creates the network architecture
777   Networks:
778     type: OS::TripleO::Network
779
780   ControlVirtualIP:
781     type: OS::Neutron::Port
782     depends_on: Networks
783     properties:
784       name: control_virtual_ip
785       network: {get_param: NeutronControlPlaneID}
786       fixed_ips: {get_param: ControlFixedIPs}
787       replacement_policy: AUTO
788
789   RedisVirtualIP:
790     depends_on: Networks
791     type: OS::TripleO::Network::Ports::RedisVipPort
792     properties:
793       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
794       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
795       PortName: redis_virtual_ip
796       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
797       ServiceName: redis
798
799   # The public VIP is on the External net, falls back to ctlplane
800   PublicVirtualIP:
801     depends_on: Networks
802     type: OS::TripleO::Network::Ports::ExternalVipPort
803     properties:
804       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
805       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
806       PortName: public_virtual_ip
807       FixedIPs: {get_param: PublicVirtualFixedIPs}
808
809   InternalApiVirtualIP:
810     depends_on: Networks
811     type: OS::TripleO::Network::Ports::InternalApiVipPort
812     properties:
813       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
814       PortName: internal_api_virtual_ip
815       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
816
817   StorageVirtualIP:
818     depends_on: Networks
819     type: OS::TripleO::Network::Ports::StorageVipPort
820     properties:
821       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
822       PortName: storage_virtual_ip
823       FixedIPs: {get_param: StorageVirtualFixedIPs}
824
825   StorageMgmtVirtualIP:
826     depends_on: Networks
827     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
828     properties:
829       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
830       PortName: storage_management_virtual_ip
831       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
832
833   VipMap:
834     type: OS::TripleO::Network::Ports::NetVipMap
835     properties:
836       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
837       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
838       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
839       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
840       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
841       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
842       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
843       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
844       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
845       # No tenant or management VIP required
846
847   VipConfig:
848     type: OS::TripleO::VipConfig
849
850   VipDeployment:
851     type: OS::Heat::StructuredDeployments
852     properties:
853       name: VipDeployment
854       config: {get_resource: VipConfig}
855       servers: {get_attr: [Controller, attributes, nova_server_resource]}
856       input_values:
857         # service VIP mappings
858         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
859         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
860         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
861         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
862         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
863         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
864         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
865         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
866         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
867         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
868         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
869         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
870         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
871         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
872         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
873         manila_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
874         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
875         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
876         # direct configuration of Virtual IPs for each network
877         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
878         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
879         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
880         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
881         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
882         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
883         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
884
885   ControllerSwiftDeployment:
886     type: OS::Heat::StructuredDeployments
887     properties:
888       name: ControllerSwiftDeployment
889       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
890       servers: {get_attr: [Controller, attributes, nova_server_resource]}
891
892   ObjectStorageSwiftDeployment:
893     type: OS::Heat::StructuredDeployments
894     properties:
895       name: ObjectStorageSwiftDeployment
896       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
897       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
898
899   SwiftDevicesAndProxyConfig:
900     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
901     properties:
902       controller_swift_devices: {get_attr: [Controller, swift_device]}
903       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
904       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
905
906   ControllerAllNodesDeployment:
907     type: OS::Heat::StructuredDeployments
908     properties:
909       name: ControllerAllNodesDeployment
910       config: {get_attr: [allNodesConfig, config_id]}
911       servers: {get_attr: [Controller, attributes, nova_server_resource]}
912       input_values:
913         bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
914         bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
915
916   ComputeAllNodesDeployment:
917     type: OS::Heat::StructuredDeployments
918     properties:
919       name: ComputeAllNodesDeployment
920       config: {get_attr: [allNodesConfig, config_id]}
921       servers: {get_attr: [Compute, attributes, nova_server_resource]}
922       input_values:
923         bootstrap_nodeid: {get_attr: [Compute, resource.0.hostname]}
924         bootstrap_nodeid_ip: {get_attr: [Compute, resource.0.ip_address]}
925
926   BlockStorageAllNodesDeployment:
927     type: OS::Heat::StructuredDeployments
928     properties:
929       name: BlockStorageAllNodesDeployment
930       config: {get_attr: [allNodesConfig, config_id]}
931       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
932       input_values:
933         bootstrap_nodeid: {get_attr: [BlockStorage, resource.0.hostname]}
934         bootstrap_nodeid_ip: {get_attr: [BlockStorage, resource.0.ip_address]}
935
936   ObjectStorageAllNodesDeployment:
937     type: OS::Heat::StructuredDeployments
938     properties:
939       name: ObjectStorageAllNodesDeployment
940       config: {get_attr: [allNodesConfig, config_id]}
941       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
942       input_values:
943         bootstrap_nodeid: {get_attr: [ObjectStorage, resource.0.hostname]}
944         bootstrap_nodeid_ip: {get_attr: [ObjectStorage, resource.0.ip_address]}
945
946   CephStorageAllNodesDeployment:
947     type: OS::Heat::StructuredDeployments
948     properties:
949       name: CephStorageAllNodesDeployment
950       config: {get_attr: [allNodesConfig, config_id]}
951       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
952       input_values:
953         bootstrap_nodeid: {get_attr: [CephStorage, resource.0.hostname]}
954         bootstrap_nodeid_ip: {get_attr: [CephStorage, resource.0.ip_address]}
955
956   # All Nodes Validations
957   AllNodesValidationConfig:
958     type: OS::TripleO::AllNodes::Validation
959     properties:
960       PingTestIps:
961         list_join:
962         - ' '
963         - - {get_attr: [Controller, resource.0.external_ip_address]}
964           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
965           - {get_attr: [Controller, resource.0.storage_ip_address]}
966           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
967           - {get_attr: [Controller, resource.0.tenant_ip_address]}
968
969   ControllerAllNodesValidationDeployment:
970     type: OS::Heat::StructuredDeployments
971     depends_on: ControllerAllNodesDeployment
972     properties:
973       name: ControllerAllNodesValidationDeployment
974       config: {get_resource: AllNodesValidationConfig}
975       servers: {get_attr: [Controller, attributes, nova_server_resource]}
976
977   ComputeAllNodesValidationDeployment:
978     type: OS::Heat::StructuredDeployments
979     depends_on: ComputeAllNodesDeployment
980     properties:
981       name: ComputeAllNodesValidationDeployment
982       config: {get_resource: AllNodesValidationConfig}
983       servers: {get_attr: [Compute, attributes, nova_server_resource]}
984
985   BlockStorageAllNodesValidationDeployment:
986     type: OS::Heat::StructuredDeployments
987     depends_on: BlockStorageAllNodesDeployment
988     properties:
989       name: BlockStorageAllNodesValidationDeployment
990       config: {get_resource: AllNodesValidationConfig}
991       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
992
993   ObjectStorageAllNodesValidationDeployment:
994     type: OS::Heat::StructuredDeployments
995     depends_on: ObjectStorageAllNodesDeployment
996     properties:
997       name: ObjectStorageAllNodesValidationDeployment
998       config: {get_resource: AllNodesValidationConfig}
999       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1000
1001   CephStorageAllNodesValidationDeployment:
1002     type: OS::Heat::StructuredDeployments
1003     depends_on: CephStorageAllNodesDeployment
1004     properties:
1005       name: CephStorageAllNodesValidationDeployment
1006       config: {get_resource: AllNodesValidationConfig}
1007       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1008
1009   UpdateWorkflow:
1010     type: OS::TripleO::Tasks::UpdateWorkflow
1011     properties:
1012       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1013       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1014       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1015       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1016       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1017       input_values:
1018         deploy_identifier: {get_param: DeployIdentifier}
1019         update_identifier: {get_param: UpdateIdentifier}
1020
1021   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1022   # the nested template may configure each role differently (or not at all)
1023   AllNodesExtraConfig:
1024     type: OS::TripleO::AllNodesExtraConfig
1025     depends_on:
1026       - UpdateWorkflow
1027       - ComputeAllNodesValidationDeployment
1028       - BlockStorageAllNodesValidationDeployment
1029       - ObjectStorageAllNodesValidationDeployment
1030       - CephStorageAllNodesValidationDeployment
1031       - ControllerAllNodesValidationDeployment
1032     properties:
1033       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1034       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1035       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1036       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1037       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1038
1039   # Nested stack deployment runs after all other controller deployments
1040   ControllerNodesPostDeployment:
1041     type: OS::TripleO::ControllerPostDeployment
1042     depends_on: [ControllerAllNodesDeployment, ControllerSwiftDeployment]
1043     properties:
1044       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1045       RoleData: {get_attr: [ControllerServiceChain, role_data]}
1046
1047   ComputeNodesPostDeployment:
1048     type: OS::TripleO::ComputePostDeployment
1049     depends_on: [ComputeAllNodesDeployment]
1050     properties:
1051       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1052       RoleData: {get_attr: [ComputeServiceChain, role_data]}
1053
1054   ObjectStorageNodesPostDeployment:
1055     type: OS::TripleO::ObjectStoragePostDeployment
1056     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1057     properties:
1058       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1059       RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
1060
1061   BlockStorageNodesPostDeployment:
1062     type: OS::TripleO::BlockStoragePostDeployment
1063     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1064     properties:
1065       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1066       RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
1067
1068   CephStorageNodesPostDeployment:
1069     type: OS::TripleO::CephStoragePostDeployment
1070     depends_on: [ControllerNodesPostDeployment, CephStorageAllNodesDeployment]
1071     properties:
1072       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1073       RoleData: {get_attr: [CephStorageServiceChain, role_data]}
1074
1075 outputs:
1076   KeystoneURL:
1077     description: URL for the Overcloud Keystone service
1078     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1079   KeystoneAdminVip:
1080     description: Keystone Admin VIP endpoint
1081     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1082   PublicVip:
1083     description: Controller VIP for public API endpoints
1084     value: {get_attr: [VipMap, net_ip_map, external]}
1085   AodhInternalVip:
1086     description: VIP for Aodh API internal endpoint
1087     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1088   CeilometerInternalVip:
1089     description: VIP for Ceilometer API internal endpoint
1090     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1091   CinderInternalVip:
1092     description: VIP for Cinder API internal endpoint
1093     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1094   GlanceInternalVip:
1095     description: VIP for Glance API internal endpoint
1096     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1097   GnocchiInternalVip:
1098     description: VIP for Gnocchi API internal endpoint
1099     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1100   HeatInternalVip:
1101     description: VIP for Heat API internal endpoint
1102     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1103   IronicInternalVip:
1104     description: VIP for Ironic API internal endpoint
1105     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1106   KeystoneInternalVip:
1107     description: VIP for Keystone API internal endpoint
1108     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1109   ManilaInternalVip:
1110     description: VIP for Manila API internal endpoint
1111     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
1112   NeutronInternalVip:
1113     description: VIP for Neutron API internal endpoint
1114     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1115   NovaInternalVip:
1116     description: VIP for Nova API internal endpoint
1117     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1118   SaharaInternalVip:
1119     description: VIP for Sahara API internal endpoint
1120     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1121   SwiftInternalVip:
1122     description: VIP for Swift Proxy internal endpoint
1123     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1124   EndpointMap:
1125     description: |
1126       Mapping of the resources with the needed info for their endpoints.
1127       This includes the protocol used, the IP, port and also a full
1128       representation of the URI.
1129     value: {get_attr: [EndpointMap, endpoint_map]}
1130   HostsEntry:
1131     description: |
1132       The content that should be appended to your /etc/hosts if you want to get
1133       hostname-based access to the deployed nodes (useful for testing without
1134       setting up a DNS).
1135     value: {get_attr: [allNodesConfig, hosts_entries]}
1136   EnabledServices:
1137     description: The services enabled on each role
1138     value:
1139       Controller: {get_attr: [ControllerServiceChain, role_data, service_names]}
1140       Compute: {get_attr: [ComputeServiceChain, role_data, service_names]}
1141       BlockStorage: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
1142       ObjectStorage: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
1143       CephStorage: {get_attr: [CephStorageServiceChain, role_data, service_names]}