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