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