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