Merge "Create hiera service_enabled keys for enabled services"
[apex-tripleo-heat-templates.git] / overcloud.yaml
1 heat_template_version: 2016-04-08
2
3 description: >
4   Deploy an OpenStack environment, consisting of several node types (roles),
5   Controller, Compute, BlockStorage, SwiftStorage and CephStorage.  The Storage
6   roles enable independent scaling of the storage components, but the minimal
7   deployment is one Controller and one Compute node.
8
9
10 # TODO(shadower): we should probably use the parameter groups to put
11 # some order in here.
12 parameters:
13
14   # Common parameters (not specific to a role)
15   CloudName:
16     default: overcloud
17     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
18     type: string
19   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       - OS::TripleO::Services::OpenDaylight
202     description: A list of service resources (configured in the Heat
203                  resource_registry) which represent nested stacks
204                  for each service that should get installed on the Controllers.
205     type: comma_delimited_list
206
207   ComputeServices:
208     default:
209       - OS::TripleO::Services::CACerts
210       - OS::TripleO::Services::CephClient
211       - OS::TripleO::Services::CephExternal
212       - OS::TripleO::Services::Timezone
213       - OS::TripleO::Services::Ntp
214       - OS::TripleO::Services::Snmp
215       - OS::TripleO::Services::NovaCompute
216       - OS::TripleO::Services::NovaLibvirt
217       - OS::TripleO::Services::Kernel
218       - OS::TripleO::Services::ComputeNeutronCorePlugin
219       - OS::TripleO::Services::ComputeNeutronOvsAgent
220       - OS::TripleO::Services::ComputeCeilometerAgent
221       - OS::TripleO::Services::ComputeNeutronL3Agent
222       - OS::TripleO::Services::ComputeNeutronMetadataAgent
223       - OS::TripleO::Services::TripleoPackages
224       - OS::TripleO::Services::TripleoFirewall
225       - OS::TripleO::Services::NeutronSriovAgent
226       - OS::TripleO::Services::OpenDaylightOvs
227     description: A list of service resources (configured in the Heat
228                  resource_registry) which represent nested stacks
229                  for each service that should get installed on the Compute Nodes.
230     type: comma_delimited_list
231
232 # Block storage specific parameters
233   BlockStorageCount:
234     type: number
235     default: 0
236   BlockStorageExtraConfig:
237     default: {}
238     description: |
239       BlockStorage specific configuration to inject into the cluster. Same
240       structure as ExtraConfig.
241     type: json
242   BlockStorageServices:
243     default:
244       - OS::TripleO::Services::CACerts
245       - OS::TripleO::Services::CinderVolume
246       - OS::TripleO::Services::Kernel
247       - OS::TripleO::Services::Ntp
248       - OS::TripleO::Services::Timezone
249       - OS::TripleO::Services::Snmp
250       - OS::TripleO::Services::TripleoPackages
251       - OS::TripleO::Services::TripleoFirewall
252     description: A list of service resources (configured in the Heat
253                  resource_registry) which represent nested stacks
254                  for each service that should get installed on the BlockStorage nodes.
255     type: comma_delimited_list
256
257 # Object storage specific parameters
258   ObjectStorageCount:
259     type: number
260     default: 0
261   ObjectStorageExtraConfig:
262     default: {}
263     description: |
264       ObjectStorage specific configuration to inject into the cluster. Same
265       structure as ExtraConfig.
266     type: json
267   ObjectStorageServices:
268     default:
269       - OS::TripleO::Services::CACerts
270       - OS::TripleO::Services::Kernel
271       - OS::TripleO::Services::Ntp
272       - OS::TripleO::Services::SwiftStorage
273       - OS::TripleO::Services::SwiftRingBuilder
274       - OS::TripleO::Services::Snmp
275       - OS::TripleO::Services::Timezone
276       - OS::TripleO::Services::TripleoPackages
277       - OS::TripleO::Services::TripleoFirewall
278     description: A list of service resources (configured in the Heat
279                  resource_registry) which represent nested stacks
280                  for each service that should get installed on the ObjectStorage nodes.
281                  Note this role currently only supports steps 2, 3 and 4 configuration.
282     type: comma_delimited_list
283
284
285 # Ceph storage specific parameters
286   CephStorageCount:
287     type: number
288     default: 0
289   CephStorageExtraConfig:
290     default: {}
291     description: |
292       CephStorage specific configuration to inject into the cluster. Same
293       structure as ExtraConfig.
294     type: json
295   CephStorageServices:
296     default:
297       - OS::TripleO::Services::CACerts
298       - OS::TripleO::Services::CephOSD
299       - OS::TripleO::Services::Kernel
300       - OS::TripleO::Services::Ntp
301       - OS::TripleO::Services::Timezone
302       - OS::TripleO::Services::TripleoPackages
303       - OS::TripleO::Services::TripleoFirewall
304     description: A list of service resources (configured in the Heat
305                  resource_registry) which represent nested stacks
306                  for each service that should get installed on the CephStorage nodes.
307     type: comma_delimited_list
308
309   # Hostname format for each role
310   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
311   # and %stackname% is replaced with OS::stack_name in the template below.
312   # If you want to use the heat generated names, pass '' (empty string).
313   ControllerHostnameFormat:
314     type: string
315     description: Format for Controller node hostnames
316     default: '%stackname%-controller-%index%'
317   ComputeHostnameFormat:
318     type: string
319     description: Format for Compute node hostnames
320     default: '%stackname%-novacompute-%index%'
321   BlockStorageHostnameFormat:
322     type: string
323     description: Format for BlockStorage node hostnames
324     default: '%stackname%-blockstorage-%index%'
325   ObjectStorageHostnameFormat:
326     type: string
327     description: Format for SwiftStorage node hostnames
328     default: '%stackname%-objectstorage-%index%'
329   CephStorageHostnameFormat:
330     type: string
331     description: Format for CephStorage node hostnames
332     default: '%stackname%-cephstorage-%index%'
333
334   # Identifiers to trigger tasks on nodes
335   UpdateIdentifier:
336     default: ''
337     type: string
338     description: >
339       Setting to a previously unused value during stack-update will trigger
340       package update on all nodes
341   DeployIdentifier:
342     default: ''
343     type: string
344     description: >
345       Setting this to a unique value will re-run any deployment tasks which
346       perform configuration on a Heat stack-update.
347
348   # If you want to remove a specific node from a resource group, you can pass
349   # the node name or id as a <Group>RemovalPolicies parameter, for example:
350   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
351   ControllerRemovalPolicies:
352     default: []
353     type: json
354     description: >
355       List of resources to be removed from ControllerResourceGroup when
356       doing an update which requires removal of specific resources.
357   ComputeRemovalPolicies:
358     default: []
359     type: json
360     description: >
361       List of resources to be removed from ComputeResourceGroup when
362       doing an update which requires removal of specific resources.
363   BlockStorageRemovalPolicies:
364     default: []
365     type: json
366     description: >
367       List of resources to be removed from BlockStorageResourceGroup when
368       doing an update which requires removal of specific resources.
369   ObjectStorageRemovalPolicies:
370     default: []
371     type: json
372     description: >
373       List of resources to be removed from ObjectStorageResourceGroup when
374       doing an update which requires removal of specific resources.
375   CephStorageRemovalPolicies:
376     default: []
377     type: json
378     description: >
379       List of resources to be removed from CephStorageResourceGroup when
380       doing an update which requires removal of specific resources.
381
382 parameter_groups:
383 - label: deprecated
384   description: Do not use deprecated params, they will be removed.
385   parameters:
386   - controllerExtraConfig
387
388
389 resources:
390
391   HeatAuthEncryptionKey:
392     type: OS::Heat::RandomString
393
394   PcsdPassword:
395     type: OS::Heat::RandomString
396     properties:
397       length: 16
398
399   HorizonSecret:
400     type: OS::Heat::RandomString
401     properties:
402       length: 10
403
404   ServiceNetMap:
405     type: OS::TripleO::ServiceNetMap
406
407   EndpointMap:
408     type: OS::TripleO::EndpointMap
409     properties:
410       CloudEndpoints:
411         external: {get_param: CloudName}
412         internal_api: {get_param: CloudNameInternal}
413         storage: {get_param: CloudNameStorage}
414         storage_mgmt: {get_param: CloudNameStorageManagement}
415         management: {get_param: CloudNameManagement}
416       NetIpMap: {get_attr: [VipMap, net_ip_map]}
417       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
418
419   ControllerServiceChain:
420     type: OS::TripleO::Services
421     properties:
422       Services: {get_param: ControllerServices}
423       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
424       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
425       DefaultPasswords: {get_attr: [DefaultPasswords, passwords]}
426
427   Controller:
428     type: OS::Heat::ResourceGroup
429     depends_on: Networks
430     properties:
431       count: {get_param: ControllerCount}
432       removal_policies: {get_param: ControllerRemovalPolicies}
433       resource_def:
434         type: OS::TripleO::Controller
435         properties:
436           CloudDomain: {get_param: CloudDomain}
437           controllerExtraConfig: {get_param: controllerExtraConfig}
438           HorizonSecret: {get_resource: HorizonSecret}
439           PcsdPassword: {get_resource: PcsdPassword}
440           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
441           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
442           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
443           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
444           Hostname:
445             str_replace:
446               template: {get_param: ControllerHostnameFormat}
447               params:
448                 '%stackname%': {get_param: 'OS::stack_name'}
449           NodeIndex: '%index%'
450           ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
451           ServiceNames: {get_attr: [ControllerServiceChain, role_data, service_names]}
452
453   ComputeServiceChain:
454     type: OS::TripleO::Services
455     properties:
456       Services: {get_param: ComputeServices}
457       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
458       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
459       DefaultPasswords: {get_attr: [DefaultPasswords, passwords]}
460
461   Compute:
462     type: OS::Heat::ResourceGroup
463     depends_on: Networks
464     properties:
465       count: {get_param: ComputeCount}
466       removal_policies: {get_param: ComputeRemovalPolicies}
467       resource_def:
468         type: OS::TripleO::Compute
469         properties:
470           CloudDomain: {get_param: CloudDomain}
471           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
472           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
473           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
474           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
475           Hostname:
476             str_replace:
477               template: {get_param: ComputeHostnameFormat}
478               params:
479                 '%stackname%': {get_param: 'OS::stack_name'}
480           NodeIndex: '%index%'
481           ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
482           ServiceNames: {get_attr: [ComputeServiceChain, role_data, service_names]}
483
484   BlockStorageServiceChain:
485     type: OS::TripleO::Services
486     properties:
487       Services: {get_param: BlockStorageServices}
488       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
489       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
490       DefaultPasswords: {get_attr: [DefaultPasswords, passwords]}
491
492   BlockStorage:
493     type: OS::Heat::ResourceGroup
494     depends_on: Networks
495     properties:
496       count: {get_param: BlockStorageCount}
497       removal_policies: {get_param: BlockStorageRemovalPolicies}
498       resource_def:
499         type: OS::TripleO::BlockStorage
500         properties:
501           UpdateIdentifier: {get_param: UpdateIdentifier}
502           Hostname:
503             str_replace:
504               template: {get_param: BlockStorageHostnameFormat}
505               params:
506                 '%stackname%': {get_param: 'OS::stack_name'}
507           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
508           ExtraConfig: {get_param: ExtraConfig}
509           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
510           CloudDomain: {get_param: CloudDomain}
511           ServerMetadata: {get_param: ServerMetadata}
512           NodeIndex: '%index%'
513           ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
514           ServiceNames: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
515
516   ObjectStorageServiceChain:
517     type: OS::TripleO::Services
518     properties:
519       Services: {get_param: ObjectStorageServices}
520       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
521       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
522       DefaultPasswords: {get_attr: [DefaultPasswords, passwords]}
523
524   ObjectStorage:
525     type: OS::Heat::ResourceGroup
526     depends_on: Networks
527     properties:
528       count: {get_param: ObjectStorageCount}
529       removal_policies: {get_param: ObjectStorageRemovalPolicies}
530       resource_def:
531         type: OS::TripleO::ObjectStorage
532         properties:
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       enabled_services:
611         list_join:
612           - ','
613           - {get_attr: [ControllerServiceChain, role_data, service_names]}
614           - {get_attr: [ComputeServiceChain, role_data, service_names]}
615           - {get_attr: [BlockStorageServiceChain, role_data, service_names]}
616           - {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
617           - {get_attr: [CephStorageServiceChain, role_data, service_names]}
618       controller_ips: {get_attr: [Controller, ip_address]}
619       controller_names: {get_attr: [Controller, hostname]}
620       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RabbitmqNetwork]}]}
621       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MongodbNetwork]}]}
622       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RedisNetwork]}]}
623       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MemcachedNetwork]}]}
624       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MysqlNetwork]}]}
625       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HorizonNetwork]}]}
626       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
627       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
628       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
629       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
630       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
631       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
632       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaMetadataNetwork]}]}
633       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
634       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceRegistryNetwork]}]}
635       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
636       manila_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
637       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
638       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
639       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
640       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
641       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
642       ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CephPublicNetwork]}]}
643       opendaylight_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, OpenDaylightApiNetwork]}]}
644       ceph_mon_node_names: {get_attr: [Controller, hostname]}
645       DeployIdentifier: {get_param: DeployIdentifier}
646       UpdateIdentifier: {get_param: UpdateIdentifier}
647
648   MysqlRootPassword:
649     type: OS::Heat::RandomString
650     properties:
651       length: 10
652
653   RabbitCookie:
654     type: OS::Heat::RandomString
655     properties:
656       length: 20
657       salt: {get_param: RabbitCookieSalt}
658
659   DefaultPasswords:
660     type: OS::TripleO::DefaultPasswords
661     properties:
662       DefaultMysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
663       DefaultRabbitCookie: {get_attr: [RabbitCookie, value]}
664       DefaultHeatAuthEncryptionKey: {get_attr: [HeatAuthEncryptionKey, value]}
665       DefaultPcsdPassword: {get_attr: [PcsdPassword, value]}
666       DefaultHorizonSecret: {get_attr: [HorizonSecret, value]}
667
668   # creates the network architecture
669   Networks:
670     type: OS::TripleO::Network
671
672   ControlVirtualIP:
673     type: OS::Neutron::Port
674     depends_on: Networks
675     properties:
676       name: control_virtual_ip
677       network: {get_param: NeutronControlPlaneID}
678       fixed_ips: {get_param: ControlFixedIPs}
679       replacement_policy: AUTO
680
681   RedisVirtualIP:
682     depends_on: Networks
683     type: OS::TripleO::Network::Ports::RedisVipPort
684     properties:
685       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
686       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
687       PortName: redis_virtual_ip
688       NetworkName: {get_attr: [ServiceNetMap, service_net_map, RedisNetwork]}
689       ServiceName: redis
690       FixedIPs: {get_param: RedisVirtualFixedIPs}
691
692   # The public VIP is on the External net, falls back to ctlplane
693   PublicVirtualIP:
694     depends_on: Networks
695     type: OS::TripleO::Network::Ports::ExternalVipPort
696     properties:
697       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
698       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
699       PortName: public_virtual_ip
700       FixedIPs: {get_param: PublicVirtualFixedIPs}
701
702   InternalApiVirtualIP:
703     depends_on: Networks
704     type: OS::TripleO::Network::Ports::InternalApiVipPort
705     properties:
706       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
707       PortName: internal_api_virtual_ip
708       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
709
710   StorageVirtualIP:
711     depends_on: Networks
712     type: OS::TripleO::Network::Ports::StorageVipPort
713     properties:
714       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
715       PortName: storage_virtual_ip
716       FixedIPs: {get_param: StorageVirtualFixedIPs}
717
718   StorageMgmtVirtualIP:
719     depends_on: Networks
720     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
721     properties:
722       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
723       PortName: storage_management_virtual_ip
724       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
725
726   VipMap:
727     type: OS::TripleO::Network::Ports::NetVipMap
728     properties:
729       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
730       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
731       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
732       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
733       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
734       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
735       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
736       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
737       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
738       # No tenant or management VIP required
739
740   VipConfig:
741     type: OS::TripleO::VipConfig
742
743   VipDeployment:
744     type: OS::Heat::StructuredDeployments
745     properties:
746       name: VipDeployment
747       config: {get_resource: VipConfig}
748       servers: {get_attr: [Controller, attributes, nova_server_resource]}
749       input_values:
750         # service VIP mappings
751         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
752         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
753         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
754         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
755         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
756         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceRegistryNetwork]}]}
757         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
758         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
759         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaMetadataNetwork]}]}
760         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
761         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
762         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
763         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
764         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HorizonNetwork]}]}
765         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
766         manila_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
767         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MysqlNetwork]}]}
768         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RabbitMqNetwork]}]}
769         # direct configuration of Virtual IPs for each network
770         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
771         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
772         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
773         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
774         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
775         opendaylight_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, OpenDaylightApiNetwork]}]}
776         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
777         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
778
779   ControllerSwiftDeployment:
780     type: OS::Heat::StructuredDeployments
781     properties:
782       name: ControllerSwiftDeployment
783       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
784       servers: {get_attr: [Controller, attributes, nova_server_resource]}
785
786   ObjectStorageSwiftDeployment:
787     type: OS::Heat::StructuredDeployments
788     properties:
789       name: ObjectStorageSwiftDeployment
790       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
791       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
792
793   SwiftDevicesAndProxyConfig:
794     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
795     properties:
796       controller_swift_devices: {get_attr: [Controller, swift_device]}
797       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
798       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
799
800   ControllerAllNodesDeployment:
801     type: OS::Heat::StructuredDeployments
802     properties:
803       name: ControllerAllNodesDeployment
804       config: {get_attr: [allNodesConfig, config_id]}
805       servers: {get_attr: [Controller, attributes, nova_server_resource]}
806       input_values:
807         bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
808         bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
809
810   ComputeAllNodesDeployment:
811     type: OS::Heat::StructuredDeployments
812     properties:
813       name: ComputeAllNodesDeployment
814       config: {get_attr: [allNodesConfig, config_id]}
815       servers: {get_attr: [Compute, attributes, nova_server_resource]}
816       input_values:
817         bootstrap_nodeid: {get_attr: [Compute, resource.0.hostname]}
818         bootstrap_nodeid_ip: {get_attr: [Compute, resource.0.ip_address]}
819
820   BlockStorageAllNodesDeployment:
821     type: OS::Heat::StructuredDeployments
822     properties:
823       name: BlockStorageAllNodesDeployment
824       config: {get_attr: [allNodesConfig, config_id]}
825       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
826       input_values:
827         bootstrap_nodeid: {get_attr: [BlockStorage, resource.0.hostname]}
828         bootstrap_nodeid_ip: {get_attr: [BlockStorage, resource.0.ip_address]}
829
830   ObjectStorageAllNodesDeployment:
831     type: OS::Heat::StructuredDeployments
832     properties:
833       name: ObjectStorageAllNodesDeployment
834       config: {get_attr: [allNodesConfig, config_id]}
835       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
836       input_values:
837         bootstrap_nodeid: {get_attr: [ObjectStorage, resource.0.hostname]}
838         bootstrap_nodeid_ip: {get_attr: [ObjectStorage, resource.0.ip_address]}
839
840   CephStorageAllNodesDeployment:
841     type: OS::Heat::StructuredDeployments
842     properties:
843       name: CephStorageAllNodesDeployment
844       config: {get_attr: [allNodesConfig, config_id]}
845       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
846       input_values:
847         bootstrap_nodeid: {get_attr: [CephStorage, resource.0.hostname]}
848         bootstrap_nodeid_ip: {get_attr: [CephStorage, resource.0.ip_address]}
849
850   # All Nodes Validations
851   AllNodesValidationConfig:
852     type: OS::TripleO::AllNodes::Validation
853     properties:
854       PingTestIps:
855         list_join:
856         - ' '
857         - - {get_attr: [Controller, resource.0.external_ip_address]}
858           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
859           - {get_attr: [Controller, resource.0.storage_ip_address]}
860           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
861           - {get_attr: [Controller, resource.0.tenant_ip_address]}
862           - {get_attr: [Controller, resource.0.management_ip_address]}
863
864   ControllerAllNodesValidationDeployment:
865     type: OS::Heat::StructuredDeployments
866     depends_on: ControllerAllNodesDeployment
867     properties:
868       name: ControllerAllNodesValidationDeployment
869       config: {get_resource: AllNodesValidationConfig}
870       servers: {get_attr: [Controller, attributes, nova_server_resource]}
871
872   ComputeAllNodesValidationDeployment:
873     type: OS::Heat::StructuredDeployments
874     depends_on: ComputeAllNodesDeployment
875     properties:
876       name: ComputeAllNodesValidationDeployment
877       config: {get_resource: AllNodesValidationConfig}
878       servers: {get_attr: [Compute, attributes, nova_server_resource]}
879
880   BlockStorageAllNodesValidationDeployment:
881     type: OS::Heat::StructuredDeployments
882     depends_on: BlockStorageAllNodesDeployment
883     properties:
884       name: BlockStorageAllNodesValidationDeployment
885       config: {get_resource: AllNodesValidationConfig}
886       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
887
888   ObjectStorageAllNodesValidationDeployment:
889     type: OS::Heat::StructuredDeployments
890     depends_on: ObjectStorageAllNodesDeployment
891     properties:
892       name: ObjectStorageAllNodesValidationDeployment
893       config: {get_resource: AllNodesValidationConfig}
894       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
895
896   CephStorageAllNodesValidationDeployment:
897     type: OS::Heat::StructuredDeployments
898     depends_on: CephStorageAllNodesDeployment
899     properties:
900       name: CephStorageAllNodesValidationDeployment
901       config: {get_resource: AllNodesValidationConfig}
902       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
903
904   UpdateWorkflow:
905     type: OS::TripleO::Tasks::UpdateWorkflow
906     properties:
907       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
908       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
909       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
910       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
911       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
912       input_values:
913         deploy_identifier: {get_param: DeployIdentifier}
914         update_identifier: {get_param: UpdateIdentifier}
915
916   # Optional ExtraConfig for all nodes - all roles are passed in here, but
917   # the nested template may configure each role differently (or not at all)
918   AllNodesExtraConfig:
919     type: OS::TripleO::AllNodesExtraConfig
920     depends_on:
921       - UpdateWorkflow
922       - ComputeAllNodesValidationDeployment
923       - BlockStorageAllNodesValidationDeployment
924       - ObjectStorageAllNodesValidationDeployment
925       - CephStorageAllNodesValidationDeployment
926       - ControllerAllNodesValidationDeployment
927     properties:
928       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
929       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
930       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
931       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
932       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
933
934   # Nested stack deployment runs after all other controller deployments
935   ControllerNodesPostDeployment:
936     type: OS::TripleO::ControllerPostDeployment
937     depends_on: [ControllerAllNodesDeployment, ControllerSwiftDeployment]
938     properties:
939       servers: {get_attr: [Controller, attributes, nova_server_resource]}
940       RoleData: {get_attr: [ControllerServiceChain, role_data]}
941
942   ComputeNodesPostDeployment:
943     type: OS::TripleO::ComputePostDeployment
944     depends_on: [ComputeAllNodesDeployment]
945     properties:
946       servers: {get_attr: [Compute, attributes, nova_server_resource]}
947       RoleData: {get_attr: [ComputeServiceChain, role_data]}
948
949   ObjectStorageNodesPostDeployment:
950     type: OS::TripleO::ObjectStoragePostDeployment
951     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
952     properties:
953       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
954       RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
955
956   BlockStorageNodesPostDeployment:
957     type: OS::TripleO::BlockStoragePostDeployment
958     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
959     properties:
960       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
961       RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
962
963   CephStorageNodesPostDeployment:
964     type: OS::TripleO::CephStoragePostDeployment
965     depends_on: [ControllerNodesPostDeployment, CephStorageAllNodesDeployment]
966     properties:
967       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
968       RoleData: {get_attr: [CephStorageServiceChain, role_data]}
969
970 outputs:
971   KeystoneURL:
972     description: URL for the Overcloud Keystone service
973     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
974   KeystoneAdminVip:
975     description: Keystone Admin VIP endpoint
976     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
977   PublicVip:
978     description: Controller VIP for public API endpoints
979     value: {get_attr: [VipMap, net_ip_map, external]}
980   AodhInternalVip:
981     description: VIP for Aodh API internal endpoint
982     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
983   CeilometerInternalVip:
984     description: VIP for Ceilometer API internal endpoint
985     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
986   CinderInternalVip:
987     description: VIP for Cinder API internal endpoint
988     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
989   GlanceInternalVip:
990     description: VIP for Glance API internal endpoint
991     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
992   GnocchiInternalVip:
993     description: VIP for Gnocchi API internal endpoint
994     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
995   HeatInternalVip:
996     description: VIP for Heat API internal endpoint
997     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
998   IronicInternalVip:
999     description: VIP for Ironic API internal endpoint
1000     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
1001   KeystoneInternalVip:
1002     description: VIP for Keystone API internal endpoint
1003     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
1004   ManilaInternalVip:
1005     description: VIP for Manila API internal endpoint
1006     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
1007   NeutronInternalVip:
1008     description: VIP for Neutron API internal endpoint
1009     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
1010   NovaInternalVip:
1011     description: VIP for Nova API internal endpoint
1012     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
1013   OpenDaylightInternalVip:
1014     description: VIP for OpenDaylight API internal endpoint
1015     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, OpenDaylightApiNetwork]}]}
1016   SaharaInternalVip:
1017     description: VIP for Sahara API internal endpoint
1018     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
1019   SwiftInternalVip:
1020     description: VIP for Swift Proxy internal endpoint
1021     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
1022   EndpointMap:
1023     description: |
1024       Mapping of the resources with the needed info for their endpoints.
1025       This includes the protocol used, the IP, port and also a full
1026       representation of the URI.
1027     value: {get_attr: [EndpointMap, endpoint_map]}
1028   HostsEntry:
1029     description: |
1030       The content that should be appended to your /etc/hosts if you want to get
1031       hostname-based access to the deployed nodes (useful for testing without
1032       setting up a DNS).
1033     value: {get_attr: [allNodesConfig, hosts_entries]}
1034   EnabledServices:
1035     description: The services enabled on each role
1036     value:
1037       Controller: {get_attr: [ControllerServiceChain, role_data, service_names]}
1038       Compute: {get_attr: [ComputeServiceChain, role_data, service_names]}
1039       BlockStorage: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
1040       ObjectStorage: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
1041       CephStorage: {get_attr: [CephStorageServiceChain, role_data, service_names]}