Преглед изворни кода

Update image list interface to allow filtering by owner, as per #75

Enis Afgan пре 8 година
родитељ
комит
28757d81ad

+ 8 - 1
cloudbridge/cloud/interfaces/services.py

@@ -529,10 +529,17 @@ class ImageService(PageableObjectMixin, CloudService):
         pass
 
     @abstractmethod
-    def list(self, limit=None, marker=None):
+    def list(self, filter_by_owner=True, limit=None, marker=None):
         """
         List all images.
 
+        :type  filter_by_owner: ``bool``
+        :param filter_by_owner: If ``True``, return only images owned
+                                by the current user. Else, return all
+                                public images available from the provider.
+                                Note that fetching all images may take a
+                                long time.
+
         :rtype: ``list`` of :class:`.Image`
         :return:  list of image objects
         """

+ 2 - 4
cloudbridge/cloud/providers/aws/services.py

@@ -293,10 +293,8 @@ class AWSImageService(BaseImageService):
         return self.svc.find(filter_name='name', filter_value=name,
                              limit=limit, marker=marker)
 
-    def list(self, limit=None, marker=None):
-        # Filter images by current account owner; otherwise, the call is
-        # very slow
-        return self.svc.list(Owners=['self'],
+    def list(self, filter_by_owner=True, limit=None, marker=None):
+        return self.svc.list(Owners=['self'] if filter_by_owner else [],
                              limit=limit, marker=marker)
 
 

+ 9 - 1
cloudbridge/cloud/providers/openstack/services.py

@@ -250,11 +250,19 @@ class OpenStackImageService(BaseImageService):
 
         return oshelpers.to_server_paged_list(self.provider, cb_images, limit)
 
-    def list(self, limit=None, marker=None):
+    def list(self, filter_by_owner=True, limit=None, marker=None):
         """
         List all images.
         """
+        project_id = None
+        if filter_by_owner:
+            try:
+                project_id = self.provider.keystone.projects.list(
+                    name=self.provider.project_name)[0].id
+            except IndexError:
+                pass
         os_images = self.provider.os_conn.image.images(
+            owner=project_id,
             limit=oshelpers.os_result_limit(self.provider, limit),
             marker=marker)