diff options
author | Craig Vyvial <cp16net@gmail.com> | 2014-03-03 22:27:39 -0600 |
---|---|---|
committer | Nikhil Manchanda <SlickNik@gmail.com> | 2014-09-03 21:16:03 -0700 |
commit | b20b18e8acf049bcda297117164819f6c406cafc (patch) | |
tree | 2fea89430cbabd1d07ea48b324918fdfdca38094 | |
parent | 6852bdcefc17712b4b57a530adfb406e059e52e2 (diff) | |
download | python-troveclient-b20b18e8acf049bcda297117164819f6c406cafc.tar.gz |
adding configuration parameters mgmt api
add the CRUD calls of configuration parameters mgmt calls
partially implements blueprint configuration-parameters-in-db
Change-Id: Iaaea946bdbcab91ca02e5e2cbf956a3980a461ab
-rw-r--r-- | troveclient/compat/client.py | 1 | ||||
-rw-r--r-- | troveclient/tests/test_configurations.py | 135 | ||||
-rw-r--r-- | troveclient/v1/client.py | 3 | ||||
-rw-r--r-- | troveclient/v1/management.py | 66 | ||||
-rw-r--r-- | troveclient/v1/shell.py | 73 |
5 files changed, 270 insertions, 8 deletions
diff --git a/troveclient/compat/client.py b/troveclient/compat/client.py index c373802..eaa0beb 100644 --- a/troveclient/compat/client.py +++ b/troveclient/compat/client.py @@ -354,6 +354,7 @@ class Dbaas(object): config_parameters = configurations.ConfigurationParameters(self) self.configuration_parameters = config_parameters self.metadata = metadata.Metadata(self) + self.mgmt_configs = management.MgmtConfigurationParameters(self) class Mgmt(object): def __init__(self, dbaas): diff --git a/troveclient/tests/test_configurations.py b/troveclient/tests/test_configurations.py index feb82a1..ee3e926 100644 --- a/troveclient/tests/test_configurations.py +++ b/troveclient/tests/test_configurations.py @@ -20,6 +20,7 @@ import testtools from troveclient import base from troveclient.v1 import configurations +from troveclient.v1 import management """ Unit tests for configurations.py @@ -72,13 +73,6 @@ class ConfigurationsTest(testtools.TestCase): return mock.Mock(side_effect=side_effect_func) - def _build_fake_configuration(self, name, values, description=None): - return { - 'name': name, - 'values': values, - 'description': description, - } - def test_create(self): self.configurations.api.client.post = self._get_mock_method() self._resp.status_code = 200 @@ -144,3 +138,130 @@ class ConfigurationsTest(testtools.TestCase): self.assertEqual('/configurations/27', self._url) self._resp.status_code = 500 self.assertRaises(Exception, self.configurations.edit, 34) + + +class ConfigurationParametersTest(testtools.TestCase): + def setUp(self): + super(ConfigurationParametersTest, self).setUp() + self.orig__init = configurations.ConfigurationParameters.__init__ + configurations.ConfigurationParameters.__init__ = mock.Mock( + return_value=None) + self.config_params = configurations.ConfigurationParameters() + self.config_params.api = mock.Mock() + self.config_params.api.client = mock.Mock() + + def tearDown(self): + super(ConfigurationParametersTest, self).tearDown() + configurations.ConfigurationParameters.__init__ = self.orig__init + + def _get_mock_method(self): + self._resp = mock.Mock() + self._body = None + self._url = None + + def side_effect_func(url, body=None): + self._body = body + self._url = url + return (self._resp, body) + + return mock.Mock(side_effect=side_effect_func) + + def test_list_parameters(self): + def side_effect_func(path, config): + return path + + self.config_params._list = mock.Mock(side_effect=side_effect_func) + self.assertEqual('/datastores/datastore/versions/version/parameters', + self.config_params.parameters('datastore', 'version')) + + def test_get_parameter(self): + def side_effect_func(path): + return path + + self.config_params._get = mock.Mock(side_effect=side_effect_func) + self.assertEqual( + '/datastores/datastore/versions/version/parameters/key', + self.config_params.get_parameter('datastore', 'version', + 'key') + ) + + def test_list_parameters_by_version(self): + def side_effect_func(path, config): + return path + + self.config_params._list = mock.Mock(side_effect=side_effect_func) + self.assertEqual('/datastores/versions/version/parameters', + self.config_params.parameters_by_version('version')) + + def test_get_parameter_by_version(self): + def side_effect_func(path): + return path + + self.config_params._get = mock.Mock(side_effect=side_effect_func) + self.assertEqual('/datastores/versions/version/parameters/key', + self.config_params.get_parameter_by_version( + 'version', 'key')) + + +class MgmtConfigurationParametersTest(testtools.TestCase): + + def setUp(self): + super(MgmtConfigurationParametersTest, self).setUp() + self.orig__init = management.MgmtConfigurationParameters.__init__ + management.MgmtConfigurationParameters.__init__ = mock.Mock( + return_value=None) + self.config_params = management.MgmtConfigurationParameters() + self.config_params.api = mock.Mock() + self.config_params.api.client = mock.Mock() + + def tearDown(self): + super(MgmtConfigurationParametersTest, self).tearDown() + management.MgmtConfigurationParameters.__init__ = self.orig__init + + def _get_mock_method(self): + self._resp = mock.Mock() + self._body = None + self._url = None + + def side_effect_func(url, body=None): + self._body = body + self._url = url + return (self._resp, body) + + return mock.Mock(side_effect=side_effect_func) + + def test_create(self): + self.config_params.api.client.post = self._get_mock_method() + self._resp.status_code = 200 + + self.config_params.create('id', 'config_name', 1, 'string') + self.assertEqual('/mgmt/datastores/versions/id/parameters', self._url) + expected = { + "name": "config_name", + "data_type": "string", + "restart_required": 1 + } + self.assertEqual({"configuration-parameter": expected}, self._body) + + def test_modify(self): + self.config_params.api.client.put = self._get_mock_method() + self._resp.status_code = 200 + + self.config_params.modify('id', 'config_name', '1', 'string') + self.assertEqual('/mgmt/datastores/versions/id/parameters/config_name', + self._url) + expected = { + "name": "config_name", + "data_type": "string", + "restart_required": 1 + } + self.assertEqual({"configuration-parameter": expected}, self._body) + + def test_delete(self): + self.config_params.api.client.delete = self._get_mock_method() + self._resp.status_code = 200 + + self.config_params.delete('id', 'param_id') + self.assertEqual('/mgmt/datastores/versions/id/parameters/param_id', + self._url) + self.assertEqual(None, self._body) diff --git a/troveclient/v1/client.py b/troveclient/v1/client.py index 8a34a8e..7afb754 100644 --- a/troveclient/v1/client.py +++ b/troveclient/v1/client.py @@ -23,6 +23,7 @@ from troveclient.v1 import datastores from troveclient.v1 import flavors from troveclient.v1 import instances from troveclient.v1 import limits +# from troveclient.v1 import management from troveclient.v1 import metadata from troveclient.v1 import root from troveclient.v1 import security_groups @@ -80,6 +81,8 @@ class Client(object): # self.accounts = Accounts(self) # self.diagnostics = DiagnosticsInterrogator(self) # self.hwinfo = HwInfoInterrogator(self) + # self.mgmt_config_params = + # management.MgmtConfigurationParameters(self) # Add in any extensions... if extensions: diff --git a/troveclient/v1/management.py b/troveclient/v1/management.py index 3dc57ac..b847aaf 100644 --- a/troveclient/v1/management.py +++ b/troveclient/v1/management.py @@ -17,6 +17,7 @@ from troveclient import base from troveclient import common from troveclient.v1 import clusters +from troveclient.v1 import configurations from troveclient.v1 import flavors from troveclient.v1 import instances @@ -186,3 +187,68 @@ class MgmtFlavors(base.ManagerWithFind): body["flavor"]["service_type"] = service_type return self._create("/mgmt/flavors", body, "flavor") + + +class MgmtConfigurationParameters(configurations.ConfigurationParameters): + def create(self, version, name, restart_required, data_type, + max_size=None, min_size=None): + """Mgmt call to create a new configuration parameter.""" + body = { + "configuration-parameter": { + "name": name, + "restart_required": int(restart_required), + "data_type": data_type, + } + } + if max_size: + body["configuration-parameter"]["max_size"] = max_size + if min_size: + body["configuration-parameter"]["min_size"] = min_size + + url = "/mgmt/datastores/versions/%s/parameters" % version + resp, body = self.api.client.post(url, body=body) + common.check_for_exceptions(resp, body, url) + + def list_all_parameter_by_version(self, version): + """List all configuration parameters deleted or not.""" + return self._list("/mgmt/datastores/versions/%s/parameters" % + version, "configuration-parameters") + + def get_any_parameter_by_version(self, version, key): + """Get any configuration parameter deleted or not.""" + return self._get("/mgmt/datastores/versions/%s/parameters/%s" % + (version, key)) + + def modify(self, version, name, restart_required, data_type, + max_size=None, min_size=None): + """Mgmt call to modify an existing configuration parameter.""" + body = { + "configuration-parameter": { + "name": name, + "restart_required": int(restart_required), + "data_type": data_type, + } + } + if max_size: + body["configuration-parameter"]["max_size"] = max_size + if min_size: + body["configuration-parameter"]["min_size"] = min_size + output = { + 'version': version, + 'parameter_name': name + } + url = ("/mgmt/datastores/versions/%(version)s/" + "parameters/%(parameter_name)s" % output) + resp, body = self.api.client.put(url, body=body) + common.check_for_exceptions(resp, body, url) + + def delete(self, version, name): + """Mgmt call to delete a configuration parameter.""" + output = { + 'version_id': version, + 'parameter_name': name + } + url = ("/mgmt/datastores/versions/%(version_id)s/" + "parameters/%(parameter_name)s" % output) + resp, body = self.api.client.delete(url) + common.check_for_exceptions(resp, body, url) diff --git a/troveclient/v1/shell.py b/troveclient/v1/shell.py index 83be5be..168b9c9 100644 --- a/troveclient/v1/shell.py +++ b/troveclient/v1/shell.py @@ -981,7 +981,7 @@ def do_configuration_parameter_list(cs, args): raise exceptions.NoUniqueMatch('The datastore name or id is required' ' to retrieve the parameters for the' ' configuration group by name.') - utils.print_list(params, ['name', 'type', 'min', 'max', + utils.print_list(params, ['name', 'type', 'min_size', 'max_size', 'restart_required']) @@ -1097,3 +1097,74 @@ def do_metadata_create(cs, args): def do_metadata_delete(cs, args): """Deletes metadata for instance <id>.""" cs.metadata.delete(args.instance_id, args.key) + + +# @utils.arg('datastore_version', +# metavar='<datastore_version>', +# help='Datastore version name or UUID assigned to the ' +# 'configuration group.') +# @utils.arg('name', metavar='<name>', +# help='Name of the datastore configuration parameter.') +# @utils.arg('restart_required', metavar='<restart_required>', +# help='Flags the instance to require a restart if this ' +# 'configuration parameter is new or changed.') +# @utils.arg('data_type', metavar='<data_type>', +# help='Data type of the datastore configuration parameter.') +# @utils.arg('--max_size', metavar='<max_size>', +# help='Maximum size of the datastore configuration parameter.') +# @utils.arg('--min_size', metavar='<min_size>', +# help='Minimum size of the datastore configuration parameter.') +# @utils.service_type('database') +# def do_configuration_parameter_create(cs, args): +# """Create datastore configuration parameter""" +# cs.mgmt_config_params.create( +# args.datastore_version, +# args.name, +# args.restart_required, +# args.data_type, +# args.max_size, +# args.min_size, +# ) + + +# @utils.arg('datastore_version', +# metavar='<datastore_version>', +# help='Datastore version name or UUID assigned to the ' +# 'configuration group.') +# @utils.arg('name', metavar='<name>', +# help='Name of the datastore configuration parameter.') +# @utils.arg('restart_required', metavar='<restart_required>', +# help='Sets the datastore configuration parameter if it ' +# 'requires a restart or not.') +# @utils.arg('data_type', metavar='<data_type>', +# help='Data type of the datastore configuration parameter.') +# @utils.arg('--max_size', metavar='<max_size>', +# help='Maximum size of the datastore configuration parameter.') +# @utils.arg('--min_size', metavar='<min_size>', +# help='Minimum size of the datastore configuration parameter.') +# @utils.service_type('database') +# def do_configuration_parameter_modify(cs, args): +# """Modify datastore configuration parameter""" +# cs.mgmt_config_params.modify( +# args.datastore_version, +# args.name, +# args.restart_required, +# args.data_type, +# args.max_size, +# args.min_size, +# ) + + +# @utils.arg('datastore_version', +# metavar='<datastore_version>', +# help='Datastore version name or UUID assigned to the ' +# 'configuration group.') +# @utils.arg('name', metavar='<name>', +# help='UUID of the datastore configuration parameter.') +# @utils.service_type('database') +# def do_configuration_parameter_delete(cs, args): +# """Modify datastore configuration parameter""" +# cs.mgmt_config_params.delete( +# args.datastore_version, +# args.name, +# ) |