Update multiattach tests
Multiattach tests use legacy format to create multiattach
volumes i.e. provide "multiattach=True" in request body of
a create volume operation.
This patch updates the multiattach tests to use multiattach
volume type, which is the standard and only way[1], to create
multiattach volumes.
Note that the old functionality will be changed by patch[2] and
passing multiattach=True in volume create request body will
error out with BadRequest.
Devstack will create the multiattach volume type, like an
operator will create in a real deployment, and set it as a
tempest config option (see depends on patch).
We are adding a new config option `volume_type_multiattach`
which is used as the multiattach volume type to create
multiattach volumes.
[1] https://docs.openstack.org/cinder/latest/admin/volume-multiattach.html#how-to-create-a-multiattach-volume
[2] https://review.opendev.org/c/openstack/cinder/+/874865
Depends-On: https://review.opendev.org/c/openstack/devstack/+/877337
Depends-On: https://review.opendev.org/c/openstack/devstack/+/877497
Depends-On: https://review.opendev.org/c/openstack/devstack/+/877548
Depends-On: https://review.opendev.org/c/openstack/devstack/+/877498
Depends-On: https://review.opendev.org/c/openstack/devstack/+/877499
Related-prod: PRODX-32154
Change-Id: I5f68ef56fcc55dfc636936dabb5e6ad761579519
diff --git a/tempest/api/compute/admin/test_volume_swap.py b/tempest/api/compute/admin/test_volume_swap.py
index b4bbbc9..047a540 100644
--- a/tempest/api/compute/admin/test_volume_swap.py
+++ b/tempest/api/compute/admin/test_volume_swap.py
@@ -156,6 +156,8 @@
super(TestMultiAttachVolumeSwap, cls).skip_checks()
if not CONF.compute_feature_enabled.volume_multiattach:
raise cls.skipException('Volume multi-attach is not available.')
+ if not CONF.compute_feature_enabled.volume_type_multiattach:
+ raise cls.skipException('Multi-attach volume type is not defined')
@classmethod
def setup_clients(cls):
@@ -192,11 +194,13 @@
"server1"
8. Check "volume2" is attached to "server1".
"""
+ multiattach_vol_type = CONF.compute_feature_enabled.\
+ volume_type_multiattach
# Create two volumes.
# NOTE(gmann): Volumes are created before server creation so that
# volumes cleanup can happen successfully irrespective of which volume
# is attached to server.
- volume1 = self.create_volume(multiattach=True)
+ volume1 = self.create_volume(volume_type=multiattach_vol_type)
# Make volume1 read-only since you can't swap from a volume with
# multiple read/write attachments, and you can't change the readonly
# flag on an in-use volume so we have to do this before attaching
@@ -204,7 +208,7 @@
# attach modes, then we can handle this differently.
self.admin_volumes_client.update_volume_readonly(
volume1['id'], readonly=True)
- volume2 = self.create_volume(multiattach=True)
+ volume2 = self.create_volume(volume_type=multiattach_vol_type)
# Create two servers and wait for them to be ACTIVE.
reservation_id = self.create_test_server(
diff --git a/tempest/api/compute/admin/test_volumes_negative.py b/tempest/api/compute/admin/test_volumes_negative.py
index 24b0a52..96076ea 100644
--- a/tempest/api/compute/admin/test_volumes_negative.py
+++ b/tempest/api/compute/admin/test_volumes_negative.py
@@ -85,6 +85,8 @@
super(UpdateMultiattachVolumeNegativeTest, cls).skip_checks()
if not CONF.compute_feature_enabled.volume_multiattach:
raise cls.skipException('Volume multi-attach is not available.')
+ if not CONF.compute_feature_enabled.volume_type_multiattach:
+ raise cls.skipException('Multi-attach volume type is not defined')
@decorators.attr(type=['negative'])
@decorators.idempotent_id('7576d497-b7c6-44bd-9cc5-c5b4e50fec71')
@@ -100,9 +102,12 @@
5. Check "vol1" is still attached to both servers
6. Check "vol2" is not attached to any server
"""
+ multiattach_vol_type = CONF.compute_feature_enabled.\
+ volume_type_multiattach
+
# Create two multiattach capable volumes.
- vol1 = self.create_volume(multiattach=True)
- vol2 = self.create_volume(multiattach=True)
+ vol1 = self.create_volume(volume_type=multiattach_vol_type)
+ vol2 = self.create_volume(volume_type=multiattach_vol_type)
# Create two instances.
server1 = self.create_test_server(wait_until='ACTIVE')
diff --git a/tempest/api/compute/volumes/test_attach_volume.py b/tempest/api/compute/volumes/test_attach_volume.py
index ba02a4c..617b3a0 100644
--- a/tempest/api/compute/volumes/test_attach_volume.py
+++ b/tempest/api/compute/volumes/test_attach_volume.py
@@ -342,6 +342,8 @@
super(AttachVolumeMultiAttachTest, cls).skip_checks()
if not CONF.compute_feature_enabled.volume_multiattach:
raise cls.skipException('Volume multi-attach is not available.')
+ if not CONF.compute_feature_enabled.volume_type_multiattach:
+ raise cls.skipException('Multi-attach volume type is not defined')
def _attach_volume_to_servers(self, volume, servers):
"""Attaches the given volume to the list of servers.
@@ -383,7 +385,10 @@
kwargs = {}
if bootable:
kwargs['image_ref'] = CONF.compute.image_ref
- return self.create_volume(multiattach=True, **kwargs)
+ multiattach_vol_type = CONF.compute_feature_enabled.\
+ volume_type_multiattach
+ return self.create_volume(volume_type=multiattach_vol_type,
+ **kwargs)
def _create_and_multiattach(self):
"""Creates two server instances and a volume and attaches to both.
diff --git a/tempest/config.py b/tempest/config.py
index 6768f95..41baf4e 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -654,6 +654,10 @@
help='Does the test environment support attaching a volume to '
'more than one instance? This depends on hypervisor and '
'volume backend/type and compute API version 2.60.'),
+ cfg.StrOpt('volume_type_multiattach',
+ default='',
+ help='Multiattach volume type used while creating multiattach '
+ 'volume. When empty multiattach tests are skipped'),
cfg.BoolOpt('xenapi_apis',
default=False,
help='Does the test environment support the XenAPI-specific '