Repository: jclouds-labs Updated Branches: refs/heads/1.9.x a57446a1c -> dbea9c3ea
Added volumesFrom to Docker template options Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/dbea9c3e Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/dbea9c3e Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/dbea9c3e Branch: refs/heads/1.9.x Commit: dbea9c3ea69d5615aa409d613ff0c7b14dfd4732 Parents: a57446a Author: Andrew Donald Kennedy <[email protected]> Authored: Fri Apr 1 21:54:51 2016 +0100 Committer: Andrea Turli <[email protected]> Committed: Tue Apr 5 10:44:03 2016 +0200 ---------------------------------------------------------------------- .../compute/options/DockerTemplateOptions.java | 70 ++++++++++++-------- .../strategy/DockerComputeServiceAdapter.java | 6 +- .../java/org/jclouds/docker/domain/Config.java | 40 +++++------ .../org/jclouds/docker/domain/HostConfig.java | 53 ++++++++------- .../jclouds/docker/internal/NullSafeCopies.java | 12 ++++ .../functions/ContainerToNodeMetadataTest.java | 1 - 6 files changed, 106 insertions(+), 76 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/dbea9c3e/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 4088a54..2bd7299 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 @@ -17,11 +17,14 @@ 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 com.google.common.base.Objects; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; + import org.jclouds.compute.ComputeService; import org.jclouds.compute.options.TemplateOptions; import org.jclouds.docker.internal.NullSafeCopies; @@ -29,10 +32,6 @@ 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.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; - /** * Contains options supported by the {@link ComputeService#createNodesInGroup(String, int, TemplateOptions) createNodes} * operation on the <em>docker</em> provider. @@ -55,13 +54,14 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable protected String hostname; protected Integer memory; protected Integer cpuShares; - protected List<String> entrypoint; - protected List<String> commands; + protected List<String> entrypoint = ImmutableList.of(); + protected List<String> commands = ImmutableList.of(); protected Map<String, String> volumes = ImmutableMap.of(); - protected List<String> env; + protected List<String> env = ImmutableList.of(); protected Map<Integer, Integer> portBindings = ImmutableMap.of(); protected String networkMode; protected Map<String, String> extraHosts = ImmutableMap.of(); + protected List<String> volumesFrom = ImmutableList.of(); @Override public DockerTemplateOptions clone() { @@ -75,25 +75,18 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable super.copyTo(to); if (to instanceof DockerTemplateOptions) { DockerTemplateOptions eTo = DockerTemplateOptions.class.cast(to); - if (!volumes.isEmpty()) { - eTo.volumes(volumes); - } + eTo.volumes(volumes); eTo.hostname(hostname); - if (!dns.isEmpty()) { - eTo.dns(dns); - } + eTo.dns(dns); eTo.memory(memory); eTo.cpuShares(cpuShares); eTo.entrypoint(entrypoint); eTo.commands(commands); eTo.env(env); - if (!portBindings.isEmpty()) { - eTo.portBindings(portBindings); - } + eTo.portBindings(portBindings); eTo.networkMode(networkMode); - if (!extraHosts.isEmpty()) { - eTo.extraHosts(extraHosts); - } + eTo.extraHosts(extraHosts); + eTo.volumesFrom(volumesFrom); } } @@ -113,7 +106,8 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable equal(this.cpuShares, that.cpuShares) && equal(this.env, that.env) && equal(this.portBindings, that.portBindings) && - equal(this.extraHosts, that.extraHosts); + equal(this.extraHosts, that.extraHosts) && + equal(this.volumesFrom, that.volumesFrom); } @Override @@ -134,21 +128,23 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable .add("env", env) .add("portBindings", portBindings) .add("extraHosts", extraHosts) + .add("volumesFrom", volumesFrom) .toString(); } public DockerTemplateOptions volumes(Map<String, String> volumes) { - this.volumes = ImmutableMap.copyOf(checkNotNull(volumes, "volumes")); + this.volumes = NullSafeCopies.copyOf(volumes); return this; } public DockerTemplateOptions dns(Iterable<String> dns) { - this.dns = ImmutableList.copyOf(checkNotNull(dns, "dns")); + this.dns = NullSafeCopies.copyWithNullOf(dns); return this; } public DockerTemplateOptions dns(String...dns) { - return dns(ImmutableList.copyOf(checkNotNull(dns, "dns"))); + this.dns = NullSafeCopies.copyWithNullOf(dns); + return this; } public DockerTemplateOptions hostname(@Nullable String hostname) { @@ -207,7 +203,7 @@ 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 = ImmutableMap.copyOf(checkNotNull(portBindings, "portBindings")); + this.portBindings = NullSafeCopies.copyOf(portBindings); return this; } @@ -231,7 +227,17 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable * @param extraHosts the map of host names to IP addresses */ public DockerTemplateOptions extraHosts(Map<String, String> extraHosts) { - this.extraHosts = ImmutableMap.copyOf(checkNotNull(extraHosts, "extraHosts")); + this.extraHosts = NullSafeCopies.copyWithNullOf(extraHosts); + return this; + } + + /** + * Set list of containers to mount volumes from onto this container. + * + * @param volumesFrom the list of container names + */ + public DockerTemplateOptions volumesFrom(Iterable<String> volumesFrom) { + this.volumesFrom = NullSafeCopies.copyWithNullOf(volumesFrom); return this; } @@ -239,6 +245,8 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable public List<String> getDns() { return dns; } + public List<String> getVolumesFrom() { return volumesFrom; } + public String getHostname() { return hostname; } public Integer getMemory() { return memory; } @@ -276,7 +284,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable } /** - * @see DockerTemplateOptions#dns(Iterable) + * @see DockerTemplateOptions#dns(List) */ public static DockerTemplateOptions dns(Iterable<String> dns) { DockerTemplateOptions options = new DockerTemplateOptions(); @@ -380,6 +388,14 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable } /** + * @see DockerTemplateOptions#volumesFrom(Iterable) + */ + public static DockerTemplateOptions volumesFrom(Iterable<String> volumesFrom) { + DockerTemplateOptions options = new DockerTemplateOptions(); + return options.volumesFrom(volumesFrom); + } + + /** * @see TemplateOptions#inboundPorts(int...) */ public static DockerTemplateOptions inboundPorts(int... ports) { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/dbea9c3e/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 6af757f..3bc6e47 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 @@ -145,10 +145,14 @@ public class DockerComputeServiceAdapter implements if (!templateOptions.getVolumes().isEmpty()) { for (Map.Entry<String, String> entry : templateOptions.getVolumes().entrySet()) { - hostConfigBuilder.binds(ImmutableList.of(entry.getKey() + ":" + entry.getValue())); + hostConfigBuilder.binds(ImmutableList.of(entry.getKey() + ":" + entry.getValue())); } } + if (!templateOptions.getVolumesFrom().isEmpty()) { + hostConfigBuilder.volumesFrom(templateOptions.getVolumesFrom()); + } + hostConfigBuilder.networkMode(templateOptions.getNetworkMode()); HostConfig hostConfig = hostConfigBuilder.build(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/dbea9c3e/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 2203a85..fbe07ca 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/Config.java +++ b/docker/src/main/java/org/jclouds/docker/domain/Config.java @@ -64,7 +64,7 @@ public abstract class Config { public abstract String image(); - public abstract Map<String, ?> volumes(); + @Nullable public abstract Map<String, ?> volumes(); @Nullable public abstract String workingDir(); @@ -76,9 +76,9 @@ public abstract class Config { @Nullable public abstract HostConfig hostConfig(); - public abstract List<String> binds(); + @Nullable public abstract List<String> binds(); - public abstract List<String> links(); + @Nullable public abstract List<String> links(); public abstract List<Map<String, String>> lxcConf(); @@ -90,13 +90,13 @@ public abstract class Config { @Nullable public abstract List<String> dns(); - @Nullable public abstract String dnsSearch(); + @Nullable public abstract List<String> dnsSearch(); - @Nullable public abstract String volumesFrom(); + @Nullable public abstract List<String> volumesFrom(); - public abstract List<String> capAdd(); + @Nullable public abstract List<String> capAdd(); - public abstract List<String> capDrop(); + @Nullable public abstract List<String> capDrop(); public abstract Map<String, String> restartPolicy(); @@ -117,14 +117,14 @@ public abstract class Config { 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, String dnsSearch, String volumesFrom, + boolean publishAllPorts, boolean privileged, List<String> dns, List<String> dnsSearch, List<String> volumesFrom, List<String> capAdd, List<String> capDrop, Map<String, String> restartPolicy) { return new AutoValue_Config(hostname, domainname, user, memory, memorySwap, cpuShares, attachStdin, attachStdout, attachStderr, tty, openStdin, stdinOnce, copyWithNullOf(env), copyWithNullOf(cmd), - copyWithNullOf(entrypoint), image, copyOf(volumes), workingDir, networkDisabled, + copyWithNullOf(entrypoint), image, copyWithNullOf(volumes), workingDir, networkDisabled, copyOf(exposedPorts), copyOf(securityOpts), hostConfig, - copyOf(binds), copyOf(links), copyOf(lxcConf), copyOf(portBindings), publishAllPorts, privileged, - copyWithNullOf(dns), dnsSearch, volumesFrom, copyOf(capAdd), copyOf(capDrop), copyOf(restartPolicy)); + copyWithNullOf(binds), copyWithNullOf(links), copyOf(lxcConf), copyOf(portBindings), publishAllPorts, privileged, + copyWithNullOf(dns), copyWithNullOf(dnsSearch), copyWithNullOf(volumesFrom), copyWithNullOf(capAdd), copyWithNullOf(capDrop), copyOf(restartPolicy)); } public static Builder builder() { @@ -152,23 +152,23 @@ public abstract class Config { private List<String> cmd; private List<String> entrypoint; private String image; - private Map<String, ?> volumes = Maps.newHashMap(); + private Map<String, ?> volumes; private String workingDir; private boolean networkDisabled; private Map<String, ?> exposedPorts = Maps.newHashMap(); private List<String> securityOpts = Lists.newArrayList(); private HostConfig hostConfig; - private List<String> binds = Lists.newArrayList(); - private List<String> links = Lists.newArrayList(); + 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 String dnsSearch; - private String volumesFrom; - private List<String> capAdd = Lists.newArrayList(); - private List<String> capDrop = Lists.newArrayList(); + 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) { @@ -322,12 +322,12 @@ public abstract class Config { return this; } - public Builder dnsSearch(String dnsSearch) { + public Builder dnsSearch(List<String> dnsSearch) { this.dnsSearch = dnsSearch; return this; } - public Builder volumesFrom(String volumesFrom) { + public Builder volumesFrom(List<String> volumesFrom) { this.volumesFrom = volumesFrom; return this; } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/dbea9c3e/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 1e655af..1ebdb2c 100644 --- a/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java +++ b/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java @@ -16,45 +16,44 @@ */ package org.jclouds.docker.domain; -import static com.google.common.base.Preconditions.checkNotNull; import static org.jclouds.docker.internal.NullSafeCopies.copyOf; +import static org.jclouds.docker.internal.NullSafeCopies.copyWithNullOf; import java.util.List; import java.util.Map; -import org.jclouds.javax.annotation.Nullable; -import org.jclouds.json.SerializedNames; - import com.google.auto.value.AutoValue; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + @AutoValue public abstract class HostConfig { @Nullable public abstract String containerIDFile(); - public abstract List<String> binds(); + @Nullable public abstract List<String> binds(); public abstract List<Map<String, String>> lxcConf(); public abstract boolean privileged(); - public abstract List<String> dns(); + @Nullable public abstract List<String> dns(); @Nullable public abstract List<String> dnsSearch(); public abstract Map<String, List<Map<String, String>>> portBindings(); - public abstract List<String> links(); + @Nullable public abstract List<String> links(); - public abstract List<String> extraHosts(); + @Nullable public abstract List<String> extraHosts(); public abstract boolean publishAllPorts(); - public abstract List<String> volumesFrom(); + @Nullable public abstract List<String> volumesFrom(); - @Nullable - public abstract String networkMode(); + @Nullable public abstract String networkMode(); HostConfig() { } @@ -64,8 +63,8 @@ public abstract class HostConfig { 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) { - return new AutoValue_HostConfig(containerIDFile, copyOf(binds), copyOf(lxcConf), privileged, copyOf(dns), copyOf(dnsSearch), - copyOf(portBindings), copyOf(links), copyOf(extraHosts), publishAllPorts, copyOf(volumesFrom), networkMode); + return new AutoValue_HostConfig(containerIDFile, copyWithNullOf(binds), copyOf(lxcConf), privileged, copyWithNullOf(dns), copyWithNullOf(dnsSearch), + copyOf(portBindings), copyWithNullOf(links), copyWithNullOf(extraHosts), publishAllPorts, copyWithNullOf(volumesFrom), networkMode); } public static Builder builder() { @@ -79,16 +78,16 @@ public abstract class HostConfig { public static final class Builder { private String containerIDFile; - private List<String> binds = Lists.newArrayList(); + private List<String> binds; private List<Map<String, String>> lxcConf = Lists.newArrayList(); private boolean privileged; - private List<String> dns = Lists.newArrayList(); - private List<String> dnsSearch = Lists.newArrayList(); + private List<String> dns; + private List<String> dnsSearch; private Map<String, List<Map<String, String>>> portBindings = Maps.newLinkedHashMap(); - private List<String> links = Lists.newArrayList(); - private List<String> extraHosts = Lists.newArrayList(); + private List<String> links; + private List<String> extraHosts; private boolean publishAllPorts; - private List<String> volumesFrom = Lists.newArrayList(); + private List<String> volumesFrom; private String networkMode; public Builder containerIDFile(String containerIDFile) { @@ -97,12 +96,12 @@ public abstract class HostConfig { } public Builder binds(List<String> binds) { - this.binds.addAll(checkNotNull(binds, "binds")); + this.binds = binds; return this; } public Builder lxcConf(List<Map<String, String>> lxcConf) { - this.lxcConf.addAll(checkNotNull(lxcConf, "lxcConf")); + this.lxcConf = lxcConf; return this; } @@ -112,27 +111,27 @@ public abstract class HostConfig { } public Builder dns(List<String> dns) { - this.dns.addAll(checkNotNull(dns, "dns")); + this.dns = dns; return this; } public Builder dnsSearch(List<String> dnsSearch) { - this.dnsSearch.addAll(checkNotNull(dnsSearch, "dnsSearch")); + this.dnsSearch = dnsSearch; return this; } public Builder links(List<String> links) { - this.links.addAll(checkNotNull(links, "links")); + this.links = links; return this; } public Builder extraHosts(List<String> extraHosts) { - this.extraHosts.addAll(checkNotNull(extraHosts, "extraHosts")); + this.extraHosts = extraHosts; return this; } public Builder portBindings(Map<String, List<Map<String, String>>> portBindings) { - this.portBindings.putAll(portBindings); + this.portBindings = portBindings; return this; } @@ -142,7 +141,7 @@ public abstract class HostConfig { } public Builder volumesFrom(List<String> volumesFrom) { - this.volumesFrom.addAll(checkNotNull(volumesFrom, "volumesFrom")); + this.volumesFrom = volumesFrom; return this; } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/dbea9c3e/docker/src/main/java/org/jclouds/docker/internal/NullSafeCopies.java ---------------------------------------------------------------------- diff --git a/docker/src/main/java/org/jclouds/docker/internal/NullSafeCopies.java b/docker/src/main/java/org/jclouds/docker/internal/NullSafeCopies.java index ad86bbb..b6e190c 100644 --- a/docker/src/main/java/org/jclouds/docker/internal/NullSafeCopies.java +++ b/docker/src/main/java/org/jclouds/docker/internal/NullSafeCopies.java @@ -47,6 +47,18 @@ public class NullSafeCopies { } /** + * Copies given Map with keeping null value if provided. + * + * @param map + * instance to copy (maybe <code>null</code>) + * @return if the parameter is not-<code>null</code> then immutable copy; + * <code>null</code> otherwise + */ + public static <K, V> Map<K, V> copyWithNullOf(@Nullable Map<K, V> map) { + return map != null ? ImmutableMap.copyOf(map) : null; + } + + /** * Copies given {@link Iterable} into immutable {@link List} with keeping null value if provided. * * @param iterable http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/dbea9c3e/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java ---------------------------------------------------------------------- diff --git a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java index 0f81c94..9761418 100644 --- a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java +++ b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java @@ -84,7 +84,6 @@ public class ContainerToNodeMetadataTest { .env(null) .cmd(ImmutableList.of("/usr/sbin/sshd", "-D")) .image("jclouds/ubuntu") - .volumesFrom("") .workingDir("") .entrypoint(null) .networkDisabled(false)
