Merge "Add database-list to OSC"

This commit is contained in:
Jenkins 2017-06-11 19:25:45 +00:00 committed by Gerrit Code Review
commit 2aefbc59c7
5 changed files with 107 additions and 0 deletions

View File

@ -0,0 +1,4 @@
---
features:
- The command ``trove database-list`` is now available to use in
the python-openstackclient CLI as ``openstack database list``

View File

@ -36,6 +36,7 @@ openstack.database.v1 =
database_flavor_list = troveclient.osc.v1.database_flavors:ListDatabaseFlavors
database_instance_list = troveclient.osc.v1.database_instances:ListDatabaseInstances
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

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 Databases action implementations"""
from osc_lib.command import command
from osc_lib import utils as osc_utils
from troveclient.i18n import _
from troveclient import utils
class ListDatabases(command.Lister):
_description = _("Get a list of all Databases from the instance.")
columns = ['Name']
def get_parser(self, prog_name):
parser = super(ListDatabases, self).get_parser(prog_name)
parser.add_argument(
dest='instance',
metavar='<instance>',
help=_('ID or name of the instance.')
)
return parser
def take_action(self, parsed_args):
manager = self.app.client_manager.database
databases = manager.databases
instance = utils.find_resource(manager.instances, parsed_args.instance)
items = databases.list(instance)
dbs = items
while items.next:
items = databases.list(instance, marker=items.next)
dbs += items
dbs = [osc_utils.get_item_properties(db, self.columns) for db in dbs]
return self.columns, dbs

View File

@ -17,6 +17,7 @@ from troveclient.tests import fakes
from troveclient.tests.osc import utils
from troveclient.v1 import backups
from troveclient.v1 import clusters
from troveclient.v1 import databases
from troveclient.v1 import flavors
from troveclient.v1 import instances
from troveclient.v1 import limits
@ -84,3 +85,10 @@ class FakeInstances(object):
def get_instances_1234(self):
return instances.Instance(None, self.fake_instances[0])
class FakeDatabases(object):
fake_databases = [{'name': 'fakedb1'}]
def get_databases_1(self):
return databases.Database(None, self.fake_databases[0])

View File

@ -0,0 +1,48 @@
# 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.
import mock
from troveclient import common
from troveclient.osc.v1 import databases
from troveclient.tests.osc.v1 import fakes
from troveclient import utils
class TestDatabases(fakes.TestDatabasev1):
fake_databases = fakes.FakeDatabases()
def setUp(self):
super(TestDatabases, self).setUp()
self.mock_client = self.app.client_manager.database
self.database_client = self.app.client_manager.database.databases
class TestDatabaseList(TestDatabases):
columns = databases.ListDatabases.columns
values = ('fakedb1',)
def setUp(self):
super(TestDatabaseList, self).setUp()
self.cmd = databases.ListDatabases(self.app, None)
data = [self.fake_databases.get_databases_1()]
self.database_client.list.return_value = common.Paginated(data)
@mock.patch.object(utils, 'find_resource')
def test_database_list_defaults(self, mock_find):
args = ['my_instance']
mock_find.return_value = args[0]
parsed_args = self.check_parser(self.cmd, args, [])
columns, data = self.cmd.take_action(parsed_args)
self.database_client.list.assert_called_once_with(args[0])
self.assertEqual(self.columns, columns)
self.assertEqual([tuple(self.values)], data)