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