summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Vyvial <cp16net@gmail.com>2014-03-03 22:27:39 -0600
committerNikhil Manchanda <SlickNik@gmail.com>2014-09-03 21:16:03 -0700
commitb20b18e8acf049bcda297117164819f6c406cafc (patch)
tree2fea89430cbabd1d07ea48b324918fdfdca38094
parent6852bdcefc17712b4b57a530adfb406e059e52e2 (diff)
downloadpython-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.py1
-rw-r--r--troveclient/tests/test_configurations.py135
-rw-r--r--troveclient/v1/client.py3
-rw-r--r--troveclient/v1/management.py66
-rw-r--r--troveclient/v1/shell.py73
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,
+# )