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