Repository: libcloud
Updated Branches:
  refs/heads/trunk 1ba38fac9 -> 7013b6a19


[google compute] allow bypassing image search in standard project list

Support not using standard projects on images get and support families from 
copy image.

Signed-off-by: Eric Johnson <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/7013b6a1
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/7013b6a1
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/7013b6a1

Branch: refs/heads/trunk
Commit: 7013b6a190c0017ab13e0cea95a36eaeceb2abb2
Parents: 1ba38fa
Author: Max Illfelder <[email protected]>
Authored: Tue Feb 23 11:24:32 2016 -0800
Committer: Eric Johnson <[email protected]>
Committed: Wed Feb 24 15:46:32 2016 +0000

----------------------------------------------------------------------
 CHANGES.rst                       |  4 ++++
 libcloud/compute/drivers/gce.py   | 25 +++++++++++++++++++------
 libcloud/test/compute/test_gce.py | 10 +++++++++-
 3 files changed, 32 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/7013b6a1/CHANGES.rst
----------------------------------------------------------------------
diff --git a/CHANGES.rst b/CHANGES.rst
index 4fb634a..889e09e 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -31,6 +31,10 @@ General
 Compute
 ~~~~~~~
 
+- [google compute] allow bypassing image search in standard project list
+  (GITHUB-713)
+  [Max Illfelder]
+
 - Add support for requesting a MKS token for accessing the remote console in 
VMware
   vCloud driver
   (GITHUB-706)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/7013b6a1/libcloud/compute/drivers/gce.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/gce.py b/libcloud/compute/drivers/gce.py
index c3fcf6b..7b4960d 100644
--- a/libcloud/compute/drivers/gce.py
+++ b/libcloud/compute/drivers/gce.py
@@ -4060,7 +4060,8 @@ class GCENodeDriver(NodeDriver):
         response = self.connection.request(request, method='GET').object
         return self._to_forwarding_rule(response)
 
-    def ex_get_image(self, partial_name, ex_project_list=None):
+    def ex_get_image(self, partial_name, ex_project_list=None,
+                     ex_standard_projects=True):
         """
         Return an GCENodeImage object based on the name or link provided.
 
@@ -4068,6 +4069,14 @@ class GCENodeDriver(NodeDriver):
                               image.
         :type   partial_name: ``str``
 
+        :param  ex_project_list: The name of the project to list for images.
+                                 Examples include: 'debian-cloud'.
+        :type   ex_project_List: ``str``, ``list`` of ``str``, or ``None``
+
+        :param  ex_standard_projects: If true, check in standard projects if
+                                      the image is not found.
+        :type   ex_standard_projects: ``bool``
+
         :return:  GCENodeImage object based on provided information or None if
                   an image with that name is not found.
         :rtype:   :class:`GCENodeImage` or raise ``ResourceNotFoundError``
@@ -4076,7 +4085,7 @@ class GCENodeDriver(NodeDriver):
             response = self.connection.request(partial_name, method='GET')
             return self._to_node_image(response.object)
         image = self._match_images(ex_project_list, partial_name)
-        if not image:
+        if not image and ex_standard_projects:
             for img_proj, short_list in self.IMAGE_PROJECTS.items():
                 for short_name in short_list:
                     if partial_name.startswith(short_name):
@@ -4319,7 +4328,7 @@ class GCENodeDriver(NodeDriver):
             return None
         return self._to_zone(response)
 
-    def ex_copy_image(self, name, url, description=None):
+    def ex_copy_image(self, name, url, description=None, family=None):
         """
         Copy an image to your image collection.
 
@@ -4332,6 +4341,9 @@ class GCENodeDriver(NodeDriver):
         :param  description: The description of the image
         :type   description: ``str``
 
+        :param  family: The family of the image
+        :type   family: ``str``
+
         :return:  NodeImage object based on provided information or None if an
                   image with that name is not found.
         :rtype:   :class:`NodeImage` or ``None``
@@ -4344,6 +4356,7 @@ class GCENodeDriver(NodeDriver):
         image_data = {
             'name': name,
             'description': description,
+            'family': family,
             'sourceType': 'RAW',
             'rawDisk': {
                 'source': url,
@@ -4490,9 +4503,9 @@ class GCENodeDriver(NodeDriver):
         supplied project.  If no project is given, it will search your own
         project.
 
-        :param  project:  The name of the project to search for images.
-                          Examples include: 'debian-cloud' and 'centos-cloud'.
-        :type   project:  ``str`` or ``None``
+        :param  project: The name of the project to search for images.
+                         Examples include: 'debian-cloud' and 'centos-cloud'.
+        :type   project: ``str``, ``list`` of ``str``, or ``None``
 
         :param  partial_name: The full name or beginning of a name for an
                               image.

http://git-wip-us.apache.org/repos/asf/libcloud/blob/7013b6a1/libcloud/test/compute/test_gce.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_gce.py 
b/libcloud/test/compute/test_gce.py
index 15247e3..ef6a158 100644
--- a/libcloud/test/compute/test_gce.py
+++ b/libcloud/test/compute/test_gce.py
@@ -1139,13 +1139,21 @@ class GCENodeDriverTest(GoogleTestCase, TestCaseMixin):
         image = self.driver.ex_get_image(partial_name, ['debian-cloud'])
         self.assertEqual(image.name, 'debian-7-wheezy-v20131120')
 
+        partial_name = 'debian-7'
+        self.assertRaises(ResourceNotFoundError, self.driver.ex_get_image,
+                          partial_name, 'suse-cloud',
+                          ex_standard_projects=False)
+
     def test_ex_copy_image(self):
         name = 'coreos'
         url = 
'gs://storage.core-os.net/coreos/amd64-generic/247.0.0/coreos_production_gce.tar.gz'
         description = 'CoreOS beta 522.3.0'
-        image = self.driver.ex_copy_image(name, url, description)
+        family = 'coreos'
+        image = self.driver.ex_copy_image(name, url, description=description,
+                                          family=family)
         self.assertTrue(image.name.startswith(name))
         self.assertEqual(image.extra['description'], description)
+        self.assertEqual(image.extra['family'], family)
 
     def test_ex_get_route(self):
         route_name = 'lcdemoroute'

Reply via email to