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