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