diff options
-rw-r--r-- | releasenotes/notes/ussuri-06-osc-delete-datastore-57bab744345911ea.yaml | 8 | ||||
-rw-r--r-- | setup.cfg | 1 | ||||
-rw-r--r-- | troveclient/osc/v1/datastores.py | 22 | ||||
-rw-r--r-- | troveclient/tests/osc/v1/test_datastores.py | 15 | ||||
-rw-r--r-- | troveclient/v1/datastores.py | 4 |
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> @@ -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.""" |