Skip to content

Commit a24d6e7

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "add multi-delete support for compute/image/net/volume"
2 parents d8f1cbd + 470b7e5 commit a24d6e7

12 files changed

Lines changed: 71 additions & 58 deletions

File tree

doc/source/command-objects/server.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,15 +117,15 @@ Create a new server
117117
:option:`<server-name>`
118118
New server name
119119

120-
server delete
121-
-------------
120+
server(s) delete
121+
----------------
122122

123-
Delete server command
123+
Delete server(s) command
124124

125125
.. code:: bash
126126
127127
os server delete
128-
<server>
128+
<server> [<server> ...]
129129
130130
:option:`<server>`
131131
Server (name or ID)

openstackclient/compute/v2/server.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -511,25 +511,27 @@ def take_action(self, parsed_args):
511511

512512

513513
class DeleteServer(command.Command):
514-
"""Delete server command"""
514+
"""Delete server(s)"""
515515

516516
log = logging.getLogger(__name__ + '.DeleteServer')
517517

518518
def get_parser(self, prog_name):
519519
parser = super(DeleteServer, self).get_parser(prog_name)
520520
parser.add_argument(
521-
'server',
521+
'servers',
522522
metavar='<server>',
523-
help=_('Server (name or ID)'),
523+
nargs="+",
524+
help=_('Server(s) to delete (name or ID)'),
524525
)
525526
return parser
526527

527528
def take_action(self, parsed_args):
528529
self.log.debug('take_action(%s)', parsed_args)
529530
compute_client = self.app.client_manager.compute
530-
server = utils.find_resource(
531-
compute_client.servers, parsed_args.server)
532-
compute_client.servers.delete(server.id)
531+
for server in parsed_args.servers:
532+
server_obj = utils.find_resource(
533+
compute_client.servers, server)
534+
compute_client.servers.delete(server_obj.id)
533535
return
534536

535537

openstackclient/image/v1/image.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -262,28 +262,30 @@ def take_action(self, parsed_args):
262262

263263

264264
class DeleteImage(command.Command):
265-
"""Delete an image"""
265+
"""Delete image(s)"""
266266

267267
log = logging.getLogger(__name__ + ".DeleteImage")
268268

269269
def get_parser(self, prog_name):
270270
parser = super(DeleteImage, self).get_parser(prog_name)
271271
parser.add_argument(
272-
"image",
272+
"images",
273273
metavar="<image>",
274-
help="Name or ID of image to delete",
274+
nargs="+",
275+
help="Image(s) to delete (name or ID)",
275276
)
276277
return parser
277278

278279
def take_action(self, parsed_args):
279280
self.log.debug("take_action(%s)", parsed_args)
280281

281282
image_client = self.app.client_manager.image
282-
image = utils.find_resource(
283-
image_client.images,
284-
parsed_args.image,
285-
)
286-
image_client.images.delete(image.id)
283+
for image in parsed_args.images:
284+
image_obj = utils.find_resource(
285+
image_client.images,
286+
image,
287+
)
288+
image_client.images.delete(image_obj.id)
287289

288290

289291
class ListImage(lister.Lister):

openstackclient/image/v2/image.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,28 +27,30 @@
2727

2828

2929
class DeleteImage(command.Command):
30-
"""Delete an image"""
30+
"""Delete image(s)"""
3131

3232
log = logging.getLogger(__name__ + ".DeleteImage")
3333

3434
def get_parser(self, prog_name):
3535
parser = super(DeleteImage, self).get_parser(prog_name)
3636
parser.add_argument(
37-
"image",
37+
"images",
3838
metavar="<image>",
39-
help="Name or ID of image to delete",
39+
nargs="+",
40+
help="Image(s) to delete (name or ID)",
4041
)
4142
return parser
4243

4344
def take_action(self, parsed_args):
4445
self.log.debug("take_action(%s)", parsed_args)
4546

4647
image_client = self.app.client_manager.image
47-
image = utils.find_resource(
48-
image_client.images,
49-
parsed_args.image,
50-
)
51-
image_client.images.delete(image.id)
48+
for image in parsed_args.images:
49+
image_obj = utils.find_resource(
50+
image_client.images,
51+
image,
52+
)
53+
image_client.images.delete(image_obj.id)
5254

5355

5456
class ListImage(lister.Lister):

openstackclient/network/v2/network.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,26 +86,27 @@ def get_body(self, parsed_args):
8686

8787

8888
class DeleteNetwork(command.Command):
89-
"""Delete a network"""
89+
"""Delete network(s)"""
9090

9191
log = logging.getLogger(__name__ + '.DeleteNetwork')
9292

9393
def get_parser(self, prog_name):
9494
parser = super(DeleteNetwork, self).get_parser(prog_name)
9595
parser.add_argument(
96-
'identifier',
96+
'networks',
9797
metavar="<network>",
98-
help=("Name or identifier of network to delete")
98+
nargs="+",
99+
help=("Network(s) to delete (name or ID)")
99100
)
100101
return parser
101102

102103
def take_action(self, parsed_args):
103104
self.log.debug('take_action(%s)' % parsed_args)
104105
client = self.app.client_manager.network
105-
_id = common.find(client, 'network', 'networks',
106-
parsed_args.identifier)
107106
delete_method = getattr(client, "delete_network")
108-
delete_method(_id)
107+
for network in parsed_args.networks:
108+
_id = common.find(client, 'network', 'networks', network)
109+
delete_method(_id)
109110
return
110111

111112

openstackclient/tests/compute/v2/test_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ def test_server_delete_no_options(self):
232232
compute_fakes.server_id,
233233
]
234234
verifylist = [
235-
('server', compute_fakes.server_id),
235+
('servers', [compute_fakes.server_id]),
236236
]
237237
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
238238

openstackclient/tests/image/v1/test_image.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ def test_image_delete_no_options(self):
288288
image_fakes.image_id,
289289
]
290290
verifylist = [
291-
('image', image_fakes.image_id),
291+
('images', [image_fakes.image_id]),
292292
]
293293
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
294294

openstackclient/tests/image/v2/test_image.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def test_image_delete_no_options(self):
5151
image_fakes.image_id,
5252
]
5353
verifylist = [
54-
('image', image_fakes.image_id),
54+
('images', [image_fakes.image_id]),
5555
]
5656
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
5757

openstackclient/tests/network/v2/test_network.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def test_delete(self):
120120
FAKE_NAME,
121121
]
122122
verifylist = [
123-
('identifier', FAKE_NAME),
123+
('networks', [FAKE_NAME]),
124124
]
125125
lister = mock.Mock(return_value={RESOURCES: [RECORD]})
126126
self.app.client_manager.network.list_networks = lister

openstackclient/volume/v1/backup.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,25 +73,27 @@ def take_action(self, parsed_args):
7373

7474

7575
class DeleteBackup(command.Command):
76-
"""Delete backup command"""
76+
"""Delete backup(s)"""
7777

7878
log = logging.getLogger(__name__ + '.DeleteBackup')
7979

8080
def get_parser(self, prog_name):
8181
parser = super(DeleteBackup, self).get_parser(prog_name)
8282
parser.add_argument(
83-
'backup',
83+
'backups',
8484
metavar='<backup>',
85-
help='Name or ID of backup to delete',
85+
nargs="+",
86+
help='Backup(s) to delete (name or ID)',
8687
)
8788
return parser
8889

8990
def take_action(self, parsed_args):
9091
self.log.debug('take_action(%s)', parsed_args)
9192
volume_client = self.app.client_manager.volume
92-
backup_id = utils.find_resource(volume_client.backups,
93-
parsed_args.backup).id
94-
volume_client.backups.delete(backup_id)
93+
for backup in parsed_args.backups:
94+
backup_id = utils.find_resource(volume_client.backups,
95+
backup).id
96+
volume_client.backups.delete(backup_id)
9597
return
9698

9799

0 commit comments

Comments
 (0)