diff options
author | Morten Tokle <mortent@verizonmedia.com> | 2020-10-30 11:32:32 +0100 |
---|---|---|
committer | Morten Tokle <mortent@verizonmedia.com> | 2020-10-30 11:59:54 +0100 |
commit | 99120cb683089ec0b7f8e90eb604881e3855b8c5 (patch) | |
tree | 9100ffcade0424c435407ed959924f511e01a74f /docker-api/src | |
parent | 55d3dbb705a58a66901fb384fce83fdf55f2e51e (diff) |
Create auth command directly
Diffstat (limited to 'docker-api/src')
-rw-r--r-- | docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerEngine.java | 36 | ||||
-rw-r--r-- | docker-api/src/test/java/com/yahoo/vespa/hosted/dockerapi/DockerEngineTest.java | 4 |
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() { |