You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2016/06/28 07:53:19 UTC

jclouds-labs git commit: ImageId can be image name or id and will pull from hub

Repository: jclouds-labs
Updated Branches:
  refs/heads/master cc8c8a9a2 -> 5722ec226


ImageId can be image name or id and will pull from hub


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/5722ec22
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/5722ec22
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/5722ec22

Branch: refs/heads/master
Commit: 5722ec226b4848412f48d7ab89cecbd76e084696
Parents: cc8c8a9
Author: Duncan Grant <du...@cloudsoftcorp.com>
Authored: Mon Jun 20 16:07:42 2016 +0100
Committer: Andrea Turli <an...@gmail.com>
Committed: Tue Jun 28 09:47:43 2016 +0200

----------------------------------------------------------------------
 .../strategy/DockerComputeServiceAdapter.java   | 28 +++++++++--
 .../DockerComputeServiceAdapterLiveTest.java    | 52 +++++++++++++++-----
 .../compute/DockerComputeServiceLiveTest.java   |  8 +--
 3 files changed, 64 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/5722ec22/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java b/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
index 3c88f31..9ce63e5 100644
--- a/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
+++ b/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
@@ -51,6 +51,7 @@ import org.jclouds.docker.domain.ContainerSummary;
 import org.jclouds.docker.domain.HostConfig;
 import org.jclouds.docker.domain.Image;
 import org.jclouds.docker.domain.ImageSummary;
+import org.jclouds.docker.options.CreateImageOptions;
 import org.jclouds.docker.options.ListContainerOptions;
 import org.jclouds.docker.options.RemoveContainerOptions;
 import org.jclouds.domain.Location;
@@ -237,13 +238,32 @@ public class DockerComputeServiceAdapter implements
    }
 
    @Override
-   public Image getImage(final String imageId) {
-      // less efficient than just inspectImage but listImages return repoTags
-      return find(listImages(), new Predicate<Image>() {
+   public Image getImage(final String imageIdOrName) {
+      checkNotNull(imageIdOrName);
+      if (imageIdOrName.startsWith("sha256")) {
+         // less efficient than just inspectImage but listImages return repoTags
+         return find(listImages(), new Predicate<Image>() {
+            @Override
+            public boolean apply(Image input) {
+               // Only attempt match on id as we should try to pull again anyway if using name
+               return input.id().equals(imageIdOrName);
+            }
+         }, null);
+      }
 
+      // Image is not cached or getting image by name so try to pull it
+      api.getImageApi().createImage(CreateImageOptions.Builder.fromImage(imageIdOrName));
+
+      // as above this ensure repotags are returned
+      return find(listImages(), new Predicate<Image>() {
          @Override
          public boolean apply(Image input) {
-            return input.id().equals(imageId);
+            for (String tag : input.repoTags()) {
+               if (tag.equals(imageIdOrName) || tag.equals(imageIdOrName + ":latest")) {
+                  return true;
+               }
+            }
+            return false;
          }
       }, null);
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/5722ec22/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java b/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
index 0221776..3480d88 100644
--- a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
+++ b/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
@@ -19,10 +19,18 @@ package org.jclouds.docker.compute;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
 
 import java.util.Properties;
 import java.util.Random;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
 import org.jclouds.compute.ComputeServiceAdapter.NodeAndInitialCredentials;
 import org.jclouds.compute.domain.Hardware;
 import org.jclouds.compute.domain.Template;
@@ -32,18 +40,11 @@ import org.jclouds.docker.compute.options.DockerTemplateOptions;
 import org.jclouds.docker.compute.strategy.DockerComputeServiceAdapter;
 import org.jclouds.docker.domain.Container;
 import org.jclouds.docker.domain.Image;
-import org.jclouds.docker.options.CreateImageOptions;
 import org.jclouds.sshj.config.SshjSshClientModule;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-
 @Test(groups = "live", singleThreaded = true, testName = "DockerComputeServiceAdapterLiveTest")
 public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
 
@@ -54,17 +55,13 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
    private DockerComputeServiceAdapter adapter;
    private TemplateBuilder templateBuilder;
    private NodeAndInitialCredentials<Container> guest;
+   private static final String CHUANWEN_COWSAY = "chuanwen/cowsay";
 
    @BeforeClass
    protected void init() {
       super.initialize();
       String imageName = SSHABLE_IMAGE + ":" + SSHABLE_IMAGE_TAG;
-      Image image = api.getImageApi().inspectImage(imageName);
-      if (image == null) {
-         CreateImageOptions options = CreateImageOptions.Builder.fromImage(SSHABLE_IMAGE).tag(SSHABLE_IMAGE_TAG);
-         api.getImageApi().createImage(options);
-      }
-      defaultImage = api.getImageApi().inspectImage(imageName);
+      defaultImage = adapter.getImage(imageName);
       assertNotNull(defaultImage);
    }
 
@@ -73,6 +70,9 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
       if (guest != null) {
          adapter.destroyNode(guest.getNode().id() + "");
       }
+      if (api.getImageApi().inspectImage(CHUANWEN_COWSAY) != null) {
+         api.getImageApi().deleteImage(CHUANWEN_COWSAY);
+      }
       super.tearDown();
    }
 
@@ -105,6 +105,32 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
       }
    }
 
+   public void testGetImageNotHiddenByCache() {
+
+      //Ensure image to be tested is unknown to jclouds and docker and that cache is warm
+      assertNull(findImageFromListImages(CHUANWEN_COWSAY));
+      assertNull(api.getImageApi().inspectImage(CHUANWEN_COWSAY));
+
+      // Get new image
+      adapter.getImage(CHUANWEN_COWSAY);
+
+      assertNotNull(findImageFromListImages(CHUANWEN_COWSAY), "New image is not available from listImages presumably due to caching");
+   }
+
+   private Image findImageFromListImages(final String image) {
+      return Iterables.find(adapter.listImages(), new Predicate<Image>() {
+        @Override
+        public boolean apply(Image input) {
+           for (String tag : input.repoTags()) {
+              if (tag.equals(image) || tag.equals(CHUANWEN_COWSAY + ":latest")) {
+                 return true;
+              }
+           }
+           return false;
+        }
+     }, null);
+   }
+
    @Override
    protected Iterable<Module> setupModules() {
       return ImmutableSet.<Module>of(getLoggingModule(), new SshjSshClientModule());

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/5722ec22/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceLiveTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceLiveTest.java b/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceLiveTest.java
index 1e024e4..d02e215 100644
--- a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceLiveTest.java
+++ b/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceLiveTest.java
@@ -100,13 +100,7 @@ public class DockerComputeServiceLiveTest extends BaseComputeServiceContextLiveT
       client = view.getComputeService();
 
       String imageName = SSHABLE_IMAGE + ":" + SSHABLE_IMAGE_TAG;
-      org.jclouds.docker.domain.Image image = imageApi().inspectImage(imageName);
-      if (image == null) {
-         CreateImageOptions options = CreateImageOptions.Builder.fromImage(SSHABLE_IMAGE).tag(SSHABLE_IMAGE_TAG);
-         imageApi().createImage(options);
-      }
-      image = imageApi().inspectImage(imageName);
-      defaultImage = client.getImage(image.id());
+      defaultImage = client.getImage(imageName);
       assertNotNull(defaultImage);
    }