summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Finucane <sfinucan@redhat.com>2020-12-03 13:13:16 +0000
committerStephen Finucane <sfinucan@redhat.com>2021-01-12 17:07:32 +0000
commit8a164bb09c0801c3ffd2431d41c3e232388ab407 (patch)
treef4f3263c02a31802fc8508b507e1f40e61eb28b9
parent262e525aada8bfaedb4545be5d2bbd27edcc55fd (diff)
downloadpython-openstackclient-8a164bb09c0801c3ffd2431d41c3e232388ab407.tar.gz
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>
-rw-r--r--openstackclient/compute/v2/server.py12
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py21
-rw-r--r--releasenotes/notes/add-missing-server-delete-opts-071c3e054e3ce674.yaml5
3 files changed, 37 insertions, 1 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index fa27f68c..aa4f2372 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -1318,6 +1318,11 @@ class DeleteServer(command.Command):
help=_('Server(s) to delete (name or ID)'),
)
parser.add_argument(
+ '--force',
+ action='store_true',
+ help=_('Force delete server(s)'),
+ )
+ parser.add_argument(
'--wait',
action='store_true',
help=_('Wait for delete to complete'),
@@ -1335,7 +1340,12 @@ class DeleteServer(command.Command):
for server in parsed_args.server:
server_obj = utils.find_resource(
compute_client.servers, server)
- compute_client.servers.delete(server_obj.id)
+
+ if parsed_args.force:
+ compute_client.servers.force_delete(server_obj.id)
+ else:
+ compute_client.servers.delete(server_obj.id)
+
if parsed_args.wait:
if not utils.wait_for_delete(compute_client.servers,
server_obj.id,
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 0f33dd70..bde0699b 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -2850,6 +2850,7 @@ class TestServerDelete(TestServer):
super(TestServerDelete, self).setUp()
self.servers_mock.delete.return_value = None
+ self.servers_mock.force_delete.return_value = None
# Get the command object to test
self.cmd = server.DeleteServer(self.app, None)
@@ -2868,6 +2869,26 @@ class TestServerDelete(TestServer):
result = self.cmd.take_action(parsed_args)
self.servers_mock.delete.assert_called_with(servers[0].id)
+ self.servers_mock.force_delete.assert_not_called()
+ self.assertIsNone(result)
+
+ def test_server_delete_with_force(self):
+ servers = self.setup_servers_mock(count=1)
+
+ arglist = [
+ servers[0].id,
+ '--force',
+ ]
+ verifylist = [
+ ('server', [servers[0].id]),
+ ('force', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.servers_mock.force_delete.assert_called_with(servers[0].id)
+ self.servers_mock.delete.assert_not_called()
self.assertIsNone(result)
def test_server_delete_multi_servers(self):
diff --git a/releasenotes/notes/add-missing-server-delete-opts-071c3e054e3ce674.yaml b/releasenotes/notes/add-missing-server-delete-opts-071c3e054e3ce674.yaml
new file mode 100644
index 00000000..2c1fc46e
--- /dev/null
+++ b/releasenotes/notes/add-missing-server-delete-opts-071c3e054e3ce674.yaml
@@ -0,0 +1,5 @@
+---
+features:
+ - |
+ Add ``--force`` option to ``server delete`` command, allowing users to
+ force delete a server. This is admin-only by default.