From 449287d45ebcd435225f7aac86b7a2c953108a19 Mon Sep 17 00:00:00 2001 From: Ghanshyam Mann Date: Thu, 12 Dec 2019 16:36:57 +0000 Subject: [PATCH] Remove deprecated config options for volume API selection Volume APIs tests have been moved to v3 as default and can be run under v2 API via catalog_type. - https://review.opendev.org/#/q/topic:volume-default-testing-v3+(status:open+OR+status:merged) Below config options were deprecated since Rocky and now time to remove them: * ``CONF.volume-feature-enabled.api_v2`` * ``CONF.volume-feature-enabled.api_v3`` Change-Id: I31f487694e5f5e586f99323c81e45f43306606fb --- ...olume-config-options-4b7ea93b88e5b982.yaml | 9 + tempest/api/volume/base.py | 17 -- tempest/clients.py | 158 +++++++++--------- tempest/cmd/verify_tempest_config.py | 14 -- tempest/config.py | 25 --- .../tests/cmd/test_verify_tempest_config.py | 54 +----- 6 files changed, 90 insertions(+), 187 deletions(-) create mode 100644 releasenotes/notes/remove-deprecated-volume-config-options-4b7ea93b88e5b982.yaml diff --git a/releasenotes/notes/remove-deprecated-volume-config-options-4b7ea93b88e5b982.yaml b/releasenotes/notes/remove-deprecated-volume-config-options-4b7ea93b88e5b982.yaml new file mode 100644 index 0000000000..f3002f903c --- /dev/null +++ b/releasenotes/notes/remove-deprecated-volume-config-options-4b7ea93b88e5b982.yaml @@ -0,0 +1,9 @@ +--- +upgrade: + - | + Deprecated config options to select the Volume API version have been + removed. Use ``CONF.volume.catalog_type`` to run volume tests under v3 + or v2 APIs. + + * ``CONF.volume-feature-enabled.api_v2`` + * ``CONF.volume-feature-enabled.api_v3`` \ No newline at end of file diff --git a/tempest/api/volume/base.py b/tempest/api/volume/base.py index c538e60ca3..e5620fdc33 100644 --- a/tempest/api/volume/base.py +++ b/tempest/api/volume/base.py @@ -20,7 +20,6 @@ from tempest import config from tempest.lib.common import api_version_utils from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import test_utils -from tempest.lib import exceptions import tempest.test CONF = config.CONF @@ -34,11 +33,6 @@ class BaseVolumeTest(api_version_utils.BaseMicroversionTest, # https://bugs.launchpad.net/tempest/+bug/1844568 create_default_network = False _api_version = 2 - # if api_v2 is not enabled while api_v3 is enabled, the volume v2 classes - # should be transferred to volume v3 classes. - if (not CONF.volume_feature_enabled.api_v2 and - CONF.volume_feature_enabled.api_v3): - _api_version = 3 credentials = ['primary'] @classmethod @@ -48,17 +42,6 @@ class BaseVolumeTest(api_version_utils.BaseMicroversionTest, if not CONF.service_available.cinder: skip_msg = ("%s skipped as Cinder is not available" % cls.__name__) raise cls.skipException(skip_msg) - if cls._api_version == 2: - if not CONF.volume_feature_enabled.api_v2: - msg = "Volume API v2 is disabled" - raise cls.skipException(msg) - elif cls._api_version == 3: - if not CONF.volume_feature_enabled.api_v3: - msg = "Volume API v3 is disabled" - raise cls.skipException(msg) - else: - msg = ("Invalid Cinder API version (%s)" % cls._api_version) - raise exceptions.InvalidConfiguration(msg) api_version_utils.check_skip_with_microversion( cls.min_microversion, cls.max_microversion, diff --git a/tempest/clients.py b/tempest/clients.py index 6d19a0c742..9ff02ea7e0 100644 --- a/tempest/clients.py +++ b/tempest/clients.py @@ -231,89 +231,85 @@ class Manager(clients.ServiceClients): def _set_volume_clients(self): - # if only api_v3 is enabled, all these clients should be available - if (CONF.volume_feature_enabled.api_v2 or - CONF.volume_feature_enabled.api_v3): - self.backups_client_latest = self.volume_v3.BackupsClient() - self.encryption_types_client_latest = \ - self.volume_v3.EncryptionTypesClient() - self.snapshot_manage_client_latest = \ - self.volume_v3.SnapshotManageClient() - self.snapshots_client_latest = self.volume_v3.SnapshotsClient() - self.volume_capabilities_client_latest = \ - self.volume_v3.CapabilitiesClient() - self.volume_manage_client_latest = ( - self.volume_v3.VolumeManageClient()) - self.volume_qos_client_latest = self.volume_v3.QosSpecsClient() - self.volume_services_client_latest = ( - self.volume_v3.ServicesClient()) - self.volume_types_client_latest = self.volume_v3.TypesClient() - self.volume_hosts_client_latest = self.volume_v3.HostsClient() - self.volume_quotas_client_latest = self.volume_v3.QuotasClient() - self.volume_quota_classes_client_latest = \ - self.volume_v3.QuotaClassesClient() - self.volume_scheduler_stats_client_latest = \ - self.volume_v3.SchedulerStatsClient() - self.volume_transfers_client_latest = \ - self.volume_v3.TransfersClient() - self.volume_availability_zone_client_latest = \ - self.volume_v3.AvailabilityZoneClient() - self.volume_limits_client_latest = self.volume_v3.LimitsClient() - self.volumes_client_latest = self.volume_v3.VolumesClient() - self.volumes_extension_client_latest = \ - self.volume_v3.ExtensionsClient() - self.group_types_client_latest = self.volume_v3.GroupTypesClient() - self.groups_client_latest = self.volume_v3.GroupsClient() - self.group_snapshots_client_latest = \ - self.volume_v3.GroupSnapshotsClient() - self.volume_messages_client_latest = ( - self.volume_v3.MessagesClient()) - self.volume_versions_client_latest = ( - self.volume_v3.VersionsClient()) - self.attachments_client_latest = ( - self.volume_v3.AttachmentsClient()) + self.backups_client_latest = self.volume_v3.BackupsClient() + self.encryption_types_client_latest = \ + self.volume_v3.EncryptionTypesClient() + self.snapshot_manage_client_latest = \ + self.volume_v3.SnapshotManageClient() + self.snapshots_client_latest = self.volume_v3.SnapshotsClient() + self.volume_capabilities_client_latest = \ + self.volume_v3.CapabilitiesClient() + self.volume_manage_client_latest = ( + self.volume_v3.VolumeManageClient()) + self.volume_qos_client_latest = self.volume_v3.QosSpecsClient() + self.volume_services_client_latest = ( + self.volume_v3.ServicesClient()) + self.volume_types_client_latest = self.volume_v3.TypesClient() + self.volume_hosts_client_latest = self.volume_v3.HostsClient() + self.volume_quotas_client_latest = self.volume_v3.QuotasClient() + self.volume_quota_classes_client_latest = \ + self.volume_v3.QuotaClassesClient() + self.volume_scheduler_stats_client_latest = \ + self.volume_v3.SchedulerStatsClient() + self.volume_transfers_client_latest = \ + self.volume_v3.TransfersClient() + self.volume_availability_zone_client_latest = \ + self.volume_v3.AvailabilityZoneClient() + self.volume_limits_client_latest = self.volume_v3.LimitsClient() + self.volumes_client_latest = self.volume_v3.VolumesClient() + self.volumes_extension_client_latest = \ + self.volume_v3.ExtensionsClient() + self.group_types_client_latest = self.volume_v3.GroupTypesClient() + self.groups_client_latest = self.volume_v3.GroupsClient() + self.group_snapshots_client_latest = \ + self.volume_v3.GroupSnapshotsClient() + self.volume_messages_client_latest = ( + self.volume_v3.MessagesClient()) + self.volume_versions_client_latest = ( + self.volume_v3.VersionsClient()) + self.attachments_client_latest = ( + self.volume_v3.AttachmentsClient()) - # TODO(gmann): Below alias for service clients have been - # deprecated and will be removed in future. Start using the alias - # defined above with suffix _latest. - # ****************Deprecated alias start from here*************** - self.backups_v2_client = self.volume_v3.BackupsClient() - self.encryption_types_v2_client = \ - self.volume_v3.EncryptionTypesClient() - self.snapshot_manage_v2_client = \ - self.volume_v3.SnapshotManageClient() - self.snapshots_v2_client = self.volume_v3.SnapshotsClient() - self.volume_capabilities_v2_client = \ - self.volume_v3.CapabilitiesClient() - self.volume_manage_v2_client = self.volume_v3.VolumeManageClient() - self.volume_qos_v2_client = self.volume_v3.QosSpecsClient() - self.volume_services_v2_client = self.volume_v3.ServicesClient() - self.volume_types_v2_client = self.volume_v3.TypesClient() - self.volume_hosts_v2_client = self.volume_v3.HostsClient() - self.volume_quotas_v2_client = self.volume_v3.QuotasClient() - self.volume_quota_classes_v2_client = \ - self.volume_v3.QuotaClassesClient() - self.volume_scheduler_stats_v2_client = \ - self.volume_v3.SchedulerStatsClient() - self.volume_transfers_v2_client = self.volume_v3.TransfersClient() - self.volume_v2_availability_zone_client = \ - self.volume_v3.AvailabilityZoneClient() - self.volume_v2_limits_client = self.volume_v3.LimitsClient() - self.volumes_v2_client = self.volume_v3.VolumesClient() - self.volumes_v2_extension_client = \ - self.volume_v3.ExtensionsClient() + # TODO(gmann): Below alias for service clients have been + # deprecated and will be removed in future. Start using the alias + # defined above with suffix _latest. + # ****************Deprecated alias start from here*************** + self.backups_v2_client = self.volume_v3.BackupsClient() + self.encryption_types_v2_client = \ + self.volume_v3.EncryptionTypesClient() + self.snapshot_manage_v2_client = \ + self.volume_v3.SnapshotManageClient() + self.snapshots_v2_client = self.volume_v3.SnapshotsClient() + self.volume_capabilities_v2_client = \ + self.volume_v3.CapabilitiesClient() + self.volume_manage_v2_client = self.volume_v3.VolumeManageClient() + self.volume_qos_v2_client = self.volume_v3.QosSpecsClient() + self.volume_services_v2_client = self.volume_v3.ServicesClient() + self.volume_types_v2_client = self.volume_v3.TypesClient() + self.volume_hosts_v2_client = self.volume_v3.HostsClient() + self.volume_quotas_v2_client = self.volume_v3.QuotasClient() + self.volume_quota_classes_v2_client = \ + self.volume_v3.QuotaClassesClient() + self.volume_scheduler_stats_v2_client = \ + self.volume_v3.SchedulerStatsClient() + self.volume_transfers_v2_client = self.volume_v3.TransfersClient() + self.volume_v2_availability_zone_client = \ + self.volume_v3.AvailabilityZoneClient() + self.volume_v2_limits_client = self.volume_v3.LimitsClient() + self.volumes_v2_client = self.volume_v3.VolumesClient() + self.volumes_v2_extension_client = \ + self.volume_v3.ExtensionsClient() - 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.group_snapshots_v3_client = \ - self.volume_v3.GroupSnapshotsClient() - self.snapshots_v3_client = self.volume_v3.SnapshotsClient() - 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() - # ****************Deprecated alias end here*********************** + 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.group_snapshots_v3_client = \ + self.volume_v3.GroupSnapshotsClient() + self.snapshots_v3_client = self.volume_v3.SnapshotsClient() + 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() + # ****************Deprecated alias end here*********************** def _set_object_storage_clients(self): self.account_client = self.object_storage.AccountClient() diff --git a/tempest/cmd/verify_tempest_config.py b/tempest/cmd/verify_tempest_config.py index 235d8e3e66..0db1ab1577 100644 --- a/tempest/cmd/verify_tempest_config.py +++ b/tempest/cmd/verify_tempest_config.py @@ -202,22 +202,8 @@ def verify_keystone_api_versions(os, update): not CONF.identity_feature_enabled.api_v3, update) -def verify_cinder_api_versions(os, update): - # Check cinder api versions - versions = _get_api_versions(os, 'cinder') - if (CONF.volume_feature_enabled.api_v2 != - contains_version('v2.', versions)): - print_and_or_update('api_v2', 'volume-feature-enabled', - not CONF.volume_feature_enabled.api_v2, update) - if (CONF.volume_feature_enabled.api_v3 != - contains_version('v3.', versions)): - print_and_or_update('api_v3', 'volume-feature-enabled', - not CONF.volume_feature_enabled.api_v3, update) - - def verify_api_versions(os, service, update): verify = { - 'cinder': verify_cinder_api_versions, 'glance': verify_glance_api_versions, 'keystone': verify_keystone_api_versions, } diff --git a/tempest/config.py b/tempest/config.py index 382b80f11e..c8ae35d8bd 100644 --- a/tempest/config.py +++ b/tempest/config.py @@ -1007,31 +1007,6 @@ VolumeFeaturesGroup = [ help='A list of enabled volume extensions with a special ' 'entry all which indicates every extension is enabled. ' 'Empty list indicates all extensions are disabled'), - cfg.BoolOpt('api_v2', - default=True, - help="Is the v2 volume API enabled", - deprecated_for_removal=True, - deprecated_reason="The v2 volume API has been deprecated " - "since Pike release. Now Tempest run all " - "the volume tests against v2 or v3 API " - "based on CONF.volume.catalog_type which " - "makes this config option unusable. If " - "catalog_type is volumev2, then all the " - "volume tests will run against v2 API. " - "Use ``CONF.volume.catalog_type`` to run " - "the Tempest against volume v2 or v3 API"), - cfg.BoolOpt('api_v3', - default=True, - help="Is the v3 volume API enabled", - deprecated_for_removal=True, - deprecated_reason="Tempest run all the volume tests against " - "v2 or v3 API based on " - "CONF.volume.catalog_type which makes this " - "config option unusable. If catalog_type is " - "volumev3 which is default, then all the " - "volume tests will run against v3 API. " - "Use ``CONF.volume.catalog_type`` to run " - "the Tempest against volume v2 or v3 API"), cfg.BoolOpt('extend_attached_volume', default=False, help='Does the cloud support extending the size of a volume ' diff --git a/tempest/tests/cmd/test_verify_tempest_config.py b/tempest/tests/cmd/test_verify_tempest_config.py index 277e0498f9..e19efb7453 100644 --- a/tempest/tests/cmd/test_verify_tempest_config.py +++ b/tempest/tests/cmd/test_verify_tempest_config.py @@ -97,15 +97,15 @@ class TestDiscovery(base.TestCase): self.useFixture(fixtures.MockPatchObject( verify_tempest_config, '_get_unversioned_endpoint', return_value='http://fake_endpoint:5000')) - fake_resp = {'versions': [{'id': 'v1.0'}, {'id': 'v2.0'}]} + fake_resp = {'versions': [{'id': 'v2.0'}, {'id': 'v3.0'}]} fake_resp = json.dumps(fake_resp) self.useFixture(fixtures.MockPatch( 'tempest.lib.common.http.ClosingHttp.request', return_value=(None, fake_resp))) fake_os = mock.MagicMock() versions = verify_tempest_config._get_api_versions(fake_os, 'cinder') - self.assertIn('v1.0', versions) self.assertIn('v2.0', versions) + self.assertIn('v3.0', versions) def test_get_nova_versions(self): self.useFixture(fixtures.MockPatchObject( @@ -145,7 +145,7 @@ class TestDiscovery(base.TestCase): self.assertTrue(mock_log_error.called) def test_verify_api_versions(self): - api_services = ['cinder', 'glance', 'keystone'] + api_services = ['glance', 'keystone'] fake_os = mock.MagicMock() for svc in api_services: m = 'verify_%s_api_versions' % svc @@ -154,7 +154,7 @@ class TestDiscovery(base.TestCase): verify_mock.assert_called_once_with(fake_os, True) def test_verify_api_versions_not_implemented(self): - api_services = ['cinder', 'glance', 'keystone'] + api_services = ['glance', 'keystone'] fake_os = mock.MagicMock() for svc in api_services: m = 'verify_%s_api_versions' % svc @@ -178,52 +178,6 @@ class TestDiscovery(base.TestCase): 'identity-feature-enabled', False, True) - @mock.patch('tempest.lib.common.http.ClosingHttp.request') - def test_verify_cinder_api_versions_no_v3(self, mock_request): - self.useFixture(fixtures.MockPatchObject( - verify_tempest_config, '_get_unversioned_endpoint', - return_value='http://fake_endpoint:5000')) - fake_resp = {'versions': [{'id': 'v2.0'}]} - fake_resp = json.dumps(fake_resp) - mock_request.return_value = (None, fake_resp) - fake_os = mock.MagicMock() - with mock.patch.object(verify_tempest_config, - 'print_and_or_update') as print_mock: - verify_tempest_config.verify_cinder_api_versions(fake_os, True) - print_mock.assert_any_call('api_v3', 'volume-feature-enabled', - False, True) - self.assertEqual(1, print_mock.call_count) - - @mock.patch('tempest.lib.common.http.ClosingHttp.request') - def test_verify_cinder_api_versions_no_v2(self, mock_request): - self.useFixture(fixtures.MockPatchObject( - verify_tempest_config, '_get_unversioned_endpoint', - return_value='http://fake_endpoint:5000')) - fake_resp = {'versions': [{'id': 'v3.0'}]} - fake_resp = json.dumps(fake_resp) - mock_request.return_value = (None, fake_resp) - fake_os = mock.MagicMock() - with mock.patch.object(verify_tempest_config, - 'print_and_or_update') as print_mock: - verify_tempest_config.verify_cinder_api_versions(fake_os, True) - print_mock.assert_any_call('api_v2', 'volume-feature-enabled', - False, True) - self.assertEqual(1, print_mock.call_count) - - @mock.patch('tempest.lib.common.http.ClosingHttp.request') - def test_verify_cinder_api_versions_no_v1(self, mock_request): - self.useFixture(fixtures.MockPatchObject( - verify_tempest_config, '_get_unversioned_endpoint', - return_value='http://fake_endpoint:5000')) - fake_resp = {'versions': [{'id': 'v2.0'}, {'id': 'v3.0'}]} - fake_resp = json.dumps(fake_resp) - mock_request.return_value = (None, fake_resp) - fake_os = mock.MagicMock() - with mock.patch.object(verify_tempest_config, - 'print_and_or_update') as print_mock: - verify_tempest_config.verify_cinder_api_versions(fake_os, True) - print_mock.assert_not_called() - def test_verify_glance_version_no_v2_with_v1_1(self): # This test verifies that wrong config api_v2 = True is detected class FakeClient(object):