Skip to content

Commit 8a164bb

Browse files
committed
compute: Add '--force' option to 'server delete'
This is an admin-only operation by default but can be useful. Change-Id: I25a4da697e27c0fba4d28b504377667eb18f15fe Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
1 parent 262e525 commit 8a164bb

3 files changed

Lines changed: 37 additions & 1 deletion

File tree

openstackclient/compute/v2/server.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1317,6 +1317,11 @@ def get_parser(self, prog_name):
13171317
nargs="+",
13181318
help=_('Server(s) to delete (name or ID)'),
13191319
)
1320+
parser.add_argument(
1321+
'--force',
1322+
action='store_true',
1323+
help=_('Force delete server(s)'),
1324+
)
13201325
parser.add_argument(
13211326
'--wait',
13221327
action='store_true',
@@ -1335,7 +1340,12 @@ def _show_progress(progress):
13351340
for server in parsed_args.server:
13361341
server_obj = utils.find_resource(
13371342
compute_client.servers, server)
1338-
compute_client.servers.delete(server_obj.id)
1343+
1344+
if parsed_args.force:
1345+
compute_client.servers.force_delete(server_obj.id)
1346+
else:
1347+
compute_client.servers.delete(server_obj.id)
1348+
13391349
if parsed_args.wait:
13401350
if not utils.wait_for_delete(compute_client.servers,
13411351
server_obj.id,

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2850,6 +2850,7 @@ def setUp(self):
28502850
super(TestServerDelete, self).setUp()
28512851

28522852
self.servers_mock.delete.return_value = None
2853+
self.servers_mock.force_delete.return_value = None
28532854

28542855
# Get the command object to test
28552856
self.cmd = server.DeleteServer(self.app, None)
@@ -2868,6 +2869,26 @@ def test_server_delete_no_options(self):
28682869
result = self.cmd.take_action(parsed_args)
28692870

28702871
self.servers_mock.delete.assert_called_with(servers[0].id)
2872+
self.servers_mock.force_delete.assert_not_called()
2873+
self.assertIsNone(result)
2874+
2875+
def test_server_delete_with_force(self):
2876+
servers = self.setup_servers_mock(count=1)
2877+
2878+
arglist = [
2879+
servers[0].id,
2880+
'--force',
2881+
]
2882+
verifylist = [
2883+
('server', [servers[0].id]),
2884+
('force', True),
2885+
]
2886+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
2887+
2888+
result = self.cmd.take_action(parsed_args)
2889+
2890+
self.servers_mock.force_delete.assert_called_with(servers[0].id)
2891+
self.servers_mock.delete.assert_not_called()
28712892
self.assertIsNone(result)
28722893

28732894
def test_server_delete_multi_servers(self):
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
Add ``--force`` option to ``server delete`` command, allowing users to
5+
force delete a server. This is admin-only by default.

0 commit comments

Comments
 (0)