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