Skip to content

Commit ed6d8d9

Browse files
committed
Add API check for server_groups.list
The policies parameter has been replaced with the policy parameter since Nova API version 2.64[1] This commit adds a check to make sure the correct parameter is used. [1]https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id59 Change-Id: Ia37beb7790884d6d15bec45074f446e64af1a2aa Story: #2008041 Task: #40703
1 parent 95cc05b commit ed6d8d9

3 files changed

Lines changed: 138 additions & 4 deletions

File tree

openstackclient/compute/v2/server_group.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import logging
1919

20+
from novaclient import api_versions
2021
from osc_lib.command import command
2122
from osc_lib import exceptions
2223
from osc_lib import utils
@@ -136,11 +137,15 @@ def take_action(self, parsed_args):
136137
compute_client = self.app.client_manager.compute
137138
data = compute_client.server_groups.list(parsed_args.all_projects)
138139

140+
policy_key = 'Policies'
141+
if compute_client.api_version >= api_versions.APIVersion("2.64"):
142+
policy_key = 'Policy'
143+
139144
if parsed_args.long:
140145
column_headers = columns = (
141146
'ID',
142147
'Name',
143-
'Policies',
148+
policy_key,
144149
'Members',
145150
'Project Id',
146151
'User Id',
@@ -149,7 +154,7 @@ def take_action(self, parsed_args):
149154
column_headers = columns = (
150155
'ID',
151156
'Name',
152-
'Policies',
157+
policy_key,
153158
)
154159

155160
return (column_headers,

openstackclient/tests/unit/compute/v2/fakes.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,7 +1244,7 @@ class FakeServerGroup(object):
12441244
"""Fake one server group"""
12451245

12461246
@staticmethod
1247-
def create_one_server_group(attrs=None):
1247+
def _create_one_server_group(attrs=None):
12481248
"""Create a fake server group
12491249
12501250
:param Dictionary attrs:
@@ -1261,7 +1261,6 @@ def create_one_server_group(attrs=None):
12611261
'members': [],
12621262
'metadata': {},
12631263
'name': 'server-group-name-' + uuid.uuid4().hex,
1264-
'policies': [],
12651264
'project_id': 'server-group-project-id-' + uuid.uuid4().hex,
12661265
'user_id': 'server-group-user-id-' + uuid.uuid4().hex,
12671266
}
@@ -1274,6 +1273,38 @@ def create_one_server_group(attrs=None):
12741273
loaded=True)
12751274
return server_group
12761275

1276+
@staticmethod
1277+
def create_one_server_group(attrs=None):
1278+
"""Create a fake server group
1279+
1280+
:param Dictionary attrs:
1281+
A dictionary with all attributes
1282+
:return:
1283+
A FakeResource object, with id and other attributes
1284+
"""
1285+
if attrs is None:
1286+
attrs = {}
1287+
attrs.setdefault('policies', ['policy1', 'policy2'])
1288+
return FakeServerGroup._create_one_server_group(attrs)
1289+
1290+
1291+
class FakeServerGroupV264(object):
1292+
"""Fake one server group fo API >= 2.64"""
1293+
1294+
@staticmethod
1295+
def create_one_server_group(attrs=None):
1296+
"""Create a fake server group
1297+
1298+
:param Dictionary attrs:
1299+
A dictionary with all attributes
1300+
:return:
1301+
A FakeResource object, with id and other attributes
1302+
"""
1303+
if attrs is None:
1304+
attrs = {}
1305+
attrs.setdefault('policy', 'policy1')
1306+
return FakeServerGroup._create_one_server_group(attrs)
1307+
12771308

12781309
class FakeUsage(object):
12791310
"""Fake one or more usage."""

openstackclient/tests/unit/compute/v2/test_server_group.py

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
from unittest import mock
1717

18+
from novaclient import api_versions
1819
from osc_lib import exceptions
1920
from osc_lib import utils
2021

@@ -53,6 +54,33 @@ def setUp(self):
5354
self.server_groups_mock.reset_mock()
5455

5556

57+
class TestServerGroupV264(TestServerGroup):
58+
59+
fake_server_group = \
60+
compute_fakes.FakeServerGroupV264.create_one_server_group()
61+
62+
columns = (
63+
'id',
64+
'members',
65+
'name',
66+
'policy',
67+
'project_id',
68+
'user_id',
69+
)
70+
71+
data = (
72+
fake_server_group.id,
73+
utils.format_list(fake_server_group.members),
74+
fake_server_group.name,
75+
fake_server_group.policy,
76+
fake_server_group.project_id,
77+
fake_server_group.user_id,
78+
)
79+
80+
def setUp(self):
81+
super(TestServerGroupV264, self).setUp()
82+
83+
5684
class TestServerGroupCreate(TestServerGroup):
5785

5886
def setUp(self):
@@ -230,6 +258,76 @@ def test_server_group_list_with_all_projects_and_long(self):
230258
self.assertEqual(self.list_data_long, tuple(data))
231259

232260

261+
class TestServerGroupListV264(TestServerGroupV264):
262+
263+
list_columns = (
264+
'ID',
265+
'Name',
266+
'Policy',
267+
)
268+
269+
list_columns_long = (
270+
'ID',
271+
'Name',
272+
'Policy',
273+
'Members',
274+
'Project Id',
275+
'User Id',
276+
)
277+
278+
list_data = ((
279+
TestServerGroupV264.fake_server_group.id,
280+
TestServerGroupV264.fake_server_group.name,
281+
TestServerGroupV264.fake_server_group.policy,
282+
),)
283+
284+
list_data_long = ((
285+
TestServerGroupV264.fake_server_group.id,
286+
TestServerGroupV264.fake_server_group.name,
287+
TestServerGroupV264.fake_server_group.policy,
288+
utils.format_list(TestServerGroupV264.fake_server_group.members),
289+
TestServerGroupV264.fake_server_group.project_id,
290+
TestServerGroupV264.fake_server_group.user_id,
291+
),)
292+
293+
def setUp(self):
294+
super(TestServerGroupListV264, self).setUp()
295+
296+
self.server_groups_mock.list.return_value = [self.fake_server_group]
297+
self.cmd = server_group.ListServerGroup(self.app, None)
298+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
299+
'2.64')
300+
301+
def test_server_group_list(self):
302+
arglist = []
303+
verifylist = [
304+
('all_projects', False),
305+
('long', False),
306+
]
307+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
308+
columns, data = self.cmd.take_action(parsed_args)
309+
self.server_groups_mock.list.assert_called_once_with(False)
310+
311+
self.assertEqual(self.list_columns, columns)
312+
self.assertEqual(self.list_data, tuple(data))
313+
314+
def test_server_group_list_with_all_projects_and_long(self):
315+
arglist = [
316+
'--all-projects',
317+
'--long',
318+
]
319+
verifylist = [
320+
('all_projects', True),
321+
('long', True),
322+
]
323+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
324+
columns, data = self.cmd.take_action(parsed_args)
325+
self.server_groups_mock.list.assert_called_once_with(True)
326+
327+
self.assertEqual(self.list_columns_long, columns)
328+
self.assertEqual(self.list_data_long, tuple(data))
329+
330+
233331
class TestServerGroupShow(TestServerGroup):
234332

235333
def setUp(self):

0 commit comments

Comments
 (0)