From a0324f41094acac26d8deb3c959a1242b090caaa Mon Sep 17 00:00:00 2001 From: Lingxian Kong Date: Fri, 3 Jan 2020 15:19:07 +1300 Subject: [PATCH] Support to force delete instance Change-Id: I20802f199ef943244f27a842743434e1c84c79e5 --- ...uri-03-force-delete-instance-1643114c2e1b11ea.yaml | 8 ++++++++ troveclient/osc/v1/database_instances.py | 10 +++++++++- troveclient/tests/osc/v1/test_database_instances.py | 11 +++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/ussuri-03-force-delete-instance-1643114c2e1b11ea.yaml diff --git a/releasenotes/notes/ussuri-03-force-delete-instance-1643114c2e1b11ea.yaml b/releasenotes/notes/ussuri-03-force-delete-instance-1643114c2e1b11ea.yaml new file mode 100644 index 00000000..5aa93d2f --- /dev/null +++ b/releasenotes/notes/ussuri-03-force-delete-instance-1643114c2e1b11ea.yaml @@ -0,0 +1,8 @@ +--- +features: + - | + Support to force delete instance. By default, only allowed by admin user. + + .. code-block:: console + + openstack database instance delete --force diff --git a/troveclient/osc/v1/database_instances.py b/troveclient/osc/v1/database_instances.py index d6d20572..2c824ecf 100644 --- a/troveclient/osc/v1/database_instances.py +++ b/troveclient/osc/v1/database_instances.py @@ -177,13 +177,21 @@ class DeleteDatabaseInstance(base.TroveDeleter): metavar='instance', help='Id or name of instance(s).' ) + parser.add_argument( + '--force', + action="store_true", + default=False, + help=_('Force delete the instance, will reset the instance status ' + 'before deleting.'), + ) return parser def take_action(self, parsed_args): db_instances = self.app.client_manager.database.instances # Used for batch deletion - self.delete_func = db_instances.delete + self.delete_func = (db_instances.force_delete + if parsed_args.force else db_instances.delete) self.resource = 'database instance' ids = [] diff --git a/troveclient/tests/osc/v1/test_database_instances.py b/troveclient/tests/osc/v1/test_database_instances.py index dcb2b5f9..04e6a616 100644 --- a/troveclient/tests/osc/v1/test_database_instances.py +++ b/troveclient/tests/osc/v1/test_database_instances.py @@ -158,6 +158,17 @@ class TestDatabaseInstanceDelete(TestInstances): calls = [mock.call(instance_1), mock.call(instance_2)] self.instance_client.delete.assert_has_calls(calls) + @mock.patch("troveclient.utils.get_resource_id_by_name") + def test_instance_force_delete(self, mock_getid): + mock_getid.return_value = "fake_uuid" + + args = ['instance1', '--force'] + parsed_args = self.check_parser(self.cmd, args, [('force', True)]) + self.cmd.take_action(parsed_args) + + mock_getid.assert_called_once_with(self.instance_client, "instance1") + self.instance_client.force_delete.assert_called_with('fake_uuid') + class TestDatabaseInstanceCreate(TestInstances):