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/05/26 10:19:23 UTC

[2/2] jclouds-labs git commit: [JCLOUDS-1118] fix configuration options location; mark some fields Nullable

[JCLOUDS-1118] fix configuration options location; mark some fields Nullable


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

Branch: refs/heads/master
Commit: 6d078e6900be92b93babfc640a90cd61bf3129e2
Parents: c269e01
Author: Josef Cacek <jc...@redhat.com>
Authored: Tue May 24 14:51:45 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Thu May 26 12:07:39 2016 +0200

----------------------------------------------------------------------
 .../java/org/jclouds/docker/domain/Config.java  | 120 +--------
 .../org/jclouds/docker/domain/HostConfig.java   |  50 +++-
 .../java/org/jclouds/docker/domain/Info.java    |   4 +-
 .../jclouds/docker/domain/NetworkSettings.java  |   8 +-
 .../org/jclouds/docker/domain/ConfigTest.java   |   3 -
 .../docker/features/ContainerApiLiveTest.java   |   5 +-
 .../docker/parse/ContainerParseTest.java        |   3 +
 .../parse/ContainerVersionMajor1Minor21.java    | 263 +++++++++++++++++++
 .../jclouds/docker/parse/Info2ParseTest.java    |  72 +++++
 .../test/resources/container-1.21-create.json   |  72 +++++
 .../test/resources/container-1.21-inspect.json  | 147 +++++++++++
 docker/src/test/resources/container.json        |   7 +-
 docker/src/test/resources/info2.json            |  90 +++++++
 13 files changed, 712 insertions(+), 132 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/main/java/org/jclouds/docker/domain/Config.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/Config.java b/docker/src/main/java/org/jclouds/docker/domain/Config.java
index fbe07ca..58658de 100644
--- a/docker/src/main/java/org/jclouds/docker/domain/Config.java
+++ b/docker/src/main/java/org/jclouds/docker/domain/Config.java
@@ -23,6 +23,7 @@ import static org.jclouds.docker.internal.NullSafeCopies.copyWithNullOf;
 import java.util.List;
 import java.util.Map;
 
+import org.jclouds.docker.domain.HostConfig.Builder;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
 
@@ -76,30 +77,6 @@ public abstract class Config {
 
    @Nullable public abstract HostConfig hostConfig();
 
-   @Nullable public abstract List<String> binds();
-
-   @Nullable public abstract List<String> links();
-
-   public abstract List<Map<String, String>> lxcConf();
-
-   public abstract Map<String, List<Map<String, String>>> portBindings();
-
-   public abstract boolean publishAllPorts();
-
-   public abstract boolean privileged();
-
-   @Nullable public abstract List<String> dns();
-
-   @Nullable public abstract List<String> dnsSearch();
-
-   @Nullable public abstract List<String> volumesFrom();
-
-   @Nullable public abstract List<String> capAdd();
-
-   @Nullable public abstract List<String> capDrop();
-
-   public abstract Map<String, String> restartPolicy();
-
    Config() {
    }
 
@@ -107,24 +84,17 @@ public abstract class Config {
          {
                  "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"
+                 "WorkingDir", "NetworkDisabled", "ExposedPorts", "SecurityOpts", "HostConfig"
          })
    public static Config create(String hostname, String domainname, String user, int memory, int memorySwap,
          int cpuShares, boolean attachStdin, boolean attachStdout, boolean attachStderr, boolean tty,
          boolean openStdin, boolean stdinOnce, List<String> env, List<String> cmd, List<String> entrypoint,
          String image, Map<String, ?> volumes, String workingDir, boolean networkDisabled,
-         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, List<String> dnsSearch, List<String> volumesFrom,
-         List<String> capAdd, List<String> capDrop, Map<String, String> restartPolicy) {
+         Map<String, ?> exposedPorts, List<String> securityOpts, HostConfig hostConfig) {
       return new AutoValue_Config(hostname, domainname, user, memory, memorySwap, cpuShares, attachStdin,
               attachStdout, attachStderr, tty, openStdin, stdinOnce, copyWithNullOf(env), copyWithNullOf(cmd),
               copyWithNullOf(entrypoint), image, copyWithNullOf(volumes), workingDir, networkDisabled,
-              copyOf(exposedPorts), copyOf(securityOpts), hostConfig,
-              copyWithNullOf(binds), copyWithNullOf(links), copyOf(lxcConf), copyOf(portBindings), publishAllPorts, privileged,
-              copyWithNullOf(dns), copyWithNullOf(dnsSearch), copyWithNullOf(volumesFrom), copyWithNullOf(capAdd), copyWithNullOf(capDrop), copyOf(restartPolicy));
+              copyOf(exposedPorts), copyOf(securityOpts), hostConfig);
    }
 
    public static Builder builder() {
@@ -158,18 +128,6 @@ public abstract class Config {
       private Map<String, ?> exposedPorts = Maps.newHashMap();
       private List<String> securityOpts = Lists.newArrayList();
       private HostConfig hostConfig;
-      private List<String> binds;
-      private List<String> links;
-      private List<Map<String, String>> lxcConf = Lists.newArrayList();
-      private Map<String, List<Map<String, String>>> portBindings = Maps.newHashMap();
-      private boolean publishAllPorts;
-      private boolean privileged;
-      private List<String> dns;
-      private List<String> dnsSearch;
-      private List<String> volumesFrom;
-      private List<String> capAdd;
-      private List<String> capDrop;
-      private Map<String, String> restartPolicy = Maps.newHashMap();
 
       public Builder hostname(String hostname) {
          this.hostname = hostname;
@@ -287,71 +245,10 @@ public abstract class Config {
          return this;
       }
 
-      public Builder binds(List<String> binds) {
-         this.binds = binds;
-         return this;
-      }
-
-      public Builder links(List<String> links) {
-         this.links = links;
-         return this;
-      }
-
-      public Builder lxcConf(List<Map<String, String>> lxcConf) {
-         this.lxcConf = lxcConf;
-         return this;
-      }
-
-      public Builder portBindings(Map<String, List<Map<String, String>>> portBindings) {
-         this.portBindings = portBindings;
-         return this;
-      }
-
-      public Builder publishAllPorts(boolean publishAllPorts) {
-         this.publishAllPorts = publishAllPorts;
-         return this;
-      }
-
-      public Builder privileged(boolean privileged) {
-         this.privileged = privileged;
-         return this;
-      }
-
-      public Builder dns(List<String>  dns) {
-         this.dns = dns;
-         return this;
-      }
-
-      public Builder dnsSearch(List<String> dnsSearch) {
-         this.dnsSearch = dnsSearch;
-         return this;
-      }
-
-      public Builder volumesFrom(List<String> volumesFrom) {
-         this.volumesFrom = volumesFrom;
-         return this;
-      }
-
-      public Builder capAdd(List<String> capAdd) {
-         this.capAdd = capAdd;
-         return this;
-      }
-
-      public Builder capDrop(List<String> capDrop) {
-         this.capDrop = capDrop;
-         return this;
-      }
-
-      public Builder restartPolicy(Map<String, String> restartPolicy) {
-         this.restartPolicy = restartPolicy;
-         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);
+                 networkDisabled, exposedPorts, securityOpts, hostConfig);
       }
 
       public Builder fromConfig(Config in) {
@@ -360,11 +257,8 @@ public abstract class Config {
                  .attachStdout(in.attachStdout()).attachStderr(in.attachStderr()).tty(in.tty())
                  .openStdin(in.openStdin()).stdinOnce(in.stdinOnce()).env(in.env()).cmd(in.cmd())
                  .entrypoint(in.entrypoint()).image(in.image()).volumes(in.volumes()).workingDir(in.workingDir())
-                 .networkDisabled(in.networkDisabled()).exposedPorts(in.exposedPorts()).securityOpts(in.securityOpts())
-                 .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());
+                 .networkDisabled(in.networkDisabled()).exposedPorts(in.exposedPorts())
+                 .securityOpts(in.securityOpts()).hostConfig(in.hostConfig());
       }
 
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/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 1ebdb2c..b4ee4f3 100644
--- a/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java
+++ b/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java
@@ -55,16 +55,29 @@ public abstract class HostConfig {
 
    @Nullable public abstract String networkMode();
 
+   @Nullable public abstract List<String> securityOpt();
+
+   @Nullable public abstract List<String> capAdd();
+
+   @Nullable public abstract List<String> capDrop();
+
+   public abstract Map<String, String> restartPolicy();
+
+
+
    HostConfig() {
    }
 
    @SerializedNames({ "ContainerIDFile", "Binds", "LxcConf", "Privileged", "Dns", "DnsSearch", "PortBindings",
-         "Links", "ExtraHosts", "PublishAllPorts", "VolumesFrom", "NetworkMode" })
+         "Links", "ExtraHosts", "PublishAllPorts", "VolumesFrom", "NetworkMode", "SecurityOpt",
+         "CapAdd", "CapDrop", "RestartPolicy" })
    public static HostConfig create(String containerIDFile, List<String> binds, List<Map<String, String>> lxcConf,
          boolean privileged, List<String> dns, List<String> dnsSearch, Map<String, List<Map<String, String>>> portBindings,
-         List<String> links, List<String> extraHosts, boolean publishAllPorts, List<String> volumesFrom, String networkMode) {
+         List<String> links, List<String> extraHosts, boolean publishAllPorts, List<String> volumesFrom, String networkMode, 
+         List<String> securityOpt, List<String> capAdd, List<String> capDrop, Map<String, String> restartPolicy) {
       return new AutoValue_HostConfig(containerIDFile, copyWithNullOf(binds), copyOf(lxcConf), privileged, copyWithNullOf(dns), copyWithNullOf(dnsSearch),
-            copyOf(portBindings), copyWithNullOf(links), copyWithNullOf(extraHosts), publishAllPorts, copyWithNullOf(volumesFrom), networkMode);
+            copyOf(portBindings), copyWithNullOf(links), copyWithNullOf(extraHosts), publishAllPorts, copyWithNullOf(volumesFrom), networkMode,
+            copyOf(securityOpt), copyWithNullOf(capAdd), copyWithNullOf(capDrop), copyOf(restartPolicy));
    }
 
    public static Builder builder() {
@@ -89,7 +102,11 @@ public abstract class HostConfig {
       private boolean publishAllPorts;
       private List<String> volumesFrom;
       private String networkMode;
-
+      private List<String> securityOpt = Lists.newArrayList();
+      private List<String> capAdd;
+      private List<String> capDrop;
+      private Map<String, String> restartPolicy = Maps.newHashMap();
+      
       public Builder containerIDFile(String containerIDFile) {
          this.containerIDFile = containerIDFile;
          return this;
@@ -150,16 +167,37 @@ public abstract class HostConfig {
          return this;
       }
 
+      public Builder securityOpt(List<String> securityOpt) {
+         this.securityOpt = securityOpt;
+         return this;
+      }
+
+      public Builder capAdd(List<String> capAdd) {
+         this.capAdd = capAdd;
+         return this;
+      }
+
+      public Builder capDrop(List<String> capDrop) {
+         this.capDrop = capDrop;
+         return this;
+      }
+
+      public Builder restartPolicy(Map<String, String> restartPolicy) {
+         this.restartPolicy = restartPolicy;
+         return this;
+      }
+      
       public HostConfig build() {
          return HostConfig.create(containerIDFile, binds, lxcConf, privileged, dns, dnsSearch, portBindings, links,
-               extraHosts, publishAllPorts, volumesFrom, networkMode);
+               extraHosts, publishAllPorts, volumesFrom, networkMode, securityOpt, capAdd, capDrop, restartPolicy);
       }
 
       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())
                .extraHosts(in.extraHosts()).portBindings(in.portBindings()).publishAllPorts(in.publishAllPorts())
-               .volumesFrom(in.volumesFrom()).networkMode(in.networkMode());
+               .volumesFrom(in.volumesFrom()).networkMode(in.networkMode()).securityOpt(in.securityOpt())
+               .capAdd(in.capAdd()).capDrop(in.capDrop()).restartPolicy(in.restartPolicy());
       }
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/main/java/org/jclouds/docker/domain/Info.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/Info.java b/docker/src/main/java/org/jclouds/docker/domain/Info.java
index e2b51ca..6a071c3 100644
--- a/docker/src/main/java/org/jclouds/docker/domain/Info.java
+++ b/docker/src/main/java/org/jclouds/docker/domain/Info.java
@@ -42,9 +42,9 @@ public abstract class Info {
 
    public abstract String indexServerAddress();
 
-   public abstract String initPath();
+   @Nullable public abstract String initPath();
 
-   public abstract String initSha1();
+   @Nullable public abstract String initSha1();
 
    public abstract String kernelVersion();
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java b/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
index ca27729..2217992 100644
--- a/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
+++ b/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
@@ -16,16 +16,16 @@
  */
 package org.jclouds.docker.domain;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import static org.jclouds.docker.internal.NullSafeCopies.copyOf;
+
 import java.util.List;
 import java.util.Map;
 
+import org.jclouds.docker.internal.NullSafeCopies;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
 
 import com.google.auto.value.AutoValue;
-import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
@@ -135,7 +135,7 @@ public abstract class NetworkSettings {
       private String gateway;
       private String bridge;
       private String portMapping;
-      private Map<String, List<Map<String, String>>> ports = ImmutableMap.of();
+      private Map<String, List<Map<String, String>>> ports;
       private String sandboxId;
       private boolean hairpinMode;
       private String linkLocalIPv6Address;
@@ -176,7 +176,7 @@ public abstract class NetworkSettings {
       }
 
       public Builder ports(Map<String, List<Map<String, String>>> ports) {
-         this.ports = ImmutableMap.copyOf(checkNotNull(ports, "ports"));
+         this.ports = NullSafeCopies.copyWithNullOf(ports);
          return this;
       }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/test/java/org/jclouds/docker/domain/ConfigTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/domain/ConfigTest.java b/docker/src/test/java/org/jclouds/docker/domain/ConfigTest.java
index 0eef24d..6ba9ac5 100644
--- a/docker/src/test/java/org/jclouds/docker/domain/ConfigTest.java
+++ b/docker/src/test/java/org/jclouds/docker/domain/ConfigTest.java
@@ -58,8 +58,5 @@ public class ConfigTest {
       assertThat(config.domainname()).isNull();
       assertThat(config.workingDir()).isNull();
       assertThat(config.hostConfig()).isNull();
-      assertThat(config.dns()).isNull();
-      assertThat(config.dnsSearch()).isNull();
-      assertThat(config.volumesFrom()).isNull();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java b/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java
index 1b23b07..6c024d6 100644
--- a/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java
+++ b/docker/src/test/java/org/jclouds/docker/features/ContainerApiLiveTest.java
@@ -85,7 +85,10 @@ public class ContainerApiLiveTest extends BaseDockerApiLiveTest {
    }
 
    @Test(dependsOnMethods = "testStartContainer")
-   public void testAttachContainer() {
+   public void testAttachContainer() throws InterruptedException {
+      // wait 2 seconds - give a container chance to echo the string
+      Thread.sleep(2000L);
+      
       InputStream attachStream = api().attach(container.id(), AttachOptions.Builder.logs(true).stream(false).stdout(true));
       String stream = consumeStream(attachStream);
       assertThat(stream.trim()).contains("hello world");

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/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 42e94be..53ef7dc 100644
--- a/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
+++ b/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
@@ -111,10 +111,13 @@ public class ContainerParseTest extends BaseDockerParseTest<Container> {
                                       "6783/tcp", ImmutableList.<Map<String, String>>of(ImmutableMap.of("HostIp", "", "HostPort", "6783")),
                                       "6783/udp", ImmutableList.<Map<String, String>>of(ImmutableMap.of("HostIp", "", "HostPort", "6783")))
                       )
+                      .capAdd(ImmutableList.of("NET_ADMIN"))
+                      .capDrop(ImmutableList.of("MKNOD"))
                       .dns(ImmutableList.of("8.8.8.8", "8.8.4.4"))
                       .extraHosts(ImmutableList.<String>of("extra:169.254.0.1"))
                       .privileged(true)
                       .networkMode("bridge")
+                      .restartPolicy(ImmutableMap.<String, String> of("MaximumRetryCount", "0", "Name", ""))
                       .build())
               .driver("aufs")
               .execDriver("native-0.2")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/test/java/org/jclouds/docker/parse/ContainerVersionMajor1Minor21.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/ContainerVersionMajor1Minor21.java b/docker/src/test/java/org/jclouds/docker/parse/ContainerVersionMajor1Minor21.java
new file mode 100644
index 0000000..2b990e1
--- /dev/null
+++ b/docker/src/test/java/org/jclouds/docker/parse/ContainerVersionMajor1Minor21.java
@@ -0,0 +1,263 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.parse;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.date.internal.SimpleDateFormatDateService;
+import org.jclouds.docker.domain.Config;
+import org.jclouds.docker.domain.Container;
+import org.jclouds.docker.domain.HostConfig;
+import org.jclouds.docker.domain.NetworkSettings;
+import org.jclouds.docker.domain.State;
+import org.jclouds.docker.internal.BaseDockerParseTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * This class tests Containers and Config parsing for Docker API in version 1.21. The input JSON comes from examples in 
+ * <a href="https://docs.docker.com/engine/reference/api/docker_remote_api_v1.21/">Docker Remote API documentation 1.21</a>.
+ * <p>
+ * Two modifications were made in the "/container-1.21-create.json" due to incompatible types 
+ * <ul>
+ * <li>the Entrypoint field value was changed from String to List<li>
+ * <li>the LxcConf field value was changed from Map to List</li>
+ * <ul>
+ */
+public class ContainerVersionMajor1Minor21 {
+
+   @Test(groups = "unit")
+   public static class CreateTest  extends BaseDockerParseTest<Config> {
+      @Override
+      public String resource() {
+         return "/container-1.21-create.json";
+      }
+
+      @Override
+      @Consumes(MediaType.APPLICATION_JSON)
+      public Config expected() {
+         return Config.builder()
+                     .hostname("")
+                     .domainname("")
+                     .user("")
+                     .attachStdin(false)
+                     .attachStdout(true)
+                     .attachStderr(true)
+                     .tty(false)
+                     .openStdin(false)
+                     .stdinOnce(false)
+                     .env(ImmutableList.of("FOO=bar", "BAZ=quux"))
+                     .cmd(ImmutableList.of("date"))
+                     //original value of the "Entrypoint" in JSON doesn't contain List but String! 
+                     //Both types are allowed by docker Remote API, but we are not able to parse both.
+                     .entrypoint(ImmutableList.of(""))
+                     .image("ubuntu")
+//                     "Labels": {
+//                        "com.example.vendor": "Acme",
+//                        "com.example.license": "GPL",
+//                        "com.example.version": "1.0"
+//                      },
+                     .volumes(ImmutableMap.of("/volumes/data", ImmutableMap.of()))
+                     .workingDir("")
+                     .networkDisabled(false)
+//                     "MacAddress": "12:34:56:78:9a:bc",
+                     .exposedPorts(ImmutableMap.of("22/tcp", ImmutableMap.of()))
+//                     "StopSignal": "SIGTERM",
+                     .hostConfig(HostConfig.builder()
+                           .binds(ImmutableList.of("/tmp:/tmp"))
+                           .links(ImmutableList.of("redis3:redis"))
+                           //The LxcConf causes the type mismatch too (Map vs List<Map>)
+                           .lxcConf(ImmutableList.<Map<String, String>> of(
+                                 ImmutableMap.<String, String> of("lxc.utsname", "docker")))
+//                           "Memory": 0,
+//                           "MemorySwap": 0,
+//                           "MemoryReservation": 0,
+//                           "KernelMemory": 0,
+//                           "CpuShares": 512,
+//                           "CpuPeriod": 100000,
+//                           "CpuQuota": 50000,
+//                           "CpusetCpus": "0,1",
+//                           "CpusetMems": "0,1",
+//                           "BlkioWeight": 300,
+//                           "MemorySwappiness": 60,
+//                           "OomKillDisable": false,
+                           .portBindings(ImmutableMap.<String, List<Map<String, String>>> of(
+                                 "22/tcp", ImmutableList.<Map<String, String>> of(ImmutableMap.of("HostPort", "11022"))))
+                           .publishAllPorts(false)
+                           .privileged(false)
+//                           "ReadonlyRootfs": false,
+                           .dns(ImmutableList.of("8.8.8.8"))
+//                           "DnsOptions": [""],
+                           .dnsSearch(ImmutableList.of(""))
+                           .extraHosts(null)
+                           .volumesFrom(ImmutableList.of("parent", "other:ro"))
+                           .capAdd(ImmutableList.of("NET_ADMIN"))
+                           .capDrop(ImmutableList.of("MKNOD"))
+//                           "GroupAdd": ["newgroup"],
+                           .restartPolicy(ImmutableMap.of("Name", "", "MaximumRetryCount", "0"))
+                           .networkMode("bridge")
+//                           "Devices": [],
+//                           "Ulimits": [{}],                           
+//                           "LogConfig": { "Type": "json-file", "Config": {} },
+                           .securityOpt(ImmutableList.<String>of())
+//                           "CgroupParent": "",
+//                           "VolumeDriver": ""
+                           .build()
+      )
+                     .build();
+      }
+   }
+   
+   @Test(groups = "unit")
+   public static class InspectTest  extends BaseDockerParseTest<Container> {
+      @Override
+      public String resource() {
+         return "/container-1.21-inspect.json";
+      }
+
+      @Override
+      @Consumes(MediaType.APPLICATION_JSON)
+      public Container expected() {
+         return Container.builder()
+//            "AppArmorProfile": "",
+               .args(ImmutableList.<String>of("-c", "exit 9"))
+               .config(Config.builder()
+                     .attachStderr(true)
+                     .attachStdin(false)
+                     .attachStdout(true)
+                     .cmd(ImmutableList.<String> of("/bin/sh", "-c", "exit 9"))
+                     .domainname("")
+                     .entrypoint(null)
+                     .env(ImmutableList.<String> of("PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"))
+                     .exposedPorts(null)
+                     .hostname("ba033ac44011")
+                     .image("ubuntu")                    
+//                "Labels": {
+//                    "com.example.vendor": "Acme",
+//                    "com.example.license": "GPL",
+//                    "com.example.version": "1.0"
+//                },
+//                "MacAddress": "",
+                     .networkDisabled(false)
+//                "OnBuild": null,
+                     .openStdin(false)
+                     .stdinOnce(false)
+                     .tty(false)
+                     .user("")
+                     .volumes(null)
+                     .workingDir("")
+//                "StopSignal": "SIGTERM"
+                     .build())
+               .created(new SimpleDateFormatDateService().iso8601DateParse("2015-01-06T15:47:31.485331387Z"))
+               .driver("devicemapper")
+               .execDriver("native-0.2")
+//            "ExecIDs": null,
+               .hostConfig(HostConfig.builder()
+                     .binds(null)
+//                "BlkioWeight": 0,
+                     .capAdd(null)
+                     .capDrop(null)
+                     .containerIDFile("")
+//                "CpusetCpus": "",
+//                "CpusetMems": "",
+//                "CpuShares": 0,
+//                "CpuPeriod": 100000,
+//                "Devices": [],
+                     .dns(null)
+//                "DnsOptions": null,
+                     .dnsSearch(null)
+                     .extraHosts(null)
+//                "IpcMode": "",
+                     .links(null)
+                     .lxcConf(ImmutableList.<Map<String, String>> of())
+//                "Memory": 0,
+//                "MemorySwap": 0,
+//                "MemoryReservation": 0,
+//                "KernelMemory": 0,
+//                "OomKillDisable": false,
+                     .networkMode("bridge")
+                     .portBindings(ImmutableMap.<String, List<Map<String, String>>> of())
+                     .privileged(false)
+//                "ReadonlyRootfs": false,
+                     .publishAllPorts(false)
+                     .restartPolicy(ImmutableMap.<String, String> of("MaximumRetryCount", "2", "Name", "on-failure"))
+//                "LogConfig": {
+//                    "Config": null,
+//                    "Type": "json-file"
+//                },
+                     .securityOpt(null)
+                     .volumesFrom(null)
+//                "Ulimits": [{}],
+//                "VolumeDriver": ""
+                     .build())
+               .hostnamePath("/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname")
+               .hostsPath("/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts")
+//            "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log",
+               .id("ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39")
+               .image("04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2")
+               .mountLabel("")
+               .name("/boring_euclid")
+               .networkSettings(NetworkSettings.builder()
+                     .bridge("")
+                     .sandboxId("")
+                     .hairpinMode(false)
+                     .linkLocalIPv6Address("")
+                     .linkLocalIPv6PrefixLen(0)
+                     .ports(null)
+                     .sandboxKey("")
+                     .secondaryIPAddresses(null)
+                     .secondaryIPv6Addresses(null)
+                     .endpointId("")
+                     .gateway("")
+                     .globalIPv6Address("")
+                     .globalIPv6PrefixLen(0)
+                     .ipAddress("")
+                     .ipPrefixLen(0)
+                     .ipv6Gateway("")
+                     .macAddress("")
+                     .networks(ImmutableMap.<String, NetworkSettings.Details> of(
+                           "bridge", NetworkSettings.Details.create("", "", "", 0, "", "", 0, "")))
+                     .build())
+               .path("/bin/sh")
+               .processLabel("")
+               .resolvConfPath("/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf")
+//            "RestartCount": 1,
+               .state(State.create(0, true, 9, "2015-01-06T15:47:32.072697474Z", "2015-01-06T15:47:32.080254511Z", false, false, "running", false,
+                     // We don't have the "Dead" field in this API version! 
+                     false, 
+                     ""
+//                "Paused": false,
+//                "Running": true,
+                     ))
+//            "Mounts": [
+//                {
+//                    "Source": "/data",
+//                    "Destination": "/data",
+//                    "Mode": "ro,Z",
+//                    "RW": false
+//                }
+               .build();
+      }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/test/java/org/jclouds/docker/parse/Info2ParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/Info2ParseTest.java b/docker/src/test/java/org/jclouds/docker/parse/Info2ParseTest.java
new file mode 100644
index 0000000..949acc7
--- /dev/null
+++ b/docker/src/test/java/org/jclouds/docker/parse/Info2ParseTest.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.docker.parse;
+
+import java.util.List;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.docker.domain.Info;
+import org.jclouds.docker.internal.BaseDockerParseTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+@Test(groups = "unit")
+public class Info2ParseTest extends BaseDockerParseTest<Info> {
+
+   @Override
+   public String resource() {
+      return "/info2.json";
+   }
+
+   @Override
+   @Consumes(MediaType.APPLICATION_JSON)
+   public Info expected() {
+      return Info.create(
+              0, // containers
+              false, // debug
+              "aufs", // driver
+              ImmutableList.<List<String>>of(
+                      ImmutableList.of("Root Dir", "/var/lib/docker/aufs"),
+                      ImmutableList.of("Backing Filesystem", "extfs"),
+                      ImmutableList.of("Dirs", "117"),
+                      ImmutableList.of( "Dirperm1 Supported", "true")
+              ), // driverStatus
+              "", // ExecutionDriver
+              true, // IPv4Forwarding
+              39, // Images
+              "https://index.docker.io/v1/", // IndexServerAddress
+              null, // InitPath
+              null, // InitSha1
+              "4.4.0-22-generic", // KernelVersion
+              true, // MemoryLimit
+              0, // NEventsListener
+              33, // NFd
+              83, // NGoroutines
+              "Ubuntu 16.04 LTS", // OperatingSystem
+              false, // SwapLimit
+              "/var/lib/docker", // DockerRootDir
+              null, // Labels
+              8248356864L, // MemTotal
+              4, // NCPU
+              "KFWR:PMVY:BEWE:TD52:5WEU:NXF4:I6S3:WDIE:GCRD:L3YA:VWC4:ZRYZ", // ID
+              "test" // name
+      );
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/test/resources/container-1.21-create.json
----------------------------------------------------------------------
diff --git a/docker/src/test/resources/container-1.21-create.json b/docker/src/test/resources/container-1.21-create.json
new file mode 100644
index 0000000..4998569
--- /dev/null
+++ b/docker/src/test/resources/container-1.21-create.json
@@ -0,0 +1,72 @@
+{
+       "Hostname": "",
+       "Domainname": "",
+       "User": "",
+       "AttachStdin": false,
+       "AttachStdout": true,
+       "AttachStderr": true,
+       "Tty": false,
+       "OpenStdin": false,
+       "StdinOnce": false,
+       "Env": [
+               "FOO=bar",
+               "BAZ=quux"
+       ],
+       "Cmd": [
+               "date"
+       ],
+       "Entrypoint": [""],
+       "Image": "ubuntu",
+       "Labels": {
+               "com.example.vendor": "Acme",
+               "com.example.license": "GPL",
+               "com.example.version": "1.0"
+       },
+       "Volumes": {
+         "/volumes/data": {}
+       },
+       "WorkingDir": "",
+       "NetworkDisabled": false,
+       "MacAddress": "12:34:56:78:9a:bc",
+       "ExposedPorts": {
+               "22/tcp": {}
+       },
+       "StopSignal": "SIGTERM",
+       "HostConfig": {
+         "Binds": ["/tmp:/tmp"],
+         "Links": ["redis3:redis"],
+         "LxcConf": [{"lxc.utsname":"docker"}],
+         "Memory": 0,
+         "MemorySwap": 0,
+         "MemoryReservation": 0,
+         "KernelMemory": 0,
+         "CpuShares": 512,
+         "CpuPeriod": 100000,
+         "CpuQuota": 50000,
+         "CpusetCpus": "0,1",
+         "CpusetMems": "0,1",
+         "BlkioWeight": 300,
+         "MemorySwappiness": 60,
+         "OomKillDisable": false,
+         "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] },
+         "PublishAllPorts": false,
+         "Privileged": false,
+         "ReadonlyRootfs": false,
+         "Dns": ["8.8.8.8"],
+         "DnsOptions": [""],
+         "DnsSearch": [""],
+         "ExtraHosts": null,
+         "VolumesFrom": ["parent", "other:ro"],
+         "CapAdd": ["NET_ADMIN"],
+         "CapDrop": ["MKNOD"],
+         "GroupAdd": ["newgroup"],
+         "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 },
+         "NetworkMode": "bridge",
+         "Devices": [],
+         "Ulimits": [{}],
+         "LogConfig": { "Type": "json-file", "Config": {} },
+         "SecurityOpt": [],
+         "CgroupParent": "",
+         "VolumeDriver": ""
+      }
+  }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/test/resources/container-1.21-inspect.json
----------------------------------------------------------------------
diff --git a/docker/src/test/resources/container-1.21-inspect.json b/docker/src/test/resources/container-1.21-inspect.json
new file mode 100644
index 0000000..ade2851
--- /dev/null
+++ b/docker/src/test/resources/container-1.21-inspect.json
@@ -0,0 +1,147 @@
+{
+    "AppArmorProfile": "",
+    "Args": [
+        "-c",
+        "exit 9"
+    ],
+    "Config": {
+        "AttachStderr": true,
+        "AttachStdin": false,
+        "AttachStdout": true,
+        "Cmd": [
+            "/bin/sh",
+            "-c",
+            "exit 9"
+        ],
+        "Domainname": "",
+        "Entrypoint": null,
+        "Env": [
+            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+        ],
+        "ExposedPorts": null,
+        "Hostname": "ba033ac44011",
+        "Image": "ubuntu",
+        "Labels": {
+            "com.example.vendor": "Acme",
+            "com.example.license": "GPL",
+            "com.example.version": "1.0"
+        },
+        "MacAddress": "",
+        "NetworkDisabled": false,
+        "OnBuild": null,
+        "OpenStdin": false,
+        "StdinOnce": false,
+        "Tty": false,
+        "User": "",
+        "Volumes": null,
+        "WorkingDir": "",
+        "StopSignal": "SIGTERM"
+    },
+    "Created": "2015-01-06T15:47:31.485331387Z",
+    "Driver": "devicemapper",
+    "ExecDriver": "native-0.2",
+    "ExecIDs": null,
+    "HostConfig": {
+        "Binds": null,
+        "BlkioWeight": 0,
+        "CapAdd": null,
+        "CapDrop": null,
+        "ContainerIDFile": "",
+        "CpusetCpus": "",
+        "CpusetMems": "",
+        "CpuShares": 0,
+        "CpuPeriod": 100000,
+        "Devices": [],
+        "Dns": null,
+        "DnsOptions": null,
+        "DnsSearch": null,
+        "ExtraHosts": null,
+        "IpcMode": "",
+        "Links": null,
+        "LxcConf": [],
+        "Memory": 0,
+        "MemorySwap": 0,
+        "MemoryReservation": 0,
+        "KernelMemory": 0,
+        "OomKillDisable": false,
+        "NetworkMode": "bridge",
+        "PortBindings": {},
+        "Privileged": false,
+        "ReadonlyRootfs": false,
+        "PublishAllPorts": false,
+        "RestartPolicy": {
+            "MaximumRetryCount": 2,
+            "Name": "on-failure"
+        },
+        "LogConfig": {
+            "Config": null,
+            "Type": "json-file"
+        },
+        "SecurityOpt": null,
+        "VolumesFrom": null,
+        "Ulimits": [{}],
+        "VolumeDriver": ""
+    },
+    "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname",
+    "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts",
+    "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log",
+    "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39",
+    "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2",
+    "MountLabel": "",
+    "Name": "/boring_euclid",
+    "NetworkSettings": {
+        "Bridge": "",
+        "SandboxID": "",
+        "HairpinMode": false,
+        "LinkLocalIPv6Address": "",
+        "LinkLocalIPv6PrefixLen": 0,
+        "Ports": null,
+        "SandboxKey": "",
+        "SecondaryIPAddresses": null,
+        "SecondaryIPv6Addresses": null,
+        "EndpointID": "",
+        "Gateway": "",
+        "GlobalIPv6Address": "",
+        "GlobalIPv6PrefixLen": 0,
+        "IPAddress": "",
+        "IPPrefixLen": 0,
+        "IPv6Gateway": "",
+        "MacAddress": "",
+        "Networks": {
+            "bridge": {
+                "EndpointID": "",
+                "Gateway": "",
+                "IPAddress": "",
+                "IPPrefixLen": 0,
+                "IPv6Gateway": "",
+                "GlobalIPv6Address": "",
+                "GlobalIPv6PrefixLen": 0,
+                "MacAddress": ""
+            }
+        }
+    },
+    "Path": "/bin/sh",
+    "ProcessLabel": "",
+    "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf",
+    "RestartCount": 1,
+    "State": {
+        "Error": "",
+        "ExitCode": 9,
+        "FinishedAt": "2015-01-06T15:47:32.080254511Z",
+        "OOMKilled": false,
+        "Paused": false,
+        "Pid": 0,
+        "Restarting": false,
+        "Running": true,
+        "StartedAt": "2015-01-06T15:47:32.072697474Z",
+        "Status": "running"
+    },
+    "Mounts": [
+        {
+            "Source": "/data",
+            "Destination": "/data",
+            "Mode": "ro,Z",
+            "RW": false
+        }
+    ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/test/resources/container.json
----------------------------------------------------------------------
diff --git a/docker/src/test/resources/container.json b/docker/src/test/resources/container.json
index fa1b61f..bc18e27 100644
--- a/docker/src/test/resources/container.json
+++ b/docker/src/test/resources/container.json
@@ -40,7 +40,7 @@
     "OnBuild": null,
     "OpenStdin": false,
     "PortSpecs": null,
-    "SecurityOpt": null,
+    "SecurityOpts": null,
     "StdinOnce": false,
     "Tty": false,
     "User": "",
@@ -52,8 +52,8 @@
   "ExecDriver": "native-0.2",
   "HostConfig": {
     "Binds": null,
-    "CapAdd": null,
-    "CapDrop": null,
+    "CapAdd": ["NET_ADMIN"],
+    "CapDrop": ["MKNOD"],
     "ContainerIDFile": "",
     "Devices": [],
     "Dns": [
@@ -137,6 +137,7 @@
   "Path": "/home/weave/weaver",
   "ProcessLabel": "",
   "ResolvConfPath": "/var/lib/docker/containers/6c9932f478bd761f32ddb54ed28ab42ab6fac6f2a279f561ea31503ee9d39524/resolv.conf",
+  "SecurityOpt": [],
   "State": {
     "Status": "running",
     "Running": true,

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6d078e69/docker/src/test/resources/info2.json
----------------------------------------------------------------------
diff --git a/docker/src/test/resources/info2.json b/docker/src/test/resources/info2.json
new file mode 100644
index 0000000..11a13d5
--- /dev/null
+++ b/docker/src/test/resources/info2.json
@@ -0,0 +1,90 @@
+{
+    "Architecture": "x86_64",
+    "BridgeNfIp6tables": true,
+    "BridgeNfIptables": true,
+    "CPUSet": true,
+    "CPUShares": true,
+    "CgroupDriver": "cgroupfs",
+    "ClusterAdvertise": "",
+    "ClusterStore": "",
+    "Containers": 0,
+    "ContainersPaused": 0,
+    "ContainersRunning": 0,
+    "ContainersStopped": 0,
+    "CpuCfsPeriod": true,
+    "CpuCfsQuota": true,
+    "Debug": false,
+    "DockerRootDir": "/var/lib/docker",
+    "Driver": "aufs",
+    "DriverStatus": [
+        [
+            "Root Dir",
+            "/var/lib/docker/aufs"
+        ],
+        [
+            "Backing Filesystem",
+            "extfs"
+        ],
+        [
+            "Dirs",
+            "117"
+        ],
+        [
+            "Dirperm1 Supported",
+            "true"
+        ]
+    ],
+    "ExecutionDriver": "",
+    "ExperimentalBuild": false,
+    "HttpProxy": "",
+    "HttpsProxy": "",
+    "ID": "KFWR:PMVY:BEWE:TD52:5WEU:NXF4:I6S3:WDIE:GCRD:L3YA:VWC4:ZRYZ",
+    "IPv4Forwarding": true,
+    "Images": 39,
+    "IndexServerAddress": "https://index.docker.io/v1/",
+    "KernelMemory": true,
+    "KernelVersion": "4.4.0-22-generic",
+    "Labels": null,
+    "LoggingDriver": "json-file",
+    "MemTotal": 8248356864,
+    "MemoryLimit": true,
+    "NCPU": 4,
+    "NEventsListener": 0,
+    "NFd": 33,
+    "NGoroutines": 83,
+    "Name": "test",
+    "NoProxy": "",
+    "OSType": "linux",
+    "OomKillDisable": true,
+    "OperatingSystem": "Ubuntu 16.04 LTS",
+    "Plugins": {
+        "Authorization": null,
+        "Network": [
+            "bridge",
+            "null",
+            "host"
+        ],
+        "Volume": [
+            "local"
+        ]
+    },
+    "RegistryConfig": {
+        "IndexConfigs": {
+            "docker.io": {
+                "Mirrors": null,
+                "Name": "docker.io",
+                "Official": true,
+                "Secure": true
+            }
+        },
+        "InsecureRegistryCIDRs": [
+            "0.0.0.0/0",
+            "127.0.0.0/8"
+        ],
+        "Mirrors": null
+    },
+    "ServerVersion": "1.11.1",
+    "SwapLimit": false,
+    "SystemStatus": null,
+    "SystemTime": "2016-05-24T15:20:15.407969411+02:00"
+}