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