summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-12-23 22:23:45 +0000
committerGerrit Code Review <review@openstack.org>2014-12-23 22:23:45 +0000
commita24d6e7c6f06ccaecefa0a2c6cd2c105f3cd8be5 (patch)
tree2a87f2dd30171fce3fed96a4139e8c1d8521bc18
parentd8f1cbd98461d4c2989384d29c7e2a99223468a9 (diff)
parent470b7e53a8d7e7ba088b934c49163412c8ee5ed9 (diff)
downloadpython-openstackclient-a24d6e7c6f06ccaecefa0a2c6cd2c105f3cd8be5.tar.gz
Merge "add multi-delete support for compute/image/net/volume"
-rw-r--r--doc/source/command-objects/server.rst8
-rw-r--r--openstackclient/compute/v2/server.py14
-rw-r--r--openstackclient/image/v1/image.py18
-rw-r--r--openstackclient/image/v2/image.py18
-rw-r--r--openstackclient/network/v2/network.py13
-rw-r--r--openstackclient/tests/compute/v2/test_server.py2
-rw-r--r--openstackclient/tests/image/v1/test_image.py2
-rw-r--r--openstackclient/tests/image/v2/test_image.py2
-rw-r--r--openstackclient/tests/network/v2/test_network.py2
-rw-r--r--openstackclient/volume/v1/backup.py14
-rw-r--r--openstackclient/volume/v1/snapshot.py14
-rw-r--r--openstackclient/volume/v1/volume.py22
12 files changed, 71 insertions, 58 deletions
diff --git a/doc/source/command-objects/server.rst b/doc/source/command-objects/server.rst
index 482602ee..7d5cdce5 100644
--- a/doc/source/command-objects/server.rst
+++ b/doc/source/command-objects/server.rst
@@ -117,15 +117,15 @@ Create a new server
:option:`<server-name>`
New server name
-server delete
--------------
+server(s) delete
+----------------
-Delete server command
+Delete server(s) command
.. code:: bash
os server delete
- <server>
+ <server> [<server> ...]
:option:`<server>`
Server (name or ID)
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 5ab1d5f3..a5d8b0c3 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -511,25 +511,27 @@ class CreateServerImage(show.ShowOne):
class DeleteServer(command.Command):
- """Delete server command"""
+ """Delete server(s)"""
log = logging.getLogger(__name__ + '.DeleteServer')
def get_parser(self, prog_name):
parser = super(DeleteServer, self).get_parser(prog_name)
parser.add_argument(
- 'server',
+ 'servers',
metavar='<server>',
- help=_('Server (name or ID)'),
+ nargs="+",
+ help=_('Server(s) to delete (name or ID)'),
)
return parser
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
compute_client = self.app.client_manager.compute
- server = utils.find_resource(
- compute_client.servers, parsed_args.server)
- compute_client.servers.delete(server.id)
+ for server in parsed_args.servers:
+ server_obj = utils.find_resource(
+ compute_client.servers, server)
+ compute_client.servers.delete(server_obj.id)
return
diff --git a/openstackclient/image/v1/image.py b/openstackclient/image/v1/image.py
index 32dd388c..ca1eead4 100644
--- a/openstackclient/image/v1/image.py
+++ b/openstackclient/image/v1/image.py
@@ -262,16 +262,17 @@ class CreateImage(show.ShowOne):
class DeleteImage(command.Command):
- """Delete an image"""
+ """Delete image(s)"""
log = logging.getLogger(__name__ + ".DeleteImage")
def get_parser(self, prog_name):
parser = super(DeleteImage, self).get_parser(prog_name)
parser.add_argument(
- "image",
+ "images",
metavar="<image>",
- help="Name or ID of image to delete",
+ nargs="+",
+ help="Image(s) to delete (name or ID)",
)
return parser
@@ -279,11 +280,12 @@ class DeleteImage(command.Command):
self.log.debug("take_action(%s)", parsed_args)
image_client = self.app.client_manager.image
- image = utils.find_resource(
- image_client.images,
- parsed_args.image,
- )
- image_client.images.delete(image.id)
+ for image in parsed_args.images:
+ image_obj = utils.find_resource(
+ image_client.images,
+ image,
+ )
+ image_client.images.delete(image_obj.id)
class ListImage(lister.Lister):
diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py
index c12ff11a..63351c6d 100644
--- a/openstackclient/image/v2/image.py
+++ b/openstackclient/image/v2/image.py
@@ -27,16 +27,17 @@ from openstackclient.common import utils
class DeleteImage(command.Command):
- """Delete an image"""
+ """Delete image(s)"""
log = logging.getLogger(__name__ + ".DeleteImage")
def get_parser(self, prog_name):
parser = super(DeleteImage, self).get_parser(prog_name)
parser.add_argument(
- "image",
+ "images",
metavar="<image>",
- help="Name or ID of image to delete",
+ nargs="+",
+ help="Image(s) to delete (name or ID)",
)
return parser
@@ -44,11 +45,12 @@ class DeleteImage(command.Command):
self.log.debug("take_action(%s)", parsed_args)
image_client = self.app.client_manager.image
- image = utils.find_resource(
- image_client.images,
- parsed_args.image,
- )
- image_client.images.delete(image.id)
+ for image in parsed_args.images:
+ image_obj = utils.find_resource(
+ image_client.images,
+ image,
+ )
+ image_client.images.delete(image_obj.id)
class ListImage(lister.Lister):
diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py
index f34666ba..0d68f82d 100644
--- a/openstackclient/network/v2/network.py
+++ b/openstackclient/network/v2/network.py
@@ -86,26 +86,27 @@ class CreateNetwork(show.ShowOne):
class DeleteNetwork(command.Command):
- """Delete a network"""
+ """Delete network(s)"""
log = logging.getLogger(__name__ + '.DeleteNetwork')
def get_parser(self, prog_name):
parser = super(DeleteNetwork, self).get_parser(prog_name)
parser.add_argument(
- 'identifier',
+ 'networks',
metavar="<network>",
- help=("Name or identifier of network to delete")
+ nargs="+",
+ help=("Network(s) to delete (name or ID)")
)
return parser
def take_action(self, parsed_args):
self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
- _id = common.find(client, 'network', 'networks',
- parsed_args.identifier)
delete_method = getattr(client, "delete_network")
- delete_method(_id)
+ for network in parsed_args.networks:
+ _id = common.find(client, 'network', 'networks', network)
+ delete_method(_id)
return
diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py
index 19c13440..d51beef3 100644
--- a/openstackclient/tests/compute/v2/test_server.py
+++ b/openstackclient/tests/compute/v2/test_server.py
@@ -232,7 +232,7 @@ class TestServerDelete(TestServer):
compute_fakes.server_id,
]
verifylist = [
- ('server', compute_fakes.server_id),
+ ('servers', [compute_fakes.server_id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py
index a0566930..4d21ac48 100644
--- a/openstackclient/tests/image/v1/test_image.py
+++ b/openstackclient/tests/image/v1/test_image.py
@@ -288,7 +288,7 @@ class TestImageDelete(TestImage):
image_fakes.image_id,
]
verifylist = [
- ('image', image_fakes.image_id),
+ ('images', [image_fakes.image_id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py
index 3e9eeebb..bc61a89f 100644
--- a/openstackclient/tests/image/v2/test_image.py
+++ b/openstackclient/tests/image/v2/test_image.py
@@ -51,7 +51,7 @@ class TestImageDelete(TestImage):
image_fakes.image_id,
]
verifylist = [
- ('image', image_fakes.image_id),
+ ('images', [image_fakes.image_id]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
diff --git a/openstackclient/tests/network/v2/test_network.py b/openstackclient/tests/network/v2/test_network.py
index 468db5e0..b893229f 100644
--- a/openstackclient/tests/network/v2/test_network.py
+++ b/openstackclient/tests/network/v2/test_network.py
@@ -120,7 +120,7 @@ class TestDeleteNetwork(common.TestNetworkBase):
FAKE_NAME,
]
verifylist = [
- ('identifier', FAKE_NAME),
+ ('networks', [FAKE_NAME]),
]
lister = mock.Mock(return_value={RESOURCES: [RECORD]})
self.app.client_manager.network.list_networks = lister
diff --git a/openstackclient/volume/v1/backup.py b/openstackclient/volume/v1/backup.py
index 992fa7be..8c16ba25 100644
--- a/openstackclient/volume/v1/backup.py
+++ b/openstackclient/volume/v1/backup.py
@@ -73,25 +73,27 @@ class CreateBackup(show.ShowOne):
class DeleteBackup(command.Command):
- """Delete backup command"""
+ """Delete backup(s)"""
log = logging.getLogger(__name__ + '.DeleteBackup')
def get_parser(self, prog_name):
parser = super(DeleteBackup, self).get_parser(prog_name)
parser.add_argument(
- 'backup',
+ 'backups',
metavar='<backup>',
- help='Name or ID of backup to delete',
+ nargs="+",
+ help='Backup(s) to delete (name or ID)',
)
return parser
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
volume_client = self.app.client_manager.volume
- backup_id = utils.find_resource(volume_client.backups,
- parsed_args.backup).id
- volume_client.backups.delete(backup_id)
+ for backup in parsed_args.backups:
+ backup_id = utils.find_resource(volume_client.backups,
+ backup).id
+ volume_client.backups.delete(backup_id)
return
diff --git a/openstackclient/volume/v1/snapshot.py b/openstackclient/volume/v1/snapshot.py
index 9cc3c4c1..c9e1baca 100644
--- a/openstackclient/volume/v1/snapshot.py
+++ b/openstackclient/volume/v1/snapshot.py
@@ -74,25 +74,27 @@ class CreateSnapshot(show.ShowOne):
class DeleteSnapshot(command.Command):
- """Delete snapshot command"""
+ """Delete snapshot(s)"""
log = logging.getLogger(__name__ + '.DeleteSnapshot')
def get_parser(self, prog_name):
parser = super(DeleteSnapshot, self).get_parser(prog_name)
parser.add_argument(
- 'snapshot',
+ 'snapshots',
metavar='<snapshot>',
- help='Name or ID of snapshot to delete',
+ nargs="+",
+ help='Snapshot(s) to delete (name or ID)',
)
return parser
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
volume_client = self.app.client_manager.volume
- snapshot_id = utils.find_resource(volume_client.volume_snapshots,
- parsed_args.snapshot).id
- volume_client.volume_snapshots.delete(snapshot_id)
+ for snapshot in parsed_args.snapshots:
+ snapshot_id = utils.find_resource(volume_client.volume_snapshots,
+ snapshot).id
+ volume_client.volume_snapshots.delete(snapshot_id)
return
diff --git a/openstackclient/volume/v1/volume.py b/openstackclient/volume/v1/volume.py
index 84c216d3..73ae3a7f 100644
--- a/openstackclient/volume/v1/volume.py
+++ b/openstackclient/volume/v1/volume.py
@@ -155,35 +155,37 @@ class CreateVolume(show.ShowOne):
class DeleteVolume(command.Command):
- """Delete a volume"""
+ """Delete volume(s)"""
log = logging.getLogger(__name__ + '.DeleteVolume')
def get_parser(self, prog_name):
parser = super(DeleteVolume, self).get_parser(prog_name)
parser.add_argument(
- 'volume',
+ 'volumes',
metavar='<volume>',
- help='Volume to delete (name or ID)',
+ nargs="+",
+ help='Volume(s) to delete (name or ID)',
)
parser.add_argument(
'--force',
dest='force',
action='store_true',
default=False,
- help='Attempt forced removal of a volume, regardless of state',
+ help='Attempt forced removal of volume(s), regardless of state',
)
return parser
def take_action(self, parsed_args):
self.log.debug('take_action(%s)', parsed_args)
volume_client = self.app.client_manager.volume
- volume = utils.find_resource(
- volume_client.volumes, parsed_args.volume)
- if parsed_args.force:
- volume_client.volumes.force_delete(volume.id)
- else:
- volume_client.volumes.delete(volume.id)
+ for volume in parsed_args.volumes:
+ volume_obj = utils.find_resource(
+ volume_client.volumes, volume)
+ if parsed_args.force:
+ volume_client.volumes.force_delete(volume_obj.id)
+ else:
+ volume_client.volumes.delete(volume_obj.id)
return