adding configuration parameters mgmt api

add the CRUD calls of configuration parameters mgmt calls

partially implements blueprint configuration-parameters-in-db
Change-Id: Iaaea946bdbcab91ca02e5e2cbf956a3980a461ab
This commit is contained in:
Craig Vyvial 2014-03-03 22:27:39 -06:00 committed by Nikhil Manchanda
parent 6852bdcefc
commit b20b18e8ac
5 changed files with 270 additions and 8 deletions

@ -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):

@ -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)

@ -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:

@ -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)

@ -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,
# )