Use modulepath for Puppet
[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::NeutronServer
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     description: A list of service resources (configured in the Heat
174                  resource_registry) which represent nested stacks
175                  for each service that should get installed on the Controllers.
176     type: comma_delimited_list
177
178   ComputeServices:
179     default:
180       - OS::TripleO::Services::CephClient
181       - OS::TripleO::Services::CephExternal
182       - OS::TripleO::Services::Timezone
183       - OS::TripleO::Services::Ntp
184       - OS::TripleO::Services::Snmp
185       - OS::TripleO::Services::NovaCompute
186       - OS::TripleO::Services::NovaLibvirt
187       - OS::TripleO::Services::Kernel
188       - OS::TripleO::Services::ComputeNeutronCorePlugin
189       - OS::TripleO::Services::ComputeNeutronOvsAgent
190       - OS::TripleO::Services::ComputeCeilometerAgent
191       - OS::TripleO::Services::ComputeNeutronL3Agent
192       - OS::TripleO::Services::ComputeNeutronMetadataAgent
193     description: A list of service resources (configured in the Heat
194                  resource_registry) which represent nested stacks
195                  for each service that should get installed on the Compute Nodes.
196     type: comma_delimited_list
197
198 # Block storage specific parameters
199   BlockStorageCount:
200     type: number
201     default: 0
202   BlockStorageExtraConfig:
203     default: {}
204     description: |
205       BlockStorage specific configuration to inject into the cluster. Same
206       structure as ExtraConfig.
207     type: json
208   BlockStorageServices:
209     default:
210       - OS::TripleO::Services::CinderVolume
211       - OS::TripleO::Services::Kernel
212       - OS::TripleO::Services::Ntp
213       - OS::TripleO::Services::Timezone
214       - OS::TripleO::Services::Snmp
215     description: A list of service resources (configured in the Heat
216                  resource_registry) which represent nested stacks
217                  for each service that should get installed on the BlockStorage nodes.
218     type: comma_delimited_list
219
220 # Object storage specific parameters
221   ObjectStorageCount:
222     type: number
223     default: 0
224   ObjectStorageExtraConfig:
225     default: {}
226     description: |
227       ObjectStorage specific configuration to inject into the cluster. Same
228       structure as ExtraConfig.
229     type: json
230   ObjectStorageServices:
231     default:
232       - OS::TripleO::Services::Kernel
233       - OS::TripleO::Services::Ntp
234       - OS::TripleO::Services::SwiftStorage
235       - OS::TripleO::Services::SwiftRingBuilder
236       - OS::TripleO::Services::Snmp
237       - OS::TripleO::Services::Timezone
238     description: A list of service resources (configured in the Heat
239                  resource_registry) which represent nested stacks
240                  for each service that should get installed on the ObjectStorage nodes.
241                  Note this role currently only supports steps 2, 3 and 4 configuration.
242     type: comma_delimited_list
243
244
245 # Ceph storage specific parameters
246   CephStorageCount:
247     type: number
248     default: 0
249   CephStorageExtraConfig:
250     default: {}
251     description: |
252       CephStorage specific configuration to inject into the cluster. Same
253       structure as ExtraConfig.
254     type: json
255   CephStorageServices:
256     default:
257       - OS::TripleO::Services::CephOSD
258       - OS::TripleO::Services::Kernel
259       - OS::TripleO::Services::Ntp
260       - OS::TripleO::Services::Timezone
261     description: A list of service resources (configured in the Heat
262                  resource_registry) which represent nested stacks
263                  for each service that should get installed on the CephStorage nodes.
264     type: comma_delimited_list
265
266   # Hostname format for each role
267   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
268   # and %stackname% is replaced with OS::stack_name in the template below.
269   # If you want to use the heat generated names, pass '' (empty string).
270   ControllerHostnameFormat:
271     type: string
272     description: Format for Controller node hostnames
273     default: '%stackname%-controller-%index%'
274   ComputeHostnameFormat:
275     type: string
276     description: Format for Compute node hostnames
277     default: '%stackname%-novacompute-%index%'
278   BlockStorageHostnameFormat:
279     type: string
280     description: Format for BlockStorage node hostnames
281     default: '%stackname%-blockstorage-%index%'
282   ObjectStorageHostnameFormat:
283     type: string
284     description: Format for SwiftStorage node hostnames
285     default: '%stackname%-objectstorage-%index%'
286   CephStorageHostnameFormat:
287     type: string
288     description: Format for CephStorage node hostnames
289     default: '%stackname%-cephstorage-%index%'
290
291   # Identifiers to trigger tasks on nodes
292   UpdateIdentifier:
293     default: ''
294     type: string
295     description: >
296       Setting to a previously unused value during stack-update will trigger
297       package update on all nodes
298   DeployIdentifier:
299     default: ''
300     type: string
301     description: >
302       Setting this to a unique value will re-run any deployment tasks which
303       perform configuration on a Heat stack-update.
304
305   # If you want to remove a specific node from a resource group, you can pass
306   # the node name or id as a <Group>RemovalPolicies parameter, for example:
307   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
308   ControllerRemovalPolicies:
309     default: []
310     type: json
311     description: >
312       List of resources to be removed from ControllerResourceGroup when
313       doing an update which requires removal of specific resources.
314   ComputeRemovalPolicies:
315     default: []
316     type: json
317     description: >
318       List of resources to be removed from ComputeResourceGroup when
319       doing an update which requires removal of specific resources.
320   BlockStorageRemovalPolicies:
321     default: []
322     type: json
323     description: >
324       List of resources to be removed from BlockStorageResourceGroup when
325       doing an update which requires removal of specific resources.
326   ObjectStorageRemovalPolicies:
327     default: []
328     type: json
329     description: >
330       List of resources to be removed from ObjectStorageResourceGroup when
331       doing an update which requires removal of specific resources.
332   CephStorageRemovalPolicies:
333     default: []
334     type: json
335     description: >
336       List of resources to be removed from CephStorageResourceGroup when
337       doing an update which requires removal of specific resources.
338
339 parameter_groups:
340 - label: deprecated
341   description: Do not use deprecated params, they will be removed.
342   parameters:
343   - controllerExtraConfig
344
345
346 resources:
347
348   HeatAuthEncryptionKey:
349     type: OS::Heat::RandomString
350
351   PcsdPassword:
352     type: OS::Heat::RandomString
353     properties:
354       length: 16
355
356   HorizonSecret:
357     type: OS::Heat::RandomString
358     properties:
359       length: 10
360
361   ServiceNetMap:
362     type: OS::TripleO::ServiceNetMap
363
364   EndpointMap:
365     type: OS::TripleO::EndpointMap
366     properties:
367       CloudName: {get_param: CloudName}
368       NetIpMap: {get_attr: [VipMap, net_ip_map]}
369       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
370
371   ControllerServiceChain:
372     type: OS::TripleO::Services
373     properties:
374       Services: {get_param: ControllerServices}
375       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
376
377   Controller:
378     type: OS::Heat::ResourceGroup
379     depends_on: Networks
380     properties:
381       count: {get_param: ControllerCount}
382       removal_policies: {get_param: ControllerRemovalPolicies}
383       resource_def:
384         type: OS::TripleO::Controller
385         properties:
386           CloudDomain: {get_param: CloudDomain}
387           controllerExtraConfig: {get_param: controllerExtraConfig}
388           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
389           HorizonSecret: {get_resource: HorizonSecret}
390           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
391           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
392           PcsdPassword: {get_resource: PcsdPassword}
393           RabbitCookie: {get_attr: [RabbitCookie, value]}
394           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
395           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
396           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
397           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
398           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MysqlNetwork]}]}
399           Hostname:
400             str_replace:
401               template: {get_param: ControllerHostnameFormat}
402               params:
403                 '%stackname%': {get_param: 'OS::stack_name'}
404           NodeIndex: '%index%'
405           ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
406           ServiceNames: {get_attr: [ControllerServiceChain, role_data, service_names]}
407
408   ComputeServiceChain:
409
410     type: OS::TripleO::Services
411     properties:
412       Services: {get_param: ComputeServices}
413       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
414
415   Compute:
416     type: OS::Heat::ResourceGroup
417     depends_on: Networks
418     properties:
419       count: {get_param: ComputeCount}
420       removal_policies: {get_param: ComputeRemovalPolicies}
421       resource_def:
422         type: OS::TripleO::Compute
423         properties:
424           CloudDomain: {get_param: CloudDomain}
425           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
426           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
427           # L3 HA and Failover is not relevant for Computes, should be removed
428           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
429           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
430           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
431           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
432           Hostname:
433             str_replace:
434               template: {get_param: ComputeHostnameFormat}
435               params:
436                 '%stackname%': {get_param: 'OS::stack_name'}
437           NodeIndex: '%index%'
438           ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
439           ServiceNames: {get_attr: [ComputeServiceChain, role_data, service_names]}
440
441   BlockStorageServiceChain:
442     type: OS::TripleO::Services
443     properties:
444       Services: {get_param: BlockStorageServices}
445       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
446
447   BlockStorage:
448     type: OS::Heat::ResourceGroup
449     depends_on: Networks
450     properties:
451       count: {get_param: BlockStorageCount}
452       removal_policies: {get_param: BlockStorageRemovalPolicies}
453       resource_def:
454         type: OS::TripleO::BlockStorage
455         properties:
456           UpdateIdentifier: {get_param: UpdateIdentifier}
457           Hostname:
458             str_replace:
459               template: {get_param: BlockStorageHostnameFormat}
460               params:
461                 '%stackname%': {get_param: 'OS::stack_name'}
462           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
463           ExtraConfig: {get_param: ExtraConfig}
464           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
465           CloudDomain: {get_param: CloudDomain}
466           ServerMetadata: {get_param: ServerMetadata}
467           NodeIndex: '%index%'
468           ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
469           ServiceNames: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
470
471   ObjectStorageServiceChain:
472     type: OS::TripleO::Services
473     properties:
474       Services: {get_param: ObjectStorageServices}
475       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
476
477   ObjectStorage:
478     type: OS::Heat::ResourceGroup
479     depends_on: Networks
480     properties:
481       count: {get_param: ObjectStorageCount}
482       removal_policies: {get_param: ObjectStorageRemovalPolicies}
483       resource_def:
484         type: OS::TripleO::ObjectStorage
485         properties:
486           HashSuffix: {get_param: SwiftHashSuffix}
487           UpdateIdentifier: {get_param: UpdateIdentifier}
488           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
489           Hostname:
490             str_replace:
491               template: {get_param: ObjectStorageHostnameFormat}
492               params:
493                 '%stackname%': {get_param: 'OS::stack_name'}
494           ExtraConfig: {get_param: ExtraConfig}
495           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
496           CloudDomain: {get_param: CloudDomain}
497           ServerMetadata: {get_param: ServerMetadata}
498           NodeIndex: '%index%'
499           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
500           ServiceNames: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
501
502   CephStorageServiceChain:
503     type: OS::TripleO::Services
504     properties:
505       Services: {get_param: CephStorageServices}
506       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
507
508   CephStorage:
509     type: OS::Heat::ResourceGroup
510     depends_on: Networks
511     properties:
512       count: {get_param: CephStorageCount}
513       removal_policies: {get_param: CephStorageRemovalPolicies}
514       resource_def:
515         type: OS::TripleO::CephStorage
516         properties:
517           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
518           UpdateIdentifier: {get_param: UpdateIdentifier}
519           Hostname:
520             str_replace:
521               template: {get_param: CephStorageHostnameFormat}
522               params:
523                 '%stackname%': {get_param: 'OS::stack_name'}
524           ExtraConfig: {get_param: ExtraConfig}
525           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
526           CloudDomain: {get_param: CloudDomain}
527           ServerMetadata: {get_param: ServerMetadata}
528           NodeIndex: '%index%'
529           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
530           ServiceNames: {get_attr: [CephStorageServiceChain, role_data, service_names]}
531
532   ControllerIpListMap:
533     type: OS::TripleO::Network::Ports::NetIpListMap
534     properties:
535       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
536       ExternalIpList: {get_attr: [Controller, external_ip_address]}
537       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
538       StorageIpList: {get_attr: [Controller, storage_ip_address]}
539       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
540       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
541       ManagementIpList: {get_attr: [Controller, management_ip_address]}
542
543   allNodesConfig:
544     type: OS::TripleO::AllNodes::SoftwareConfig
545     properties:
546       hosts:
547         - list_join:
548             - '\n'
549             - {get_attr: [Compute, hosts_entry]}
550         - list_join:
551             - '\n'
552             - {get_attr: [Controller, hosts_entry]}
553         - list_join:
554             - '\n'
555             - {get_attr: [BlockStorage, hosts_entry]}
556         - list_join:
557             - '\n'
558             - {get_attr: [ObjectStorage, hosts_entry]}
559         - list_join:
560             - '\n'
561             - {get_attr: [CephStorage, hosts_entry]}
562       controller_ips: {get_attr: [Controller, ip_address]}
563       controller_names: {get_attr: [Controller, hostname]}
564       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RabbitmqNetwork]}]}
565       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MongodbNetwork]}]}
566       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RedisNetwork]}]}
567       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MemcachedNetwork]}]}
568       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MysqlNetwork]}]}
569       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HorizonNetwork]}]}
570       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
571       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
572       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
573       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
574       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
575       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
576       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaMetadataNetwork]}]}
577       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
578       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceRegistryNetwork]}]}
579       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
580       manila_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
581       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
582       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
583       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
584       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
585       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
586       ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CephPublicNetwork]}]}
587       ceph_mon_node_names: {get_attr: [Controller, hostname]}
588       DeployIdentifier: {get_param: DeployIdentifier}
589       UpdateIdentifier: {get_param: UpdateIdentifier}
590
591   MysqlRootPassword:
592     type: OS::Heat::RandomString
593     properties:
594       length: 10
595
596   MysqlClusterUniquePart:
597     type: OS::Heat::RandomString
598     properties:
599       length: 10
600
601   RabbitCookie:
602     type: OS::Heat::RandomString
603     properties:
604       length: 20
605       salt: {get_param: RabbitCookieSalt}
606
607   # creates the network architecture
608   Networks:
609     type: OS::TripleO::Network
610
611   ControlVirtualIP:
612     type: OS::Neutron::Port
613     depends_on: Networks
614     properties:
615       name: control_virtual_ip
616       network: {get_param: NeutronControlPlaneID}
617       fixed_ips: {get_param: ControlFixedIPs}
618       replacement_policy: AUTO
619
620   RedisVirtualIP:
621     depends_on: Networks
622     type: OS::TripleO::Network::Ports::RedisVipPort
623     properties:
624       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
625       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
626       PortName: redis_virtual_ip
627       NetworkName: {get_attr: [ServiceNetMap, service_net_map, RedisNetwork]}
628       ServiceName: redis
629
630   # The public VIP is on the External net, falls back to ctlplane
631   PublicVirtualIP:
632     depends_on: Networks
633     type: OS::TripleO::Network::Ports::ExternalVipPort
634     properties:
635       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
636       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
637       PortName: public_virtual_ip
638       FixedIPs: {get_param: PublicVirtualFixedIPs}
639
640   InternalApiVirtualIP:
641     depends_on: Networks
642     type: OS::TripleO::Network::Ports::InternalApiVipPort
643     properties:
644       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
645       PortName: internal_api_virtual_ip
646       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
647
648   StorageVirtualIP:
649     depends_on: Networks
650     type: OS::TripleO::Network::Ports::StorageVipPort
651     properties:
652       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
653       PortName: storage_virtual_ip
654       FixedIPs: {get_param: StorageVirtualFixedIPs}
655
656   StorageMgmtVirtualIP:
657     depends_on: Networks
658     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
659     properties:
660       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
661       PortName: storage_management_virtual_ip
662       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
663
664   VipMap:
665     type: OS::TripleO::Network::Ports::NetVipMap
666     properties:
667       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
668       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
669       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
670       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
671       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
672       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
673       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
674       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
675       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
676       # No tenant or management VIP required
677
678   VipConfig:
679     type: OS::TripleO::VipConfig
680
681   VipDeployment:
682     type: OS::Heat::StructuredDeployments
683     properties:
684       name: VipDeployment
685       config: {get_resource: VipConfig}
686       servers: {get_attr: [Controller, attributes, nova_server_resource]}
687       input_values:
688         # service VIP mappings
689         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
690         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
691         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
692         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
693         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
694         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceRegistryNetwork]}]}
695         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
696         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
697         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaMetadataNetwork]}]}
698         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
699         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
700         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
701         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
702         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HorizonNetwork]}]}
703         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
704         manila_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
705         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MysqlNetwork]}]}
706         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RabbitMqNetwork]}]}
707         # direct configuration of Virtual IPs for each network
708         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
709         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
710         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
711         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
712         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
713         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
714         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
715
716   ControllerSwiftDeployment:
717     type: OS::Heat::StructuredDeployments
718     properties:
719       name: ControllerSwiftDeployment
720       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
721       servers: {get_attr: [Controller, attributes, nova_server_resource]}
722
723   ObjectStorageSwiftDeployment:
724     type: OS::Heat::StructuredDeployments
725     properties:
726       name: ObjectStorageSwiftDeployment
727       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
728       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
729
730   SwiftDevicesAndProxyConfig:
731     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
732     properties:
733       controller_swift_devices: {get_attr: [Controller, swift_device]}
734       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
735       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
736
737   ControllerAllNodesDeployment:
738     type: OS::Heat::StructuredDeployments
739     properties:
740       name: ControllerAllNodesDeployment
741       config: {get_attr: [allNodesConfig, config_id]}
742       servers: {get_attr: [Controller, attributes, nova_server_resource]}
743       input_values:
744         bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
745         bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
746
747   ComputeAllNodesDeployment:
748     type: OS::Heat::StructuredDeployments
749     properties:
750       name: ComputeAllNodesDeployment
751       config: {get_attr: [allNodesConfig, config_id]}
752       servers: {get_attr: [Compute, attributes, nova_server_resource]}
753       input_values:
754         bootstrap_nodeid: {get_attr: [Compute, resource.0.hostname]}
755         bootstrap_nodeid_ip: {get_attr: [Compute, resource.0.ip_address]}
756
757   BlockStorageAllNodesDeployment:
758     type: OS::Heat::StructuredDeployments
759     properties:
760       name: BlockStorageAllNodesDeployment
761       config: {get_attr: [allNodesConfig, config_id]}
762       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
763       input_values:
764         bootstrap_nodeid: {get_attr: [BlockStorage, resource.0.hostname]}
765         bootstrap_nodeid_ip: {get_attr: [BlockStorage, resource.0.ip_address]}
766
767   ObjectStorageAllNodesDeployment:
768     type: OS::Heat::StructuredDeployments
769     properties:
770       name: ObjectStorageAllNodesDeployment
771       config: {get_attr: [allNodesConfig, config_id]}
772       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
773       input_values:
774         bootstrap_nodeid: {get_attr: [ObjectStorage, resource.0.hostname]}
775         bootstrap_nodeid_ip: {get_attr: [ObjectStorage, resource.0.ip_address]}
776
777   CephStorageAllNodesDeployment:
778     type: OS::Heat::StructuredDeployments
779     properties:
780       name: CephStorageAllNodesDeployment
781       config: {get_attr: [allNodesConfig, config_id]}
782       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
783       input_values:
784         bootstrap_nodeid: {get_attr: [CephStorage, resource.0.hostname]}
785         bootstrap_nodeid_ip: {get_attr: [CephStorage, resource.0.ip_address]}
786
787   # All Nodes Validations
788   AllNodesValidationConfig:
789     type: OS::TripleO::AllNodes::Validation
790     properties:
791       PingTestIps:
792         list_join:
793         - ' '
794         - - {get_attr: [Controller, resource.0.external_ip_address]}
795           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
796           - {get_attr: [Controller, resource.0.storage_ip_address]}
797           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
798           - {get_attr: [Controller, resource.0.tenant_ip_address]}
799
800   ControllerAllNodesValidationDeployment:
801     type: OS::Heat::StructuredDeployments
802     depends_on: ControllerAllNodesDeployment
803     properties:
804       name: ControllerAllNodesValidationDeployment
805       config: {get_resource: AllNodesValidationConfig}
806       servers: {get_attr: [Controller, attributes, nova_server_resource]}
807
808   ComputeAllNodesValidationDeployment:
809     type: OS::Heat::StructuredDeployments
810     depends_on: ComputeAllNodesDeployment
811     properties:
812       name: ComputeAllNodesValidationDeployment
813       config: {get_resource: AllNodesValidationConfig}
814       servers: {get_attr: [Compute, attributes, nova_server_resource]}
815
816   BlockStorageAllNodesValidationDeployment:
817     type: OS::Heat::StructuredDeployments
818     depends_on: BlockStorageAllNodesDeployment
819     properties:
820       name: BlockStorageAllNodesValidationDeployment
821       config: {get_resource: AllNodesValidationConfig}
822       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
823
824   ObjectStorageAllNodesValidationDeployment:
825     type: OS::Heat::StructuredDeployments
826     depends_on: ObjectStorageAllNodesDeployment
827     properties:
828       name: ObjectStorageAllNodesValidationDeployment
829       config: {get_resource: AllNodesValidationConfig}
830       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
831
832   CephStorageAllNodesValidationDeployment:
833     type: OS::Heat::StructuredDeployments
834     depends_on: CephStorageAllNodesDeployment
835     properties:
836       name: CephStorageAllNodesValidationDeployment
837       config: {get_resource: AllNodesValidationConfig}
838       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
839
840   UpdateWorkflow:
841     type: OS::TripleO::Tasks::UpdateWorkflow
842     properties:
843       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
844       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
845       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
846       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
847       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
848       input_values:
849         deploy_identifier: {get_param: DeployIdentifier}
850         update_identifier: {get_param: UpdateIdentifier}
851
852   # Optional ExtraConfig for all nodes - all roles are passed in here, but
853   # the nested template may configure each role differently (or not at all)
854   AllNodesExtraConfig:
855     type: OS::TripleO::AllNodesExtraConfig
856     depends_on:
857       - UpdateWorkflow
858       - ComputeAllNodesValidationDeployment
859       - BlockStorageAllNodesValidationDeployment
860       - ObjectStorageAllNodesValidationDeployment
861       - CephStorageAllNodesValidationDeployment
862       - ControllerAllNodesValidationDeployment
863     properties:
864       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
865       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
866       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
867       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
868       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
869
870   # Nested stack deployment runs after all other controller deployments
871   ControllerNodesPostDeployment:
872     type: OS::TripleO::ControllerPostDeployment
873     depends_on: [ControllerAllNodesDeployment, ControllerSwiftDeployment]
874     properties:
875       servers: {get_attr: [Controller, attributes, nova_server_resource]}
876       RoleData: {get_attr: [ControllerServiceChain, role_data]}
877
878   ComputeNodesPostDeployment:
879     type: OS::TripleO::ComputePostDeployment
880     depends_on: [ComputeAllNodesDeployment]
881     properties:
882       servers: {get_attr: [Compute, attributes, nova_server_resource]}
883       RoleData: {get_attr: [ComputeServiceChain, role_data]}
884
885   ObjectStorageNodesPostDeployment:
886     type: OS::TripleO::ObjectStoragePostDeployment
887     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
888     properties:
889       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
890       RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
891
892   BlockStorageNodesPostDeployment:
893     type: OS::TripleO::BlockStoragePostDeployment
894     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
895     properties:
896       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
897       RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
898
899   CephStorageNodesPostDeployment:
900     type: OS::TripleO::CephStoragePostDeployment
901     depends_on: [ControllerNodesPostDeployment, CephStorageAllNodesDeployment]
902     properties:
903       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
904       RoleData: {get_attr: [CephStorageServiceChain, role_data]}
905
906 outputs:
907   KeystoneURL:
908     description: URL for the Overcloud Keystone service
909     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
910   KeystoneAdminVip:
911     description: Keystone Admin VIP endpoint
912     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
913   PublicVip:
914     description: Controller VIP for public API endpoints
915     value: {get_attr: [VipMap, net_ip_map, external]}
916   AodhInternalVip:
917     description: VIP for Aodh API internal endpoint
918     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
919   CeilometerInternalVip:
920     description: VIP for Ceilometer API internal endpoint
921     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
922   CinderInternalVip:
923     description: VIP for Cinder API internal endpoint
924     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
925   GlanceInternalVip:
926     description: VIP for Glance API internal endpoint
927     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
928   GnocchiInternalVip:
929     description: VIP for Gnocchi API internal endpoint
930     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
931   HeatInternalVip:
932     description: VIP for Heat API internal endpoint
933     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
934   IronicInternalVip:
935     description: VIP for Ironic API internal endpoint
936     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
937   KeystoneInternalVip:
938     description: VIP for Keystone API internal endpoint
939     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
940   ManilaInternalVip:
941     description: VIP for Manila API internal endpoint
942     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
943   NeutronInternalVip:
944     description: VIP for Neutron API internal endpoint
945     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
946   NovaInternalVip:
947     description: VIP for Nova API internal endpoint
948     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
949   SaharaInternalVip:
950     description: VIP for Sahara API internal endpoint
951     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
952   SwiftInternalVip:
953     description: VIP for Swift Proxy internal endpoint
954     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
955   EndpointMap:
956     description: |
957       Mapping of the resources with the needed info for their endpoints.
958       This includes the protocol used, the IP, port and also a full
959       representation of the URI.
960     value: {get_attr: [EndpointMap, endpoint_map]}
961   HostsEntry:
962     description: |
963       The content that should be appended to your /etc/hosts if you want to get
964       hostname-based access to the deployed nodes (useful for testing without
965       setting up a DNS).
966     value: {get_attr: [allNodesConfig, hosts_entries]}
967   EnabledServices:
968     description: The services enabled on each role
969     value:
970       Controller: {get_attr: [ControllerServiceChain, role_data, service_names]}
971       Compute: {get_attr: [ComputeServiceChain, role_data, service_names]}
972       BlockStorage: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
973       ObjectStorage: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
974       CephStorage: {get_attr: [CephStorageServiceChain, role_data, service_names]}