summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorSteve Martinelli <s.martinelli@gmail.com>2016-06-16 14:25:33 -0400
committerSteve Martinelli <s.martinelli@gmail.com>2016-06-20 16:42:36 -0400
commit4e62e1e2e18cb93ba0f88bff8727182b1002de4b (patch)
tree413776b14a9fdda3dbfafbc69b67ff666a6a032f /openstackclient
parentf5ae23ab86c662e2f75952e6aa62c02ab3855b9b (diff)
downloadpython-openstackclient-4e62e1e2e18cb93ba0f88bff8727182b1002de4b.tar.gz
support multi-delete for volume-type
Added the ability to delete multiple volume types at once. Note there are no unit tests exist for v1 volume-types, so instead a functional test was created. Partial-Bug: #1592906 Change-Id: I99f3f22901ab35252b91a3072b14de7d19cb17ca
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/tests/volume/v2/test_type.py4
-rw-r--r--openstackclient/volume/v1/volume_type.py35
-rw-r--r--openstackclient/volume/v2/volume_type.py29
3 files changed, 54 insertions, 14 deletions
diff --git a/openstackclient/tests/volume/v2/test_type.py b/openstackclient/tests/volume/v2/test_type.py
index 7eea1c3c..174f33f2 100644
--- a/openstackclient/tests/volume/v2/test_type.py
+++ b/openstackclient/tests/volume/v2/test_type.py
@@ -128,13 +128,13 @@ class TestTypeDelete(TestType):
self.volume_type.id
]
verifylist = [
- ("volume_type", self.volume_type.id)
+ ("volume_types", [self.volume_type.id])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.types_mock.delete.assert_called_with(self.volume_type.id)
+ self.types_mock.delete.assert_called_with(self.volume_type)
self.assertIsNone(result)
diff --git a/openstackclient/volume/v1/volume_type.py b/openstackclient/volume/v1/volume_type.py
index 289966e5..3fe4fa05 100644
--- a/openstackclient/volume/v1/volume_type.py
+++ b/openstackclient/volume/v1/volume_type.py
@@ -15,14 +15,20 @@
"""Volume v1 Type action implementations"""
+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 CreateVolumeType(command.ShowOne):
"""Create new volume type"""
@@ -56,22 +62,39 @@ class CreateVolumeType(command.ShowOne):
class DeleteVolumeType(command.Command):
- """Delete volume type"""
+ """Delete volume type(s)"""
def get_parser(self, prog_name):
parser = super(DeleteVolumeType, self).get_parser(prog_name)
parser.add_argument(
- 'volume_type',
+ 'volume_types',
metavar='<volume-type>',
- help=_('Volume type to delete (name or ID)'),
+ nargs='+',
+ help=_('Volume type(s) to delete (name or ID)'),
)
return parser
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
- volume_type_id = utils.find_resource(
- volume_client.volume_types, parsed_args.volume_type).id
- volume_client.volume_types.delete(volume_type_id)
+ result = 0
+
+ for volume_type in parsed_args.volume_types:
+ try:
+ vol_type = utils.find_resource(volume_client.volume_types,
+ volume_type)
+
+ volume_client.volume_types.delete(vol_type)
+ except Exception as e:
+ result += 1
+ LOG.error(_("Failed to delete volume type with "
+ "name or ID '%(volume_type)s': %(e)s")
+ % {'volume_type': volume_type, 'e': e})
+
+ if result > 0:
+ total = len(parsed_args.volume_types)
+ msg = (_("%(result)s of %(total)s volume types failed "
+ "to delete.") % {'result': result, 'total': total})
+ raise exceptions.CommandError(msg)
class ListVolumeType(command.Lister):
diff --git a/openstackclient/volume/v2/volume_type.py b/openstackclient/volume/v2/volume_type.py
index 5e9faa1d..87f4c547 100644
--- a/openstackclient/volume/v2/volume_type.py
+++ b/openstackclient/volume/v2/volume_type.py
@@ -92,22 +92,39 @@ class CreateVolumeType(command.ShowOne):
class DeleteVolumeType(command.Command):
- """Delete volume type"""
+ """Delete volume type(s)"""
def get_parser(self, prog_name):
parser = super(DeleteVolumeType, self).get_parser(prog_name)
parser.add_argument(
- "volume_type",
+ "volume_types",
metavar="<volume-type>",
- help=_("Volume type to delete (name or ID)")
+ nargs="+",
+ help=_("Volume type(s) to delete (name or ID)")
)
return parser
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
- volume_type = utils.find_resource(
- volume_client.volume_types, parsed_args.volume_type)
- volume_client.volume_types.delete(volume_type.id)
+ result = 0
+
+ for volume_type in parsed_args.volume_types:
+ try:
+ vol_type = utils.find_resource(volume_client.volume_types,
+ volume_type)
+
+ volume_client.volume_types.delete(vol_type)
+ except Exception as e:
+ result += 1
+ LOG.error(_("Failed to delete volume type with "
+ "name or ID '%(volume_type)s': %(e)s")
+ % {'volume_type': volume_type, 'e': e})
+
+ if result > 0:
+ total = len(parsed_args.volume_types)
+ msg = (_("%(result)s of %(total)s volume types failed "
+ "to delete.") % {'result': result, 'total': total})
+ raise exceptions.CommandError(msg)
class ListVolumeType(command.Lister):