From 64f3f62368e3f278ce235d1cd22bc3b280d1f860 Mon Sep 17 00:00:00 2001 From: Lingxian Kong Date: Fri, 9 Jul 2021 20:31:43 +1200 Subject: [PATCH] Fix detach configuration from instance Change-Id: Id0853dfb207bbd219755d46a9c0d6b4e897bfbeb --- troveclient/osc/v1/database_configurations.py | 25 ++++++++++++------- troveclient/osc/v1/database_instances.py | 4 +-- .../osc/v1/test_database_configurations.py | 8 +++--- troveclient/v1/instances.py | 1 + 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/troveclient/osc/v1/database_configurations.py b/troveclient/osc/v1/database_configurations.py index 69a8bf01..72becd9b 100644 --- a/troveclient/osc/v1/database_configurations.py +++ b/troveclient/osc/v1/database_configurations.py @@ -265,7 +265,6 @@ class CreateDatabaseConfiguration(command.ShowOne): class AttachDatabaseConfiguration(command.Command): - _description = _("Attaches a configuration group to an instance.") def get_parser(self, prog_name): @@ -289,11 +288,16 @@ class AttachDatabaseConfiguration(command.Command): 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) + + instance_id = parsed_args.instance + config_id = parsed_args.configuration + + if not uuidutils.is_uuid_like(instance_id): + instance_id = osc_utils.find_resource(db_instances, instance_id) + if not uuidutils.is_uuid_like(config_id): + config_id = osc_utils.find_resource(db_configurations, config_id) + + db_instances.update(instance_id, configuration=config_id) class DetachDatabaseConfiguration(command.Command): @@ -312,9 +316,12 @@ class DetachDatabaseConfiguration(command.Command): 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) + instance_id = parsed_args.instance + + if not uuidutils.is_uuid_like(instance_id): + instance_id = osc_utils.find_resource(db_instances, instance_id) + + db_instances.update(instance_id, remove_configuration=True) class ListDatabaseConfigurationInstances(command.Lister): diff --git a/troveclient/osc/v1/database_instances.py b/troveclient/osc/v1/database_instances.py index 5e54898b..b93323cd 100644 --- a/troveclient/osc/v1/database_instances.py +++ b/troveclient/osc/v1/database_instances.py @@ -719,8 +719,8 @@ class UpdateDatabaseInstance(command.Command): help=_('ID of the configuration reference to attach.'), ) parser.add_argument( - '--detach_replica_source', '--detach-replica-source', + '--detach_replica_source', dest='detach_replica_source', action="store_true", default=False, @@ -729,8 +729,8 @@ class UpdateDatabaseInstance(command.Command): 'in favor of just --detach_replica_source'), ) parser.add_argument( - '--remove_configuration', '--remove-configuration', + '--remove_configuration', dest='remove_configuration', action="store_true", default=False, diff --git a/troveclient/tests/osc/v1/test_database_configurations.py b/troveclient/tests/osc/v1/test_database_configurations.py index f97302c0..f1408c2b 100644 --- a/troveclient/tests/osc/v1/test_database_configurations.py +++ b/troveclient/tests/osc/v1/test_database_configurations.py @@ -278,7 +278,8 @@ class TestConfigurationAttach(TestConfigurations): 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.instance_client.update.assert_called_with( + 'instance1', configuration='config1') self.assertIsNone(result) @@ -286,7 +287,7 @@ class TestConfigurationDetach(TestConfigurations): def setUp(self): super(TestConfigurationDetach, self).setUp() - self.cmd = database_configurations.\ + self.cmd = database_configurations. \ DetachDatabaseConfiguration(self.app, None) @mock.patch.object(utils, 'find_resource') @@ -295,7 +296,8 @@ class TestConfigurationDetach(TestConfigurations): 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.instance_client.update.assert_called_with( + 'instance2', remove_configuration=True) self.assertIsNone(result) diff --git a/troveclient/v1/instances.py b/troveclient/v1/instances.py index 359deb1c..75638d77 100644 --- a/troveclient/v1/instances.py +++ b/troveclient/v1/instances.py @@ -141,6 +141,7 @@ class Instances(base.ManagerWithFind): return self._create("/instances", body, "instance") def modify(self, instance, configuration=None): + """This method is deprecated, use update instead.""" body = { "instance": { }