You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2015/09/17 15:08:09 UTC

jclouds-labs git commit: Added ExtraHosts option to template

Repository: jclouds-labs
Updated Branches:
  refs/heads/1.9.x 7afb94410 -> e5b2b7081


Added ExtraHosts option to template


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/e5b2b708
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/e5b2b708
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/e5b2b708

Branch: refs/heads/1.9.x
Commit: e5b2b7081acffff782dd4f0ddc4f3537b8d3239d
Parents: 7afb944
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Sep 17 13:06:37 2015 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Thu Sep 17 14:53:09 2015 +0200

----------------------------------------------------------------------
 .../compute/options/DockerTemplateOptions.java  | 37 +++++++++++++++++---
 .../strategy/DockerComputeServiceAdapter.java   |  8 +++++
 .../org/jclouds/docker/domain/HostConfig.java   | 20 +++++++----
 .../docker/parse/ContainerParseTest.java        |  1 +
 docker/src/test/resources/container.json        |  2 +-
 5 files changed, 57 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e5b2b708/docker/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java b/docker/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java
index aac6fac..cce2b22 100644
--- a/docker/src/main/java/org/jclouds/docker/compute/options/DockerTemplateOptions.java
+++ b/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-labs/blob/e5b2b708/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java b/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
index 44242c6..62ea752 100644
--- a/docker/src/main/java/org/jclouds/docker/compute/strategy/DockerComputeServiceAdapter.java
+++ b/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-labs/blob/e5b2b708/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java b/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java
index f2c1e87..17a4f38 100644
--- a/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java
+++ b/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-labs/blob/e5b2b708/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java b/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
index bcbe44b..ff2e2fe 100644
--- a/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
+++ b/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-labs/blob/e5b2b708/docker/src/test/resources/container.json
----------------------------------------------------------------------
diff --git a/docker/src/test/resources/container.json b/docker/src/test/resources/container.json
index 0b85764..5a13e13 100644
--- a/docker/src/test/resources/container.json
+++ b/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",