Merge "Remove Compute role parameters from 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   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           controllerExtraConfig: {get_param: controllerExtraConfig}
434           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
435           HorizonSecret: {get_resource: HorizonSecret}
436           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
437           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
438           PcsdPassword: {get_resource: PcsdPassword}
439           RabbitCookie: {get_attr: [RabbitCookie, value]}
440           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
441           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
442           ServiceNetMap: {get_param: ServiceNetMap}
443           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
444           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
445           Hostname:
446             str_replace:
447               template: {get_param: ControllerHostnameFormat}
448               params:
449                 '%stackname%': {get_param: 'OS::stack_name'}
450           NodeIndex: '%index%'
451           ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
452           ServiceNames: {get_attr: [ControllerServiceChain, role_data, service_names]}
453
454   ComputeServiceChain:
455
456     type: OS::TripleO::Services
457     properties:
458       Services: {get_param: ComputeServices}
459       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
460
461   Compute:
462     type: OS::Heat::ResourceGroup
463     depends_on: Networks
464     properties:
465       count: {get_param: ComputeCount}
466       removal_policies: {get_param: ComputeRemovalPolicies}
467       resource_def:
468         type: OS::TripleO::Compute
469         properties:
470           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
471           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
472           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
473           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
474           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
475           # L3 HA and Failover is not relevant for Computes, should be removed
476           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
477           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
478           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
479           ServiceNetMap: {get_param: ServiceNetMap}
480           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
481           Hostname:
482             str_replace:
483               template: {get_param: ComputeHostnameFormat}
484               params:
485                 '%stackname%': {get_param: 'OS::stack_name'}
486           NodeIndex: '%index%'
487           ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
488           ServiceNames: {get_attr: [ComputeServiceChain, role_data, service_names]}
489
490   BlockStorageServiceChain:
491     type: OS::TripleO::Services
492     properties:
493       Services: {get_param: BlockStorageServices}
494       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
495
496   BlockStorage:
497     type: OS::Heat::ResourceGroup
498     depends_on: Networks
499     properties:
500       count: {get_param: BlockStorageCount}
501       removal_policies: {get_param: BlockStorageRemovalPolicies}
502       resource_def:
503         type: OS::TripleO::BlockStorage
504         properties:
505           UpdateIdentifier: {get_param: UpdateIdentifier}
506           Hostname:
507             str_replace:
508               template: {get_param: BlockStorageHostnameFormat}
509               params:
510                 '%stackname%': {get_param: 'OS::stack_name'}
511           ServiceNetMap: {get_param: ServiceNetMap}
512           ExtraConfig: {get_param: ExtraConfig}
513           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
514           CloudDomain: {get_param: CloudDomain}
515           ServerMetadata: {get_param: ServerMetadata}
516           NodeIndex: '%index%'
517           ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
518           ServiceNames: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
519
520   ObjectStorageServiceChain:
521     type: OS::TripleO::Services
522     properties:
523       Services: {get_param: ObjectStorageServices}
524       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
525
526   ObjectStorage:
527     type: OS::Heat::ResourceGroup
528     depends_on: Networks
529     properties:
530       count: {get_param: ObjectStorageCount}
531       removal_policies: {get_param: ObjectStorageRemovalPolicies}
532       resource_def:
533         type: OS::TripleO::ObjectStorage
534         properties:
535           HashSuffix: {get_param: SwiftHashSuffix}
536           UpdateIdentifier: {get_param: UpdateIdentifier}
537           ServiceNetMap: {get_param: ServiceNetMap}
538           Hostname:
539             str_replace:
540               template: {get_param: ObjectStorageHostnameFormat}
541               params:
542                 '%stackname%': {get_param: 'OS::stack_name'}
543           ExtraConfig: {get_param: ExtraConfig}
544           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
545           CloudDomain: {get_param: CloudDomain}
546           ServerMetadata: {get_param: ServerMetadata}
547           NodeIndex: '%index%'
548           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
549           ServiceNames: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
550
551   CephStorageServiceChain:
552     type: OS::TripleO::Services
553     properties:
554       Services: {get_param: CephStorageServices}
555       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
556
557   CephStorage:
558     type: OS::Heat::ResourceGroup
559     depends_on: Networks
560     properties:
561       count: {get_param: CephStorageCount}
562       removal_policies: {get_param: CephStorageRemovalPolicies}
563       resource_def:
564         type: OS::TripleO::CephStorage
565         properties:
566           ServiceNetMap: {get_param: ServiceNetMap}
567           UpdateIdentifier: {get_param: UpdateIdentifier}
568           Hostname:
569             str_replace:
570               template: {get_param: CephStorageHostnameFormat}
571               params:
572                 '%stackname%': {get_param: 'OS::stack_name'}
573           ExtraConfig: {get_param: ExtraConfig}
574           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
575           CloudDomain: {get_param: CloudDomain}
576           ServerMetadata: {get_param: ServerMetadata}
577           NodeIndex: '%index%'
578           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
579           ServiceNames: {get_attr: [CephStorageServiceChain, role_data, service_names]}
580
581   ControllerIpListMap:
582     type: OS::TripleO::Network::Ports::NetIpListMap
583     properties:
584       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
585       ExternalIpList: {get_attr: [Controller, external_ip_address]}
586       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
587       StorageIpList: {get_attr: [Controller, storage_ip_address]}
588       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
589       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
590       ManagementIpList: {get_attr: [Controller, management_ip_address]}
591
592   allNodesConfig:
593     type: OS::TripleO::AllNodes::SoftwareConfig
594     properties:
595       hosts:
596         - list_join:
597             - '\n'
598             - {get_attr: [Compute, hosts_entry]}
599         - list_join:
600             - '\n'
601             - {get_attr: [Controller, hosts_entry]}
602         - list_join:
603             - '\n'
604             - {get_attr: [BlockStorage, hosts_entry]}
605         - list_join:
606             - '\n'
607             - {get_attr: [ObjectStorage, hosts_entry]}
608         - list_join:
609             - '\n'
610             - {get_attr: [CephStorage, hosts_entry]}
611       controller_ips: {get_attr: [Controller, ip_address]}
612       controller_names: {get_attr: [Controller, hostname]}
613       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
614       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
615       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
616       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
617       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
618       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
619       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
620       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
621       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
622       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
623       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
624       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
625       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
626       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
627       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
628       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
629       manila_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
630       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
631       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
632       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
633       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
634       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
635       ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
636       ceph_mon_node_names: {get_attr: [Controller, hostname]}
637       DeployIdentifier: {get_param: DeployIdentifier}
638       UpdateIdentifier: {get_param: UpdateIdentifier}
639
640   MysqlRootPassword:
641     type: OS::Heat::RandomString
642     properties:
643       length: 10
644
645   MysqlClusterUniquePart:
646     type: OS::Heat::RandomString
647     properties:
648       length: 10
649
650   RabbitCookie:
651     type: OS::Heat::RandomString
652     properties:
653       length: 20
654       salt: {get_param: RabbitCookieSalt}
655
656   # creates the network architecture
657   Networks:
658     type: OS::TripleO::Network
659
660   ControlVirtualIP:
661     type: OS::Neutron::Port
662     depends_on: Networks
663     properties:
664       name: control_virtual_ip
665       network: {get_param: NeutronControlPlaneID}
666       fixed_ips: {get_param: ControlFixedIPs}
667       replacement_policy: AUTO
668
669   RedisVirtualIP:
670     depends_on: Networks
671     type: OS::TripleO::Network::Ports::RedisVipPort
672     properties:
673       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
674       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
675       PortName: redis_virtual_ip
676       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
677       ServiceName: redis
678
679   # The public VIP is on the External net, falls back to ctlplane
680   PublicVirtualIP:
681     depends_on: Networks
682     type: OS::TripleO::Network::Ports::ExternalVipPort
683     properties:
684       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
685       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
686       PortName: public_virtual_ip
687       FixedIPs: {get_param: PublicVirtualFixedIPs}
688
689   InternalApiVirtualIP:
690     depends_on: Networks
691     type: OS::TripleO::Network::Ports::InternalApiVipPort
692     properties:
693       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
694       PortName: internal_api_virtual_ip
695       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
696
697   StorageVirtualIP:
698     depends_on: Networks
699     type: OS::TripleO::Network::Ports::StorageVipPort
700     properties:
701       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
702       PortName: storage_virtual_ip
703       FixedIPs: {get_param: StorageVirtualFixedIPs}
704
705   StorageMgmtVirtualIP:
706     depends_on: Networks
707     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
708     properties:
709       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
710       PortName: storage_management_virtual_ip
711       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
712
713   VipMap:
714     type: OS::TripleO::Network::Ports::NetVipMap
715     properties:
716       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
717       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
718       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
719       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
720       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
721       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
722       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
723       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
724       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
725       # No tenant or management VIP required
726
727   VipConfig:
728     type: OS::TripleO::VipConfig
729
730   VipDeployment:
731     type: OS::Heat::StructuredDeployments
732     properties:
733       name: VipDeployment
734       config: {get_resource: VipConfig}
735       servers: {get_attr: [Controller, attributes, nova_server_resource]}
736       input_values:
737         # service VIP mappings
738         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
739         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
740         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
741         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
742         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
743         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
744         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
745         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
746         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
747         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
748         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
749         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
750         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
751         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
752         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
753         manila_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
754         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
755         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
756         # direct configuration of Virtual IPs for each network
757         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
758         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
759         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
760         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
761         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
762         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
763         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
764
765   ControllerSwiftDeployment:
766     type: OS::Heat::StructuredDeployments
767     properties:
768       name: ControllerSwiftDeployment
769       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
770       servers: {get_attr: [Controller, attributes, nova_server_resource]}
771
772   ObjectStorageSwiftDeployment:
773     type: OS::Heat::StructuredDeployments
774     properties:
775       name: ObjectStorageSwiftDeployment
776       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
777       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
778
779   SwiftDevicesAndProxyConfig:
780     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
781     properties:
782       controller_swift_devices: {get_attr: [Controller, swift_device]}
783       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
784       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
785
786   ControllerAllNodesDeployment:
787     type: OS::Heat::StructuredDeployments
788     properties:
789       name: ControllerAllNodesDeployment
790       config: {get_attr: [allNodesConfig, config_id]}
791       servers: {get_attr: [Controller, attributes, nova_server_resource]}
792       input_values:
793         bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
794         bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
795
796   ComputeAllNodesDeployment:
797     type: OS::Heat::StructuredDeployments
798     properties:
799       name: ComputeAllNodesDeployment
800       config: {get_attr: [allNodesConfig, config_id]}
801       servers: {get_attr: [Compute, attributes, nova_server_resource]}
802       input_values:
803         bootstrap_nodeid: {get_attr: [Compute, resource.0.hostname]}
804         bootstrap_nodeid_ip: {get_attr: [Compute, resource.0.ip_address]}
805
806   BlockStorageAllNodesDeployment:
807     type: OS::Heat::StructuredDeployments
808     properties:
809       name: BlockStorageAllNodesDeployment
810       config: {get_attr: [allNodesConfig, config_id]}
811       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
812       input_values:
813         bootstrap_nodeid: {get_attr: [BlockStorage, resource.0.hostname]}
814         bootstrap_nodeid_ip: {get_attr: [BlockStorage, resource.0.ip_address]}
815
816   ObjectStorageAllNodesDeployment:
817     type: OS::Heat::StructuredDeployments
818     properties:
819       name: ObjectStorageAllNodesDeployment
820       config: {get_attr: [allNodesConfig, config_id]}
821       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
822       input_values:
823         bootstrap_nodeid: {get_attr: [ObjectStorage, resource.0.hostname]}
824         bootstrap_nodeid_ip: {get_attr: [ObjectStorage, resource.0.ip_address]}
825
826   CephStorageAllNodesDeployment:
827     type: OS::Heat::StructuredDeployments
828     properties:
829       name: CephStorageAllNodesDeployment
830       config: {get_attr: [allNodesConfig, config_id]}
831       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
832       input_values:
833         bootstrap_nodeid: {get_attr: [CephStorage, resource.0.hostname]}
834         bootstrap_nodeid_ip: {get_attr: [CephStorage, resource.0.ip_address]}
835
836   # All Nodes Validations
837   AllNodesValidationConfig:
838     type: OS::TripleO::AllNodes::Validation
839     properties:
840       PingTestIps:
841         list_join:
842         - ' '
843         - - {get_attr: [Controller, resource.0.external_ip_address]}
844           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
845           - {get_attr: [Controller, resource.0.storage_ip_address]}
846           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
847           - {get_attr: [Controller, resource.0.tenant_ip_address]}
848
849   ControllerAllNodesValidationDeployment:
850     type: OS::Heat::StructuredDeployments
851     depends_on: ControllerAllNodesDeployment
852     properties:
853       name: ControllerAllNodesValidationDeployment
854       config: {get_resource: AllNodesValidationConfig}
855       servers: {get_attr: [Controller, attributes, nova_server_resource]}
856
857   ComputeAllNodesValidationDeployment:
858     type: OS::Heat::StructuredDeployments
859     depends_on: ComputeAllNodesDeployment
860     properties:
861       name: ComputeAllNodesValidationDeployment
862       config: {get_resource: AllNodesValidationConfig}
863       servers: {get_attr: [Compute, attributes, nova_server_resource]}
864
865   BlockStorageAllNodesValidationDeployment:
866     type: OS::Heat::StructuredDeployments
867     depends_on: BlockStorageAllNodesDeployment
868     properties:
869       name: BlockStorageAllNodesValidationDeployment
870       config: {get_resource: AllNodesValidationConfig}
871       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
872
873   ObjectStorageAllNodesValidationDeployment:
874     type: OS::Heat::StructuredDeployments
875     depends_on: ObjectStorageAllNodesDeployment
876     properties:
877       name: ObjectStorageAllNodesValidationDeployment
878       config: {get_resource: AllNodesValidationConfig}
879       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
880
881   CephStorageAllNodesValidationDeployment:
882     type: OS::Heat::StructuredDeployments
883     depends_on: CephStorageAllNodesDeployment
884     properties:
885       name: CephStorageAllNodesValidationDeployment
886       config: {get_resource: AllNodesValidationConfig}
887       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
888
889   UpdateWorkflow:
890     type: OS::TripleO::Tasks::UpdateWorkflow
891     properties:
892       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
893       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
894       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
895       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
896       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
897       input_values:
898         deploy_identifier: {get_param: DeployIdentifier}
899         update_identifier: {get_param: UpdateIdentifier}
900
901   # Optional ExtraConfig for all nodes - all roles are passed in here, but
902   # the nested template may configure each role differently (or not at all)
903   AllNodesExtraConfig:
904     type: OS::TripleO::AllNodesExtraConfig
905     depends_on:
906       - UpdateWorkflow
907       - ComputeAllNodesValidationDeployment
908       - BlockStorageAllNodesValidationDeployment
909       - ObjectStorageAllNodesValidationDeployment
910       - CephStorageAllNodesValidationDeployment
911       - ControllerAllNodesValidationDeployment
912     properties:
913       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
914       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
915       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
916       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
917       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
918
919   # Nested stack deployment runs after all other controller deployments
920   ControllerNodesPostDeployment:
921     type: OS::TripleO::ControllerPostDeployment
922     depends_on: [ControllerAllNodesDeployment, ControllerSwiftDeployment]
923     properties:
924       servers: {get_attr: [Controller, attributes, nova_server_resource]}
925       RoleData: {get_attr: [ControllerServiceChain, role_data]}
926
927   ComputeNodesPostDeployment:
928     type: OS::TripleO::ComputePostDeployment
929     depends_on: [ComputeAllNodesDeployment]
930     properties:
931       servers: {get_attr: [Compute, attributes, nova_server_resource]}
932       RoleData: {get_attr: [ComputeServiceChain, role_data]}
933
934   ObjectStorageNodesPostDeployment:
935     type: OS::TripleO::ObjectStoragePostDeployment
936     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
937     properties:
938       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
939       RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
940
941   BlockStorageNodesPostDeployment:
942     type: OS::TripleO::BlockStoragePostDeployment
943     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
944     properties:
945       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
946       RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
947
948   CephStorageNodesPostDeployment:
949     type: OS::TripleO::CephStoragePostDeployment
950     depends_on: [ControllerNodesPostDeployment, CephStorageAllNodesDeployment]
951     properties:
952       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
953       RoleData: {get_attr: [CephStorageServiceChain, role_data]}
954
955 outputs:
956   KeystoneURL:
957     description: URL for the Overcloud Keystone service
958     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
959   KeystoneAdminVip:
960     description: Keystone Admin VIP endpoint
961     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
962   PublicVip:
963     description: Controller VIP for public API endpoints
964     value: {get_attr: [VipMap, net_ip_map, external]}
965   AodhInternalVip:
966     description: VIP for Aodh API internal endpoint
967     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
968   CeilometerInternalVip:
969     description: VIP for Ceilometer API internal endpoint
970     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
971   CinderInternalVip:
972     description: VIP for Cinder API internal endpoint
973     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
974   GlanceInternalVip:
975     description: VIP for Glance API internal endpoint
976     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
977   GnocchiInternalVip:
978     description: VIP for Gnocchi API internal endpoint
979     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
980   HeatInternalVip:
981     description: VIP for Heat API internal endpoint
982     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
983   IronicInternalVip:
984     description: VIP for Ironic API internal endpoint
985     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
986   KeystoneInternalVip:
987     description: VIP for Keystone API internal endpoint
988     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
989   ManilaInternalVip:
990     description: VIP for Manila API internal endpoint
991     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
992   NeutronInternalVip:
993     description: VIP for Neutron API internal endpoint
994     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
995   NovaInternalVip:
996     description: VIP for Nova API internal endpoint
997     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
998   SaharaInternalVip:
999     description: VIP for Sahara API internal endpoint
1000     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1001   SwiftInternalVip:
1002     description: VIP for Swift Proxy internal endpoint
1003     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1004   EndpointMap:
1005     description: |
1006       Mapping of the resources with the needed info for their endpoints.
1007       This includes the protocol used, the IP, port and also a full
1008       representation of the URI.
1009     value: {get_attr: [EndpointMap, endpoint_map]}
1010   HostsEntry:
1011     description: |
1012       The content that should be appended to your /etc/hosts if you want to get
1013       hostname-based access to the deployed nodes (useful for testing without
1014       setting up a DNS).
1015     value: {get_attr: [allNodesConfig, hosts_entries]}
1016   EnabledServices:
1017     description: The services enabled on each role
1018     value:
1019       Controller: {get_attr: [ControllerServiceChain, role_data, service_names]}
1020       Compute: {get_attr: [ComputeServiceChain, role_data, service_names]}
1021       BlockStorage: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
1022       ObjectStorage: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
1023       CephStorage: {get_attr: [CephStorageServiceChain, role_data, service_names]}