summaryrefslogtreecommitdiff
path: root/openstackclient/compute/v2
diff options
context:
space:
mode:
authorHuanxuan Ao <huanxuan.ao@easystack.cn>2016-06-27 11:04:05 +0800
committerSteve Martinelli <s.martinelli@gmail.com>2016-06-27 20:39:23 +0000
commitaf7ab03693a5708102cf6746563da289e4c1e3b7 (patch)
tree9d87de733c25d044deab1732e595f9f1adee454c /openstackclient/compute/v2
parent044a46ed5f040020cf80adc1ace987802344e87d (diff)
downloadpython-openstackclient-af7ab03693a5708102cf6746563da289e4c1e3b7.tar.gz
Support bulk deletion for delete commands in computev2
Support bulk deletion and error handling for "keypair delete" and "service delete" commands in computev2. Up to now, all the delete commands in computev2 support bulk deletion. Change-Id: I6d5c960e9716188e56615514d0921618a15a88ec Partially-Implements: blueprint multi-argument-compute Partial-Bug: #1592906
Diffstat (limited to 'openstackclient/compute/v2')
-rw-r--r--openstackclient/compute/v2/keypair.py27
-rw-r--r--openstackclient/compute/v2/service.py20
2 files changed, 41 insertions, 6 deletions
diff --git a/openstackclient/compute/v2/keypair.py b/openstackclient/compute/v2/keypair.py
index 13c0a99c..3725a3a8 100644
--- a/openstackclient/compute/v2/keypair.py
+++ b/openstackclient/compute/v2/keypair.py
@@ -16,6 +16,7 @@
"""Keypair action implementations"""
import io
+import logging
import os
import sys
@@ -27,6 +28,9 @@ import six
from openstackclient.i18n import _
+LOG = logging.getLogger(__name__)
+
+
class CreateKeypair(command.ShowOne):
"""Create new public key"""
@@ -78,20 +82,37 @@ class CreateKeypair(command.ShowOne):
class DeleteKeypair(command.Command):
- """Delete public key"""
+ """Delete public key(s)"""
def get_parser(self, prog_name):
parser = super(DeleteKeypair, self).get_parser(prog_name)
parser.add_argument(
'name',
metavar='<key>',
- help=_("Public key to delete (name only)")
+ nargs='+',
+ help=_("Public key(s) to delete (name only)")
)
return parser
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
- compute_client.keypairs.delete(parsed_args.name)
+ result = 0
+ for n in parsed_args.name:
+ try:
+ data = utils.find_resource(
+ compute_client.keypairs, n)
+ compute_client.keypairs.delete(data.name)
+ except Exception as e:
+ result += 1
+ LOG.error(_("Failed to delete public key with name "
+ "'%(name)s': %(e)s")
+ % {'name': n, 'e': e})
+
+ if result > 0:
+ total = len(parsed_args.name)
+ msg = (_("%(result)s of %(total)s public keys failed "
+ "to delete.") % {'result': result, 'total': total})
+ raise exceptions.CommandError(msg)
class ListKeypair(command.Lister):
diff --git a/openstackclient/compute/v2/service.py b/openstackclient/compute/v2/service.py
index 2e40dd7f..0b5b1cfb 100644
--- a/openstackclient/compute/v2/service.py
+++ b/openstackclient/compute/v2/service.py
@@ -29,21 +29,35 @@ LOG = logging.getLogger(__name__)
class DeleteService(command.Command):
- """Delete service command"""
+ """Delete compute service(s)"""
def get_parser(self, prog_name):
parser = super(DeleteService, self).get_parser(prog_name)
parser.add_argument(
"service",
metavar="<service>",
- help=_("Compute service to delete (ID only)")
+ nargs='+',
+ help=_("Compute service(s) to delete (ID only)")
)
return parser
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
+ result = 0
+ for s in parsed_args.service:
+ try:
+ compute_client.services.delete(s)
+ except Exception as e:
+ result += 1
+ LOG.error(_("Failed to delete compute service with "
+ "ID '%(service)s': %(e)s")
+ % {'service': s, 'e': e})
- compute_client.services.delete(parsed_args.service)
+ if result > 0:
+ total = len(parsed_args.service)
+ msg = (_("%(result)s of %(total)s compute services failed "
+ "to delete.") % {'result': result, 'total': total})
+ raise exceptions.CommandError(msg)
class ListService(command.Lister):