Add configuration-create to OSC

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

The trove command configuration-create is now:
    openstack database configuration create

Change-Id: I5aadb88860d0d69c8e2b4b78b5fb0dca2eba031f
Partially-Implements: blueprint trove-support-in-python-openstackclient
This commit is contained in:
zhanggang 2017-12-22 22:57:34 -05:00
parent 9c2c156e8f
commit 481e600f35
4 changed files with 115 additions and 0 deletions

View File

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

View File

@ -36,6 +36,7 @@ openstack.database.v1 =
database_cluster_delete = troveclient.osc.v1.database_clusters:DeleteDatabaseCluster
database_cluster_list = troveclient.osc.v1.database_clusters:ListDatabaseClusters
database_cluster_show = troveclient.osc.v1.database_clusters:ShowDatabaseCluster
database_configuration_create = troveclient.osc.v1.database_configurations:CreateDatabaseConfiguration
database_configuration_delete = troveclient.osc.v1.database_configurations:DeleteDatabaseConfiguration
database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations
database_configuration_parameter_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurationParameters

View File

@ -203,3 +203,53 @@ class DeleteDatabaseConfiguration(command.Command):
msg = (_("Failed to delete configuration %(c_group)s: %(e)s")
% {'c_group': parsed_args.configuration_group, 'e': e})
raise exceptions.CommandError(msg)
class CreateDatabaseConfiguration(command.ShowOne):
_description = _("Creates a configuration group.")
def get_parser(self, prog_name):
parser = super(CreateDatabaseConfiguration, self).get_parser(prog_name)
parser.add_argument(
'name',
metavar='<name>',
help=_('Name of the configuration group.'),
)
parser.add_argument(
'values',
metavar='<values>',
help=_('Dictionary of the values to set.'),
)
parser.add_argument(
'--datastore',
metavar='<datastore>',
default=None,
help=_('Datastore assigned to the configuration group. Required '
'if default datastore is not configured.'),
)
parser.add_argument(
'--datastore_version',
metavar='<datastore_version>',
default=None,
help=_('Datastore version ID assigned to the '
'configuration group.'),
)
parser.add_argument(
'--description',
metavar='<description>',
default=None,
help=_('An optional description for the configuration group.'),
)
return parser
def take_action(self, parsed_args):
db_configurations = self.app.client_manager.database.configurations
config_grp = db_configurations.create(
parsed_args.name,
parsed_args.values,
description=parsed_args.description,
datastore=parsed_args.datastore,
datastore_version=parsed_args.datastore_version)
config_grp = set_attributes_for_print_detail(config_grp)
return zip(*sorted(six.iteritems(config_grp)))

View File

@ -200,3 +200,61 @@ class TestDatabaseConfigurationDelete(TestConfigurations):
self.assertRaises(exceptions.CommandError,
self.cmd.take_action,
parsed_args)
class TestConfigurationCreate(TestConfigurations):
values = ('2015-05-16T10:24:28', 'mysql', '5.6', '', 'c-123',
'test_config', '2015-05-16T10:24:29', '{"max_connections": 5}')
def setUp(self):
super(TestConfigurationCreate, self).setUp()
self.cmd = database_configurations.\
CreateDatabaseConfiguration(self.app, None)
self.data = self.fake_configurations.get_configurations_c_123()
self.configuration_client.create.return_value = self.data
self.columns = (
'created',
'datastore_name',
'datastore_version_name',
'description',
'id',
'name',
'updated',
'values',
)
def test_configuration_create_return_value(self):
args = ['c-123', '{"max_connections": 5}',
'--description', 'test_config',
'--datastore', 'mysql',
'--datastore_version', '5.6']
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)
def test_configuration_create(self):
args = ['cgroup1', '{"param1": 1, "param2": 2}']
parsed_args = self.check_parser(self.cmd, args, [])
self.cmd.take_action(parsed_args)
self.configuration_client.create.assert_called_with(
'cgroup1',
'{"param1": 1, "param2": 2}',
description=None,
datastore=None,
datastore_version=None)
def test_configuration_create_with_optional_args(self):
args = ['cgroup2', '{"param3": 3, "param4": 4}',
'--description', 'cgroup 2',
'--datastore', 'mysql',
'--datastore_version', '5.6']
parsed_args = self.check_parser(self.cmd, args, [])
self.cmd.take_action(parsed_args)
self.configuration_client.create.assert_called_with(
'cgroup2',
'{"param3": 3, "param4": 4}',
description='cgroup 2',
datastore='mysql',
datastore_version='5.6')