Skip to content

Commit e2a9a96

Browse files
committed
compute: Fix 'server group * -f yaml' output
Make use of 'FormattableColumn'-derived formatters, which provide better output than what we were using before, particularly for the YAML output format. Change-Id: Id6d25a0a348596d5a0430ff7afbf87b049a76bc8 Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
1 parent af5e9d1 commit e2a9a96

4 files changed

Lines changed: 51 additions & 40 deletions

File tree

openstackclient/compute/v2/server_group.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import logging
1919

2020
from novaclient import api_versions
21+
from osc_lib.cli import format_columns
2122
from osc_lib.command import command
2223
from osc_lib import exceptions
2324
from osc_lib import utils
@@ -29,8 +30,8 @@
2930

3031

3132
_formatters = {
32-
'policies': utils.format_list,
33-
'members': utils.format_list,
33+
'policies': format_columns.ListColumn,
34+
'members': format_columns.ListColumn,
3435
}
3536

3637

@@ -93,8 +94,8 @@ def take_action(self, parsed_args):
9394
info.update(server_group._info)
9495

9596
columns = _get_columns(info)
96-
data = utils.get_dict_properties(info, columns,
97-
formatters=_formatters)
97+
data = utils.get_dict_properties(
98+
info, columns, formatters=_formatters)
9899
return columns, data
99100

100101

@@ -176,14 +177,18 @@ def take_action(self, parsed_args):
176177
policy_key,
177178
)
178179

179-
return (column_headers,
180-
(utils.get_item_properties(
180+
return (
181+
column_headers,
182+
(
183+
utils.get_item_properties(
181184
s, columns,
182185
formatters={
183-
'Policies': utils.format_list,
184-
'Members': utils.format_list,
186+
'Policies': format_columns.ListColumn,
187+
'Members': format_columns.ListColumn,
185188
}
186-
) for s in data))
189+
) for s in data
190+
),
191+
)
187192

188193

189194
class ShowServerGroup(command.ShowOne):
@@ -205,6 +210,6 @@ def take_action(self, parsed_args):
205210
info = {}
206211
info.update(group._info)
207212
columns = _get_columns(info)
208-
data = utils.get_dict_properties(info, columns,
209-
formatters=_formatters)
213+
data = utils.get_dict_properties(
214+
info, columns, formatters=_formatters)
210215
return columns, data

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def test_server_group_delete(self):
3333
cmd_output['name']
3434
)
3535
self.assertEqual(
36-
'affinity',
36+
['affinity'],
3737
cmd_output['policies']
3838
)
3939

@@ -47,7 +47,7 @@ def test_server_group_delete(self):
4747
cmd_output['name']
4848
)
4949
self.assertEqual(
50-
'anti-affinity',
50+
['anti-affinity'],
5151
cmd_output['policies']
5252
)
5353

@@ -74,7 +74,7 @@ def test_server_group_show_and_list(self):
7474
cmd_output['name']
7575
)
7676
self.assertEqual(
77-
'affinity',
77+
['affinity'],
7878
cmd_output['policies']
7979
)
8080

@@ -91,7 +91,7 @@ def test_server_group_show_and_list(self):
9191
cmd_output['name']
9292
)
9393
self.assertEqual(
94-
'anti-affinity',
94+
['anti-affinity'],
9595
cmd_output['policies']
9696
)
9797

@@ -102,5 +102,5 @@ def test_server_group_show_and_list(self):
102102
self.assertIn(name1, names)
103103
self.assertIn(name2, names)
104104
policies = [x["Policies"] for x in cmd_output]
105-
self.assertIn('affinity', policies)
106-
self.assertIn('anti-affinity', policies)
105+
self.assertIn(['affinity'], policies)
106+
self.assertIn(['anti-affinity'], policies)

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

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from unittest import mock
1717

1818
from novaclient import api_versions
19+
from osc_lib.cli import format_columns
1920
from osc_lib import exceptions
2021
from osc_lib import utils
2122

@@ -39,9 +40,9 @@ class TestServerGroup(compute_fakes.TestComputev2):
3940

4041
data = (
4142
fake_server_group.id,
42-
utils.format_list(fake_server_group.members),
43+
format_columns.ListColumn(fake_server_group.members),
4344
fake_server_group.name,
44-
utils.format_list(fake_server_group.policies),
45+
format_columns.ListColumn(fake_server_group.policies),
4546
fake_server_group.project_id,
4647
fake_server_group.user_id,
4748
)
@@ -70,7 +71,7 @@ class TestServerGroupV264(TestServerGroup):
7071

7172
data = (
7273
fake_server_group.id,
73-
utils.format_list(fake_server_group.members),
74+
format_columns.ListColumn(fake_server_group.members),
7475
fake_server_group.name,
7576
fake_server_group.policy,
7677
fake_server_group.project_id,
@@ -105,8 +106,8 @@ def test_server_group_create(self):
105106
policies=[parsed_args.policy],
106107
)
107108

108-
self.assertEqual(self.columns, columns)
109-
self.assertEqual(self.data, data)
109+
self.assertCountEqual(self.columns, columns)
110+
self.assertCountEqual(self.data, data)
110111

111112
def test_server_group_create_with_soft_policies(self):
112113
self.app.client_manager.compute.api_version = api_versions.APIVersion(
@@ -127,8 +128,8 @@ def test_server_group_create_with_soft_policies(self):
127128
policies=[parsed_args.policy],
128129
)
129130

130-
self.assertEqual(self.columns, columns)
131-
self.assertEqual(self.data, data)
131+
self.assertCountEqual(self.columns, columns)
132+
self.assertCountEqual(self.data, data)
132133

133134
def test_server_group_create_with_soft_policies_pre_v215(self):
134135
self.app.client_manager.compute.api_version = api_versions.APIVersion(
@@ -170,8 +171,8 @@ def test_server_group_create_v264(self):
170171
policy=parsed_args.policy,
171172
)
172173

173-
self.assertEqual(self.columns, columns)
174-
self.assertEqual(self.data, data)
174+
self.assertCountEqual(self.columns, columns)
175+
self.assertCountEqual(self.data, data)
175176

176177

177178
class TestServerGroupDelete(TestServerGroup):
@@ -275,14 +276,14 @@ class TestServerGroupList(TestServerGroup):
275276
list_data = ((
276277
TestServerGroup.fake_server_group.id,
277278
TestServerGroup.fake_server_group.name,
278-
utils.format_list(TestServerGroup.fake_server_group.policies),
279+
format_columns.ListColumn(TestServerGroup.fake_server_group.policies),
279280
),)
280281

281282
list_data_long = ((
282283
TestServerGroup.fake_server_group.id,
283284
TestServerGroup.fake_server_group.name,
284-
utils.format_list(TestServerGroup.fake_server_group.policies),
285-
utils.format_list(TestServerGroup.fake_server_group.members),
285+
format_columns.ListColumn(TestServerGroup.fake_server_group.policies),
286+
format_columns.ListColumn(TestServerGroup.fake_server_group.members),
286287
TestServerGroup.fake_server_group.project_id,
287288
TestServerGroup.fake_server_group.user_id,
288289
),)
@@ -303,8 +304,8 @@ def test_server_group_list(self):
303304
columns, data = self.cmd.take_action(parsed_args)
304305
self.server_groups_mock.list.assert_called_once_with(False)
305306

306-
self.assertEqual(self.list_columns, columns)
307-
self.assertEqual(self.list_data, tuple(data))
307+
self.assertCountEqual(self.list_columns, columns)
308+
self.assertCountEqual(self.list_data, tuple(data))
308309

309310
def test_server_group_list_with_all_projects_and_long(self):
310311
arglist = [
@@ -319,8 +320,8 @@ def test_server_group_list_with_all_projects_and_long(self):
319320
columns, data = self.cmd.take_action(parsed_args)
320321
self.server_groups_mock.list.assert_called_once_with(True)
321322

322-
self.assertEqual(self.list_columns_long, columns)
323-
self.assertEqual(self.list_data_long, tuple(data))
323+
self.assertCountEqual(self.list_columns_long, columns)
324+
self.assertCountEqual(self.list_data_long, tuple(data))
324325

325326

326327
class TestServerGroupListV264(TestServerGroupV264):
@@ -350,7 +351,8 @@ class TestServerGroupListV264(TestServerGroupV264):
350351
TestServerGroupV264.fake_server_group.id,
351352
TestServerGroupV264.fake_server_group.name,
352353
TestServerGroupV264.fake_server_group.policy,
353-
utils.format_list(TestServerGroupV264.fake_server_group.members),
354+
format_columns.ListColumn(
355+
TestServerGroupV264.fake_server_group.members),
354356
TestServerGroupV264.fake_server_group.project_id,
355357
TestServerGroupV264.fake_server_group.user_id,
356358
),)
@@ -373,8 +375,8 @@ def test_server_group_list(self):
373375
columns, data = self.cmd.take_action(parsed_args)
374376
self.server_groups_mock.list.assert_called_once_with(False)
375377

376-
self.assertEqual(self.list_columns, columns)
377-
self.assertEqual(self.list_data, tuple(data))
378+
self.assertCountEqual(self.list_columns, columns)
379+
self.assertCountEqual(self.list_data, tuple(data))
378380

379381
def test_server_group_list_with_all_projects_and_long(self):
380382
arglist = [
@@ -389,8 +391,8 @@ def test_server_group_list_with_all_projects_and_long(self):
389391
columns, data = self.cmd.take_action(parsed_args)
390392
self.server_groups_mock.list.assert_called_once_with(True)
391393

392-
self.assertEqual(self.list_columns_long, columns)
393-
self.assertEqual(self.list_data_long, tuple(data))
394+
self.assertCountEqual(self.list_columns_long, columns)
395+
self.assertCountEqual(self.list_data_long, tuple(data))
394396

395397

396398
class TestServerGroupShow(TestServerGroup):
@@ -412,5 +414,5 @@ def test_server_group_show(self):
412414
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
413415
columns, data = self.cmd.take_action(parsed_args)
414416

415-
self.assertEqual(self.columns, columns)
416-
self.assertEqual(self.data, data)
417+
self.assertCountEqual(self.columns, columns)
418+
self.assertCountEqual(self.data, data)

releasenotes/notes/improved-server-output-6965b664f6abda8d.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,7 @@ fixes:
1414
formatter. In addition, the ``server_usages``, ``total_memory_mb_usage``,
1515
``total_vcpus_usage`` and ``total_local_gb_usage`` values will only be
1616
humanized when using the table formatter.
17+
- |
18+
The ``policies`` (or ``policy``, on newer microversions) and ``members``
19+
fields of the ``server group list`` and ``server group show`` commands
20+
will now be rendered correctly as lists.

0 commit comments

Comments
 (0)