summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2023-05-17 17:09:20 +0000
committerGerrit Code Review <review@openstack.org>2023-05-17 17:09:20 +0000
commit938850bae17134c426855fd1b5c6475751adcd03 (patch)
tree640c21272ad6e4c2bc9a9ad77d050f894e1f372f
parent31ae635ffe0a2c37ab2bda394d2b072d7e5acff9 (diff)
parentaaeda25e28ba27c7e5d1870eba448e94e4a8aa1b (diff)
downloadpython-openstackclient-938850bae17134c426855fd1b5c6475751adcd03.tar.gz
Merge "Migrate 'volume revert' command to SDK"
-rw-r--r--openstackclient/tests/unit/volume/v3/test_volume.py56
-rw-r--r--openstackclient/volume/v3/volume.py19
-rw-r--r--releasenotes/notes/migrate-volume-revert-to-sdk-1e399853d80ba5f8.yaml4
3 files changed, 55 insertions, 24 deletions
diff --git a/openstackclient/tests/unit/volume/v3/test_volume.py b/openstackclient/tests/unit/volume/v3/test_volume.py
index 507edc42..1b298678 100644
--- a/openstackclient/tests/unit/volume/v3/test_volume.py
+++ b/openstackclient/tests/unit/volume/v3/test_volume.py
@@ -16,9 +16,9 @@ import copy
from unittest import mock
from cinderclient import api_versions
+from openstack import utils as sdk_utils
from osc_lib.cli import format_columns
from osc_lib import exceptions
-from osc_lib import utils
from openstackclient.tests.unit.volume.v2 import fakes as volume_fakes
from openstackclient.volume.v3 import volume
@@ -128,18 +128,36 @@ class TestVolumeRevertToSnapshot(volume_fakes.TestVolume):
def setUp(self):
super().setUp()
- self.volumes_mock = self.app.client_manager.volume.volumes
- self.volumes_mock.reset_mock()
- self.snapshots_mock = self.app.client_manager.volume.volume_snapshots
- self.snapshots_mock.reset_mock()
+ self.app.client_manager.sdk_connection = mock.Mock()
+ self.app.client_manager.sdk_connection.volume = mock.Mock()
+ self.sdk_client = self.app.client_manager.sdk_connection.volume
+ self.sdk_client.reset_mock()
+
+ patcher = mock.patch.object(
+ sdk_utils, 'supports_microversion', return_value=True
+ )
+ self.addCleanup(patcher.stop)
+ self.supports_microversion_mock = patcher.start()
+ self._set_mock_microversion(
+ self.app.client_manager.volume.api_version.get_string()
+ )
+
self.mock_volume = volume_fakes.create_one_volume()
self.mock_snapshot = volume_fakes.create_one_snapshot(
- attrs={'volume_id': self.volumes_mock.id}
+ attrs={'volume_id': self.mock_volume.id}
)
# Get the command object to test
self.cmd = volume.VolumeRevertToSnapshot(self.app, None)
+ def _set_mock_microversion(self, mock_v):
+ """Set a specific microversion for the mock supports_microversion()."""
+ self.supports_microversion_mock.reset_mock(return_value=True)
+ self.supports_microversion_mock.side_effect = (
+ lambda _, v: api_versions.APIVersion(v)
+ <= api_versions.APIVersion(mock_v)
+ )
+
def test_volume_revert_to_snapshot_pre_340(self):
arglist = [
self.mock_snapshot.id,
@@ -157,9 +175,7 @@ class TestVolumeRevertToSnapshot(volume_fakes.TestVolume):
)
def test_volume_revert_to_snapshot(self):
- self.app.client_manager.volume.api_version = api_versions.APIVersion(
- '3.40'
- )
+ self._set_mock_microversion('3.40')
arglist = [
self.mock_snapshot.id,
]
@@ -168,14 +184,22 @@ class TestVolumeRevertToSnapshot(volume_fakes.TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- find_mock_result = [self.mock_snapshot, self.mock_volume]
with mock.patch.object(
- utils, 'find_resource', side_effect=find_mock_result
- ) as find_mock:
+ self.sdk_client, 'find_volume', return_value=self.mock_volume
+ ), mock.patch.object(
+ self.sdk_client, 'find_snapshot', return_value=self.mock_snapshot
+ ):
self.cmd.take_action(parsed_args)
- self.volumes_mock.revert_to_snapshot.assert_called_once_with(
- volume=self.mock_volume,
- snapshot=self.mock_snapshot,
+ self.sdk_client.revert_volume_to_snapshot.assert_called_once_with(
+ self.mock_volume,
+ self.mock_snapshot,
+ )
+ self.sdk_client.find_volume.assert_called_with(
+ self.mock_volume.id,
+ ignore_missing=False,
+ )
+ self.sdk_client.find_snapshot.assert_called_with(
+ self.mock_snapshot.id,
+ ignore_missing=False,
)
- self.assertEqual(2, find_mock.call_count)
diff --git a/openstackclient/volume/v3/volume.py b/openstackclient/volume/v3/volume.py
index f02053f0..0f2d3c1d 100644
--- a/openstackclient/volume/v3/volume.py
+++ b/openstackclient/volume/v3/volume.py
@@ -17,6 +17,7 @@
import logging
from cinderclient import api_versions
+from openstack import utils as sdk_utils
from osc_lib.cli import format_columns
from osc_lib.command import command
from osc_lib import exceptions
@@ -96,20 +97,22 @@ class VolumeRevertToSnapshot(command.Command):
return parser
def take_action(self, parsed_args):
- volume_client = self.app.client_manager.volume
+ volume_client = self.app.client_manager.sdk_connection.volume
- if volume_client.api_version < api_versions.APIVersion('3.40'):
+ if not sdk_utils.supports_microversion(volume_client, '3.40'):
msg = _(
"--os-volume-api-version 3.40 or greater is required to "
"support the 'volume revert snapshot' command"
)
raise exceptions.CommandError(msg)
- snapshot = utils.find_resource(
- volume_client.volume_snapshots, parsed_args.snapshot
+ snapshot = volume_client.find_snapshot(
+ parsed_args.snapshot,
+ ignore_missing=False,
)
- volume = utils.find_resource(volume_client.volumes, snapshot.volume_id)
-
- volume_client.volumes.revert_to_snapshot(
- volume=volume, snapshot=snapshot
+ volume = volume_client.find_volume(
+ snapshot.volume_id,
+ ignore_missing=False,
)
+
+ volume_client.revert_volume_to_snapshot(volume, snapshot)
diff --git a/releasenotes/notes/migrate-volume-revert-to-sdk-1e399853d80ba5f8.yaml b/releasenotes/notes/migrate-volume-revert-to-sdk-1e399853d80ba5f8.yaml
new file mode 100644
index 00000000..30f12e80
--- /dev/null
+++ b/releasenotes/notes/migrate-volume-revert-to-sdk-1e399853d80ba5f8.yaml
@@ -0,0 +1,4 @@
+---
+features:
+ - |
+ The ``volume revert`` command has been migrated to SDK.