JCLOUDS-996 fix location of NetworkMode parameter from Docker Remote API and make it configurable from DockerTemplateOptions
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/15651822 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/15651822 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/15651822 Branch: refs/heads/master Commit: 15651822be7a019f55c94b54fcbdc1b473f5eb4c Parents: 644541a Author: Josef Cacek <[email protected]> Authored: Thu Sep 17 08:18:52 2015 +0200 Committer: Ignasi Barrera <[email protected]> Committed: Thu Sep 17 12:01:34 2015 +0200 ---------------------------------------------------------------------- .../compute/options/DockerTemplateOptions.java | 23 ++++++++++++++++++++ .../strategy/DockerComputeServiceAdapter.java | 2 ++ .../java/org/jclouds/docker/domain/Config.java | 19 +++++----------- .../org/jclouds/docker/domain/HostConfig.java | 20 ++++++++++++----- .../options/DockerTemplateOptionsTest.java | 11 +++++++++- .../docker/parse/ContainerParseTest.java | 1 + 6 files changed, 56 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/15651822/apis/docker/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java ---------------------------------------------------------------------- diff --git a/apis/docker/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java b/apis/docker/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java index efe0171..aac6fac 100644 --- a/apis/docker/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java +++ b/apis/docker/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java @@ -58,6 +58,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable protected Map<String, String> volumes = ImmutableMap.of(); protected List<String> env = ImmutableList.of(); protected Map<Integer, Integer> portBindings = ImmutableMap.of(); + protected String networkMode; @Override public DockerTemplateOptions clone() { @@ -89,6 +90,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable if (!portBindings.isEmpty()) { eTo.portBindings(portBindings); } + eTo.networkMode(networkMode); } } @@ -190,6 +192,17 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable return this; } + + /** + * Sets the networking mode for the container. Supported values are: bridge, host, and container:[name|id] + * @param networkMode + * @return this instance + */ + public DockerTemplateOptions networkMode(@Nullable String networkMode) { + this.networkMode = networkMode; + return this; + } + public Map<String, String> getVolumes() { return volumes; } public List<String> getDns() { return dns; } @@ -206,6 +219,8 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable public Map<Integer, Integer> getPortBindings() { return portBindings; } + public String getNetworkMode() { return networkMode; } + public static class Builder { /** @@ -297,6 +312,14 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable } /** + * @see DockerTemplateOptions#hostname(String) + */ + public static DockerTemplateOptions networkMode(@Nullable String networkMode) { + DockerTemplateOptions options = new DockerTemplateOptions(); + return options.networkMode(networkMode); + } + + /** * @see TemplateOptions#inboundPorts(int...) */ public static DockerTemplateOptions inboundPorts(int... ports) { http://git-wip-us.apache.org/repos/asf/jclouds/blob/15651822/apis/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java ---------------------------------------------------------------------- diff --git a/apis/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java b/apis/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java index 0aa93cf..44242c6 100644 --- a/apis/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java +++ b/apis/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java @@ -148,6 +148,8 @@ public class DockerComputeServiceAdapter implements } } + hostConfigBuilder.networkMode(templateOptions.getNetworkMode()); + HostConfig hostConfig = hostConfigBuilder.build(); api.getContainerApi().startContainer(container.id(), hostConfig); http://git-wip-us.apache.org/repos/asf/jclouds/blob/15651822/apis/docker/src/main/java/org/jclouds/docker/domain/Config.java ---------------------------------------------------------------------- diff --git a/apis/docker/src/main/java/org/jclouds/docker/domain/Config.java b/apis/docker/src/main/java/org/jclouds/docker/domain/Config.java index 464f562..b16f4b5 100644 --- a/apis/docker/src/main/java/org/jclouds/docker/domain/Config.java +++ b/apis/docker/src/main/java/org/jclouds/docker/domain/Config.java @@ -99,8 +99,6 @@ public abstract class Config { public abstract Map<String, String> restartPolicy(); - @Nullable public abstract String networkMode(); - Config() { } @@ -110,7 +108,7 @@ public abstract class Config { "AttachStderr", "Tty", "OpenStdin", "StdinOnce", "Env", "Cmd", "Entrypoint", "Image", "Volumes", "WorkingDir", "NetworkDisabled", "ExposedPorts", "SecurityOpts", "HostConfig", "Binds", "Links", "LxcConf", "PortBindings", "PublishAllPorts", "Privileged", "Dns", "DnsSearch", "VolumesFrom", - "CapAdd", "CapDrop", "RestartPolicy", "NetworkMode" + "CapAdd", "CapDrop", "RestartPolicy" }) public static Config create(String hostname, String domainname, String user, int memory, int memorySwap, int cpuShares, boolean attachStdin, boolean attachStdout, boolean attachStderr, boolean tty, @@ -119,12 +117,12 @@ public abstract class Config { Map<String, ?> exposedPorts, List<String> securityOpts, HostConfig hostConfig, List<String> binds, List<String> links, List<Map<String, String>> lxcConf, Map<String, List<Map<String, String>>> portBindings, boolean publishAllPorts, boolean privileged, List<String> dns, String dnsSearch, String volumesFrom, - List<String> capAdd, List<String> capDrop, Map<String, String> restartPolicy, String networkMode) { + List<String> capAdd, List<String> capDrop, Map<String, String> restartPolicy) { return new AutoValue_Config(hostname, domainname, user, memory, memorySwap, cpuShares, attachStdin, attachStdout, attachStderr, tty, openStdin, stdinOnce, copyOf(env), copyOf(cmd), copyOf(entrypoint), image, copyOf(volumes), workingDir, networkDisabled, copyOf(exposedPorts), copyOf(securityOpts), hostConfig, copyOf(binds), copyOf(links), copyOf(lxcConf), copyOf(portBindings), publishAllPorts, privileged, - copyOf(dns), dnsSearch, volumesFrom, copyOf(capAdd), copyOf(capDrop), copyOf(restartPolicy), networkMode); + copyOf(dns), dnsSearch, volumesFrom, copyOf(capAdd), copyOf(capDrop), copyOf(restartPolicy)); } public static Builder builder() { @@ -170,7 +168,6 @@ public abstract class Config { private List<String> capAdd = Lists.newArrayList(); private List<String> capDrop = Lists.newArrayList(); private Map<String, String> restartPolicy = Maps.newHashMap(); - private String networkMode; public Builder hostname(String hostname) { this.hostname = hostname; @@ -348,17 +345,11 @@ public abstract class Config { return this; } - public Builder networkMode(String networkMode) { - this.networkMode = networkMode; - return this; - } - public Config build() { return Config.create(hostname, domainname, user, memory, memorySwap, cpuShares, attachStdin, attachStdout, attachStderr, tty, openStdin, stdinOnce, env, cmd, entrypoint, image, volumes, workingDir, networkDisabled, exposedPorts, securityOpts, hostConfig, binds, links, lxcConf, portBindings, - publishAllPorts, privileged, dns, dnsSearch, volumesFrom, capAdd, capDrop, restartPolicy, - networkMode); + publishAllPorts, privileged, dns, dnsSearch, volumesFrom, capAdd, capDrop, restartPolicy); } public Builder fromConfig(Config in) { @@ -370,7 +361,7 @@ public abstract class Config { .hostConfig(in.hostConfig()).binds(in.binds()).links(in.links()).lxcConf(in.lxcConf()) .portBindings(in.portBindings()).publishAllPorts(in.publishAllPorts()).privileged(in.privileged()) .dns(in.dns()).dnsSearch(in.dnsSearch()).volumesFrom(in.volumesFrom()).capAdd(in.capAdd()) - .capDrop(in.capDrop()).restartPolicy(in.restartPolicy()).networkMode(in.networkMode()); + .capDrop(in.capDrop()).restartPolicy(in.restartPolicy()); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/15651822/apis/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java ---------------------------------------------------------------------- diff --git a/apis/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java b/apis/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java index 8922d18..f2c1e87 100644 --- a/apis/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java +++ b/apis/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java @@ -51,16 +51,19 @@ public abstract class HostConfig { public abstract List<String> volumesFrom(); + @Nullable + public abstract String networkMode(); + HostConfig() { } @SerializedNames({ "ContainerIDFile", "Binds", "LxcConf", "Privileged", "Dns", "DnsSearch", "PortBindings", - "Links", "PublishAllPorts", "VolumesFrom" }) + "Links", "PublishAllPorts", "VolumesFrom", "NetworkMode" }) public static HostConfig create(String containerIDFile, List<String> binds, List<Map<String, String>> lxcConf, boolean privileged, List<String> dns, String dnsSearch, Map<String, List<Map<String, String>>> portBindings, - List<String> links, boolean publishAllPorts, List<String> volumesFrom) { + List<String> links, boolean publishAllPorts, List<String> volumesFrom, String networkMode) { return new AutoValue_HostConfig(containerIDFile, copyOf(binds), copyOf(lxcConf), privileged, copyOf(dns), dnsSearch, - copyOf(portBindings), copyOf(links), publishAllPorts, copyOf(volumesFrom)); + copyOf(portBindings), copyOf(links), publishAllPorts, copyOf(volumesFrom), networkMode); } public static Builder builder() { @@ -83,6 +86,7 @@ public abstract class HostConfig { private List<String> links = Lists.newArrayList(); private boolean publishAllPorts; private List<String> volumesFrom = Lists.newArrayList(); + private String networkMode; public Builder containerIDFile(String containerIDFile) { this.containerIDFile = containerIDFile; @@ -134,15 +138,21 @@ public abstract class HostConfig { return this; } + public Builder networkMode(String networkMode) { + this.networkMode = networkMode; + return this; + } + public HostConfig build() { return HostConfig.create(containerIDFile, binds, lxcConf, privileged, dns, dnsSearch, portBindings, links, - publishAllPorts, volumesFrom); + publishAllPorts, volumesFrom, networkMode); } public Builder fromHostConfig(HostConfig in) { return this.containerIDFile(in.containerIDFile()).binds(in.binds()).lxcConf(in.lxcConf()) .privileged(in.privileged()).dns(in.dns()).dnsSearch(in.dnsSearch()).links(in.links()) - .portBindings(in.portBindings()).publishAllPorts(in.publishAllPorts()).volumesFrom(in.volumesFrom()); + .portBindings(in.portBindings()).publishAllPorts(in.publishAllPorts()).volumesFrom(in.volumesFrom()) + .networkMode(in.networkMode()); } } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/15651822/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java ---------------------------------------------------------------------- diff --git a/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java b/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java index 7badb92..d20019a 100644 --- a/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java +++ b/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java @@ -78,6 +78,13 @@ public class DockerTemplateOptionsTest { assertEquals(options.as(DockerTemplateOptions.class).getPortBindings(), ImmutableMap.<Integer, Integer>builder().put(8443, 443).put(8080, 80).build()); } + + @Test + public void testNetworkMode() { + TemplateOptions options = DockerTemplateOptions.Builder.networkMode("host"); + assertEquals(options.as(DockerTemplateOptions.class).getNetworkMode(), "host"); + } + @Test public void testNonDockerOptions() { TemplateOptions options = DockerTemplateOptions.Builder.userMetadata(ImmutableMap.of("key", "value")).cpuShares(1); @@ -100,7 +107,9 @@ public class DockerTemplateOptionsTest { .commands("test") .portBindings( ImmutableMap.<Integer, Integer> builder() - .put(8443, 443).build()).hostname("hostname") + .put(8443, 443).build()) + .hostname("hostname") + .networkMode("host") .userMetadata(ImmutableMap.of("key", "value")) .env(ImmutableList.of("HOST=abc", "PORT=1234")) .dns("8.8.8.8", "8.8.4.4") http://git-wip-us.apache.org/repos/asf/jclouds/blob/15651822/apis/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java ---------------------------------------------------------------------- diff --git a/apis/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java b/apis/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java index 96354e1..bcbe44b 100644 --- a/apis/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java +++ b/apis/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java @@ -84,6 +84,7 @@ public class ContainerParseTest extends BaseDockerParseTest<Container> { ) .dns(ImmutableList.of("8.8.8.8", "8.8.4.4")) .privileged(true) + .networkMode("bridge") .build()) .driver("aufs") .execDriver("native-0.2")
