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