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