Skip to content

Commit c258d19

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Migrate resource filter commands to SDK"
2 parents 43cec26 + ae10851 commit c258d19

4 files changed

Lines changed: 73 additions & 26 deletions

File tree

openstackclient/tests/unit/volume/v3/fakes.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from openstack.block_storage.v3 import _proxy
1919
from openstack.block_storage.v3 import availability_zone as _availability_zone
2020
from openstack.block_storage.v3 import extension as _extension
21+
from openstack.block_storage.v3 import resource_filter as _filters
2122
from openstack.block_storage.v3 import volume as _volume
2223

2324
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
@@ -243,7 +244,7 @@ def create_one_resource_filter(attrs=None):
243244
# Overwrite default attributes if there are some attributes set
244245
resource_filter_info.update(attrs)
245246

246-
return fakes.FakeResource(None, resource_filter_info, loaded=True)
247+
return _filters.ResourceFilter(**resource_filter_info)
247248

248249

249250
def create_resource_filters(attrs=None, count=2):

openstackclient/tests/unit/volume/v3/test_block_storage_resource_filter.py

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010
# License for the specific language governing permissions and limitations
1111
# under the License.
1212

13+
from unittest import mock
14+
1315
from cinderclient import api_versions
16+
from openstack import utils as sdk_utils
17+
from osc_lib.cli import format_columns
1418
from osc_lib import exceptions
1519

1620
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
@@ -21,9 +25,22 @@ class TestBlockStorageResourceFilter(volume_fakes.TestVolume):
2125
def setUp(self):
2226
super().setUp()
2327

24-
# Get a shortcut to the ResourceFilterManager Mock
25-
self.resource_filter_mock = self.volume_client.resource_filters
26-
self.resource_filter_mock.reset_mock()
28+
patcher = mock.patch.object(
29+
sdk_utils, 'supports_microversion', return_value=True
30+
)
31+
self.addCleanup(patcher.stop)
32+
self.supports_microversion_mock = patcher.start()
33+
self._set_mock_microversion(
34+
self.app.client_manager.volume.api_version.get_string()
35+
)
36+
37+
def _set_mock_microversion(self, mock_v):
38+
"""Set a specific microversion for the mock supports_microversion()."""
39+
self.supports_microversion_mock.reset_mock(return_value=True)
40+
self.supports_microversion_mock.side_effect = (
41+
lambda _, v: api_versions.APIVersion(v)
42+
<= api_versions.APIVersion(mock_v)
43+
)
2744

2845

2946
class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
@@ -33,7 +50,7 @@ class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
3350
def setUp(self):
3451
super().setUp()
3552

36-
self.resource_filter_mock.list.return_value = (
53+
self.volume_sdk_client.resource_filters.return_value = (
3754
self.fake_resource_filters
3855
)
3956

@@ -45,7 +62,7 @@ def setUp(self):
4562
)
4663

4764
def test_resource_filter_list(self):
48-
self.volume_client.api_version = api_versions.APIVersion('3.33')
65+
self._set_mock_microversion('3.33')
4966

5067
arglist = []
5168
verifylist = []
@@ -55,7 +72,7 @@ def test_resource_filter_list(self):
5572
expected_data = tuple(
5673
(
5774
resource_filter.resource,
58-
resource_filter.filters,
75+
format_columns.ListColumn(resource_filter.filters),
5976
)
6077
for resource_filter in self.fake_resource_filters
6178
)
@@ -65,10 +82,10 @@ def test_resource_filter_list(self):
6582
self.assertEqual(expected_data, tuple(data))
6683

6784
# checking if proper call was made to list clusters
68-
self.resource_filter_mock.list.assert_called_with()
85+
self.volume_sdk_client.resource_filters.assert_called_with()
6986

7087
def test_resource_filter_list_pre_v333(self):
71-
self.volume_client.api_version = api_versions.APIVersion('3.32')
88+
self._set_mock_microversion('3.32')
7289

7390
arglist = []
7491
verifylist = []
@@ -89,7 +106,7 @@ class TestBlockStorageResourceFilterShow(TestBlockStorageResourceFilter):
89106
def setUp(self):
90107
super().setUp()
91108

92-
self.resource_filter_mock.list.return_value = iter(
109+
self.volume_sdk_client.resource_filters.return_value = iter(
93110
[self.fake_resource_filter]
94111
)
95112

@@ -101,7 +118,7 @@ def setUp(self):
101118
)
102119

103120
def test_resource_filter_show(self):
104-
self.volume_client.api_version = api_versions.APIVersion('3.33')
121+
self._set_mock_microversion('3.33')
105122

106123
arglist = [
107124
self.fake_resource_filter.resource,
@@ -111,21 +128,23 @@ def test_resource_filter_show(self):
111128
]
112129
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
113130

114-
expected_columns = ('filters', 'resource')
131+
expected_columns = ('Resource', 'Filters')
115132
expected_data = (
116-
self.fake_resource_filter.filters,
117133
self.fake_resource_filter.resource,
134+
format_columns.ListColumn(self.fake_resource_filter.filters),
118135
)
119136
columns, data = self.cmd.take_action(parsed_args)
120137

121138
self.assertEqual(expected_columns, columns)
122139
self.assertEqual(expected_data, data)
123140

124141
# checking if proper call was made to list clusters
125-
self.resource_filter_mock.list.assert_called_with(resource='volume')
142+
self.volume_sdk_client.resource_filters.assert_called_with(
143+
resource='volume'
144+
)
126145

127146
def test_resource_filter_show_pre_v333(self):
128-
self.volume_client.api_version = api_versions.APIVersion('3.32')
147+
self._set_mock_microversion('3.32')
129148

130149
arglist = [
131150
self.fake_resource_filter.resource,

openstackclient/volume/v3/block_storage_resource_filter.py

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212

1313
"""Volume V3 Resource Filters implementations"""
1414

15-
from cinderclient import api_versions
15+
from openstack import utils as sdk_utils
16+
from osc_lib.cli import format_columns
1617
from osc_lib.command import command
1718
from osc_lib import exceptions
1819
from osc_lib import utils
@@ -24,9 +25,9 @@ class ListBlockStorageResourceFilter(command.Lister):
2425
_description = _('List block storage resource filters')
2526

2627
def take_action(self, parsed_args):
27-
volume_client = self.app.client_manager.volume
28+
volume_client = self.app.client_manager.sdk_connection.volume
2829

29-
if volume_client.api_version < api_versions.APIVersion('3.33'):
30+
if not sdk_utils.supports_microversion(volume_client, '3.33'):
3031
msg = _(
3132
"--os-volume-api-version 3.33 or greater is required to "
3233
"support the 'block storage resource filter list' command"
@@ -37,12 +38,20 @@ def take_action(self, parsed_args):
3738
'Resource',
3839
'Filters',
3940
)
41+
columns = (
42+
'resource',
43+
'filters',
44+
)
4045

41-
data = volume_client.resource_filters.list()
46+
data = volume_client.resource_filters()
47+
formatters = {'filters': format_columns.ListColumn}
4248

4349
return (
4450
column_headers,
45-
(utils.get_item_properties(s, column_headers) for s in data),
51+
(
52+
utils.get_item_properties(s, columns, formatters=formatters)
53+
for s in data
54+
),
4655
)
4756

4857

@@ -60,18 +69,16 @@ def get_parser(self, prog_name):
6069
return parser
6170

6271
def take_action(self, parsed_args):
63-
volume_client = self.app.client_manager.volume
72+
volume_client = self.app.client_manager.sdk_connection.volume
6473

65-
if volume_client.api_version < api_versions.APIVersion('3.33'):
74+
if not sdk_utils.supports_microversion(volume_client, '3.33'):
6675
msg = _(
6776
"--os-volume-api-version 3.33 or greater is required to "
6877
"support the 'block storage resource filter show' command"
6978
)
7079
raise exceptions.CommandError(msg)
7180

72-
data = volume_client.resource_filters.list(
73-
resource=parsed_args.resource
74-
)
81+
data = volume_client.resource_filters(resource=parsed_args.resource)
7582
if not data:
7683
msg = _(
7784
"No resource filter with a name of {parsed_args.resource}' "
@@ -80,4 +87,19 @@ def take_action(self, parsed_args):
8087
raise exceptions.CommandError(msg)
8188
resource_filter = next(data)
8289

83-
return zip(*sorted(resource_filter._info.items()))
90+
column_headers = (
91+
'Resource',
92+
'Filters',
93+
)
94+
columns = (
95+
'resource',
96+
'filters',
97+
)
98+
formatters = {'filters': format_columns.ListColumn}
99+
100+
return (
101+
column_headers,
102+
utils.get_dict_properties(
103+
resource_filter, columns, formatters=formatters
104+
),
105+
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
fixes:
3+
- |
4+
Migrated ``block storage resource filters list`` and
5+
``block storage resource filters show`` commands to SDK.

0 commit comments

Comments
 (0)