Added ExtraHosts option to template
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/39014033 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/39014033 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/39014033 Branch: refs/heads/master Commit: 3901403379a7a2dcedef7945af037e042230514f Parents: 1565182 Author: Andrew Kennedy <[email protected]> Authored: Thu Sep 17 13:06:37 2015 +0100 Committer: Ignasi Barrera <[email protected]> Committed: Thu Sep 17 14:48:30 2015 +0200 ---------------------------------------------------------------------- .../compute/options/DockerTemplateOptions.java | 37 +++++++++++++++++--- .../strategy/DockerComputeServiceAdapter.java | 8 +++++ .../org/jclouds/docker/domain/HostConfig.java | 20 +++++++---- .../docker/parse/ContainerParseTest.java | 1 + apis/docker/src/test/resources/container.json | 2 +- 5 files changed, 57 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/39014033/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 aac6fac..cce2b22 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 @@ -59,6 +59,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable protected List<String> env = ImmutableList.of(); protected Map<Integer, Integer> portBindings = ImmutableMap.of(); protected String networkMode; + protected Map<String, String> extraHosts = ImmutableMap.of(); @Override public DockerTemplateOptions clone() { @@ -91,6 +92,9 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable eTo.portBindings(portBindings); } eTo.networkMode(networkMode); + if (!extraHosts.isEmpty()) { + eTo.extraHosts(extraHosts); + } } } @@ -108,12 +112,13 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable equal(this.commands, that.commands) && equal(this.cpuShares, that.cpuShares) && equal(this.env, that.env) && - equal(this.portBindings, that.portBindings); + equal(this.portBindings, that.portBindings) && + equal(this.extraHosts, that.extraHosts); } @Override public int hashCode() { - return Objects.hashCode(super.hashCode(), volumes, hostname, dns, memory, commands, cpuShares, env, portBindings); + return Objects.hashCode(super.hashCode(), volumes, hostname, dns, memory, commands, cpuShares, env, portBindings, extraHosts); } @Override @@ -127,6 +132,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable .add("volumes", volumes) .add("env", env) .add("portBindings", portBindings) + .add("extraHosts", extraHosts) .toString(); } @@ -192,7 +198,6 @@ 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 @@ -203,6 +208,20 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable return this; } + /** + * Set extra hosts file entries for a container. + * <p> + * The {@link Map} keys are host names, and the value is an IP address that + * can be accessed by the container. This is the same order as the arguments for the + * {@code --add-host} command-line option to {@code docker run}. + * + * @param extraHosts the map of host names to IP addresses + */ + public DockerTemplateOptions extraHosts(Map<String, String> extraHosts) { + this.extraHosts = ImmutableMap.copyOf(checkNotNull(extraHosts, "extraHosts")); + return this; + } + public Map<String, String> getVolumes() { return volumes; } public List<String> getDns() { return dns; } @@ -221,6 +240,8 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable public String getNetworkMode() { return networkMode; } + public Map<String, String> getExtraHosts() { return extraHosts; } + public static class Builder { /** @@ -312,7 +333,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable } /** - * @see DockerTemplateOptions#hostname(String) + * @see DockerTemplateOptions#networkMode(String) */ public static DockerTemplateOptions networkMode(@Nullable String networkMode) { DockerTemplateOptions options = new DockerTemplateOptions(); @@ -320,6 +341,14 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable } /** + * @see DockerTemplateOptions#extraHosts(Map) + */ + public static DockerTemplateOptions extraHosts(Map<String, String> extraHosts) { + DockerTemplateOptions options = new DockerTemplateOptions(); + return options.extraHosts(extraHosts); + } + + /** * @see TemplateOptions#inboundPorts(int...) */ public static DockerTemplateOptions inboundPorts(int... ports) { http://git-wip-us.apache.org/repos/asf/jclouds/blob/39014033/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 44242c6..62ea752 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 @@ -142,6 +142,14 @@ public class DockerComputeServiceAdapter implements hostConfigBuilder.dns(templateOptions.getDns()); } + if (!templateOptions.getExtraHosts().isEmpty()) { + List<String> extraHosts = Lists.newArrayList(); + for (Map.Entry<String, String> entry : templateOptions.getExtraHosts().entrySet()) { + extraHosts.add(entry.getKey() + ":" + entry.getValue()); + } + hostConfigBuilder.extraHosts(extraHosts); + } + if (!templateOptions.getVolumes().isEmpty()) { for (Map.Entry<String, String> entry : templateOptions.getVolumes().entrySet()) { hostConfigBuilder.binds(ImmutableList.of(entry.getKey() + ":" + entry.getValue())); http://git-wip-us.apache.org/repos/asf/jclouds/blob/39014033/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 f2c1e87..17a4f38 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 @@ -47,6 +47,8 @@ public abstract class HostConfig { public abstract List<String> links(); + public abstract List<String> extraHosts(); + public abstract boolean publishAllPorts(); public abstract List<String> volumesFrom(); @@ -58,12 +60,12 @@ public abstract class HostConfig { } @SerializedNames({ "ContainerIDFile", "Binds", "LxcConf", "Privileged", "Dns", "DnsSearch", "PortBindings", - "Links", "PublishAllPorts", "VolumesFrom", "NetworkMode" }) + "Links", "ExtraHosts", "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, String networkMode) { + List<String> links, List<String> extraHosts, 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), networkMode); + copyOf(portBindings), copyOf(links), copyOf(extraHosts), publishAllPorts, copyOf(volumesFrom), networkMode); } public static Builder builder() { @@ -84,6 +86,7 @@ public abstract class HostConfig { private String dnsSearch; private Map<String, List<Map<String, String>>> portBindings = Maps.newLinkedHashMap(); private List<String> links = Lists.newArrayList(); + private List<String> extraHosts = Lists.newArrayList(); private boolean publishAllPorts; private List<String> volumesFrom = Lists.newArrayList(); private String networkMode; @@ -123,6 +126,11 @@ public abstract class HostConfig { return this; } + public Builder extraHosts(List<String> extraHosts) { + this.extraHosts.addAll(checkNotNull(extraHosts, "extraHosts")); + return this; + } + public Builder portBindings(Map<String, List<Map<String, String>>> portBindings) { this.portBindings.putAll(portBindings); return this; @@ -145,14 +153,14 @@ public abstract class HostConfig { public HostConfig build() { return HostConfig.create(containerIDFile, binds, lxcConf, privileged, dns, dnsSearch, portBindings, links, - publishAllPorts, volumesFrom, networkMode); + extraHosts, 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()) - .networkMode(in.networkMode()); + .extraHosts(in.extraHosts()).portBindings(in.portBindings()).publishAllPorts(in.publishAllPorts()) + .volumesFrom(in.volumesFrom()).networkMode(in.networkMode()); } } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/39014033/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 bcbe44b..ff2e2fe 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 @@ -83,6 +83,7 @@ public class ContainerParseTest extends BaseDockerParseTest<Container> { "6783/udp", ImmutableList.<Map<String, String>>of(ImmutableMap.of("HostIp", "", "HostPort", "6783"))) ) .dns(ImmutableList.of("8.8.8.8", "8.8.4.4")) + .extraHosts(ImmutableList.<String>of("extra:169.254.0.1")) .privileged(true) .networkMode("bridge") .build()) http://git-wip-us.apache.org/repos/asf/jclouds/blob/39014033/apis/docker/src/test/resources/container.json ---------------------------------------------------------------------- diff --git a/apis/docker/src/test/resources/container.json b/apis/docker/src/test/resources/container.json index 0b85764..5a13e13 100644 --- a/apis/docker/src/test/resources/container.json +++ b/apis/docker/src/test/resources/container.json @@ -58,7 +58,7 @@ "Devices": [], "Dns": [ "8.8.8.8", "8.8.4.4" ], "DnsSearch": null, - "ExtraHosts": null, + "ExtraHosts": [ "extra:169.254.0.1" ], "Links": null, "LxcConf": [], "NetworkMode": "bridge",
