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