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