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