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