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