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 2014/07/07 11:52:09 UTC
[2/3] [JCLOUDS-500] Initial commit for docker
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/domain/Container.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/Container.java b/docker/src/main/java/org/jclouds/docker/domain/Container.java
new file mode 100644
index 0000000..2752529
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/domain/Container.java
@@ -0,0 +1,389 @@
+/*
+ * 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.domain;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.gson.annotations.SerializedName;
+import org.jclouds.javax.annotation.Nullable;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class Container {
+
+ @SerializedName("Id")
+ private final String id;
+ @SerializedName("Name")
+ private final String name;
+ @SerializedName("Created")
+ private final String created;
+ @SerializedName("Path")
+ private final String path;
+ @SerializedName("Args")
+ private final String[] args;
+ @SerializedName("Config")
+ private final Config containerConfig;
+ @SerializedName("State")
+ private final State state;
+ @SerializedName("Image")
+ private final String image;
+ @SerializedName("NetworkSettings")
+ private final NetworkSettings networkSettings;
+ @SerializedName("ResolvConfPath")
+ private final String resolvConfPath;
+ @SerializedName("Driver")
+ private final String driver;
+ @SerializedName("ExecDriver")
+ private final String execDriver;
+ @SerializedName("Volumes")
+ private final Map<String, String> volumes;
+ @SerializedName("VolumesRW")
+ private final Map<String, Boolean> volumesRW;
+ @SerializedName("Command")
+ private final String command;
+ @SerializedName("Status")
+ private final String status;
+ @SerializedName("HostConfig")
+ private final HostConfig hostConfig;
+ @SerializedName("Ports")
+ private final List<Port> ports;
+ @SerializedName("HostnamePath")
+ private final String hostnamePath;
+
+ @ConstructorProperties({ "Id", "Name", "Created", "Path", "Args", "Config", "State", "Image", "NetworkSettings",
+ "ResolvConfPath", "Driver", "ExecDriver", "Volumes", "VolumesRW", "Command", "Status", "HostConfig",
+ "Ports", "HostnamePath" })
+ protected Container(String id, @Nullable String name, @Nullable String created, @Nullable String path, @Nullable String[] args,
+ @Nullable Config containerConfig, @Nullable State state, @Nullable String image, @Nullable NetworkSettings networkSettings,
+ @Nullable String resolvConfPath, @Nullable String driver, @Nullable String execDriver, @Nullable Map<String, String> volumes,
+ @Nullable Map<String, Boolean> volumesRW, @Nullable String command, @Nullable String status,
+ @Nullable HostConfig hostConfig, @Nullable List<Port> ports, @Nullable String hostnamePath) {
+ this.id = checkNotNull(id, "id");
+ this.name = name;
+ this.created = created;
+ this.path = path;
+ this.args = args;
+ this.containerConfig = containerConfig;
+ this.state = state;
+ this.image = image;
+ this.networkSettings = networkSettings;
+ this.resolvConfPath = resolvConfPath;
+ this.driver = driver;
+ this.execDriver = execDriver;
+ this.volumes = volumes != null ? ImmutableMap.copyOf(volumes) : ImmutableMap.<String, String>of();
+ this.volumesRW = volumesRW != null ? ImmutableMap.copyOf(volumesRW) : ImmutableMap.<String, Boolean>of();
+ this.command = command;
+ this.status = status;
+ this.hostConfig = hostConfig;
+ this.ports = ports != null ? ImmutableList.copyOf(ports) : ImmutableList.<Port>of();
+ this.hostnamePath = hostnamePath;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getCreated() {
+ return created;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public String[] getArgs() {
+ return args;
+ }
+
+ public Config getContainerConfig() {
+ return containerConfig;
+ }
+
+ public State getState() {
+ return state;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public NetworkSettings getNetworkSettings() {
+ return networkSettings;
+ }
+
+ public String getResolvConfPath() {
+ return resolvConfPath;
+ }
+
+ public String getDriver() {
+ return driver;
+ }
+
+ public String getExecDriver() {
+ return execDriver;
+ }
+
+ public Map<String, String> getVolumes() {
+ return volumes;
+ }
+
+ public Map<String, Boolean> getvolumesRW() {
+ return volumesRW;
+ }
+
+ public String getCommand() {
+ return command;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public HostConfig getHostConfig() {
+ return hostConfig;
+ }
+
+ public List<Port> getPorts() {
+ return ports;
+ }
+
+ public String getHostnamePath() {
+ return hostnamePath;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Container that = (Container) o;
+
+ return Objects.equal(this.id, that.id) &&
+ Objects.equal(this.name, that.name) &&
+ Objects.equal(this.created, that.created) &&
+ Objects.equal(this.path, that.path) &&
+ Objects.equal(this.args, that.args) &&
+ Objects.equal(this.containerConfig, that.containerConfig) &&
+ Objects.equal(this.state, that.state) &&
+ Objects.equal(this.image, that.image) &&
+ Objects.equal(this.networkSettings, that.networkSettings) &&
+ Objects.equal(this.resolvConfPath, that.resolvConfPath) &&
+ Objects.equal(this.driver, that.driver) &&
+ Objects.equal(this.execDriver, that.execDriver) &&
+ Objects.equal(this.volumes, that.volumes) &&
+ Objects.equal(this.volumesRW, that.volumesRW) &&
+ Objects.equal(this.command, that.command) &&
+ Objects.equal(this.status, that.status) &&
+ Objects.equal(this.hostConfig, that.hostConfig) &&
+ Objects.equal(this.ports, that.ports) &&
+ Objects.equal(this.hostnamePath, that.hostnamePath);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(id, name, created, path, args, containerConfig, state, image, networkSettings, resolvConfPath,
+ driver, execDriver, volumes, volumesRW, command, status, hostConfig, ports, hostnamePath);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("id", id)
+ .add("name", name)
+ .add("created", created)
+ .add("path", path)
+ .add("args", args)
+ .add("containerConfig", containerConfig)
+ .add("state", state)
+ .add("image", image)
+ .add("networkSettings", networkSettings)
+ .add("resolvConfPath", resolvConfPath)
+ .add("driver", driver)
+ .add("execDriver", execDriver)
+ .add("volumes", volumes)
+ .add("volumesRW", volumesRW)
+ .add("command", command)
+ .add("status", status)
+ .add("hostConfig", hostConfig)
+ .add("ports", ports)
+ .add("hostnamePath", hostnamePath)
+ .toString();
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public Builder toBuilder() {
+ return builder().fromContainer(this);
+ }
+
+ public static final class Builder {
+
+ private String id;
+ private String name;
+ private String created;
+ private String path;
+ private String[] args;
+ private Config containerConfig;
+ private State state;
+ private String image;
+ private NetworkSettings networkSettings;
+ private String resolvConfPath;
+ private String driver;
+ private String execDriver;
+ private Map<String, String> volumes = ImmutableMap.of();
+ private Map<String, Boolean> volumesRW = ImmutableMap.of();
+ private String command;
+ private String status;
+ private HostConfig hostConfig;
+ private List<Port> ports = ImmutableList.of();
+ private String hostnamePath;
+
+ public Builder id(String id) {
+ this.id = id;
+ return this;
+ }
+
+ public Builder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public Builder created(String created) {
+ this.created = created;
+ return this;
+ }
+
+ public Builder path(String path) {
+ this.path = path;
+ return this;
+ }
+
+ public Builder args(String[] args) {
+ this.args = args;
+ return this;
+ }
+
+ public Builder containerConfig(Config containerConfig) {
+ this.containerConfig = containerConfig;
+ return this;
+ }
+
+ public Builder state(State state) {
+ this.state = state;
+ return this;
+ }
+
+ public Builder image(String imageName) {
+ this.image = imageName;
+ return this;
+ }
+
+ public Builder networkSettings(NetworkSettings networkSettings) {
+ this.networkSettings = networkSettings;
+ return this;
+ }
+
+ public Builder resolvConfPath(String resolvConfPath) {
+ this.resolvConfPath = resolvConfPath;
+ return this;
+ }
+
+ public Builder driver(String driver) {
+ this.driver = driver;
+ return this;
+ }
+
+ public Builder execDriver(String execDriver) {
+ this.execDriver = execDriver;
+ return this;
+ }
+
+ public Builder volumes(Map<String, String> volumes) {
+ this.volumes = volumes;
+ return this;
+ }
+
+ public Builder volumesRW(Map<String, Boolean> volumesRW) {
+ this.volumesRW = volumesRW;
+ return this;
+ }
+
+ public Builder command(String command) {
+ this.command = command;
+ return this;
+ }
+
+ public Builder status(String status) {
+ this.status = status;
+ return this;
+ }
+
+ public Builder hostConfig(HostConfig hostConfig) {
+ this.hostConfig = hostConfig;
+ return this;
+ }
+
+ public Builder ports(List<Port> ports) {
+ this.ports = ports;
+ return this;
+ }
+
+ public Builder hostnamePath(String hostnamePath) {
+ this.hostnamePath = hostnamePath;
+ return this;
+ }
+
+ public Container build() {
+ return new Container(id, name, created, path, args, containerConfig, state, image, networkSettings, resolvConfPath,
+ driver, execDriver, volumes, volumesRW, command, status, hostConfig, ports, hostnamePath);
+ }
+
+ public Builder fromContainer(Container in) {
+ return this
+ .id(in.getId())
+ .name(in.getName())
+ .created(in.getCreated())
+ .path(in.getPath())
+ .args(in.getArgs())
+ .containerConfig(in.getContainerConfig())
+ .state(in.getState())
+ .image(in.getImage())
+ .networkSettings(in.getNetworkSettings())
+ .resolvConfPath(in.getResolvConfPath())
+ .driver(in.getDriver())
+ .execDriver(in.getExecDriver())
+ .volumes(in.getVolumes())
+ .volumesRW(in.getvolumesRW())
+ .command(in.getCommand())
+ .status(in.getStatus())
+ .hostConfig(in.getHostConfig())
+ .ports(in.getPorts())
+ .hostnamePath(in.getHostnamePath());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/domain/ExposedPorts.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/ExposedPorts.java b/docker/src/main/java/org/jclouds/docker/domain/ExposedPorts.java
new file mode 100644
index 0000000..b7a831a
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/domain/ExposedPorts.java
@@ -0,0 +1,106 @@
+/*
+ * 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.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import java.beans.ConstructorProperties;
+import java.util.Set;
+
+import org.jclouds.javax.annotation.Nullable;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableSet;
+import com.google.gson.annotations.SerializedName;
+
+public class ExposedPorts {
+
+ @SerializedName("PortAndProtocol")
+ private final String portAndProtocol;
+ @SerializedName("HostPorts")
+ private final Set<String> hostPorts;
+
+ @ConstructorProperties({ "PortAndProtocol", "HostPorts" })
+ protected ExposedPorts(String portAndProtocol, @Nullable Set<String> hostPorts) {
+ this.portAndProtocol = checkNotNull(portAndProtocol, "portAndProtocol");
+ this.hostPorts = hostPorts != null ? ImmutableSet.copyOf(hostPorts) : ImmutableSet.<String> of();
+ }
+
+ public String getPortAndProtocol() {
+ return portAndProtocol;
+ }
+
+ public Set<String> getHostPorts() {
+ return hostPorts;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ExposedPorts that = (ExposedPorts) o;
+
+ return Objects.equal(this.portAndProtocol, that.portAndProtocol) &&
+ Objects.equal(this.hostPorts, that.hostPorts);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(portAndProtocol, hostPorts);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("portAndProtocol", portAndProtocol)
+ .add("hostPorts", hostPorts)
+ .toString();
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public Builder toBuilder() {
+ return builder().fromExposedPorts(this);
+ }
+
+ public static final class Builder {
+
+ private String portAndProtocol;
+ private Set<String> hostPorts = ImmutableSet.of();
+
+ public Builder portAndProtocol(String portAndProtocol) {
+ this.portAndProtocol = portAndProtocol;
+ return this;
+ }
+
+ public Builder hostPorts(Set<String> hostPorts) {
+ this.hostPorts = ImmutableSet.copyOf(checkNotNull(hostPorts, "hostPorts"));
+ return this;
+ }
+
+ public ExposedPorts build() {
+ return new ExposedPorts(portAndProtocol, hostPorts);
+ }
+
+ public Builder fromExposedPorts(ExposedPorts in) {
+ return this.portAndProtocol(in.getPortAndProtocol())
+ .hostPorts(in.getHostPorts());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/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
new file mode 100644
index 0000000..275961f
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/domain/HostConfig.java
@@ -0,0 +1,242 @@
+/*
+ * 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.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import java.beans.ConstructorProperties;
+import java.util.List;
+import java.util.Map;
+
+import org.jclouds.javax.annotation.Nullable;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.gson.annotations.SerializedName;
+
+public class HostConfig {
+
+ @SerializedName("ContainerIDFile")
+ private final String containerIDFile;
+ @SerializedName("Binds")
+ private final List<String> binds;
+ @SerializedName("LxcConf")
+ private final Map<String, String> lxcConf;
+ @SerializedName("Privileged")
+ private final boolean privileged;
+ @SerializedName("Dns")
+ private final String dns;
+ @SerializedName("DnsSearch")
+ private final String dnsSearch;
+ @SerializedName("PortBindings")
+ private final Map<String, List<Map<String, String>>> portBindings;
+ @SerializedName("Links")
+ private final List<String> links;
+ @SerializedName("PublishAllPorts")
+ private final boolean publishAllPorts;
+ @SerializedName("VolumesFrom")
+ private final List<String> volumesFrom;
+
+ @ConstructorProperties({ "ContainerIDFile", "Binds", "LxcConf", "Privileged", "Dns", "DnsSearch", "PortBindings",
+ "Links", "PublishAllPorts", "VolumesFrom" })
+ protected HostConfig(@Nullable String containerIDFile, @Nullable List<String> binds,
+ Map<String, String> lxcConf, boolean privileged, @Nullable String dns,
+ @Nullable String dnsSearch, @Nullable Map<String, List<Map<String, String>>> portBindings,
+ @Nullable List<String> links, boolean publishAllPorts, @Nullable List<String> volumesFrom) {
+ this.containerIDFile = containerIDFile;
+ this.binds = binds != null ? ImmutableList.copyOf(binds) : ImmutableList.<String> of();
+ this.lxcConf = lxcConf != null ? ImmutableMap.copyOf(lxcConf) : ImmutableMap.<String, String> of();
+ this.privileged = checkNotNull(privileged, "privileged");
+ this.dns = dns;
+ this.dnsSearch = dnsSearch;
+ this.portBindings = portBindings != null ? ImmutableMap.copyOf(portBindings) : ImmutableMap.<String, List<Map<String, String>>> of();
+ this.links = links != null ? ImmutableList.copyOf(links) : ImmutableList.<String> of();
+ this.publishAllPorts = checkNotNull(publishAllPorts, "publishAllPorts");
+ this.volumesFrom = volumesFrom != null ? ImmutableList.copyOf(volumesFrom) : ImmutableList.<String> of();
+ }
+
+ public String getContainerIDFile() {
+ return containerIDFile;
+ }
+
+ public List<String> getBinds() {
+ return binds;
+ }
+
+ public Map<String, String> getLxcConf() {
+ return lxcConf;
+ }
+
+ public boolean isPrivileged() {
+ return privileged;
+ }
+
+ public String getDns() { return dns; }
+
+ public String getDnsSearch() { return dnsSearch; }
+
+ public Map<String, List<Map<String, String>>> getPortBindings() {
+ return portBindings;
+ }
+
+ @Nullable
+ public List<String> getLinks() {
+ return links;
+ }
+
+ public boolean isPublishAllPorts() {
+ return publishAllPorts;
+ }
+
+ public List<String> getVolumesFrom() {
+ return volumesFrom;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ HostConfig that = (HostConfig) o;
+
+ return Objects.equal(this.containerIDFile, that.containerIDFile) &&
+ Objects.equal(this.binds, that.binds) &&
+ Objects.equal(this.lxcConf, that.lxcConf) &&
+ Objects.equal(this.privileged, that.privileged) &&
+ Objects.equal(this.dns, that.dns) &&
+ Objects.equal(this.dnsSearch, that.dnsSearch) &&
+ Objects.equal(this.portBindings, that.portBindings) &&
+ Objects.equal(this.links, that.links) &&
+ Objects.equal(this.publishAllPorts, that.publishAllPorts) &&
+ Objects.equal(this.volumesFrom, that.volumesFrom);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(containerIDFile, binds, lxcConf, privileged, dns, dnsSearch, portBindings, links,
+ publishAllPorts, volumesFrom);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("containerIDFile", containerIDFile)
+ .add("binds", binds)
+ .add("lxcConf", lxcConf)
+ .add("privileged", privileged)
+ .add("dns", dns)
+ .add("dnsSearch", dnsSearch)
+ .add("portBindings", portBindings)
+ .add("links", links)
+ .add("publishAllPorts", publishAllPorts)
+ .add("volumesFrom", volumesFrom)
+ .toString();
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public Builder toBuilder() {
+ return builder().fromHostConfig(this);
+ }
+
+ public static final class Builder {
+
+ private String containerIDFile;
+ private List<String> binds = Lists.newArrayList();
+ private Map<String, String> lxcConf = Maps.newLinkedHashMap();
+ private boolean privileged;
+ private String dns;
+ private String dnsSearch;
+ private Map<String, List<Map<String, String>>> portBindings = Maps.newLinkedHashMap();
+ private List<String> links = Lists.newArrayList();
+ private boolean publishAllPorts;
+ private List<String> volumesFrom = Lists.newArrayList();
+
+ public Builder containerIDFile(String containerIDFile) {
+ this.containerIDFile = containerIDFile;
+ return this;
+ }
+
+ public Builder binds(List<String> binds) {
+ this.binds.addAll(checkNotNull(binds, "binds"));
+ return this;
+ }
+
+ public Builder lxcConf(Map<String, String> lxcConf) {
+ this.lxcConf.putAll(checkNotNull(lxcConf, "lxcConf"));
+ return this;
+ }
+
+ public Builder privileged(boolean privileged) {
+ this.privileged = privileged;
+ return this;
+ }
+
+ public Builder dns(String dns) {
+ this.dns = dns;
+ return this;
+ }
+
+ public Builder dnsSearch(String dnsSearch) {
+ this.dnsSearch = dnsSearch;
+ return this;
+ }
+
+ public Builder links(List<String> links) {
+ this.links.addAll(checkNotNull(links, "links"));
+ return this;
+ }
+
+ public Builder portBindings(Map<String, List<Map<String, String>>> portBindings) {
+ this.portBindings.putAll(portBindings);
+ return this;
+ }
+
+ public Builder publishAllPorts(boolean publishAllPorts) {
+ this.publishAllPorts = publishAllPorts;
+ return this;
+ }
+
+ public Builder volumesFrom(List<String> volumesFrom) {
+ this.volumesFrom.addAll(checkNotNull(volumesFrom, "volumesFrom"));
+ return this;
+ }
+
+ public HostConfig build() {
+ return new HostConfig(containerIDFile, binds, lxcConf, privileged, dns, dnsSearch, portBindings, links,
+ publishAllPorts, volumesFrom);
+ }
+
+ public Builder fromHostConfig(HostConfig in) {
+ return this
+ .containerIDFile(in.getContainerIDFile())
+ .binds(in.getBinds())
+ .lxcConf(in.getLxcConf())
+ .privileged(in.isPrivileged())
+ .dns(in.getDns())
+ .dnsSearch(in.getDnsSearch())
+ .links(in.getLinks())
+ .portBindings(in.getPortBindings())
+ .publishAllPorts(in.isPublishAllPorts())
+ .volumesFrom(in.getVolumesFrom());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/domain/Image.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/Image.java b/docker/src/main/java/org/jclouds/docker/domain/Image.java
new file mode 100644
index 0000000..186ece3
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/domain/Image.java
@@ -0,0 +1,239 @@
+/*
+ * 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.domain;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.gson.annotations.SerializedName;
+import org.jclouds.javax.annotation.Nullable;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class Image {
+
+ @SerializedName("Id")
+ private final String id;
+ @SerializedName("Parent")
+ private final String parent;
+ @SerializedName("Created")
+ private final String created;
+ @SerializedName("Container")
+ private final String container;
+ @SerializedName("DockerVersion")
+ private final String dockerVersion;
+ @SerializedName("Architecture")
+ private final String architecture;
+ @SerializedName("Os")
+ private final String os;
+ @SerializedName("Size")
+ private final long size;
+ @SerializedName("VirtualSize")
+ private final long virtualSize;
+ @SerializedName("RepoTags")
+ private final List<String> repoTags;
+
+ @ConstructorProperties({ "Id", "Parent", "Created", "Container", "DockerVersion", "Architecture", "Os", "Size",
+ "VirtualSize", "RepoTags", "Architecture" })
+ protected Image(String id, @Nullable String parent, @Nullable String created, @Nullable String container,
+ @Nullable String dockerVersion, @Nullable String architecture, @Nullable String os, long size,
+ @Nullable long virtualSize, @Nullable List<String> repoTags) {
+ this.id = checkNotNull(id, "id");
+ this.parent = parent;
+ this.created = created;
+ this.container = container;
+ this.dockerVersion = dockerVersion;
+ this.architecture = architecture;
+ this.os = os;
+ this.size = size;
+ this.virtualSize = virtualSize;
+ this.repoTags = repoTags != null ? ImmutableList.copyOf(repoTags) : ImmutableList.<String> of();
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getParent() {
+ return parent;
+ }
+
+ public String getCreated() {
+ return created;
+ }
+
+ public String getContainer() {
+ return container;
+ }
+
+ public String getDockerVersion() {
+ return dockerVersion;
+ }
+
+ public String getArchitecture() {
+ return architecture;
+ }
+
+ public String getOs() {
+ return os;
+ }
+
+ public long getSize() {
+ return size;
+ }
+
+ public long getVirtualSize() {
+ return virtualSize;
+ }
+
+ public List<String> getRepoTags() {
+ return repoTags;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Image that = (Image) o;
+
+ return Objects.equal(this.id, that.id) &&
+ Objects.equal(this.parent, that.parent) &&
+ Objects.equal(this.created, that.created) &&
+ Objects.equal(this.container, that.container) &&
+ Objects.equal(this.dockerVersion, that.dockerVersion) &&
+ Objects.equal(this.architecture, that.architecture) &&
+ Objects.equal(this.os, that.os) &&
+ Objects.equal(this.size, that.size) &&
+ Objects.equal(this.virtualSize, that.virtualSize);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(id, parent, created, container, dockerVersion, architecture, os, size,
+ virtualSize);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("id", id)
+ .add("parent", parent)
+ .add("created", created)
+ .add("container", container)
+ .add("dockerVersion", dockerVersion)
+ .add("architecture", architecture)
+ .add("os", os)
+ .add("size", size)
+ .add("virtualSize", virtualSize)
+ .add("repoTags", repoTags)
+ .toString();
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public Builder toBuilder() {
+ return builder().fromImage(this);
+ }
+
+ public static final class Builder {
+
+ private String id;
+ private String parent;
+ private String created;
+ private String container;
+ private String dockerVersion;
+ private String architecture;
+ private String os;
+ private long size;
+ private long virtualSize;
+ private List<String> repoTags = ImmutableList.of();
+
+ public Builder id(String id) {
+ this.id = id;
+ return this;
+ }
+
+ public Builder parent(String parent) {
+ this.parent = parent;
+ return this;
+ }
+
+ public Builder created(String created) {
+ this.created = created;
+ return this;
+ }
+
+ public Builder container(String container) {
+ this.container = container;
+ return this;
+ }
+
+ public Builder dockerVersion(String dockerVersion) {
+ this.dockerVersion = dockerVersion;
+ return this;
+ }
+
+ public Builder architecture(String architecture) {
+ this.architecture = architecture;
+ return this;
+ }
+
+ public Builder os(String os) {
+ this.os = os;
+ return this;
+ }
+
+ public Builder size(long size) {
+ this.size = size;
+ return this;
+ }
+
+ public Builder virtualSize(long virtualSize) {
+ this.virtualSize = virtualSize;
+ return this;
+ }
+
+ public Builder repoTags(List<String> repoTags) {
+ this.repoTags = ImmutableList.copyOf(checkNotNull(repoTags, "repoTags"));
+ return this;
+ }
+
+ public Image build() {
+ return new Image(id, parent, created, container, dockerVersion, architecture, os, size,
+ virtualSize, repoTags);
+ }
+
+ public Builder fromImage(Image in) {
+ return this
+ .id(in.getId())
+ .parent(in.getParent())
+ .created(in.getCreated())
+ .container(in.getContainer())
+ .dockerVersion(in.getDockerVersion())
+ .architecture(in.getArchitecture())
+ .os(in.getOs())
+ .size(in.getSize())
+ .virtualSize(in.getVirtualSize());
+ //DO NOT add .repoTags(in.getRepoTags());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/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
new file mode 100644
index 0000000..23f3fbe
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
@@ -0,0 +1,175 @@
+/*
+ * 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.domain;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableMap;
+import com.google.gson.annotations.SerializedName;
+import org.jclouds.javax.annotation.Nullable;
+
+import java.beans.ConstructorProperties;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class NetworkSettings {
+
+ @SerializedName("IPAddress")
+ private final String ipAddress;
+ @SerializedName("IPPrefixLen")
+ private final int ipPrefixLen;
+ @SerializedName("Gateway")
+ private final String gateway;
+ @SerializedName("Bridge")
+ private final String bridge;
+ @SerializedName("PortMapping")
+ private final String portMapping;
+ @SerializedName("Ports")
+ private final Map<String, List<Map<String, String>>> ports;
+
+ @ConstructorProperties({ "IPAddress", "IPPrefixLen", "Gateway", "Bridge", "PortMapping", "Ports" })
+ protected NetworkSettings(String ipAddress, int ipPrefixLen, String gateway, String bridge,
+ @Nullable String portMapping, @Nullable Map<String, List<Map<String, String>>> ports) {
+ this.ipAddress = checkNotNull(ipAddress, "ipAddress");
+ this.ipPrefixLen = checkNotNull(ipPrefixLen, "ipPrefixLen");
+ this.gateway = checkNotNull(gateway, "gateway");
+ this.bridge = checkNotNull(bridge, "bridge");
+ this.portMapping = portMapping;
+ this.ports = ports != null ? ImmutableMap.copyOf(ports) : ImmutableMap.<String, List<Map<String, String>>> of();
+ }
+
+ public String getIpAddress() {
+ return ipAddress;
+ }
+
+ public int getIpPrefixLen() {
+ return ipPrefixLen;
+ }
+
+ public String getGateway() {
+ return gateway;
+ }
+
+ public String getBridge() {
+ return bridge;
+ }
+
+ public String getPortMapping() {
+ return portMapping;
+ }
+
+ public Map<String, List<Map<String, String>>> getPorts() {
+ return ports;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ NetworkSettings that = (NetworkSettings) o;
+
+ return Objects.equal(this.ipAddress, that.ipAddress) &&
+ Objects.equal(this.ipPrefixLen, that.ipPrefixLen) &&
+ Objects.equal(this.gateway, that.gateway) &&
+ Objects.equal(this.bridge, that.bridge) &&
+ Objects.equal(this.portMapping, that.portMapping) &&
+ Objects.equal(this.ports, that.ports);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(ipAddress, ipPrefixLen, gateway, bridge, portMapping, ports);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("ipAddress", ipAddress)
+ .add("ipPrefixLen", ipPrefixLen)
+ .add("gateway", gateway)
+ .add("bridge", bridge)
+ .add("portMapping", portMapping)
+ .add("ports", ports)
+ .toString();
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public Builder toBuilder() {
+ return builder().fromNetworkSettings(this);
+ }
+
+ public static final class Builder {
+
+ private String ipAddress;
+ private int ipPrefixLen;
+ private String gateway;
+ private String bridge;
+ private String portMapping;
+ private Map<String, List<Map<String, String>>> ports = ImmutableMap.of();
+
+ public Builder ipAddress(String ipAddress) {
+ this.ipAddress = ipAddress;
+ return this;
+ }
+
+ public Builder ipPrefixLen(int ipPrefixLen) {
+ this.ipPrefixLen = ipPrefixLen;
+ return this;
+ }
+
+ public Builder gateway(String gateway) {
+ this.gateway = gateway;
+ return this;
+ }
+
+ public Builder bridge(String bridge) {
+ this.bridge = bridge;
+ return this;
+ }
+
+ public Builder portMapping(String portMapping) {
+ this.portMapping = portMapping;
+ return this;
+ }
+
+ public Builder ports(Map<String, List<Map<String, String>>> ports) {
+ this.ports = ImmutableMap.copyOf(checkNotNull(ports, "ports"));
+ return this;
+ }
+
+ public NetworkSettings build() {
+ return new NetworkSettings(ipAddress, ipPrefixLen, gateway, bridge, portMapping, ports);
+ }
+
+ public Builder fromNetworkSettings(NetworkSettings in) {
+ return this
+ .ipAddress(in.getIpAddress())
+ .ipPrefixLen(in.getIpPrefixLen())
+ .gateway(in.getGateway())
+ .bridge(in.getBridge())
+ .portMapping(in.getPortMapping())
+ .ports(in.getPorts());
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/domain/Port.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/Port.java b/docker/src/main/java/org/jclouds/docker/domain/Port.java
new file mode 100644
index 0000000..b49dfa6
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/domain/Port.java
@@ -0,0 +1,88 @@
+/*
+ * 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.domain;
+
+import com.google.common.base.Objects;
+import com.google.gson.annotations.SerializedName;
+
+import java.beans.ConstructorProperties;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+public class Port {
+
+ @SerializedName("PrivatePort")
+ private final int privatePort;
+ @SerializedName("PublicPort")
+ private final int publicPort;
+ @SerializedName("Type")
+ private final String type;
+ @SerializedName("IP")
+ private final String ip;
+
+ @ConstructorProperties({ "PrivatePort", "PublicPort", "Type", "IP" })
+ protected Port(int privatePort, int publicPort, String type, String ip) {
+ this.privatePort = checkNotNull(privatePort, "privatePort");
+ this.publicPort = checkNotNull(publicPort, "publicPort");
+ this.type = checkNotNull(type, "type");
+ this.ip = checkNotNull(ip, "ip");
+ }
+
+ public int getPrivatePort() {
+ return privatePort;
+ }
+
+ public int getPublicPort() {
+ return publicPort;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public String getIp() {
+ return ip;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Port that = (Port) o;
+
+ return Objects.equal(this.privatePort, that.privatePort) &&
+ Objects.equal(this.publicPort, that.publicPort) &&
+ Objects.equal(this.type, that.type) &&
+ Objects.equal(this.ip, that.ip);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(privatePort, publicPort, type, ip);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("privatePort", privatePort)
+ .add("publicPort", publicPort)
+ .add("type", type)
+ .add("ip", ip)
+ .toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/domain/State.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/State.java b/docker/src/main/java/org/jclouds/docker/domain/State.java
new file mode 100644
index 0000000..ac1ba85
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/domain/State.java
@@ -0,0 +1,166 @@
+/*
+ * 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.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import java.beans.ConstructorProperties;
+
+import com.google.common.base.Objects;
+import com.google.gson.annotations.SerializedName;
+
+public class State {
+ @SerializedName("Pid")
+ private final int pid;
+ @SerializedName("Running")
+ private final boolean running;
+ @SerializedName("ExitCode")
+ private final int exitCode;
+ @SerializedName("StartedAt")
+ private final String startedAt;
+ @SerializedName("FinishedAt")
+ private final String finishedAt;
+ @SerializedName("Ghost")
+ private final boolean ghost;
+
+ @ConstructorProperties({ "Pid", "Running", "ExitCode", "StartedAt", "FinishedAt", "Ghost" })
+ protected State(int pid, boolean running, int exitCode, String startedAt, String finishedAt, boolean ghost) {
+ this.pid = checkNotNull(pid, "pid");
+ this.running = checkNotNull(running, "running");
+ this.exitCode = checkNotNull(exitCode, "exitCode");
+ this.startedAt = checkNotNull(startedAt, "startedAt");
+ this.finishedAt = checkNotNull(finishedAt, "finishedAt");
+ this.ghost = checkNotNull(ghost, "ghost");
+ }
+
+ public int getPid() {
+ return pid;
+ }
+
+ public boolean isRunning() {
+ return running;
+ }
+
+ public int getExitCode() {
+ return exitCode;
+ }
+
+ public String getStartedAt() {
+ return startedAt;
+ }
+
+ public String getFinishedAt() {
+ return finishedAt;
+ }
+
+ public boolean isGhost() {
+ return ghost;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ State that = (State) o;
+
+ return Objects.equal(this.pid, that.pid) &&
+ Objects.equal(this.running, that.running) &&
+ Objects.equal(this.exitCode, that.exitCode) &&
+ Objects.equal(this.startedAt, that.startedAt) &&
+ Objects.equal(this.finishedAt, that.finishedAt) &&
+ Objects.equal(this.ghost, that.ghost);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(pid, running, exitCode, startedAt, finishedAt, ghost);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("pid", pid)
+ .add("running", running)
+ .add("exitCode", exitCode)
+ .add("startedAt", startedAt)
+ .add("finishedAt", finishedAt)
+ .add("ghost", ghost)
+ .toString();
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public Builder toBuilder() {
+ return builder().fromState(this);
+ }
+
+ public static final class Builder {
+
+ private int pid;
+ private boolean running;
+ private int exitCode;
+ private String startedAt;
+ private String finishedAt;
+ private boolean ghost;
+
+ public Builder pid(int pid) {
+ this.pid = pid;
+ return this;
+ }
+
+ public Builder running(boolean running) {
+ this.running = running;
+ return this;
+ }
+
+ public Builder exitCode(int exitCode) {
+ this.exitCode = exitCode;
+ return this;
+ }
+
+ public Builder startedAt(String startedAt) {
+ this.startedAt = startedAt;
+ return this;
+ }
+
+ public Builder finishedAt(String finishedAt) {
+ this.finishedAt = finishedAt;
+ return this;
+ }
+
+ public Builder ghost(boolean ghost) {
+ this.ghost = ghost;
+ return this;
+ }
+
+ public State build() {
+ return new State(pid, running, exitCode, startedAt, finishedAt, ghost);
+ }
+
+ public Builder fromState(State in) {
+ return this
+ .pid(in.getPid())
+ .running(in.isRunning())
+ .exitCode(in.getExitCode())
+ .startedAt(in.getStartedAt())
+ .finishedAt(in.getFinishedAt())
+ .ghost(in.isGhost());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/domain/Version.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/Version.java b/docker/src/main/java/org/jclouds/docker/domain/Version.java
new file mode 100644
index 0000000..445a225
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/domain/Version.java
@@ -0,0 +1,166 @@
+/*
+ * 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.domain;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import java.beans.ConstructorProperties;
+
+import com.google.common.base.Objects;
+import com.google.gson.annotations.SerializedName;
+
+public class Version {
+ @SerializedName("Arch")
+ private final String arch;
+ @SerializedName("GitCommit")
+ private final String gitCommit;
+ @SerializedName("GoVersion")
+ private final String goVersion;
+ @SerializedName("KernelVersion")
+ private final String kernelVersion;
+ @SerializedName("Os")
+ private final String os;
+ @SerializedName("Version")
+ private final String version;
+
+ @ConstructorProperties({ "Arch", "GitCommit", "GoVersion", "KernelVersion", "Os", "Version" })
+ protected Version(String arch, String gitCommit, String goVersion, String kernelVersion, String os, String version) {
+ this.arch = checkNotNull(arch, "arch");
+ this.gitCommit = checkNotNull(gitCommit, "gitCommit");
+ this.goVersion = checkNotNull(goVersion, "goVersion");
+ this.kernelVersion = checkNotNull(kernelVersion, "kernelVersion");
+ this.os = checkNotNull(os, "os");
+ this.version = checkNotNull(version, "version");
+ }
+
+ public String getArch() {
+ return arch;
+ }
+
+ public String getGitCommit() {
+ return gitCommit;
+ }
+
+ public String getGoVersion() {
+ return goVersion;
+ }
+
+ public String getKernelVersion() {
+ return kernelVersion;
+ }
+
+ public String getOs() {
+ return os;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ Version that = (Version) o;
+
+ return Objects.equal(this.arch, that.arch) &&
+ Objects.equal(this.gitCommit, that.gitCommit) &&
+ Objects.equal(this.goVersion, that.goVersion) &&
+ Objects.equal(this.kernelVersion, that.kernelVersion) &&
+ Objects.equal(this.os, that.os) &&
+ Objects.equal(this.version, that.version);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(arch, gitCommit, goVersion, kernelVersion, os, version);
+ }
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("arch", arch)
+ .add("gitCommit", gitCommit)
+ .add("goVersion", goVersion)
+ .add("kernelVersion", kernelVersion)
+ .add("os", os)
+ .add("version", version)
+ .toString();
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public Builder toBuilder() {
+ return builder().fromVersion(this);
+ }
+
+ public static final class Builder {
+
+ private String arch;
+ private String gitCommit;
+ private String goVersion;
+ private String kernelVersion;
+ private String os;
+ private String version;
+
+ public Builder arch(String arch) {
+ this.arch = arch;
+ return this;
+ }
+
+ public Builder gitCommit(String gitCommit) {
+ this.gitCommit = gitCommit;
+ return this;
+ }
+
+ public Builder goVersion(String goVersion) {
+ this.goVersion = goVersion;
+ return this;
+ }
+
+ public Builder kernelVersion(String kernelVersion) {
+ this.kernelVersion = kernelVersion;
+ return this;
+ }
+
+ public Builder os(String os) {
+ this.os = os;
+ return this;
+ }
+
+ public Builder version(String version) {
+ this.version = version;
+ return this;
+ }
+
+ public Version build() {
+ return new Version(arch, gitCommit, goVersion, kernelVersion, os, version);
+ }
+
+ public Builder fromVersion(Version in) {
+ return this
+ .arch(in.getArch())
+ .gitCommit(in.getGitCommit())
+ .goVersion(in.getGoVersion())
+ .kernelVersion(in.getKernelVersion())
+ .os(in.getOs())
+ .version(in.getVersion());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/features/RemoteApi.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/features/RemoteApi.java b/docker/src/main/java/org/jclouds/docker/features/RemoteApi.java
new file mode 100644
index 0000000..96b0228
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/features/RemoteApi.java
@@ -0,0 +1,272 @@
+/*
+ * 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.features;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.InputStream;
+import java.util.Set;
+
+import javax.inject.Named;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.Fallbacks;
+import org.jclouds.docker.binders.BindInputStreamToRequest;
+import org.jclouds.docker.domain.Config;
+import org.jclouds.docker.domain.Container;
+import org.jclouds.docker.domain.HostConfig;
+import org.jclouds.docker.domain.Image;
+import org.jclouds.docker.domain.Version;
+import org.jclouds.docker.options.BuildOptions;
+import org.jclouds.docker.options.CommitOptions;
+import org.jclouds.docker.options.CreateImageOptions;
+import org.jclouds.docker.options.DeleteImageOptions;
+import org.jclouds.docker.options.ListContainerOptions;
+import org.jclouds.docker.options.ListImageOptions;
+import org.jclouds.docker.options.RemoveContainerOptions;
+import org.jclouds.io.Payload;
+import org.jclouds.rest.annotations.BinderParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.Headers;
+import org.jclouds.rest.binders.BindToJsonPayload;
+
+@Consumes(MediaType.APPLICATION_JSON)
+public interface RemoteApi extends Closeable {
+
+ /**
+ * Get the information of the current docker version.
+ *
+ * @return The information of the current docker version.
+ */
+ @Named("version")
+ @GET
+ @Path("/version")
+ Version getVersion();
+
+ /**
+ * List all running containers
+ *
+ * @return a set of containers
+ */
+ @Named("containers:list")
+ @GET
+ @Path("/containers/json")
+ @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+ Set<Container> listContainers();
+
+ /**
+ * List all running containers
+ *
+ * @param options the options to list the containers (@see ListContainerOptions)
+ * @return a set of containers
+ */
+ @Named("containers:list")
+ @GET
+ @Path("/containers/json")
+ @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+ Set<Container> listContainers(ListContainerOptions options);
+
+ /**
+ * Create a container
+ *
+ * @param name the name for the new container. Must match /?[a-zA-Z0-9_-]+.
+ * @param config the container’s configuration (@see BindToJsonPayload)
+ * @return a new container
+ */
+ @Named("container:create")
+ @POST
+ @Path("/containers/create")
+ Container createContainer(@QueryParam("name") String name, @BinderParam(BindToJsonPayload.class) Config config);
+
+ /**
+ * Return low-level information on the container id
+ * @param containerId The id of the container to get.
+ * @return The details of the container or <code>null</code> if the container with the given id doesn't exist.
+ */
+ @Named("container:inspect")
+ @GET
+ @Path("/containers/{id}/json")
+ @Fallback(Fallbacks.NullOnNotFoundOr404.class)
+ Container inspectContainer(@PathParam("id") String containerId);
+
+ /**
+ * Remove the container by id from the filesystem
+ *
+ * @param containerId The id of the container to be removed.
+ */
+ @Named("container:delete")
+ @DELETE
+ @Path("/containers/{id}")
+ void removeContainer(@PathParam("id") String containerId);
+
+ /**
+ * Remove the container by id from the filesystem
+ *
+ * @param containerId The id of the container to be removed.
+ * @param options the operation’s configuration (@see RemoveContainerOptions)
+ */
+ @Named("container:delete")
+ @DELETE
+ @Path("/containers/{id}")
+ void removeContainer(@PathParam("id") String containerId, RemoveContainerOptions options);
+
+ /**
+ * Start a container by id.
+ *
+ * @param containerId The id of the container to be started.
+ */
+ @Named("container:start")
+ @POST
+ @Path("/containers/{id}/start")
+ void startContainer(@PathParam("id") String containerId);
+
+ /**
+ * Start a container.
+ *
+ * @param containerId The id of the container to be started.
+ * @param hostConfig the container’s host configuration
+ */
+ @Named("container:start")
+ @POST
+ @Path("/containers/{id}/start")
+ void startContainer(@PathParam("id") String containerId, @BinderParam(BindToJsonPayload.class) HostConfig hostConfig);
+
+ /**
+ * Stop a container by id.
+ *
+ * @param containerId The id of the container to be stopped.
+ * @return the stream of the stop execution.
+ */
+ @Named("container:stop")
+ @POST
+ @Path("/containers/{id}/stop")
+ void stopContainer(@PathParam("id") String containerId);
+
+ /**
+ * Create a new image from a container’s changes
+ *
+ * @param options the commit’s configuration (@see CommitOptions)
+ * @return a new image created from the current container's status.
+ */
+ @Named("container:commit")
+ @POST
+ @Path("/commit")
+ Image commit(CommitOptions options);
+
+ /**
+ * List images
+ *
+ * @return the images available.
+ */
+ @Named("images:list")
+ @GET
+ @Path("/images/json")
+ @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+ Set<Image> listImages();
+
+ /**
+ * List images
+ *
+ * @param options the configuration to list images (@see ListImageOptions)
+ * @return the images available.
+ */
+ @Named("images:list")
+ @GET
+ @Path("/images/json")
+ @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class)
+ Set<Image> listImages(ListImageOptions options);
+
+ /**
+ * Inspect an image
+ *
+ * @param imageName The id of the image to inspect.
+ * @return low-level information on the image name
+ */
+ @Named("image:inspect")
+ @GET
+ @Path("/images/{name}/json")
+ Image inspectImage(@PathParam("name") String imageName);
+
+ /**
+ * Create an image, either by pull it from the registry or by importing it
+ *
+ * @param options the configuration to create an image (@see CreateImageOptions)
+ * @return a stream of the image creation.
+ */
+ @Named("image:create")
+ @POST
+ @Path("/images/create")
+ InputStream createImage(CreateImageOptions options);
+
+ /**
+ * Delete an image.
+ *
+ * @param name the image name to be deleted
+ * @return the stream of the deletion execution.
+ */
+ @Named("image:delete")
+ @DELETE
+ @Path("/images/{name}")
+ InputStream deleteImage(@PathParam("name") String name);
+
+ /**
+ * Remove the image from the filesystem by name
+ *
+ * @param name the name of the image to be removed
+ * @param options the image deletion's options (@see DeleteImageOptions)
+ * @return the stream of the deletion execution.
+ */
+ @Named("image:delete")
+ @DELETE
+ @Path("/images/{name}")
+ InputStream deleteImage(@PathParam("name") String name, DeleteImageOptions options);
+
+ /**
+ * Build an image from Dockerfile via stdin
+ *
+ * @param inputStream The stream must be a tar archive compressed with one of the following algorithms: identity
+ * (no compression), gzip, bzip2, xz.
+ * @param options the image build's options (@see BuildOptions)
+ * @return a stream of the build execution
+ */
+ @Named("image:build")
+ @POST
+ @Path("/build")
+ @Headers(keys = "Content-Type", values = "application/tar")
+ InputStream build(Payload inputStream, BuildOptions options);
+
+ /**
+ * Build an image from Dockerfile via stdin
+ *
+ * @param dockerFile The file to be compressed with one of the following algorithms: identity, gzip, bzip2, xz.*
+ * @param options the image build's options (@see BuildOptions)
+ * @return a stream of the build execution
+ */
+ @Named("image:build")
+ @POST
+ @Path("/build")
+ @Headers(keys = "Content-Type", values = "application/tar")
+ InputStream build(@BinderParam(BindInputStreamToRequest.class) File dockerFile, BuildOptions options);
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/features/internal/Archives.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/features/internal/Archives.java b/docker/src/main/java/org/jclouds/docker/features/internal/Archives.java
new file mode 100644
index 0000000..43b69c3
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/features/internal/Archives.java
@@ -0,0 +1,60 @@
+/*
+ * 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.features.internal;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.collect.Iterables.getLast;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
+import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
+
+import com.google.common.base.Splitter;
+import com.google.common.io.Files;
+
+public class Archives {
+
+ public static File tar(File baseDir, String archivePath) throws IOException {
+ return tar(baseDir, new File(archivePath));
+ }
+
+ public static File tar(File baseDir, File tarFile) throws IOException {
+ // Check that the directory is a directory, and get its contents
+ checkArgument(baseDir.isDirectory(), "%s is not a directory", baseDir);
+ File[] files = baseDir.listFiles();
+ String token = getLast(Splitter.on("/").split(baseDir.getAbsolutePath()));
+ TarArchiveOutputStream tos = new TarArchiveOutputStream(new FileOutputStream(tarFile));
+ tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
+ try {
+ for (File file : files) {
+ TarArchiveEntry tarEntry = new TarArchiveEntry(file);
+ tarEntry.setName("/" + getLast(Splitter.on(token).split(file.toString())));
+ tos.putArchiveEntry(tarEntry);
+ if (!file.isDirectory()) {
+ Files.asByteSource(file).copyTo(tos);
+ }
+ tos.closeArchiveEntry();
+ }
+ } finally {
+ tos.close();
+ }
+ return tarFile;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java b/docker/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java
new file mode 100644
index 0000000..855f25f
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java
@@ -0,0 +1,106 @@
+/*
+ * 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.handlers;
+
+import com.google.common.base.Throwables;
+import com.google.common.io.Closeables;
+import org.jclouds.http.HttpCommand;
+import org.jclouds.http.HttpErrorHandler;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.http.HttpResponseException;
+import org.jclouds.logging.Logger;
+import org.jclouds.rest.AuthorizationException;
+import org.jclouds.rest.ResourceNotFoundException;
+import org.jclouds.util.Strings2;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+
+/**
+ * This will parse and set an appropriate exception on the command object.
+ * <p/>
+ * <p/>
+ * Errors are returned with an appropriate HTTP status code, an X-Elastic- Error header specifying
+ * the error type, and a text description in the HTTP body.
+ */
+public class DockerErrorHandler implements HttpErrorHandler {
+ @Resource
+ protected Logger logger = Logger.NULL;
+
+ public void handleError(HttpCommand command, HttpResponse response) {
+ // it is important to always read fully and close streams
+ String message = parseMessage(response);
+ Exception exception = message != null ? new HttpResponseException(command, response, message)
+ : new HttpResponseException(command, response);
+ try {
+ message = message != null ? message : String.format("%s -> %s", command.getCurrentRequest().getRequestLine(),
+ response.getStatusLine());
+ switch (response.getStatusCode()) {
+ case 400:
+ if ((command.getCurrentRequest().getEndpoint().getPath().endsWith("/info"))
+ || (message != null && message.indexOf("could not be found") != -1))
+ exception = new ResourceNotFoundException(message, exception);
+ else if (message != null && message.indexOf("currently in use") != -1)
+ exception = new IllegalStateException(message, exception);
+ else
+ exception = new IllegalArgumentException(message, exception);
+ break;
+ case 401:
+ exception = new AuthorizationException(message, exception);
+ break;
+ case 402:
+ exception = new IllegalStateException(message, exception);
+ break;
+ case 404:
+ if (!command.getCurrentRequest().getMethod().equals("DELETE")) {
+ exception = new ResourceNotFoundException(message, exception);
+ }
+ break;
+ case 405:
+ exception = new IllegalArgumentException(message, exception);
+ break;
+ case 409:
+ exception = new IllegalStateException(message, exception);
+ break;
+ }
+ } finally {
+ try {
+ Closeables.close(response.getPayload(), true);
+ } catch (IOException e) {
+ // This code will never be reached
+ throw Throwables.propagate(e);
+ }
+ command.setException(exception);
+ }
+ }
+
+ public String parseMessage(HttpResponse response) {
+ if (response.getPayload() == null)
+ return null;
+ try {
+ return Strings2.toString(response.getPayload());
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
+ } finally {
+ try {
+ response.getPayload().close();
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/options/BuildOptions.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/options/BuildOptions.java b/docker/src/main/java/org/jclouds/docker/options/BuildOptions.java
new file mode 100644
index 0000000..4d7196c
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/options/BuildOptions.java
@@ -0,0 +1,71 @@
+/*
+ * 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.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize image builder.
+ */
+public class BuildOptions extends BaseHttpRequestOptions {
+
+ public static final BuildOptions NONE = new BuildOptions();
+
+ public BuildOptions tag(String tag) {
+ this.queryParameters.put("tag", tag);
+ return this;
+ }
+
+ public BuildOptions verbose(Boolean verbose) {
+ this.queryParameters.put("verbose", verbose.toString());
+ return this;
+ }
+
+ public BuildOptions nocache(Boolean nocache) {
+ this.queryParameters.put("nocache", nocache.toString());
+ return this;
+ }
+
+ public static class Builder {
+
+ /**
+ * @see BuildOptions#tag
+ */
+ public static BuildOptions tag(String tag) {
+ BuildOptions options = new BuildOptions();
+ return options.tag(tag);
+ }
+
+ /**
+ * @see BuildOptions#verbose(Boolean)
+ */
+ public static BuildOptions verbose(Boolean verbose) {
+ BuildOptions options = new BuildOptions();
+ return options.verbose(verbose);
+ }
+
+ /**
+ * @see BuildOptions#nocache(Boolean)
+ */
+ public static BuildOptions nocache(Boolean nocache) {
+ BuildOptions options = new BuildOptions();
+ return options.nocache(nocache);
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/options/CommitOptions.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/options/CommitOptions.java b/docker/src/main/java/org/jclouds/docker/options/CommitOptions.java
new file mode 100644
index 0000000..5653fba
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/options/CommitOptions.java
@@ -0,0 +1,109 @@
+/*
+ * 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.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize image commit.
+ */
+public class CommitOptions extends BaseHttpRequestOptions {
+
+ public static final CommitOptions NONE = new CommitOptions();
+
+ public CommitOptions containerId(String containerId) {
+ this.queryParameters.put("containerId", containerId);
+ return this;
+ }
+
+ public CommitOptions repository(String repository) {
+ this.queryParameters.put("repository", repository);
+ return this;
+ }
+
+ public CommitOptions tag(String tag) {
+ this.queryParameters.put("tag", tag);
+ return this;
+ }
+
+ public CommitOptions message(String message) {
+ this.queryParameters.put("message", message);
+ return this;
+ }
+
+ public CommitOptions author(String author) {
+ this.queryParameters.put("author", author);
+ return this;
+ }
+
+ public CommitOptions run(String run) {
+ this.queryParameters.put("run", run);
+ return this;
+ }
+
+ public static class Builder {
+
+ /**
+ * @see CommitOptions#containerId
+ */
+ public static CommitOptions containerId(String containerId) {
+ CommitOptions options = new CommitOptions();
+ return options.containerId(containerId);
+ }
+
+ /**
+ * @see CommitOptions#repository
+ */
+ public static CommitOptions repository(String repository) {
+ CommitOptions options = new CommitOptions();
+ return options.repository(repository);
+ }
+
+ /**
+ * @see CommitOptions#tag
+ */
+ public static CommitOptions tag(String tag) {
+ CommitOptions options = new CommitOptions();
+ return options.tag(tag);
+ }
+
+ /**
+ * @see CommitOptions#message
+ */
+ public static CommitOptions message(String message) {
+ CommitOptions options = new CommitOptions();
+ return options.message(message);
+ }
+
+ /**
+ * @see CommitOptions#author
+ */
+ public static CommitOptions author(String author) {
+ CommitOptions options = new CommitOptions();
+ return options.author(author);
+ }
+
+ /**
+ * @see CommitOptions#run
+ */
+ public static CommitOptions run(String run) {
+ CommitOptions options = new CommitOptions();
+ return options.run(run);
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/options/CreateImageOptions.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/options/CreateImageOptions.java b/docker/src/main/java/org/jclouds/docker/options/CreateImageOptions.java
new file mode 100644
index 0000000..51dc399
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/options/CreateImageOptions.java
@@ -0,0 +1,95 @@
+/*
+ * 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.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize container creation.
+ */
+public class CreateImageOptions extends BaseHttpRequestOptions {
+
+ public static final CreateImageOptions NONE = new CreateImageOptions();
+
+ public CreateImageOptions fromImage(String fromImage) {
+ this.queryParameters.put("fromImage", fromImage);
+ return this;
+ }
+
+ public CreateImageOptions fromSrc(String fromSrc) {
+ this.queryParameters.put("fromSrc", fromSrc);
+ return this;
+ }
+
+ public CreateImageOptions repo(String repo) {
+ this.queryParameters.put("repo", repo);
+ return this;
+ }
+
+ public CreateImageOptions tag(String tag) {
+ this.queryParameters.put("tag", tag);
+ return this;
+ }
+
+ public CreateImageOptions registry(String registry) {
+ this.queryParameters.put("registry", registry);
+ return this;
+ }
+
+ public static class Builder {
+ /**
+ * @see CreateImageOptions#fromImage
+ */
+ public static CreateImageOptions fromImage(String fromImage) {
+ CreateImageOptions options = new CreateImageOptions();
+ return options.fromImage(fromImage);
+ }
+
+ /**
+ * @see CreateImageOptions#fromSrc
+ */
+ public static CreateImageOptions fromSrc(String fromSrc) {
+ CreateImageOptions options = new CreateImageOptions();
+ return options.fromSrc(fromSrc);
+ }
+
+ /**
+ * @see CreateImageOptions#repo
+ */
+ public static CreateImageOptions repo(String repo) {
+ CreateImageOptions options = new CreateImageOptions();
+ return options.repo(repo);
+ }
+
+ /**
+ * @see CreateImageOptions#tag
+ */
+ public static CreateImageOptions tag(String tag) {
+ CreateImageOptions options = new CreateImageOptions();
+ return options.tag(tag);
+ }
+
+ /**
+ * @see CreateImageOptions#registry
+ */
+ public static CreateImageOptions registry(String registry) {
+ CreateImageOptions options = new CreateImageOptions();
+ return options.registry(registry);
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java b/docker/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java
new file mode 100644
index 0000000..9438616
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java
@@ -0,0 +1,44 @@
+/*
+ * 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.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize image deletion.
+ */
+public class DeleteImageOptions extends BaseHttpRequestOptions {
+
+ public static final DeleteImageOptions NONE = new DeleteImageOptions();
+
+ public DeleteImageOptions force(Boolean force) {
+ this.queryParameters.put("force", force.toString());
+ return this;
+ }
+
+ public static class Builder {
+
+ /**
+ * @see DeleteImageOptions#force
+ */
+ public static DeleteImageOptions force(Boolean force) {
+ DeleteImageOptions options = new DeleteImageOptions();
+ return options.force(force);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/options/ListContainerOptions.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/options/ListContainerOptions.java b/docker/src/main/java/org/jclouds/docker/options/ListContainerOptions.java
new file mode 100644
index 0000000..af16664
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/options/ListContainerOptions.java
@@ -0,0 +1,97 @@
+/*
+ * 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.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize container's listing.
+ */
+public class ListContainerOptions extends BaseHttpRequestOptions {
+
+ public static final ListContainerOptions NONE = new ListContainerOptions();
+
+ public ListContainerOptions all(Boolean all) {
+ this.queryParameters.put("all", all.toString());
+ return this;
+ }
+
+ public ListContainerOptions limit(Integer limit) {
+ this.queryParameters.put("limit", limit.toString());
+ return this;
+ }
+
+ public ListContainerOptions since(Integer since) {
+ this.queryParameters.put("since", since.toString());
+ return this;
+ }
+
+ public ListContainerOptions before(Integer before) {
+ this.queryParameters.put("before", before.toString());
+ return this;
+ }
+
+ public ListContainerOptions size(Integer size) {
+ this.queryParameters.put("size", size.toString());
+ return this;
+ }
+
+ public static class Builder {
+
+ /**
+ * @see ListContainerOptions#all
+ */
+ public static ListContainerOptions all(Boolean all) {
+ ListContainerOptions options = new ListContainerOptions();
+ return options.all(all);
+ }
+
+ /**
+ * @see ListContainerOptions#limit(Integer)
+ */
+ public static ListContainerOptions limit(Integer limit) {
+ ListContainerOptions options = new ListContainerOptions();
+ return options.limit(limit);
+ }
+
+ /**
+ * @see ListContainerOptions#since(Integer)
+ */
+ public static ListContainerOptions since(Integer since) {
+ ListContainerOptions options = new ListContainerOptions();
+ return options.since(since);
+ }
+
+ /**
+ * @see ListContainerOptions#before(Integer)
+ */
+ public static ListContainerOptions before(Integer before) {
+ ListContainerOptions options = new ListContainerOptions();
+ return options.before(before);
+ }
+
+ /**
+ * @see ListContainerOptions#limit(Integer)
+ */
+ public static ListContainerOptions size(Integer size) {
+ ListContainerOptions options = new ListContainerOptions();
+ return options.size(size);
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/9b124ee9/docker/src/main/java/org/jclouds/docker/options/ListImageOptions.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/options/ListImageOptions.java b/docker/src/main/java/org/jclouds/docker/options/ListImageOptions.java
new file mode 100644
index 0000000..fab75d4
--- /dev/null
+++ b/docker/src/main/java/org/jclouds/docker/options/ListImageOptions.java
@@ -0,0 +1,43 @@
+/*
+ * 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.options;
+
+import org.jclouds.http.options.BaseHttpRequestOptions;
+
+/**
+ * Options to customize image's listing.
+ */
+public class ListImageOptions extends BaseHttpRequestOptions {
+
+ public static final ListImageOptions NONE = new ListImageOptions();
+
+ public ListImageOptions all(Boolean all) {
+ this.queryParameters.put("all", all.toString());
+ return this;
+ }
+
+ public static class Builder {
+ /**
+ * @see ListImageOptions#all
+ */
+ public static ListImageOptions all(Boolean all) {
+ ListImageOptions options = new ListImageOptions();
+ return options.all(all);
+ }
+ }
+
+}