Repository: jclouds-labs Updated Branches: refs/heads/1.9.x 73920578b -> aa37c7f3b
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/aa37c7f3 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/aa37c7f3 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/aa37c7f3 Branch: refs/heads/1.9.x Commit: aa37c7f3b946fb57b6285fc14411d73eb6aabcaa Parents: 7392057 Author: Duncan Grant <[email protected]> Authored: Mon Jun 20 16:07:42 2016 +0100 Committer: Andrea Turli <[email protected]> Committed: Thu Jun 30 13:30:12 2016 +0200 ---------------------------------------------------------------------- .../strategy/DockerComputeServiceAdapter.java | 28 +++++++++-- .../DockerComputeServiceAdapterLiveTest.java | 53 +++++++++++++++----- .../compute/DockerComputeServiceLiveTest.java | 8 +-- 3 files changed, 65 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/aa37c7f3/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 a1c9cae..935e47e 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; @@ -233,13 +234,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/aa37c7f3/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 9aae9bf..7db6ea2 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,19 @@ 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 org.jclouds.compute.ComputeService; +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,19 +41,12 @@ 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.docker.options.DeleteImageOptions; import org.jclouds.sshj.config.SshjSshClientModule; import org.testng.annotations.AfterGroups; 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 { @@ -56,17 +58,13 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest { private TemplateBuilder templateBuilder; private ComputeService computeService; 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); } @@ -108,9 +106,38 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest { if (defaultImage != null) { api.getImageApi().deleteImage(defaultImage.id(), DeleteImageOptions.Builder.force(true)); } + if (api.getImageApi().inspectImage(CHUANWEN_COWSAY) != null) { + api.getImageApi().deleteImage(CHUANWEN_COWSAY); + } super.tearDown(); } + 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/aa37c7f3/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); }
