summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Finucane <sfinucan@redhat.com>2020-12-10 11:29:01 +0000
committerSeyeong Kim <seyeong.kim@canonical.com>2022-07-04 03:24:38 +0000
commit768dca5a695d78d8c5c22fca185137d3c5b8c07c (patch)
tree0c0b1e9d26ce4319412e98c9af19c784205d085d
parentc716fd13cc4ae88685191276fbdb7741712aa90f (diff)
downloadpython-openstackclient-768dca5a695d78d8c5c22fca185137d3c5b8c07c.tar.gz
compute: Add missing options for 'server group list'
Add pagination parameters, '--limit' and '--offset'. It's unfortunate that we can't use '--marker' like elsewhere but that requires server-side support to be truly effective. Change-Id: I186adc8cdf28e9c540ad22bca6684d9dd892976a Signed-off-by: Stephen Finucane <sfinucan@redhat.com> (cherry picked from commit 5ec4d4c7188f4766d270be32e12b64b709d2b835)
-rw-r--r--openstackclient/compute/v2/server_group.py38
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server_group.py47
-rw-r--r--releasenotes/notes/add-missing-server-group-list-opts-d3c3d98b7f7a56a6.yaml5
3 files changed, 85 insertions, 5 deletions
diff --git a/openstackclient/compute/v2/server_group.py b/openstackclient/compute/v2/server_group.py
index a3363244..35f537db 100644
--- a/openstackclient/compute/v2/server_group.py
+++ b/openstackclient/compute/v2/server_group.py
@@ -150,11 +150,47 @@ class ListServerGroup(command.Lister):
default=False,
help=_("List additional fields in output")
)
+ # TODO(stephenfin): This should really be a --marker option, but alas
+ # the API doesn't support that for some reason
+ parser.add_argument(
+ '--offset',
+ metavar='<offset>',
+ type=int,
+ default=None,
+ help=_(
+ 'Index from which to start listing servers. This should '
+ 'typically be a factor of --limit. Display all servers groups '
+ 'if not specified.'
+ ),
+ )
+ parser.add_argument(
+ '--limit',
+ metavar='<limit>',
+ type=int,
+ default=None,
+ help=_(
+ "Maximum number of server groups to display. "
+ "If limit is greater than 'osapi_max_limit' option of Nova "
+ "API, 'osapi_max_limit' will be used instead."
+ ),
+ )
return parser
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
- data = compute_client.server_groups.list(parsed_args.all_projects)
+
+ kwargs = {}
+
+ if parsed_args.all_projects:
+ kwargs['all_projects'] = parsed_args.all_projects
+
+ if parsed_args.offset:
+ kwargs['offset'] = parsed_args.offset
+
+ if parsed_args.limit:
+ kwargs['limit'] = parsed_args.limit
+
+ data = compute_client.server_groups.list(**kwargs)
policy_key = 'Policies'
if compute_client.api_version >= api_versions.APIVersion("2.64"):
diff --git a/openstackclient/tests/unit/compute/v2/test_server_group.py b/openstackclient/tests/unit/compute/v2/test_server_group.py
index bf0ea0ba..50d2a57e 100644
--- a/openstackclient/tests/unit/compute/v2/test_server_group.py
+++ b/openstackclient/tests/unit/compute/v2/test_server_group.py
@@ -298,10 +298,13 @@ class TestServerGroupList(TestServerGroup):
verifylist = [
('all_projects', False),
('long', False),
+ ('limit', None),
+ ('offset', None),
]
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.server_groups_mock.list.assert_called_once_with()
self.assertEqual(self.list_columns, columns)
self.assertEqual(self.list_data, tuple(data))
@@ -314,14 +317,49 @@ class TestServerGroupList(TestServerGroup):
verifylist = [
('all_projects', True),
('long', True),
+ ('limit', None),
+ ('offset', None),
]
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.server_groups_mock.list.assert_called_once_with(
+ all_projects=True)
self.assertEqual(self.list_columns_long, columns)
self.assertEqual(self.list_data_long, tuple(data))
+ def test_server_group_list_with_limit(self):
+ arglist = [
+ '--limit', '1',
+ ]
+ verifylist = [
+ ('all_projects', False),
+ ('long', False),
+ ('limit', 1),
+ ('offset', None),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.cmd.take_action(parsed_args)
+
+ self.server_groups_mock.list.assert_called_once_with(limit=1)
+
+ def test_server_group_list_with_offset(self):
+ arglist = [
+ '--offset', '5',
+ ]
+ verifylist = [
+ ('all_projects', False),
+ ('long', False),
+ ('limit', None),
+ ('offset', 5),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ self.cmd.take_action(parsed_args)
+
+ self.server_groups_mock.list.assert_called_once_with(offset=5)
+
class TestServerGroupListV264(TestServerGroupV264):
@@ -371,7 +409,7 @@ class TestServerGroupListV264(TestServerGroupV264):
]
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.server_groups_mock.list.assert_called_once_with()
self.assertEqual(self.list_columns, columns)
self.assertEqual(self.list_data, tuple(data))
@@ -387,7 +425,8 @@ class TestServerGroupListV264(TestServerGroupV264):
]
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.server_groups_mock.list.assert_called_once_with(
+ all_projects=True)
self.assertEqual(self.list_columns_long, columns)
self.assertEqual(self.list_data_long, tuple(data))
diff --git a/releasenotes/notes/add-missing-server-group-list-opts-d3c3d98b7f7a56a6.yaml b/releasenotes/notes/add-missing-server-group-list-opts-d3c3d98b7f7a56a6.yaml
new file mode 100644
index 00000000..b359e77c
--- /dev/null
+++ b/releasenotes/notes/add-missing-server-group-list-opts-d3c3d98b7f7a56a6.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Add ``--limit`` and ``--offset`` options to ``server group list`` command,
+ to configure pagination of results.