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