diff --git a/releasenotes/notes/add-user-show-to-osc-6ef3db10a82f1f46.yaml b/releasenotes/notes/add-user-show-to-osc-6ef3db10a82f1f46.yaml new file mode 100644 index 00000000..459d191c --- /dev/null +++ b/releasenotes/notes/add-user-show-to-osc-6ef3db10a82f1f46.yaml @@ -0,0 +1,5 @@ +--- +features: + - The command ``trove user-show`` is now available to use in + the python-openstackclient CLI as ``openstack database user + show`` diff --git a/setup.cfg b/setup.cfg index d8aba3e8..032800a8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -43,6 +43,7 @@ openstack.database.v1 = database_limit_list = troveclient.osc.v1.database_limits:ListDatabaseLimits database_list = troveclient.osc.v1.databases:ListDatabases database_user_list = troveclient.osc.v1.database_users:ListDatabaseUsers + database_user_show = troveclient.osc.v1.database_users:ShowDatabaseUser datastore_list = troveclient.osc.v1.datastores:ListDatastores datastore_show = troveclient.osc.v1.datastores:ShowDatastore diff --git a/troveclient/osc/v1/database_users.py b/troveclient/osc/v1/database_users.py index 3cf6ffe3..5a22133d 100644 --- a/troveclient/osc/v1/database_users.py +++ b/troveclient/osc/v1/database_users.py @@ -14,6 +14,7 @@ from osc_lib.command import command from osc_lib import utils +import six from troveclient.i18n import _ @@ -44,3 +45,33 @@ class ListDatabaseUsers(command.Lister): user.databases = ', '.join(db_names) users = [utils.get_item_properties(u, self.columns) for u in users] return self.columns, users + + +class ShowDatabaseUser(command.ShowOne): + + _description = _("Shows details of a database user of an instance.") + + def get_parser(self, prog_name): + parser = super(ShowDatabaseUser, self).get_parser(prog_name) + parser.add_argument( + 'instance', + metavar='', + help=_('ID of the instance.'), + ) + parser.add_argument( + 'name', + metavar='', + help=_('Name of user.'), + ) + parser.add_argument( + "--host", + metavar="", + help=_("Optional host of user."), + ) + return parser + + def take_action(self, parsed_args): + db_users = self.app.client_manager.database.users + user = db_users.get(parsed_args.instance, parsed_args.name, + hostname=parsed_args.host) + return zip(*sorted(six.iteritems(user._info))) diff --git a/troveclient/tests/osc/v1/test_database_users.py b/troveclient/tests/osc/v1/test_database_users.py index ecef4d84..fe5a19c7 100644 --- a/troveclient/tests/osc/v1/test_database_users.py +++ b/troveclient/tests/osc/v1/test_database_users.py @@ -40,3 +40,25 @@ class TestUserList(TestUsers): self.user_client.list.assert_called_once_with(*args) self.assertEqual(self.columns, columns) self.assertEqual([self.values], data) + + +class TestUserShow(TestUsers): + values = ([{'name': 'db1'}], '%', 'harry') + + def setUp(self): + super(TestUserShow, self).setUp() + self.cmd = database_users.ShowDatabaseUser(self.app, None) + self.data = self.fake_users.get_instances_1234_users_harry() + self.user_client.get.return_value = self.data + self.columns = ( + 'databases', + 'host', + 'name', + ) + + def test_user_show_defaults(self): + args = ['my_instance', 'harry'] + parsed_args = self.check_parser(self.cmd, args, []) + columns, data = self.cmd.take_action(parsed_args) + self.assertEqual(self.columns, columns) + self.assertEqual(self.values, data)