From 481e600f35ee923a66c8bdb12389af2ddaf691d7 Mon Sep 17 00:00:00 2001 From: zhanggang Date: Fri, 22 Dec 2017 22:57:34 -0500 Subject: [PATCH] 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 --- ...ration-create-to-osc-fd556891b57cce05.yaml | 6 ++ setup.cfg | 1 + troveclient/osc/v1/database_configurations.py | 50 ++++++++++++++++ .../osc/v1/test_database_configurations.py | 58 +++++++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 releasenotes/notes/add-configuration-create-to-osc-fd556891b57cce05.yaml diff --git a/releasenotes/notes/add-configuration-create-to-osc-fd556891b57cce05.yaml b/releasenotes/notes/add-configuration-create-to-osc-fd556891b57cce05.yaml new file mode 100644 index 00000000..6d61d034 --- /dev/null +++ b/releasenotes/notes/add-configuration-create-to-osc-fd556891b57cce05.yaml @@ -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`` diff --git a/setup.cfg b/setup.cfg index 96ab7de7..5c9313a9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -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 diff --git a/troveclient/osc/v1/database_configurations.py b/troveclient/osc/v1/database_configurations.py index b9639f0d..3a587ebe 100644 --- a/troveclient/osc/v1/database_configurations.py +++ b/troveclient/osc/v1/database_configurations.py @@ -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='', + help=_('Name of the configuration group.'), + ) + parser.add_argument( + 'values', + metavar='', + help=_('Dictionary of the values to set.'), + ) + parser.add_argument( + '--datastore', + metavar='', + default=None, + help=_('Datastore assigned to the configuration group. Required ' + 'if default datastore is not configured.'), + ) + parser.add_argument( + '--datastore_version', + metavar='', + default=None, + help=_('Datastore version ID assigned to the ' + 'configuration group.'), + ) + parser.add_argument( + '--description', + metavar='', + 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))) diff --git a/troveclient/tests/osc/v1/test_database_configurations.py b/troveclient/tests/osc/v1/test_database_configurations.py index 636ff6f8..b603a2cf 100644 --- a/troveclient/tests/osc/v1/test_database_configurations.py +++ b/troveclient/tests/osc/v1/test_database_configurations.py @@ -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')