Skip to content

Commit f26b085

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add "server group list" command"
2 parents 42263d7 + 4e22728 commit f26b085

4 files changed

Lines changed: 146 additions & 0 deletions

File tree

doc/source/command-objects/server-group.rst

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,23 @@ Delete an existing server group
4343

4444
Server group(s) to delete (name or ID)
4545
(repeat to delete multiple server groups)
46+
47+
server group list
48+
-----------------
49+
50+
List all server groups
51+
52+
.. program:: server group list
53+
.. code-block:: bash
54+
55+
os server group list
56+
[--all-projects]
57+
[--long]
58+
59+
.. option:: --all-projects
60+
61+
Display information from all projects (admin only)
62+
63+
.. option:: --long
64+
65+
List additional fields in output

openstackclient/compute/v2/server_group.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,60 @@ def take_action(self, parsed_args):
9999
total = len(parsed_args.server_group)
100100
msg = "%s of %s server groups failed to delete." % (result, total)
101101
raise exceptions.CommandError(msg)
102+
103+
104+
class ListServerGroup(command.Lister):
105+
"""List all server groups."""
106+
107+
def get_parser(self, prog_name):
108+
parser = super(ListServerGroup, self).get_parser(prog_name)
109+
parser.add_argument(
110+
'--all-projects',
111+
action='store_true',
112+
default=False,
113+
help='Display information from all projects (admin only)',
114+
)
115+
parser.add_argument(
116+
'--long',
117+
action='store_true',
118+
default=False,
119+
help='List additional fields in output',
120+
)
121+
return parser
122+
123+
def take_action(self, parsed_args):
124+
compute_client = self.app.client_manager.compute
125+
data = compute_client.server_groups.list(parsed_args.all_projects)
126+
127+
if parsed_args.long:
128+
column_headers = (
129+
'ID',
130+
'Name',
131+
'Policies',
132+
'Members',
133+
'Project Id',
134+
'User Id',
135+
)
136+
columns = (
137+
'ID',
138+
'Name',
139+
'Policies',
140+
'Members',
141+
'Project Id',
142+
'User Id',
143+
)
144+
else:
145+
column_headers = columns = (
146+
'ID',
147+
'Name',
148+
'Policies',
149+
)
150+
151+
return (column_headers,
152+
(utils.get_item_properties(
153+
s, columns,
154+
formatters={
155+
'Policies': utils.format_list,
156+
'Members': utils.format_list,
157+
}
158+
) for s in data))

openstackclient/tests/compute/v2/test_server_group.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,3 +190,71 @@ def test_server_group_multiple_delete_with_exception(self):
190190
self.server_groups_mock.delete.assert_called_once_with(
191191
self.fake_server_group.id
192192
)
193+
194+
195+
class TestServerGroupList(TestServerGroup):
196+
197+
list_columns = (
198+
'ID',
199+
'Name',
200+
'Policies',
201+
)
202+
203+
list_columns_long = (
204+
'ID',
205+
'Name',
206+
'Policies',
207+
'Members',
208+
'Project Id',
209+
'User Id',
210+
)
211+
212+
list_data = ((
213+
TestServerGroup.fake_server_group.id,
214+
TestServerGroup.fake_server_group.name,
215+
utils.format_list(TestServerGroup.fake_server_group.policies),
216+
),)
217+
218+
list_data_long = ((
219+
TestServerGroup.fake_server_group.id,
220+
TestServerGroup.fake_server_group.name,
221+
utils.format_list(TestServerGroup.fake_server_group.policies),
222+
utils.format_list(TestServerGroup.fake_server_group.members),
223+
TestServerGroup.fake_server_group.project_id,
224+
TestServerGroup.fake_server_group.user_id,
225+
),)
226+
227+
def setUp(self):
228+
super(TestServerGroupList, self).setUp()
229+
230+
self.server_groups_mock.list.return_value = [self.fake_server_group]
231+
self.cmd = server_group.ListServerGroup(self.app, None)
232+
233+
def test_server_group_list(self):
234+
arglist = []
235+
verifylist = [
236+
('all_projects', False),
237+
('long', False),
238+
]
239+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
240+
columns, data = self.cmd.take_action(parsed_args)
241+
self.server_groups_mock.list.assert_called_once_with(False)
242+
243+
self.assertEqual(self.list_columns, columns)
244+
self.assertEqual(self.list_data, tuple(data))
245+
246+
def test_server_group_list_with_all_projects_and_long(self):
247+
arglist = [
248+
'--all-projects',
249+
'--long',
250+
]
251+
verifylist = [
252+
('all_projects', True),
253+
('long', True),
254+
]
255+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
256+
columns, data = self.cmd.take_action(parsed_args)
257+
self.server_groups_mock.list.assert_called_once_with(True)
258+
259+
self.assertEqual(self.list_columns_long, columns)
260+
self.assertEqual(self.list_data_long, tuple(data))

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ openstack.compute.v2 =
133133

134134
server_group_create = openstackclient.compute.v2.server_group:CreateServerGroup
135135
server_group_delete = openstackclient.compute.v2.server_group:DeleteServerGroup
136+
server_group_list = openstackclient.compute.v2.server_group:ListServerGroup
136137

137138
usage_list = openstackclient.compute.v2.usage:ListUsage
138139
usage_show = openstackclient.compute.v2.usage:ShowUsage

0 commit comments

Comments
 (0)