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