diff --git a/cinderclient/base.py b/cinderclient/base.py index 73bdec603..30dbbd908 100644 --- a/cinderclient/base.py +++ b/cinderclient/base.py @@ -203,7 +203,10 @@ class ManagerWithFind(six.with_metaclass(abc.ABCMeta, Manager)): found = [] searches = list(kwargs.items()) - for obj in self.list(): + # Want to search for all tenants here so that when attempting to delete + # that a user like admin doesn't get a failure when trying to delete + # another tenant's volume by name. + for obj in self.list(search_opts={'all_tenants': 1}): try: if all(getattr(obj, attr) == value for (attr, value) in searches): diff --git a/cinderclient/tests/test_utils.py b/cinderclient/tests/test_utils.py index 32db04c06..92aee5123 100644 --- a/cinderclient/tests/test_utils.py +++ b/cinderclient/tests/test_utils.py @@ -55,7 +55,7 @@ class FakeManager(base.ManagerWithFind): return resource raise exceptions.NotFound(resource_id) - def list(self): + def list(self, search_opts): return self.resources diff --git a/cinderclient/tests/v1/test_shell.py b/cinderclient/tests/v1/test_shell.py index 3b431b947..6294036a0 100644 --- a/cinderclient/tests/v1/test_shell.py +++ b/cinderclient/tests/v1/test_shell.py @@ -117,6 +117,11 @@ class ShellTest(utils.TestCase): self.run_command('delete 1234') self.assert_called('DELETE', '/volumes/1234') + def test_delete_by_name(self): + self.run_command('delete sample-volume') + self.assert_called_anytime('GET', '/volumes/detail?all_tenants=1') + self.assert_called('DELETE', '/volumes/1234') + def test_delete_multiple(self): self.run_command('delete 1234 5678') self.assert_called('DELETE', '/volumes/5678') diff --git a/cinderclient/tests/v2/test_shell.py b/cinderclient/tests/v2/test_shell.py index cc29113ab..5928296b3 100644 --- a/cinderclient/tests/v2/test_shell.py +++ b/cinderclient/tests/v2/test_shell.py @@ -95,6 +95,11 @@ class ShellTest(utils.TestCase): self.run_command('delete 1234') self.assert_called('DELETE', '/volumes/1234') + def test_delete_by_name(self): + self.run_command('delete sample-volume') + self.assert_called_anytime('GET', '/volumes/detail?all_tenants=1') + self.assert_called('DELETE', '/volumes/1234') + def test_delete_multiple(self): self.run_command('delete 1234 5678') self.assert_called('DELETE', '/volumes/5678')