Error handling of multi REST API calls for "snapshot set" command
Support multi REST API calls error handling for "snapshot set" command follow the rule in doc/source/command-errors.rst. Also add a unit test for testing the error handling Change-Id: I0c6214271bc54a25b051c0a62438c3344c8b51d7
This commit is contained in:
parent
676a0e9696
commit
10e665a148
@ -376,6 +376,55 @@ class TestSnapshotSet(TestSnapshot):
|
||||
self.snapshot.id, "error")
|
||||
self.assertIsNone(result)
|
||||
|
||||
def test_volume_set_state_failed(self):
|
||||
self.snapshots_mock.reset_state.side_effect = exceptions.CommandError()
|
||||
arglist = [
|
||||
'--state', 'error',
|
||||
self.snapshot.id
|
||||
]
|
||||
verifylist = [
|
||||
('state', 'error'),
|
||||
('snapshot', self.snapshot.id)
|
||||
]
|
||||
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
try:
|
||||
self.cmd.take_action(parsed_args)
|
||||
self.fail('CommandError should be raised.')
|
||||
except exceptions.CommandError as e:
|
||||
self.assertEqual('One or more of the set operations failed',
|
||||
str(e))
|
||||
self.snapshots_mock.reset_state.assert_called_once_with(
|
||||
self.snapshot.id, 'error')
|
||||
|
||||
def test_volume_set_name_and_state_failed(self):
|
||||
self.snapshots_mock.reset_state.side_effect = exceptions.CommandError()
|
||||
arglist = [
|
||||
'--state', 'error',
|
||||
"--name", "new_snapshot",
|
||||
self.snapshot.id
|
||||
]
|
||||
verifylist = [
|
||||
('state', 'error'),
|
||||
("name", "new_snapshot"),
|
||||
('snapshot', self.snapshot.id)
|
||||
]
|
||||
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
try:
|
||||
self.cmd.take_action(parsed_args)
|
||||
self.fail('CommandError should be raised.')
|
||||
except exceptions.CommandError as e:
|
||||
self.assertEqual('One or more of the set operations failed',
|
||||
str(e))
|
||||
kwargs = {
|
||||
"name": "new_snapshot",
|
||||
}
|
||||
self.snapshots_mock.update.assert_called_once_with(
|
||||
self.snapshot.id, **kwargs)
|
||||
self.snapshots_mock.reset_state.assert_called_once_with(
|
||||
self.snapshot.id, 'error')
|
||||
|
||||
|
||||
class TestSnapshotShow(TestSnapshot):
|
||||
|
||||
|
@ -16,15 +16,20 @@
|
||||
"""Volume v1 Snapshot action implementations"""
|
||||
|
||||
import copy
|
||||
import logging
|
||||
|
||||
from osc_lib.cli import parseractions
|
||||
from osc_lib.command import command
|
||||
from osc_lib import exceptions
|
||||
from osc_lib import utils
|
||||
import six
|
||||
|
||||
from openstackclient.i18n import _
|
||||
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class CreateSnapshot(command.ShowOne):
|
||||
"""Create new snapshot"""
|
||||
|
||||
@ -199,17 +204,31 @@ class SetSnapshot(command.Command):
|
||||
snapshot = utils.find_resource(volume_client.volume_snapshots,
|
||||
parsed_args.snapshot)
|
||||
|
||||
result = 0
|
||||
if parsed_args.property:
|
||||
volume_client.volume_snapshots.set_metadata(snapshot.id,
|
||||
parsed_args.property)
|
||||
try:
|
||||
volume_client.volume_snapshots.set_metadata(
|
||||
snapshot.id, parsed_args.property)
|
||||
except Exception as e:
|
||||
LOG.error(_("Failed to set snapshot property: %s"), e)
|
||||
result += 1
|
||||
|
||||
kwargs = {}
|
||||
if parsed_args.name:
|
||||
kwargs['display_name'] = parsed_args.name
|
||||
if parsed_args.description:
|
||||
kwargs['display_description'] = parsed_args.description
|
||||
if kwargs:
|
||||
try:
|
||||
snapshot.update(**kwargs)
|
||||
except Exception as e:
|
||||
LOG.error(_("Failed to update snapshot display name "
|
||||
"or display description: %s"), e)
|
||||
result += 1
|
||||
|
||||
snapshot.update(**kwargs)
|
||||
if result > 0:
|
||||
raise exceptions.CommandError(_("One or more of the "
|
||||
"set operations failed"))
|
||||
|
||||
|
||||
class ShowSnapshot(command.ShowOne):
|
||||
|
@ -240,19 +240,40 @@ class SetSnapshot(command.Command):
|
||||
snapshot = utils.find_resource(volume_client.volume_snapshots,
|
||||
parsed_args.snapshot)
|
||||
|
||||
result = 0
|
||||
if parsed_args.property:
|
||||
try:
|
||||
volume_client.volume_snapshots.set_metadata(
|
||||
snapshot.id, parsed_args.property)
|
||||
except Exception as e:
|
||||
LOG.error(_("Failed to set snapshot property: %s"), e)
|
||||
result += 1
|
||||
|
||||
if parsed_args.state:
|
||||
try:
|
||||
volume_client.volume_snapshots.reset_state(
|
||||
snapshot.id, parsed_args.state)
|
||||
except Exception as e:
|
||||
LOG.error(_("Failed to set snapshot state: %s"), e)
|
||||
result += 1
|
||||
|
||||
kwargs = {}
|
||||
if parsed_args.name:
|
||||
kwargs['name'] = parsed_args.name
|
||||
if parsed_args.description:
|
||||
kwargs['description'] = parsed_args.description
|
||||
if kwargs:
|
||||
try:
|
||||
volume_client.volume_snapshots.update(
|
||||
snapshot.id, **kwargs)
|
||||
except Exception as e:
|
||||
LOG.error(_("Failed to update snapshot name "
|
||||
"or description: %s"), e)
|
||||
result += 1
|
||||
|
||||
if parsed_args.property:
|
||||
volume_client.volume_snapshots.set_metadata(snapshot.id,
|
||||
parsed_args.property)
|
||||
if parsed_args.state:
|
||||
volume_client.volume_snapshots.reset_state(snapshot.id,
|
||||
parsed_args.state)
|
||||
volume_client.volume_snapshots.update(snapshot.id, **kwargs)
|
||||
if result > 0:
|
||||
raise exceptions.CommandError(_("One or more of the "
|
||||
"set operations failed"))
|
||||
|
||||
|
||||
class ShowSnapshot(command.ShowOne):
|
||||
|
Loading…
Reference in New Issue
Block a user