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