Merge "Add datastore-show to OSC"

This commit is contained in:
Zuul 2017-12-07 03:48:09 +00:00 committed by Gerrit Code Review
commit 336b50b165
4 changed files with 65 additions and 0 deletions

View File

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

View File

@ -42,6 +42,7 @@ openstack.database.v1 =
database_list = troveclient.osc.v1.databases:ListDatabases
database_user_list = troveclient.osc.v1.database_users:ListDatabaseUsers
datastore_list = troveclient.osc.v1.datastores:ListDatastores
datastore_show = troveclient.osc.v1.datastores:ShowDatastore
[build_sphinx]

View File

@ -14,10 +14,26 @@
from osc_lib.command import command
from osc_lib import utils
import six
from troveclient.i18n import _
def set_attributes_for_print_detail(datastore):
info = datastore._info.copy()
versions = info.get('versions', [])
versions_str = "\n".join(
[ver['name'] + " (" + ver['id'] + ")" for ver in versions])
info['versions (id)'] = versions_str
info.pop('versions', None)
info.pop('links', None)
if hasattr(datastore, 'default_version'):
def_ver_id = getattr(datastore, 'default_version')
info['default_version'] = [
ver['name'] for ver in versions if ver['id'] == def_ver_id][0]
return info
class ListDatastores(command.Lister):
_description = _("List available datastores")
@ -28,3 +44,23 @@ class ListDatastores(command.Lister):
datastores = datastore_client.list()
ds = [utils.get_item_properties(d, self.columns) for d in datastores]
return self.columns, ds
class ShowDatastore(command.ShowOne):
_description = _("Shows details of a datastore")
def get_parser(self, prog_name):
parser = super(ShowDatastore, self).get_parser(prog_name)
parser.add_argument(
'datastore',
metavar='<datastore>',
help=_('ID of the datastore'),
)
return parser
def take_action(self, parsed_args):
datastore_client = self.app.client_manager.database.datastores
datastore = utils.find_resource(datastore_client,
parsed_args.datastore)
datastore = set_attributes_for_print_detail(datastore)
return zip(*sorted(six.iteritems(datastore)))

View File

@ -39,3 +39,27 @@ class TestDatastoreList(TestDatastores):
self.datastore_client.list.assert_called_once_with()
self.assertEqual(self.columns, columns)
self.assertEqual([self.values], data)
class TestDatastoreShow(TestDatastores):
values = ('5.6', 'd-123', 'mysql', '5.6 (v-56)')
def setUp(self):
super(TestDatastoreShow, self).setUp()
self.cmd = datastores.ShowDatastore(self.app, None)
self.data = self.fake_datastores.get_datastores_d_123()
self.datastore_client.get.return_value = self.data
self.columns = (
'default_version',
'id',
'name',
'versions (id)',
)
def test_show(self):
args = ['mysql']
parsed_args = self.check_parser(self.cmd, args, [])
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
self.assertEqual(self.values, data)