volume: Migrate 'snapshot show', 'snapshot list' to SDK

Change-Id: I40de24012363f496e46c3dddc31a3e2563ccf443
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane
2025-03-28 12:27:18 +00:00
parent 3c6fa42642
commit 267a29d594
4 changed files with 303 additions and 345 deletions

View File

@@ -26,18 +26,6 @@ from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
from openstackclient.volume.v2 import volume_snapshot from openstackclient.volume.v2 import volume_snapshot
class TestVolumeSnapshot(volume_fakes.TestVolume):
def setUp(self):
super().setUp()
self.snapshots_mock = self.volume_client.volume_snapshots
self.snapshots_mock.reset_mock()
self.volumes_mock = self.volume_client.volumes
self.volumes_mock.reset_mock()
self.project_mock = self.identity_client.projects
self.project_mock.reset_mock()
class TestVolumeSnapshotCreate(volume_fakes.TestVolume): class TestVolumeSnapshotCreate(volume_fakes.TestVolume):
columns = ( columns = (
'created_at', 'created_at',
@@ -291,52 +279,57 @@ class TestVolumeSnapshotDelete(volume_fakes.TestVolume):
) )
class TestVolumeSnapshotList(TestVolumeSnapshot): class TestVolumeSnapshotList(volume_fakes.TestVolume):
volume = volume_fakes.create_one_volume()
project = project_fakes.FakeProject.create_one_project()
snapshots = volume_fakes.create_snapshots(
attrs={'volume_id': volume.name}, count=3
)
columns = ["ID", "Name", "Description", "Status", "Size"]
columns_long = columns + ["Created At", "Volume", "Properties"]
data = []
for s in snapshots:
data.append(
(
s.id,
s.name,
s.description,
s.status,
s.size,
)
)
data_long = []
for s in snapshots:
data_long.append(
(
s.id,
s.name,
s.description,
s.status,
s.size,
s.created_at,
volume_snapshot.VolumeIdColumn(
s.volume_id, volume_cache={volume.id: volume}
),
format_columns.DictColumn(s.metadata),
)
)
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.volumes_mock.list.return_value = [self.volume] self.volume = sdk_fakes.generate_fake_resource(_volume.Volume)
self.volumes_mock.get.return_value = self.volume self.snapshots = list(
sdk_fakes.generate_fake_resources(
_snapshot.Snapshot, attrs={'volume_id': self.volume.name}
)
)
self.project = project_fakes.FakeProject.create_one_project()
self.volume_sdk_client.volumes.return_value = [self.volume]
self.volume_sdk_client.find_volume.return_value = self.volume
self.volume_sdk_client.snapshots.return_value = self.snapshots
self.project_mock = self.identity_client.projects
self.project_mock.get.return_value = self.project self.project_mock.get.return_value = self.project
self.snapshots_mock.list.return_value = self.snapshots
# Get the command to test self.columns = ("ID", "Name", "Description", "Status", "Size")
self.columns_long = self.columns + (
"Created At",
"Volume",
"Properties",
)
self.data = []
self.data_long = []
for s in self.snapshots:
self.data.append(
(
s.id,
s.name,
s.description,
s.status,
s.size,
)
)
self.data_long.append(
(
s.id,
s.name,
s.description,
s.status,
s.size,
s.created_at,
volume_snapshot.VolumeIdColumn(
s.volume_id, volume_cache={self.volume.id: self.volume}
),
format_columns.DictColumn(s.metadata),
)
)
self.cmd = volume_snapshot.ListVolumeSnapshot(self.app, None) self.cmd = volume_snapshot.ListVolumeSnapshot(self.app, None)
def test_snapshot_list_without_options(self): def test_snapshot_list_without_options(self):
@@ -346,16 +339,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=False,
'all_tenants': False, name=None,
'name': None, status=None,
'status': None, project_id=None,
'project_id': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -381,16 +372,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=2, limit=2,
marker=self.snapshots[0].id, marker=self.snapshots[0].id,
search_opts={ all_projects=True,
'all_tenants': True, project_id=self.project.id,
'project_id': self.project.id, name=None,
'name': None, status=None,
'status': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns_long, columns) self.assertEqual(self.columns_long, columns)
self.assertEqual(self.data_long, list(data)) self.assertEqual(self.data_long, list(data))
@@ -404,16 +393,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=True,
'all_tenants': True, name=None,
'name': None, status=None,
'status': None, project_id=None,
'project_id': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -432,16 +419,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=False,
'all_tenants': False, name=self.snapshots[0].name,
'name': self.snapshots[0].name, status=None,
'status': None, project_id=None,
'project_id': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -449,27 +434,25 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
def test_snapshot_list_status_option(self): def test_snapshot_list_status_option(self):
arglist = [ arglist = [
'--status', '--status',
self.snapshots[0].status, 'available',
] ]
verifylist = [ verifylist = [
('all_projects', False), ('all_projects', False),
('long', False), ('long', False),
('status', self.snapshots[0].status), ('status', 'available'),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=False,
'all_tenants': False, name=None,
'name': None, status='available',
'status': self.snapshots[0].status, project_id=None,
'project_id': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -488,16 +471,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=False,
'all_tenants': False, name=None,
'name': None, status=None,
'status': None, project_id=None,
'project_id': None, volume_id=self.volume.id,
'volume_id': self.volume.id,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -695,23 +676,22 @@ class TestVolumeSnapshotSet(volume_fakes.TestVolume):
) )
class TestVolumeSnapshotShow(TestVolumeSnapshot): class TestVolumeSnapshotShow(volume_fakes.TestVolume):
columns = (
'created_at',
'description',
'id',
'name',
'properties',
'size',
'status',
'volume_id',
)
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.snapshot = volume_fakes.create_one_snapshot() self.snapshot = sdk_fakes.generate_fake_resource(_snapshot.Snapshot)
self.columns = (
'created_at',
'description',
'id',
'name',
'properties',
'size',
'status',
'volume_id',
)
self.data = ( self.data = (
self.snapshot.created_at, self.snapshot.created_at,
self.snapshot.description, self.snapshot.description,
@@ -723,8 +703,8 @@ class TestVolumeSnapshotShow(TestVolumeSnapshot):
self.snapshot.volume_id, self.snapshot.volume_id,
) )
self.snapshots_mock.get.return_value = self.snapshot self.volume_sdk_client.find_snapshot.return_value = self.snapshot
# Get the command object to test
self.cmd = volume_snapshot.ShowVolumeSnapshot(self.app, None) self.cmd = volume_snapshot.ShowVolumeSnapshot(self.app, None)
def test_snapshot_show(self): def test_snapshot_show(self):
@@ -733,7 +713,9 @@ class TestVolumeSnapshotShow(TestVolumeSnapshot):
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.get.assert_called_with(self.snapshot.id) self.volume_sdk_client.find_snapshot.assert_called_with(
self.snapshot.id, ignore_missing=False
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertCountEqual(self.data, data) self.assertCountEqual(self.data, data)

View File

@@ -22,37 +22,11 @@ from osc_lib import exceptions
from openstackclient.tests.unit.identity.v3 import fakes as project_fakes from openstackclient.tests.unit.identity.v3 import fakes as project_fakes
from openstackclient.tests.unit import utils as test_utils from openstackclient.tests.unit import utils as test_utils
from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes_v3
from openstackclient.volume.v3 import volume_snapshot from openstackclient.volume.v3 import volume_snapshot
class TestVolumeSnapshot(volume_fakes_v3.TestVolume): class TestVolumeSnapshotCreate(volume_fakes.TestVolume):
def setUp(self):
super().setUp()
self.snapshots_mock = self.volume_client.volume_snapshots
self.snapshots_mock.reset_mock()
self.volumes_mock = self.volume_client.volumes
self.volumes_mock.reset_mock()
self.project_mock = self.identity_client.projects
self.project_mock.reset_mock()
self.volume_sdk_client.unmanage_snapshot.return_value = None
class TestVolumeSnapshotCreate(volume_fakes_v3.TestVolume):
columns = (
'created_at',
'description',
'id',
'name',
'properties',
'size',
'status',
'volume_id',
)
def setUp(self): def setUp(self):
super().setUp() super().setUp()
@@ -64,6 +38,16 @@ class TestVolumeSnapshotCreate(volume_fakes_v3.TestVolume):
self.volume_sdk_client.create_snapshot.return_value = self.snapshot self.volume_sdk_client.create_snapshot.return_value = self.snapshot
self.volume_sdk_client.manage_snapshot.return_value = self.snapshot self.volume_sdk_client.manage_snapshot.return_value = self.snapshot
self.columns = (
'created_at',
'description',
'id',
'name',
'properties',
'size',
'status',
'volume_id',
)
self.data = ( self.data = (
self.snapshot.created_at, self.snapshot.created_at,
self.snapshot.description, self.snapshot.description,
@@ -197,7 +181,7 @@ class TestVolumeSnapshotCreate(volume_fakes_v3.TestVolume):
self.volume_sdk_client.create_snapshot.assert_not_called() self.volume_sdk_client.create_snapshot.assert_not_called()
class TestVolumeSnapshotDelete(volume_fakes_v3.TestVolume): class TestVolumeSnapshotDelete(volume_fakes.TestVolume):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
@@ -338,52 +322,57 @@ class TestVolumeSnapshotDelete(volume_fakes_v3.TestVolume):
) )
class TestVolumeSnapshotList(TestVolumeSnapshot): class TestVolumeSnapshotList(volume_fakes.TestVolume):
volume = volume_fakes.create_one_volume()
project = project_fakes.FakeProject.create_one_project()
snapshots = volume_fakes.create_snapshots(
attrs={'volume_id': volume.name}, count=3
)
columns = ["ID", "Name", "Description", "Status", "Size"]
columns_long = columns + ["Created At", "Volume", "Properties"]
data = []
for s in snapshots:
data.append(
(
s.id,
s.name,
s.description,
s.status,
s.size,
)
)
data_long = []
for s in snapshots:
data_long.append(
(
s.id,
s.name,
s.description,
s.status,
s.size,
s.created_at,
volume_snapshot.VolumeIdColumn(
s.volume_id, volume_cache={volume.id: volume}
),
format_columns.DictColumn(s.metadata),
)
)
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.volumes_mock.list.return_value = [self.volume] self.volume = sdk_fakes.generate_fake_resource(_volume.Volume)
self.volumes_mock.get.return_value = self.volume self.snapshots = list(
sdk_fakes.generate_fake_resources(
_snapshot.Snapshot, attrs={'volume_id': self.volume.name}
)
)
self.project = project_fakes.FakeProject.create_one_project()
self.volume_sdk_client.volumes.return_value = [self.volume]
self.volume_sdk_client.find_volume.return_value = self.volume
self.volume_sdk_client.snapshots.return_value = self.snapshots
self.project_mock = self.identity_client.projects
self.project_mock.get.return_value = self.project self.project_mock.get.return_value = self.project
self.snapshots_mock.list.return_value = self.snapshots
# Get the command to test self.columns = ("ID", "Name", "Description", "Status", "Size")
self.columns_long = self.columns + (
"Created At",
"Volume",
"Properties",
)
self.data = []
self.data_long = []
for s in self.snapshots:
self.data.append(
(
s.id,
s.name,
s.description,
s.status,
s.size,
)
)
self.data_long.append(
(
s.id,
s.name,
s.description,
s.status,
s.size,
s.created_at,
volume_snapshot.VolumeIdColumn(
s.volume_id, volume_cache={self.volume.id: self.volume}
),
format_columns.DictColumn(s.metadata),
)
)
self.cmd = volume_snapshot.ListVolumeSnapshot(self.app, None) self.cmd = volume_snapshot.ListVolumeSnapshot(self.app, None)
def test_snapshot_list_without_options(self): def test_snapshot_list_without_options(self):
@@ -393,16 +382,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=False,
'all_tenants': False, name=None,
'name': None, status=None,
'status': None, project_id=None,
'project_id': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -428,16 +415,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=2, limit=2,
marker=self.snapshots[0].id, marker=self.snapshots[0].id,
search_opts={ all_projects=True,
'all_tenants': True, project_id=self.project.id,
'project_id': self.project.id, name=None,
'name': None, status=None,
'status': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns_long, columns) self.assertEqual(self.columns_long, columns)
self.assertEqual(self.data_long, list(data)) self.assertEqual(self.data_long, list(data))
@@ -451,16 +436,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=True,
'all_tenants': True, name=None,
'name': None, status=None,
'status': None, project_id=None,
'project_id': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -479,16 +462,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=False,
'all_tenants': False, name=self.snapshots[0].name,
'name': self.snapshots[0].name, status=None,
'status': None, project_id=None,
'project_id': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -496,27 +477,25 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
def test_snapshot_list_status_option(self): def test_snapshot_list_status_option(self):
arglist = [ arglist = [
'--status', '--status',
self.snapshots[0].status, 'available',
] ]
verifylist = [ verifylist = [
('all_projects', False), ('all_projects', False),
('long', False), ('long', False),
('status', self.snapshots[0].status), ('status', 'available'),
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=False,
'all_tenants': False, name=None,
'name': None, status='available',
'status': self.snapshots[0].status, project_id=None,
'project_id': None, volume_id=None,
'volume_id': None,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -535,16 +514,14 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.list.assert_called_once_with( self.volume_sdk_client.snapshots.assert_called_once_with(
limit=None, limit=None,
marker=None, marker=None,
search_opts={ all_projects=False,
'all_tenants': False, name=None,
'name': None, status=None,
'status': None, project_id=None,
'project_id': None, volume_id=self.volume.id,
'volume_id': self.volume.id,
},
) )
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.data, list(data)) self.assertEqual(self.data, list(data))
@@ -566,7 +543,7 @@ class TestVolumeSnapshotList(TestVolumeSnapshot):
) )
class TestVolumeSnapshotSet(volume_fakes_v3.TestVolume): class TestVolumeSnapshotSet(volume_fakes.TestVolume):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
@@ -743,23 +720,22 @@ class TestVolumeSnapshotSet(volume_fakes_v3.TestVolume):
) )
class TestVolumeSnapshotShow(TestVolumeSnapshot): class TestVolumeSnapshotShow(volume_fakes.TestVolume):
columns = (
'created_at',
'description',
'id',
'name',
'properties',
'size',
'status',
'volume_id',
)
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.snapshot = volume_fakes.create_one_snapshot() self.snapshot = sdk_fakes.generate_fake_resource(_snapshot.Snapshot)
self.columns = (
'created_at',
'description',
'id',
'name',
'properties',
'size',
'status',
'volume_id',
)
self.data = ( self.data = (
self.snapshot.created_at, self.snapshot.created_at,
self.snapshot.description, self.snapshot.description,
@@ -771,8 +747,8 @@ class TestVolumeSnapshotShow(TestVolumeSnapshot):
self.snapshot.volume_id, self.snapshot.volume_id,
) )
self.snapshots_mock.get.return_value = self.snapshot self.volume_sdk_client.find_snapshot.return_value = self.snapshot
# Get the command object to test
self.cmd = volume_snapshot.ShowVolumeSnapshot(self.app, None) self.cmd = volume_snapshot.ShowVolumeSnapshot(self.app, None)
def test_snapshot_show(self): def test_snapshot_show(self):
@@ -781,13 +757,15 @@ class TestVolumeSnapshotShow(TestVolumeSnapshot):
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
self.snapshots_mock.get.assert_called_with(self.snapshot.id) self.volume_sdk_client.find_snapshot.assert_called_with(
self.snapshot.id, ignore_missing=False
)
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertCountEqual(self.data, data) self.assertCountEqual(self.data, data)
class TestVolumeSnapshotUnset(volume_fakes_v3.TestVolume): class TestVolumeSnapshotUnset(volume_fakes.TestVolume):
def setUp(self): def setUp(self):
super().setUp() super().setUp()

View File

@@ -14,7 +14,6 @@
"""Volume v2 snapshot action implementations""" """Volume v2 snapshot action implementations"""
import copy
import functools import functools
import logging import logging
import typing as ty import typing as ty
@@ -297,31 +296,39 @@ class ListVolumeSnapshot(command.Lister):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume volume_client = self.app.client_manager.sdk_connection.volume
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
columns: tuple[str, ...] = (
'id',
'name',
'description',
'status',
'size',
)
column_headers: tuple[str, ...] = (
'ID',
'Name',
'Description',
'Status',
'Size',
)
if parsed_args.long: if parsed_args.long:
columns = [ columns += (
'ID', 'created_at',
'Name', 'volume_id',
'Description', 'metadata',
'Status', )
'Size', column_headers += (
'Created At', 'Created At',
'Volume ID', 'Volume',
'Metadata', 'Properties',
] )
column_headers = copy.deepcopy(columns)
column_headers[6] = 'Volume'
column_headers[7] = 'Properties'
else:
columns = ['ID', 'Name', 'Description', 'Status', 'Size']
column_headers = copy.deepcopy(columns)
# Cache the volume list # Cache the volume list
volume_cache = {} volume_cache = {}
try: try:
for s in volume_client.volumes.list(): for s in volume_client.volumes():
volume_cache[s.id] = s volume_cache[s.id] = s
except Exception: # noqa: S110 except Exception: # noqa: S110
# Just forget it if there's any trouble # Just forget it if there's any trouble
@@ -332,8 +339,8 @@ class ListVolumeSnapshot(command.Lister):
volume_id = None volume_id = None
if parsed_args.volume: if parsed_args.volume:
volume_id = utils.find_resource( volume_id = volume_client.find_volume(
volume_client.volumes, parsed_args.volume parsed_args.volume, ignore_missing=False
).id ).id
project_id = None project_id = None
@@ -349,18 +356,14 @@ class ListVolumeSnapshot(command.Lister):
True if parsed_args.project else parsed_args.all_projects True if parsed_args.project else parsed_args.all_projects
) )
search_opts = { data = volume_client.snapshots(
'all_tenants': all_projects,
'project_id': project_id,
'name': parsed_args.name,
'status': parsed_args.status,
'volume_id': volume_id,
}
data = volume_client.volume_snapshots.list(
search_opts=search_opts,
marker=parsed_args.marker, marker=parsed_args.marker,
limit=parsed_args.limit, limit=parsed_args.limit,
all_projects=all_projects,
project_id=project_id,
name=parsed_args.name,
status=parsed_args.status,
volume_id=volume_id,
) )
return ( return (
column_headers, column_headers,
@@ -369,8 +372,8 @@ class ListVolumeSnapshot(command.Lister):
s, s,
columns, columns,
formatters={ formatters={
'Metadata': format_columns.DictColumn, 'metadata': format_columns.DictColumn,
'Volume ID': _VolumeIdColumn, 'volume_id': _VolumeIdColumn,
}, },
) )
for s in data for s in data
@@ -506,18 +509,14 @@ class ShowVolumeSnapshot(command.ShowOne):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume volume_client = self.app.client_manager.sdk_connection.volume
snapshot = utils.find_resource(
volume_client.volume_snapshots, parsed_args.snapshot snapshot = volume_client.find_snapshot(
parsed_args.snapshot, ignore_missing=False
) )
snapshot._info.update(
{ data = _format_snapshot(snapshot)
'properties': format_columns.DictColumn( return zip(*sorted(data.items()))
snapshot._info.pop('metadata')
)
}
)
return zip(*sorted(snapshot._info.items()))
class UnsetVolumeSnapshot(command.Command): class UnsetVolumeSnapshot(command.Command):

View File

@@ -14,7 +14,6 @@
"""Volume v3 snapshot action implementations""" """Volume v3 snapshot action implementations"""
import copy
import functools import functools
import logging import logging
import typing as ty import typing as ty
@@ -315,31 +314,39 @@ class ListVolumeSnapshot(command.Lister):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume volume_client = self.app.client_manager.sdk_connection.volume
identity_client = self.app.client_manager.identity identity_client = self.app.client_manager.identity
columns: tuple[str, ...] = (
'id',
'name',
'description',
'status',
'size',
)
column_headers: tuple[str, ...] = (
'ID',
'Name',
'Description',
'Status',
'Size',
)
if parsed_args.long: if parsed_args.long:
columns = [ columns += (
'ID', 'created_at',
'Name', 'volume_id',
'Description', 'metadata',
'Status', )
'Size', column_headers += (
'Created At', 'Created At',
'Volume ID', 'Volume',
'Metadata', 'Properties',
] )
column_headers = copy.deepcopy(columns)
column_headers[6] = 'Volume'
column_headers[7] = 'Properties'
else:
columns = ['ID', 'Name', 'Description', 'Status', 'Size']
column_headers = copy.deepcopy(columns)
# Cache the volume list # Cache the volume list
volume_cache = {} volume_cache = {}
try: try:
for s in volume_client.volumes.list(): for s in volume_client.volumes():
volume_cache[s.id] = s volume_cache[s.id] = s
except Exception: # noqa: S110 except Exception: # noqa: S110
# Just forget it if there's any trouble # Just forget it if there's any trouble
@@ -350,8 +357,8 @@ class ListVolumeSnapshot(command.Lister):
volume_id = None volume_id = None
if parsed_args.volume: if parsed_args.volume:
volume_id = utils.find_resource( volume_id = volume_client.find_volume(
volume_client.volumes, parsed_args.volume parsed_args.volume, ignore_missing=False
).id ).id
project_id = None project_id = None
@@ -367,18 +374,14 @@ class ListVolumeSnapshot(command.Lister):
True if parsed_args.project else parsed_args.all_projects True if parsed_args.project else parsed_args.all_projects
) )
search_opts = { data = volume_client.snapshots(
'all_tenants': all_projects,
'project_id': project_id,
'name': parsed_args.name,
'status': parsed_args.status,
'volume_id': volume_id,
}
data = volume_client.volume_snapshots.list(
search_opts=search_opts,
marker=parsed_args.marker, marker=parsed_args.marker,
limit=parsed_args.limit, limit=parsed_args.limit,
all_projects=all_projects,
project_id=project_id,
name=parsed_args.name,
status=parsed_args.status,
volume_id=volume_id,
) )
return ( return (
column_headers, column_headers,
@@ -387,8 +390,8 @@ class ListVolumeSnapshot(command.Lister):
s, s,
columns, columns,
formatters={ formatters={
'Metadata': format_columns.DictColumn, 'metadata': format_columns.DictColumn,
'Volume ID': _VolumeIdColumn, 'volume_id': _VolumeIdColumn,
}, },
) )
for s in data for s in data
@@ -524,18 +527,14 @@ class ShowVolumeSnapshot(command.ShowOne):
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume volume_client = self.app.client_manager.sdk_connection.volume
snapshot = utils.find_resource(
volume_client.volume_snapshots, parsed_args.snapshot snapshot = volume_client.find_snapshot(
parsed_args.snapshot, ignore_missing=False
) )
snapshot._info.update(
{ data = _format_snapshot(snapshot)
'properties': format_columns.DictColumn( return zip(*sorted(data.items()))
snapshot._info.pop('metadata')
)
}
)
return zip(*sorted(snapshot._info.items()))
class UnsetVolumeSnapshot(command.Command): class UnsetVolumeSnapshot(command.Command):