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/08/30 09:35:58 UTC

[34/50] jclouds git commit: [JCLOUDS-1117] fix for advanced Docker configuration - the Config.Builder should stay unchanged if used

[JCLOUDS-1117] fix for advanced Docker configuration - the Config.Builder should stay unchanged if used


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

Branch: refs/heads/master
Commit: d4cf7743897000430eb8f102d713c0e4e8532c5b
Parents: 4ef2825
Author: Josef Cacek <jc...@redhat.com>
Authored: Tue May 24 14:09:06 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Thu May 26 12:07:33 2016 +0200

----------------------------------------------------------------------
 .../strategy/DockerComputeServiceAdapter.java   | 70 +++++++++++---------
 .../docker/compute/SshToCustomPortLiveTest.java | 14 +++-
 2 files changed, 49 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/d4cf7743/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 a1c9cae..3c88f31 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
@@ -89,9 +89,11 @@ public class DockerComputeServiceAdapter implements
       String loginUserPassword = template.getImage().getDefaultCredentials().getOptionalPassword().or("password");
 
       DockerTemplateOptions templateOptions = DockerTemplateOptions.class.cast(options);
+
+      Config containerConfig = null;
       Config.Builder containerConfigBuilder = templateOptions.getConfigBuilder();
       if (containerConfigBuilder == null) {
-         containerConfigBuilder = Config.builder();
+         containerConfigBuilder = Config.builder().image(imageId);
 
          containerConfigBuilder.entrypoint(templateOptions.getEntrypoint());
          containerConfigBuilder.cmd(templateOptions.getCommands());
@@ -110,14 +112,14 @@ public class DockerComputeServiceAdapter implements
          }
 
          HostConfig.Builder hostConfigBuilder = HostConfig.builder()
-                 .publishAllPorts(true)
-                 .privileged(templateOptions.getPrivileged());
+               .publishAllPorts(true)
+               .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("HostIp", "0.0.0.0", "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);
          }
@@ -147,41 +149,43 @@ public class DockerComputeServiceAdapter implements
          hostConfigBuilder.networkMode(templateOptions.getNetworkMode());
 
          containerConfigBuilder.hostConfig(hostConfigBuilder.build());
-      }
 
-      containerConfigBuilder.image(imageId);
-
-      // add the inbound ports into exposed ports map
-      Config containerConfig = containerConfigBuilder.build();
-      Map<String, Object> exposedPorts = Maps.newHashMap();
-      if (containerConfig.exposedPorts() == null) {
-         exposedPorts.putAll(containerConfig.exposedPorts());
-      }
-      for (int inboundPort : templateOptions.getInboundPorts()) {
-         String portKey = inboundPort + "/tcp";
-         if (!exposedPorts.containsKey(portKey)) {
-            exposedPorts.put(portKey, Maps.newHashMap());
+         // add the inbound ports into exposed ports map
+         containerConfig = containerConfigBuilder.build();
+         Map<String, Object> exposedPorts = Maps.newHashMap();
+         if (containerConfig.exposedPorts() == null) {
+            exposedPorts.putAll(containerConfig.exposedPorts());
          }
-      }
-      containerConfigBuilder.exposedPorts(exposedPorts);
+         for (int inboundPort : templateOptions.getInboundPorts()) {
+            String portKey = inboundPort + "/tcp";
+            if (!exposedPorts.containsKey(portKey)) {
+               exposedPorts.put(portKey, Maps.newHashMap());
+            }
+         }
+         containerConfigBuilder.exposedPorts(exposedPorts);
 
-      // build once more after setting inboundPorts
-      containerConfig = containerConfigBuilder.build();
+         // 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")));
+         // 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")));
+            }
          }
+         hostConfigBuilder = HostConfig.builder().fromHostConfig(containerConfig.hostConfig());
+         hostConfigBuilder.portBindings(portBindings);
+         containerConfigBuilder.hostConfig(hostConfigBuilder.build());
+
+      } else {
+         containerConfigBuilder.image(imageId);
       }
-      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);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/d4cf7743/apis/docker/src/test/java/org/jclouds/docker/compute/SshToCustomPortLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/docker/src/test/java/org/jclouds/docker/compute/SshToCustomPortLiveTest.java b/apis/docker/src/test/java/org/jclouds/docker/compute/SshToCustomPortLiveTest.java
index ba11feb..23f3838 100644
--- a/apis/docker/src/test/java/org/jclouds/docker/compute/SshToCustomPortLiveTest.java
+++ b/apis/docker/src/test/java/org/jclouds/docker/compute/SshToCustomPortLiveTest.java
@@ -26,6 +26,7 @@ import static org.testng.Assert.assertNotNull;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.List;
+import java.util.Map;
 
 import org.jclouds.compute.RunNodesException;
 import org.jclouds.compute.domain.ExecResponse;
@@ -49,8 +50,11 @@ import org.testng.annotations.Test;
 import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.inject.AbstractModule;
 import com.google.inject.Module;
 
@@ -61,6 +65,7 @@ import com.google.inject.Module;
 public class SshToCustomPortLiveTest extends BaseComputeServiceContextLiveTest {
 
    private static final int SSH_PORT = 8822;
+   private static final int SSH_PORT_BRIDGE = 18822;
    private static final String IMAGE_REPOSITORY = "jclouds/testrepo";
    private static final String IMAGE_TAG_1 = "testtag";
    private static final String IMAGE_TAG_2 = "second";
@@ -130,12 +135,17 @@ public class SshToCustomPortLiveTest extends BaseComputeServiceContextLiveTest {
 
    @Test(dependsOnMethods = "testImageCreated")
    public void testAdvancedConfig() throws RunNodesException {
+      final String portId = SSH_PORT + "/tcp";
       final DockerTemplateOptions options = DockerTemplateOptions.Builder
             .configBuilder(
                   Config.builder().env(ImmutableList.<String> of("SSH_PORT=" + SSH_PORT, "ROOT_PASSWORD=jcloudsRulez"))
-                        .hostConfig(HostConfig.builder().networkMode("host").build())
+                        .exposedPorts(ImmutableMap.<String, Object> of(portId, Maps.newHashMap()))
+                        .hostConfig(HostConfig.builder().networkMode("bridge")
+                              .portBindings(ImmutableMap.<String, List<Map<String, String>>> of(portId,
+                                    Lists.<Map<String, String>>newArrayList(ImmutableMap.of("HostPort", String.valueOf(SSH_PORT_BRIDGE)))))
+                              .build())
                         .image("test-if-this-value-is-correctly-overriden"))
-            .overrideLoginUser("root").overrideLoginPassword("jcloudsRulez").blockOnPort(SSH_PORT, 30);
+            .overrideLoginUser("root").overrideLoginPassword("jcloudsRulez").blockOnPort(SSH_PORT_BRIDGE, 30);
 
       final Template template = view.getComputeService().templateBuilder().imageId(image.id()).options(options).build();