summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlihaijing <lihaijing@fiberhome.com>2017-09-21 14:55:17 +0800
committerDavid Rabel <rabel@b1-systems.de>2017-11-02 16:38:04 +0000
commitb9c5094ede503109955eb90fe0007e343f7bb903 (patch)
tree13a4d284f4172ff7b689fadf03291e384736e358
parentfcf928eaaa55068564de183ea2fc266e5d035a34 (diff)
downloadpython-openstackclient-b9c5094ede503109955eb90fe0007e343f7bb903.tar.gz
Fix 'project purge' deletes ALL images problem
Closes-Bug: #1717130 Change-Id: I33c6fc7897dfee85d1c197a1267bde4abfa5bbd9 (cherry picked from commit 254dbf3294c0f1edc4a2a469f556b3c4b3123a00)
-rw-r--r--openstackclient/common/project_purge.py9
-rw-r--r--openstackclient/tests/unit/common/test_project_purge.py24
-rw-r--r--openstackclient/tests/unit/image/v1/fakes.py1
-rw-r--r--openstackclient/tests/unit/image/v2/fakes.py1
-rw-r--r--releasenotes/notes/bug-1717130-029211b60f74b4c4.yaml6
5 files changed, 28 insertions, 13 deletions
diff --git a/openstackclient/common/project_purge.py b/openstackclient/common/project_purge.py
index dff954e7..5b1d0072 100644
--- a/openstackclient/common/project_purge.py
+++ b/openstackclient/common/project_purge.py
@@ -95,7 +95,14 @@ class ProjectPurge(command.Command):
# images
try:
image_client = self.app.client_manager.image
- data = image_client.images.list(owner=project_id)
+ api_version = int(image_client.version)
+ if api_version == 1:
+ data = image_client.images.list(owner=project_id)
+ elif api_version == 2:
+ kwargs = {'filters': {'owner': project_id}}
+ data = image_client.images.list(**kwargs)
+ else:
+ raise NotImplementedError
self.delete_objects(
image_client.images.delete, data, 'image', dry_run)
except Exception:
diff --git a/openstackclient/tests/unit/common/test_project_purge.py b/openstackclient/tests/unit/common/test_project_purge.py
index 05a8aa3e..2385eae8 100644
--- a/openstackclient/tests/unit/common/test_project_purge.py
+++ b/openstackclient/tests/unit/common/test_project_purge.py
@@ -118,8 +118,8 @@ class TestProjectPurge(TestProjectPurgeInit):
self.projects_mock.delete.assert_called_once_with(self.project.id)
self.servers_mock.list.assert_called_once_with(
search_opts={'tenant_id': self.project.id})
- self.images_mock.list.assert_called_once_with(
- owner=self.project.id)
+ kwargs = {'filters': {'owner': self.project.id}}
+ self.images_mock.list.assert_called_once_with(**kwargs)
volume_search_opts = {'project_id': self.project.id}
self.volumes_mock.list.assert_called_once_with(
search_opts=volume_search_opts)
@@ -153,8 +153,8 @@ class TestProjectPurge(TestProjectPurgeInit):
self.projects_mock.delete.assert_not_called()
self.servers_mock.list.assert_called_once_with(
search_opts={'tenant_id': self.project.id})
- self.images_mock.list.assert_called_once_with(
- owner=self.project.id)
+ kwargs = {'filters': {'owner': self.project.id}}
+ self.images_mock.list.assert_called_once_with(**kwargs)
volume_search_opts = {'project_id': self.project.id}
self.volumes_mock.list.assert_called_once_with(
search_opts=volume_search_opts)
@@ -188,8 +188,8 @@ class TestProjectPurge(TestProjectPurgeInit):
self.projects_mock.delete.assert_not_called()
self.servers_mock.list.assert_called_once_with(
search_opts={'tenant_id': self.project.id})
- self.images_mock.list.assert_called_once_with(
- owner=self.project.id)
+ kwargs = {'filters': {'owner': self.project.id}}
+ self.images_mock.list.assert_called_once_with(**kwargs)
volume_search_opts = {'project_id': self.project.id}
self.volumes_mock.list.assert_called_once_with(
search_opts=volume_search_opts)
@@ -224,8 +224,8 @@ class TestProjectPurge(TestProjectPurgeInit):
self.projects_mock.delete.assert_called_once_with(self.project.id)
self.servers_mock.list.assert_called_once_with(
search_opts={'tenant_id': self.project.id})
- self.images_mock.list.assert_called_once_with(
- owner=self.project.id)
+ kwargs = {'filters': {'owner': self.project.id}}
+ self.images_mock.list.assert_called_once_with(**kwargs)
volume_search_opts = {'project_id': self.project.id}
self.volumes_mock.list.assert_called_once_with(
search_opts=volume_search_opts)
@@ -260,8 +260,8 @@ class TestProjectPurge(TestProjectPurgeInit):
self.projects_mock.delete.assert_called_once_with(self.project.id)
self.servers_mock.list.assert_called_once_with(
search_opts={'tenant_id': self.project.id})
- self.images_mock.list.assert_called_once_with(
- owner=self.project.id)
+ kwargs = {'filters': {'owner': self.project.id}}
+ self.images_mock.list.assert_called_once_with(**kwargs)
volume_search_opts = {'project_id': self.project.id}
self.volumes_mock.list.assert_called_once_with(
search_opts=volume_search_opts)
@@ -296,8 +296,8 @@ class TestProjectPurge(TestProjectPurgeInit):
self.projects_mock.delete.assert_called_once_with(self.project.id)
self.servers_mock.list.assert_called_once_with(
search_opts={'tenant_id': self.project.id})
- self.images_mock.list.assert_called_once_with(
- owner=self.project.id)
+ kwargs = {'filters': {'owner': self.project.id}}
+ self.images_mock.list.assert_called_once_with(**kwargs)
volume_search_opts = {'project_id': self.project.id}
self.volumes_mock.list.assert_called_once_with(
search_opts=volume_search_opts)
diff --git a/openstackclient/tests/unit/image/v1/fakes.py b/openstackclient/tests/unit/image/v1/fakes.py
index 4b6d278c..b8afa5a9 100644
--- a/openstackclient/tests/unit/image/v1/fakes.py
+++ b/openstackclient/tests/unit/image/v1/fakes.py
@@ -63,6 +63,7 @@ class FakeImagev1Client(object):
self.images.resource_class = fakes.FakeResource(None, {})
self.auth_token = kwargs['token']
self.management_url = kwargs['endpoint']
+ self.version = 1.0
class TestImagev1(utils.TestCommand):
diff --git a/openstackclient/tests/unit/image/v2/fakes.py b/openstackclient/tests/unit/image/v2/fakes.py
index 0255ce38..45afefb3 100644
--- a/openstackclient/tests/unit/image/v2/fakes.py
+++ b/openstackclient/tests/unit/image/v2/fakes.py
@@ -156,6 +156,7 @@ class FakeImagev2Client(object):
self.image_tags.resource_class = fakes.FakeResource(None, {})
self.auth_token = kwargs['token']
self.management_url = kwargs['endpoint']
+ self.version = 2.0
class TestImagev2(utils.TestCommand):
diff --git a/releasenotes/notes/bug-1717130-029211b60f74b4c4.yaml b/releasenotes/notes/bug-1717130-029211b60f74b4c4.yaml
new file mode 100644
index 00000000..5e069e81
--- /dev/null
+++ b/releasenotes/notes/bug-1717130-029211b60f74b4c4.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Fix the ``project purge`` command to correctly delete only images owned by the
+ specified project ID when run by an administrative user.
+ [Bug `1717130 <https://bugs.launchpad.net/python-openstackclient/+bug/1717130>`_]