bd1c0feef8862f9644e04f114495da17e0e73c90
[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::NovaCompute
571       - OS::TripleO::Services::Ntp
572       - OS::TripleO::Services::Snmp
573     description: A list of service resources (configured in the Heat
574                  resource_registry) which represent nested stacks
575                  for each service that should get installed on the Compute Nodes.
576     type: comma_delimited_list
577
578 # Block storage specific parameters
579   BlockStorageCount:
580     type: number
581     default: 0
582   BlockStorageImage:
583     default: overcloud-full
584     type: string
585   OvercloudBlockStorageFlavor:
586     description: Flavor for block storage nodes to request when deploying.
587     default: baremetal
588     type: string
589     constraints:
590       - custom_constraint: nova.flavor
591   BlockStorageExtraConfig:
592     default: {}
593     description: |
594       BlockStorage specific configuration to inject into the cluster. Same
595       structure as ExtraConfig.
596     type: json
597   BlockStorageSchedulerHints:
598     type: json
599     description: Optional scheduler hints to pass to nova
600     default: {}
601   BlockStorageServices:
602     default:
603       - OS::TripleO::Services::CinderVolume
604       - OS::TripleO::Services::Ntp
605       - OS::TripleO::Services::Timezone
606     description: A list of service resources (configured in the Heat
607                  resource_registry) which represent nested stacks
608                  for each service that should get installed on the BlockStorage nodes.
609     type: comma_delimited_list
610
611 # Object storage specific parameters
612   ObjectStorageCount:
613     type: number
614     default: 0
615   OvercloudSwiftStorageFlavor:
616     description: Flavor for Swift storage nodes to request when deploying.
617     default: baremetal
618     type: string
619     constraints:
620       - custom_constraint: nova.flavor
621   SwiftStorageImage:
622     default: overcloud-full
623     type: string
624   ObjectStorageExtraConfig:
625     default: {}
626     description: |
627       ObjectStorage specific configuration to inject into the cluster. Same
628       structure as ExtraConfig.
629     type: json
630   ObjectStorageSchedulerHints:
631     type: json
632     description: Optional scheduler hints to pass to nova
633     default: {}
634   ObjectStorageServices:
635     default:
636       - OS::TripleO::Services::Ntp
637       - OS::TripleO::Services::SwiftStorage
638       - OS::TripleO::Services::Snmp
639       - OS::TripleO::Services::Timezone
640     description: A list of service resources (configured in the Heat
641                  resource_registry) which represent nested stacks
642                  for each service that should get installed on the ObjectStorage nodes.
643                  Note this role currently only supports steps 2, 3 and 4 configuration.
644     type: comma_delimited_list
645
646
647 # Ceph storage specific parameters
648   CephStorageCount:
649     type: number
650     default: 0
651   CephStorageImage:
652     default: overcloud-full
653     type: string
654   OvercloudCephStorageFlavor:
655     default: baremetal
656     description: Flavor for Ceph storage nodes to request when deploying.
657     type: string
658     constraints:
659       - custom_constraint: nova.flavor
660   CephStorageExtraConfig:
661     default: {}
662     description: |
663       CephStorage specific configuration to inject into the cluster. Same
664       structure as ExtraConfig.
665     type: json
666   CephStorageSchedulerHints:
667     type: json
668     description: Optional scheduler hints to pass to nova
669     default: {}
670   CephStorageServices:
671     default:
672       - OS::TripleO::Services::Ntp
673       - OS::TripleO::Services::Timezone
674     description: A list of service resources (configured in the Heat
675                  resource_registry) which represent nested stacks
676                  for each service that should get installed on the CephStorage nodes.
677     type: comma_delimited_list
678
679   # Hostname format for each role
680   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
681   # and %stackname% is replaced with OS::stack_name in the template below.
682   # If you want to use the heat generated names, pass '' (empty string).
683   ControllerHostnameFormat:
684     type: string
685     description: Format for Controller node hostnames
686     default: '%stackname%-controller-%index%'
687   ComputeHostnameFormat:
688     type: string
689     description: Format for Compute node hostnames
690     default: '%stackname%-novacompute-%index%'
691   BlockStorageHostnameFormat:
692     type: string
693     description: Format for BlockStorage node hostnames
694     default: '%stackname%-blockstorage-%index%'
695   ObjectStorageHostnameFormat:
696     type: string
697     description: Format for SwiftStorage node hostnames
698     default: '%stackname%-objectstorage-%index%'
699   CephStorageHostnameFormat:
700     type: string
701     description: Format for CephStorage node hostnames
702     default: '%stackname%-cephstorage-%index%'
703
704   # Identifiers to trigger tasks on nodes
705   UpdateIdentifier:
706     default: ''
707     type: string
708     description: >
709       Setting to a previously unused value during stack-update will trigger
710       package update on all nodes
711   DeployIdentifier:
712     default: ''
713     type: string
714     description: >
715       Setting this to a unique value will re-run any deployment tasks which
716       perform configuration on a Heat stack-update.
717
718   # If you want to remove a specific node from a resource group, you can pass
719   # the node name or id as a <Group>RemovalPolicies parameter, for example:
720   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
721   ControllerRemovalPolicies:
722     default: []
723     type: json
724     description: >
725       List of resources to be removed from ControllerResourceGroup when
726       doing an update which requires removal of specific resources.
727   ComputeRemovalPolicies:
728     default: []
729     type: json
730     description: >
731       List of resources to be removed from ComputeResourceGroup when
732       doing an update which requires removal of specific resources.
733   BlockStorageRemovalPolicies:
734     default: []
735     type: json
736     description: >
737       List of resources to be removed from BlockStorageResourceGroup when
738       doing an update which requires removal of specific resources.
739   ObjectStorageRemovalPolicies:
740     default: []
741     type: json
742     description: >
743       List of resources to be removed from ObjectStorageResourceGroup when
744       doing an update which requires removal of specific resources.
745   CephStorageRemovalPolicies:
746     default: []
747     type: json
748     description: >
749       List of resources to be removed from CephStorageResourceGroup when
750       doing an update which requires removal of specific resources.
751
752 parameter_groups:
753 - label: deprecated
754   description: Do not use deprecated params, they will be removed.
755   parameters:
756   - controllerExtraConfig
757
758
759 resources:
760
761   HeatAuthEncryptionKey:
762     type: OS::Heat::RandomString
763
764   PcsdPassword:
765     type: OS::Heat::RandomString
766     properties:
767       length: 16
768
769   HorizonSecret:
770     type: OS::Heat::RandomString
771     properties:
772       length: 10
773
774   EndpointMap:
775     type: OS::TripleO::EndpointMap
776     properties:
777       CloudName: {get_param: CloudName}
778       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
779       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
780       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
781       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
782       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
783       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
784       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
785       IronicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
786       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
787       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
788       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
789       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
790       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
791       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
792       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
793       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
794
795   ControllerServiceChain:
796     type: OS::TripleO::Services
797     depends_on: Networks
798     properties:
799       Services: {get_param: ControllerServices}
800       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
801
802   Controller:
803     type: OS::Heat::ResourceGroup
804     depends_on: Networks
805     properties:
806       count: {get_param: ControllerCount}
807       removal_policies: {get_param: ControllerRemovalPolicies}
808       resource_def:
809         type: OS::TripleO::Controller
810         properties:
811           AdminPassword: {get_param: AdminPassword}
812           AodhPassword: {get_param: AodhPassword}
813           CeilometerBackend: {get_param: CeilometerBackend}
814           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
815           CeilometerPassword: {get_param: CeilometerPassword}
816           CeilometerMeterDispatcher: {get_param: CeilometerMeterDispatcher}
817           CloudDomain: {get_param: CloudDomain}
818           ControlVirtualInterface: {get_param: ControlVirtualInterface}
819           controllerExtraConfig: {get_param: controllerExtraConfig}
820           CorosyncIPv6: {get_param: CorosyncIPv6}
821           Debug: {get_param: Debug}
822           EnableFencing: {get_param: EnableFencing}
823           ManageFirewall: {get_param: ManageFirewall}
824           PurgeFirewallRules: {get_param: PurgeFirewallRules}
825           EnableGalera: {get_param: EnableGalera}
826           EnableCephStorage: {get_param: ControllerEnableCephStorage}
827           ExtraConfig: {get_param: ExtraConfig}
828           FencingConfig: {get_param: FencingConfig}
829           Flavor: {get_param: OvercloudControlFlavor}
830           GnocchiPassword: {get_param: GnocchiPassword}
831           GnocchiBackend: {get_param: GnocchiBackend}
832           GnocchiIndexerBackend: {get_param: GnocchiIndexerBackend}
833           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
834           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
835           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
836           HorizonSecret: {get_resource: HorizonSecret}
837           Image: {get_param: controllerImage}
838           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
839           InstanceNameTemplate: {get_param: InstanceNameTemplate}
840           KeyName: {get_param: KeyName}
841           MemcachedIPv6: {get_param: MemcachedIPv6}
842           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
843           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
844           MysqlMaxConnections: {get_param: MysqlMaxConnections}
845           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
846           NeutronTenantMtu: {get_param: NeutronTenantMtu}
847           NeutronPublicInterface: {get_param: NeutronPublicInterface}
848           NeutronPassword: {get_param: NeutronPassword}
849           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
850           NovaIPv6: {get_param: NovaIPv6}
851           NovaPassword: {get_param: NovaPassword}
852           PcsdPassword: {get_resource: PcsdPassword}
853           PublicVirtualInterface: {get_param: PublicVirtualInterface}
854           RabbitPassword: {get_param: RabbitPassword}
855           RabbitUserName: {get_param: RabbitUserName}
856           RabbitCookie: {get_attr: [RabbitCookie, value]}
857           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
858           RabbitClientPort: {get_param: RabbitClientPort}
859           RedisPassword: {get_param: RedisPassword}
860           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
861           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
862           SwiftHashSuffix: {get_param: SwiftHashSuffix}
863           SwiftMinPartHours: {get_param: SwiftMinPartHours}
864           SwiftPartPower: {get_param: SwiftPartPower}
865           SwiftReplicas: { get_param: SwiftReplicas}
866           ServiceNetMap: {get_param: ServiceNetMap}
867           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
868           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
869           UpdateIdentifier: {get_param: UpdateIdentifier}
870           Hostname:
871             str_replace:
872               template: {get_param: ControllerHostnameFormat}
873               params:
874                 '%stackname%': {get_param: 'OS::stack_name'}
875           NodeIndex: '%index%'
876           ServerMetadata: {get_param: ServerMetadata}
877           SchedulerHints: {get_param: ControllerSchedulerHints}
878           ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
879
880   ComputeServiceChain:
881
882     type: OS::TripleO::Services
883     properties:
884       Services: {get_param: ComputeServices}
885       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
886
887   Compute:
888     type: OS::Heat::ResourceGroup
889     depends_on: Networks
890     properties:
891       count: {get_param: ComputeCount}
892       removal_policies: {get_param: ComputeRemovalPolicies}
893       resource_def:
894         type: OS::TripleO::Compute
895         properties:
896           AdminPassword: {get_param: AdminPassword}
897           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
898           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
899           CeilometerPassword: {get_param: CeilometerPassword}
900           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
901           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
902           Debug: {get_param: Debug}
903           ExtraConfig: {get_param: ExtraConfig}
904           Flavor: {get_param: OvercloudComputeFlavor}
905           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
906           Image: {get_param: NovaImage}
907           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
908           KeyName: {get_param: KeyName}
909           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
910           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
911           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
912           NeutronTenantMtu: {get_param: NeutronTenantMtu}
913           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
914           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
915           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
916           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
917           NeutronNetworkType: {get_param: NeutronNetworkType}
918           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
919           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
920           NeutronPassword: {get_param: NeutronPassword}
921           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
922           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
923           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
924           NeutronCorePlugin: {get_param: NeutronCorePlugin}
925           NeutronServicePlugins: {get_param: NeutronServicePlugins}
926           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
927           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
928           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
929           # L3 HA and Failover is not relevant for Computes, should be removed
930           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
931           NeutronL3HA: {get_param: NeutronL3HA}
932           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
933           NovaComputeDriver: {get_param: NovaComputeDriver}
934           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
935           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
936           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
937           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
938           NovaIPv6: {get_param: NovaIPv6}
939           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
940           NovaPassword: {get_param: NovaPassword}
941           NovaOVSBridge: {get_param: NovaOVSBridge}
942           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
943           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
944           RabbitPassword: {get_param: RabbitPassword}
945           RabbitUserName: {get_param: RabbitUserName}
946           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
947           RabbitClientPort: {get_param: RabbitClientPort}
948           ServiceNetMap: {get_param: ServiceNetMap}
949           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
950           UpdateIdentifier: {get_param: UpdateIdentifier}
951           Hostname:
952             str_replace:
953               template: {get_param: ComputeHostnameFormat}
954               params:
955                 '%stackname%': {get_param: 'OS::stack_name'}
956           CloudDomain: {get_param: CloudDomain}
957           ServerMetadata: {get_param: ServerMetadata}
958           SchedulerHints: {get_param: NovaComputeSchedulerHints}
959           NodeIndex: '%index%'
960           ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
961
962   BlockStorageServiceChain:
963     type: OS::TripleO::Services
964     properties:
965       Services: {get_param: BlockStorageServices}
966       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
967
968   BlockStorage:
969     type: OS::Heat::ResourceGroup
970     depends_on: Networks
971     properties:
972       count: {get_param: BlockStorageCount}
973       removal_policies: {get_param: BlockStorageRemovalPolicies}
974       resource_def:
975         type: OS::TripleO::BlockStorage
976         properties:
977           Image: {get_param: BlockStorageImage}
978           KeyName: {get_param: KeyName}
979           Flavor: {get_param: OvercloudBlockStorageFlavor}
980           UpdateIdentifier: {get_param: UpdateIdentifier}
981           Hostname:
982             str_replace:
983               template: {get_param: BlockStorageHostnameFormat}
984               params:
985                 '%stackname%': {get_param: 'OS::stack_name'}
986           ServiceNetMap: {get_param: ServiceNetMap}
987           ExtraConfig: {get_param: ExtraConfig}
988           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
989           CloudDomain: {get_param: CloudDomain}
990           ServerMetadata: {get_param: ServerMetadata}
991           SchedulerHints: {get_param: BlockStorageSchedulerHints}
992           NodeIndex: '%index%'
993           ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
994
995   ObjectStorageServiceChain:
996     type: OS::TripleO::Services
997     properties:
998       Services: {get_param: ObjectStorageServices}
999       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1000
1001   ObjectStorage:
1002     type: OS::Heat::ResourceGroup
1003     depends_on: Networks
1004     properties:
1005       count: {get_param: ObjectStorageCount}
1006       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1007       resource_def:
1008         type: OS::TripleO::ObjectStorage
1009         properties:
1010           KeyName: {get_param: KeyName}
1011           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1012           HashSuffix: {get_param: SwiftHashSuffix}
1013           MinPartHours: {get_param: SwiftMinPartHours}
1014           PartPower: {get_param: SwiftPartPower}
1015           Image: {get_param: SwiftStorageImage}
1016           Replicas: { get_param: SwiftReplicas}
1017           UpdateIdentifier: {get_param: UpdateIdentifier}
1018           ServiceNetMap: {get_param: ServiceNetMap}
1019           Hostname:
1020             str_replace:
1021               template: {get_param: ObjectStorageHostnameFormat}
1022               params:
1023                 '%stackname%': {get_param: 'OS::stack_name'}
1024           ExtraConfig: {get_param: ExtraConfig}
1025           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1026           CloudDomain: {get_param: CloudDomain}
1027           ServerMetadata: {get_param: ServerMetadata}
1028           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1029           NodeIndex: '%index%'
1030           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
1031
1032   CephStorageServiceChain:
1033     type: OS::TripleO::Services
1034     properties:
1035       Services: {get_param: CephStorageServices}
1036       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1037
1038   CephStorage:
1039     type: OS::Heat::ResourceGroup
1040     depends_on: Networks
1041     properties:
1042       count: {get_param: CephStorageCount}
1043       removal_policies: {get_param: CephStorageRemovalPolicies}
1044       resource_def:
1045         type: OS::TripleO::CephStorage
1046         properties:
1047           Image: {get_param: CephStorageImage}
1048           KeyName: {get_param: KeyName}
1049           Flavor: {get_param: OvercloudCephStorageFlavor}
1050           ServiceNetMap: {get_param: ServiceNetMap}
1051           UpdateIdentifier: {get_param: UpdateIdentifier}
1052           Hostname:
1053             str_replace:
1054               template: {get_param: CephStorageHostnameFormat}
1055               params:
1056                 '%stackname%': {get_param: 'OS::stack_name'}
1057           ExtraConfig: {get_param: ExtraConfig}
1058           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1059           CloudDomain: {get_param: CloudDomain}
1060           ServerMetadata: {get_param: ServerMetadata}
1061           SchedulerHints: {get_param: CephStorageSchedulerHints}
1062           NodeIndex: '%index%'
1063           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
1064
1065   ControllerIpListMap:
1066     type: OS::TripleO::Network::Ports::NetIpListMap
1067     properties:
1068       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1069       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1070       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1071       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1072       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1073       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1074       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1075
1076   allNodesConfig:
1077     type: OS::TripleO::AllNodes::SoftwareConfig
1078     properties:
1079       compute_hosts: {get_attr: [Compute, hosts_entry]}
1080       controller_hosts: {get_attr: [Controller, hosts_entry]}
1081       controller_ips: {get_attr: [Controller, ip_address]}
1082       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1083       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1084       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1085       controller_names: {get_attr: [Controller, hostname]}
1086       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1087       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1088       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1089       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1090       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1091       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1092       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1093       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1094       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1095       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1096       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1097       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1098       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1099       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1100       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1101       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1102       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1103       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1104       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1105       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1106       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1107       DeployIdentifier: {get_param: DeployIdentifier}
1108       UpdateIdentifier: {get_param: UpdateIdentifier}
1109
1110   MysqlRootPassword:
1111     type: OS::Heat::RandomString
1112     properties:
1113       length: 10
1114
1115   MysqlClusterUniquePart:
1116     type: OS::Heat::RandomString
1117     properties:
1118       length: 10
1119
1120   RabbitCookie:
1121     type: OS::Heat::RandomString
1122     properties:
1123       length: 20
1124       salt: {get_param: RabbitCookieSalt}
1125
1126   # creates the network architecture
1127   Networks:
1128     type: OS::TripleO::Network
1129
1130   ControlVirtualIP:
1131     type: OS::Neutron::Port
1132     depends_on: Networks
1133     properties:
1134       name: control_virtual_ip
1135       network: {get_param: NeutronControlPlaneID}
1136       fixed_ips: {get_param: ControlFixedIPs}
1137       replacement_policy: AUTO
1138
1139   RedisVirtualIP:
1140     depends_on: Networks
1141     type: OS::TripleO::Network::Ports::RedisVipPort
1142     properties:
1143       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1144       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1145       PortName: redis_virtual_ip
1146       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1147       ServiceName: redis
1148
1149   # The public VIP is on the External net, falls back to ctlplane
1150   PublicVirtualIP:
1151     depends_on: Networks
1152     type: OS::TripleO::Network::Ports::ExternalVipPort
1153     properties:
1154       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1155       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1156       PortName: public_virtual_ip
1157       FixedIPs: {get_param: PublicVirtualFixedIPs}
1158
1159   InternalApiVirtualIP:
1160     depends_on: Networks
1161     type: OS::TripleO::Network::Ports::InternalApiVipPort
1162     properties:
1163       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1164       PortName: internal_api_virtual_ip
1165       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
1166
1167   StorageVirtualIP:
1168     depends_on: Networks
1169     type: OS::TripleO::Network::Ports::StorageVipPort
1170     properties:
1171       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1172       PortName: storage_virtual_ip
1173       FixedIPs: {get_param: StorageVirtualFixedIPs}
1174
1175   StorageMgmtVirtualIP:
1176     depends_on: Networks
1177     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1178     properties:
1179       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1180       PortName: storage_management_virtual_ip
1181       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
1182
1183   VipMap:
1184     type: OS::TripleO::Network::Ports::NetVipMap
1185     properties:
1186       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1187       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1188       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
1189       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1190       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
1191       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1192       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
1193       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1194       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
1195       # No tenant or management VIP required
1196
1197   VipConfig:
1198     type: OS::TripleO::VipConfig
1199
1200   VipDeployment:
1201     type: OS::Heat::StructuredDeployments
1202     properties:
1203       name: VipDeployment
1204       config: {get_resource: VipConfig}
1205       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1206       input_values:
1207         # service VIP mappings
1208         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1209         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1210         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1211         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1212         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1213         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1214         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1215         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1216         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1217         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1218         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1219         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1220         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1221         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1222         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1223         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1224         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1225         # direct configuration of Virtual IPs for each network
1226         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1227         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1228         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1229         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1230         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1231         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1232         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1233
1234   ControllerBootstrapNodeConfig:
1235     type: OS::TripleO::BootstrapNode::SoftwareConfig
1236     properties:
1237       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1238       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1239
1240   ControllerBootstrapNodeDeployment:
1241     type: OS::Heat::StructuredDeployments
1242     properties:
1243       name: ControllerBootstrapNodeDeployment
1244       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1245       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1246
1247   ControllerSwiftDeployment:
1248     type: OS::Heat::StructuredDeployments
1249     properties:
1250       name: ControllerSwiftDeployment
1251       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1252       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1253
1254   ObjectStorageSwiftDeployment:
1255     type: OS::Heat::StructuredDeployments
1256     properties:
1257       name: ObjectStorageSwiftDeployment
1258       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1259       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1260
1261   SwiftDevicesAndProxyConfig:
1262     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1263     properties:
1264       controller_swift_devices: {get_attr: [Controller, swift_device]}
1265       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1266       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1267
1268   ComputeCephDeployment:
1269     type: OS::Heat::StructuredDeployments
1270     properties:
1271       name: ComputeCephDeployment
1272       config: {get_attr: [CephClusterConfig, config_id]}
1273       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1274
1275   ControllerCephDeployment:
1276     type: OS::Heat::StructuredDeployments
1277     properties:
1278       name: ControllerCephDeployment
1279       config: {get_attr: [CephClusterConfig, config_id]}
1280       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1281
1282   CephStorageCephDeployment:
1283     type: OS::Heat::StructuredDeployments
1284     properties:
1285       name: CephStorageCephDeployment
1286       config: {get_attr: [CephClusterConfig, config_id]}
1287       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1288
1289   CephClusterConfig:
1290     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1291     properties:
1292       ceph_storage_count: {get_param: CephStorageCount}
1293       ceph_fsid: {get_param: CephClusterFSID}
1294       ceph_mon_key: {get_param: CephMonKey}
1295       ceph_admin_key: {get_param: CephAdminKey}
1296       ceph_client_key: {get_param: CephClientKey}
1297       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1298       ceph_mon_names: {get_attr: [Controller, hostname]}
1299       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1300
1301   ControllerAllNodesDeployment:
1302     type: OS::Heat::StructuredDeployments
1303     properties:
1304       name: ControllerAllNodesDeployment
1305       config: {get_attr: [allNodesConfig, config_id]}
1306       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1307
1308   ComputeAllNodesDeployment:
1309     type: OS::Heat::StructuredDeployments
1310     properties:
1311       name: ComputeAllNodesDeployment
1312       config: {get_attr: [allNodesConfig, config_id]}
1313       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1314
1315   BlockStorageAllNodesDeployment:
1316     type: OS::Heat::StructuredDeployments
1317     properties:
1318       name: BlockStorageAllNodesDeployment
1319       config: {get_attr: [allNodesConfig, config_id]}
1320       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1321
1322   ObjectStorageAllNodesDeployment:
1323     type: OS::Heat::StructuredDeployments
1324     properties:
1325       name: ObjectStorageAllNodesDeployment
1326       config: {get_attr: [allNodesConfig, config_id]}
1327       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1328
1329   CephStorageAllNodesDeployment:
1330     type: OS::Heat::StructuredDeployments
1331     properties:
1332       name: CephStorageAllNodesDeployment
1333       config: {get_attr: [allNodesConfig, config_id]}
1334       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1335
1336   # All Nodes Validations
1337   AllNodesValidationConfig:
1338     type: OS::TripleO::AllNodes::Validation
1339     properties:
1340       PingTestIps:
1341         list_join:
1342         - ' '
1343         - - {get_attr: [Controller, resource.0.external_ip_address]}
1344           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1345           - {get_attr: [Controller, resource.0.storage_ip_address]}
1346           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1347           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1348
1349   ControllerAllNodesValidationDeployment:
1350     type: OS::Heat::StructuredDeployments
1351     depends_on: ControllerAllNodesDeployment
1352     properties:
1353       name: ControllerAllNodesValidationDeployment
1354       config: {get_resource: AllNodesValidationConfig}
1355       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1356
1357   ComputeAllNodesValidationDeployment:
1358     type: OS::Heat::StructuredDeployments
1359     depends_on: ComputeAllNodesDeployment
1360     properties:
1361       name: ComputeAllNodesValidationDeployment
1362       config: {get_resource: AllNodesValidationConfig}
1363       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1364
1365   BlockStorageAllNodesValidationDeployment:
1366     type: OS::Heat::StructuredDeployments
1367     depends_on: BlockStorageAllNodesDeployment
1368     properties:
1369       name: BlockStorageAllNodesValidationDeployment
1370       config: {get_resource: AllNodesValidationConfig}
1371       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1372
1373   ObjectStorageAllNodesValidationDeployment:
1374     type: OS::Heat::StructuredDeployments
1375     depends_on: ObjectStorageAllNodesDeployment
1376     properties:
1377       name: ObjectStorageAllNodesValidationDeployment
1378       config: {get_resource: AllNodesValidationConfig}
1379       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1380
1381   CephStorageAllNodesValidationDeployment:
1382     type: OS::Heat::StructuredDeployments
1383     depends_on: CephStorageAllNodesDeployment
1384     properties:
1385       name: CephStorageAllNodesValidationDeployment
1386       config: {get_resource: AllNodesValidationConfig}
1387       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1388
1389   UpdateWorkflow:
1390     type: OS::TripleO::Tasks::UpdateWorkflow
1391     properties:
1392       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1393       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1394       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1395       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1396       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1397       input_values:
1398         deploy_identifier: {get_param: DeployIdentifier}
1399         update_identifier: {get_param: UpdateIdentifier}
1400
1401   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1402   # the nested template may configure each role differently (or not at all)
1403   AllNodesExtraConfig:
1404     type: OS::TripleO::AllNodesExtraConfig
1405     depends_on:
1406       - UpdateWorkflow
1407       - ComputeAllNodesValidationDeployment
1408       - BlockStorageAllNodesValidationDeployment
1409       - ObjectStorageAllNodesValidationDeployment
1410       - CephStorageAllNodesValidationDeployment
1411       - ControllerAllNodesValidationDeployment
1412     properties:
1413       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1414       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1415       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1416       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1417       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1418
1419   # Nested stack deployment runs after all other controller deployments
1420   ControllerNodesPostDeployment:
1421     type: OS::TripleO::ControllerPostDeployment
1422     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1423     properties:
1424       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1425       NodeConfigIdentifiers:
1426         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1427         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1428         deployment_identifier: {get_param: DeployIdentifier}
1429       StepConfig: {get_attr: [ControllerServiceChain, role_data, step_config]}
1430
1431   ComputeNodesPostDeployment:
1432     type: OS::TripleO::ComputePostDeployment
1433     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1434     properties:
1435       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1436       NodeConfigIdentifiers:
1437         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1438         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1439         deployment_identifier: {get_param: DeployIdentifier}
1440       StepConfig: {get_attr: [ComputeServiceChain, role_data, step_config]}
1441
1442   ObjectStorageNodesPostDeployment:
1443     type: OS::TripleO::ObjectStoragePostDeployment
1444     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1445     properties:
1446       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1447       NodeConfigIdentifiers:
1448         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1449         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1450         deployment_identifier: {get_param: DeployIdentifier}
1451       StepConfig: {get_attr: [ObjectStorageServiceChain, role_data, step_config]}
1452
1453   BlockStorageNodesPostDeployment:
1454     type: OS::TripleO::BlockStoragePostDeployment
1455     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1456     properties:
1457       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1458       NodeConfigIdentifiers:
1459         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1460         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1461         deployment_identifier: {get_param: DeployIdentifier}
1462       StepConfig: {get_attr: [BlockStorageServiceChain, role_data, step_config]}
1463
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       StepConfig: {get_attr: [CephStorageServiceChain, role_data, step_config]}
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]}