mirror of https://github.com/apache/jclouds.git
Add template option to specify direct (unmapped) ports
This commit is contained in:
parent
944f14c687
commit
0cea1efd2f
|
@ -54,6 +54,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
|
||||||
protected Optional<List<String>> commands = Optional.absent();
|
protected Optional<List<String>> commands = Optional.absent();
|
||||||
protected Optional<Map<String, String>> volumes = Optional.absent();
|
protected Optional<Map<String, String>> volumes = Optional.absent();
|
||||||
protected Optional<List<String>> env = Optional.absent();
|
protected Optional<List<String>> env = Optional.absent();
|
||||||
|
protected Optional<List<Integer>> directPorts = Optional.absent();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DockerTemplateOptions clone() {
|
public DockerTemplateOptions clone() {
|
||||||
|
@ -84,10 +85,13 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
|
||||||
}
|
}
|
||||||
if (cpuShares.isPresent()) {
|
if (cpuShares.isPresent()) {
|
||||||
eTo.cpuShares(cpuShares.get());
|
eTo.cpuShares(cpuShares.get());
|
||||||
}
|
}
|
||||||
if (env.isPresent()) {
|
if (env.isPresent()) {
|
||||||
eTo.env(env.get());
|
eTo.env(env.get());
|
||||||
}
|
}
|
||||||
|
if (directPorts.isPresent()) {
|
||||||
|
eTo.directPorts(directPorts.get());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,12 +108,13 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
|
||||||
equal(this.memory, that.memory) &&
|
equal(this.memory, that.memory) &&
|
||||||
equal(this.commands, that.commands) &&
|
equal(this.commands, that.commands) &&
|
||||||
equal(this.cpuShares, that.cpuShares) &&
|
equal(this.cpuShares, that.cpuShares) &&
|
||||||
equal(this.env, that.env);
|
equal(this.env, that.env) &&
|
||||||
|
equal(this.directPorts, that.directPorts);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hashCode(super.hashCode(), volumes, hostname, dns, memory, commands, cpuShares, env);
|
return Objects.hashCode(super.hashCode(), volumes, hostname, dns, memory, commands, cpuShares, env, directPorts);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -122,6 +127,7 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
|
||||||
.add("commands", commands)
|
.add("commands", commands)
|
||||||
.add("volumes", volumes)
|
.add("volumes", volumes)
|
||||||
.add("env", env)
|
.add("env", env)
|
||||||
|
.add("directPorts", directPorts)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,35 +174,36 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<Map<String, String>> getVolumes() {
|
public DockerTemplateOptions directPorts(List<Integer> ports) {
|
||||||
return volumes;
|
this.directPorts = Optional.<List<Integer>> of(ImmutableList.copyOf(ports));
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<Map<String, String>> getVolumes() { return volumes; }
|
||||||
|
|
||||||
public Optional<String> getDns() { return dns; }
|
public Optional<String> getDns() { return dns; }
|
||||||
|
|
||||||
public Optional<String> getHostname() { return hostname; }
|
public Optional<String> getHostname() { return hostname; }
|
||||||
|
|
||||||
public Optional<Integer> getMemory() { return memory; }
|
public Optional<Integer> getMemory() { return memory; }
|
||||||
|
|
||||||
public Optional<List<String>> getCommands() {
|
public Optional<List<String>> getCommands() { return commands; }
|
||||||
return commands;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Optional<Integer> getCpuShares() { return cpuShares; }
|
public Optional<Integer> getCpuShares() { return cpuShares; }
|
||||||
|
|
||||||
public Optional<List<String>> getEnv() {
|
public Optional<List<String>> getEnv() { return env; }
|
||||||
return env;
|
|
||||||
}
|
public Optional<List<Integer>> getDirectPorts() { return directPorts; }
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see DockerTemplateOptions#volumes(java.util.Map)
|
* @see DockerTemplateOptions#volumes(java.util.Map)
|
||||||
*/
|
*/
|
||||||
public static DockerTemplateOptions volumes(Map<String, String> volumes) {
|
public static DockerTemplateOptions volumes(Map<String, String> volumes) {
|
||||||
DockerTemplateOptions options = new DockerTemplateOptions();
|
DockerTemplateOptions options = new DockerTemplateOptions();
|
||||||
return DockerTemplateOptions.class.cast(options.volumes(volumes));
|
return DockerTemplateOptions.class.cast(options.volumes(volumes));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see DockerTemplateOptions#dns(String)
|
* @see DockerTemplateOptions#dns(String)
|
||||||
|
@ -251,6 +258,14 @@ public class DockerTemplateOptions extends TemplateOptions implements Cloneable
|
||||||
return DockerTemplateOptions.class.cast(options.env(env));
|
return DockerTemplateOptions.class.cast(options.env(env));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see DockerTemplateOptions#directPorts(java.util.List)
|
||||||
|
*/
|
||||||
|
public static DockerTemplateOptions directPorts(List<Integer> directPorts) {
|
||||||
|
DockerTemplateOptions options = new DockerTemplateOptions();
|
||||||
|
return DockerTemplateOptions.class.cast(options.directPorts(directPorts));
|
||||||
|
}
|
||||||
|
|
||||||
// methods that only facilitate returning the correct object type
|
// methods that only facilitate returning the correct object type
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -19,6 +19,8 @@ package org.jclouds.docker.compute.strategy;
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
import static com.google.common.collect.Iterables.find;
|
import static com.google.common.collect.Iterables.find;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
@ -49,7 +51,9 @@ import org.jclouds.logging.Logger;
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
|
@ -136,6 +140,14 @@ public class DockerComputeServiceAdapter implements
|
||||||
.publishAllPorts(true)
|
.publishAllPorts(true)
|
||||||
.privileged(true);
|
.privileged(true);
|
||||||
|
|
||||||
|
if (templateOptions.getDirectPorts().isPresent()) {
|
||||||
|
Map<String, List<Map<String, String>>> portBindings = Maps.newHashMap();
|
||||||
|
for (Integer port : templateOptions.getDirectPorts().get()) {
|
||||||
|
portBindings.put(port + "/tcp", Lists.<Map<String, String>>newArrayList(ImmutableMap.of("HostPort", Integer.toString(port))));
|
||||||
|
}
|
||||||
|
hostConfigBuilder.portBindings(portBindings);
|
||||||
|
}
|
||||||
|
|
||||||
if (templateOptions.getDns().isPresent()) {
|
if (templateOptions.getDns().isPresent()) {
|
||||||
hostConfigBuilder.dns(templateOptions.getDns().get());
|
hostConfigBuilder.dns(templateOptions.getDns().get());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue