diff --git a/releasenotes/notes/cli-configuration-name-allowed-747c5d6f2d1f8c7a.yaml b/releasenotes/notes/cli-configuration-name-allowed-747c5d6f2d1f8c7a.yaml new file mode 100644 index 00000000..242d7802 --- /dev/null +++ b/releasenotes/notes/cli-configuration-name-allowed-747c5d6f2d1f8c7a.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - configuration-* cli commands now allow name of configuration group + entered instead of just the configuration id. This will allow a user + to specify the configuration group name or the id to use for all + the cli commands related to configuration groups. Bug 1505529 diff --git a/troveclient/tests/test_configurations.py b/troveclient/tests/test_configurations.py index 5850d7e2..216b4956 100644 --- a/troveclient/tests/test_configurations.py +++ b/troveclient/tests/test_configurations.py @@ -91,7 +91,7 @@ class ConfigurationsTest(testtools.TestCase): self.configurations.api.client.delete = self._get_mock_method() self._resp.status_code = 200 self.configurations.delete(27) - self.assertEqual('/configurations/27', self._url) + self.assertEqual('/configurations/configuration1', self._url) self._resp.status_code = 500 self.assertRaises(Exception, self.configurations.delete, 34) @@ -122,7 +122,7 @@ class ConfigurationsTest(testtools.TestCase): self._resp.status_code = 200 config = '{"test":12}' self.configurations.update(27, config) - self.assertEqual('/configurations/27', self._url) + self.assertEqual('/configurations/configuration1', self._url) self._resp.status_code = 500 self.assertRaises(Exception, self.configurations.update, 34) @@ -131,7 +131,7 @@ class ConfigurationsTest(testtools.TestCase): self._resp.status_code = 200 config = '{"test":12}' self.configurations.edit(27, config) - self.assertEqual('/configurations/27', self._url) + self.assertEqual('/configurations/configuration1', self._url) self._resp.status_code = 500 self.assertRaises(Exception, self.configurations.edit, 34) diff --git a/troveclient/v1/configurations.py b/troveclient/v1/configurations.py index 89db4908..573d55c5 100644 --- a/troveclient/v1/configurations.py +++ b/troveclient/v1/configurations.py @@ -74,7 +74,7 @@ class Configurations(base.ManagerWithFind): body['configuration']['description'] = description return self._create("/configurations", body, "configuration") - def update(self, configuration_id, values, name=None, description=None): + def update(self, configuration, values, name=None, description=None): """Update an existing configuration.""" body = { "configuration": { @@ -85,27 +85,27 @@ class Configurations(base.ManagerWithFind): body['configuration']['name'] = name if description: body['configuration']['description'] = description - url = "/configurations/%s" % configuration_id + url = "/configurations/%s" % base.getid(configuration) resp, body = self.api.client.put(url, body=body) common.check_for_exceptions(resp, body, url) - def edit(self, configuration_id, values): + def edit(self, configuration, values): """Update an existing configuration.""" body = { "configuration": { "values": json.loads(values) } } - url = "/configurations/%s" % configuration_id + url = "/configurations/%s" % base.getid(configuration) resp, body = self.api.client.patch(url, body=body) common.check_for_exceptions(resp, body, url) - def delete(self, configuration_id): + def delete(self, configuration): """Delete the specified configuration. - :param configuration_id: The configuration id to delete + :param configuration: The configuration id to delete """ - url = "/configurations/%s" % configuration_id + url = "/configurations/%s" % base.getid(configuration) resp, body = self.api.client.delete(url) common.check_for_exceptions(resp, body, url) diff --git a/troveclient/v1/instances.py b/troveclient/v1/instances.py index 7d461c08..9fc51c25 100644 --- a/troveclient/v1/instances.py +++ b/troveclient/v1/instances.py @@ -116,7 +116,7 @@ class Instances(base.ManagerWithFind): if nics: body["instance"]["nics"] = nics if configuration: - body["instance"]["configuration"] = configuration + body["instance"]["configuration"] = base.getid(configuration) if replica_of or slave_of: if slave_of: warnings.warn(_LW("The 'slave_of' argument is deprecated in " @@ -138,7 +138,7 @@ class Instances(base.ManagerWithFind): } } if configuration is not None: - body["instance"]["configuration"] = configuration + body["instance"]["configuration"] = base.getid(configuration) url = "/instances/%s" % base.getid(instance) resp, body = self.api.client.put(url, body=body) common.check_for_exceptions(resp, body, url) @@ -155,7 +155,7 @@ class Instances(base.ManagerWithFind): if remove_configuration: body["instance"]["configuration"] = None if configuration is not None: - body["instance"]["configuration"] = configuration + body["instance"]["configuration"] = base.getid(configuration) if name is not None: body["instance"]["name"] = name if detach_replica_source: diff --git a/troveclient/v1/shell.py b/troveclient/v1/shell.py index d6549ff3..ca97bd07 100644 --- a/troveclient/v1/shell.py +++ b/troveclient/v1/shell.py @@ -156,6 +156,11 @@ def _find_datastore_version(cs, datastore_version): return utils.find_resource(cs.datastores, datastore_version) +def _find_configuration(cs, configuration): + """Get a configuration by ID.""" + return utils.find_resource(cs.configurations, configuration) + + # Flavor related calls @utils.arg('--datastore_type', metavar='', default=None, @@ -1248,12 +1253,14 @@ def do_datastore_version_show(cs, args): @utils.arg('configuration', metavar='', type=str, - help='ID of the configuration group to attach to the instance.') + help='ID or name of the configuration group to attach to the' + ' instance.') @utils.service_type('database') def do_configuration_attach(cs, args): """Attaches a configuration group to an instance.""" instance = _find_instance(cs, args.instance) - cs.instances.modify(instance, args.configuration) + configuration = _find_configuration(cs, args.configuration) + cs.instances.modify(instance, configuration) @utils.arg('name', metavar='', help='Name of the configuration group.') @@ -1293,11 +1300,12 @@ def do_configuration_default(cs, args): @utils.arg('configuration_group', metavar='', - help='ID of the configuration group.') + help='ID or name of the configuration group.') @utils.service_type('database') def do_configuration_delete(cs, args): """Deletes a configuration group.""" - cs.configurations.delete(args.configuration_group) + configuration = _find_configuration(cs, args.configuration_group) + cs.configurations.delete(configuration) @utils.arg('instance', @@ -1365,22 +1373,23 @@ def do_configuration_parameter_list(cs, args): @utils.arg('configuration_group', metavar='', - help='ID of the configuration group.') + help='ID or name of the configuration group.') @utils.arg('values', metavar='', help='Dictionary of the values to set.') @utils.service_type('database') def do_configuration_patch(cs, args): """Patches a configuration group.""" - cs.configurations.edit(args.configuration_group, - args.values) + configuration = _find_configuration(cs, args.configuration_group) + cs.configurations.edit(configuration, args.values) @utils.arg('configuration_group', metavar='', - help='ID of the configuration group.') + help='ID or name of the configuration group.') @utils.service_type('database') def do_configuration_instances(cs, args): """Lists all instances associated with a configuration group.""" - params = cs.configurations.instances(args.configuration_group) + configuration = _find_configuration(cs, args.configuration_group) + params = cs.configurations.instances(configuration) utils.print_list(params, ['id', 'name']) @@ -1394,11 +1403,12 @@ def do_configuration_list(cs, args): @utils.arg('configuration_group', metavar='', - help='ID of the configuration group.') + help='ID or name of the configuration group.') @utils.service_type('database') def do_configuration_show(cs, args): """Shows details of a configuration group.""" - config_grp = cs.configurations.get(args.configuration_group) + configuration = _find_configuration(cs, args.configuration_group) + config_grp = cs.configurations.get(configuration) config_grp._info['values'] = json.dumps(config_grp.values) del config_grp._info['datastore_version_id'] @@ -1406,7 +1416,7 @@ def do_configuration_show(cs, args): @utils.arg('configuration_group', metavar='', - help='ID of the configuration group.') + help='ID or name of the configuration group.') @utils.arg('values', metavar='', help='Dictionary of the values to set.') @utils.arg('--name', metavar='', default=None, @@ -1417,7 +1427,8 @@ def do_configuration_show(cs, args): @utils.service_type('database') def do_configuration_update(cs, args): """Updates a configuration group.""" - cs.configurations.update(args.configuration_group, + configuration = _find_configuration(cs, args.configuration_group) + cs.configurations.update(configuration, args.values, args.name, args.description)