Specify availability zone to create instances and volumes

For clouds with separate AZs (like two independent fire compartments)
the cross_az_attach feature is typically used. But using this
feature the scenario tests in tempest will fail since Cinder/Nova
will schedule the AZ independently.

This patch introduces a new parameter compute_volume_common_az
to specify the availability zone to create instances and volumes,
so that we can confirm that these resources are created in the same
availability zone.

Change-Id: I565adbe2a3ebbdd1d73143380b976df1a9502d0f
Closes-bug: #1647999
This commit is contained in:
Marc Koderer 2016-12-08 10:07:59 +01:00 committed by Martin Kopec
parent 75944d33e9
commit 979e494da2
3 changed files with 30 additions and 0 deletions

View File

@ -0,0 +1,8 @@
---
features:
- |
A new parameter, compute/compute_volume_common_az is introduced to
specify availability zone where tempest creates instances and volumes
for scenario tests, to allow us to run scenario tests in the deployment
which has multiple availability zones and cinder/cross_az_attach in
nova.conf is set to False.

View File

@ -357,6 +357,19 @@ ComputeGroup = [
"If both values are not specified, Tempest avoids tests "
"which require a microversion. Valid values are string "
"with format 'X.Y' or string 'latest'"),
cfg.StrOpt('compute_volume_common_az',
default=None,
help='AZ to be used for Cinder and Nova. Set this parameter '
'when the cloud has nova.conf: cinder.cross_az_attach '
'set to false. Which means volumes attached to an '
'instance must be in the same availability zone in Cinder '
'as the instance availability zone in Nova. Set the '
'common availability zone in this config which will be '
'used to boot an instance as well as creating a volume. '
'NOTE: If that AZ is not in Cinder (or '
'allow_availability_zone_fallback=False in cinder.conf), '
'the volume create request will fail and the instance '
'will fail the build request.'),
]
placement_group = cfg.OptGroup(name='placement',

View File

@ -274,6 +274,10 @@ class ScenarioTest(tempest.test.BaseTestCase):
tenant_network = self.get_tenant_network()
if CONF.compute.compute_volume_common_az:
kwargs.setdefault('availability_zone',
CONF.compute.compute_volume_common_az)
body, _ = compute.create_test_server(
clients,
tenant_network=tenant_network,
@ -307,6 +311,11 @@ class ScenarioTest(tempest.test.BaseTestCase):
'imageRef': imageRef,
'volume_type': volume_type,
'size': size}
if CONF.compute.compute_volume_common_az:
kwargs.setdefault('availability_zone',
CONF.compute.compute_volume_common_az)
volume = self.volumes_client.create_volume(**kwargs)['volume']
self.addCleanup(self.volumes_client.wait_for_resource_deletion,