From 4c9da61508a8251fecf89fd6aefd47782628301d Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Fri, 8 Jan 2016 22:58:51 -0500 Subject: [PATCH 01/17] Adding ListNetworksCmd --- .../api/command/DockerCmdExecFactory.java | 2 + .../api/command/ListNetworksCmd.java | 18 +++ .../github/dockerjava/api/model/Network.java | 128 ++++++++++++++++++ .../dockerjava/api/model/NetworkFilters.java | 15 ++ .../core/command/ListNetworksCmdImpl.java | 27 ++++ .../jaxrs/DockerCmdExecFactoryImpl.java | 49 +------ .../dockerjava/jaxrs/ListNetworksCmdExec.java | 43 ++++++ .../netty/DockerCmdExecFactoryImpl.java | 93 ++----------- .../netty/exec/ListNetworksCmdExec.java | 37 +++++ .../core/TestDockerCmdExecFactory.java | 51 +------ 10 files changed, 290 insertions(+), 173 deletions(-) create mode 100644 src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/model/Network.java create mode 100644 src/main/java/com/github/dockerjava/api/model/NetworkFilters.java create mode 100644 src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java 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 98de728e8..9dcb79834 100644 --- a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java @@ -93,6 +93,8 @@ public interface DockerCmdExecFactory extends Closeable { public ListVolumesCmd.Exec createListVolumesCmdExec(); + public ListNetworksCmd.Exec createListNetworksCmdExec(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java new file mode 100644 index 000000000..1d0dc6c7d --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java @@ -0,0 +1,18 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.api.model.Filters; +import com.github.dockerjava.api.model.Network; + +import javax.annotation.CheckForNull; +import java.util.List; + +public interface ListNetworksCmd extends SyncDockerCmd> { + + @CheckForNull + public Filters getFilters(); + + ListNetworksCmd withFilters(Filters filters); + + public static interface Exec extends DockerCmdSyncExec> { + } +} diff --git a/src/main/java/com/github/dockerjava/api/model/Network.java b/src/main/java/com/github/dockerjava/api/model/Network.java new file mode 100644 index 000000000..2ef74d43b --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/model/Network.java @@ -0,0 +1,128 @@ +package com.github.dockerjava.api.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.commons.lang.builder.ToStringBuilder; + +import java.util.List; +import java.util.Map; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Network { + + @JsonProperty("Id") + private String id; + + @JsonProperty("Name") + private String name; + + @JsonProperty("Scope") + private String scope; + + @JsonProperty("Driver") + private String driver; + + @JsonProperty("IPAM") + private Ipam ipam; + + @JsonProperty("Containers") + private Map containers; + + @JsonProperty("Options") + private Map options; + + public String getId() { + return id; + } + + public String getName() { + return name; + } + + public String getScope() { + return scope; + } + + public String getDriver() { + return driver; + } + + public Ipam getIpam() { + return ipam; + } + + public Map getContainers() { + return containers; + } + + public Map getOptions() { + return options; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class ContainerNetworkConfig { + + @JsonProperty("EndpointID") + private String endpointId; + + @JsonProperty("MacAddress") + private String macAddress; + + @JsonProperty("IPv4Address") + private String ipV4Address; + + @JsonProperty("IPv6Address") + private String ipV6Address; + + public String getEndpointId() { + return endpointId; + } + + public String getMacAddress() { + return macAddress; + } + + public String getIpV4Address() { + return ipV4Address; + } + + public String getIpV6Address() { + return ipV6Address; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Ipam { + + @JsonProperty("Driver") + private String driver; + + @JsonProperty("Config") + List> config; + + public String getDriver() { + return driver; + } + + public List> getConfig() { + return config; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } +} diff --git a/src/main/java/com/github/dockerjava/api/model/NetworkFilters.java b/src/main/java/com/github/dockerjava/api/model/NetworkFilters.java new file mode 100644 index 000000000..f3c837643 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/model/NetworkFilters.java @@ -0,0 +1,15 @@ +package com.github.dockerjava.api.model; + +/** + * Created by andrewk on 1/5/16. + */ +public class NetworkFilters extends Filters { + + public Filters withNames(String... names) { + return withFilter("name", names); + } + + public Filters withIds(String... ids) { + return withFilter("id", ids); + } +} diff --git a/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java new file mode 100644 index 000000000..2303e7c9c --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/ListNetworksCmdImpl.java @@ -0,0 +1,27 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.ListNetworksCmd; +import com.github.dockerjava.api.model.Filters; +import com.github.dockerjava.api.model.Network; + +import java.util.List; + +public class ListNetworksCmdImpl extends AbstrDockerCmd> implements + ListNetworksCmd { + + private Filters filters; + + public ListNetworksCmdImpl(ListNetworksCmd.Exec exec) { + super(exec); + } + + @Override public Filters getFilters() { + return filters; + } + + @Override public ListNetworksCmd withFilters(Filters filters) { + + this.filters = filters; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index 30bc5e34f..60ec9949a 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -16,6 +16,7 @@ import javax.ws.rs.client.ClientResponseFilter; import javax.ws.rs.client.WebTarget; +import com.github.dockerjava.api.command.*; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; @@ -29,49 +30,6 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; -import com.github.dockerjava.api.command.AttachContainerCmd; -import com.github.dockerjava.api.command.AuthCmd; -import com.github.dockerjava.api.command.BuildImageCmd; -import com.github.dockerjava.api.command.CommitCmd; -import com.github.dockerjava.api.command.ContainerDiffCmd; -import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; -import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; -import com.github.dockerjava.api.command.CopyFileFromContainerCmd; -import com.github.dockerjava.api.command.CreateContainerCmd; -import com.github.dockerjava.api.command.CreateImageCmd; -import com.github.dockerjava.api.command.CreateVolumeCmd; -import com.github.dockerjava.api.command.DockerCmdExecFactory; -import com.github.dockerjava.api.command.EventsCmd; -import com.github.dockerjava.api.command.ExecCreateCmd; -import com.github.dockerjava.api.command.ExecStartCmd; -import com.github.dockerjava.api.command.InfoCmd; -import com.github.dockerjava.api.command.InspectContainerCmd; -import com.github.dockerjava.api.command.InspectExecCmd; -import com.github.dockerjava.api.command.InspectImageCmd; -import com.github.dockerjava.api.command.InspectVolumeCmd; -import com.github.dockerjava.api.command.KillContainerCmd; -import com.github.dockerjava.api.command.ListContainersCmd; -import com.github.dockerjava.api.command.ListImagesCmd; -import com.github.dockerjava.api.command.ListVolumesCmd; -import com.github.dockerjava.api.command.LogContainerCmd; -import com.github.dockerjava.api.command.PauseContainerCmd; -import com.github.dockerjava.api.command.PingCmd; -import com.github.dockerjava.api.command.PullImageCmd; -import com.github.dockerjava.api.command.PushImageCmd; -import com.github.dockerjava.api.command.RemoveContainerCmd; -import com.github.dockerjava.api.command.RemoveImageCmd; -import com.github.dockerjava.api.command.RemoveVolumeCmd; -import com.github.dockerjava.api.command.RestartContainerCmd; -import com.github.dockerjava.api.command.SaveImageCmd; -import com.github.dockerjava.api.command.SearchImagesCmd; -import com.github.dockerjava.api.command.StartContainerCmd; -import com.github.dockerjava.api.command.StatsCmd; -import com.github.dockerjava.api.command.StopContainerCmd; -import com.github.dockerjava.api.command.TagImageCmd; -import com.github.dockerjava.api.command.TopContainerCmd; -import com.github.dockerjava.api.command.UnpauseContainerCmd; -import com.github.dockerjava.api.command.VersionCmd; -import com.github.dockerjava.api.command.WaitContainerCmd; import com.github.dockerjava.api.exception.DockerClientException; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.jaxrs.connector.ApacheConnectorProvider; @@ -445,6 +403,11 @@ public ListVolumesCmd.Exec createListVolumesCmdExec() { return new ListVolumesCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public ListNetworksCmd.Exec createListNetworksCmdExec() { + return new ListNetworksCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(client, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java new file mode 100644 index 000000000..80438d433 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/ListNetworksCmdExec.java @@ -0,0 +1,43 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.ListNetworksCmd; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import java.util.List; + +import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper; + +public class ListNetworksCmdExec extends AbstrSyncDockerCmdExec> implements + ListNetworksCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ListNetworksCmdExec.class); + + public ListNetworksCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected List execute(ListNetworksCmd command) { + WebTarget webTarget = getBaseResource().path("/networks"); + + if (command.getFilters() != null) { + webTarget = webTarget + .queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + } + + LOGGER.trace("GET: {}", webTarget); + List networks = webTarget.request().accept(MediaType.APPLICATION_JSON) + .get(new GenericType>() { + }); + LOGGER.trace("Response: {}", networks); + + return networks; + } + +} diff --git a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java index 9ddd51288..83ea83e23 100644 --- a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java @@ -1,6 +1,9 @@ package com.github.dockerjava.netty; import static com.google.common.base.Preconditions.checkNotNull; + +import com.github.dockerjava.api.command.*; +import com.github.dockerjava.netty.exec.*; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; @@ -28,93 +31,8 @@ import org.bouncycastle.jce.provider.BouncyCastleProvider; -import com.github.dockerjava.api.command.AttachContainerCmd; -import com.github.dockerjava.api.command.AuthCmd; -import com.github.dockerjava.api.command.BuildImageCmd; -import com.github.dockerjava.api.command.CommitCmd; -import com.github.dockerjava.api.command.ContainerDiffCmd; -import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; -import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; -import com.github.dockerjava.api.command.CopyFileFromContainerCmd; -import com.github.dockerjava.api.command.CreateContainerCmd; -import com.github.dockerjava.api.command.CreateImageCmd; -import com.github.dockerjava.api.command.CreateVolumeCmd; -import com.github.dockerjava.api.command.DockerCmdExecFactory; -import com.github.dockerjava.api.command.EventsCmd; -import com.github.dockerjava.api.command.ExecCreateCmd; -import com.github.dockerjava.api.command.ExecStartCmd; -import com.github.dockerjava.api.command.InfoCmd; -import com.github.dockerjava.api.command.InspectContainerCmd; -import com.github.dockerjava.api.command.InspectExecCmd; -import com.github.dockerjava.api.command.InspectImageCmd; -import com.github.dockerjava.api.command.InspectVolumeCmd; -import com.github.dockerjava.api.command.KillContainerCmd; -import com.github.dockerjava.api.command.ListContainersCmd; -import com.github.dockerjava.api.command.ListImagesCmd; -import com.github.dockerjava.api.command.ListVolumesCmd; -import com.github.dockerjava.api.command.LogContainerCmd; -import com.github.dockerjava.api.command.PauseContainerCmd; -import com.github.dockerjava.api.command.PingCmd; -import com.github.dockerjava.api.command.PullImageCmd; -import com.github.dockerjava.api.command.PushImageCmd; -import com.github.dockerjava.api.command.RemoveContainerCmd; -import com.github.dockerjava.api.command.RemoveImageCmd; -import com.github.dockerjava.api.command.RemoveVolumeCmd; -import com.github.dockerjava.api.command.RestartContainerCmd; -import com.github.dockerjava.api.command.SaveImageCmd; -import com.github.dockerjava.api.command.SearchImagesCmd; -import com.github.dockerjava.api.command.StartContainerCmd; -import com.github.dockerjava.api.command.StatsCmd; -import com.github.dockerjava.api.command.StopContainerCmd; -import com.github.dockerjava.api.command.TagImageCmd; -import com.github.dockerjava.api.command.TopContainerCmd; -import com.github.dockerjava.api.command.UnpauseContainerCmd; -import com.github.dockerjava.api.command.VersionCmd; -import com.github.dockerjava.api.command.WaitContainerCmd; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.core.DockerClientImpl; -import com.github.dockerjava.netty.exec.AttachContainerCmdExec; -import com.github.dockerjava.netty.exec.AuthCmdExec; -import com.github.dockerjava.netty.exec.BuildImageCmdExec; -import com.github.dockerjava.netty.exec.CommitCmdExec; -import com.github.dockerjava.netty.exec.ContainerDiffCmdExec; -import com.github.dockerjava.netty.exec.CopyArchiveFromContainerCmdExec; -import com.github.dockerjava.netty.exec.CopyArchiveToContainerCmdExec; -import com.github.dockerjava.netty.exec.CopyFileFromContainerCmdExec; -import com.github.dockerjava.netty.exec.CreateContainerCmdExec; -import com.github.dockerjava.netty.exec.CreateImageCmdExec; -import com.github.dockerjava.netty.exec.CreateVolumeCmdExec; -import com.github.dockerjava.netty.exec.EventsCmdExec; -import com.github.dockerjava.netty.exec.ExecCreateCmdExec; -import com.github.dockerjava.netty.exec.ExecStartCmdExec; -import com.github.dockerjava.netty.exec.InfoCmdExec; -import com.github.dockerjava.netty.exec.InspectContainerCmdExec; -import com.github.dockerjava.netty.exec.InspectExecCmdExec; -import com.github.dockerjava.netty.exec.InspectImageCmdExec; -import com.github.dockerjava.netty.exec.InspectVolumeCmdExec; -import com.github.dockerjava.netty.exec.KillContainerCmdExec; -import com.github.dockerjava.netty.exec.ListContainersCmdExec; -import com.github.dockerjava.netty.exec.ListImagesCmdExec; -import com.github.dockerjava.netty.exec.ListVolumesCmdExec; -import com.github.dockerjava.netty.exec.LogContainerCmdExec; -import com.github.dockerjava.netty.exec.PauseContainerCmdExec; -import com.github.dockerjava.netty.exec.PingCmdExec; -import com.github.dockerjava.netty.exec.PullImageCmdExec; -import com.github.dockerjava.netty.exec.PushImageCmdExec; -import com.github.dockerjava.netty.exec.RemoveContainerCmdExec; -import com.github.dockerjava.netty.exec.RemoveImageCmdExec; -import com.github.dockerjava.netty.exec.RemoveVolumeCmdExec; -import com.github.dockerjava.netty.exec.RestartContainerCmdExec; -import com.github.dockerjava.netty.exec.SaveImageCmdExec; -import com.github.dockerjava.netty.exec.SearchImagesCmdExec; -import com.github.dockerjava.netty.exec.StartContainerCmdExec; -import com.github.dockerjava.netty.exec.StatsCmdExec; -import com.github.dockerjava.netty.exec.StopContainerCmdExec; -import com.github.dockerjava.netty.exec.TagImageCmdExec; -import com.github.dockerjava.netty.exec.TopContainerCmdExec; -import com.github.dockerjava.netty.exec.UnpauseContainerCmdExec; -import com.github.dockerjava.netty.exec.VersionCmdExec; -import com.github.dockerjava.netty.exec.WaitContainerCmdExec; /** * Experimental implementation of {@link DockerCmdExecFactory} that supports http connection hijacking that is needed to @@ -505,6 +423,11 @@ public ListVolumesCmd.Exec createListVolumesCmdExec() { return new ListVolumesCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public ListNetworksCmd.Exec createListNetworksCmdExec() { + return new ListNetworksCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(eventLoopGroup, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java new file mode 100644 index 000000000..e3bcecfad --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java @@ -0,0 +1,37 @@ +package com.github.dockerjava.netty.exec; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.github.dockerjava.api.command.ListNetworksCmd; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +import static com.google.common.net.UrlEscapers.urlPathSegmentEscaper; + +public class ListNetworksCmdExec extends AbstrSyncDockerCmdExec> implements + ListNetworksCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ListNetworksCmdExec.class); + + public ListNetworksCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected List execute(ListNetworksCmd command) { + WebTarget webTarget = getBaseResource().path("/volumes"); + + if (command.getFilters() != null) + webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); + + LOGGER.trace("GET: {}", webTarget); + + return webTarget.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference>() { + }); + } +} diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index 8128bb915..60c71ba25 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -6,52 +6,8 @@ import java.util.List; import com.github.dockerjava.api.async.ResultCallback; -import com.github.dockerjava.api.command.AttachContainerCmd; +import com.github.dockerjava.api.command.*; import com.github.dockerjava.api.command.AuthCmd.Exec; -import com.github.dockerjava.api.command.BuildImageCmd; -import com.github.dockerjava.api.command.CommitCmd; -import com.github.dockerjava.api.command.ContainerDiffCmd; -import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; -import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; -import com.github.dockerjava.api.command.CopyFileFromContainerCmd; -import com.github.dockerjava.api.command.CreateContainerCmd; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.CreateImageCmd; -import com.github.dockerjava.api.command.CreateImageResponse; -import com.github.dockerjava.api.command.CreateVolumeCmd; -import com.github.dockerjava.api.command.CreateVolumeResponse; -import com.github.dockerjava.api.command.DockerCmdExecFactory; -import com.github.dockerjava.api.command.EventsCmd; -import com.github.dockerjava.api.command.ExecCreateCmd; -import com.github.dockerjava.api.command.ExecStartCmd; -import com.github.dockerjava.api.command.InfoCmd; -import com.github.dockerjava.api.command.InspectContainerCmd; -import com.github.dockerjava.api.command.InspectExecCmd; -import com.github.dockerjava.api.command.InspectImageCmd; -import com.github.dockerjava.api.command.InspectVolumeCmd; -import com.github.dockerjava.api.command.KillContainerCmd; -import com.github.dockerjava.api.command.ListContainersCmd; -import com.github.dockerjava.api.command.ListImagesCmd; -import com.github.dockerjava.api.command.ListVolumesCmd; -import com.github.dockerjava.api.command.LogContainerCmd; -import com.github.dockerjava.api.command.PauseContainerCmd; -import com.github.dockerjava.api.command.PingCmd; -import com.github.dockerjava.api.command.PullImageCmd; -import com.github.dockerjava.api.command.PushImageCmd; -import com.github.dockerjava.api.command.RemoveContainerCmd; -import com.github.dockerjava.api.command.RemoveImageCmd; -import com.github.dockerjava.api.command.RemoveVolumeCmd; -import com.github.dockerjava.api.command.RestartContainerCmd; -import com.github.dockerjava.api.command.SaveImageCmd; -import com.github.dockerjava.api.command.SearchImagesCmd; -import com.github.dockerjava.api.command.StartContainerCmd; -import com.github.dockerjava.api.command.StatsCmd; -import com.github.dockerjava.api.command.StopContainerCmd; -import com.github.dockerjava.api.command.TagImageCmd; -import com.github.dockerjava.api.command.TopContainerCmd; -import com.github.dockerjava.api.command.UnpauseContainerCmd; -import com.github.dockerjava.api.command.VersionCmd; -import com.github.dockerjava.api.command.WaitContainerCmd; import com.github.dockerjava.api.model.BuildResponseItem; /** @@ -349,6 +305,11 @@ public ListVolumesCmd.Exec createListVolumesCmdExec() { return delegate.createListVolumesCmdExec(); } + @Override + public ListNetworksCmd.Exec createListNetworksCmdExec() { + return delegate.createListNetworksCmdExec(); + } + public List getContainerNames() { return new ArrayList(containerNames); } From cc3843eaf8309d0c38cdb19d35a3fc4835d994a0 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Sun, 10 Jan 2016 15:22:11 +0100 Subject: [PATCH 02/17] Added tests for ListNetworksCmd --- .../github/dockerjava/api/DockerClient.java | 3 + .../dockerjava/core/DockerClientImpl.java | 7 +++ .../netty/exec/ListNetworksCmdExec.java | 2 +- .../core/command/ListNetworksCmdImplTest.java | 55 +++++++++++++++++++ .../netty/exec/ListNetworksCmdExecTest.java | 55 +++++++++++++++++++ 5 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index a3a3a9aa0..a0b1b761e 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -29,6 +29,7 @@ import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.LogContainerCmd; import com.github.dockerjava.api.command.PauseContainerCmd; @@ -200,6 +201,8 @@ public interface DockerClient extends Closeable { public ListVolumesCmd listVolumesCmd(); + public ListNetworksCmd listNetworksCmd(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index 05726f735..f0094f973 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -31,6 +31,7 @@ import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.ListNetworksCmd; import com.github.dockerjava.api.command.ListVolumesCmd; import com.github.dockerjava.api.command.LogContainerCmd; import com.github.dockerjava.api.command.PauseContainerCmd; @@ -75,6 +76,7 @@ import com.github.dockerjava.core.command.KillContainerCmdImpl; import com.github.dockerjava.core.command.ListContainersCmdImpl; import com.github.dockerjava.core.command.ListImagesCmdImpl; +import com.github.dockerjava.core.command.ListNetworksCmdImpl; import com.github.dockerjava.core.command.ListVolumesCmdImpl; import com.github.dockerjava.core.command.LogContainerCmdImpl; import com.github.dockerjava.core.command.PauseContainerCmdImpl; @@ -417,6 +419,11 @@ public ListVolumesCmd listVolumesCmd() { return new ListVolumesCmdImpl(getDockerCmdExecFactory().createListVolumesCmdExec()); } + @Override + public ListNetworksCmd listNetworksCmd() { + return new ListNetworksCmdImpl(getDockerCmdExecFactory().createListNetworksCmdExec()); + } + @Override public void close() throws IOException { getDockerCmdExecFactory().close(); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java index e3bcecfad..8f370642f 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/ListNetworksCmdExec.java @@ -24,7 +24,7 @@ public ListNetworksCmdExec(WebTarget baseResource, DockerClientConfig dockerClie @Override protected List execute(ListNetworksCmd command) { - WebTarget webTarget = getBaseResource().path("/volumes"); + WebTarget webTarget = getBaseResource().path("/networks"); if (command.getFilters() != null) webTarget = webTarget.queryParam("filters", urlPathSegmentEscaper().escape(command.getFilters().toString())); diff --git a/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java new file mode 100644 index 000000000..9492ec818 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java @@ -0,0 +1,55 @@ +package com.github.dockerjava.core.command; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; +import java.util.List; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; + +@Test(groups = "integration") +public class ListNetworksCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void listNetworks() throws DockerException { + + List networks = dockerClient.listNetworksCmd().exec(); + + Network network = networks.get(0); + + assertThat(network.getName(), equalTo("bridge")); + assertThat(network.getScope(), equalTo("local")); + assertThat(network.getDriver(), equalTo("bridge")); + assertThat(network.getIpam().getDriver(), equalTo("default")); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java new file mode 100644 index 000000000..1d217fbf6 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java @@ -0,0 +1,55 @@ +package com.github.dockerjava.netty.exec; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +import java.lang.reflect.Method; +import java.util.List; + +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; + +@Test(groups = "integration") +public class ListNetworksCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void listNetworks() throws DockerException { + + List networks = dockerClient.listNetworksCmd().exec(); + + Network network = networks.get(0); + + assertThat(network.getName(), equalTo("bridge")); + assertThat(network.getScope(), equalTo("local")); + assertThat(network.getDriver(), equalTo("bridge")); + assertThat(network.getIpam().getDriver(), equalTo("default")); + } +} From 02bc3515e619e47fd00cf49d798c73447dc08827 Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Sun, 10 Jan 2016 14:56:24 -0500 Subject: [PATCH 03/17] Pull request comments --- .../github/dockerjava/api/model/Network.java | 12 +- .../jaxrs/DockerCmdExecFactoryImpl.java | 91 +++++++++++---- .../netty/DockerCmdExecFactoryImpl.java | 106 ++++++++++++++++-- 3 files changed, 167 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/model/Network.java b/src/main/java/com/github/dockerjava/api/model/Network.java index 2ef74d43b..9b8993f25 100644 --- a/src/main/java/com/github/dockerjava/api/model/Network.java +++ b/src/main/java/com/github/dockerjava/api/model/Network.java @@ -76,10 +76,10 @@ public static class ContainerNetworkConfig { private String macAddress; @JsonProperty("IPv4Address") - private String ipV4Address; + private String ipv4Address; @JsonProperty("IPv6Address") - private String ipV6Address; + private String ipv6Address; public String getEndpointId() { return endpointId; @@ -89,12 +89,12 @@ public String getMacAddress() { return macAddress; } - public String getIpV4Address() { - return ipV4Address; + public String getIpv4Address() { + return ipv4Address; } - public String getIpV6Address() { - return ipV6Address; + public String getIpv6Address() { + return ipv6Address; } @Override diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index 60ec9949a..6b49f169e 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -1,22 +1,56 @@ package com.github.dockerjava.jaxrs; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.ProxySelector; -import java.net.URI; -import java.util.List; - -import javax.net.ssl.SSLContext; -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.ClientRequestFilter; -import javax.ws.rs.client.ClientResponseFilter; -import javax.ws.rs.client.WebTarget; - -import com.github.dockerjava.api.command.*; +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; +import com.github.dockerjava.api.command.AttachContainerCmd; +import com.github.dockerjava.api.command.AuthCmd; +import com.github.dockerjava.api.command.BuildImageCmd; +import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ContainerDiffCmd; +import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; +import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; +import com.github.dockerjava.api.command.CopyFileFromContainerCmd; +import com.github.dockerjava.api.command.CreateContainerCmd; +import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DockerCmdExecFactory; +import com.github.dockerjava.api.command.EventsCmd; +import com.github.dockerjava.api.command.ExecCreateCmd; +import com.github.dockerjava.api.command.ExecStartCmd; +import com.github.dockerjava.api.command.InfoCmd; +import com.github.dockerjava.api.command.InspectContainerCmd; +import com.github.dockerjava.api.command.InspectExecCmd; +import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectVolumeCmd; +import com.github.dockerjava.api.command.KillContainerCmd; +import com.github.dockerjava.api.command.ListContainersCmd; +import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.ListNetworksCmd; +import com.github.dockerjava.api.command.ListVolumesCmd; +import com.github.dockerjava.api.command.LogContainerCmd; +import com.github.dockerjava.api.command.PauseContainerCmd; +import com.github.dockerjava.api.command.PingCmd; +import com.github.dockerjava.api.command.PullImageCmd; +import com.github.dockerjava.api.command.PushImageCmd; +import com.github.dockerjava.api.command.RemoveContainerCmd; +import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveVolumeCmd; +import com.github.dockerjava.api.command.RestartContainerCmd; +import com.github.dockerjava.api.command.SaveImageCmd; +import com.github.dockerjava.api.command.SearchImagesCmd; +import com.github.dockerjava.api.command.StartContainerCmd; +import com.github.dockerjava.api.command.StatsCmd; +import com.github.dockerjava.api.command.StopContainerCmd; +import com.github.dockerjava.api.command.TagImageCmd; +import com.github.dockerjava.api.command.TopContainerCmd; +import com.github.dockerjava.api.command.UnpauseContainerCmd; +import com.github.dockerjava.api.command.VersionCmd; +import com.github.dockerjava.api.command.WaitContainerCmd; +import com.github.dockerjava.api.exception.DockerClientException; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.jaxrs.connector.ApacheConnectorProvider; +import com.github.dockerjava.jaxrs.filter.JsonClientFilter; +import com.github.dockerjava.jaxrs.filter.ResponseStatusExceptionFilter; +import com.github.dockerjava.jaxrs.filter.SelectiveLoggingFilter; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; @@ -29,13 +63,22 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; -import com.github.dockerjava.api.exception.DockerClientException; -import com.github.dockerjava.core.DockerClientConfig; -import com.github.dockerjava.jaxrs.connector.ApacheConnectorProvider; -import com.github.dockerjava.jaxrs.filter.JsonClientFilter; -import com.github.dockerjava.jaxrs.filter.ResponseStatusExceptionFilter; -import com.github.dockerjava.jaxrs.filter.SelectiveLoggingFilter; +import javax.net.ssl.SSLContext; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.ClientRequestFilter; +import javax.ws.rs.client.ClientResponseFilter; +import javax.ws.rs.client.WebTarget; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.ProxySelector; +import java.net.URI; +import java.util.List; + +import static com.google.common.base.Preconditions.checkNotNull; + +//import com.github.dockerjava.api.command.*; //import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; // see https://github.com/docker-java/docker-java/issues/196 diff --git a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java index 83ea83e23..5d516a2f6 100644 --- a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java @@ -1,9 +1,94 @@ package com.github.dockerjava.netty; -import static com.google.common.base.Preconditions.checkNotNull; - -import com.github.dockerjava.api.command.*; -import com.github.dockerjava.netty.exec.*; +import com.github.dockerjava.api.command.AttachContainerCmd; +import com.github.dockerjava.api.command.AuthCmd; +import com.github.dockerjava.api.command.BuildImageCmd; +import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ContainerDiffCmd; +import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; +import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; +import com.github.dockerjava.api.command.CopyFileFromContainerCmd; +import com.github.dockerjava.api.command.CreateContainerCmd; +import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DockerCmdExecFactory; +import com.github.dockerjava.api.command.EventsCmd; +import com.github.dockerjava.api.command.ExecCreateCmd; +import com.github.dockerjava.api.command.ExecStartCmd; +import com.github.dockerjava.api.command.InfoCmd; +import com.github.dockerjava.api.command.InspectContainerCmd; +import com.github.dockerjava.api.command.InspectExecCmd; +import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectVolumeCmd; +import com.github.dockerjava.api.command.KillContainerCmd; +import com.github.dockerjava.api.command.ListContainersCmd; +import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.ListNetworksCmd; +import com.github.dockerjava.api.command.ListVolumesCmd; +import com.github.dockerjava.api.command.LogContainerCmd; +import com.github.dockerjava.api.command.PauseContainerCmd; +import com.github.dockerjava.api.command.PingCmd; +import com.github.dockerjava.api.command.PullImageCmd; +import com.github.dockerjava.api.command.PushImageCmd; +import com.github.dockerjava.api.command.RemoveContainerCmd; +import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveVolumeCmd; +import com.github.dockerjava.api.command.RestartContainerCmd; +import com.github.dockerjava.api.command.SaveImageCmd; +import com.github.dockerjava.api.command.SearchImagesCmd; +import com.github.dockerjava.api.command.StartContainerCmd; +import com.github.dockerjava.api.command.StatsCmd; +import com.github.dockerjava.api.command.StopContainerCmd; +import com.github.dockerjava.api.command.TagImageCmd; +import com.github.dockerjava.api.command.TopContainerCmd; +import com.github.dockerjava.api.command.UnpauseContainerCmd; +import com.github.dockerjava.api.command.VersionCmd; +import com.github.dockerjava.api.command.WaitContainerCmd; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.core.DockerClientImpl; +import com.github.dockerjava.netty.exec.AttachContainerCmdExec; +import com.github.dockerjava.netty.exec.AuthCmdExec; +import com.github.dockerjava.netty.exec.BuildImageCmdExec; +import com.github.dockerjava.netty.exec.CommitCmdExec; +import com.github.dockerjava.netty.exec.ContainerDiffCmdExec; +import com.github.dockerjava.netty.exec.CopyArchiveFromContainerCmdExec; +import com.github.dockerjava.netty.exec.CopyArchiveToContainerCmdExec; +import com.github.dockerjava.netty.exec.CopyFileFromContainerCmdExec; +import com.github.dockerjava.netty.exec.CreateContainerCmdExec; +import com.github.dockerjava.netty.exec.CreateImageCmdExec; +import com.github.dockerjava.netty.exec.CreateVolumeCmdExec; +import com.github.dockerjava.netty.exec.EventsCmdExec; +import com.github.dockerjava.netty.exec.ExecCreateCmdExec; +import com.github.dockerjava.netty.exec.ExecStartCmdExec; +import com.github.dockerjava.netty.exec.InfoCmdExec; +import com.github.dockerjava.netty.exec.InspectContainerCmdExec; +import com.github.dockerjava.netty.exec.InspectExecCmdExec; +import com.github.dockerjava.netty.exec.InspectImageCmdExec; +import com.github.dockerjava.netty.exec.InspectVolumeCmdExec; +import com.github.dockerjava.netty.exec.KillContainerCmdExec; +import com.github.dockerjava.netty.exec.ListContainersCmdExec; +import com.github.dockerjava.netty.exec.ListImagesCmdExec; +import com.github.dockerjava.netty.exec.ListNetworksCmdExec; +import com.github.dockerjava.netty.exec.ListVolumesCmdExec; +import com.github.dockerjava.netty.exec.LogContainerCmdExec; +import com.github.dockerjava.netty.exec.PauseContainerCmdExec; +import com.github.dockerjava.netty.exec.PingCmdExec; +import com.github.dockerjava.netty.exec.PullImageCmdExec; +import com.github.dockerjava.netty.exec.PushImageCmdExec; +import com.github.dockerjava.netty.exec.RemoveContainerCmdExec; +import com.github.dockerjava.netty.exec.RemoveImageCmdExec; +import com.github.dockerjava.netty.exec.RemoveVolumeCmdExec; +import com.github.dockerjava.netty.exec.RestartContainerCmdExec; +import com.github.dockerjava.netty.exec.SaveImageCmdExec; +import com.github.dockerjava.netty.exec.SearchImagesCmdExec; +import com.github.dockerjava.netty.exec.StartContainerCmdExec; +import com.github.dockerjava.netty.exec.StatsCmdExec; +import com.github.dockerjava.netty.exec.StopContainerCmdExec; +import com.github.dockerjava.netty.exec.TagImageCmdExec; +import com.github.dockerjava.netty.exec.TopContainerCmdExec; +import com.github.dockerjava.netty.exec.UnpauseContainerCmdExec; +import com.github.dockerjava.netty.exec.VersionCmdExec; +import com.github.dockerjava.netty.exec.WaitContainerCmdExec; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; @@ -18,21 +103,18 @@ import io.netty.handler.codec.http.HttpClientCodec; import io.netty.handler.logging.LoggingHandler; import io.netty.handler.ssl.SslHandler; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLEngine; +import javax.net.ssl.SSLParameters; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.security.Security; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLEngine; -import javax.net.ssl.SSLParameters; - -import org.bouncycastle.jce.provider.BouncyCastleProvider; - -import com.github.dockerjava.core.DockerClientConfig; -import com.github.dockerjava.core.DockerClientImpl; +import static com.google.common.base.Preconditions.checkNotNull; /** * Experimental implementation of {@link DockerCmdExecFactory} that supports http connection hijacking that is needed to From b129de6339ff7b26a260e460a6a60530ec50268f Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Sun, 10 Jan 2016 15:35:46 -0500 Subject: [PATCH 04/17] Adding InspectNetworkCmd --- .../github/dockerjava/api/DockerClient.java | 3 + .../api/command/DockerCmdExecFactory.java | 2 + .../api/command/InspectNetworkCmd.java | 27 +++++++++ .../dockerjava/core/DockerClientImpl.java | 7 +++ .../core/command/InpectNetworkCmdImpl.java | 24 ++++++++ .../jaxrs/DockerCmdExecFactoryImpl.java | 13 +++-- .../jaxrs/InspectNetworkCmdExec.java | 28 ++++++++++ .../netty/DockerCmdExecFactoryImpl.java | 7 +++ .../netty/exec/InspectNetworkCmdExec.java | 29 ++++++++++ .../core/TestDockerCmdExecFactory.java | 5 ++ .../command/InspectNetworkCmdImplTest.java | 56 +++++++++++++++++++ .../netty/exec/InspectNetworkCmdExecTest.java | 56 +++++++++++++++++++ 12 files changed, 253 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java create mode 100644 src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index a0b1b761e..cef7f209d 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -25,6 +25,7 @@ import com.github.dockerjava.api.command.InspectContainerCmd; import com.github.dockerjava.api.command.InspectExecCmd; import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectNetworkCmd; import com.github.dockerjava.api.command.InspectVolumeCmd; import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; @@ -203,6 +204,8 @@ public interface DockerClient extends Closeable { public ListNetworksCmd listNetworksCmd(); + public InspectNetworkCmd inspectNetworkCmd(); + @Override public void close() throws IOException; 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 9dcb79834..3d31cbc32 100644 --- a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java @@ -95,6 +95,8 @@ public interface DockerCmdExecFactory extends Closeable { public ListNetworksCmd.Exec createListNetworksCmdExec(); + public InspectNetworkCmd.Exec createInspectNetworkCmdExec(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java new file mode 100644 index 000000000..c65843240 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java @@ -0,0 +1,27 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Network; + +import javax.annotation.CheckForNull; + +/** + * Created by andrewk on 1/10/16. + */ +public interface InspectNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getNetworkId(); + + public InspectNetworkCmd withNetworkId(String networkId); + + /** + * @throws NotFoundException + * No such container + */ + @Override + public Network exec() throws NotFoundException; + + public static 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 f0094f973..09c66f9f7 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -27,6 +27,7 @@ import com.github.dockerjava.api.command.InspectContainerCmd; import com.github.dockerjava.api.command.InspectExecCmd; import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectNetworkCmd; import com.github.dockerjava.api.command.InspectVolumeCmd; import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; @@ -69,6 +70,7 @@ import com.github.dockerjava.core.command.ExecCreateCmdImpl; import com.github.dockerjava.core.command.ExecStartCmdImpl; import com.github.dockerjava.core.command.InfoCmdImpl; +import com.github.dockerjava.core.command.InpectNetworkCmdImpl; import com.github.dockerjava.core.command.InspectContainerCmdImpl; import com.github.dockerjava.core.command.InspectExecCmdImpl; import com.github.dockerjava.core.command.InspectImageCmdImpl; @@ -424,6 +426,11 @@ public ListNetworksCmd listNetworksCmd() { return new ListNetworksCmdImpl(getDockerCmdExecFactory().createListNetworksCmdExec()); } + @Override + public InspectNetworkCmd inspectNetworkCmd() { + return new InpectNetworkCmdImpl(getDockerCmdExecFactory().createInspectNetworkCmdExec()); + } + @Override public void close() throws IOException { getDockerCmdExecFactory().close(); diff --git a/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java new file mode 100644 index 000000000..0a0c564c5 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/InpectNetworkCmdImpl.java @@ -0,0 +1,24 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.DockerCmdSyncExec; +import com.github.dockerjava.api.command.InspectNetworkCmd; +import com.github.dockerjava.api.model.Network; + +public class InpectNetworkCmdImpl extends AbstrDockerCmd implements InspectNetworkCmd { + + private String networkId; + + public InpectNetworkCmdImpl(DockerCmdSyncExec exec) { + super(exec); + } + + @Override public String getNetworkId() { + return networkId; + } + + @Override public InspectNetworkCmd withNetworkId(String networkId) { + + this.networkId = networkId; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index 6b49f169e..f408e94e1 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -1,5 +1,7 @@ package com.github.dockerjava.jaxrs; +import static com.google.common.base.Preconditions.checkNotNull; + import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.github.dockerjava.api.command.AttachContainerCmd; import com.github.dockerjava.api.command.AuthCmd; @@ -20,6 +22,7 @@ import com.github.dockerjava.api.command.InspectContainerCmd; import com.github.dockerjava.api.command.InspectExecCmd; import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectNetworkCmd; import com.github.dockerjava.api.command.InspectVolumeCmd; import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; @@ -76,10 +79,6 @@ import java.net.URI; import java.util.List; -import static com.google.common.base.Preconditions.checkNotNull; - -//import com.github.dockerjava.api.command.*; - //import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; // see https://github.com/docker-java/docker-java/issues/196 @@ -451,6 +450,12 @@ public ListNetworksCmd.Exec createListNetworksCmdExec() { return new ListNetworksCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public InspectNetworkCmd.Exec createInspectNetworkCmdExec() { + + return new InspectNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(client, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java new file mode 100644 index 000000000..c5e6b4d0a --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/InspectNetworkCmdExec.java @@ -0,0 +1,28 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.InspectNetworkCmd; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +public class InspectNetworkCmdExec extends AbstrSyncDockerCmdExec implements InspectNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ListNetworksCmdExec.class); + + public InspectNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override protected Network execute(InspectNetworkCmd command) { + + WebTarget webResource = getBaseResource().path("/networks/{id}").resolveTemplate("id", + command.getNetworkId()); + + LOGGER.debug("GET: {}", webResource); + return webResource.request().accept(MediaType.APPLICATION_JSON).get(Network.class); + } +} diff --git a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java index 5d516a2f6..9695680d9 100644 --- a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java @@ -19,6 +19,7 @@ import com.github.dockerjava.api.command.InspectContainerCmd; import com.github.dockerjava.api.command.InspectExecCmd; import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectNetworkCmd; import com.github.dockerjava.api.command.InspectVolumeCmd; import com.github.dockerjava.api.command.KillContainerCmd; import com.github.dockerjava.api.command.ListContainersCmd; @@ -64,6 +65,7 @@ import com.github.dockerjava.netty.exec.InspectContainerCmdExec; import com.github.dockerjava.netty.exec.InspectExecCmdExec; import com.github.dockerjava.netty.exec.InspectImageCmdExec; +import com.github.dockerjava.netty.exec.InspectNetworkCmdExec; import com.github.dockerjava.netty.exec.InspectVolumeCmdExec; import com.github.dockerjava.netty.exec.KillContainerCmdExec; import com.github.dockerjava.netty.exec.ListContainersCmdExec; @@ -510,6 +512,11 @@ public ListNetworksCmd.Exec createListNetworksCmdExec() { return new ListNetworksCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public InspectNetworkCmd.Exec createInspectNetworkCmdExec() { + return new InspectNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(eventLoopGroup, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java new file mode 100644 index 000000000..4694bc7cb --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java @@ -0,0 +1,29 @@ +package com.github.dockerjava.netty.exec; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.github.dockerjava.api.command.InspectNetworkCmd; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class InspectNetworkCmdExec extends AbstrSyncDockerCmdExec implements + InspectNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(InspectNetworkCmdExec.class); + + public InspectNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Network execute(InspectNetworkCmd command) { + WebTarget webResource = getBaseResource().path("/network/{id}").resolveTemplate("id", command.getNetworkId()); + + LOGGER.trace("GET: {}", webResource); + return webResource.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference() { + }); + } +} diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index 60c71ba25..eb2a6bc5d 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -310,6 +310,11 @@ public ListNetworksCmd.Exec createListNetworksCmdExec() { return delegate.createListNetworksCmdExec(); } + @Override + public InspectNetworkCmd.Exec createInspectNetworkCmdExec() { + return delegate.createInspectNetworkCmdExec(); + } + public List getContainerNames() { return new ArrayList(containerNames); } diff --git a/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java new file mode 100644 index 000000000..f24b6dbba --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java @@ -0,0 +1,56 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +@Test(groups = "integration") +public class InspectNetworkCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void inspect() throws DockerException { + + List networks = dockerClient.listNetworksCmd().exec(); + + Network expected = networks.get(0); + + Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); + + assertThat(network.getName(), equalTo(expected.getName())); + assertThat(network.getScope(), equalTo(expected.getScope())); + assertThat(network.getDriver(), equalTo(expected.getDriver())); + assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java new file mode 100644 index 000000000..e88946e37 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java @@ -0,0 +1,56 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +@Test(groups = "integration") +public class InspectNetworkCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void listNetworks() throws DockerException { + + List networks = dockerClient.listNetworksCmd().exec(); + + Network expected = networks.get(0); + + Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); + + assertThat(network.getName(), equalTo(expected.getName())); + assertThat(network.getScope(), equalTo(expected.getScope())); + assertThat(network.getDriver(), equalTo(expected.getDriver())); + assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); + } +} From cc46351b5704b7aa89baae60c074fb24f9e66d63 Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Mon, 11 Jan 2016 22:08:49 -0500 Subject: [PATCH 05/17] Fixing network tests --- .../netty/exec/InspectNetworkCmdExec.java | 2 +- .../core/command/ListNetworksCmdImplTest.java | 15 ++++++++++++++- .../netty/exec/InspectNetworkCmdExecTest.java | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java index 4694bc7cb..51777972f 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExec.java @@ -20,7 +20,7 @@ public InspectNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerCl @Override protected Network execute(InspectNetworkCmd command) { - WebTarget webResource = getBaseResource().path("/network/{id}").resolveTemplate("id", command.getNetworkId()); + WebTarget webResource = getBaseResource().path("/networks/{id}").resolveTemplate("id", command.getNetworkId()); LOGGER.trace("GET: {}", webResource); return webResource.request().accept(MediaType.APPLICATION_JSON).get(new TypeReference() { diff --git a/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java index 9492ec818..1779abdc4 100644 --- a/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java @@ -6,6 +6,7 @@ import java.lang.reflect.Method; import java.util.List; +import org.apache.commons.lang.StringUtils; import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterTest; @@ -45,11 +46,23 @@ public void listNetworks() throws DockerException { List networks = dockerClient.listNetworksCmd().exec(); - Network network = networks.get(0); + Network network = findNetwork(networks, "bridge"); assertThat(network.getName(), equalTo("bridge")); assertThat(network.getScope(), equalTo("local")); assertThat(network.getDriver(), equalTo("bridge")); assertThat(network.getIpam().getDriver(), equalTo("default")); } + + private Network findNetwork(List networks, String name) { + + for (Network network : networks) { + if (StringUtils.equals(network.getName(), name)) { + return network; + } + } + + fail("No bridge network found."); + return null; + } } diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java index e88946e37..4787701c9 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java @@ -40,7 +40,7 @@ public void afterMethod(ITestResult result) { } @Test - public void listNetworks() throws DockerException { + public void inspectNetwork() throws DockerException { List networks = dockerClient.listNetworksCmd().exec(); From d11001c1c9c049a8abc14dec877de007f1d99c46 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Tue, 12 Jan 2016 23:06:15 +0100 Subject: [PATCH 06/17] Added comments and annotations --- .../dockerjava/api/command/InspectNetworkCmd.java | 10 ++++++++-- .../github/dockerjava/api/command/ListNetworksCmd.java | 9 +++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java index c65843240..37227e4d2 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java @@ -2,10 +2,16 @@ import com.github.dockerjava.api.exception.NotFoundException; import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.RemoteApiVersion; import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; /** + * Inspect a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + * * Created by andrewk on 1/10/16. */ public interface InspectNetworkCmd extends SyncDockerCmd { @@ -13,11 +19,11 @@ public interface InspectNetworkCmd extends SyncDockerCmd { @CheckForNull public String getNetworkId(); - public InspectNetworkCmd withNetworkId(String networkId); + public InspectNetworkCmd withNetworkId(@Nonnull String networkId); /** * @throws NotFoundException - * No such container + * No such network */ @Override public Network exec() throws NotFoundException; diff --git a/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java index 1d0dc6c7d..3ecaaa48b 100644 --- a/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java @@ -2,10 +2,19 @@ import com.github.dockerjava.api.model.Filters; import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.RemoteApiVersion; import javax.annotation.CheckForNull; + import java.util.List; +/** + * List networks. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + * + * Created by andrewk on 1/10/16. + */ public interface ListNetworksCmd extends SyncDockerCmd> { @CheckForNull From d4da40a76426c3b554885048748c7027020ef093 Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Thu, 14 Jan 2016 21:05:41 -0500 Subject: [PATCH 07/17] CreateNetwork API --- .../github/dockerjava/api/DockerClient.java | 3 + .../api/command/CreateNetworkCmd.java | 33 ++++++++++ .../api/command/CreateNetworkResponse.java | 36 +++++++++++ .../api/command/DockerCmdExecFactory.java | 2 + .../api/command/InspectNetworkCmd.java | 2 +- .../api/command/ListNetworksCmd.java | 3 + .../api/command/RemoveNetworkCmd.java | 27 +++++++++ .../github/dockerjava/api/model/Network.java | 3 +- .../dockerjava/core/DockerClientImpl.java | 7 +++ .../core/command/CreateNetworkCmdImpl.java | 60 +++++++++++++++++++ .../jaxrs/CreateNetworkCmdExec.java | 31 ++++++++++ .../jaxrs/DockerCmdExecFactoryImpl.java | 7 +++ .../netty/DockerCmdExecFactoryImpl.java | 7 +++ .../netty/exec/CreateNetworkCmdExec.java | 32 ++++++++++ .../core/TestDockerCmdExecFactory.java | 19 ++++++ 15 files changed, 270 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java create mode 100644 src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/CreateNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index cef7f209d..7e59716e9 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -17,6 +17,7 @@ import com.github.dockerjava.api.command.CopyFileFromContainerCmd; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.ExecCreateCmd; @@ -206,6 +207,8 @@ public interface DockerClient extends Closeable { public InspectNetworkCmd inspectNetworkCmd(); + public CreateNetworkCmd createNetworkCmd(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java new file mode 100644 index 000000000..1232af1b1 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java @@ -0,0 +1,33 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.api.model.Network; + +import javax.annotation.CheckForNull; +import java.util.Map; + +/** + * Available since API v1.21. + */ +public interface CreateNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getName(); + + @CheckForNull + public String getDriver(); + + @CheckForNull + public Network.Ipam getIpam(); + + /** The new network's name. Required. */ + public CreateNetworkCmd withName(String name); + + /** Name of the network driver to use. Defaults to bridge. */ + public CreateNetworkCmd withDriver(String driver); + + /** Optional custom IP scheme for the network. */ + public CreateNetworkCmd withIpamConfig(Map config); + + public static interface Exec extends DockerCmdSyncExec { + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java b/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java new file mode 100644 index 000000000..ec4827476 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/CreateNetworkResponse.java @@ -0,0 +1,36 @@ +package com.github.dockerjava.api.command; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.commons.lang.builder.ToStringBuilder; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class CreateNetworkResponse { + + @JsonProperty("Id") + private String id; + + @JsonProperty("Warnings") + private String[] warnings; + + public String getId() { + return id; + } + + public String[] getWarnings() { + return warnings; + } + + public void setId(String id) { + this.id = id; + } + + public void setWarnings(String[] warnings) { + this.warnings = warnings; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } +} 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 3d31cbc32..dc8aeafbc 100644 --- a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java @@ -97,6 +97,8 @@ public interface DockerCmdExecFactory extends Closeable { public InspectNetworkCmd.Exec createInspectNetworkCmdExec(); + public CreateNetworkCmd.Exec createCreateNetworkCmdExec(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java index c65843240..2c2a5b1c2 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectNetworkCmd.java @@ -6,7 +6,7 @@ import javax.annotation.CheckForNull; /** - * Created by andrewk on 1/10/16. + * Available since API v1.21. */ public interface InspectNetworkCmd extends SyncDockerCmd { diff --git a/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java index 1d0dc6c7d..9790b776a 100644 --- a/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ListNetworksCmd.java @@ -6,6 +6,9 @@ import javax.annotation.CheckForNull; import java.util.List; +/** + * Available since API v1.21. + */ public interface ListNetworksCmd extends SyncDockerCmd> { @CheckForNull diff --git a/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java new file mode 100644 index 000000000..0e48e0a95 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java @@ -0,0 +1,27 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.api.exception.NotFoundException; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + +/** + * Available since API v1.21. + */ +public interface RemoveNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getNetworkId(); + + public RemoveNetworkCmd withNetworkId(@Nonnull String networkId); + + /** + * @throws NotFoundException + * No such network + */ + @Override + public Void exec() throws NotFoundException; + + public static interface Exec extends DockerCmdSyncExec { + } +} diff --git a/src/main/java/com/github/dockerjava/api/model/Network.java b/src/main/java/com/github/dockerjava/api/model/Network.java index 9b8993f25..2c0b5fb11 100644 --- a/src/main/java/com/github/dockerjava/api/model/Network.java +++ b/src/main/java/com/github/dockerjava/api/model/Network.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.apache.commons.lang.builder.ToStringBuilder; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -110,7 +111,7 @@ public static class Ipam { private String driver; @JsonProperty("Config") - List> config; + List> config = new ArrayList<>(); public String getDriver() { return driver; diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index 09c66f9f7..26e2c2fff 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -18,6 +18,7 @@ import com.github.dockerjava.api.command.CopyFileFromContainerCmd; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.api.command.EventsCmd; @@ -65,6 +66,7 @@ import com.github.dockerjava.core.command.CopyFileFromContainerCmdImpl; import com.github.dockerjava.core.command.CreateContainerCmdImpl; import com.github.dockerjava.core.command.CreateImageCmdImpl; +import com.github.dockerjava.core.command.CreateNetworkCmdImpl; import com.github.dockerjava.core.command.CreateVolumeCmdImpl; import com.github.dockerjava.core.command.EventsCmdImpl; import com.github.dockerjava.core.command.ExecCreateCmdImpl; @@ -431,6 +433,11 @@ public InspectNetworkCmd inspectNetworkCmd() { return new InpectNetworkCmdImpl(getDockerCmdExecFactory().createInspectNetworkCmdExec()); } + @Override + public CreateNetworkCmd createNetworkCmd() { + return new CreateNetworkCmdImpl(getDockerCmdExecFactory().createCreateNetworkCmdExec()); + } + @Override public void close() throws IOException { getDockerCmdExecFactory().close(); diff --git a/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java new file mode 100644 index 000000000..55a280766 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java @@ -0,0 +1,60 @@ +package com.github.dockerjava.core.command; + + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.api.command.CreateNetworkCmd; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.command.DockerCmdSyncExec; +import com.github.dockerjava.api.model.Network; + +import java.util.Map; + +public class CreateNetworkCmdImpl extends AbstrDockerCmd + implements CreateNetworkCmd { + + @JsonProperty("Name") + private String name; + + @JsonProperty("Driver") + private String driver; + + @JsonProperty("IPAM") + private Network.Ipam ipam; + + public CreateNetworkCmdImpl(DockerCmdSyncExec execution) { + super(execution); + } + + @Override + public String getName() { + return name; + } + + @Override + public String getDriver() { + return driver; + } + + @Override + public Network.Ipam getIpam() { + return ipam; + } + + @Override + public CreateNetworkCmd withName(String name) { + this.name = name; + return this; + } + + @Override + public CreateNetworkCmd withDriver(String driver) { + this.driver = driver; + return this; + } + + @Override + public CreateNetworkCmd withIpamConfig(Map config) { + ipam.getConfig().add(config); + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/CreateNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/CreateNetworkCmdExec.java new file mode 100644 index 000000000..14f22b502 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/CreateNetworkCmdExec.java @@ -0,0 +1,31 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.CreateNetworkCmd; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +import static javax.ws.rs.client.Entity.entity; + +public class CreateNetworkCmdExec extends AbstrSyncDockerCmdExec implements + CreateNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(CreateNetworkCmdExec.class); + + public CreateNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected CreateNetworkResponse execute(CreateNetworkCmd command) { + WebTarget webResource = getBaseResource().path("/networks/create"); + + LOGGER.trace("POST: {}", webResource); + return webResource.request().accept(MediaType.APPLICATION_JSON) + .post(entity(command, MediaType.APPLICATION_JSON), CreateNetworkResponse.class); + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index f408e94e1..3e3bf33b3 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -13,6 +13,7 @@ import com.github.dockerjava.api.command.CopyFileFromContainerCmd; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.api.command.EventsCmd; @@ -456,6 +457,12 @@ public InspectNetworkCmd.Exec createInspectNetworkCmdExec() { return new InspectNetworkCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public CreateNetworkCmd.Exec createCreateNetworkCmdExec() { + + return new CreateNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(client, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java index 9695680d9..c9954c8c1 100644 --- a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java @@ -10,6 +10,7 @@ import com.github.dockerjava.api.command.CopyFileFromContainerCmd; import com.github.dockerjava.api.command.CreateContainerCmd; import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.api.command.EventsCmd; @@ -57,6 +58,7 @@ import com.github.dockerjava.netty.exec.CopyFileFromContainerCmdExec; import com.github.dockerjava.netty.exec.CreateContainerCmdExec; import com.github.dockerjava.netty.exec.CreateImageCmdExec; +import com.github.dockerjava.netty.exec.CreateNetworkCmdExec; import com.github.dockerjava.netty.exec.CreateVolumeCmdExec; import com.github.dockerjava.netty.exec.EventsCmdExec; import com.github.dockerjava.netty.exec.ExecCreateCmdExec; @@ -517,6 +519,11 @@ public InspectNetworkCmd.Exec createInspectNetworkCmdExec() { return new InspectNetworkCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public CreateNetworkCmd.Exec createCreateNetworkCmdExec() { + return new CreateNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(eventLoopGroup, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java new file mode 100644 index 000000000..9c6e4c05e --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java @@ -0,0 +1,32 @@ +package com.github.dockerjava.netty.exec; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.github.dockerjava.api.command.CreateNetworkCmd; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.CreateVolumeResponse; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CreateNetworkCmdExec extends AbstrSyncDockerCmdExec implements + CreateNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(CreateNetworkCmdExec.class); + + public CreateNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected CreateNetworkResponse execute(CreateNetworkCmd command) { + WebTarget webResource = getBaseResource().path("/networks/create"); + + LOGGER.trace("POST: {}", webResource); + return webResource.request().accept(MediaType.APPLICATION_JSON) + .post(command, new TypeReference() { + }); + } +} diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index eb2a6bc5d..3c8222222 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -24,6 +24,8 @@ public class TestDockerCmdExecFactory implements DockerCmdExecFactory { private List volumeNames = new ArrayList(); + private List networkNames = new ArrayList<>(); + private DockerCmdExecFactory delegate; public TestDockerCmdExecFactory(DockerCmdExecFactory delegate) { @@ -315,6 +317,19 @@ public InspectNetworkCmd.Exec createInspectNetworkCmdExec() { return delegate.createInspectNetworkCmdExec(); } + @Override + public CreateNetworkCmd.Exec createCreateNetworkCmdExec() { + + return new CreateNetworkCmd.Exec() { + @Override + public CreateNetworkResponse exec(CreateNetworkCmd command) { + CreateNetworkResponse result = delegate.createCreateNetworkCmdExec().exec(command); + networkNames.add(command.getName()); + return result; + } + }; + } + public List getContainerNames() { return new ArrayList(containerNames); } @@ -326,4 +341,8 @@ public List getImageNames() { public List getVolumeNames() { return new ArrayList(volumeNames); } + + public List getNetworkNames() { + return new ArrayList<>(networkNames); + } } From 392a976eecd11d0b24dd92ea51927c9ef28eb83f Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Thu, 14 Jan 2016 21:24:19 -0500 Subject: [PATCH 08/17] RemoveNetwork API --- .../github/dockerjava/api/DockerClient.java | 3 +++ .../api/command/DockerCmdExecFactory.java | 2 ++ .../dockerjava/core/DockerClientImpl.java | 7 +++++++ .../jaxrs/DockerCmdExecFactoryImpl.java | 7 +++++++ .../netty/DockerCmdExecFactoryImpl.java | 7 +++++++ .../core/TestDockerCmdExecFactory.java | 20 +++++++++++++++---- 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index 7e59716e9..c62e31535 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -40,6 +40,7 @@ import com.github.dockerjava.api.command.PushImageCmd; import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; @@ -209,6 +210,8 @@ public interface DockerClient extends Closeable { public CreateNetworkCmd createNetworkCmd(); + public RemoveNetworkCmd removeNetworkCmd(@Nonnull String networkId); + @Override public void close() throws IOException; 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 dc8aeafbc..d64d01676 100644 --- a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java @@ -99,6 +99,8 @@ public interface DockerCmdExecFactory extends Closeable { public CreateNetworkCmd.Exec createCreateNetworkCmdExec(); + public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index 26e2c2fff..7c9130035 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -42,6 +42,7 @@ import com.github.dockerjava.api.command.PushImageCmd; import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; @@ -89,6 +90,7 @@ import com.github.dockerjava.core.command.PushImageCmdImpl; import com.github.dockerjava.core.command.RemoveContainerCmdImpl; import com.github.dockerjava.core.command.RemoveImageCmdImpl; +import com.github.dockerjava.core.command.RemoveNetworkCmdImpl; import com.github.dockerjava.core.command.RemoveVolumeCmdImpl; import com.github.dockerjava.core.command.RestartContainerCmdImpl; import com.github.dockerjava.core.command.SaveImageCmdImpl; @@ -438,6 +440,11 @@ public CreateNetworkCmd createNetworkCmd() { return new CreateNetworkCmdImpl(getDockerCmdExecFactory().createCreateNetworkCmdExec()); } + @Override + public RemoveNetworkCmd removeNetworkCmd(String networkId) { + return new RemoveNetworkCmdImpl(getDockerCmdExecFactory().createRemoveNetworkCmdExec(), networkId); + } + @Override public void close() throws IOException { getDockerCmdExecFactory().close(); diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index 3e3bf33b3..1d26276ef 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -37,6 +37,7 @@ import com.github.dockerjava.api.command.PushImageCmd; import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; @@ -463,6 +464,12 @@ public CreateNetworkCmd.Exec createCreateNetworkCmdExec() { return new CreateNetworkCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() { + + return new RemoveNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(client, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java index c9954c8c1..113560a75 100644 --- a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java @@ -34,6 +34,7 @@ import com.github.dockerjava.api.command.PushImageCmd; import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; import com.github.dockerjava.api.command.RemoveVolumeCmd; import com.github.dockerjava.api.command.RestartContainerCmd; import com.github.dockerjava.api.command.SaveImageCmd; @@ -81,6 +82,7 @@ import com.github.dockerjava.netty.exec.PushImageCmdExec; import com.github.dockerjava.netty.exec.RemoveContainerCmdExec; import com.github.dockerjava.netty.exec.RemoveImageCmdExec; +import com.github.dockerjava.netty.exec.RemoveNetworkCmdExec; import com.github.dockerjava.netty.exec.RemoveVolumeCmdExec; import com.github.dockerjava.netty.exec.RestartContainerCmdExec; import com.github.dockerjava.netty.exec.SaveImageCmdExec; @@ -524,6 +526,11 @@ public CreateNetworkCmd.Exec createCreateNetworkCmdExec() { return new CreateNetworkCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() { + return new RemoveNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(eventLoopGroup, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index 3c8222222..97be5dd49 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -24,7 +24,7 @@ public class TestDockerCmdExecFactory implements DockerCmdExecFactory { private List volumeNames = new ArrayList(); - private List networkNames = new ArrayList<>(); + private List networkIds = new ArrayList<>(); private DockerCmdExecFactory delegate; @@ -324,12 +324,24 @@ public CreateNetworkCmd.Exec createCreateNetworkCmdExec() { @Override public CreateNetworkResponse exec(CreateNetworkCmd command) { CreateNetworkResponse result = delegate.createCreateNetworkCmdExec().exec(command); - networkNames.add(command.getName()); + networkIds.add(result.getId()); return result; } }; } + @Override + public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() { + return new RemoveNetworkCmd.Exec() { + @Override + public Void exec(RemoveNetworkCmd command) { + delegate.createRemoveNetworkCmdExec().exec(command); + networkIds.remove(command.getNetworkId()); + return null; + } + }; + } + public List getContainerNames() { return new ArrayList(containerNames); } @@ -342,7 +354,7 @@ public List getVolumeNames() { return new ArrayList(volumeNames); } - public List getNetworkNames() { - return new ArrayList<>(networkNames); + public List getNetworkIds() { + return new ArrayList<>(networkIds); } } From d6565058dc9a46f31500be1ae6f1550de1e96ede Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Thu, 14 Jan 2016 21:24:25 -0500 Subject: [PATCH 09/17] RemoveNetwork API --- .../core/command/RemoveNetworkCmdImpl.java | 26 ++++++++++++++++ .../jaxrs/RemoveNetworkCmdExec.java | 30 +++++++++++++++++++ .../netty/exec/RemoveNetworkCmdExec.java | 30 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 src/main/java/com/github/dockerjava/core/command/RemoveNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java diff --git a/src/main/java/com/github/dockerjava/core/command/RemoveNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/RemoveNetworkCmdImpl.java new file mode 100644 index 000000000..ced7279f9 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/RemoveNetworkCmdImpl.java @@ -0,0 +1,26 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.DockerCmdSyncExec; +import com.github.dockerjava.api.command.RemoveNetworkCmd; + +public class RemoveNetworkCmdImpl extends AbstrDockerCmd implements RemoveNetworkCmd { + + private String networkId; + + public RemoveNetworkCmdImpl(DockerCmdSyncExec execution, String networkId) { + super(execution); + withNetworkId(networkId); + } + + @Override + public String getNetworkId() { + + return networkId; + } + + @Override + public RemoveNetworkCmd withNetworkId(String networkId) { + this.networkId = networkId; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java new file mode 100644 index 000000000..84f115d4c --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/RemoveNetworkCmdExec.java @@ -0,0 +1,30 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.RemoveNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +public class RemoveNetworkCmdExec extends AbstrSyncDockerCmdExec + implements RemoveNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(RemoveNetworkCmdExec.class); + + public RemoveNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(RemoveNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId()); + + LOGGER.trace("DELETE: {}", webTarget); + webTarget.request().accept(MediaType.APPLICATION_JSON).delete().close(); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java new file mode 100644 index 000000000..860ac3eb7 --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java @@ -0,0 +1,30 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.RemoveContainerCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.MediaType; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RemoveNetworkCmdExec extends AbstrSyncDockerCmdExec implements + RemoveNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(RemoveNetworkCmdExec.class); + + public RemoveNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(RemoveNetworkCmd command) { + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId()); + + LOGGER.trace("DELETE: {}", webTarget); + webTarget.request().accept(MediaType.APPLICATION_JSON).delete(); + + return null; + } + +} From 081cb739d28f967f8b32fc64a70ff1dd1d07bf69 Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Thu, 14 Jan 2016 21:25:50 -0500 Subject: [PATCH 10/17] Cleaning up imports --- .../com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java | 2 -- .../com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java | 1 - 2 files changed, 3 deletions(-) diff --git a/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java index 9c6e4c05e..cfc825e80 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExec.java @@ -3,8 +3,6 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateNetworkResponse; -import com.github.dockerjava.api.command.CreateVolumeCmd; -import com.github.dockerjava.api.command.CreateVolumeResponse; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.netty.MediaType; import com.github.dockerjava.netty.WebTarget; diff --git a/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java index 860ac3eb7..deb52100d 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExec.java @@ -1,6 +1,5 @@ package com.github.dockerjava.netty.exec; -import com.github.dockerjava.api.command.RemoveContainerCmd; import com.github.dockerjava.api.command.RemoveNetworkCmd; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.netty.MediaType; From 8dddd45f6dee8dc957799699a53041e5e43bad1c Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Thu, 14 Jan 2016 22:01:01 -0500 Subject: [PATCH 11/17] Create and Remove Network tests --- .../client/AbstractDockerClientTest.java | 9 +++ .../command/CreateNetworkCmdImplTest.java | 52 +++++++++++++ .../command/RemoveNetworkCmdImplTest.java | 76 +++++++++++++++++++ .../netty/exec/CreateNetworkCmdExecTest.java | 52 +++++++++++++ .../netty/exec/RemoveNetworkCmdExecTest.java | 76 +++++++++++++++++++ 5 files changed, 265 insertions(+) create mode 100644 src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java create mode 100644 src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java diff --git a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java index 8751e07e5..ebacf93f8 100644 --- a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java +++ b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java @@ -118,6 +118,15 @@ public void afterMethod(ITestResult result) { } } + for (String networkId : dockerCmdExecFactory.getNetworkIds()) { + LOG.info("Cleaning up temporary network with {}", networkId); + try { + dockerClient.removeNetworkCmd(networkId).exec(); + } catch (DockerException ignore) { + // ignore.printStackTrace(); + } + } + LOG.info("################################## END OF {} ##################################\n", result.getName()); } diff --git a/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java new file mode 100644 index 000000000..eefeb535f --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/CreateNetworkCmdImplTest.java @@ -0,0 +1,52 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; + +@Test(groups = "integration") +public class CreateNetworkCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void createNetwork() throws DockerException { + + String networkName = "testNetwork"; + + CreateNetworkResponse createNetworkResponse = dockerClient.createNetworkCmd().withName(networkName).exec(); + + assertNotNull(createNetworkResponse.getId()); + + Network network = dockerClient.inspectNetworkCmd().withNetworkId(createNetworkResponse.getId()).exec(); + assertEquals(network.getName(), networkName); + assertEquals(network.getDriver(), "bridge"); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java new file mode 100644 index 000000000..e1e4e45fe --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/RemoveNetworkCmdImplTest.java @@ -0,0 +1,76 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.hamcrest.Matcher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +@Test(groups = "integration") +public class RemoveNetworkCmdImplTest extends AbstractDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(RemoveNetworkCmdImplTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void removeNetwork() throws DockerException { + + CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("test-network").exec(); + + LOG.info("Removing network: {}", network.getId()); + dockerClient.removeNetworkCmd(network.getId()).exec(); + + List networks = dockerClient.listNetworksCmd().exec(); + + Matcher matcher = not(hasItem(hasField("id", startsWith(network.getId())))); + assertThat(networks, matcher); + + } + + @Test + public void removeNonExistingContainer() throws DockerException { + try { + dockerClient.removeNetworkCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java new file mode 100644 index 000000000..fa9962826 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/CreateNetworkCmdExecTest.java @@ -0,0 +1,52 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; + +@Test(groups = "integration") +public class CreateNetworkCmdExecTest extends AbstractNettyDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void createNetwork() throws DockerException { + + String networkName = "testNetwork"; + + CreateNetworkResponse createNetworkResponse = dockerClient.createNetworkCmd().withName(networkName).exec(); + + assertNotNull(createNetworkResponse.getId()); + + Network network = dockerClient.inspectNetworkCmd().withNetworkId(createNetworkResponse.getId()).exec(); + assertEquals(network.getName(), networkName); + assertEquals(network.getDriver(), "bridge"); + } +} diff --git a/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java new file mode 100644 index 000000000..9fda49f21 --- /dev/null +++ b/src/test/java/com/github/dockerjava/netty/exec/RemoveNetworkCmdExecTest.java @@ -0,0 +1,76 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.netty.AbstractNettyDockerClientTest; +import org.hamcrest.Matcher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasItem; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.startsWith; +import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; + +@Test(groups = "integration") +public class RemoveNetworkCmdExecTest extends AbstractNettyDockerClientTest { + + public static final Logger LOG = LoggerFactory.getLogger(RemoveNetworkCmdExecTest.class); + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test(groups = "ignoreInCircleCi") + public void removeNetwork() throws DockerException { + + CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("test-network").exec(); + + LOG.info("Removing network: {}", network.getId()); + dockerClient.removeNetworkCmd(network.getId()).exec(); + + List networks = dockerClient.listNetworksCmd().exec(); + + Matcher matcher = not(hasItem(hasField("id", startsWith(network.getId())))); + assertThat(networks, matcher); + + } + + @Test + public void removeNonExistingContainer() throws DockerException { + try { + dockerClient.removeNetworkCmd("non-existing").exec(); + fail("expected NotFoundException"); + } catch (NotFoundException e) { + } + } + +} From a07f6f7175c79b96c600a311c8d0d729815e4c71 Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Thu, 14 Jan 2016 22:14:23 -0500 Subject: [PATCH 12/17] Updating javadoc --- .../com/github/dockerjava/api/command/CreateNetworkCmd.java | 5 ++++- .../com/github/dockerjava/api/command/RemoveNetworkCmd.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java index 1232af1b1..1523c6439 100644 --- a/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java @@ -1,12 +1,15 @@ package com.github.dockerjava.api.command; import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.core.RemoteApiVersion; import javax.annotation.CheckForNull; import java.util.Map; /** - * Available since API v1.21. + * Create a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} */ public interface CreateNetworkCmd extends SyncDockerCmd { diff --git a/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java index 0e48e0a95..3dcb428e2 100644 --- a/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/RemoveNetworkCmd.java @@ -1,12 +1,15 @@ package com.github.dockerjava.api.command; import com.github.dockerjava.api.exception.NotFoundException; +import com.github.dockerjava.core.RemoteApiVersion; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; /** - * Available since API v1.21. + * Remove a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} */ public interface RemoveNetworkCmd extends SyncDockerCmd { From 350d47ebcd3d1c3017f96e65e3c19e0572b210c6 Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Fri, 15 Jan 2016 20:58:54 +0100 Subject: [PATCH 13/17] Polished CreateNetworkCmd --- .../api/command/CreateNetworkCmd.java | 18 ++++++++---- .../github/dockerjava/api/model/Network.java | 29 +++++++++++++++++-- .../core/command/CreateNetworkCmdImpl.java | 19 +++++++++--- .../client/AbstractDockerClientTest.java | 14 +++++++++ .../command/InspectNetworkCmdImplTest.java | 3 +- .../core/command/ListNetworksCmdImplTest.java | 13 --------- .../netty/exec/InspectNetworkCmdExecTest.java | 5 ++-- .../netty/exec/ListNetworksCmdExecTest.java | 15 ++++++---- 8 files changed, 82 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java index 1523c6439..2e3cd92a0 100644 --- a/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/CreateNetworkCmd.java @@ -1,10 +1,13 @@ package com.github.dockerjava.api.command; -import com.github.dockerjava.api.model.Network; -import com.github.dockerjava.core.RemoteApiVersion; +import java.util.Map; import javax.annotation.CheckForNull; -import java.util.Map; +import javax.annotation.Nonnull; + +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.api.model.Network.Ipam; +import com.github.dockerjava.core.RemoteApiVersion; /** * Create a network. @@ -23,13 +26,16 @@ public interface CreateNetworkCmd extends SyncDockerCmd { public Network.Ipam getIpam(); /** The new network's name. Required. */ - public CreateNetworkCmd withName(String name); + public CreateNetworkCmd withName(@Nonnull String name); + + /** Optional custom IP scheme for the network. */ + public CreateNetworkCmd withIpamConfig(Ipam.Config config); /** Name of the network driver to use. Defaults to bridge. */ public CreateNetworkCmd withDriver(String driver); - /** Optional custom IP scheme for the network. */ - public CreateNetworkCmd withIpamConfig(Map config); + /** Driver specific options */ + public CreateNetworkCmd withOptions(Map options); public static interface Exec extends DockerCmdSyncExec { } diff --git a/src/main/java/com/github/dockerjava/api/model/Network.java b/src/main/java/com/github/dockerjava/api/model/Network.java index 2c0b5fb11..d62d83019 100644 --- a/src/main/java/com/github/dockerjava/api/model/Network.java +++ b/src/main/java/com/github/dockerjava/api/model/Network.java @@ -111,13 +111,13 @@ public static class Ipam { private String driver; @JsonProperty("Config") - List> config = new ArrayList<>(); + List config = new ArrayList<>(); public String getDriver() { return driver; } - public List> getConfig() { + public List getConfig() { return config; } @@ -125,5 +125,30 @@ public List> getConfig() { public String toString() { return ToStringBuilder.reflectionToString(this); } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Config { + + @JsonProperty("Subnet") + private String subnet; + + @JsonProperty("IPRange") + private String ipRange; + + @JsonProperty("Gateway") + private String gateway; + + public String getSubnet() { + return subnet; + } + + public String getIpRange() { + return ipRange; + } + + public String getGateway() { + return gateway; + } + } } } diff --git a/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java index 55a280766..fba16dfb9 100644 --- a/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/CreateNetworkCmdImpl.java @@ -1,13 +1,15 @@ package com.github.dockerjava.core.command; +import java.util.HashMap; +import java.util.Map; + import com.fasterxml.jackson.annotation.JsonProperty; import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateNetworkResponse; import com.github.dockerjava.api.command.DockerCmdSyncExec; import com.github.dockerjava.api.model.Network; - -import java.util.Map; +import com.github.dockerjava.api.model.Network.Ipam; public class CreateNetworkCmdImpl extends AbstrDockerCmd implements CreateNetworkCmd { @@ -21,6 +23,9 @@ public class CreateNetworkCmdImpl extends AbstrDockerCmd options = new HashMap<>(); + public CreateNetworkCmdImpl(DockerCmdSyncExec execution) { super(execution); } @@ -53,8 +58,14 @@ public CreateNetworkCmd withDriver(String driver) { } @Override - public CreateNetworkCmd withIpamConfig(Map config) { - ipam.getConfig().add(config); + public CreateNetworkCmd withIpamConfig(Ipam.Config config) { + this.ipam.getConfig().add(config); + return this; + } + + @Override + public CreateNetworkCmd withOptions(Map options) { + this.options = options; return this; } } diff --git a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java index ebacf93f8..37e2916e6 100644 --- a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java +++ b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java @@ -12,6 +12,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; +import org.apache.commons.lang.StringUtils; import org.hamcrest.FeatureMatcher; import org.hamcrest.Matcher; import org.slf4j.Logger; @@ -24,6 +25,7 @@ import com.github.dockerjava.api.command.InspectContainerResponse.Mount; import com.github.dockerjava.api.exception.DockerException; import com.github.dockerjava.api.model.Frame; +import com.github.dockerjava.api.model.Network; import com.github.dockerjava.api.model.Volume; import com.github.dockerjava.core.DockerClientBuilder; import com.github.dockerjava.core.DockerClientConfig; @@ -241,4 +243,16 @@ protected String buildImage(File baseDir) throws Exception { .awaitImageId(); } + protected Network findNetwork(List networks, String name) { + + for (Network network : networks) { + if (StringUtils.equals(network.getName(), name)) { + return network; + } + } + + fail("No network found."); + return null; + } + } diff --git a/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java index f24b6dbba..f1ffa02e6 100644 --- a/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java @@ -44,13 +44,14 @@ public void inspect() throws DockerException { List networks = dockerClient.listNetworksCmd().exec(); - Network expected = networks.get(0); + Network expected = findNetwork(networks, "bridge"); Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); assertThat(network.getName(), equalTo(expected.getName())); assertThat(network.getScope(), equalTo(expected.getScope())); assertThat(network.getDriver(), equalTo(expected.getDriver())); + assertThat(network.getIpam().getConfig().get(0).getSubnet(), equalTo(expected.getIpam().getConfig().get(0).getSubnet())); assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); } } diff --git a/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java index 1779abdc4..192adb4bc 100644 --- a/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/ListNetworksCmdImplTest.java @@ -6,7 +6,6 @@ import java.lang.reflect.Method; import java.util.List; -import org.apache.commons.lang.StringUtils; import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterTest; @@ -53,16 +52,4 @@ public void listNetworks() throws DockerException { assertThat(network.getDriver(), equalTo("bridge")); assertThat(network.getIpam().getDriver(), equalTo("default")); } - - private Network findNetwork(List networks, String name) { - - for (Network network : networks) { - if (StringUtils.equals(network.getName(), name)) { - return network; - } - } - - fail("No bridge network found."); - return null; - } } diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java index 4787701c9..bd27097d9 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java @@ -40,17 +40,18 @@ public void afterMethod(ITestResult result) { } @Test - public void inspectNetwork() throws DockerException { + public void inspect() throws DockerException { List networks = dockerClient.listNetworksCmd().exec(); - Network expected = networks.get(0); + Network expected = findNetwork(networks, "bridge"); Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); assertThat(network.getName(), equalTo(expected.getName())); assertThat(network.getScope(), equalTo(expected.getScope())); assertThat(network.getDriver(), equalTo(expected.getDriver())); + assertThat(network.getIpam().getConfig().get(0).getSubnet(), equalTo(expected.getIpam().getConfig().get(0).getSubnet())); assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); } } diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java index 1d217fbf6..7e6892832 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java @@ -41,15 +41,18 @@ public void afterMethod(ITestResult result) { } @Test - public void listNetworks() throws DockerException { + public void inspect() throws DockerException { List networks = dockerClient.listNetworksCmd().exec(); - Network network = networks.get(0); + Network expected = findNetwork(networks, "bridge"); - assertThat(network.getName(), equalTo("bridge")); - assertThat(network.getScope(), equalTo("local")); - assertThat(network.getDriver(), equalTo("bridge")); - assertThat(network.getIpam().getDriver(), equalTo("default")); + Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); + + assertThat(network.getName(), equalTo(expected.getName())); + assertThat(network.getScope(), equalTo(expected.getScope())); + assertThat(network.getDriver(), equalTo(expected.getDriver())); + assertThat(network.getIpam().getConfig().get(0).getSubnet(), equalTo(expected.getIpam().getConfig().get(0).getSubnet())); + assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); } } From 825f8a7cd510bc72ecfd55031ef797da480d091c Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Fri, 15 Jan 2016 21:16:59 +0100 Subject: [PATCH 14/17] Tweak test --- .../core/command/InspectNetworkCmdImplTest.java | 2 +- .../netty/exec/InspectNetworkCmdExecTest.java | 2 +- .../netty/exec/ListNetworksCmdExecTest.java | 15 ++++++--------- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java index f1ffa02e6..9d992eb15 100644 --- a/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/InspectNetworkCmdImplTest.java @@ -40,7 +40,7 @@ public void afterMethod(ITestResult result) { } @Test - public void inspect() throws DockerException { + public void inspectNetwork() throws DockerException { List networks = dockerClient.listNetworksCmd().exec(); diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java index bd27097d9..7cbab660b 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectNetworkCmdExecTest.java @@ -40,7 +40,7 @@ public void afterMethod(ITestResult result) { } @Test - public void inspect() throws DockerException { + public void inspectNetwork() throws DockerException { List networks = dockerClient.listNetworksCmd().exec(); diff --git a/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java index 7e6892832..8a5d975f0 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/ListNetworksCmdExecTest.java @@ -41,18 +41,15 @@ public void afterMethod(ITestResult result) { } @Test - public void inspect() throws DockerException { + public void listNetworks() throws DockerException { List networks = dockerClient.listNetworksCmd().exec(); - Network expected = findNetwork(networks, "bridge"); + Network network = findNetwork(networks, "bridge"); - Network network = dockerClient.inspectNetworkCmd().withNetworkId(expected.getId()).exec(); - - assertThat(network.getName(), equalTo(expected.getName())); - assertThat(network.getScope(), equalTo(expected.getScope())); - assertThat(network.getDriver(), equalTo(expected.getDriver())); - assertThat(network.getIpam().getConfig().get(0).getSubnet(), equalTo(expected.getIpam().getConfig().get(0).getSubnet())); - assertThat(network.getIpam().getDriver(), equalTo(expected.getIpam().getDriver())); + assertThat(network.getName(), equalTo("bridge")); + assertThat(network.getScope(), equalTo("local")); + assertThat(network.getDriver(), equalTo("bridge")); + assertThat(network.getIpam().getDriver(), equalTo("default")); } } From 0cb6cdbcbd512d69e6a70799489a75470b9a5f71 Mon Sep 17 00:00:00 2001 From: Andrew Keely Date: Fri, 15 Jan 2016 22:21:41 -0500 Subject: [PATCH 15/17] Added Connect To and Disconnect From Network APIs --- .../github/dockerjava/api/DockerClient.java | 6 ++ .../api/command/ConnectToNetworkCmd.java | 26 ++++++++ .../api/command/DisconnectFromNetworkCmd.java | 26 ++++++++ .../api/command/DockerCmdExecFactory.java | 4 ++ .../dockerjava/core/DockerClientImpl.java | 14 +++++ .../core/command/ConnectToNetworkCmdImpl.java | 38 ++++++++++++ .../command/DisconnectFromNetworkCmdImpl.java | 39 ++++++++++++ .../jaxrs/ConnectToNetworkCmdExec.java | 32 ++++++++++ .../jaxrs/DisconnectFromNetworkCmdExec.java | 32 ++++++++++ .../jaxrs/DockerCmdExecFactoryImpl.java | 14 +++++ .../netty/DockerCmdExecFactoryImpl.java | 14 +++++ .../netty/exec/ConnectToNetworkCmdExec.java | 29 +++++++++ .../exec/DisconnectFromNetworkCmdExec.java | 29 +++++++++ .../core/TestDockerCmdExecFactory.java | 10 ++++ .../command/ConnectToNetworkCmdImplTest.java | 54 +++++++++++++++++ .../DisconnectFromNetworkCmdImplTest.java | 59 +++++++++++++++++++ 16 files changed, 426 insertions(+) create mode 100644 src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java create mode 100644 src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java create mode 100644 src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java create mode 100644 src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java create mode 100644 src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java diff --git a/src/main/java/com/github/dockerjava/api/DockerClient.java b/src/main/java/com/github/dockerjava/api/DockerClient.java index c62e31535..5db2967ff 100644 --- a/src/main/java/com/github/dockerjava/api/DockerClient.java +++ b/src/main/java/com/github/dockerjava/api/DockerClient.java @@ -11,6 +11,7 @@ import com.github.dockerjava.api.command.AuthCmd; import com.github.dockerjava.api.command.BuildImageCmd; import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; import com.github.dockerjava.api.command.ContainerDiffCmd; import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; @@ -19,6 +20,7 @@ import com.github.dockerjava.api.command.CreateImageCmd; import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.ExecCreateCmd; import com.github.dockerjava.api.command.ExecStartCmd; @@ -212,6 +214,10 @@ public interface DockerClient extends Closeable { public RemoveNetworkCmd removeNetworkCmd(@Nonnull String networkId); + public ConnectToNetworkCmd connectToNetworkCmd(); + + public DisconnectFromNetworkCmd disconnectFromNetworkCmd(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java new file mode 100644 index 000000000..2ced91cee --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java @@ -0,0 +1,26 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.core.RemoteApiVersion; + +import javax.annotation.CheckForNull; + +/** + * Connects a container to a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + */ +public interface ConnectToNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getNetworkId(); + + @CheckForNull + public String getContainerId(); + + public ConnectToNetworkCmd withNetworkId(String networkId); + + public ConnectToNetworkCmd withContainerId(String containerId); + + public static interface Exec extends DockerCmdSyncExec { + } +} diff --git a/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java new file mode 100644 index 000000000..d35f0382f --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java @@ -0,0 +1,26 @@ +package com.github.dockerjava.api.command; + +import com.github.dockerjava.core.RemoteApiVersion; + +import javax.annotation.CheckForNull; + +/** + * Disconnects a container from a network. + * + * @since {@link RemoteApiVersion#VERSION_1_21} + */ +public interface DisconnectFromNetworkCmd extends SyncDockerCmd { + + @CheckForNull + public String getNetworkId(); + + @CheckForNull + public String getContainerId(); + + public DisconnectFromNetworkCmd withNetworkId(String networkId); + + public DisconnectFromNetworkCmd withContainerId(String containerId); + + public static interface Exec extends DockerCmdSyncExec { + } +} 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 d64d01676..fb1715e38 100644 --- a/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java +++ b/src/main/java/com/github/dockerjava/api/command/DockerCmdExecFactory.java @@ -101,6 +101,10 @@ public interface DockerCmdExecFactory extends Closeable { public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec(); + public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec(); + + public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec(); + @Override public void close() throws IOException; diff --git a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java index 7c9130035..ede135613 100644 --- a/src/main/java/com/github/dockerjava/core/DockerClientImpl.java +++ b/src/main/java/com/github/dockerjava/core/DockerClientImpl.java @@ -12,6 +12,7 @@ import com.github.dockerjava.api.command.AuthCmd; import com.github.dockerjava.api.command.BuildImageCmd; import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; import com.github.dockerjava.api.command.ContainerDiffCmd; import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; @@ -20,6 +21,7 @@ import com.github.dockerjava.api.command.CreateImageCmd; import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.ExecCreateCmd; @@ -61,6 +63,7 @@ import com.github.dockerjava.core.command.AuthCmdImpl; import com.github.dockerjava.core.command.BuildImageCmdImpl; import com.github.dockerjava.core.command.CommitCmdImpl; +import com.github.dockerjava.core.command.ConnectToNetworkCmdImpl; import com.github.dockerjava.core.command.ContainerDiffCmdImpl; import com.github.dockerjava.core.command.CopyArchiveFromContainerCmdImpl; import com.github.dockerjava.core.command.CopyArchiveToContainerCmdImpl; @@ -69,6 +72,7 @@ import com.github.dockerjava.core.command.CreateImageCmdImpl; import com.github.dockerjava.core.command.CreateNetworkCmdImpl; import com.github.dockerjava.core.command.CreateVolumeCmdImpl; +import com.github.dockerjava.core.command.DisconnectFromNetworkCmdImpl; import com.github.dockerjava.core.command.EventsCmdImpl; import com.github.dockerjava.core.command.ExecCreateCmdImpl; import com.github.dockerjava.core.command.ExecStartCmdImpl; @@ -445,6 +449,16 @@ public RemoveNetworkCmd removeNetworkCmd(String networkId) { return new RemoveNetworkCmdImpl(getDockerCmdExecFactory().createRemoveNetworkCmdExec(), networkId); } + @Override + public ConnectToNetworkCmd connectToNetworkCmd() { + return new ConnectToNetworkCmdImpl(getDockerCmdExecFactory().createConnectToNetworkCmdExec()); + } + + @Override + public DisconnectFromNetworkCmd disconnectFromNetworkCmd() { + return new DisconnectFromNetworkCmdImpl(getDockerCmdExecFactory().createDisconnectFromNetworkCmdExec()); + } + @Override public void close() throws IOException { getDockerCmdExecFactory().close(); diff --git a/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java new file mode 100644 index 000000000..f08450238 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java @@ -0,0 +1,38 @@ +package com.github.dockerjava.core.command; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; +import com.github.dockerjava.api.command.DockerCmdSyncExec; + +public class ConnectToNetworkCmdImpl extends AbstrDockerCmd implements ConnectToNetworkCmd { + + @JsonIgnore + private String networkId; + @JsonProperty("Container") + private String containerId; + + public ConnectToNetworkCmdImpl(DockerCmdSyncExec execution) { + super(execution); + } + + @Override + public String getNetworkId() { + return networkId; + } + + @Override + public String getContainerId() { + return containerId; + } + + @Override public ConnectToNetworkCmd withNetworkId(String networkId) { + this.networkId = networkId; + return this; + } + + @Override public ConnectToNetworkCmd withContainerId(String containerId) { + this.containerId = containerId; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java new file mode 100644 index 000000000..4d4c6c512 --- /dev/null +++ b/src/main/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImpl.java @@ -0,0 +1,39 @@ +package com.github.dockerjava.core.command; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; +import com.github.dockerjava.api.command.DockerCmdSyncExec; + +public class DisconnectFromNetworkCmdImpl extends AbstrDockerCmd + implements DisconnectFromNetworkCmd { + + @JsonIgnore + private String networkId; + @JsonProperty("Container") + private String containerId; + + public DisconnectFromNetworkCmdImpl(DockerCmdSyncExec execution) { + super(execution); + } + + @Override + public String getNetworkId() { + return networkId; + } + + @Override + public String getContainerId() { + return containerId; + } + + @Override public DisconnectFromNetworkCmd withNetworkId(String networkId) { + this.networkId = networkId; + return this; + } + + @Override public DisconnectFromNetworkCmd withContainerId(String containerId) { + this.containerId = containerId; + return this; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java new file mode 100644 index 000000000..dfc730e03 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/ConnectToNetworkCmdExec.java @@ -0,0 +1,32 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.ConnectToNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +import static javax.ws.rs.client.Entity.entity; + +public class ConnectToNetworkCmdExec extends AbstrSyncDockerCmdExec + implements ConnectToNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConnectToNetworkCmdExec.class); + + public ConnectToNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(ConnectToNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId() + "/connect"); + + LOGGER.trace("POST: {}", webTarget); + webTarget.request().post(entity(command, MediaType.APPLICATION_JSON)); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java new file mode 100644 index 000000000..4f6f54576 --- /dev/null +++ b/src/main/java/com/github/dockerjava/jaxrs/DisconnectFromNetworkCmdExec.java @@ -0,0 +1,32 @@ +package com.github.dockerjava.jaxrs; + +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +import static javax.ws.rs.client.Entity.entity; + +public class DisconnectFromNetworkCmdExec extends AbstrSyncDockerCmdExec + implements DisconnectFromNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(DisconnectFromNetworkCmdExec.class); + + public DisconnectFromNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(DisconnectFromNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId() + "/disconnect"); + + LOGGER.trace("POST: {}", webTarget); + webTarget.request().post(entity(command, MediaType.APPLICATION_JSON)); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java index 1d26276ef..bbd71ba38 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java @@ -7,6 +7,7 @@ import com.github.dockerjava.api.command.AuthCmd; import com.github.dockerjava.api.command.BuildImageCmd; import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; import com.github.dockerjava.api.command.ContainerDiffCmd; import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; @@ -15,6 +16,7 @@ import com.github.dockerjava.api.command.CreateImageCmd; import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.ExecCreateCmd; @@ -470,6 +472,18 @@ public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() { return new RemoveNetworkCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec() { + + return new ConnectToNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec() { + + return new DisconnectFromNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(client, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java index 113560a75..ee3b50101 100644 --- a/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java +++ b/src/main/java/com/github/dockerjava/netty/DockerCmdExecFactoryImpl.java @@ -4,6 +4,7 @@ import com.github.dockerjava.api.command.AuthCmd; import com.github.dockerjava.api.command.BuildImageCmd; import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; import com.github.dockerjava.api.command.ContainerDiffCmd; import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; @@ -12,6 +13,7 @@ import com.github.dockerjava.api.command.CreateImageCmd; import com.github.dockerjava.api.command.CreateNetworkCmd; import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; import com.github.dockerjava.api.command.DockerCmdExecFactory; import com.github.dockerjava.api.command.EventsCmd; import com.github.dockerjava.api.command.ExecCreateCmd; @@ -53,6 +55,7 @@ import com.github.dockerjava.netty.exec.AuthCmdExec; import com.github.dockerjava.netty.exec.BuildImageCmdExec; import com.github.dockerjava.netty.exec.CommitCmdExec; +import com.github.dockerjava.netty.exec.ConnectToNetworkCmdExec; import com.github.dockerjava.netty.exec.ContainerDiffCmdExec; import com.github.dockerjava.netty.exec.CopyArchiveFromContainerCmdExec; import com.github.dockerjava.netty.exec.CopyArchiveToContainerCmdExec; @@ -61,6 +64,7 @@ import com.github.dockerjava.netty.exec.CreateImageCmdExec; import com.github.dockerjava.netty.exec.CreateNetworkCmdExec; import com.github.dockerjava.netty.exec.CreateVolumeCmdExec; +import com.github.dockerjava.netty.exec.DisconnectFromNetworkCmdExec; import com.github.dockerjava.netty.exec.EventsCmdExec; import com.github.dockerjava.netty.exec.ExecCreateCmdExec; import com.github.dockerjava.netty.exec.ExecStartCmdExec; @@ -531,6 +535,16 @@ public RemoveNetworkCmd.Exec createRemoveNetworkCmdExec() { return new RemoveNetworkCmdExec(getBaseResource(), getDockerClientConfig()); } + @Override + public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec() { + return new ConnectToNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + + @Override + public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec() { + return new DisconnectFromNetworkCmdExec(getBaseResource(), getDockerClientConfig()); + } + @Override public void close() throws IOException { checkNotNull(eventLoopGroup, "Factory not initialized. You probably forgot to call init()!"); diff --git a/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java new file mode 100644 index 000000000..b1090f4c3 --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/ConnectToNetworkCmdExec.java @@ -0,0 +1,29 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.ConnectToNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class ConnectToNetworkCmdExec extends AbstrSyncDockerCmdExec + implements ConnectToNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConnectToNetworkCmdExec.class); + + public ConnectToNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(ConnectToNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId() + "/connect"); + + LOGGER.trace("POST: {}", webTarget); + webTarget.request().post(command); + + return null; + } +} diff --git a/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java new file mode 100644 index 000000000..8b814bddc --- /dev/null +++ b/src/main/java/com/github/dockerjava/netty/exec/DisconnectFromNetworkCmdExec.java @@ -0,0 +1,29 @@ +package com.github.dockerjava.netty.exec; + +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; +import com.github.dockerjava.core.DockerClientConfig; +import com.github.dockerjava.netty.WebTarget; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +public class DisconnectFromNetworkCmdExec extends AbstrSyncDockerCmdExec + implements DisconnectFromNetworkCmd.Exec { + + private static final Logger LOGGER = LoggerFactory.getLogger(DisconnectFromNetworkCmdExec.class); + + public DisconnectFromNetworkCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) { + super(baseResource, dockerClientConfig); + } + + @Override + protected Void execute(DisconnectFromNetworkCmd command) { + + WebTarget webTarget = getBaseResource().path("/networks/" + command.getNetworkId() + "/disconnect"); + + LOGGER.trace("POST: {}", webTarget); + webTarget.request().post(command); + + return null; + } +} diff --git a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java index 97be5dd49..50860789b 100644 --- a/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java +++ b/src/test/java/com/github/dockerjava/core/TestDockerCmdExecFactory.java @@ -342,6 +342,16 @@ public Void exec(RemoveNetworkCmd command) { }; } + @Override + public ConnectToNetworkCmd.Exec createConnectToNetworkCmdExec() { + return delegate.createConnectToNetworkCmdExec(); + } + + @Override + public DisconnectFromNetworkCmd.Exec createDisconnectFromNetworkCmdExec() { + return delegate.createDisconnectFromNetworkCmdExec(); + } + public List getContainerNames() { return new ArrayList(containerNames); } diff --git a/src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java new file mode 100644 index 000000000..8aeb12579 --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImplTest.java @@ -0,0 +1,54 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.ConnectToNetworkCmd; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; + +@Test(groups = "integration") +public class ConnectToNetworkCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void connectToNetwork() throws InterruptedException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + dockerClient.startContainerCmd(container.getId()).exec(); + + CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("testNetwork").exec(); + + dockerClient.connectToNetworkCmd().withNetworkId(network.getId()).withContainerId(container.getId()).exec(); + + Network updatedNetwork = dockerClient.inspectNetworkCmd().withNetworkId(network.getId()).exec(); + + assertTrue(updatedNetwork.getContainers().containsKey(container.getId())); + } +} diff --git a/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java new file mode 100644 index 000000000..7f94c5a0f --- /dev/null +++ b/src/test/java/com/github/dockerjava/core/command/DisconnectFromNetworkCmdImplTest.java @@ -0,0 +1,59 @@ +package com.github.dockerjava.core.command; + +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.CreateNetworkResponse; +import com.github.dockerjava.api.model.Network; +import com.github.dockerjava.client.AbstractDockerClientTest; +import org.testng.ITestResult; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import java.lang.reflect.Method; + +@Test(groups = "integration") +public class DisconnectFromNetworkCmdImplTest extends AbstractDockerClientTest { + + @BeforeTest + public void beforeTest() throws Exception { + super.beforeTest(); + } + + @AfterTest + public void afterTest() { + super.afterTest(); + } + + @BeforeMethod + public void beforeMethod(Method method) { + super.beforeMethod(method); + } + + @AfterMethod + public void afterMethod(ITestResult result) { + super.afterMethod(result); + } + + @Test + public void disconnectFromNetwork() throws InterruptedException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec(); + dockerClient.startContainerCmd(container.getId()).exec(); + + CreateNetworkResponse network = dockerClient.createNetworkCmd().withName("testNetwork").exec(); + + dockerClient.connectToNetworkCmd().withNetworkId(network.getId()).withContainerId(container.getId()).exec(); + + Network updatedNetwork = dockerClient.inspectNetworkCmd().withNetworkId(network.getId()).exec(); + + assertTrue(updatedNetwork.getContainers().containsKey(container.getId())); + + dockerClient.disconnectFromNetworkCmd().withNetworkId(network.getId()).withContainerId(container.getId()).exec(); + + updatedNetwork = dockerClient.inspectNetworkCmd().withNetworkId(network.getId()).exec(); + + assertFalse(updatedNetwork.getContainers().containsKey(container.getId())); + } +} From 032795e4b3d692b988ae511d87ae7ae05814d21e Mon Sep 17 00:00:00 2001 From: Marcus Linke Date: Sun, 17 Jan 2016 11:19:18 +0100 Subject: [PATCH 16/17] Added NetworkSettings to InspectContainerResponse and InspectExecResponse --- .../api/command/ConnectToNetworkCmd.java | 5 +- .../api/command/DisconnectFromNetworkCmd.java | 5 +- .../api/command/InspectContainerResponse.java | 54 +--- .../api/command/InspectExecResponse.java | 31 ++ .../dockerjava/api/model/NetworkSettings.java | 272 ++++++++++++++++++ .../dockerjava/api/model/PortBinding.java | 1 - .../github/dockerjava/api/model/Ports.java | 1 - .../core/command/ConnectToNetworkCmdImpl.java | 1 + .../command/DisconnectFromNetworkCmdImpl.java | 1 + .../command/ConnectToNetworkCmdImplTest.java | 17 +- .../core/command/InspectExecCmdImplTest.java | 30 +- 11 files changed, 348 insertions(+), 70 deletions(-) create mode 100644 src/main/java/com/github/dockerjava/api/model/NetworkSettings.java diff --git a/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java index 2ced91cee..cf76e2ec3 100644 --- a/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/ConnectToNetworkCmd.java @@ -3,6 +3,7 @@ import com.github.dockerjava.core.RemoteApiVersion; import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; /** * Connects a container to a network. @@ -17,9 +18,9 @@ public interface ConnectToNetworkCmd extends SyncDockerCmd { @CheckForNull public String getContainerId(); - public ConnectToNetworkCmd withNetworkId(String networkId); + public ConnectToNetworkCmd withNetworkId(@Nonnull String networkId); - public ConnectToNetworkCmd withContainerId(String containerId); + public ConnectToNetworkCmd withContainerId(@Nonnull String containerId); public static interface Exec extends DockerCmdSyncExec { } diff --git a/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java b/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java index d35f0382f..a2452416b 100644 --- a/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java +++ b/src/main/java/com/github/dockerjava/api/command/DisconnectFromNetworkCmd.java @@ -3,6 +3,7 @@ import com.github.dockerjava.core.RemoteApiVersion; import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; /** * Disconnects a container from a network. @@ -17,9 +18,9 @@ public interface DisconnectFromNetworkCmd extends SyncDockerCmd { @CheckForNull public String getContainerId(); - public DisconnectFromNetworkCmd withNetworkId(String networkId); + public DisconnectFromNetworkCmd withNetworkId(@Nonnull String networkId); - public DisconnectFromNetworkCmd withContainerId(String containerId); + public DisconnectFromNetworkCmd withContainerId(@Nonnull String containerId); public static interface Exec extends DockerCmdSyncExec { } diff --git a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java index 59438dba2..85f2812f0 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectContainerResponse.java @@ -1,7 +1,6 @@ package com.github.dockerjava.api.command; import java.util.List; -import java.util.Map; import javax.annotation.CheckForNull; @@ -14,7 +13,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.github.dockerjava.api.model.ContainerConfig; import com.github.dockerjava.api.model.HostConfig; -import com.github.dockerjava.api.model.Ports; +import com.github.dockerjava.api.model.NetworkSettings; import com.github.dockerjava.api.model.Volume; import com.github.dockerjava.api.model.VolumeBind; import com.github.dockerjava.api.model.VolumeBinds; @@ -203,56 +202,7 @@ public String toString() { return ToStringBuilder.reflectionToString(this); } - @JsonIgnoreProperties(ignoreUnknown = true) - public class NetworkSettings { - - @JsonProperty("IPAddress") - private String ipAddress; - - @JsonProperty("IPPrefixLen") - private Integer ipPrefixLen; - - @JsonProperty("Gateway") - private String gateway; - - @JsonProperty("Bridge") - private String bridge; - - @JsonProperty("PortMapping") - private Map> portMapping; - - @JsonProperty("Ports") - private Ports ports; - - public String getIpAddress() { - return ipAddress; - } - - public Integer getIpPrefixLen() { - return ipPrefixLen; - } - - public String getGateway() { - return gateway; - } - public String getBridge() { - return bridge; - } - - public Map> getPortMapping() { - return portMapping; - } - - public Ports getPorts() { - return ports; - } - - @Override - public String toString() { - return ToStringBuilder.reflectionToString(this); - } - } @JsonIgnoreProperties(ignoreUnknown = true) public class ContainerState { @@ -514,7 +464,5 @@ public String getMode() { public Boolean getRW() { return rw; } - } - } diff --git a/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java b/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java index b1cb09b20..63f111dce 100644 --- a/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java +++ b/src/main/java/com/github/dockerjava/api/command/InspectExecResponse.java @@ -6,6 +6,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.api.model.NetworkSettings; +import com.github.dockerjava.core.RemoteApiVersion; @JsonIgnoreProperties(ignoreUnknown = true) public class InspectExecResponse { @@ -27,6 +29,12 @@ public class InspectExecResponse { @JsonProperty("ExitCode") private Integer exitCode; + @JsonProperty("ProcessConfig") + private ProcessConfig processConfig; + + @JsonProperty("Container") + private Container container; + public String getId() { return id; } @@ -51,6 +59,14 @@ public Integer getExitCode() { return exitCode; } + public ProcessConfig getProcessConfig() { + return processConfig; + } + + public Container getContainer() { + return container; + } + @Override public String toString() { return ToStringBuilder.reflectionToString(this); @@ -58,6 +74,7 @@ public String toString() { @JsonIgnoreProperties(ignoreUnknown = true) public class ProcessConfig { + @JsonProperty("arguments") private List arguments; @@ -98,4 +115,18 @@ public String toString() { return ToStringBuilder.reflectionToString(this); } } + + @JsonIgnoreProperties(ignoreUnknown = true) + public class Container { + + @JsonProperty("NetworkSettings") + private NetworkSettings networkSettings; + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public NetworkSettings getNetworkSettings() { + return networkSettings; + } + } } diff --git a/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java b/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java new file mode 100644 index 000000000..64c954ec9 --- /dev/null +++ b/src/main/java/com/github/dockerjava/api/model/NetworkSettings.java @@ -0,0 +1,272 @@ +/* + * Created on 16.01.2016 + */ +package com.github.dockerjava.api.model; + +import java.util.Map; + +import org.apache.commons.lang.builder.ToStringBuilder; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.dockerjava.core.RemoteApiVersion; + +/** + * + * @author Marcus Linke + * + */ +@JsonIgnoreProperties(ignoreUnknown = true) +public class NetworkSettings { + + @JsonProperty("Bridge") + private String bridge; + + @JsonProperty("SandboxID") + private String sandboxId; + + @JsonProperty("HairpinMode") + private Boolean hairpinMode; + + @JsonProperty("LinkLocalIPv6Address") + private String linkLocalIPv6Address; + + @JsonProperty("LinkLocalIPv6PrefixLen") + private Integer linkLocalIPv6PrefixLen; + + @JsonProperty("Ports") + private Ports ports; + + @JsonProperty("SandboxKey") + private String sandboxKey; + + @JsonProperty("SecondaryIPAddresses") + private Object secondaryIPAddresses; + + @JsonProperty("SecondaryIPv6Addresses") + private Object secondaryIPv6Addresses; + + @JsonProperty("EndpointID") + private String endpointID; + + @JsonProperty("Gateway") + private String gateway; + + @JsonProperty("PortMapping") + private Map> portMapping; + + @JsonProperty("GlobalIPv6Address") + private String globalIPv6Address; + + @JsonProperty("GlobalIPv6PrefixLen") + private Integer globalIPv6PrefixLen; + + @JsonProperty("IPAddress") + private String ipAddress; + + @JsonProperty("IPPrefixLen") + private Integer ipPrefixLen; + + @JsonProperty("IPv6Gateway") + private String ipV6Gateway; + + @JsonProperty("MacAddress") + private String macAddress; + + @JsonProperty("Networks") + private Map networks; + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getIpAddress() { + return ipAddress; + } + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public Integer getIpPrefixLen() { + return ipPrefixLen; + } + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getGateway() { + return gateway; + } + + public String getBridge() { + return bridge; + } + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public Map> getPortMapping() { + return portMapping; + } + + /** + * @deprecated since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getMacAddress() { + return macAddress; + } + + public Ports getPorts() { + return ports; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getEndpointID() { + return endpointID; + } + + public String getIpV6Gateway() { + return ipV6Gateway; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Map getNetworks() { + return networks; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getSandboxId() { + return sandboxId; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getSandboxKey() { + return sandboxKey; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Object getSecondaryIPAddresses() { + return secondaryIPAddresses; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Object getSecondaryIPv6Addresses() { + return secondaryIPv6Addresses; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Boolean getHairpinMode() { + return hairpinMode; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getLinkLocalIPv6Address() { + return linkLocalIPv6Address; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Integer getLinkLocalIPv6PrefixLen() { + return linkLocalIPv6PrefixLen; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public String getGlobalIPv6Address() { + return globalIPv6Address; + } + + /** + * @since {@link RemoteApiVersion#VERSION_1_21} + */ + public Integer getGlobalIPv6PrefixLen() { + return globalIPv6PrefixLen; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + + @JsonIgnoreProperties(ignoreUnknown = true) + public static class Network { + + @JsonProperty("EndpointID") + private String endpointId; + + @JsonProperty("Gateway") + private String gateway; + + @JsonProperty("IPAddress") + private String ipAddress; + + @JsonProperty("IPPrefixLen") + private Integer ipPrefixLen; + + @JsonProperty("IPv6Gateway") + private String ipV6Gateway; + + @JsonProperty("GlobalIPv6Address") + private String globalIPv6Address; + + @JsonProperty("GlobalIPv6PrefixLen") + private Integer globalIPv6PrefixLen; + + @JsonProperty("MacAddress") + private String macAddress; + + public String getEndpointId() { + return endpointId; + } + + public String getGateway() { + return gateway; + } + + public String getIpAddress() { + return ipAddress; + } + + public Integer getIpPrefixLen() { + return ipPrefixLen; + } + + public String getIpV6Gateway() { + return ipV6Gateway; + } + + public String getGlobalIPv6Address() { + return globalIPv6Address; + } + + public Integer getGlobalIPv6PrefixLen() { + return globalIPv6PrefixLen; + } + + public String getMacAddress() { + return macAddress; + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this); + } + } +} diff --git a/src/main/java/com/github/dockerjava/api/model/PortBinding.java b/src/main/java/com/github/dockerjava/api/model/PortBinding.java index 355e83aa3..99e04f1bc 100644 --- a/src/main/java/com/github/dockerjava/api/model/PortBinding.java +++ b/src/main/java/com/github/dockerjava/api/model/PortBinding.java @@ -4,7 +4,6 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; -import com.github.dockerjava.api.command.InspectContainerResponse.NetworkSettings; import com.github.dockerjava.api.model.Ports.Binding; /** diff --git a/src/main/java/com/github/dockerjava/api/model/Ports.java b/src/main/java/com/github/dockerjava/api/model/Ports.java index a5f13977b..0ff5762e6 100644 --- a/src/main/java/com/github/dockerjava/api/model/Ports.java +++ b/src/main/java/com/github/dockerjava/api/model/Ports.java @@ -23,7 +23,6 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.node.NullNode; -import com.github.dockerjava.api.command.InspectContainerResponse.NetworkSettings; /** * A container for port bindings, made available as a {@link Map} via its {@link #getBindings()} method. diff --git a/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java index f08450238..cfb6cce14 100644 --- a/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java +++ b/src/main/java/com/github/dockerjava/core/command/ConnectToNetworkCmdImpl.java @@ -9,6 +9,7 @@ public class ConnectToNetworkCmdImpl extends AbstrDockerCmd Date: Sun, 17 Jan 2016 19:13:57 +0100 Subject: [PATCH 17/17] Add missing tests --- .../command/InspectContainerCmdImplTest.java | 15 +++++++++++++ .../exec/InspectContainerCmdExecTest.java | 15 +++++++++++++ .../netty/exec/InspectExecCmdExecTest.java | 22 +++++++++++++++++++ 3 files changed, 52 insertions(+) diff --git a/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java index cf555a28a..e11ff6839 100644 --- a/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/InspectContainerCmdImplTest.java @@ -87,4 +87,19 @@ public void inspectContainerRestartCount() throws DockerException { assertThat(inspectContainerResponse.getRestartCount(), equalTo(0)); } + + @Test + public void inspectContainerNetworkSettings() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertFalse(inspectContainerResponse.getNetworkSettings().getHairpinMode()); + } } diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java index 31116ef22..f63dda273 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectContainerCmdExecTest.java @@ -87,4 +87,19 @@ public void inspectContainerRestartCount() throws DockerException { assertThat(inspectContainerResponse.getRestartCount(), equalTo(0)); } + + @Test + public void inspectContainerNetworkSettings() throws DockerException { + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox") + .withCmd("env").exec(); + + LOG.info("Created container {}", container.toString()); + + assertThat(container.getId(), not(isEmptyString())); + + InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec(); + + assertNotNull(inspectContainerResponse.getNetworkSettings().getNetworks().get("bridge")); + } } diff --git a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java index fc3bb089b..efeba6e99 100644 --- a/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java +++ b/src/test/java/com/github/dockerjava/netty/exec/InspectExecCmdExecTest.java @@ -97,4 +97,26 @@ public void inspectExecTest() throws IOException { assertEquals(containerInfo.getId(), container.getId()); JSONTestHelper.testRoundTrip(containerInfo); } + + @Test(groups = "ignoreInCircleCi") + public void inspectExecNetworkSettings() throws IOException { + String containerName = "generated_" + new SecureRandom().nextInt(); + + CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999") + .withName(containerName).exec(); + LOG.info("Created container {}", container.toString()); + assertThat(container.getId(), not(isEmptyString())); + + dockerClient.startContainerCmd(container.getId()).exec(); + + ExecCreateCmdResponse exec = dockerClient.execCreateCmd(container.getId()) + .withAttachStdout(true).withAttachStderr(true).withCmd("/bin/bash").exec(); + LOG.info("Created exec {}", exec.toString()); + assertThat(exec.getId(), not(isEmptyString())); + + InspectExecResponse inspectExecResponse = dockerClient.inspectExecCmd(exec.getId()).exec(); + assertThat(inspectExecResponse.getExitCode(), is(0)); + + assertNotNull(inspectExecResponse.getContainer().getNetworkSettings().getNetworks().get("bridge")); + } }