Merge "Add configuration-attach/detach to OSC"
This commit is contained in:
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
The command ``trove configuration-attach`` is now available
|
||||||
|
to use in the python-openstackclient CLI as ``openstack database
|
||||||
|
configuration attach``
|
||||||
|
The command ``trove configuration-detach`` is now available
|
||||||
|
to use in the python-openstackclient CLI as ``openstack database
|
||||||
|
configuration detach``
|
@@ -40,8 +40,10 @@ openstack.database.v1 =
|
|||||||
database_cluster_list = troveclient.osc.v1.database_clusters:ListDatabaseClusters
|
database_cluster_list = troveclient.osc.v1.database_clusters:ListDatabaseClusters
|
||||||
database_cluster_reset_status = troveclient.osc.v1.database_clusters:ResetDatabaseClusterStatus
|
database_cluster_reset_status = troveclient.osc.v1.database_clusters:ResetDatabaseClusterStatus
|
||||||
database_cluster_show = troveclient.osc.v1.database_clusters:ShowDatabaseCluster
|
database_cluster_show = troveclient.osc.v1.database_clusters:ShowDatabaseCluster
|
||||||
|
database_configuration_attach = troveclient.osc.v1.database_configurations:AttachDatabaseConfiguration
|
||||||
database_configuration_create = troveclient.osc.v1.database_configurations:CreateDatabaseConfiguration
|
database_configuration_create = troveclient.osc.v1.database_configurations:CreateDatabaseConfiguration
|
||||||
database_configuration_delete = troveclient.osc.v1.database_configurations:DeleteDatabaseConfiguration
|
database_configuration_delete = troveclient.osc.v1.database_configurations:DeleteDatabaseConfiguration
|
||||||
|
database_configuration_detach = troveclient.osc.v1.database_configurations:DetachDatabaseConfiguration
|
||||||
database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations
|
database_configuration_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurations
|
||||||
database_configuration_parameter_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurationParameters
|
database_configuration_parameter_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurationParameters
|
||||||
database_configuration_parameter_show = troveclient.osc.v1.database_configurations:ShowDatabaseConfigurationParameter
|
database_configuration_parameter_show = troveclient.osc.v1.database_configurations:ShowDatabaseConfigurationParameter
|
||||||
|
@@ -253,3 +253,56 @@ class CreateDatabaseConfiguration(command.ShowOne):
|
|||||||
datastore_version=parsed_args.datastore_version)
|
datastore_version=parsed_args.datastore_version)
|
||||||
config_grp = set_attributes_for_print_detail(config_grp)
|
config_grp = set_attributes_for_print_detail(config_grp)
|
||||||
return zip(*sorted(six.iteritems(config_grp)))
|
return zip(*sorted(six.iteritems(config_grp)))
|
||||||
|
|
||||||
|
|
||||||
|
class AttachDatabaseConfiguration(command.Command):
|
||||||
|
|
||||||
|
_description = _("Attaches a configuration group to an instance.")
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(AttachDatabaseConfiguration, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'instance',
|
||||||
|
metavar='<instance>',
|
||||||
|
type=str,
|
||||||
|
help=_('ID or name of the instance'),
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'configuration',
|
||||||
|
metavar='<configuration>',
|
||||||
|
type=str,
|
||||||
|
help=_('ID or name of the configuration group to attach to the '
|
||||||
|
'instance.'),
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
manager = self.app.client_manager.database
|
||||||
|
db_instances = manager.instances
|
||||||
|
db_configurations = manager.configurations
|
||||||
|
instance = osc_utils.find_resource(db_instances,
|
||||||
|
parsed_args.instance)
|
||||||
|
configuration = osc_utils.find_resource(
|
||||||
|
db_configurations, parsed_args.configuration)
|
||||||
|
db_instances.modify(instance, configuration)
|
||||||
|
|
||||||
|
|
||||||
|
class DetachDatabaseConfiguration(command.Command):
|
||||||
|
|
||||||
|
_description = _("Detaches a configuration group from an instance.")
|
||||||
|
|
||||||
|
def get_parser(self, prog_name):
|
||||||
|
parser = super(DetachDatabaseConfiguration, self).get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
'instance',
|
||||||
|
metavar='<instance>',
|
||||||
|
type=str,
|
||||||
|
help=_('ID or name of the instance.'),
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
|
def take_action(self, parsed_args):
|
||||||
|
db_instances = self.app.client_manager.database.instances
|
||||||
|
instance = osc_utils.find_resource(db_instances,
|
||||||
|
parsed_args.instance)
|
||||||
|
db_instances.modify(instance)
|
||||||
|
@@ -29,6 +29,7 @@ class TestConfigurations(fakes.TestDatabasev1):
|
|||||||
self.mock_client = self.app.client_manager.database
|
self.mock_client = self.app.client_manager.database
|
||||||
self.configuration_client = (self.app.client_manager.database.
|
self.configuration_client = (self.app.client_manager.database.
|
||||||
configurations)
|
configurations)
|
||||||
|
self.instance_client = self.app.client_manager.database.instances
|
||||||
self.configuration_params_client = (self.app.client_manager.
|
self.configuration_params_client = (self.app.client_manager.
|
||||||
database.configuration_parameters)
|
database.configuration_parameters)
|
||||||
|
|
||||||
@@ -258,3 +259,37 @@ class TestConfigurationCreate(TestConfigurations):
|
|||||||
description='cgroup 2',
|
description='cgroup 2',
|
||||||
datastore='mysql',
|
datastore='mysql',
|
||||||
datastore_version='5.6')
|
datastore_version='5.6')
|
||||||
|
|
||||||
|
|
||||||
|
class TestConfigurationAttach(TestConfigurations):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestConfigurationAttach, self).setUp()
|
||||||
|
self.cmd = database_configurations.\
|
||||||
|
AttachDatabaseConfiguration(self.app, None)
|
||||||
|
|
||||||
|
@mock.patch.object(utils, 'find_resource')
|
||||||
|
def test_configuration_attach(self, mock_find):
|
||||||
|
args = ['instance1', 'config1']
|
||||||
|
mock_find.side_effect = ['instance1', 'config1']
|
||||||
|
parsed_args = self.check_parser(self.cmd, args, [])
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
self.instance_client.modify.assert_called_with('instance1', 'config1')
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
|
||||||
|
class TestConfigurationDetach(TestConfigurations):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestConfigurationDetach, self).setUp()
|
||||||
|
self.cmd = database_configurations.\
|
||||||
|
DetachDatabaseConfiguration(self.app, None)
|
||||||
|
|
||||||
|
@mock.patch.object(utils, 'find_resource')
|
||||||
|
def test_configuration_detach(self, mock_find):
|
||||||
|
args = ['instance2']
|
||||||
|
mock_find.return_value = args[0]
|
||||||
|
parsed_args = self.check_parser(self.cmd, args, [])
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
self.instance_client.modify.assert_called_with('instance2')
|
||||||
|
self.assertIsNone(result)
|
||||||
|
Reference in New Issue
Block a user