From 76be3979069c9719b23744f46cc77533eaa96ce4 Mon Sep 17 00:00:00 2001 From: xuchenCN Date: Thu, 6 Jul 2017 12:31:44 +0800 Subject: [PATCH 1/4] Resize container and exec --- .../github/dockerjava/api/DockerClient.java | 6 ++ .../api/command/DockerCmdExecFactory.java | 4 ++ .../api/command/ResizeContainerCmd.java | 32 ++++++++++ .../dockerjava/api/command/ResizeExecCmd.java | 32 ++++++++++ .../dockerjava/core/DockerClientImpl.java | 14 +++++ .../core/command/ResizeContainerCmdImpl.java | 61 +++++++++++++++++++ .../core/command/ResizeExecCmdImpl.java | 61 +++++++++++++++++++ .../jaxrs/JerseyDockerCmdExecFactory.java | 12 ++++ .../jaxrs/ResizeContainerCmdExec.java | 30 +++++++++ .../dockerjava/jaxrs/ResizeExecCmdExec.java | 30 +++++++++ .../netty/NettyDockerCmdExecFactory.java | 5 +- .../netty/exec/ResizeContainerCmdExec.java | 29 +++++++++ .../netty/exec/ResizeExecCmdExec.java | 29 +++++++++ .../github/dockerjava/cmd/ResizeCmdIT.java | 54 ++++++++++++++++ .../core/TestDockerCmdExecFactory.java | 12 ++++ 15 files changed, 410 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/github/dockerjava/api/command/ResizeContainerCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/command/ResizeExecCmd.java create mode 100644 src/main/java/com/github/dockerjava/core/command/ResizeContainerCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/core/command/ResizeExecCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/ResizeContainerCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/ResizeExecCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/ResizeContainerCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/ResizeExecCmdExec.java create mode 100644 src/test/java/com/github/dockerjava/cmd/ResizeCmdIT.java diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index 5c8dce226..47b8b50c2 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -54,6 +54,8 @@ import com.github.dockerjava.api.command.RemoveServiceCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RenameContainerCmd; +import com.github.dockerjava.api.command.ResizeContainerCmd; +import com.github.dockerjava.api.command.ResizeExecCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; import com.github.dockerjava.api.command.SearchImagesCmd; @@ -157,6 +159,8 @@ public interface DockerClient extends Closeable { */ StartContainerCmd startContainerCmd(@Nonnull String containerId); + ResizeContainerCmd resizeContainerCmd(@Nonnull String containerId); + ExecCreateCmd execCreateCmd(@Nonnull String containerId); InspectContainerCmd inspectContainerCmd(@Nonnull String containerId); @@ -169,6 +173,8 @@ public interface DockerClient extends Closeable { ExecStartCmd execStartCmd(@Nonnull String execId); + ResizeExecCmd resizeExecCmd(@Nonnull String execId); + InspectExecCmd inspectExecCmd(@Nonnull String execId); LogContainerCmd logContainerCmd(@Nonnull String containerId); diff --git a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java index 1945ddd5b..2db103644 100644 --- a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java @@ -52,8 +52,12 @@ public interface DockerCmdExecFactory extends Closeable { AttachContainerCmd.Exec createAttachContainerCmdExec(); + ResizeContainerCmd.Exec createResizeContainerCmdExec(); + ExecStartCmd.Exec createExecStartCmdExec(); + ResizeExecCmd.Exec createResizeExecCmdExec(); + InspectExecCmd.Exec createInspectExecCmdExec(); LogContainerCmd.Exec createLogContainerCmdExec(); diff --git a/src/main/java/com/github/dockerjava/api/command/ResizeContainerCmd.java b/src/main/java/com/github/dockerjava/api/command/ResizeContainerCmd.java new file mode 100644 index 000000000..38780b9b2 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/ResizeContainerCmd.java @@ -0,0 +1,32 @@ +package com.github.dockerjava.api.command; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +import com.github.dockerjava.api.exception.NotFoundException; + +public interface ResizeContainerCmd extends SyncDockerCmd { + + @CheckForNull + String getContainerId(); + + Integer getHeight(); + + Integer getWidth(); + + ResizeContainerCmd withContainerId(@Nonnull String execId); + + ResizeContainerCmd withSize(int height, int width); + + /** + * + * @throws NotFoundException + * No such container instance + */ + @Override + Void exec() throws NotFoundException; + + interface Exec extends DockerCmdSyncExec { + } + +} diff --git a/src/main/java/com/github/dockerjava/api/command/ResizeExecCmd.java b/src/main/java/com/github/dockerjava/api/command/ResizeExecCmd.java new file mode 100644 index 000000000..664f2b343 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/ResizeExecCmd.java @@ -0,0 +1,32 @@ +package com.github.dockerjava.api.command; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +import com.github.dockerjava.api.exception.NotFoundException; + +public interface ResizeExecCmd extends SyncDockerCmd { + + @CheckForNull + String getExecId(); + + Integer getHeight(); + + Integer getWidth(); + + ResizeExecCmd withExecId(@Nonnull String execId); + + ResizeExecCmd withSize(int height, int width); + + /** + * + * @throws NotFoundException + * No such exec instance + */ + @Override + Void exec() throws NotFoundException; + + interface Exec extends DockerCmdSyncExec { + } + +} diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index 87ba0214e..8f0275b4c 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -56,6 +56,8 @@ import com.github.dockerjava.api.command.RemoveServiceCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RenameContainerCmd; +import com.github.dockerjava.api.command.ResizeContainerCmd; +import com.github.dockerjava.api.command.ResizeExecCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; import com.github.dockerjava.api.command.SearchImagesCmd; @@ -131,6 +133,8 @@ import com.github.dockerjava.core.command.RemoveServiceCmdImpl; import com.github.dockerjava.core.command.RemoveVolumeCmdImpl; import com.github.dockerjava.core.command.RenameContainerCmdImpl; +import com.github.dockerjava.core.command.ResizeContainerCmdImpl; +import com.github.dockerjava.core.command.ResizeExecCmdImpl; import com.github.dockerjava.core.command.RestartContainerCmdImpl; import com.github.dockerjava.core.command.SaveImageCmdImpl; import com.github.dockerjava.core.command.SearchImagesCmdImpl; @@ -356,11 +360,21 @@ public AttachContainerCmd attachContainerCmd(String containerId) { return new AttachContainerCmdImpl(getDockerCmdExecFactory().createAttachContainerCmdExec(), containerId); } + @Override + public ResizeContainerCmd resizeContainerCmd(String containerId) { + return new ResizeContainerCmdImpl(getDockerCmdExecFactory().createResizeContainerCmdExec(), containerId); + } + @Override public ExecStartCmd execStartCmd(String execId) { return new ExecStartCmdImpl(getDockerCmdExecFactory().createExecStartCmdExec(), execId); } + @Override + public ResizeExecCmd resizeExecCmd(String execId) { + return new ResizeExecCmdImpl(getDockerCmdExecFactory().createResizeExecCmdExec(), execId); + } + @Override public InspectExecCmd inspectExecCmd(String execId) { return new InspectExecCmdImpl(getDockerCmdExecFactory().createInspectExecCmdExec(), execId); diff --git a/src/main/java/com/github/dockerjava/core/command/ResizeContainerCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ResizeContainerCmdImpl.java new file mode 100644 index 000000000..67aedbacc --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/ResizeContainerCmdImpl.java @@ -0,0 +1,61 @@ +package com.github.dockerjava.core.command; + +import static com.google.common.base.Preconditions.checkNotNull; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.github.dockerjava.api.command.ResizeContainerCmd; +import com.github.dockerjava.api.exception.NotFoundException; + +@JsonInclude(Include.NON_NULL) +public class ResizeContainerCmdImpl extends AbstrDockerCmd implements ResizeContainerCmd { + + private String containerId; + + private Integer height; + + private Integer width; + + public ResizeContainerCmdImpl(ResizeContainerCmd.Exec exec, String execId) { + super(exec); + withContainerId(execId); + } + + @Override + public String getContainerId() { + return containerId; + } + + @Override + public Integer getHeight() { + return height; + } + + @Override + public Integer getWidth() { + return width; + } + + @Override + public ResizeContainerCmd withContainerId(String containerId) { + checkNotNull(containerId, "containerId was not specified"); + this.containerId = containerId; + return this; + } + + @Override + public ResizeContainerCmd withSize(int height, int width) { + this.height = height; + this.width = width; + return this; + } + + /** + * @throws NotFoundException + * No such exec instance + */ + @Override + public Void exec() throws NotFoundException { + return super.exec(); + } +} diff --git a/src/main/java/com/github/dockerjava/core/command/ResizeExecCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ResizeExecCmdImpl.java new file mode 100644 index 000000000..807a20b1e --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/ResizeExecCmdImpl.java @@ -0,0 +1,61 @@ +package com.github.dockerjava.core.command; + +import static com.google.common.base.Preconditions.checkNotNull; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.github.dockerjava.api.command.ResizeExecCmd; +import com.github.dockerjava.api.exception.NotFoundException; + +@JsonInclude(Include.NON_NULL) +public class ResizeExecCmdImpl extends AbstrDockerCmd implements ResizeExecCmd { + + private String execId; + + private Integer height; + + private Integer width; + + public ResizeExecCmdImpl(ResizeExecCmd.Exec exec, String execId) { + super(exec); + withExecId(execId); + } + + @Override + public String getExecId() { + return execId; + } + + @Override + public Integer getHeight() { + return height; + } + + @Override + public Integer getWidth() { + return width; + } + + @Override + public ResizeExecCmd withExecId(String execId) { + checkNotNull(execId, "execId was not specified"); + this.execId = execId; + return this; + } + + @Override + public ResizeExecCmd withSize(int height, int width) { + this.height = height; + this.width = width; + return this; + } + + /** + * @throws NotFoundException + * No such exec instance + */ + @Override + public Void exec() throws NotFoundException { + return super.exec(); + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/JerseyDockerCmdExecFactory.java b/src/main/java/com/github/dockerjava/jaxrs/JerseyDockerCmdExecFactory.java index 96a747504..ceb2b4ef9 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/JerseyDockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/jaxrs/JerseyDockerCmdExecFactory.java @@ -60,6 +60,8 @@ import com.github.dockerjava.api.command.RemoveSwarmNodeCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RenameContainerCmd; +import com.github.dockerjava.api.command.ResizeContainerCmd.Exec; +import com.github.dockerjava.api.command.ResizeExecCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; import com.github.dockerjava.api.command.SearchImagesCmd; @@ -424,11 +426,21 @@ public AttachContainerCmd.Exec createAttachContainerCmdExec() { return new AttachContainerCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public Exec createResizeContainerCmdExec() { + return new ResizeContainerCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public ExecStartCmd.Exec createExecStartCmdExec() { return new ExecStartCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public ResizeExecCmd.Exec createResizeExecCmdExec() { + return new ResizeExecCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public InspectExecCmd.Exec createInspectExecCmdExec() { return new InspectExecCmdExec(getBaseResource(), getDockerClientConfig()); diff --git a/src/main/java/com/github/dockerjava/jaxrs/ResizeContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ResizeContainerCmdExec.java new file mode 100644 index 000000000..ccd37511c --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/ResizeContainerCmdExec.java @@ -0,0 +1,30 @@ +package com.github.dockerjava.jaxrs; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.github.dockerjava.api.command.ResizeContainerCmd; +import com.github.dockerjava.core.DockerClientConfig; + +public class ResizeContainerCmdExec extends AbstrSyncDockerCmdExec implements ResizeContainerCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ResizeContainerCmdExec.class); + + public ResizeContainerCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(ResizeContainerCmd command) { + WebTarget webResource = getBaseResource().path("/containers/{id}/resize").resolveTemplate("id", command.getContainerId()) + .queryParam("h", command.getHeight()).queryParam("w", command.getWidth()); + + LOGGER.trace("POST: {}", webResource); + webResource.request().accept(MediaType.APPLICATION_JSON).post(null).close(); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/ResizeExecCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ResizeExecCmdExec.java new file mode 100644 index 000000000..0b94cd003 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/ResizeExecCmdExec.java @@ -0,0 +1,30 @@ +package com.github.dockerjava.jaxrs; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.github.dockerjava.api.command.ResizeExecCmd; +import com.github.dockerjava.core.DockerClientConfig; + +public class ResizeExecCmdExec extends AbstrSyncDockerCmdExec implements ResizeExecCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ResizeExecCmdExec.class); + + public ResizeExecCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(ResizeExecCmd command) { + WebTarget webResource = getBaseResource().path("/exec/{id}/resize").resolveTemplate("id", command.getExecId()) + .queryParam("h", command.getHeight()).queryParam("w", command.getWidth()); + + LOGGER.trace("POST: {}", webResource); + webResource.request().accept(MediaType.APPLICATION_JSON).post(null).close(); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java b/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java index ecb40fa95..77dfdd93b 100644 --- a/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java @@ -17,6 +17,10 @@ import com.github.dockerjava.core.WebTarget; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; +import com.github.dockerjava.api.command.ResizeContainerCmd; +import com.github.dockerjava.api.command.ResizeExecCmd; +import com.github.dockerjava.netty.exec.ResizeContainerCmdExec; +import com.github.dockerjava.netty.exec.ResizeExecCmdExec; import org.apache.commons.lang.SystemUtils; import com.github.dockerjava.api.command.DockerCmdExecFactory; @@ -118,7 +122,6 @@ public void init(DockerClientConfig dockerClientConfig) { baseResource = new NettyWebTarget(channelProvider, host).path(dockerClientConfig.getApiVersion().asWebPathPart()); } - private DuplexChannel connect() { try { return connect(bootstrap); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ResizeContainerCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ResizeContainerCmdExec.java new file mode 100644 index 000000000..5612488da --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/ResizeContainerCmdExec.java @@ -0,0 +1,29 @@ +package com.github.dockerjava.netty.exec; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.github.dockerjava.api.command.ResizeContainerCmd; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; + +public class ResizeContainerCmdExec extends AbstrSyncDockerCmdExec implements ResizeContainerCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ResizeContainerCmdExec.class); + + public ResizeContainerCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(ResizeContainerCmd command) { + WebTarget webResource = getBaseResource().path("/containers/{id}/resize").resolveTemplate("id", command.getContainerId()) + .queryParam("h", command.getHeight()).queryParam("w", command.getWidth()); + + LOGGER.trace("POST: {}", webResource); + webResource.request().accept(MediaType.APPLICATION_JSON).post(command); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/netty/exec/ResizeExecCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ResizeExecCmdExec.java new file mode 100644 index 000000000..33fcce06c --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/ResizeExecCmdExec.java @@ -0,0 +1,29 @@ +package com.github.dockerjava.netty.exec; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.github.dockerjava.api.command.ResizeExecCmd; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; + +public class ResizeExecCmdExec extends AbstrSyncDockerCmdExec implements ResizeExecCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ResizeExecCmdExec.class); + + public ResizeExecCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(ResizeExecCmd command) { + WebTarget webResource = getBaseResource().path("/exec/{id}/resize").resolveTemplate("id", command.getExecId()) + .queryParam("h", command.getHeight()).queryParam("w", command.getWidth()); + + LOGGER.trace("POST: {}", webResource); + webResource.request().accept(MediaType.APPLICATION_JSON).post(command); + + return null; + } +} diff --git a/src/test/java/com/github/dockerjava/cmd/ResizeCmdIT.java b/src/test/java/com/github/dockerjava/cmd/ResizeCmdIT.java new file mode 100644 index 000000000..e79134880 --- /dev/null +++ b/src/test/java/com/github/dockerjava/cmd/ResizeCmdIT.java @@ -0,0 +1,54 @@ +package com.github.dockerjava.cmd; + +import static com.github.dockerjava.junit.DockerAssume.assumeNotSwarm; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.isEmptyString; +import static org.hamcrest.Matchers.not; + +import java.security.SecureRandom; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.ExecCreateCmdResponse; +import com.github.dockerjava.core.command.ExecStartResultCallback; + +public class ResizeCmdIT extends CmdIT { + private static final Logger LOG = LoggerFactory.getLogger(ResizeCmdIT.class); + + @Test + public void execResize() throws Exception { + assumeNotSwarm("no network in swarm", dockerRule); + + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerRule.getClient().createContainerCmd("busybox").withCmd("sh") + .withName(containerName).withTty(true).withStdinOpen(true).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerRule.getClient().startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse execCreateCmdResponse = dockerRule.getClient().execCreateCmd(container.getId()) + .withAttachStdout(true).withTty(true).withCmd("/bin/sh").exec(); + dockerRule.getClient().execStartCmd(execCreateCmdResponse.getId()).exec( + new ExecStartResultCallback(System.out, System.err)).awaitCompletion(); + dockerRule.getClient().resizeExecCmd(execCreateCmdResponse.getId()).withSize(1024, 1024); + } + + @Test + public void containerResize() throws Exception { + assumeNotSwarm("no network in swarm", dockerRule); + + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerRule.getClient().createContainerCmd("busybox").withCmd("sh") + .withName(containerName).withTty(true).withStdinOpen(true).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + dockerRule.getClient().startContainerCmd(container.getId()).exec(); + dockerRule.getClient().resizeContainerCmd(container.getId()).withSize(1024, 1024).exec(); + } +} diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index eaddb0978..d4c6aaf9c 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -62,6 +62,8 @@ import com.github.dockerjava.api.command.RemoveSwarmNodeCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RenameContainerCmd; +import com.github.dockerjava.api.command.ResizeContainerCmd; +import com.github.dockerjava.api.command.ResizeExecCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; import com.github.dockerjava.api.command.SearchImagesCmd; @@ -273,11 +275,21 @@ public AttachContainerCmd.Exec createAttachContainerCmdExec() { return delegate.createAttachContainerCmdExec(); } + @Override + public ResizeContainerCmd.Exec createResizeContainerCmdExec() { + return delegate.createResizeContainerCmdExec(); + } + @Override public ExecStartCmd.Exec createExecStartCmdExec() { return delegate.createExecStartCmdExec(); } + @Override + public ResizeExecCmd.Exec createResizeExecCmdExec() { + return delegate.createResizeExecCmdExec(); + } + @Override public InspectExecCmd.Exec createInspectExecCmdExec() { return delegate.createInspectExecCmdExec(); From c7f3d02362026e6cd2fac02c1fdfeadd4f0be96e Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Thu, 27 Sep 2018 04:29:52 +0300 Subject: [PATCH 2/4] Fixup --- .../core/AbstractDockerCmdExecFactory.java | 14 ++++++++++++++ .../dockerjava/core/exec/CommitCmdExec.java | 9 ++++++--- .../dockerjava/core/exec/ExecCreateCmdExec.java | 3 +-- .../exec/ResizeContainerCmdExec.java | 17 +++++++++-------- .../{netty => core}/exec/ResizeExecCmdExec.java | 12 +++++++----- .../netty/NettyDockerCmdExecFactory.java | 4 ---- 6 files changed, 37 insertions(+), 22 deletions(-) rename src/main/java/com/github/dockerjava/{netty => core}/exec/ResizeContainerCmdExec.java (72%) rename src/main/java/com/github/dockerjava/{netty => core}/exec/ResizeExecCmdExec.java (72%) diff --git a/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java b/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java index ebc8b60b5..149c905c0 100644 --- a/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java @@ -57,6 +57,8 @@ import com.github.dockerjava.api.command.RemoveSwarmNodeCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RenameContainerCmd; +import com.github.dockerjava.api.command.ResizeContainerCmd; +import com.github.dockerjava.api.command.ResizeExecCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; import com.github.dockerjava.api.command.SearchImagesCmd; @@ -128,6 +130,8 @@ import com.github.dockerjava.core.exec.RemoveSwarmNodeCmdExec; import com.github.dockerjava.core.exec.RemoveVolumeCmdExec; import com.github.dockerjava.core.exec.RenameContainerCmdExec; +import com.github.dockerjava.core.exec.ResizeContainerCmdExec; +import com.github.dockerjava.core.exec.ResizeExecCmdExec; import com.github.dockerjava.core.exec.RestartContainerCmdExec; import com.github.dockerjava.core.exec.SaveImageCmdExec; import com.github.dockerjava.core.exec.SearchImagesCmdExec; @@ -282,6 +286,16 @@ public ExecStartCmd.Exec createExecStartCmdExec() { return new ExecStartCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public ResizeContainerCmd.Exec createResizeContainerCmdExec() { + return new ResizeContainerCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public ResizeExecCmd.Exec createResizeExecCmdExec() { + return new ResizeExecCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public InspectExecCmd.Exec createInspectExecCmdExec() { return new InspectExecCmdExec(getBaseResource(), getDockerClientConfig()); diff --git a/src/main/java/com/github/dockerjava/core/exec/CommitCmdExec.java b/src/main/java/com/github/dockerjava/core/exec/CommitCmdExec.java index e9b78890c..9ad6cc4a0 100644 --- a/src/main/java/com/github/dockerjava/core/exec/CommitCmdExec.java +++ b/src/main/java/com/github/dockerjava/core/exec/CommitCmdExec.java @@ -20,9 +20,12 @@ public CommitCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConf @Override protected String execute(CommitCmd command) { - WebTarget webTarget = getBaseResource().path("/commit").queryParam("container", command.getContainerId()) - .queryParam("repo", command.getRepository()).queryParam("tag", command.getTag()) - .queryParam("m", command.getMessage()).queryParam("author", command.getAuthor()); + WebTarget webTarget = getBaseResource().path("/commit") + .queryParam("container", command.getContainerId()) + .queryParam("repo", command.getRepository()) + .queryParam("tag", command.getTag()) + .queryParam("m", command.getMessage()) + .queryParam("author", command.getAuthor()); webTarget = booleanQueryParam(webTarget, "pause", command.hasPauseEnabled()); diff --git a/src/main/java/com/github/dockerjava/core/exec/ExecCreateCmdExec.java b/src/main/java/com/github/dockerjava/core/exec/ExecCreateCmdExec.java index 2f0ca1c6f..e96397717 100644 --- a/src/main/java/com/github/dockerjava/core/exec/ExecCreateCmdExec.java +++ b/src/main/java/com/github/dockerjava/core/exec/ExecCreateCmdExec.java @@ -10,8 +10,7 @@ import com.github.dockerjava.core.MediaType; import com.github.dockerjava.core.WebTarget; -public class ExecCreateCmdExec extends AbstrSyncDockerCmdExec implements - ExecCreateCmd.Exec { +public class ExecCreateCmdExec extends AbstrSyncDockerCmdExec implements ExecCreateCmd.Exec { private static final Logger LOGGER = LoggerFactory.getLogger(ExecCreateCmdExec.class); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ResizeContainerCmdExec.java b/src/main/java/com/github/dockerjava/core/exec/ResizeContainerCmdExec.java similarity index 72% rename from src/main/java/com/github/dockerjava/netty/exec/ResizeContainerCmdExec.java rename to src/main/java/com/github/dockerjava/core/exec/ResizeContainerCmdExec.java index 5612488da..cbea663fd 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ResizeContainerCmdExec.java +++ b/src/main/java/com/github/dockerjava/core/exec/ResizeContainerCmdExec.java @@ -1,12 +1,11 @@ -package com.github.dockerjava.netty.exec; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +package com.github.dockerjava.core.exec; import com.github.dockerjava.api.command.ResizeContainerCmd; import com.github.dockerjava.core.DockerClientConfig; -import com.github.dockerjava.netty.MediaType; -import com.github.dockerjava.netty.WebTarget; +import com.github.dockerjava.core.MediaType; +import com.github.dockerjava.core.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResizeContainerCmdExec extends AbstrSyncDockerCmdExec implements ResizeContainerCmd.Exec { @@ -18,8 +17,10 @@ public ResizeContainerCmdExec(WebTarget baseResource, DockerClientConfig dockerC @Override protected Void execute(ResizeContainerCmd command) { - WebTarget webResource = getBaseResource().path("/containers/{id}/resize").resolveTemplate("id", command.getContainerId()) - .queryParam("h", command.getHeight()).queryParam("w", command.getWidth()); + WebTarget webResource = getBaseResource().path("/containers/{id}/resize") + .resolveTemplate("id", command.getContainerId()) + .queryParam("h", command.getHeight()) + .queryParam("w", command.getWidth()); LOGGER.trace("POST: {}", webResource); webResource.request().accept(MediaType.APPLICATION_JSON).post(command); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ResizeExecCmdExec.java b/src/main/java/com/github/dockerjava/core/exec/ResizeExecCmdExec.java similarity index 72% rename from src/main/java/com/github/dockerjava/netty/exec/ResizeExecCmdExec.java rename to src/main/java/com/github/dockerjava/core/exec/ResizeExecCmdExec.java index 33fcce06c..3e0851d73 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ResizeExecCmdExec.java +++ b/src/main/java/com/github/dockerjava/core/exec/ResizeExecCmdExec.java @@ -1,12 +1,12 @@ -package com.github.dockerjava.netty.exec; +package com.github.dockerjava.core.exec; +import com.github.dockerjava.core.MediaType; +import com.github.dockerjava.core.WebTarget; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.github.dockerjava.api.command.ResizeExecCmd; import com.github.dockerjava.core.DockerClientConfig; -import com.github.dockerjava.netty.MediaType; -import com.github.dockerjava.netty.WebTarget; public class ResizeExecCmdExec extends AbstrSyncDockerCmdExec implements ResizeExecCmd.Exec { @@ -18,8 +18,10 @@ public ResizeExecCmdExec(WebTarget baseResource, DockerClientConfig dockerClient @Override protected Void execute(ResizeExecCmd command) { - WebTarget webResource = getBaseResource().path("/exec/{id}/resize").resolveTemplate("id", command.getExecId()) - .queryParam("h", command.getHeight()).queryParam("w", command.getWidth()); + WebTarget webResource = getBaseResource().path("/exec/{id}/resize") + .resolveTemplate("id", command.getExecId()) + .queryParam("h", command.getHeight()) + .queryParam("w", command.getWidth()); LOGGER.trace("POST: {}", webResource); webResource.request().accept(MediaType.APPLICATION_JSON).post(command); diff --git a/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java b/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java index 77dfdd93b..e7aa7e790 100644 --- a/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java @@ -17,10 +17,6 @@ import com.github.dockerjava.core.WebTarget; import io.netty.util.concurrent.Future; import io.netty.util.concurrent.GenericFutureListener; -import com.github.dockerjava.api.command.ResizeContainerCmd; -import com.github.dockerjava.api.command.ResizeExecCmd; -import com.github.dockerjava.netty.exec.ResizeContainerCmdExec; -import com.github.dockerjava.netty.exec.ResizeExecCmdExec; import org.apache.commons.lang.SystemUtils; import com.github.dockerjava.api.command.DockerCmdExecFactory; From 4b44a18ce979329de8d6ae1dc07f9c804024aed2 Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Thu, 22 Aug 2019 17:04:51 +0300 Subject: [PATCH 3/4] Adjust tests --- .../java/com/github/dockerjava/cmd/InfoCmdIT.java | 2 +- .../java/com/github/dockerjava/cmd/ResizeCmdIT.java | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/test/java/com/github/dockerjava/cmd/InfoCmdIT.java b/src/test/java/com/github/dockerjava/cmd/InfoCmdIT.java index b4f70fe19..4a50462da 100644 --- a/src/test/java/com/github/dockerjava/cmd/InfoCmdIT.java +++ b/src/test/java/com/github/dockerjava/cmd/InfoCmdIT.java @@ -29,7 +29,7 @@ public void infoTest() throws DockerException { // TODO extract this into a shared method if (dockerClient.listContainersCmd().withShowAll(true).exec().size() == 0) { CreateContainerResponse container = dockerClient.createContainerCmd(DEFAULT_IMAGE) - .withName("docker-java-itest-info") + .withName("docker-java-itest-info-" + dockerRule.getKind()) .withCmd("touch", "/test") .exec(); diff --git a/src/test/java/com/github/dockerjava/cmd/ResizeCmdIT.java b/src/test/java/com/github/dockerjava/cmd/ResizeCmdIT.java index e79134880..66e894ac1 100644 --- a/src/test/java/com/github/dockerjava/cmd/ResizeCmdIT.java +++ b/src/test/java/com/github/dockerjava/cmd/ResizeCmdIT.java @@ -22,7 +22,7 @@ public class ResizeCmdIT extends CmdIT { public void execResize() throws Exception { assumeNotSwarm("no network in swarm", dockerRule); - String containerName = "generated_" + new SecureRandom().nextInt(); + String containerName = "generated_" + dockerRule.getKind() + new SecureRandom().nextInt(); CreateContainerResponse container = dockerRule.getClient().createContainerCmd("busybox").withCmd("sh") .withName(containerName).withTty(true).withStdinOpen(true).exec(); @@ -42,10 +42,15 @@ public void execResize() throws Exception { public void containerResize() throws Exception { assumeNotSwarm("no network in swarm", dockerRule); - String containerName = "generated_" + new SecureRandom().nextInt(); + String containerName = "generated_" + dockerRule.getKind() + new SecureRandom().nextInt(); - CreateContainerResponse container = dockerRule.getClient().createContainerCmd("busybox").withCmd("sh") - .withName(containerName).withTty(true).withStdinOpen(true).exec(); + CreateContainerResponse container = dockerRule.getClient() + .createContainerCmd("busybox") + .withCmd("sh") + .withName(containerName) + .withTty(true) + .withStdinOpen(true) + .exec(); LOG.info("Created container {}", container.toString()); assertThat(container.getId(), not(isEmptyString())); dockerRule.getClient().startContainerCmd(container.getId()).exec(); From 8f9161d5ff5fbb013e18e06f3942893bca59ee89 Mon Sep 17 00:00:00 2001 From: Kanstantsin Shautsou Date: Sun, 25 Aug 2019 20:34:09 +0300 Subject: [PATCH 4/4] Test --- src/test/java/com/github/dockerjava/junit/DockerRule.java | 6 ++++-- src/test/resources/logback.xml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/github/dockerjava/junit/DockerRule.java b/src/test/java/com/github/dockerjava/junit/DockerRule.java index c178700cc..f1d2a5678 100644 --- a/src/test/java/com/github/dockerjava/junit/DockerRule.java +++ b/src/test/java/com/github/dockerjava/junit/DockerRule.java @@ -43,7 +43,8 @@ public DockerClient getClient() { if (nettyClient == null) { nettyClient = DockerClientBuilder.getInstance(config()) .withDockerCmdExecFactory((new NettyDockerCmdExecFactory()) - .withConnectTimeout(10 * 1000)) + .withConnectTimeout(10 * 1000) + .withReadTimeout(60 * 1000)) .build(); } @@ -52,7 +53,8 @@ public DockerClient getClient() { if (jerseyClient == null) { jerseyClient = DockerClientBuilder.getInstance(config()) .withDockerCmdExecFactory((new JerseyDockerCmdExecFactory()) - .withConnectTimeout(10 * 1000)) + .withConnectTimeout(10 * 1000) + .withReadTimeout(60 * 1000)) .build(); } return jerseyClient; diff --git a/src/test/resources/logback.xml b/src/test/resources/logback.xml index b4309b868..1758daa93 100644 --- a/src/test/resources/logback.xml +++ b/src/test/resources/logback.xml @@ -12,7 +12,7 @@ - +