aboutsummaryrefslogtreecommitdiffstats
path: root/docker-api
diff options
context:
space:
mode:
authorHarald Musum <musum@yahoo-inc.com>2016-09-14 20:27:21 +0200
committerHarald Musum <musum@yahoo-inc.com>2016-09-14 20:27:21 +0200
commit0e832eeeee309c730ba1903a5d81e7afd5b575f3 (patch)
tree72aa9d4a877ddae32a6cbbb029e43239888b3802 /docker-api
parent13b85c3554248a17ac3f54f5a8ed87f09c42cc26 (diff)
Add module with tool for pulling docker image
* Pulling Docker image does not work, due to conflicting versions of Jackson that we are not able to resolve. Therefore, use a tool for pulling image that is using its own jar
Diffstat (limited to 'docker-api')
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java31
1 files changed, 30 insertions, 1 deletions
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java
index 9a8be640ae6..0312fd65bfc 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java
@@ -16,11 +16,15 @@ import com.github.dockerjava.core.command.ExecStartResultCallback;
import com.github.dockerjava.core.command.PullImageResultCallback;
import com.github.dockerjava.jaxrs.JerseyDockerCmdExecFactory;
import com.google.inject.Inject;
+import com.yahoo.collections.Pair;
import com.yahoo.log.LogLevel;
+import com.yahoo.system.ProcessExecuter;
import com.yahoo.vespa.applicationmodel.HostName;
+import com.yahoo.vespa.defaults.Defaults;
import javax.annotation.concurrent.GuardedBy;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.net.URI;
import java.util.Arrays;
import java.util.Collections;
@@ -120,10 +124,35 @@ public class DockerImpl implements Docker {
completionListener = new CompletableFuture<>();
scheduledPulls.put(image, completionListener);
}
- dockerClient.pullImageCmd(image.asString()).exec(new ImagePullCallback(image));
+ //dockerClient.pullImageCmd(image.asString()).exec(new ImagePullCallback(image));
+ // TODO: Need to call out to a command-line tool due to conflicting jackson dependencies between
+ // docker-java and pre-installed bundles in jdisc container
+ pullImageWithCommandTool(image, new ImagePullCallback(image), completionListener);
return completionListener;
}
+ private void pullImageWithCommandTool(DockerImage image, ImagePullCallback callback, CompletableFuture<DockerImage> completionListener) {
+ String jarFile = Defaults.getDefaults().vespaHome() + "lib/jars/docker-tools-jar-with-dependencies.jar";
+ Pair<Integer, String> result = null;
+ try {
+ result = new ProcessExecuter().exec(String.format(
+ "java -cp %s com.yahoo.vespa.hosted.dockerapi.tool.PullImageCommand pull-image %s",
+ jarFile,
+ image.asString()));
+ } catch (IOException e) {
+ logger.log(LogLevel.ERROR, "Failed pulling image " + image.asString(), e);
+ callback.onError(e);
+ }
+ if (result != null && result.getFirst() != 0) {
+ logger.log(LogLevel.WARNING, "Failed pulling image " + image.asString() +
+ ", exit code " + result.getFirst() + ", output: " + result.getSecond());
+ } else {
+ logger.log(LogLevel.INFO, "Successfully pulled image " + image.asString());
+ }
+ callback.onComplete();
+ completionListener.complete(image);
+ }
+
private CompletableFuture<DockerImage> removeScheduledPoll(final DockerImage image) {
synchronized (monitor) {
return scheduledPulls.remove(image);