summaryrefslogtreecommitdiffstats
path: root/docker-api
diff options
context:
space:
mode:
authorMorten Tokle <mortent@verizonmedia.com>2020-10-30 11:32:32 +0100
committerMorten Tokle <mortent@verizonmedia.com>2020-10-30 11:59:54 +0100
commit99120cb683089ec0b7f8e90eb604881e3855b8c5 (patch)
tree9100ffcade0424c435407ed959924f511e01a74f /docker-api
parent55d3dbb705a58a66901fb384fce83fdf55f2e51e (diff)
Create auth command directly
Diffstat (limited to 'docker-api')
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java36
-rw-r--r--docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerEngineTest.java4
2 files changed, 29 insertions, 11 deletions
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java
index bbd622a0d2a..81074c5ea37 100644
--- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java
+++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.dockerapi;
import com.github.dockerjava.api.DockerClient;
+import com.github.dockerjava.api.command.DockerCmdExecFactory;
import com.github.dockerjava.api.command.ExecCreateCmdResponse;
import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.command.InspectExecResponse;
@@ -18,6 +19,7 @@ import com.github.dockerjava.core.DefaultDockerClientConfig;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.DockerClientImpl;
import com.github.dockerjava.core.async.ResultCallbackTemplate;
+import com.github.dockerjava.core.command.AuthCmdImpl;
import com.github.dockerjava.core.command.ExecStartResultCallback;
import com.github.dockerjava.core.command.PullImageResultCallback;
import com.github.dockerjava.jaxrs.JerseyDockerCmdExecFactory;
@@ -61,6 +63,7 @@ public class DockerEngine implements ContainerEngine {
private final Set<DockerImage> scheduledPulls = new HashSet<>();
private final DockerClient dockerClient;
+ private final DockerCmdExecFactory dockerFactory;
private final DockerImageGarbageCollector dockerImageGC;
private final Metrics metrics;
private final Counter numberOfDockerApiFails;
@@ -71,8 +74,9 @@ public class DockerEngine implements ContainerEngine {
this(createDockerClient(), metrics, Clock.systemUTC());
}
- DockerEngine(DockerClient dockerClient, Metrics metrics, Clock clock) {
- this.dockerClient = dockerClient;
+ DockerEngine(DockerClientWithExecFactory clientWithExecFactory, Metrics metrics, Clock clock) {
+ this.dockerClient = clientWithExecFactory.dockerClient;
+ this.dockerFactory = clientWithExecFactory.dockerCmdExecFactory;
this.dockerImageGC = new DockerImageGarbageCollector(this);
this.metrics = metrics;
this.clock = clock;
@@ -92,11 +96,12 @@ public class DockerEngine implements ContainerEngine {
logger.log(Level.INFO, "Starting download of " + image.asString());
if (!registryCredentials.equals(RegistryCredentials.none)) {
AuthConfig authConfig = new AuthConfig().withUsername(registryCredentials.username())
- .withPassword(registryCredentials.password())
- .withRegistryAddress(registryCredentials.registryAddress());
- dockerClient.authCmd()
- .withAuthConfig(authConfig)
- .exec();
+ .withPassword(registryCredentials.password())
+ .withRegistryAddress(registryCredentials.registryAddress());
+
+ // Need to create AuthCmdImpl directly since DockerClient.authCmd() will throw
+ // exception when username/registry url is not set
+ new AuthCmdImpl(this.dockerFactory.createAuthCmdExec(), authConfig).exec();
}
dockerClient.pullImageCmd(image.asString()).exec(new ImagePullCallback(image));
return true;
@@ -414,7 +419,7 @@ public class DockerEngine implements ContainerEngine {
}
}
- private static DockerClient createDockerClient() {
+ private static DockerClientWithExecFactory createDockerClient() {
JerseyDockerCmdExecFactory dockerFactory = new JerseyDockerCmdExecFactory()
.withMaxPerRouteConnections(10)
.withMaxTotalConnections(100)
@@ -425,7 +430,18 @@ public class DockerEngine implements ContainerEngine {
.withDockerHost("unix:///var/run/docker.sock")
.build();
- return DockerClientImpl.getInstance(dockerClientConfig)
- .withDockerCmdExecFactory(dockerFactory);
+ return new DockerClientWithExecFactory(
+ DockerClientImpl.getInstance(dockerClientConfig).withDockerCmdExecFactory(dockerFactory),
+ dockerFactory);
+ }
+
+ static class DockerClientWithExecFactory {
+ private final DockerClient dockerClient;
+ private final DockerCmdExecFactory dockerCmdExecFactory;
+
+ public DockerClientWithExecFactory(DockerClient dockerClient, DockerCmdExecFactory dockerCmdExecFactory) {
+ this.dockerClient = dockerClient;
+ this.dockerCmdExecFactory = dockerCmdExecFactory;
+ }
}
}
diff --git a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerEngineTest.java b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerEngineTest.java
index 71bdb321305..66bcf89090b 100644
--- a/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerEngineTest.java
+++ b/docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerEngineTest.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.dockerapi;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.async.ResultCallback;
+import com.github.dockerjava.api.command.DockerCmdExecFactory;
import com.github.dockerjava.api.command.ExecCreateCmd;
import com.github.dockerjava.api.command.ExecCreateCmdResponse;
import com.github.dockerjava.api.command.ExecStartCmd;
@@ -42,7 +43,8 @@ public class DockerEngineTest {
private final DockerClient dockerClient = mock(DockerClient.class);
private final Metrics metrics = new Metrics();
private final ManualClock clock = new ManualClock();
- private final DockerEngine docker = new DockerEngine(dockerClient, metrics, clock);
+ private final DockerEngine docker = new DockerEngine(
+ new DockerEngine.DockerClientWithExecFactory(dockerClient, mock(DockerCmdExecFactory.class)), metrics, clock);
@Test
public void testExecuteCompletes() {