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
This commit is contained in:
Lewis Denny 2020-08-20 20:18:42 +10:00
parent 95cc05bdf6
commit ed6d8d9411
3 changed files with 138 additions and 4 deletions

View File

@ -17,6 +17,7 @@
import logging
from novaclient import api_versions
from osc_lib.command import command
from osc_lib import exceptions
from osc_lib import utils
@ -136,11 +137,15 @@ class ListServerGroup(command.Lister):
compute_client = self.app.client_manager.compute
data = compute_client.server_groups.list(parsed_args.all_projects)
policy_key = 'Policies'
if compute_client.api_version >= api_versions.APIVersion("2.64"):
policy_key = 'Policy'
if parsed_args.long:
column_headers = columns = (
'ID',
'Name',
'Policies',
policy_key,
'Members',
'Project Id',
'User Id',
@ -149,7 +154,7 @@ class ListServerGroup(command.Lister):
column_headers = columns = (
'ID',
'Name',
'Policies',
policy_key,
)
return (column_headers,

View File

@ -1244,7 +1244,7 @@ class FakeServerGroup(object):
"""Fake one server group"""
@staticmethod
def create_one_server_group(attrs=None):
def _create_one_server_group(attrs=None):
"""Create a fake server group
:param Dictionary attrs:
@ -1261,7 +1261,6 @@ class FakeServerGroup(object):
'members': [],
'metadata': {},
'name': 'server-group-name-' + uuid.uuid4().hex,
'policies': [],
'project_id': 'server-group-project-id-' + uuid.uuid4().hex,
'user_id': 'server-group-user-id-' + uuid.uuid4().hex,
}
@ -1274,6 +1273,38 @@ class FakeServerGroup(object):
loaded=True)
return server_group
@staticmethod
def create_one_server_group(attrs=None):
"""Create a fake server group
:param Dictionary attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id and other attributes
"""
if attrs is None:
attrs = {}
attrs.setdefault('policies', ['policy1', 'policy2'])
return FakeServerGroup._create_one_server_group(attrs)
class FakeServerGroupV264(object):
"""Fake one server group fo API >= 2.64"""
@staticmethod
def create_one_server_group(attrs=None):
"""Create a fake server group
:param Dictionary attrs:
A dictionary with all attributes
:return:
A FakeResource object, with id and other attributes
"""
if attrs is None:
attrs = {}
attrs.setdefault('policy', 'policy1')
return FakeServerGroup._create_one_server_group(attrs)
class FakeUsage(object):
"""Fake one or more usage."""

View File

@ -15,6 +15,7 @@
from unittest import mock
from novaclient import api_versions
from osc_lib import exceptions
from osc_lib import utils
@ -53,6 +54,33 @@ class TestServerGroup(compute_fakes.TestComputev2):
self.server_groups_mock.reset_mock()
class TestServerGroupV264(TestServerGroup):
fake_server_group = \
compute_fakes.FakeServerGroupV264.create_one_server_group()
columns = (
'id',
'members',
'name',
'policy',
'project_id',
'user_id',
)
data = (
fake_server_group.id,
utils.format_list(fake_server_group.members),
fake_server_group.name,
fake_server_group.policy,
fake_server_group.project_id,
fake_server_group.user_id,
)
def setUp(self):
super(TestServerGroupV264, self).setUp()
class TestServerGroupCreate(TestServerGroup):
def setUp(self):
@ -230,6 +258,76 @@ class TestServerGroupList(TestServerGroup):
self.assertEqual(self.list_data_long, tuple(data))
class TestServerGroupListV264(TestServerGroupV264):
list_columns = (
'ID',
'Name',
'Policy',
)
list_columns_long = (
'ID',
'Name',
'Policy',
'Members',
'Project Id',
'User Id',
)
list_data = ((
TestServerGroupV264.fake_server_group.id,
TestServerGroupV264.fake_server_group.name,
TestServerGroupV264.fake_server_group.policy,
),)
list_data_long = ((
TestServerGroupV264.fake_server_group.id,
TestServerGroupV264.fake_server_group.name,
TestServerGroupV264.fake_server_group.policy,
utils.format_list(TestServerGroupV264.fake_server_group.members),
TestServerGroupV264.fake_server_group.project_id,
TestServerGroupV264.fake_server_group.user_id,
),)
def setUp(self):
super(TestServerGroupListV264, self).setUp()
self.server_groups_mock.list.return_value = [self.fake_server_group]
self.cmd = server_group.ListServerGroup(self.app, None)
self.app.client_manager.compute.api_version = api_versions.APIVersion(
'2.64')
def test_server_group_list(self):
arglist = []
verifylist = [
('all_projects', False),
('long', False),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.server_groups_mock.list.assert_called_once_with(False)
self.assertEqual(self.list_columns, columns)
self.assertEqual(self.list_data, tuple(data))
def test_server_group_list_with_all_projects_and_long(self):
arglist = [
'--all-projects',
'--long',
]
verifylist = [
('all_projects', True),
('long', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.server_groups_mock.list.assert_called_once_with(True)
self.assertEqual(self.list_columns_long, columns)
self.assertEqual(self.list_data_long, tuple(data))
class TestServerGroupShow(TestServerGroup):
def setUp(self):