Skip to content

Commit e1586cc

Browse files
creainkbsideup
andauthored
Add resize container and exec command (docker-java#1262)
* Add resize container and exec command * Apply suggestions from code review fix code style Co-authored-by: Sergei Egorov <bsideup@gmail.com> * remove DEFAULT_IMAGE in resize exec * add validation of resize exec test case Co-authored-by: Sergei Egorov <bsideup@gmail.com>
1 parent 3666938 commit e1586cc

File tree

13 files changed

+370
-0
lines changed

13 files changed

+370
-0
lines changed

docker-java-api/src/main/java/com/github/dockerjava/api/DockerClient.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@
5454
import com.github.dockerjava.api.command.RemoveServiceCmd;
5555
import com.github.dockerjava.api.command.RemoveVolumeCmd;
5656
import com.github.dockerjava.api.command.RenameContainerCmd;
57+
import com.github.dockerjava.api.command.ResizeContainerCmd;
58+
import com.github.dockerjava.api.command.ResizeExecCmd;
5759
import com.github.dockerjava.api.command.RestartContainerCmd;
5860
import com.github.dockerjava.api.command.SaveImageCmd;
5961
import com.github.dockerjava.api.command.SaveImagesCmd;
@@ -165,6 +167,8 @@ public interface DockerClient extends Closeable {
165167

166168
ExecCreateCmd execCreateCmd(@Nonnull String containerId);
167169

170+
ResizeExecCmd resizeExecCmd(@Nonnull String execId);
171+
168172
InspectContainerCmd inspectContainerCmd(@Nonnull String containerId);
169173

170174
RemoveContainerCmd removeContainerCmd(@Nonnull String containerId);
@@ -242,6 +246,8 @@ public interface DockerClient extends Closeable {
242246

243247
RestartContainerCmd restartContainerCmd(@Nonnull String containerId);
244248

249+
ResizeContainerCmd resizeContainerCmd(@Nonnull String containerId);
250+
245251
CommitCmd commitCmd(@Nonnull String containerId);
246252

247253
BuildImageCmd buildImageCmd();

docker-java-api/src/main/java/com/github/dockerjava/api/command/DelegatingDockerCmdExecFactory.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,21 @@ public PingCmd.Exec createPingCmdExec() {
2525
return getDockerCmdExecFactory().createPingCmdExec();
2626
}
2727

28+
@Override
29+
public ResizeContainerCmd.Exec createResizeContainerCmdExec() {
30+
return getDockerCmdExecFactory().createResizeContainerCmdExec();
31+
}
32+
2833
@Override
2934
public ExecCreateCmd.Exec createExecCmdExec() {
3035
return getDockerCmdExecFactory().createExecCmdExec();
3136
}
3237

38+
@Override
39+
public ResizeExecCmd.Exec createResizeExecCmdExec() {
40+
return getDockerCmdExecFactory().createResizeExecCmdExec();
41+
}
42+
3343
@Override
3444
public VersionCmd.Exec createVersionCmdExec() {
3545
return getDockerCmdExecFactory().createVersionCmdExec();

docker-java-api/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,12 @@ public interface DockerCmdExecFactory extends Closeable {
4949

5050
AttachContainerCmd.Exec createAttachContainerCmdExec();
5151

52+
ResizeContainerCmd.Exec createResizeContainerCmdExec();
53+
5254
ExecStartCmd.Exec createExecStartCmdExec();
5355

56+
ResizeExecCmd.Exec createResizeExecCmdExec();
57+
5458
InspectExecCmd.Exec createInspectExecCmdExec();
5559

5660
LogContainerCmd.Exec createLogContainerCmdExec();
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.github.dockerjava.api.command;
2+
3+
import com.github.dockerjava.api.exception.NotFoundException;
4+
5+
import javax.annotation.CheckForNull;
6+
import javax.annotation.Nonnull;
7+
8+
public interface ResizeContainerCmd extends SyncDockerCmd<Void> {
9+
10+
@CheckForNull
11+
String getContainerId();
12+
13+
Integer getHeight();
14+
15+
Integer getWidth();
16+
17+
ResizeContainerCmd withContainerId(@Nonnull String execId);
18+
19+
ResizeContainerCmd withSize(int height, int width);
20+
21+
/**
22+
* @throws NotFoundException no such container instance
23+
*/
24+
@Override
25+
Void exec() throws NotFoundException;
26+
27+
interface Exec extends DockerCmdSyncExec<ResizeContainerCmd, Void> {
28+
}
29+
30+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.github.dockerjava.api.command;
2+
3+
import com.github.dockerjava.api.exception.NotFoundException;
4+
5+
import javax.annotation.CheckForNull;
6+
import javax.annotation.Nonnull;
7+
8+
public interface ResizeExecCmd extends SyncDockerCmd<Void> {
9+
@CheckForNull
10+
String getExecId();
11+
12+
Integer getHeight();
13+
14+
Integer getWidth();
15+
16+
ResizeExecCmd withExecId(@Nonnull String execId);
17+
18+
ResizeExecCmd withSize(int height, int width);
19+
20+
/**
21+
* @throws NotFoundException no such exec instance
22+
*/
23+
@Override
24+
Void exec() throws NotFoundException;
25+
26+
interface Exec extends DockerCmdSyncExec<ResizeExecCmd, Void> {
27+
}
28+
29+
}

docker-java-core/src/main/java/com/github/dockerjava/core/AbstractDockerCmdExecFactory.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
import com.github.dockerjava.api.command.RemoveSwarmNodeCmd;
5858
import com.github.dockerjava.api.command.RemoveVolumeCmd;
5959
import com.github.dockerjava.api.command.RenameContainerCmd;
60+
import com.github.dockerjava.api.command.ResizeContainerCmd;
61+
import com.github.dockerjava.api.command.ResizeExecCmd;
6062
import com.github.dockerjava.api.command.RestartContainerCmd;
6163
import com.github.dockerjava.api.command.SaveImageCmd;
6264
import com.github.dockerjava.api.command.SaveImagesCmd;
@@ -92,6 +94,8 @@
9294
import com.github.dockerjava.core.exec.EventsCmdExec;
9395
import com.github.dockerjava.core.exec.ExecCreateCmdExec;
9496
import com.github.dockerjava.core.exec.ExecStartCmdExec;
97+
import com.github.dockerjava.core.exec.ResizeContainerCmdExec;
98+
import com.github.dockerjava.core.exec.ResizeExecCmdExec;
9599
import com.github.dockerjava.core.exec.InfoCmdExec;
96100
import com.github.dockerjava.core.exec.InitializeSwarmCmdExec;
97101
import com.github.dockerjava.core.exec.InspectContainerCmdExec;
@@ -303,11 +307,21 @@ public AttachContainerCmd.Exec createAttachContainerCmdExec() {
303307
return new AttachContainerCmdExec(getBaseResource(), getDockerClientConfig());
304308
}
305309

310+
@Override
311+
public ResizeContainerCmd.Exec createResizeContainerCmdExec() {
312+
return new ResizeContainerCmdExec(getBaseResource(), getDockerClientConfig());
313+
}
314+
306315
@Override
307316
public ExecStartCmd.Exec createExecStartCmdExec() {
308317
return new ExecStartCmdExec(getBaseResource(), getDockerClientConfig());
309318
}
310319

320+
@Override
321+
public ResizeExecCmd.Exec createResizeExecCmdExec() {
322+
return new ResizeExecCmdExec(getBaseResource(), getDockerClientConfig());
323+
}
324+
311325
@Override
312326
public InspectExecCmd.Exec createInspectExecCmdExec() {
313327
return new InspectExecCmdExec(getBaseResource(), getDockerClientConfig());

docker-java-core/src/main/java/com/github/dockerjava/core/DockerClientImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
import com.github.dockerjava.api.command.RemoveServiceCmd;
5757
import com.github.dockerjava.api.command.RemoveVolumeCmd;
5858
import com.github.dockerjava.api.command.RenameContainerCmd;
59+
import com.github.dockerjava.api.command.ResizeContainerCmd;
60+
import com.github.dockerjava.api.command.ResizeExecCmd;
5961
import com.github.dockerjava.api.command.RestartContainerCmd;
6062
import com.github.dockerjava.api.command.SaveImageCmd;
6163
import com.github.dockerjava.api.command.SaveImagesCmd;
@@ -132,6 +134,8 @@
132134
import com.github.dockerjava.core.command.RemoveServiceCmdImpl;
133135
import com.github.dockerjava.core.command.RemoveVolumeCmdImpl;
134136
import com.github.dockerjava.core.command.RenameContainerCmdImpl;
137+
import com.github.dockerjava.core.command.ResizeContainerCmdImpl;
138+
import com.github.dockerjava.core.command.ResizeExecCmdImpl;
135139
import com.github.dockerjava.core.command.RestartContainerCmdImpl;
136140
import com.github.dockerjava.core.command.SaveImageCmdImpl;
137141
import com.github.dockerjava.core.command.SaveImagesCmdImpl;
@@ -386,6 +390,11 @@ public ExecCreateCmd execCreateCmd(String containerId) {
386390
return new ExecCreateCmdImpl(getDockerCmdExecFactory().createExecCmdExec(), containerId);
387391
}
388392

393+
@Override
394+
public ResizeExecCmd resizeExecCmd(@Nonnull String execId) {
395+
return new ResizeExecCmdImpl(getDockerCmdExecFactory().createResizeExecCmdExec(), execId);
396+
}
397+
389398
@Override
390399
public RemoveContainerCmd removeContainerCmd(String containerId) {
391400
return new RemoveContainerCmdImpl(getDockerCmdExecFactory().createRemoveContainerCmdExec(), containerId);
@@ -464,6 +473,11 @@ public RestartContainerCmd restartContainerCmd(String containerId) {
464473
return new RestartContainerCmdImpl(getDockerCmdExecFactory().createRestartContainerCmdExec(), containerId);
465474
}
466475

476+
@Override
477+
public ResizeContainerCmd resizeContainerCmd(@Nonnull String containerId) {
478+
return new ResizeContainerCmdImpl(getDockerCmdExecFactory().createResizeContainerCmdExec(), containerId);
479+
}
480+
467481
@Override
468482
public CommitCmd commitCmd(String containerId) {
469483
return new CommitCmdImpl(getDockerCmdExecFactory().createCommitCmdExec(), containerId);
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.github.dockerjava.core.command;
2+
3+
import com.github.dockerjava.api.command.ResizeContainerCmd;
4+
import com.github.dockerjava.api.exception.NotFoundException;
5+
6+
import static com.google.common.base.Preconditions.checkNotNull;
7+
8+
public class ResizeContainerCmdImpl extends AbstrDockerCmd<ResizeContainerCmd, Void> implements ResizeContainerCmd {
9+
10+
private String containerId;
11+
12+
private Integer height;
13+
14+
private Integer width;
15+
16+
public ResizeContainerCmdImpl(ResizeContainerCmd.Exec exec, String execId) {
17+
super(exec);
18+
withContainerId(execId);
19+
}
20+
21+
@Override
22+
public String getContainerId() {
23+
return containerId;
24+
}
25+
26+
@Override
27+
public Integer getHeight() {
28+
return height;
29+
}
30+
31+
@Override
32+
public Integer getWidth() {
33+
return width;
34+
}
35+
36+
@Override
37+
public ResizeContainerCmd withContainerId(String containerId) {
38+
checkNotNull(containerId, "containerId was not specified");
39+
this.containerId = containerId;
40+
return this;
41+
}
42+
43+
@Override
44+
public ResizeContainerCmd withSize(int height, int width) {
45+
this.height = height;
46+
this.width = width;
47+
return this;
48+
}
49+
50+
/**
51+
* @throws NotFoundException no such exec instance
52+
*/
53+
@Override
54+
public Void exec() throws NotFoundException {
55+
return super.exec();
56+
}
57+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.github.dockerjava.core.command;
2+
3+
import com.github.dockerjava.api.command.ResizeExecCmd;
4+
import com.github.dockerjava.api.exception.NotFoundException;
5+
6+
import static com.google.common.base.Preconditions.checkNotNull;
7+
8+
public class ResizeExecCmdImpl extends AbstrDockerCmd<ResizeExecCmd, Void> implements ResizeExecCmd {
9+
10+
private String execId;
11+
12+
private Integer height;
13+
14+
private Integer width;
15+
16+
public ResizeExecCmdImpl(ResizeExecCmd.Exec exec, String execId) {
17+
super(exec);
18+
withExecId(execId);
19+
}
20+
21+
@Override
22+
public String getExecId() {
23+
return execId;
24+
}
25+
26+
@Override
27+
public Integer getHeight() {
28+
return height;
29+
}
30+
31+
@Override
32+
public Integer getWidth() {
33+
return width;
34+
}
35+
36+
@Override
37+
public ResizeExecCmd withExecId(String execId) {
38+
checkNotNull(execId, "execId was not specified");
39+
this.execId = execId;
40+
return this;
41+
}
42+
43+
@Override
44+
public ResizeExecCmd withSize(int height, int width) {
45+
this.height = height;
46+
this.width = width;
47+
return this;
48+
}
49+
50+
/**
51+
* @throws NotFoundException no such exec instance
52+
*/
53+
@Override
54+
public Void exec() throws NotFoundException {
55+
return super.exec();
56+
}
57+
58+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.github.dockerjava.core.exec;
2+
3+
import com.github.dockerjava.api.command.ResizeContainerCmd;
4+
import com.github.dockerjava.core.DockerClientConfig;
5+
import com.github.dockerjava.core.MediaType;
6+
import com.github.dockerjava.core.WebTarget;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
public class ResizeContainerCmdExec extends AbstrSyncDockerCmdExec<ResizeContainerCmd, Void> implements ResizeContainerCmd.Exec {
11+
12+
private static final Logger LOGGER = LoggerFactory.getLogger(ResizeContainerCmdExec.class);
13+
14+
public ResizeContainerCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) {
15+
super(baseResource, dockerClientConfig);
16+
}
17+
18+
@Override
19+
protected Void execute(ResizeContainerCmd command) {
20+
WebTarget webResource = getBaseResource().path("/containers/{id}/resize")
21+
.resolveTemplate("id", command.getContainerId()).queryParam("h", command.getHeight())
22+
.queryParam("w", command.getWidth());
23+
24+
LOGGER.trace("POST: {}", webResource);
25+
26+
webResource.request().accept(MediaType.APPLICATION_JSON).post(command);
27+
28+
return null;
29+
}
30+
}

0 commit comments

Comments
 (0)