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) config_parameters = configurations.ConfigurationParameters(self)
self.configuration_parameters = config_parameters self.configuration_parameters = config_parameters
self.metadata = metadata.Metadata(self) self.metadata = metadata.Metadata(self)
self.mgmt_configs = management.MgmtConfigurationParameters(self)
class Mgmt(object): class Mgmt(object):
def __init__(self, dbaas): def __init__(self, dbaas):

@ -20,6 +20,7 @@ import testtools
from troveclient import base from troveclient import base
from troveclient.v1 import configurations from troveclient.v1 import configurations
from troveclient.v1 import management
""" """
Unit tests for configurations.py Unit tests for configurations.py
@ -72,13 +73,6 @@ class ConfigurationsTest(testtools.TestCase):
return mock.Mock(side_effect=side_effect_func) 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): def test_create(self):
self.configurations.api.client.post = self._get_mock_method() self.configurations.api.client.post = self._get_mock_method()
self._resp.status_code = 200 self._resp.status_code = 200
@ -144,3 +138,130 @@ class ConfigurationsTest(testtools.TestCase):
self.assertEqual('/configurations/27', self._url) self.assertEqual('/configurations/27', self._url)
self._resp.status_code = 500 self._resp.status_code = 500
self.assertRaises(Exception, self.configurations.edit, 34) 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 flavors
from troveclient.v1 import instances from troveclient.v1 import instances
from troveclient.v1 import limits from troveclient.v1 import limits
# from troveclient.v1 import management
from troveclient.v1 import metadata from troveclient.v1 import metadata
from troveclient.v1 import root from troveclient.v1 import root
from troveclient.v1 import security_groups from troveclient.v1 import security_groups
@ -80,6 +81,8 @@ class Client(object):
# self.accounts = Accounts(self) # self.accounts = Accounts(self)
# self.diagnostics = DiagnosticsInterrogator(self) # self.diagnostics = DiagnosticsInterrogator(self)
# self.hwinfo = HwInfoInterrogator(self) # self.hwinfo = HwInfoInterrogator(self)
# self.mgmt_config_params =
# management.MgmtConfigurationParameters(self)
# Add in any extensions... # Add in any extensions...
if extensions: if extensions:

@ -17,6 +17,7 @@
from troveclient import base from troveclient import base
from troveclient import common from troveclient import common
from troveclient.v1 import clusters from troveclient.v1 import clusters
from troveclient.v1 import configurations
from troveclient.v1 import flavors from troveclient.v1 import flavors
from troveclient.v1 import instances from troveclient.v1 import instances
@ -186,3 +187,68 @@ class MgmtFlavors(base.ManagerWithFind):
body["flavor"]["service_type"] = service_type body["flavor"]["service_type"] = service_type
return self._create("/mgmt/flavors", body, "flavor") 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' raise exceptions.NoUniqueMatch('The datastore name or id is required'
' to retrieve the parameters for the' ' to retrieve the parameters for the'
' configuration group by name.') ' configuration group by name.')
utils.print_list(params, ['name', 'type', 'min', 'max', utils.print_list(params, ['name', 'type', 'min_size', 'max_size',
'restart_required']) 'restart_required'])
@ -1097,3 +1097,74 @@ def do_metadata_create(cs, args):
def do_metadata_delete(cs, args): def do_metadata_delete(cs, args):
"""Deletes metadata for instance <id>.""" """Deletes metadata for instance <id>."""
cs.metadata.delete(args.instance_id, args.key) 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,
# )