Skip to content

Commit 04ebe08

Browse files
committed
compute: Add 'uuid' column to aggregate list
Change-Id: I15d4a2d5980c1ba3e00f7d1bd09f11d0f42564e1 Signed-off-by: Stephen Finucane <stephenfin@redhat.com> Closes-bug: #2073542
1 parent a59262e commit 04ebe08

File tree

3 files changed

+104
-65
lines changed

3 files changed

+104
-65
lines changed

openstackclient/compute/v2/aggregate.py

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -192,40 +192,46 @@ def take_action(self, parsed_args):
192192

193193
aggregates = list(compute_client.aggregates())
194194

195+
if sdk_utils.supports_microversion(compute_client, '2.41'):
196+
column_headers = ("ID", "UUID")
197+
columns = ("id", "uuid")
198+
else:
199+
column_headers = ("ID",)
200+
columns = ("id",)
201+
202+
column_headers += (
203+
"Name",
204+
"Availability Zone",
205+
)
206+
columns += (
207+
"name",
208+
"availability_zone",
209+
)
210+
195211
if parsed_args.long:
196212
# Remove availability_zone from metadata because Nova doesn't
197213
for aggregate in aggregates:
198214
if 'availability_zone' in aggregate.metadata:
199215
aggregate.metadata.pop('availability_zone')
200-
# This is the easiest way to change column headers
201-
column_headers = (
202-
"ID",
203-
"Name",
204-
"Availability Zone",
216+
217+
column_headers += (
205218
"Properties",
206219
"Hosts",
207220
)
208-
columns = (
209-
"ID",
210-
"Name",
211-
"Availability Zone",
212-
"Metadata",
213-
"Hosts",
214-
)
215-
else:
216-
column_headers = columns = (
217-
"ID",
218-
"Name",
219-
"Availability Zone",
221+
columns += (
222+
"metadata",
223+
"hosts",
220224
)
221225

222-
data = (
223-
utils.get_item_properties(
224-
s, columns, formatters=_aggregate_formatters
225-
)
226-
for s in aggregates
226+
return (
227+
column_headers,
228+
(
229+
utils.get_item_properties(
230+
s, columns, formatters=_aggregate_formatters
231+
)
232+
for s in aggregates
233+
),
227234
)
228-
return (column_headers, data)
229235

230236

231237
class RemoveAggregateHost(command.ShowOne):

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

Lines changed: 70 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -227,58 +227,61 @@ def test_delete_multiple_agggregates_with_exception(self):
227227

228228

229229
class TestAggregateList(TestAggregate):
230-
list_columns = (
231-
"ID",
232-
"Name",
233-
"Availability Zone",
234-
)
235-
236-
list_columns_long = (
237-
"ID",
238-
"Name",
239-
"Availability Zone",
240-
"Properties",
241-
"Hosts",
242-
)
243-
244-
list_data = (
245-
(
246-
TestAggregate.fake_ag.id,
247-
TestAggregate.fake_ag.name,
248-
TestAggregate.fake_ag.availability_zone,
249-
),
250-
)
251-
252-
list_data_long = (
253-
(
254-
TestAggregate.fake_ag.id,
255-
TestAggregate.fake_ag.name,
256-
TestAggregate.fake_ag.availability_zone,
257-
format_columns.DictColumn(
258-
{
259-
key: value
260-
for key, value in TestAggregate.fake_ag.metadata.items()
261-
if key != 'availability_zone'
262-
}
263-
),
264-
format_columns.ListColumn(TestAggregate.fake_ag.hosts),
265-
),
266-
)
267-
268230
def setUp(self):
269231
super().setUp()
270232

271233
self.compute_sdk_client.aggregates.return_value = [self.fake_ag]
272234
self.cmd = aggregate.ListAggregate(self.app, None)
273235

274236
def test_aggregate_list(self):
237+
self.set_compute_api_version('2.41')
238+
239+
parsed_args = self.check_parser(self.cmd, [], [])
240+
columns, data = self.cmd.take_action(parsed_args)
241+
242+
expected_columns = (
243+
"ID",
244+
"UUID",
245+
"Name",
246+
"Availability Zone",
247+
)
248+
expected_data = (
249+
(
250+
self.fake_ag.id,
251+
self.fake_ag.uuid,
252+
self.fake_ag.name,
253+
self.fake_ag.availability_zone,
254+
),
255+
)
256+
257+
self.assertEqual(expected_columns, columns)
258+
self.assertCountEqual(expected_data, tuple(data))
259+
260+
def test_aggregate_list_pre_v241(self):
261+
self.set_compute_api_version('2.40')
262+
275263
parsed_args = self.check_parser(self.cmd, [], [])
276264
columns, data = self.cmd.take_action(parsed_args)
277265

278-
self.assertEqual(self.list_columns, columns)
279-
self.assertCountEqual(self.list_data, tuple(data))
266+
expected_columns = (
267+
"ID",
268+
"Name",
269+
"Availability Zone",
270+
)
271+
expected_data = (
272+
(
273+
self.fake_ag.id,
274+
self.fake_ag.name,
275+
self.fake_ag.availability_zone,
276+
),
277+
)
278+
279+
self.assertEqual(expected_columns, columns)
280+
self.assertCountEqual(expected_data, tuple(data))
280281

281282
def test_aggregate_list_with_long(self):
283+
self.set_compute_api_version('2.41')
284+
282285
arglist = [
283286
'--long',
284287
]
@@ -288,8 +291,33 @@ def test_aggregate_list_with_long(self):
288291
parsed_args = self.check_parser(self.cmd, arglist, vertifylist)
289292
columns, data = self.cmd.take_action(parsed_args)
290293

291-
self.assertEqual(self.list_columns_long, columns)
292-
self.assertCountEqual(self.list_data_long, tuple(data))
294+
expected_columns = (
295+
"ID",
296+
"UUID",
297+
"Name",
298+
"Availability Zone",
299+
"Properties",
300+
"Hosts",
301+
)
302+
expected_data = (
303+
(
304+
self.fake_ag.id,
305+
self.fake_ag.uuid,
306+
self.fake_ag.name,
307+
self.fake_ag.availability_zone,
308+
format_columns.DictColumn(
309+
{
310+
key: value
311+
for key, value in self.fake_ag.metadata.items()
312+
if key != 'availability_zone'
313+
}
314+
),
315+
format_columns.ListColumn(self.fake_ag.hosts),
316+
),
317+
)
318+
319+
self.assertEqual(expected_columns, columns)
320+
self.assertCountEqual(expected_data, tuple(data))
293321

294322

295323
class TestAggregateRemoveHost(TestAggregate):
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
The ``aggregate list`` command will now include the UUIDs of the aggregates
5+
when the cloud supports it.

0 commit comments

Comments
 (0)