Add configuration-parameter-list to OSC

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

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

Change-Id: I8e7ee36529b75b0962aeaf30a074b55b9e0cee12
Partially-Implements: trove-support-in-python-openstackclient
This commit is contained in:
wangyao 2017-12-08 11:01:26 +08:00
parent 854d3e2a31
commit c2de9c6a22
5 changed files with 112 additions and 1 deletions

View File

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

View File

@ -35,6 +35,7 @@ openstack.database.v1 =
database_cluster_list = troveclient.osc.v1.database_clusters:ListDatabaseClusters
database_cluster_show = troveclient.osc.v1.database_clusters:ShowDatabaseCluster
database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations
database_configuration_parameter_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurationParameters
database_configuration_show = troveclient.osc.v1.database_configurations:ShowDatabaseConfiguration
database_flavor_list = troveclient.osc.v1.database_flavors:ListDatabaseFlavors
database_flavor_show = troveclient.osc.v1.database_flavors:ShowDatabaseFlavor

View File

@ -17,7 +17,9 @@ from osc_lib.command import command
from osc_lib import utils as osc_utils
import six
from troveclient import exceptions
from troveclient.i18n import _
from troveclient import utils
def set_attributes_for_print_detail(configuration):
@ -80,3 +82,51 @@ class ShowDatabaseConfiguration(command.ShowOne):
db_configurations, parsed_args.configuration_group)
configuration = set_attributes_for_print_detail(configuration)
return zip(*sorted(six.iteritems(configuration)))
class ListDatabaseConfigurationParameters(command.Lister):
_description = _("Lists available parameters for a configuration group.")
columns = ['Name', 'Type', 'Min Size', 'Max Size', 'Restart Required']
def get_parser(self, prog_name):
parser = super(ListDatabaseConfigurationParameters, self).\
get_parser(prog_name)
parser.add_argument(
'datastore_version',
metavar='<datastore_version>',
help=_('Datastore version name or ID assigned'
'to the configuration group.')
)
parser.add_argument(
'--datastore',
metavar='<datastore>',
default=None,
help=_('ID or name of the datastore to list configuration'
'parameters for. Optional if the ID of the'
'datastore_version is provided.')
)
return parser
def take_action(self, parsed_args):
db_configuration_parameters = self.app.client_manager.\
database.configuration_parameters
if parsed_args.datastore:
params = db_configuration_parameters.\
parameters(parsed_args.datastore,
parsed_args.datastore_version)
elif utils.is_uuid_like(parsed_args.datastore_version):
params = db_configuration_parameters.\
parameters_by_version(parsed_args.datastore_version)
else:
raise exceptions.NoUniqueMatch(_('The datastore name or id is'
' required to retrieve the'
' parameters for the'
' configuration group'
' by name.'))
for param in params:
setattr(param, 'min_size', getattr(param, 'min', '-'))
setattr(param, 'max_size', getattr(param, 'max', '-'))
params = [osc_utils.get_item_properties(p, self.columns)
for p in params]
return self.columns, params

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 configurations
from troveclient.v1 import databases
from troveclient.v1 import datastores
from troveclient.v1 import flavors
@ -57,7 +58,17 @@ class FakeConfigurations(object):
[2]['configurations'])
def get_configurations_c_123(self):
return flavors.Flavor(None, self.fake_config[0])
return configurations.Configuration(None, self.fake_config[0])
class FakeConfigurationParameters(object):
fake_config_param = (fakes.FakeHTTPClient().
get_datastores_d_123_versions_v_156_parameters()
[2]['configuration-parameters'])
def get_params_connect_timeout(self):
return configurations.\
ConfigurationParameter(None, self.fake_config_param[1])
class FakeLimits(object):

View File

@ -11,18 +11,22 @@
# under the License.
from troveclient import common
from troveclient import exceptions
from troveclient.osc.v1 import database_configurations
from troveclient.tests.osc.v1 import fakes
class TestConfigurations(fakes.TestDatabasev1):
fake_configurations = fakes.FakeConfigurations()
fake_configuration_params = fakes.FakeConfigurationParameters()
def setUp(self):
super(TestConfigurations, self).setUp()
self.mock_client = self.app.client_manager.database
self.configuration_client = (self.app.client_manager.database.
configurations)
self.configuration_params_client = (self.app.client_manager.
database.configuration_parameters)
class TestConfigurationList(TestConfigurations):
@ -77,3 +81,43 @@ class TestConfigurationShow(TestConfigurations):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
self.assertEqual(self.values, data)
class TestConfigurationParameterList(TestConfigurations):
columns = database_configurations.\
ListDatabaseConfigurationParameters.columns
values = ('connect_timeout', 'integer', 2, 31536000, 'false')
def setUp(self):
super(TestConfigurationParameterList, self).setUp()
self.cmd = database_configurations.\
ListDatabaseConfigurationParameters(self.app, None)
data = [self.fake_configuration_params.get_params_connect_timeout()]
self.configuration_params_client.parameters.return_value =\
common.Paginated(data)
self.configuration_params_client.parameters_by_version.return_value =\
common.Paginated(data)
def test_configuration_parameters_list_defaults(self):
args = ['d-123', '--datastore', 'mysql']
verifylist = [
('datastore_version', 'd-123'),
('datastore', 'mysql'),
]
parsed_args = self.check_parser(self.cmd, args, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
self.assertEqual([tuple(self.values)], data)
def test_configuration_parameters_list_with_version_id_exception(self):
args = [
'd-123',
]
verifylist = [
('datastore_version', 'd-123'),
]
parsed_args = self.check_parser(self.cmd, args, verifylist)
self.assertRaises(exceptions.NoUniqueMatch,
self.cmd.take_action,
parsed_args)