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