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