Add root-show to OSC

This change adds database support for the python-openstackclient
project for the root-show command.

The trove command root-show is now:
    openstack database root show

Change-Id: I621f41d0c920306fed5502f30e1de3806b911929
Partially-Implements: blueprint trove-support-in-python-openstackclient
Signed-off-by: Zhao Chao <zhaochao1984@gmail.com>
This commit is contained in:
Zhao Chao 2018-01-11 20:15:15 +08:00
parent 578cc98081
commit 3653b49661
5 changed files with 84 additions and 0 deletions

View File

@ -0,0 +1,5 @@
---
features:
- |
The command ``trove root-show`` is now available to use in
the python-openstackclient CLI as ``openstack database root show``.

View File

@ -60,6 +60,7 @@ openstack.database.v1 =
database_instance_show = troveclient.osc.v1.database_instances:ShowDatabaseInstance
database_limit_list = troveclient.osc.v1.database_limits:ListDatabaseLimits
database_root_enable = troveclient.osc.v1.database_root:EnableDatabaseRoot
database_root_show = troveclient.osc.v1.database_root:ShowDatabaseRoot
database_user_create = troveclient.osc.v1.database_users:CreateDatabaseUser
database_user_delete = troveclient.osc.v1.database_users:DeleteDatabaseUser
database_user_grant_access = troveclient.osc.v1.database_users:GrantDatabaseUserAccess

View File

@ -81,3 +81,34 @@ class EnableDatabaseRoot(command.ShowOne):
result = {'name': root[0],
'password': root[1]}
return zip(*sorted(six.iteritems(result)))
class ShowDatabaseRoot(command.ShowOne):
_description = _("Gets status if root was ever enabled for "
"an instance or cluster.")
def get_parser(self, prog_name):
parser = super(ShowDatabaseRoot, self).get_parser(prog_name)
parser.add_argument(
'instance_or_cluster',
metavar='<instance_or_cluster>',
help=_('ID or name of the instance or cluster.'),
)
return parser
def take_action(self, parsed_args):
database_client_manager = self.app.client_manager.database
instance_or_cluster, resource_type = find_instance_or_cluster(
database_client_manager,
parsed_args.instance_or_cluster)
db_root = database_client_manager.root
if resource_type == 'instance':
root = db_root.is_instance_root_enabled(instance_or_cluster)
else:
root = db_root.is_cluster_root_enabled(instance_or_cluster)
result = {'is_root_enabled': root.rootEnabled}
return zip(*sorted(six.iteritems(result)))

View File

@ -132,6 +132,19 @@ class FakeDatastores(object):
class FakeRoot(object):
fake_instance_1234_root = (fakes.FakeHTTPClient()
.get_instances_1234_root()[2])
fake_cls_1234_root = (fakes.FakeHTTPClient()
.get_clusters_cls_1234_root()[2])
def get_instance_1234_root(self):
return users.User(None, self.fake_instance_1234_root,
loaded=True)
def get_cls_1234_root(self):
return users.User(None, self.fake_cls_1234_root,
loaded=True)
def post_instance_1234_root(self):
root = fakes.FakeHTTPClient().post_instances_1234_root()[2]['user']
return root['name'], root['password']

View File

@ -76,3 +76,37 @@ class TestRootEnable(TestRoot):
self.cmd.take_action(parsed_args)
self.root_client.create_cluster_root(None,
root_password='secret')
class TestRootShow(TestRoot):
def setUp(self):
super(TestRootShow, self).setUp()
self.cmd = database_root.ShowDatabaseRoot(self.app, None)
self.data = {
'instance': self.fake_root.get_instance_1234_root(),
'cluster': self.fake_root.get_cls_1234_root()
}
self.columns = ('is_root_enabled',)
@mock.patch.object(utils, 'find_resource')
def test_show_instance_1234_root(self, mock_find):
self.root_client.is_instance_root_enabled.return_value = (
self.data['instance'])
args = ['1234']
parsed_args = self.check_parser(self.cmd, args, [])
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
self.assertEqual(('True',), data)
@mock.patch.object(utils, 'find_resource')
def test_show_cluster_1234_root(self, mock_find):
mock_find.side_effect = [exceptions.CommandError(),
(None, 'cluster')]
self.root_client.is_cluster_root_enabled.return_value = (
self.data['cluster'])
args = ['1234']
parsed_args = self.check_parser(self.cmd, args, [])
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
self.assertEqual(('True',), data)