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