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