Add database-list to OSC

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

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

To confirm the databases list command I had to create an instance
and specify a database name like how it shows in the user-guide[1]
on step 2.

[1] http://docs.openstack.org/user-guide/create-db.html

Change-Id: I4f4682eff1addc3fc837f5468939ddd96572e238
Partially-Implements: trove-support-in-python-openstackclient
This commit is contained in:
Trevor McCasland 2017-01-17 17:18:49 -06:00 committed by Amrith Kumar
parent 09b5f9fa5e
commit 29bdd7f5cb
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)