Merge "Migrate resource filter commands to SDK"

This commit is contained in:
Zuul 2023-10-31 10:25:55 +00:00 committed by Gerrit Code Review
commit c258d196a4
4 changed files with 73 additions and 26 deletions

View File

@ -18,6 +18,7 @@ from cinderclient import api_versions
from openstack.block_storage.v3 import _proxy
from openstack.block_storage.v3 import availability_zone as _availability_zone
from openstack.block_storage.v3 import extension as _extension
from openstack.block_storage.v3 import resource_filter as _filters
from openstack.block_storage.v3 import volume as _volume
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
@ -243,7 +244,7 @@ def create_one_resource_filter(attrs=None):
# Overwrite default attributes if there are some attributes set
resource_filter_info.update(attrs)
return fakes.FakeResource(None, resource_filter_info, loaded=True)
return _filters.ResourceFilter(**resource_filter_info)
def create_resource_filters(attrs=None, count=2):

View File

@ -10,7 +10,11 @@
# License for the specific language governing permissions and limitations
# under the License.
from unittest import mock
from cinderclient import api_versions
from openstack import utils as sdk_utils
from osc_lib.cli import format_columns
from osc_lib import exceptions
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
@ -21,9 +25,22 @@ class TestBlockStorageResourceFilter(volume_fakes.TestVolume):
def setUp(self):
super().setUp()
# Get a shortcut to the ResourceFilterManager Mock
self.resource_filter_mock = self.volume_client.resource_filters
self.resource_filter_mock.reset_mock()
patcher = mock.patch.object(
sdk_utils, 'supports_microversion', return_value=True
)
self.addCleanup(patcher.stop)
self.supports_microversion_mock = patcher.start()
self._set_mock_microversion(
self.app.client_manager.volume.api_version.get_string()
)
def _set_mock_microversion(self, mock_v):
"""Set a specific microversion for the mock supports_microversion()."""
self.supports_microversion_mock.reset_mock(return_value=True)
self.supports_microversion_mock.side_effect = (
lambda _, v: api_versions.APIVersion(v)
<= api_versions.APIVersion(mock_v)
)
class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
@ -33,7 +50,7 @@ class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
def setUp(self):
super().setUp()
self.resource_filter_mock.list.return_value = (
self.volume_sdk_client.resource_filters.return_value = (
self.fake_resource_filters
)
@ -45,7 +62,7 @@ class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
)
def test_resource_filter_list(self):
self.volume_client.api_version = api_versions.APIVersion('3.33')
self._set_mock_microversion('3.33')
arglist = []
verifylist = []
@ -55,7 +72,7 @@ class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
expected_data = tuple(
(
resource_filter.resource,
resource_filter.filters,
format_columns.ListColumn(resource_filter.filters),
)
for resource_filter in self.fake_resource_filters
)
@ -65,10 +82,10 @@ class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
self.assertEqual(expected_data, tuple(data))
# checking if proper call was made to list clusters
self.resource_filter_mock.list.assert_called_with()
self.volume_sdk_client.resource_filters.assert_called_with()
def test_resource_filter_list_pre_v333(self):
self.volume_client.api_version = api_versions.APIVersion('3.32')
self._set_mock_microversion('3.32')
arglist = []
verifylist = []
@ -89,7 +106,7 @@ class TestBlockStorageResourceFilterShow(TestBlockStorageResourceFilter):
def setUp(self):
super().setUp()
self.resource_filter_mock.list.return_value = iter(
self.volume_sdk_client.resource_filters.return_value = iter(
[self.fake_resource_filter]
)
@ -101,7 +118,7 @@ class TestBlockStorageResourceFilterShow(TestBlockStorageResourceFilter):
)
def test_resource_filter_show(self):
self.volume_client.api_version = api_versions.APIVersion('3.33')
self._set_mock_microversion('3.33')
arglist = [
self.fake_resource_filter.resource,
@ -111,10 +128,10 @@ class TestBlockStorageResourceFilterShow(TestBlockStorageResourceFilter):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
expected_columns = ('filters', 'resource')
expected_columns = ('Resource', 'Filters')
expected_data = (
self.fake_resource_filter.filters,
self.fake_resource_filter.resource,
format_columns.ListColumn(self.fake_resource_filter.filters),
)
columns, data = self.cmd.take_action(parsed_args)
@ -122,10 +139,12 @@ class TestBlockStorageResourceFilterShow(TestBlockStorageResourceFilter):
self.assertEqual(expected_data, data)
# checking if proper call was made to list clusters
self.resource_filter_mock.list.assert_called_with(resource='volume')
self.volume_sdk_client.resource_filters.assert_called_with(
resource='volume'
)
def test_resource_filter_show_pre_v333(self):
self.volume_client.api_version = api_versions.APIVersion('3.32')
self._set_mock_microversion('3.32')
arglist = [
self.fake_resource_filter.resource,

View File

@ -12,7 +12,8 @@
"""Volume V3 Resource Filters implementations"""
from cinderclient import api_versions
from openstack import utils as sdk_utils
from osc_lib.cli import format_columns
from osc_lib.command import command
from osc_lib import exceptions
from osc_lib import utils
@ -24,9 +25,9 @@ class ListBlockStorageResourceFilter(command.Lister):
_description = _('List block storage resource filters')
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_client = self.app.client_manager.sdk_connection.volume
if volume_client.api_version < api_versions.APIVersion('3.33'):
if not sdk_utils.supports_microversion(volume_client, '3.33'):
msg = _(
"--os-volume-api-version 3.33 or greater is required to "
"support the 'block storage resource filter list' command"
@ -37,12 +38,20 @@ class ListBlockStorageResourceFilter(command.Lister):
'Resource',
'Filters',
)
columns = (
'resource',
'filters',
)
data = volume_client.resource_filters.list()
data = volume_client.resource_filters()
formatters = {'filters': format_columns.ListColumn}
return (
column_headers,
(utils.get_item_properties(s, column_headers) for s in data),
(
utils.get_item_properties(s, columns, formatters=formatters)
for s in data
),
)
@ -60,18 +69,16 @@ class ShowBlockStorageResourceFilter(command.ShowOne):
return parser
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_client = self.app.client_manager.sdk_connection.volume
if volume_client.api_version < api_versions.APIVersion('3.33'):
if not sdk_utils.supports_microversion(volume_client, '3.33'):
msg = _(
"--os-volume-api-version 3.33 or greater is required to "
"support the 'block storage resource filter show' command"
)
raise exceptions.CommandError(msg)
data = volume_client.resource_filters.list(
resource=parsed_args.resource
)
data = volume_client.resource_filters(resource=parsed_args.resource)
if not data:
msg = _(
"No resource filter with a name of {parsed_args.resource}' "
@ -80,4 +87,19 @@ class ShowBlockStorageResourceFilter(command.ShowOne):
raise exceptions.CommandError(msg)
resource_filter = next(data)
return zip(*sorted(resource_filter._info.items()))
column_headers = (
'Resource',
'Filters',
)
columns = (
'resource',
'filters',
)
formatters = {'filters': format_columns.ListColumn}
return (
column_headers,
utils.get_dict_properties(
resource_filter, columns, formatters=formatters
),
)

View File

@ -0,0 +1,5 @@
---
fixes:
- |
Migrated ``block storage resource filters list`` and
``block storage resource filters show`` commands to SDK.