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