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 2016/04/26 11:18:41 UTC

[2/2] jclouds-labs git commit: Add openStdin option to Docker template options and set all port bindings explicitly

Add openStdin option to Docker template options and set all port bindings explicitly


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

Branch: refs/heads/1.9.x
Commit: e0dfe0757486faac071969a2c8cb0e572460a261
Parents: 919ff2a
Author: Andrew Donald Kennedy <an...@cloudsoftcorp.com>
Authored: Mon Apr 25 22:25:40 2016 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Apr 26 11:14:19 2016 +0200

----------------------------------------------------------------------
 .../compute/options/DockerTemplateOptions.java  | 28 +++++++++++++++++++-
 .../strategy/DockerComputeServiceAdapter.java   | 21 +++++++++++++--
 2 files changed, 46 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e0dfe075/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 8a42253..1ff4b44 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
@@ -95,6 +95,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
    protected Map<String, String> extraHosts = ImmutableMap.of();
    protected List<String> volumesFrom = ImmutableList.of();
    protected boolean privileged;
+   protected boolean openStdin;
    protected Config.Builder configBuilder;
 
    @Override
@@ -122,6 +123,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
          eTo.extraHosts(extraHosts);
          eTo.volumesFrom(volumesFrom);
          eTo.privileged(privileged);
+         eTo.openStdin(openStdin);
          eTo.configBuilder(configBuilder);
       }
    }
@@ -147,6 +149,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
               equal(this.extraHosts, that.extraHosts) &&
               equal(this.volumesFrom, that.volumesFrom) &&
               equal(this.privileged, that.privileged) &&
+              equal(this.openStdin, that.openStdin) &&
               buildersEqual(this.configBuilder, that.configBuilder);
    }
 
@@ -161,7 +164,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
    @Override
    public int hashCode() {
       return Objects.hashCode(super.hashCode(), volumes, hostname, dns, memory, entrypoint, commands, cpuShares, env,
-            portBindings, extraHosts, configBuilder);
+            portBindings, extraHosts, volumesFrom, privileged, openStdin, configBuilder);
    }
 
    @Override
@@ -179,6 +182,8 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
               .add("networkMode", networkMode)
               .add("extraHosts", extraHosts)
               .add("volumesFrom", volumesFrom)
+              .add("privileged", privileged)
+              .add("openStdin", openStdin)
               .add("configBuilder", configBuilder)
               .toString();
    }
@@ -305,6 +310,17 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
    }
 
    /**
+    * Keep {@code STDIN} open when running interactive workloads in the container.
+    *
+    * @param openStdin Whether the container should keep STDIN open
+    * @return this instance
+    */
+   public DockerTemplateOptions openStdin(boolean openStdin) {
+      this.openStdin = openStdin;
+      return this;
+   }
+
+   /**
     * This method sets Config.Builder configuration object, which can be used as
     * a replacement for all the other settings from this class. Some values in
     * the provided Config.Builder instance (the image name for instance) can be
@@ -347,6 +363,8 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
 
    public boolean getPrivileged() { return privileged; }
 
+   public boolean getOpenStdin() { return openStdin; }
+
    public Config.Builder getConfigBuilder() { return configBuilder; }
 
    public static class Builder {
@@ -480,6 +498,14 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
       }
 
       /**
+       * @see DockerTemplateOptions#openStdin(boolean)
+       */
+      public static DockerTemplateOptions openStdin(boolean openStdin) {
+         DockerTemplateOptions options = new DockerTemplateOptions();
+         return options.openStdin(openStdin);
+      }
+
+      /**
        * @see DockerTemplateOptions#configBuilder(Config.Builder)
        */
       public static DockerTemplateOptions configBuilder(Config.Builder configBuilder) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e0dfe075/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 ebd7f5b..a1c9cae 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
@@ -98,6 +98,7 @@ public class DockerComputeServiceAdapter implements
          containerConfigBuilder.memory(templateOptions.getMemory());
          containerConfigBuilder.hostname(templateOptions.getHostname());
          containerConfigBuilder.cpuShares(templateOptions.getCpuShares());
+         containerConfigBuilder.openStdin(templateOptions.getOpenStdin());
          containerConfigBuilder.env(templateOptions.getEnv());
 
          if (!templateOptions.getVolumes().isEmpty()) {
@@ -110,13 +111,13 @@ public class DockerComputeServiceAdapter implements
 
          HostConfig.Builder hostConfigBuilder = HostConfig.builder()
                  .publishAllPorts(true)
-                 .privileged( templateOptions.getPrivileged() );
+                 .privileged(templateOptions.getPrivileged());
 
          if (!templateOptions.getPortBindings().isEmpty()) {
             Map<String, List<Map<String, String>>> portBindings = Maps.newHashMap();
             for (Map.Entry<Integer, Integer> entry : templateOptions.getPortBindings().entrySet()) {
                portBindings.put(entry.getValue() + "/tcp",
-                       Lists.<Map<String, String>>newArrayList(ImmutableMap.of("HostPort", Integer.toString(entry.getKey()))));
+                       Lists.<Map<String, String>>newArrayList(ImmutableMap.of("HostIp", "0.0.0.0", "HostPort", Integer.toString(entry.getKey()))));
             }
             hostConfigBuilder.portBindings(portBindings);
          }
@@ -167,6 +168,22 @@ public class DockerComputeServiceAdapter implements
       // build once more after setting inboundPorts
       containerConfig = containerConfigBuilder.build();
 
+      // finally update port bindings
+      Map<String, List<Map<String, String>>> portBindings = Maps.newHashMap();
+      Map<String, List<Map<String, String>>> existingBindings = containerConfig.hostConfig().portBindings();
+      if (existingBindings != null) {
+          portBindings.putAll(existingBindings);
+      }
+      for (String exposedPort : containerConfig.exposedPorts().keySet()) {
+         if (!portBindings.containsKey(exposedPort)) {
+            portBindings.put(exposedPort, Lists.<Map<String, String>>newArrayList(ImmutableMap.of("HostIp", "0.0.0.0")));
+         }
+      }
+      HostConfig.Builder hostConfigBuilder = HostConfig.builder().fromHostConfig(containerConfig.hostConfig());
+      hostConfigBuilder.portBindings(portBindings);
+      containerConfigBuilder.hostConfig(hostConfigBuilder.build());
+      containerConfig = containerConfigBuilder.build();
+
       logger.debug(">> creating new container with containerConfig(%s)", containerConfig);
       Container container = api.getContainerApi().createContainer(name, containerConfig);
       logger.trace("<< container(%s)", container.id());