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:28 UTC
[04/50] jclouds git commit: Minor fixes for the Docker provider
Minor fixes for the Docker provider
- Tidy up DockerTemplateOptions and add tests for new options
- Make Dns a list of strings in HostConfig
- Change template option builder to remove use of optionals
- Update tests to verify HostConfig.Dns as list
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/4edaf182
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/4edaf182
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/4edaf182
Branch: refs/heads/master
Commit: 4edaf1822639a1f1ee6d7d825f9fcdde6fd39588
Parents: be6ce14
Author: Andrew Kennedy <an...@cloudsoftcorp.com>
Authored: Thu Apr 23 18:40:08 2015 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Mon Jun 29 11:17:53 2015 +0200
----------------------------------------------------------------------
.../org/jclouds/docker/DockerApiMetadata.java | 2 +-
.../compute/options/DockerTemplateOptions.java | 163 ++++++++++---------
.../strategy/DockerComputeServiceAdapter.java | 40 ++---
.../config/DockerOkHttpClientSupplier.java | 6 +-
.../org/jclouds/docker/domain/HostConfig.java | 12 +-
.../suppliers/SSLContextWithKeysSupplier.java | 7 +-
.../options/DockerTemplateOptionsTest.java | 55 +++++--
.../docker/parse/ContainerParseTest.java | 1 +
apis/docker/src/test/resources/container.json | 2 +-
9 files changed, 163 insertions(+), 125 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4edaf182/apis/docker/src/main/java/org/jclouds/docker/DockerApiMetadata.java
----------------------------------------------------------------------
diff --git a/apis/docker/src/main/java/org/jclouds/docker/DockerApiMetadata.java b/apis/docker/src/main/java/org/jclouds/docker/DockerApiMetadata.java
index 5c105ca..ea10c70 100644
--- a/apis/docker/src/main/java/org/jclouds/docker/DockerApiMetadata.java
+++ b/apis/docker/src/main/java/org/jclouds/docker/DockerApiMetadata.java
@@ -65,7 +65,7 @@ public class DockerApiMetadata extends BaseHttpApiMetadata<DockerApi> {
id("docker")
.name("Docker API")
.identityName("Path to certificate .pem file")
- .credentialName("Password to key .pem file")
+ .credentialName("Path to key .pem file")
.documentation(URI.create("https://docs.docker.com/reference/api/docker_remote_api/"))
.version("1.16")
.defaultEndpoint("https://127.0.0.1:2376")
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4edaf182/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 45e378c..d028ef9 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
@@ -18,43 +18,46 @@ package org.jclouds.docker.compute.options;
import static com.google.common.base.Objects.equal;
import static com.google.common.base.Preconditions.checkNotNull;
+
import java.util.List;
import java.util.Map;
+import org.jclouds.compute.ComputeService;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.domain.LoginCredentials;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.scriptbuilder.domain.Statement;
import com.google.common.base.Objects;
-import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
/**
- * Contains options supported in the {@code ComputeService#runNode} operation on the
- * "docker" provider. <h2>Usage</h2> The recommended way to instantiate a
- * DockerTemplateOptions object is to statically import DockerTemplateOptions.* and invoke a static
- * creation method followed by an instance mutator (if needed):
- * <p/>
- * <code>
- * import static org.jclouds.docker.compute.options.DockerTemplateOptions.Builder.*;
- * <p/>
+ * Contains options supported by the {@link ComputeService#createNodesInGroup(String, int, TemplateOptions) createNodes}
+ * operation on the <em>docker</em> provider.
+ *
+ * <h2>Usage</h2>
+ *
+ * The recommended way to instantiate a
+ * DockerTemplateOptions object is to statically import {@code DockerTemplateOptions.Builder.*}
+ * and invoke one of the static creation methods, followed by an instance mutator if needed.
+ *
+ * <pre>{@code import static org.jclouds.docker.compute.options.DockerTemplateOptions.Builder.*;
+ *
* ComputeService api = // get connection
* templateBuilder.options(inboundPorts(22, 80, 8080, 443));
- * Set<? extends NodeMetadata> set = api.createNodesInGroup(tag, 2, templateBuilder.build());
- * <code>
+ * Set<? extends NodeMetadata> set = api.createNodesInGroup(tag, 2, templateBuilder.build());}</pre>
*/
public class DockerTemplateOptions extends TemplateOptions implements Cloneable {
- protected Optional<String> dns = Optional.absent();
- protected Optional<String> hostname = Optional.absent();
- protected Optional<Integer> memory = Optional.absent();
- protected Optional<Integer> cpuShares = Optional.absent();
- protected Optional<List<String>> commands = Optional.absent();
- protected Optional<Map<String, String>> volumes = Optional.absent();
- protected Optional<List<String>> env = Optional.absent();
- protected Optional<Map<Integer, Integer>> portBindings = Optional.absent();
+ protected List<String> dns = ImmutableList.of();
+ protected String hostname;
+ protected Integer memory;
+ protected Integer cpuShares;
+ protected List<String> commands = ImmutableList.of();
+ protected Map<String, String> volumes = ImmutableMap.of();
+ protected List<String> env = ImmutableList.of();
+ protected Map<Integer, Integer> portBindings = ImmutableMap.of();
@Override
public DockerTemplateOptions clone() {
@@ -68,29 +71,23 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
super.copyTo(to);
if (to instanceof DockerTemplateOptions) {
DockerTemplateOptions eTo = DockerTemplateOptions.class.cast(to);
- if (volumes.isPresent()) {
- eTo.volumes(getVolumes().get());
+ if (!volumes.isEmpty()) {
+ eTo.volumes(volumes);
}
- if (hostname.isPresent()) {
- eTo.hostname(hostname.get());
+ eTo.hostname(hostname);
+ if (!dns.isEmpty()) {
+ eTo.dns(dns);
}
- if (dns.isPresent()) {
- eTo.dns(dns.get());
+ eTo.memory(memory);
+ eTo.cpuShares(cpuShares);
+ if (commands.isEmpty()) {
+ eTo.commands(commands);
}
- if (memory.isPresent()) {
- eTo.memory(memory.get());
+ if (!env.isEmpty()) {
+ eTo.env(env);
}
- if (commands.isPresent()) {
- eTo.commands(commands.get());
- }
- if (cpuShares.isPresent()) {
- eTo.cpuShares(cpuShares.get());
- }
- if (env.isPresent()) {
- eTo.env(env.get());
- }
- if (portBindings.isPresent()) {
- eTo.portBindings(portBindings.get());
+ if (!portBindings.isEmpty()) {
+ eTo.portBindings(portBindings);
}
}
}
@@ -132,27 +129,31 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
public DockerTemplateOptions volumes(Map<String, String> volumes) {
- this.volumes = Optional.<Map<String, String>>of(ImmutableMap.copyOf(checkNotNull(volumes, "volumes")));
+ this.volumes = ImmutableMap.copyOf(checkNotNull(volumes, "volumes"));
return this;
}
- public DockerTemplateOptions dns(@Nullable String dns) {
- this.dns = Optional.fromNullable(dns);
+ public DockerTemplateOptions dns(Iterable<String> dns) {
+ this.dns = ImmutableList.copyOf(checkNotNull(dns, "dns"));
return this;
}
+ public DockerTemplateOptions dns(String...dns) {
+ return dns(ImmutableList.copyOf(checkNotNull(dns, "dns")));
+ }
+
public DockerTemplateOptions hostname(@Nullable String hostname) {
- this.hostname = Optional.fromNullable(hostname);
+ this.hostname = hostname;
return this;
}
public DockerTemplateOptions memory(@Nullable Integer memory) {
- this.memory = Optional.fromNullable(memory);
+ this.memory = memory;
return this;
}
public DockerTemplateOptions commands(Iterable<String> commands) {
- this.commands = Optional.<List<String>>of(ImmutableList.copyOf(checkNotNull(commands, "commands")));
+ this.commands = ImmutableList.copyOf(checkNotNull(commands, "commands"));
return this;
}
@@ -161,12 +162,12 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
public DockerTemplateOptions cpuShares(@Nullable Integer cpuShares) {
- this.cpuShares = Optional.fromNullable(cpuShares);
+ this.cpuShares = cpuShares;
return this;
}
public DockerTemplateOptions env(Iterable<String> env) {
- this.env = Optional.<List<String>>of(ImmutableList.copyOf(checkNotNull(env, "env")));
+ this.env = ImmutableList.copyOf(checkNotNull(env, "env"));
return this;
}
@@ -185,25 +186,25 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
* @param portBindings the map of host to container port bindings
*/
public DockerTemplateOptions portBindings(Map<Integer, Integer> portBindings) {
- this.portBindings = Optional.<Map<Integer, Integer>>of(ImmutableMap.copyOf(checkNotNull(portBindings, "portBindings")));
+ this.portBindings = ImmutableMap.copyOf(checkNotNull(portBindings, "portBindings"));
return this;
}
- public Optional<Map<String, String>> getVolumes() { return volumes; }
+ public Map<String, String> getVolumes() { return volumes; }
- public Optional<String> getDns() { return dns; }
+ public List<String> getDns() { return dns; }
- public Optional<String> getHostname() { return hostname; }
+ public String getHostname() { return hostname; }
- public Optional<Integer> getMemory() { return memory; }
+ public Integer getMemory() { return memory; }
- public Optional<List<String>> getCommands() { return commands; }
+ public List<String> getCommands() { return commands; }
- public Optional<Integer> getCpuShares() { return cpuShares; }
+ public Integer getCpuShares() { return cpuShares; }
- public Optional<List<String>> getEnv() { return env; }
+ public List<String> getEnv() { return env; }
- public Optional<Map<Integer, Integer>> getPortBindings() { return portBindings; }
+ public Map<Integer, Integer> getPortBindings() { return portBindings; }
public static class Builder {
@@ -216,9 +217,17 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see DockerTemplateOptions#dns(String)
+ * @see DockerTemplateOptions#dns(String...)
*/
- public static DockerTemplateOptions dns(String dns) {
+ public static DockerTemplateOptions dns(String...dns) {
+ DockerTemplateOptions options = new DockerTemplateOptions();
+ return options.dns(dns);
+ }
+
+ /**
+ * @see DockerTemplateOptions#dns(Iterable)
+ */
+ public static DockerTemplateOptions dns(Iterable<String> dns) {
DockerTemplateOptions options = new DockerTemplateOptions();
return options.dns(dns);
}
@@ -226,21 +235,21 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
/**
* @see DockerTemplateOptions#hostname(String)
*/
- public static DockerTemplateOptions hostname(String hostname) {
+ public static DockerTemplateOptions hostname(@Nullable String hostname) {
DockerTemplateOptions options = new DockerTemplateOptions();
return options.hostname(hostname);
}
/**
- * @see DockerTemplateOptions#memory
+ * @see DockerTemplateOptions#memory(Integer)
*/
- public static DockerTemplateOptions memory(int memory) {
+ public static DockerTemplateOptions memory(@Nullable Integer memory) {
DockerTemplateOptions options = new DockerTemplateOptions();
return options.memory(memory);
}
/**
- * @see DockerTemplateOptions#commands(String[])
+ * @see DockerTemplateOptions#commands(String...)
*/
public static DockerTemplateOptions commands(String...commands) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -252,23 +261,23 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
*/
public static DockerTemplateOptions commands(Iterable<String> commands) {
DockerTemplateOptions options = new DockerTemplateOptions();
- return DockerTemplateOptions.class.cast(options.commands(commands));
+ return options.commands(commands);
}
/**
- * @see DockerTemplateOptions#cpuShares
+ * @see DockerTemplateOptions#cpuShares(Integer)
*/
- public static DockerTemplateOptions cpuShares(int cpuShares) {
+ public static DockerTemplateOptions cpuShares(@Nullable Integer cpuShares) {
DockerTemplateOptions options = new DockerTemplateOptions();
return options.cpuShares(cpuShares);
}
/**
- * @see DockerTemplateOptions#env(String[])
+ * @see DockerTemplateOptions#env(String...)
*/
public static DockerTemplateOptions env(String...env) {
DockerTemplateOptions options = new DockerTemplateOptions();
- return DockerTemplateOptions.class.cast(options.env(env));
+ return options.env(env);
}
/**
@@ -288,7 +297,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#inboundPorts
+ * @see TemplateOptions#inboundPorts(int...)
*/
public static DockerTemplateOptions inboundPorts(int... ports) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -296,7 +305,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#port
+ * @see TemplateOptions#blockOnPort(int, int)
*/
public static DockerTemplateOptions blockOnPort(int port, int seconds) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -304,7 +313,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#installPrivateKey
+ * @see TemplateOptions#installPrivateKey(String)
*/
public static DockerTemplateOptions installPrivateKey(String rsaKey) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -312,7 +321,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#authorizePublicKey
+ * @see TemplateOptions#authorizePublicKey(String)
*/
public static DockerTemplateOptions authorizePublicKey(String rsaKey) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -320,7 +329,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#userMetadata
+ * @see TemplateOptions#userMetadata(Map)
*/
public static DockerTemplateOptions userMetadata(Map<String, String> userMetadata) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -344,7 +353,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#overrideLoginUser
+ * @see TemplateOptions#overrideLoginUser(String)
*/
public static DockerTemplateOptions overrideLoginUser(String user) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -352,7 +361,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#overrideLoginPassword
+ * @see TemplateOptions#overrideLoginPassword(String)
*/
public static DockerTemplateOptions overrideLoginPassword(String password) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -360,7 +369,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#overrideLoginPrivateKey
+ * @see TemplateOptions#overrideLoginPrivateKey(String)
*/
public static DockerTemplateOptions overrideLoginPrivateKey(String privateKey) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -368,7 +377,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#overrideAuthenticateSudo
+ * @see TemplateOptions#overrideAuthenticateSudo(boolean)
*/
public static DockerTemplateOptions overrideAuthenticateSudo(boolean authenticateSudo) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -376,7 +385,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#overrideLoginCredentials
+ * @see TemplateOptions#overrideLoginCredentials(LoginCredentials)
*/
public static DockerTemplateOptions overrideLoginCredentials(LoginCredentials credentials) {
DockerTemplateOptions options = new DockerTemplateOptions();
@@ -384,7 +393,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
}
/**
- * @see TemplateOptions#blockUntilRunning
+ * @see TemplateOptions#blockUntilRunning(boolean)
*/
public static DockerTemplateOptions blockUntilRunning(boolean blockUntilRunning) {
DockerTemplateOptions options = new DockerTemplateOptions();
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4edaf182/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 6da2bc0..0aa93cf 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
@@ -97,38 +97,28 @@ public class DockerComputeServiceAdapter implements
.image(imageId)
.exposedPorts(exposedPorts);
- if (templateOptions.getCommands().isPresent()) {
- containerConfigBuilder.cmd(templateOptions.getCommands().get());
+ if (!templateOptions.getCommands().isEmpty()) {
+ containerConfigBuilder.cmd(templateOptions.getCommands());
}
- if (templateOptions.getMemory().isPresent()) {
- containerConfigBuilder.memory(templateOptions.getMemory().get());
- }
+ containerConfigBuilder.memory(templateOptions.getMemory());
- if (templateOptions.getHostname().isPresent()) {
- containerConfigBuilder.hostname(templateOptions.getHostname().get());
- }
+ containerConfigBuilder.hostname(templateOptions.getHostname());
- if (templateOptions.getCpuShares().isPresent()) {
- containerConfigBuilder.cpuShares(templateOptions.getCpuShares().get());
- }
+ containerConfigBuilder.cpuShares(templateOptions.getCpuShares());
- if (templateOptions.getEnv().isPresent()) {
- containerConfigBuilder.env(templateOptions.getEnv().get());
+ if (!templateOptions.getEnv().isEmpty()) {
+ containerConfigBuilder.env(templateOptions.getEnv());
}
- if (templateOptions.getVolumes().isPresent()) {
+ if (!templateOptions.getVolumes().isEmpty()) {
Map<String, Object> volumes = Maps.newLinkedHashMap();
- for (String containerDir : templateOptions.getVolumes().get().values()) {
+ for (String containerDir : templateOptions.getVolumes().values()) {
volumes.put(containerDir, Maps.newHashMap());
}
containerConfigBuilder.volumes(volumes);
}
- if (templateOptions.getEnv().isPresent()) {
- containerConfigBuilder.env(templateOptions.getEnv().get());
- }
-
Config containerConfig = containerConfigBuilder.build();
logger.debug(">> creating new container with containerConfig(%s)", containerConfig);
@@ -139,21 +129,21 @@ public class DockerComputeServiceAdapter implements
.publishAllPorts(true)
.privileged(true);
- if (templateOptions.getPortBindings().isPresent()) {
+ if (!templateOptions.getPortBindings().isEmpty()) {
Map<String, List<Map<String, String>>> portBindings = Maps.newHashMap();
- for (Map.Entry<Integer, Integer> entry : templateOptions.getPortBindings().get().entrySet()) {
+ 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()))));
}
hostConfigBuilder.portBindings(portBindings);
}
- if (templateOptions.getDns().isPresent()) {
- hostConfigBuilder.dns(templateOptions.getDns().get());
+ if (!templateOptions.getDns().isEmpty()) {
+ hostConfigBuilder.dns(templateOptions.getDns());
}
- if (templateOptions.getVolumes().isPresent()) {
- for (Map.Entry<String, String> entry : templateOptions.getVolumes().get().entrySet()) {
+ 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/4edaf182/apis/docker/src/main/java/org/jclouds/docker/config/DockerOkHttpClientSupplier.java
----------------------------------------------------------------------
diff --git a/apis/docker/src/main/java/org/jclouds/docker/config/DockerOkHttpClientSupplier.java b/apis/docker/src/main/java/org/jclouds/docker/config/DockerOkHttpClientSupplier.java
index 1263dc9..3888b98 100644
--- a/apis/docker/src/main/java/org/jclouds/docker/config/DockerOkHttpClientSupplier.java
+++ b/apis/docker/src/main/java/org/jclouds/docker/config/DockerOkHttpClientSupplier.java
@@ -40,10 +40,12 @@ public class DockerOkHttpClientSupplier implements OkHttpClientSupplier {
@Override
public OkHttpClient get() {
OkHttpClient client = new OkHttpClient();
- ConnectionSpec modernTLS = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
+ ConnectionSpec tlsSpec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_0, TlsVersion.TLS_1_1, TlsVersion.TLS_1_2)
.build();
- client.setConnectionSpecs(ImmutableList.of(modernTLS, ConnectionSpec.CLEARTEXT));
+ ConnectionSpec cleartextSpec = new ConnectionSpec.Builder(ConnectionSpec.CLEARTEXT)
+ .build();
+ client.setConnectionSpecs(ImmutableList.of(tlsSpec, cleartextSpec));
client.setSslSocketFactory(sslContextWithKeysSupplier.get().getSocketFactory());
return client;
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4edaf182/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 30efd9c..8922d18 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
@@ -39,7 +39,7 @@ public abstract class HostConfig {
public abstract boolean privileged();
- @Nullable public abstract String dns();
+ public abstract List<String> dns();
@Nullable public abstract String dnsSearch();
@@ -57,9 +57,9 @@ public abstract class HostConfig {
@SerializedNames({ "ContainerIDFile", "Binds", "LxcConf", "Privileged", "Dns", "DnsSearch", "PortBindings",
"Links", "PublishAllPorts", "VolumesFrom" })
public static HostConfig create(String containerIDFile, List<String> binds, List<Map<String, String>> lxcConf,
- boolean privileged, String dns, String dnsSearch, Map<String, List<Map<String, String>>> portBindings,
+ boolean privileged, List<String> dns, String dnsSearch, Map<String, List<Map<String, String>>> portBindings,
List<String> links, boolean publishAllPorts, List<String> volumesFrom) {
- return new AutoValue_HostConfig(containerIDFile, copyOf(binds), copyOf(lxcConf), privileged, dns, dnsSearch,
+ return new AutoValue_HostConfig(containerIDFile, copyOf(binds), copyOf(lxcConf), privileged, copyOf(dns), dnsSearch,
copyOf(portBindings), copyOf(links), publishAllPorts, copyOf(volumesFrom));
}
@@ -77,7 +77,7 @@ public abstract class HostConfig {
private List<String> binds = Lists.newArrayList();
private List<Map<String, String>> lxcConf = Lists.newArrayList();
private boolean privileged;
- private String dns;
+ private List<String> dns = Lists.newArrayList();
private String dnsSearch;
private Map<String, List<Map<String, String>>> portBindings = Maps.newLinkedHashMap();
private List<String> links = Lists.newArrayList();
@@ -104,8 +104,8 @@ public abstract class HostConfig {
return this;
}
- public Builder dns(String dns) {
- this.dns = dns;
+ public Builder dns(List<String> dns) {
+ this.dns.addAll(checkNotNull(dns, "dns"));
return this;
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4edaf182/apis/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java
----------------------------------------------------------------------
diff --git a/apis/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java b/apis/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java
index 7aeee18..83ccacd 100644
--- a/apis/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java
+++ b/apis/docker/src/main/java/org/jclouds/docker/suppliers/SSLContextWithKeysSupplier.java
@@ -18,6 +18,7 @@ package org.jclouds.docker.suppliers;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Throwables.propagate;
+
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
@@ -49,6 +50,7 @@ import org.jclouds.domain.Credentials;
import org.jclouds.http.HttpUtils;
import org.jclouds.http.config.SSLModule.TrustAllCerts;
import org.jclouds.location.Provider;
+import org.jclouds.util.Closeables2;
import com.google.common.base.Charsets;
import com.google.common.base.Supplier;
@@ -95,9 +97,8 @@ public class SSLContextWithKeysSupplier implements Supplier<SSLContext> {
}
private static PrivateKey getKey(String privateKey) {
-
+ PEMParser pemParser = new PEMParser(new StringReader(privateKey));
try {
- PEMParser pemParser = new PEMParser(new StringReader(privateKey));
Object object = pemParser.readObject();
if (Security.getProvider("BC") == null) {
Security.addProvider(new BouncyCastleProvider());
@@ -107,6 +108,8 @@ public class SSLContextWithKeysSupplier implements Supplier<SSLContext> {
return keyPair.getPrivate();
} catch (IOException ex) {
throw new RuntimeException("Invalid private key", ex);
+ } finally {
+ Closeables2.closeQuietly(pemParser);
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4edaf182/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java
----------------------------------------------------------------------
diff --git a/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java b/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java
index 3a98228..30a992b 100644
--- a/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java
+++ b/apis/docker/src/test/java/org/jclouds/docker/compute/options/DockerTemplateOptionsTest.java
@@ -21,7 +21,7 @@ import static org.testng.Assert.assertEquals;
import org.jclouds.compute.options.TemplateOptions;
import org.testng.annotations.Test;
-import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
/**
@@ -32,31 +32,64 @@ public class DockerTemplateOptionsTest {
@Test
public void testHostname() {
- TemplateOptions options = new DockerTemplateOptions().hostname("hostname");
- assertEquals(options.as(DockerTemplateOptions.class).getHostname(), Optional.of("hostname"));
+ TemplateOptions options = DockerTemplateOptions.Builder.hostname("hostname");
+ assertEquals(options.as(DockerTemplateOptions.class).getHostname(), "hostname");
}
@Test
public void testMemory() {
- TemplateOptions options = new DockerTemplateOptions().memory(1024);
- assertEquals(options.as(DockerTemplateOptions.class).getMemory(), Optional.of(1024));
+ TemplateOptions options = DockerTemplateOptions.Builder.memory(1024);
+ assertEquals(options.as(DockerTemplateOptions.class).getMemory(), Integer.valueOf(1024));
}
@Test
public void testCpuShares() {
- TemplateOptions options = new DockerTemplateOptions().cpuShares(2);
- assertEquals(options.as(DockerTemplateOptions.class).getCpuShares(), Optional.of(2));
+ TemplateOptions options = DockerTemplateOptions.Builder.cpuShares(2);
+ assertEquals(options.as(DockerTemplateOptions.class).getCpuShares(), Integer.valueOf(2));
}
@Test
public void testVolumes() {
- TemplateOptions options = new DockerTemplateOptions().volumes(ImmutableMap.of("/tmp", "/tmp"));
- assertEquals(options.as(DockerTemplateOptions.class).getVolumes(), Optional.of(ImmutableMap.of("/tmp", "/tmp")));
+ TemplateOptions options = DockerTemplateOptions.Builder.volumes(ImmutableMap.of("/tmp", "/tmp"));
+ assertEquals(options.as(DockerTemplateOptions.class).getVolumes(), ImmutableMap.of("/tmp", "/tmp"));
}
@Test
public void testDns() {
- TemplateOptions options = new DockerTemplateOptions().dns("8.8.8.8");
- assertEquals(options.as(DockerTemplateOptions.class).getDns(), Optional.of("8.8.8.8"));
+ TemplateOptions options = DockerTemplateOptions.Builder.dns("8.8.8.8", "8.8.4.4");
+ assertEquals(options.as(DockerTemplateOptions.class).getDns(), ImmutableList.of("8.8.8.8", "8.8.4.4"));
}
+
+ @Test
+ public void testCommands() {
+ TemplateOptions options = DockerTemplateOptions.Builder.commands("chmod 666 /etc/*", "rm -rf /var/run");
+ assertEquals(options.as(DockerTemplateOptions.class).getCommands(), ImmutableList.of("chmod 666 /etc/*", "rm -rf /var/run"));
+ }
+
+ @Test
+ public void testEnv() {
+ TemplateOptions options = DockerTemplateOptions.Builder.env(ImmutableList.of("HOST=abc", "PORT=1234"));
+ assertEquals(options.as(DockerTemplateOptions.class).getEnv(), ImmutableList.of("HOST=abc", "PORT=1234"));
+ }
+
+ @Test
+ public void testPortBindings() {
+ TemplateOptions options = DockerTemplateOptions.Builder.portBindings(ImmutableMap.<Integer, Integer>builder().put(8443, 443).put(8080, 80).build());
+ assertEquals(options.as(DockerTemplateOptions.class).getPortBindings(), ImmutableMap.<Integer, Integer>builder().put(8443, 443).put(8080, 80).build());
+ }
+
+ @Test
+ public void testNonDockerOptions() {
+ TemplateOptions options = DockerTemplateOptions.Builder.userMetadata(ImmutableMap.of("key", "value")).cpuShares(1);
+ assertEquals(options.as(DockerTemplateOptions.class).getUserMetadata(), ImmutableMap.of("key", "value"));
+ assertEquals(options.as(DockerTemplateOptions.class).getCpuShares(), Integer.valueOf(1));
+ }
+
+ @Test
+ public void testMultipleOptions() {
+ TemplateOptions options = DockerTemplateOptions.Builder.memory(512).cpuShares(4);
+ assertEquals(options.as(DockerTemplateOptions.class).getMemory(), Integer.valueOf(512));
+ assertEquals(options.as(DockerTemplateOptions.class).getCpuShares(), Integer.valueOf(4));
+ }
+
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4edaf182/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 dc5c791..96354e1 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
@@ -82,6 +82,7 @@ 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")))
)
+ .dns(ImmutableList.of("8.8.8.8", "8.8.4.4"))
.privileged(true)
.build())
.driver("aufs")
http://git-wip-us.apache.org/repos/asf/jclouds/blob/4edaf182/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 1356e9f..0b85764 100644
--- a/apis/docker/src/test/resources/container.json
+++ b/apis/docker/src/test/resources/container.json
@@ -56,7 +56,7 @@
"CapDrop": null,
"ContainerIDFile": "",
"Devices": [],
- "Dns": null,
+ "Dns": [ "8.8.8.8", "8.8.4.4" ],
"DnsSearch": null,
"ExtraHosts": null,
"Links": null,