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