Merge "Move Keepalived/HAproxy settings out of controller"
[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     description: A list of service resources (configured in the Heat
198                  resource_registry) which represent nested stacks
199                  for each service that should get installed on the Compute Nodes.
200     type: comma_delimited_list
201
202 # Block storage specific parameters
203   BlockStorageCount:
204     type: number
205     default: 0
206   BlockStorageExtraConfig:
207     default: {}
208     description: |
209       BlockStorage specific configuration to inject into the cluster. Same
210       structure as ExtraConfig.
211     type: json
212   BlockStorageServices:
213     default:
214       - OS::TripleO::Services::CinderVolume
215       - OS::TripleO::Services::Kernel
216       - OS::TripleO::Services::Ntp
217       - OS::TripleO::Services::Timezone
218       - OS::TripleO::Services::Snmp
219       - OS::TripleO::Services::TripleoPackages
220       - OS::TripleO::Services::TripleoFirewall
221     description: A list of service resources (configured in the Heat
222                  resource_registry) which represent nested stacks
223                  for each service that should get installed on the BlockStorage nodes.
224     type: comma_delimited_list
225
226 # Object storage specific parameters
227   ObjectStorageCount:
228     type: number
229     default: 0
230   ObjectStorageExtraConfig:
231     default: {}
232     description: |
233       ObjectStorage specific configuration to inject into the cluster. Same
234       structure as ExtraConfig.
235     type: json
236   ObjectStorageServices:
237     default:
238       - OS::TripleO::Services::Kernel
239       - OS::TripleO::Services::Ntp
240       - OS::TripleO::Services::SwiftStorage
241       - OS::TripleO::Services::SwiftRingBuilder
242       - OS::TripleO::Services::Snmp
243       - OS::TripleO::Services::Timezone
244       - OS::TripleO::Services::TripleoPackages
245       - OS::TripleO::Services::TripleoFirewall
246     description: A list of service resources (configured in the Heat
247                  resource_registry) which represent nested stacks
248                  for each service that should get installed on the ObjectStorage nodes.
249                  Note this role currently only supports steps 2, 3 and 4 configuration.
250     type: comma_delimited_list
251
252
253 # Ceph storage specific parameters
254   CephStorageCount:
255     type: number
256     default: 0
257   CephStorageExtraConfig:
258     default: {}
259     description: |
260       CephStorage specific configuration to inject into the cluster. Same
261       structure as ExtraConfig.
262     type: json
263   CephStorageServices:
264     default:
265       - OS::TripleO::Services::CephOSD
266       - OS::TripleO::Services::Kernel
267       - OS::TripleO::Services::Ntp
268       - OS::TripleO::Services::Timezone
269       - OS::TripleO::Services::TripleoPackages
270       - OS::TripleO::Services::TripleoFirewall
271     description: A list of service resources (configured in the Heat
272                  resource_registry) which represent nested stacks
273                  for each service that should get installed on the CephStorage nodes.
274     type: comma_delimited_list
275
276   # Hostname format for each role
277   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
278   # and %stackname% is replaced with OS::stack_name in the template below.
279   # If you want to use the heat generated names, pass '' (empty string).
280   ControllerHostnameFormat:
281     type: string
282     description: Format for Controller node hostnames
283     default: '%stackname%-controller-%index%'
284   ComputeHostnameFormat:
285     type: string
286     description: Format for Compute node hostnames
287     default: '%stackname%-novacompute-%index%'
288   BlockStorageHostnameFormat:
289     type: string
290     description: Format for BlockStorage node hostnames
291     default: '%stackname%-blockstorage-%index%'
292   ObjectStorageHostnameFormat:
293     type: string
294     description: Format for SwiftStorage node hostnames
295     default: '%stackname%-objectstorage-%index%'
296   CephStorageHostnameFormat:
297     type: string
298     description: Format for CephStorage node hostnames
299     default: '%stackname%-cephstorage-%index%'
300
301   # Identifiers to trigger tasks on nodes
302   UpdateIdentifier:
303     default: ''
304     type: string
305     description: >
306       Setting to a previously unused value during stack-update will trigger
307       package update on all nodes
308   DeployIdentifier:
309     default: ''
310     type: string
311     description: >
312       Setting this to a unique value will re-run any deployment tasks which
313       perform configuration on a Heat stack-update.
314
315   # If you want to remove a specific node from a resource group, you can pass
316   # the node name or id as a <Group>RemovalPolicies parameter, for example:
317   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
318   ControllerRemovalPolicies:
319     default: []
320     type: json
321     description: >
322       List of resources to be removed from ControllerResourceGroup when
323       doing an update which requires removal of specific resources.
324   ComputeRemovalPolicies:
325     default: []
326     type: json
327     description: >
328       List of resources to be removed from ComputeResourceGroup when
329       doing an update which requires removal of specific resources.
330   BlockStorageRemovalPolicies:
331     default: []
332     type: json
333     description: >
334       List of resources to be removed from BlockStorageResourceGroup when
335       doing an update which requires removal of specific resources.
336   ObjectStorageRemovalPolicies:
337     default: []
338     type: json
339     description: >
340       List of resources to be removed from ObjectStorageResourceGroup when
341       doing an update which requires removal of specific resources.
342   CephStorageRemovalPolicies:
343     default: []
344     type: json
345     description: >
346       List of resources to be removed from CephStorageResourceGroup when
347       doing an update which requires removal of specific resources.
348
349 parameter_groups:
350 - label: deprecated
351   description: Do not use deprecated params, they will be removed.
352   parameters:
353   - controllerExtraConfig
354
355
356 resources:
357
358   HeatAuthEncryptionKey:
359     type: OS::Heat::RandomString
360
361   PcsdPassword:
362     type: OS::Heat::RandomString
363     properties:
364       length: 16
365
366   HorizonSecret:
367     type: OS::Heat::RandomString
368     properties:
369       length: 10
370
371   ServiceNetMap:
372     type: OS::TripleO::ServiceNetMap
373
374   EndpointMap:
375     type: OS::TripleO::EndpointMap
376     properties:
377       CloudName: {get_param: CloudName}
378       NetIpMap: {get_attr: [VipMap, net_ip_map]}
379       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
380
381   ControllerServiceChain:
382     type: OS::TripleO::Services
383     properties:
384       Services: {get_param: ControllerServices}
385       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
386       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
387       DefaultPasswords: {get_attr: [DefaultPasswords, passwords]}
388
389   Controller:
390     type: OS::Heat::ResourceGroup
391     depends_on: Networks
392     properties:
393       count: {get_param: ControllerCount}
394       removal_policies: {get_param: ControllerRemovalPolicies}
395       resource_def:
396         type: OS::TripleO::Controller
397         properties:
398           CloudDomain: {get_param: CloudDomain}
399           controllerExtraConfig: {get_param: controllerExtraConfig}
400           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
401           HorizonSecret: {get_resource: HorizonSecret}
402           PcsdPassword: {get_resource: PcsdPassword}
403           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
404           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
405           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
406           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
407           Hostname:
408             str_replace:
409               template: {get_param: ControllerHostnameFormat}
410               params:
411                 '%stackname%': {get_param: 'OS::stack_name'}
412           NodeIndex: '%index%'
413           ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
414           ServiceNames: {get_attr: [ControllerServiceChain, role_data, service_names]}
415
416   ComputeServiceChain:
417     type: OS::TripleO::Services
418     properties:
419       Services: {get_param: ComputeServices}
420       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
421       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
422       DefaultPasswords: {get_attr: [DefaultPasswords, passwords]}
423
424   Compute:
425     type: OS::Heat::ResourceGroup
426     depends_on: Networks
427     properties:
428       count: {get_param: ComputeCount}
429       removal_policies: {get_param: ComputeRemovalPolicies}
430       resource_def:
431         type: OS::TripleO::Compute
432         properties:
433           CloudDomain: {get_param: CloudDomain}
434           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
435           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
436           # L3 HA and Failover is not relevant for Computes, should be removed
437           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
438           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
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           HashSuffix: {get_param: SwiftHashSuffix}
500           UpdateIdentifier: {get_param: UpdateIdentifier}
501           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
502           Hostname:
503             str_replace:
504               template: {get_param: ObjectStorageHostnameFormat}
505               params:
506                 '%stackname%': {get_param: 'OS::stack_name'}
507           ExtraConfig: {get_param: ExtraConfig}
508           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
509           CloudDomain: {get_param: CloudDomain}
510           ServerMetadata: {get_param: ServerMetadata}
511           NodeIndex: '%index%'
512           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
513           ServiceNames: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
514
515   CephStorageServiceChain:
516     type: OS::TripleO::Services
517     properties:
518       Services: {get_param: CephStorageServices}
519       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
520       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
521       DefaultPasswords: {get_attr: [DefaultPasswords, passwords]}
522
523   CephStorage:
524     type: OS::Heat::ResourceGroup
525     depends_on: Networks
526     properties:
527       count: {get_param: CephStorageCount}
528       removal_policies: {get_param: CephStorageRemovalPolicies}
529       resource_def:
530         type: OS::TripleO::CephStorage
531         properties:
532           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
533           UpdateIdentifier: {get_param: UpdateIdentifier}
534           Hostname:
535             str_replace:
536               template: {get_param: CephStorageHostnameFormat}
537               params:
538                 '%stackname%': {get_param: 'OS::stack_name'}
539           ExtraConfig: {get_param: ExtraConfig}
540           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
541           CloudDomain: {get_param: CloudDomain}
542           ServerMetadata: {get_param: ServerMetadata}
543           NodeIndex: '%index%'
544           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
545           ServiceNames: {get_attr: [CephStorageServiceChain, role_data, service_names]}
546
547   ControllerIpListMap:
548     type: OS::TripleO::Network::Ports::NetIpListMap
549     properties:
550       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
551       ExternalIpList: {get_attr: [Controller, external_ip_address]}
552       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
553       StorageIpList: {get_attr: [Controller, storage_ip_address]}
554       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
555       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
556       ManagementIpList: {get_attr: [Controller, management_ip_address]}
557
558   allNodesConfig:
559     type: OS::TripleO::AllNodes::SoftwareConfig
560     properties:
561       hosts:
562         - list_join:
563             - '\n'
564             - {get_attr: [Compute, hosts_entry]}
565         - list_join:
566             - '\n'
567             - {get_attr: [Controller, hosts_entry]}
568         - list_join:
569             - '\n'
570             - {get_attr: [BlockStorage, hosts_entry]}
571         - list_join:
572             - '\n'
573             - {get_attr: [ObjectStorage, hosts_entry]}
574         - list_join:
575             - '\n'
576             - {get_attr: [CephStorage, hosts_entry]}
577       controller_ips: {get_attr: [Controller, ip_address]}
578       controller_names: {get_attr: [Controller, hostname]}
579       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RabbitmqNetwork]}]}
580       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MongodbNetwork]}]}
581       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RedisNetwork]}]}
582       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MemcachedNetwork]}]}
583       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MysqlNetwork]}]}
584       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HorizonNetwork]}]}
585       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
586       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
587       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
588       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
589       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
590       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
591       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaMetadataNetwork]}]}
592       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
593       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceRegistryNetwork]}]}
594       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
595       manila_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
596       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
597       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
598       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
599       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
600       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
601       ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CephPublicNetwork]}]}
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
649   # The public VIP is on the External net, falls back to ctlplane
650   PublicVirtualIP:
651     depends_on: Networks
652     type: OS::TripleO::Network::Ports::ExternalVipPort
653     properties:
654       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
655       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
656       PortName: public_virtual_ip
657       FixedIPs: {get_param: PublicVirtualFixedIPs}
658
659   InternalApiVirtualIP:
660     depends_on: Networks
661     type: OS::TripleO::Network::Ports::InternalApiVipPort
662     properties:
663       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
664       PortName: internal_api_virtual_ip
665       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
666
667   StorageVirtualIP:
668     depends_on: Networks
669     type: OS::TripleO::Network::Ports::StorageVipPort
670     properties:
671       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
672       PortName: storage_virtual_ip
673       FixedIPs: {get_param: StorageVirtualFixedIPs}
674
675   StorageMgmtVirtualIP:
676     depends_on: Networks
677     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
678     properties:
679       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
680       PortName: storage_management_virtual_ip
681       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
682
683   VipMap:
684     type: OS::TripleO::Network::Ports::NetVipMap
685     properties:
686       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
687       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
688       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
689       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
690       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
691       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
692       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
693       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
694       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
695       # No tenant or management VIP required
696
697   VipConfig:
698     type: OS::TripleO::VipConfig
699
700   VipDeployment:
701     type: OS::Heat::StructuredDeployments
702     properties:
703       name: VipDeployment
704       config: {get_resource: VipConfig}
705       servers: {get_attr: [Controller, attributes, nova_server_resource]}
706       input_values:
707         # service VIP mappings
708         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
709         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
710         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
711         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
712         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
713         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceRegistryNetwork]}]}
714         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
715         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
716         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaMetadataNetwork]}]}
717         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
718         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
719         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
720         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
721         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HorizonNetwork]}]}
722         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
723         manila_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
724         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MysqlNetwork]}]}
725         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RabbitMqNetwork]}]}
726         # direct configuration of Virtual IPs for each network
727         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
728         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
729         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
730         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
731         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
732         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
733         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
734
735   ControllerSwiftDeployment:
736     type: OS::Heat::StructuredDeployments
737     properties:
738       name: ControllerSwiftDeployment
739       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
740       servers: {get_attr: [Controller, attributes, nova_server_resource]}
741
742   ObjectStorageSwiftDeployment:
743     type: OS::Heat::StructuredDeployments
744     properties:
745       name: ObjectStorageSwiftDeployment
746       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
747       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
748
749   SwiftDevicesAndProxyConfig:
750     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
751     properties:
752       controller_swift_devices: {get_attr: [Controller, swift_device]}
753       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
754       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
755
756   ControllerAllNodesDeployment:
757     type: OS::Heat::StructuredDeployments
758     properties:
759       name: ControllerAllNodesDeployment
760       config: {get_attr: [allNodesConfig, config_id]}
761       servers: {get_attr: [Controller, attributes, nova_server_resource]}
762       input_values:
763         bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
764         bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
765
766   ComputeAllNodesDeployment:
767     type: OS::Heat::StructuredDeployments
768     properties:
769       name: ComputeAllNodesDeployment
770       config: {get_attr: [allNodesConfig, config_id]}
771       servers: {get_attr: [Compute, attributes, nova_server_resource]}
772       input_values:
773         bootstrap_nodeid: {get_attr: [Compute, resource.0.hostname]}
774         bootstrap_nodeid_ip: {get_attr: [Compute, resource.0.ip_address]}
775
776   BlockStorageAllNodesDeployment:
777     type: OS::Heat::StructuredDeployments
778     properties:
779       name: BlockStorageAllNodesDeployment
780       config: {get_attr: [allNodesConfig, config_id]}
781       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
782       input_values:
783         bootstrap_nodeid: {get_attr: [BlockStorage, resource.0.hostname]}
784         bootstrap_nodeid_ip: {get_attr: [BlockStorage, resource.0.ip_address]}
785
786   ObjectStorageAllNodesDeployment:
787     type: OS::Heat::StructuredDeployments
788     properties:
789       name: ObjectStorageAllNodesDeployment
790       config: {get_attr: [allNodesConfig, config_id]}
791       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
792       input_values:
793         bootstrap_nodeid: {get_attr: [ObjectStorage, resource.0.hostname]}
794         bootstrap_nodeid_ip: {get_attr: [ObjectStorage, resource.0.ip_address]}
795
796   CephStorageAllNodesDeployment:
797     type: OS::Heat::StructuredDeployments
798     properties:
799       name: CephStorageAllNodesDeployment
800       config: {get_attr: [allNodesConfig, config_id]}
801       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
802       input_values:
803         bootstrap_nodeid: {get_attr: [CephStorage, resource.0.hostname]}
804         bootstrap_nodeid_ip: {get_attr: [CephStorage, resource.0.ip_address]}
805
806   # All Nodes Validations
807   AllNodesValidationConfig:
808     type: OS::TripleO::AllNodes::Validation
809     properties:
810       PingTestIps:
811         list_join:
812         - ' '
813         - - {get_attr: [Controller, resource.0.external_ip_address]}
814           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
815           - {get_attr: [Controller, resource.0.storage_ip_address]}
816           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
817           - {get_attr: [Controller, resource.0.tenant_ip_address]}
818           - {get_attr: [Controller, resource.0.management_ip_address]}
819
820   ControllerAllNodesValidationDeployment:
821     type: OS::Heat::StructuredDeployments
822     depends_on: ControllerAllNodesDeployment
823     properties:
824       name: ControllerAllNodesValidationDeployment
825       config: {get_resource: AllNodesValidationConfig}
826       servers: {get_attr: [Controller, attributes, nova_server_resource]}
827
828   ComputeAllNodesValidationDeployment:
829     type: OS::Heat::StructuredDeployments
830     depends_on: ComputeAllNodesDeployment
831     properties:
832       name: ComputeAllNodesValidationDeployment
833       config: {get_resource: AllNodesValidationConfig}
834       servers: {get_attr: [Compute, attributes, nova_server_resource]}
835
836   BlockStorageAllNodesValidationDeployment:
837     type: OS::Heat::StructuredDeployments
838     depends_on: BlockStorageAllNodesDeployment
839     properties:
840       name: BlockStorageAllNodesValidationDeployment
841       config: {get_resource: AllNodesValidationConfig}
842       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
843
844   ObjectStorageAllNodesValidationDeployment:
845     type: OS::Heat::StructuredDeployments
846     depends_on: ObjectStorageAllNodesDeployment
847     properties:
848       name: ObjectStorageAllNodesValidationDeployment
849       config: {get_resource: AllNodesValidationConfig}
850       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
851
852   CephStorageAllNodesValidationDeployment:
853     type: OS::Heat::StructuredDeployments
854     depends_on: CephStorageAllNodesDeployment
855     properties:
856       name: CephStorageAllNodesValidationDeployment
857       config: {get_resource: AllNodesValidationConfig}
858       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
859
860   UpdateWorkflow:
861     type: OS::TripleO::Tasks::UpdateWorkflow
862     properties:
863       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
864       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
865       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
866       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
867       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
868       input_values:
869         deploy_identifier: {get_param: DeployIdentifier}
870         update_identifier: {get_param: UpdateIdentifier}
871
872   # Optional ExtraConfig for all nodes - all roles are passed in here, but
873   # the nested template may configure each role differently (or not at all)
874   AllNodesExtraConfig:
875     type: OS::TripleO::AllNodesExtraConfig
876     depends_on:
877       - UpdateWorkflow
878       - ComputeAllNodesValidationDeployment
879       - BlockStorageAllNodesValidationDeployment
880       - ObjectStorageAllNodesValidationDeployment
881       - CephStorageAllNodesValidationDeployment
882       - ControllerAllNodesValidationDeployment
883     properties:
884       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
885       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
886       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
887       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
888       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
889
890   # Nested stack deployment runs after all other controller deployments
891   ControllerNodesPostDeployment:
892     type: OS::TripleO::ControllerPostDeployment
893     depends_on: [ControllerAllNodesDeployment, ControllerSwiftDeployment]
894     properties:
895       servers: {get_attr: [Controller, attributes, nova_server_resource]}
896       RoleData: {get_attr: [ControllerServiceChain, role_data]}
897
898   ComputeNodesPostDeployment:
899     type: OS::TripleO::ComputePostDeployment
900     depends_on: [ComputeAllNodesDeployment]
901     properties:
902       servers: {get_attr: [Compute, attributes, nova_server_resource]}
903       RoleData: {get_attr: [ComputeServiceChain, role_data]}
904
905   ObjectStorageNodesPostDeployment:
906     type: OS::TripleO::ObjectStoragePostDeployment
907     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
908     properties:
909       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
910       RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
911
912   BlockStorageNodesPostDeployment:
913     type: OS::TripleO::BlockStoragePostDeployment
914     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
915     properties:
916       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
917       RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
918
919   CephStorageNodesPostDeployment:
920     type: OS::TripleO::CephStoragePostDeployment
921     depends_on: [ControllerNodesPostDeployment, CephStorageAllNodesDeployment]
922     properties:
923       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
924       RoleData: {get_attr: [CephStorageServiceChain, role_data]}
925
926 outputs:
927   KeystoneURL:
928     description: URL for the Overcloud Keystone service
929     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
930   KeystoneAdminVip:
931     description: Keystone Admin VIP endpoint
932     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
933   PublicVip:
934     description: Controller VIP for public API endpoints
935     value: {get_attr: [VipMap, net_ip_map, external]}
936   AodhInternalVip:
937     description: VIP for Aodh API internal endpoint
938     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
939   CeilometerInternalVip:
940     description: VIP for Ceilometer API internal endpoint
941     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
942   CinderInternalVip:
943     description: VIP for Cinder API internal endpoint
944     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
945   GlanceInternalVip:
946     description: VIP for Glance API internal endpoint
947     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
948   GnocchiInternalVip:
949     description: VIP for Gnocchi API internal endpoint
950     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
951   HeatInternalVip:
952     description: VIP for Heat API internal endpoint
953     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
954   IronicInternalVip:
955     description: VIP for Ironic API internal endpoint
956     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
957   KeystoneInternalVip:
958     description: VIP for Keystone API internal endpoint
959     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
960   ManilaInternalVip:
961     description: VIP for Manila API internal endpoint
962     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
963   NeutronInternalVip:
964     description: VIP for Neutron API internal endpoint
965     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
966   NovaInternalVip:
967     description: VIP for Nova API internal endpoint
968     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
969   SaharaInternalVip:
970     description: VIP for Sahara API internal endpoint
971     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
972   SwiftInternalVip:
973     description: VIP for Swift Proxy internal endpoint
974     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
975   EndpointMap:
976     description: |
977       Mapping of the resources with the needed info for their endpoints.
978       This includes the protocol used, the IP, port and also a full
979       representation of the URI.
980     value: {get_attr: [EndpointMap, endpoint_map]}
981   HostsEntry:
982     description: |
983       The content that should be appended to your /etc/hosts if you want to get
984       hostname-based access to the deployed nodes (useful for testing without
985       setting up a DNS).
986     value: {get_attr: [allNodesConfig, hosts_entries]}
987   EnabledServices:
988     description: The services enabled on each role
989     value:
990       Controller: {get_attr: [ControllerServiceChain, role_data, service_names]}
991       Compute: {get_attr: [ComputeServiceChain, role_data, service_names]}
992       BlockStorage: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
993       ObjectStorage: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
994       CephStorage: {get_attr: [CephStorageServiceChain, role_data, service_names]}