summaryrefslogtreecommitdiff
path: root/troveclient
diff options
context:
space:
mode:
authorZuul <zuul@review.openstack.org>2017-12-20 19:52:23 +0000
committerGerrit Code Review <review@openstack.org>2017-12-20 19:52:23 +0000
commitaddd13a3108e6b860907de35e9212803603981fb (patch)
treeed60b0a0b1dc5440592ee9bd0798c68d80400da0 /troveclient
parent1bf32ef079ef4664815236980363c491c637e9db (diff)
parentf88012ebecd80fdd1d26e4c4d2c645fe56f92e1c (diff)
downloadpython-troveclient-addd13a3108e6b860907de35e9212803603981fb.tar.gz
Merge "Add instance-delete to OSC"
Diffstat (limited to 'troveclient')
-rw-r--r--troveclient/osc/v1/database_instances.py26
-rw-r--r--troveclient/tests/osc/v1/test_database_instances.py31
2 files changed, 57 insertions, 0 deletions
diff --git a/troveclient/osc/v1/database_instances.py b/troveclient/osc/v1/database_instances.py
index 933a460..d03c13e 100644
--- a/troveclient/osc/v1/database_instances.py
+++ b/troveclient/osc/v1/database_instances.py
@@ -13,6 +13,7 @@
"""Database v1 Instances action implementations"""
from osc_lib.command import command
+from osc_lib import exceptions
from osc_lib import utils as osc_utils
import six
@@ -133,3 +134,28 @@ class ShowDatabaseInstance(command.ShowOne):
instance = osc_utils.find_resource(db_instances, parsed_args.instance)
instance = set_attributes_for_print_detail(instance)
return zip(*sorted(six.iteritems(instance)))
+
+
+class DeleteDatabaseInstance(command.Command):
+
+ _description = _("Deletes an instance.")
+
+ def get_parser(self, prog_name):
+ parser = super(DeleteDatabaseInstance, self).get_parser(prog_name)
+ parser.add_argument(
+ 'instance',
+ metavar='<instance>',
+ help=_('ID or name of the Instance'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ db_instances = self.app.client_manager.database.instances
+ try:
+ instance = osc_utils.find_resource(db_instances,
+ parsed_args.instance)
+ db_instances.delete(instance)
+ except Exception as e:
+ msg = (_("Failed to delete instance %(instance)s: %(e)s")
+ % {'instance': parsed_args.instance, 'e': e})
+ raise exceptions.CommandError(msg)
diff --git a/troveclient/tests/osc/v1/test_database_instances.py b/troveclient/tests/osc/v1/test_database_instances.py
index a9de10a..2020212 100644
--- a/troveclient/tests/osc/v1/test_database_instances.py
+++ b/troveclient/tests/osc/v1/test_database_instances.py
@@ -10,6 +10,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+import mock
+
+from osc_lib import exceptions
+from osc_lib import utils
+
from troveclient import common
from troveclient.osc.v1 import database_instances
from troveclient.tests.osc.v1 import fakes
@@ -78,3 +83,29 @@ class TestInstanceShow(TestInstances):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
self.assertEqual(self.values, data)
+
+
+class TestDatabaseInstanceDelete(TestInstances):
+
+ def setUp(self):
+ super(TestDatabaseInstanceDelete, self).setUp()
+ self.cmd = database_instances.DeleteDatabaseInstance(self.app, None)
+
+ @mock.patch.object(utils, 'find_resource')
+ def test_instance_delete(self, mock_find):
+ args = ['instance1']
+ mock_find.return_value = args[0]
+ parsed_args = self.check_parser(self.cmd, args, [])
+ result = self.cmd.take_action(parsed_args)
+ self.instance_client.delete.assert_called_with('instance1')
+ self.assertIsNone(result)
+
+ @mock.patch.object(utils, 'find_resource')
+ def test_instance_delete_with_exception(self, mock_find):
+ args = ['fakeinstance']
+ parsed_args = self.check_parser(self.cmd, args, [])
+
+ mock_find.side_effect = exceptions.CommandError
+ self.assertRaises(exceptions.CommandError,
+ self.cmd.take_action,
+ parsed_args)