From f3b555b4d878599948a65f220c2cf6dbdcaf3cac Mon Sep 17 00:00:00 2001 From: Ted Xiao Date: Mon, 4 Dec 2017 14:24:33 +0800 Subject: [PATCH] allow client to update swarm node and lists swarm node --- .../github/dockerjava/api/DockerClient.java | 18 ++++++++++ .../api/command/UpdateSwarmNodeCmd.java | 5 +++ .../dockerjava/api/model/SwarmNode.java | 8 ++--- .../dockerjava/core/DockerClientImpl.java | 14 ++++++++ .../core/command/UpdateSwarmNodeCmdImpl.java | 22 ++++++++++--- .../jaxrs/UpdateSwarmNodeCmdExec.java | 3 +- .../netty/exec/UpdateSwarmNodeCmdExec.java | 3 +- .../dockerjava/cmd/swarm/SwarmCmdIT.java | 7 +++- .../cmd/swarm/UpdateSwarmNodeIT.java | 33 +++++++++++++++++++ 9 files changed, 102 insertions(+), 11 deletions(-) create mode 100644 src/test/java/com/github/dockerjava/cmd/swarm/UpdateSwarmNodeIT.java diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index fe40b2a6e..43dde1832 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -34,6 +34,7 @@ import com.github.dockerjava.api.command.ListImagesCmd; import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.command.ListServicesCmd; +import com.github.dockerjava.api.command.ListSwarmNodesCmd; import com.github.dockerjava.api.command.ListTasksCmd; import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.LoadImageCmd; @@ -60,6 +61,7 @@ import com.github.dockerjava.api.command.UpdateContainerCmd; import com.github.dockerjava.api.command.UpdateServiceCmd; import com.github.dockerjava.api.command.UpdateSwarmCmd; +import com.github.dockerjava.api.command.UpdateSwarmNodeCmd; import com.github.dockerjava.api.command.VersionCmd; import com.github.dockerjava.api.command.WaitContainerCmd; import com.github.dockerjava.api.exception.DockerException; @@ -309,6 +311,22 @@ public interface DockerClient extends Closeable { */ UpdateSwarmCmd updateSwarmCmd(SwarmSpec swarmSpec); + /** + * Updates the swarm node + * + * @return the command + * @since 1.24 + */ + UpdateSwarmNodeCmd updateSwarmNodeCmd(); + + /** + * List nodes in swarm + * + * @return the command + * @since 1.24 + */ + ListSwarmNodesCmd listSwarmNodesCmd(); + /** * Command to list all services in a docker swarm. Only applicable if docker runs in swarm mode. * diff --git a/src/main/java/com/github/dockerjava/api/command/UpdateSwarmNodeCmd.java b/src/main/java/com/github/dockerjava/api/command/UpdateSwarmNodeCmd.java index 84d069aaf..bdcd403e0 100644 --- a/src/main/java/com/github/dockerjava/api/command/UpdateSwarmNodeCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/UpdateSwarmNodeCmd.java @@ -23,6 +23,11 @@ public interface UpdateSwarmNodeCmd extends SyncDockerCmd { UpdateSwarmNodeCmd withSwarmNodeSpec(SwarmNodeSpec swarmNodeSpec); + UpdateSwarmNodeCmd withVersion(@Nonnull Integer versionId); + + @CheckForNull + Integer getVersion(); + interface Exec extends DockerCmdSyncExec { } } diff --git a/src/main/java/com/github/dockerjava/api/model/SwarmNode.java b/src/main/java/com/github/dockerjava/api/model/SwarmNode.java index 47b4dfa68..fd2bfe02c 100644 --- a/src/main/java/com/github/dockerjava/api/model/SwarmNode.java +++ b/src/main/java/com/github/dockerjava/api/model/SwarmNode.java @@ -27,14 +27,14 @@ public class SwarmNode implements Serializable { /** * @since 1.24 */ - @JsonProperty("Id") + @JsonProperty("ID") private String id; /** * @since 1.24 */ @JsonProperty("Version") - private String[] version; + private ObjectVersion version; /** * @since 1.24 @@ -92,14 +92,14 @@ public SwarmNode withId(String id) { * @see #version */ @CheckForNull - public String[] getVersion() { + public ObjectVersion getVersion() { return version; } /** * @see #version */ - public SwarmNode withVersion(String[] version) { + public SwarmNode withVersion(ObjectVersion version) { this.version = version; return this; } diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index cbf06aca7..a040cac2a 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -36,6 +36,7 @@ import com.github.dockerjava.api.command.ListImagesCmd; import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.command.ListServicesCmd; +import com.github.dockerjava.api.command.ListSwarmNodesCmd; import com.github.dockerjava.api.command.ListTasksCmd; import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.LoadImageCmd; @@ -62,6 +63,7 @@ import com.github.dockerjava.api.command.UpdateContainerCmd; import com.github.dockerjava.api.command.UpdateServiceCmd; import com.github.dockerjava.api.command.UpdateSwarmCmd; +import com.github.dockerjava.api.command.UpdateSwarmNodeCmd; import com.github.dockerjava.api.command.VersionCmd; import com.github.dockerjava.api.command.WaitContainerCmd; import com.github.dockerjava.api.model.AuthConfig; @@ -102,6 +104,7 @@ import com.github.dockerjava.core.command.ListImagesCmdImpl; import com.github.dockerjava.core.command.ListNetworksCmdImpl; import com.github.dockerjava.core.command.ListServicesCmdImpl; +import com.github.dockerjava.core.command.ListSwarmNodesCmdImpl; import com.github.dockerjava.core.command.ListTasksCmdImpl; import com.github.dockerjava.core.command.ListVolumesCmdImpl; import com.github.dockerjava.core.command.LoadImageCmdImpl; @@ -128,6 +131,7 @@ import com.github.dockerjava.core.command.UpdateContainerCmdImpl; import com.github.dockerjava.core.command.UpdateServiceCmdImpl; import com.github.dockerjava.core.command.UpdateSwarmCmdImpl; +import com.github.dockerjava.core.command.UpdateSwarmNodeCmdImpl; import com.github.dockerjava.core.command.VersionCmdImpl; import com.github.dockerjava.core.command.WaitContainerCmdImpl; @@ -528,6 +532,16 @@ public UpdateSwarmCmd updateSwarmCmd(SwarmSpec swarmSpec) { return new UpdateSwarmCmdImpl(getDockerCmdExecFactory().createUpdateSwarmCmdExec(), swarmSpec); } + @Override + public UpdateSwarmNodeCmd updateSwarmNodeCmd() { + return new UpdateSwarmNodeCmdImpl(getDockerCmdExecFactory().updateSwarmNodeCmdExec()); + } + + @Override + public ListSwarmNodesCmd listSwarmNodesCmd() { + return new ListSwarmNodesCmdImpl(getDockerCmdExecFactory().listSwarmNodeCmdExec()); + } + @Override public ListServicesCmd listServicesCmd() { return new ListServicesCmdImpl(getDockerCmdExecFactory().createListServicesCmdExec()); } diff --git a/src/main/java/com/github/dockerjava/core/command/UpdateSwarmNodeCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/UpdateSwarmNodeCmdImpl.java index d7596e3dc..dfde7eba6 100644 --- a/src/main/java/com/github/dockerjava/core/command/UpdateSwarmNodeCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/UpdateSwarmNodeCmdImpl.java @@ -12,8 +12,6 @@ import javax.annotation.CheckForNull; import javax.annotation.Nonnull; -import static com.google.common.base.Preconditions.checkNotNull; - /** * Update swarmNode spec * @@ -26,6 +24,12 @@ public class UpdateSwarmNodeCmdImpl extends AbstrDockerCmd nodes = docker1.listSwarmNodesCmd().exec(); + assertThat(1, is(nodes.size())); + SwarmNode node = nodes.get(0); + assertThat(SwarmNodeState.READY, is(node.getStatus().getState())); + //update the node availability + SwarmNodeSpec nodeSpec = node.getSpec().withAvailability(SwarmNodeAvailability.PAUSE); + docker1.updateSwarmNodeCmd().withSwarmNodeId(node.getId()).withVersion(node.getVersion().getIndex()) + .withSwarmNodeSpec(nodeSpec).exec(); + nodes = docker1.listSwarmNodesCmd().exec(); + assertThat(1, is(nodes.size())); + assertThat(SwarmNodeAvailability.PAUSE, is(nodes.get(0).getSpec().getAvailability())); + } +}