Add user-list to OSC

This change adds database support to the python-openstackclient
project for the user-list command.

The trove command user-list is now:
    openstack database user list

Note: Only looking up an instance by ID works. I think it has
something to do with not using osc-lib.find_resource because we
use our own find_resource in the client manager's list call.

Change-Id: If8a4b97b91c661e400dfcac0fa4922ed359ce32a
Partially-Implements: trove-support-in-python-openstackclient
This commit is contained in:
Trevor McCasland
2017-01-18 11:01:58 -06:00
committed by Amrith Kumar
parent 6626ef7bbb
commit a7b10e3a76
4 changed files with 97 additions and 0 deletions

View File

@@ -35,6 +35,7 @@ openstack.database.v1 =
database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations
database_flavor_list = troveclient.osc.v1.database_flavors:ListDatabaseFlavors database_flavor_list = troveclient.osc.v1.database_flavors:ListDatabaseFlavors
database_limit_list = troveclient.osc.v1.database_limits:ListDatabaseLimits database_limit_list = troveclient.osc.v1.database_limits:ListDatabaseLimits
database_user_list = troveclient.osc.v1.database_users:ListDatabaseUsers
[build_sphinx] [build_sphinx]
all_files = 1 all_files = 1

View File

@@ -0,0 +1,46 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Database v1 Users action implementations"""
from osc_lib.command import command
from osc_lib import utils
from troveclient.i18n import _
class ListDatabaseUsers(command.Lister):
_description = _("Lists the users for an instance.")
columns = ['Name', 'Host', 'Databases']
def get_parser(self, prog_name):
parser = super(ListDatabaseUsers, self).get_parser(prog_name)
parser.add_argument(
dest='instance',
metavar='<instance>',
help=_('ID of the instance.')
)
return parser
def take_action(self, parsed_args):
db_users = self.app.client_manager.database.users
items = db_users.list(parsed_args.instance)
users = items
while (items.next):
items = db_users.list(parsed_args.instance, marker=items.next)
users += items
for user in users:
db_names = [db['name'] for db in user.databases]
user.databases = ', '.join(db_names)
users = [utils.get_item_properties(u, self.columns) for u in users]
return self.columns, users

View File

@@ -19,6 +19,7 @@ from troveclient.v1 import backups
from troveclient.v1 import clusters from troveclient.v1 import clusters
from troveclient.v1 import flavors from troveclient.v1 import flavors
from troveclient.v1 import limits from troveclient.v1 import limits
from troveclient.v1 import users
class TestDatabasev1(utils.TestCommand): class TestDatabasev1(utils.TestCommand):
@@ -68,3 +69,10 @@ class FakeLimits(object):
'verb': 'DELETE', 'verb': 'DELETE',
'remaining': 200, 'remaining': 200,
'unit': 'MINUTE'}) 'unit': 'MINUTE'})
class FakeUsers(object):
fake_users = fakes.FakeHTTPClient().get_instances_1234_users()[2]['users']
def get_instances_1234_users_harry(self):
return users.User(None, self.fake_users[2])

View File

@@ -0,0 +1,42 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from troveclient import common
from troveclient.osc.v1 import database_users
from troveclient.tests.osc.v1 import fakes
class TestUsers(fakes.TestDatabasev1):
fake_users = fakes.FakeUsers()
def setUp(self):
super(TestUsers, self).setUp()
self.user_client = self.app.client_manager.database.users
class TestUserList(TestUsers):
columns = database_users.ListDatabaseUsers.columns
values = ('harry', '%', 'db1')
def setUp(self):
super(TestUserList, self).setUp()
self.cmd = database_users.ListDatabaseUsers(self.app, None)
data = [self.fake_users.get_instances_1234_users_harry()]
self.user_client.list.return_value = common.Paginated(data)
def test_user_list_defaults(self):
args = ['my_instance']
parsed_args = self.check_parser(self.cmd, args, [])
columns, data = self.cmd.take_action(parsed_args)
self.user_client.list.assert_called_once_with(*args)
self.assertEqual(self.columns, columns)
self.assertEqual([self.values], data)