summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLingxian Kong <anlin.kong@gmail.com>2020-01-11 23:02:37 +1300
committerLingxian Kong <anlin.kong@gmail.com>2020-01-12 23:40:33 +1300
commit1a4823dcb493ba8d07f6a144120fe4a480048308 (patch)
treeb2236b02df0029a44618394d5bae3beecf26fcee
parentc4b1e91cc7582ce0d51fdd40741e79ef4fbac8a2 (diff)
downloadpython-troveclient-1a4823dcb493ba8d07f6a144120fe4a480048308.tar.gz
Support to delete datastore
Change-Id: Id0fe73eef95bb57ecee706b9eb9b7aae53236e3b
-rw-r--r--releasenotes/notes/ussuri-06-osc-delete-datastore-57bab744345911ea.yaml8
-rw-r--r--setup.cfg1
-rw-r--r--troveclient/osc/v1/datastores.py22
-rw-r--r--troveclient/tests/osc/v1/test_datastores.py15
-rw-r--r--troveclient/v1/datastores.py4
5 files changed, 50 insertions, 0 deletions
diff --git a/releasenotes/notes/ussuri-06-osc-delete-datastore-57bab744345911ea.yaml b/releasenotes/notes/ussuri-06-osc-delete-datastore-57bab744345911ea.yaml
new file mode 100644
index 0000000..7a7ca40
--- /dev/null
+++ b/releasenotes/notes/ussuri-06-osc-delete-datastore-57bab744345911ea.yaml
@@ -0,0 +1,8 @@
+---
+features:
+ - |
+ Support to delete datastore by ID or name, this is admin action by default.
+
+ .. code-block:: console
+
+ openstack datastore delete <datastore>
diff --git a/setup.cfg b/setup.cfg
index 66b5ef1..eaac655 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -97,6 +97,7 @@ openstack.database.v1 =
database_user_update_attributes = troveclient.osc.v1.database_users:UpdateDatabaseUserAttributes
datastore_list = troveclient.osc.v1.datastores:ListDatastores
datastore_show = troveclient.osc.v1.datastores:ShowDatastore
+ datastore_delete = troveclient.osc.v1.datastores:DeleteDatastore
datastore_version_list = troveclient.osc.v1.datastores:ListDatastoreVersions
datastore_version_show = troveclient.osc.v1.datastores:ShowDatastoreVersion
datastore_version_delete = troveclient.osc.v1.datastores:DeleteDatastoreVersion
diff --git a/troveclient/osc/v1/datastores.py b/troveclient/osc/v1/datastores.py
index 1f2795e..f8cf6f8 100644
--- a/troveclient/osc/v1/datastores.py
+++ b/troveclient/osc/v1/datastores.py
@@ -68,6 +68,28 @@ class ShowDatastore(command.ShowOne):
return zip(*sorted(six.iteritems(datastore)))
+class DeleteDatastore(command.Command):
+ _description = _("Deletes a datastore")
+
+ def get_parser(self, prog_name):
+ parser = super(DeleteDatastore, self).get_parser(prog_name)
+ parser.add_argument(
+ 'datastore',
+ metavar='<datastore>',
+ help=_('ID or name of the datastore'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ datastore_client = self.app.client_manager.database.datastores
+ try:
+ datastore_client.delete(parsed_args.datastore)
+ except Exception as e:
+ msg = (_("Failed to delete datastore %(datastore)s: %(e)s")
+ % {'datastore': parsed_args.datastore, 'e': e})
+ raise exceptions.CommandError(msg)
+
+
class ListDatastoreVersions(command.Lister):
_description = _("Lists available versions for a datastore")
diff --git a/troveclient/tests/osc/v1/test_datastores.py b/troveclient/tests/osc/v1/test_datastores.py
index 205bd5b..aa75d2c 100644
--- a/troveclient/tests/osc/v1/test_datastores.py
+++ b/troveclient/tests/osc/v1/test_datastores.py
@@ -71,6 +71,21 @@ class TestDatastoreShow(TestDatastores):
self.assertEqual(self.values, data)
+class TestDeleteDatastore(TestDatastores):
+ def setUp(self):
+ super(TestDeleteDatastore, self).setUp()
+ self.cmd = datastores.DeleteDatastore(self.app, None)
+
+ def test_delete_datastore(self):
+ ds_id = uuidutils.generate_uuid()
+ args = [ds_id]
+ parsed_args = self.check_parser(self.cmd, args, [])
+
+ self.cmd.take_action(parsed_args)
+
+ self.datastore_client.delete.assert_called_once_with(ds_id)
+
+
class TestDatastoreVersionList(TestDatastores):
columns = datastores.ListDatastoreVersions.columns
values = ('v-56', '5.6')
diff --git a/troveclient/v1/datastores.py b/troveclient/v1/datastores.py
index 4785e8f..374026f 100644
--- a/troveclient/v1/datastores.py
+++ b/troveclient/v1/datastores.py
@@ -61,6 +61,10 @@ class Datastores(base.ManagerWithFind):
return self._get("/datastores/%s" % base.getid(datastore),
"datastore")
+ def delete(self, datastore):
+ """Delete a specific datastore."""
+ return self._delete("/datastores/%s" % base.getid(datastore))
+
class DatastoreVersions(base.ManagerWithFind):
"""Manage :class:`DatastoreVersion` resources."""