Merge "Add management network to list of networks to ping"
[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           - {get_attr: [Controller, resource.0.management_ip_address]}
810
811   ControllerAllNodesValidationDeployment:
812     type: OS::Heat::StructuredDeployments
813     depends_on: ControllerAllNodesDeployment
814     properties:
815       name: ControllerAllNodesValidationDeployment
816       config: {get_resource: AllNodesValidationConfig}
817       servers: {get_attr: [Controller, attributes, nova_server_resource]}
818
819   ComputeAllNodesValidationDeployment:
820     type: OS::Heat::StructuredDeployments
821     depends_on: ComputeAllNodesDeployment
822     properties:
823       name: ComputeAllNodesValidationDeployment
824       config: {get_resource: AllNodesValidationConfig}
825       servers: {get_attr: [Compute, attributes, nova_server_resource]}
826
827   BlockStorageAllNodesValidationDeployment:
828     type: OS::Heat::StructuredDeployments
829     depends_on: BlockStorageAllNodesDeployment
830     properties:
831       name: BlockStorageAllNodesValidationDeployment
832       config: {get_resource: AllNodesValidationConfig}
833       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
834
835   ObjectStorageAllNodesValidationDeployment:
836     type: OS::Heat::StructuredDeployments
837     depends_on: ObjectStorageAllNodesDeployment
838     properties:
839       name: ObjectStorageAllNodesValidationDeployment
840       config: {get_resource: AllNodesValidationConfig}
841       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
842
843   CephStorageAllNodesValidationDeployment:
844     type: OS::Heat::StructuredDeployments
845     depends_on: CephStorageAllNodesDeployment
846     properties:
847       name: CephStorageAllNodesValidationDeployment
848       config: {get_resource: AllNodesValidationConfig}
849       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
850
851   UpdateWorkflow:
852     type: OS::TripleO::Tasks::UpdateWorkflow
853     properties:
854       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
855       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
856       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
857       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
858       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
859       input_values:
860         deploy_identifier: {get_param: DeployIdentifier}
861         update_identifier: {get_param: UpdateIdentifier}
862
863   # Optional ExtraConfig for all nodes - all roles are passed in here, but
864   # the nested template may configure each role differently (or not at all)
865   AllNodesExtraConfig:
866     type: OS::TripleO::AllNodesExtraConfig
867     depends_on:
868       - UpdateWorkflow
869       - ComputeAllNodesValidationDeployment
870       - BlockStorageAllNodesValidationDeployment
871       - ObjectStorageAllNodesValidationDeployment
872       - CephStorageAllNodesValidationDeployment
873       - ControllerAllNodesValidationDeployment
874     properties:
875       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
876       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
877       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
878       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
879       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
880
881   # Nested stack deployment runs after all other controller deployments
882   ControllerNodesPostDeployment:
883     type: OS::TripleO::ControllerPostDeployment
884     depends_on: [ControllerAllNodesDeployment, ControllerSwiftDeployment]
885     properties:
886       servers: {get_attr: [Controller, attributes, nova_server_resource]}
887       RoleData: {get_attr: [ControllerServiceChain, role_data]}
888
889   ComputeNodesPostDeployment:
890     type: OS::TripleO::ComputePostDeployment
891     depends_on: [ComputeAllNodesDeployment]
892     properties:
893       servers: {get_attr: [Compute, attributes, nova_server_resource]}
894       RoleData: {get_attr: [ComputeServiceChain, role_data]}
895
896   ObjectStorageNodesPostDeployment:
897     type: OS::TripleO::ObjectStoragePostDeployment
898     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
899     properties:
900       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
901       RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
902
903   BlockStorageNodesPostDeployment:
904     type: OS::TripleO::BlockStoragePostDeployment
905     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
906     properties:
907       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
908       RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
909
910   CephStorageNodesPostDeployment:
911     type: OS::TripleO::CephStoragePostDeployment
912     depends_on: [ControllerNodesPostDeployment, CephStorageAllNodesDeployment]
913     properties:
914       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
915       RoleData: {get_attr: [CephStorageServiceChain, role_data]}
916
917 outputs:
918   KeystoneURL:
919     description: URL for the Overcloud Keystone service
920     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
921   KeystoneAdminVip:
922     description: Keystone Admin VIP endpoint
923     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
924   PublicVip:
925     description: Controller VIP for public API endpoints
926     value: {get_attr: [VipMap, net_ip_map, external]}
927   AodhInternalVip:
928     description: VIP for Aodh API internal endpoint
929     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
930   CeilometerInternalVip:
931     description: VIP for Ceilometer API internal endpoint
932     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
933   CinderInternalVip:
934     description: VIP for Cinder API internal endpoint
935     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
936   GlanceInternalVip:
937     description: VIP for Glance API internal endpoint
938     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
939   GnocchiInternalVip:
940     description: VIP for Gnocchi API internal endpoint
941     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
942   HeatInternalVip:
943     description: VIP for Heat API internal endpoint
944     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
945   IronicInternalVip:
946     description: VIP for Ironic API internal endpoint
947     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
948   KeystoneInternalVip:
949     description: VIP for Keystone API internal endpoint
950     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
951   ManilaInternalVip:
952     description: VIP for Manila API internal endpoint
953     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
954   NeutronInternalVip:
955     description: VIP for Neutron API internal endpoint
956     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
957   NovaInternalVip:
958     description: VIP for Nova API internal endpoint
959     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
960   SaharaInternalVip:
961     description: VIP for Sahara API internal endpoint
962     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
963   SwiftInternalVip:
964     description: VIP for Swift Proxy internal endpoint
965     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
966   EndpointMap:
967     description: |
968       Mapping of the resources with the needed info for their endpoints.
969       This includes the protocol used, the IP, port and also a full
970       representation of the URI.
971     value: {get_attr: [EndpointMap, endpoint_map]}
972   HostsEntry:
973     description: |
974       The content that should be appended to your /etc/hosts if you want to get
975       hostname-based access to the deployed nodes (useful for testing without
976       setting up a DNS).
977     value: {get_attr: [allNodesConfig, hosts_entries]}
978   EnabledServices:
979     description: The services enabled on each role
980     value:
981       Controller: {get_attr: [ControllerServiceChain, role_data, service_names]}
982       Compute: {get_attr: [ComputeServiceChain, role_data, service_names]}
983       BlockStorage: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
984       ObjectStorage: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
985       CephStorage: {get_attr: [CephStorageServiceChain, role_data, service_names]}