Add configuration-attach/detach to OSC

This change adds database support to the python-openstackclient
project for the configuration-attach/detach command.

The trove command configuration-attach is now:
    openstack database configuration attach
The trove command configuration-detach is now:
    openstack database configuration detach
Partially-Implements: blueprint trove-support-in-python-openstackclient

Change-Id: I03c71f6828ff7af8f9caf5c6b383e5e875f348c3
This commit is contained in:
zhanggang 2017-12-26 02:45:15 -05:00
parent 5a6123f94e
commit ba1535fdf0
4 changed files with 99 additions and 0 deletions

View File

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

View File

@ -39,8 +39,10 @@ openstack.database.v1 =
database_cluster_delete = troveclient.osc.v1.database_clusters:DeleteDatabaseCluster
database_cluster_list = troveclient.osc.v1.database_clusters:ListDatabaseClusters
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_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_parameter_list = troveclient.osc.v1.database_configurations:ListDatabaseConfigurationParameters
database_configuration_parameter_show = troveclient.osc.v1.database_configurations:ShowDatabaseConfigurationParameter

View File

@ -253,3 +253,56 @@ class CreateDatabaseConfiguration(command.ShowOne):
datastore_version=parsed_args.datastore_version)
config_grp = set_attributes_for_print_detail(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)

View File

@ -29,6 +29,7 @@ class TestConfigurations(fakes.TestDatabasev1):
self.mock_client = self.app.client_manager.database
self.configuration_client = (self.app.client_manager.database.
configurations)
self.instance_client = self.app.client_manager.database.instances
self.configuration_params_client = (self.app.client_manager.
database.configuration_parameters)
@ -258,3 +259,37 @@ class TestConfigurationCreate(TestConfigurations):
description='cgroup 2',
datastore='mysql',
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)