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:
@@ -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``.
|
@@ -60,6 +60,7 @@ openstack.database.v1 =
|
|||||||
database_instance_show = troveclient.osc.v1.database_instances:ShowDatabaseInstance
|
database_instance_show = troveclient.osc.v1.database_instances:ShowDatabaseInstance
|
||||||
database_limit_list = troveclient.osc.v1.database_limits:ListDatabaseLimits
|
database_limit_list = troveclient.osc.v1.database_limits:ListDatabaseLimits
|
||||||
database_root_enable = troveclient.osc.v1.database_root:EnableDatabaseRoot
|
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_create = troveclient.osc.v1.database_users:CreateDatabaseUser
|
||||||
database_user_delete = troveclient.osc.v1.database_users:DeleteDatabaseUser
|
database_user_delete = troveclient.osc.v1.database_users:DeleteDatabaseUser
|
||||||
database_user_grant_access = troveclient.osc.v1.database_users:GrantDatabaseUserAccess
|
database_user_grant_access = troveclient.osc.v1.database_users:GrantDatabaseUserAccess
|
||||||
|
@@ -81,3 +81,34 @@ class EnableDatabaseRoot(command.ShowOne):
|
|||||||
result = {'name': root[0],
|
result = {'name': root[0],
|
||||||
'password': root[1]}
|
'password': root[1]}
|
||||||
return zip(*sorted(six.iteritems(result)))
|
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)))
|
||||||
|
@@ -132,6 +132,19 @@ class FakeDatastores(object):
|
|||||||
|
|
||||||
|
|
||||||
class FakeRoot(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):
|
def post_instance_1234_root(self):
|
||||||
root = fakes.FakeHTTPClient().post_instances_1234_root()[2]['user']
|
root = fakes.FakeHTTPClient().post_instances_1234_root()[2]['user']
|
||||||
return root['name'], root['password']
|
return root['name'], root['password']
|
||||||
|
@@ -76,3 +76,37 @@ class TestRootEnable(TestRoot):
|
|||||||
self.cmd.take_action(parsed_args)
|
self.cmd.take_action(parsed_args)
|
||||||
self.root_client.create_cluster_root(None,
|
self.root_client.create_cluster_root(None,
|
||||||
root_password='secret')
|
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)
|
||||||
|
Reference in New Issue
Block a user