Availability-zone types
Background
In a newly deployed region environment, the volume types (SSD, HDD or
others) may only exist on part of the AZs, but end users have no idea
which AZ is allowed for one specific volume type and they can’t realize
that only when the volume failed to be scheduled to backend. In this
case, we have supported availability zone volume type in Rocky cycle
which administrators can take advantage of to fix that.
How to config
availability zone types?
We decided to use type’s extra-specs to store this additional info,
administrators can turn it on by updating volume type’s key
RESKEY:availability_zones
as below:
"RESKEY:availability_zones": "az1,az2,az3"
It’s an array list whose items are separated by comma and stored in
string. Once the availability zone type is configured, any UI component
or client can filter out invalid volume types based on their choice of
availability zone:
Request example:
/v3/{project_id}/types?extra_specs={'RESKEY:availability_zones':'az1'}
Remember, Cinder will always try inexact match for this spec value,
for instance, when extra spec RESKEY:availability_zones
is
configured with value az1,az2
, both az1
and
az2
are valid inputs for query, also this spec will not be
used during performing capability filter, instead it will be only used
for choosing suitable availability zones in these two cases below.
1. Create volume, within this feature, now we can specify
availability zone via parameter availability_zone
, volume
source (volume, snapshot, group), configuration option
default_availability_zone
and
storage_availability_zone
. When creating new volume, Cinder
will try to read the AZ(s) in the priority of:
source group > parameter availability_zone > source snapshot (or volume) > volume type > configuration default_availability_zone > storage_availability_zone
If there is a conflict between any of them, 400 BadRequest will be
raised, also now a AZ list instead of single AZ will be delivered to
AvailabilityZoneFilter
.
2. Retype volume, this flow also has been updated, if new type has
configured RESKEY:availability_zones
Cinder scheduler will
validate this as well.