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