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