From ff5f0c14f737eca84d8318d631a673e0e1aba1c6 Mon Sep 17 00:00:00 2001 From: Sean McGinnis Date: Fri, 7 Jul 2017 16:39:24 -0500 Subject: [PATCH] Handle volume API version enablement This is a start to have tempest handle Cinder API versions based on what is actually enabled. There are currently a lot of places in the code the assume v1 and v2 are available, but those versions may be disabled, especially as we try to get everyone moved onto the latest (final?) v3 API version. There are more areas that should be fixed up before we can actually just work with v3 only, but this is a start to get there. Closes-bug: #1703044 Change-Id: Icc2e12f06c3b4899f934f000e191552f4a5cd2a9 --- .../api/volume/admin/test_volume_quotas.py | 2 +- .../volume/admin/test_volume_type_access.py | 2 +- tempest/clients.py | 100 ++++++++++-------- tempest/cmd/verify_tempest_config.py | 2 +- 4 files changed, 60 insertions(+), 46 deletions(-) diff --git a/tempest/api/volume/admin/test_volume_quotas.py b/tempest/api/volume/admin/test_volume_quotas.py index f358d7f7d8..754104e04d 100644 --- a/tempest/api/volume/admin/test_volume_quotas.py +++ b/tempest/api/volume/admin/test_volume_quotas.py @@ -36,7 +36,7 @@ class BaseVolumeQuotasAdminTestJSON(base.BaseVolumeAdminTest): def setup_credentials(cls): super(BaseVolumeQuotasAdminTestJSON, cls).setup_credentials() cls.demo_tenant_id = cls.os_primary.credentials.tenant_id - cls.alt_client = cls.os_alt.volumes_client + cls.alt_client = cls.os_alt.volumes_client_latest @classmethod def setup_clients(cls): diff --git a/tempest/api/volume/admin/test_volume_type_access.py b/tempest/api/volume/admin/test_volume_type_access.py index 297ab6e06c..e93bcb5ff2 100644 --- a/tempest/api/volume/admin/test_volume_type_access.py +++ b/tempest/api/volume/admin/test_volume_type_access.py @@ -30,7 +30,7 @@ class VolumeTypesAccessTest(base.BaseVolumeAdminTest): @classmethod def setup_clients(cls): super(VolumeTypesAccessTest, cls).setup_clients() - cls.alt_client = cls.os_alt.volumes_client + cls.alt_client = cls.os_alt.volumes_client_latest @decorators.idempotent_id('d4dd0027-835f-4554-a6e5-50903fb79184') def test_volume_type_access_add(self): diff --git a/tempest/clients.py b/tempest/clients.py index 467ef9cd5c..ef4060f5fa 100644 --- a/tempest/clients.py +++ b/tempest/clients.py @@ -229,49 +229,63 @@ class Manager(clients.ServiceClients): def _set_volume_clients(self): - self.volume_qos_client = self.volume_v1.QosSpecsClient() - self.volume_qos_v2_client = self.volume_v2.QosSpecsClient() - self.volume_services_client = self.volume_v1.ServicesClient() - self.volume_services_v2_client = self.volume_v2.ServicesClient() - self.backups_client = self.volume_v1.BackupsClient() - self.backups_v2_client = self.volume_v2.BackupsClient() - self.backups_v3_client = self.volume_v3.BackupsClient() - self.encryption_types_client = self.volume_v1.EncryptionTypesClient() - self.encryption_types_v2_client = \ - self.volume_v2.EncryptionTypesClient() - self.snapshot_manage_v2_client = self.volume_v2.SnapshotManageClient() - self.snapshots_client = self.volume_v1.SnapshotsClient() - self.snapshots_v2_client = self.volume_v2.SnapshotsClient() - self.volume_manage_v2_client = self.volume_v2.VolumeManageClient() - self.volumes_client = self.volume_v1.VolumesClient() - self.volumes_v2_client = self.volume_v2.VolumesClient() - self.volumes_v3_client = self.volume_v3.VolumesClient() - self.volume_v3_messages_client = self.volume_v3.MessagesClient() - self.volume_v3_versions_client = self.volume_v3.VersionsClient() - self.volume_types_client = self.volume_v1.TypesClient() - self.volume_types_v2_client = self.volume_v2.TypesClient() - self.volume_hosts_client = self.volume_v1.HostsClient() - self.volume_hosts_v2_client = self.volume_v2.HostsClient() - self.volume_quotas_client = self.volume_v1.QuotasClient() - self.volume_quotas_v2_client = self.volume_v2.QuotasClient() - self.volume_quota_classes_v2_client = \ - self.volume_v2.QuotaClassesClient() - self.volumes_extension_client = self.volume_v1.ExtensionsClient() - self.volumes_v2_extension_client = self.volume_v2.ExtensionsClient() - self.groups_v3_client = self.volume_v3.GroupsClient() - self.group_types_v3_client = self.volume_v3.GroupTypesClient() - self.volume_availability_zone_client = \ - self.volume_v1.AvailabilityZoneClient() - self.volume_v2_availability_zone_client = \ - self.volume_v2.AvailabilityZoneClient() - self.volume_limits_client = self.volume_v1.LimitsClient() - self.volume_v2_limits_client = self.volume_v2.LimitsClient() - self.volume_capabilities_v2_client = \ - self.volume_v2.CapabilitiesClient() - self.volume_scheduler_stats_v2_client = \ - self.volume_v2.SchedulerStatsClient() - self.volume_transfers_v2_client = \ - self.volume_v2.TransfersClient() + if CONF.volume_feature_enabled.api_v1: + self.backups_client = self.volume_v1.BackupsClient() + self.encryption_types_client = \ + self.volume_v1.EncryptionTypesClient() + self.snapshots_client = self.volume_v1.SnapshotsClient() + self.volume_availability_zone_client = \ + self.volume_v1.AvailabilityZoneClient() + self.volume_hosts_client = self.volume_v1.HostsClient() + self.volume_limits_client = self.volume_v1.LimitsClient() + self.volume_qos_client = self.volume_v1.QosSpecsClient() + self.volume_quotas_client = self.volume_v1.QuotasClient() + self.volume_services_client = self.volume_v1.ServicesClient() + self.volume_types_client = self.volume_v1.TypesClient() + self.volumes_client = self.volume_v1.VolumesClient() + self.volumes_extension_client = self.volume_v1.ExtensionsClient() + + if CONF.volume_feature_enabled.api_v2: + self.backups_v2_client = self.volume_v2.BackupsClient() + self.encryption_types_v2_client = \ + self.volume_v2.EncryptionTypesClient() + self.snapshot_manage_v2_client = \ + self.volume_v2.SnapshotManageClient() + self.snapshots_v2_client = self.volume_v2.SnapshotsClient() + self.volume_capabilities_v2_client = \ + self.volume_v2.CapabilitiesClient() + self.volume_manage_v2_client = self.volume_v2.VolumeManageClient() + self.volume_qos_v2_client = self.volume_v2.QosSpecsClient() + self.volume_services_v2_client = self.volume_v2.ServicesClient() + self.volume_types_v2_client = self.volume_v2.TypesClient() + self.volume_hosts_v2_client = self.volume_v2.HostsClient() + self.volume_quotas_v2_client = self.volume_v2.QuotasClient() + self.volume_quota_classes_v2_client = \ + self.volume_v2.QuotaClassesClient() + self.volume_scheduler_stats_v2_client = \ + self.volume_v2.SchedulerStatsClient() + self.volume_transfers_v2_client = \ + self.volume_v2.TransfersClient() + self.volume_v2_availability_zone_client = \ + self.volume_v2.AvailabilityZoneClient() + self.volume_v2_limits_client = self.volume_v2.LimitsClient() + self.volumes_v2_client = self.volume_v2.VolumesClient() + self.volumes_v2_extension_client = \ + self.volume_v2.ExtensionsClient() + + # Set default client for users that don't need explicit version + self.volumes_client_latest = self.volumes_v2_client + + if CONF.volume_feature_enabled.api_v3: + self.backups_v3_client = self.volume_v3.BackupsClient() + self.group_types_v3_client = self.volume_v3.GroupTypesClient() + self.groups_v3_client = self.volume_v3.GroupsClient() + self.volume_v3_messages_client = self.volume_v3.MessagesClient() + self.volume_v3_versions_client = self.volume_v3.VersionsClient() + self.volumes_v3_client = self.volume_v3.VolumesClient() + + # Set default client for users that don't need explicit version + self.volumes_client_latest = self.volumes_v3_client def _set_object_storage_clients(self): # NOTE(andreaf) Load configuration from config. Once object storage diff --git a/tempest/cmd/verify_tempest_config.py b/tempest/cmd/verify_tempest_config.py index 0972a3c88a..2f4d120fc7 100644 --- a/tempest/cmd/verify_tempest_config.py +++ b/tempest/cmd/verify_tempest_config.py @@ -95,7 +95,7 @@ def _get_api_versions(os, service): client_dict = { 'nova': os.servers_client, 'keystone': os.identity_client, - 'cinder': os.volumes_client, + 'cinder': os.volumes_client_latest, } if service != 'keystone' and service != 'cinder': # Since keystone and cinder may be listening on a path,