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