http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/HostConfig.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/HostConfig.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/HostConfig.java new file mode 100644 index 0000000..275961f --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Image.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Image.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Image.java new file mode 100644 index 0000000..186ece3 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/NetworkSettings.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/NetworkSettings.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/NetworkSettings.java new file mode 100644 index 0000000..23f3fbe --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Port.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Port.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Port.java new file mode 100644 index 0000000..b49dfa6 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/State.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/State.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/State.java new file mode 100644 index 0000000..ac1ba85 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Version.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Version.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/domain/Version.java new file mode 100644 index 0000000..445a225 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/RemoteApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/RemoteApi.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/RemoteApi.java new file mode 100644 index 0000000..96b0228 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/internal/Archives.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/internal/Archives.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/features/internal/Archives.java new file mode 100644 index 0000000..43b69c3 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java new file mode 100644 index 0000000..72d3069 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/handlers/DockerErrorHandler.java @@ -0,0 +1,102 @@ +/* + * 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 java.io.IOException; + +import javax.annotation.Resource; + +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 com.google.common.base.Throwables; +import com.google.common.io.Closeables; + +/** + * 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.toStringAndClose(response.getPayload().openStream()); + } catch (IOException e) { + throw Throwables.propagate(e); + } + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/BuildOptions.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/BuildOptions.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/BuildOptions.java new file mode 100644 index 0000000..4d7196c --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CommitOptions.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CommitOptions.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CommitOptions.java new file mode 100644 index 0000000..5653fba --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CreateImageOptions.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CreateImageOptions.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/CreateImageOptions.java new file mode 100644 index 0000000..51dc399 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/DeleteImageOptions.java new file mode 100644 index 0000000..9438616 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListContainerOptions.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListContainerOptions.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListContainerOptions.java new file mode 100644 index 0000000..af16664 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListImageOptions.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListImageOptions.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/ListImageOptions.java new file mode 100644 index 0000000..fab75d4 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/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); + } + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/RemoveContainerOptions.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/RemoveContainerOptions.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/RemoveContainerOptions.java new file mode 100644 index 0000000..5c3abba --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/java/org/jclouds/docker/options/RemoveContainerOptions.java @@ -0,0 +1,55 @@ +/* + * 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 removal. + */ +public class RemoveContainerOptions extends BaseHttpRequestOptions { + + public static final RemoveContainerOptions NONE = new RemoveContainerOptions(); + + public RemoveContainerOptions verbose(Boolean verbose) { + this.queryParameters.put("verbose", verbose.toString()); + return this; + } + + public RemoveContainerOptions force(Boolean force) { + this.queryParameters.put("force", force.toString()); + return this; + } + + public static class Builder { + /** + * @see RemoveContainerOptions#verbose + */ + public static RemoveContainerOptions verbose(Boolean verbose) { + RemoveContainerOptions options = new RemoveContainerOptions(); + return options.verbose(verbose); + } + + /** + * @see RemoveContainerOptions#force + */ + public static RemoveContainerOptions force(Boolean force) { + RemoveContainerOptions options = new RemoveContainerOptions(); + return options.force(force); + } + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata new file mode 100644 index 0000000..ca1a6cb --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/main/resources/META-INF/services/org.jclouds.apis.ApiMetadata @@ -0,0 +1 @@ +org.jclouds.docker.DockerApiMetadata \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/DockerApiMetadataTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/DockerApiMetadataTest.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/DockerApiMetadataTest.java new file mode 100644 index 0000000..41d00679 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/DockerApiMetadataTest.java @@ -0,0 +1,47 @@ +/* + * 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; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import org.jclouds.apis.ApiMetadata; +import org.jclouds.apis.Apis; +import org.jclouds.compute.internal.BaseComputeServiceApiMetadataTest; +import org.testng.annotations.Test; + +/** + * Unit tests for the {@link DockerApiMetadata} class. + */ +@Test(groups = "unit", testName = "AbiquoApiMetadataTest") +public class DockerApiMetadataTest extends BaseComputeServiceApiMetadataTest { + + public DockerApiMetadataTest() { + super(new DockerApiMetadata()); + } + + public void testDockerApiRegistered() { + ApiMetadata api = Apis.withId("docker"); + + assertNotNull(api); + assertTrue(api instanceof DockerApiMetadata); + assertEquals(api.getId(), "docker"); + } + +} + http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/binders/BindInputStreamToRequestTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/binders/BindInputStreamToRequestTest.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/binders/BindInputStreamToRequestTest.java new file mode 100644 index 0000000..a21999c --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/binders/BindInputStreamToRequestTest.java @@ -0,0 +1,66 @@ +/* + * 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.binders; + +import com.google.common.io.CharStreams; +import org.jclouds.http.HttpRequest; +import org.testng.annotations.Test; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +import static org.testng.Assert.assertEquals; +import static org.testng.AssertJUnit.assertTrue; + +@Test(groups = "unit", testName = "BindInputStreamToRequestTest") +public class BindInputStreamToRequestTest { + + @Test + public void testBindInputStreamToRequest() throws IOException { + BindInputStreamToRequest binder = new BindInputStreamToRequest(); + + HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://test").build(); + request = binder.bindToRequest(request, File.createTempFile("dockerfile", "")); + String rawContent = CharStreams.toString(new InputStreamReader((FileInputStream) request.getPayload().getRawContent(), "UTF-8")); + assertTrue(rawContent.startsWith("Dockerfile")); + assertEquals(request.getPayload().getContentMetadata().getContentType(), "application/tar"); + } + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testBindInputStreamToRequestWithObjectAsInput() throws IOException { + BindInputStreamToRequest binder = new BindInputStreamToRequest(); + + HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://test").build(); + request = binder.bindToRequest(request, new Object()); + String rawContent = CharStreams.toString(new InputStreamReader((FileInputStream) request.getPayload().getRawContent(), "UTF-8")); + assertTrue(rawContent.startsWith("Dockerfile")); + assertEquals(request.getPayload().getContentMetadata().getContentType(), "application/tar"); + } + + @Test(expectedExceptions = NullPointerException.class) + public void testBindInputStreamToRequestWithNullInput() throws IOException { + BindInputStreamToRequest binder = new BindInputStreamToRequest(); + + HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://test").build(); + request = binder.bindToRequest(request, null); + String rawContent = CharStreams.toString(new InputStreamReader((FileInputStream) request.getPayload().getRawContent(), "UTF-8")); + assertTrue(rawContent.startsWith("Dockerfile")); + assertEquals(request.getPayload().getContentMetadata().getContentType(), "application/tar"); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/397d9926/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java new file mode 100644 index 0000000..77115f2 --- /dev/null +++ b/dependencies/jclouds/apis/docker/1.8.0-stratos/src/test/java/org/jclouds/docker/compute/BaseDockerApiLiveTest.java @@ -0,0 +1,91 @@ +/* + * 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.compute; + +import com.google.common.base.Charsets; +import com.google.common.collect.ImmutableSet; +import com.google.common.io.CharStreams; +import com.google.common.io.Closeables; +import com.google.common.io.Files; +import com.google.common.io.Resources; +import com.google.inject.Module; +import org.jclouds.Constants; +import org.jclouds.apis.BaseApiLiveTest; +import org.jclouds.docker.DockerApi; +import org.jclouds.docker.features.internal.Archives; +import org.jclouds.io.Payload; +import org.jclouds.io.Payloads; +import org.jclouds.sshj.config.SshjSshClientModule; +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Properties; + +@Test(groups = "live") +public class BaseDockerApiLiveTest extends BaseApiLiveTest<DockerApi> { + + public BaseDockerApiLiveTest() { + provider = "docker"; + } + + @Override + protected Iterable<Module> setupModules() { + return ImmutableSet.<Module>of(getLoggingModule(), new SshjSshClientModule()); + } + + @Override + protected Properties setupProperties() { + Properties overrides = super.setupProperties(); + overrides.setProperty(Constants.PROPERTY_MAX_RETRIES, "15"); + overrides.setProperty("jclouds.ssh.retry-auth", "true"); + return overrides; + } + + protected String consumeStream(InputStream stream, boolean swallowIOException) { + String result = null; + try { + result = CharStreams.toString(new InputStreamReader(stream, Charsets.UTF_8)); + Closeables.close(stream, swallowIOException); + } catch (IOException e) { + Assert.fail(); + } + return result; + } + + protected Payload createPayload() throws IOException { + String folderPath = System.getProperty("user.dir") + "/docker/src/test/resources"; + File parentDir = new File(folderPath + "/archive"); + parentDir.mkdirs(); + URL url = Resources.getResource("Dockerfile"); + String content = Resources.toString(url, Charsets.UTF_8); + final File dockerfile = new File(parentDir.getAbsolutePath() + File.separator + "Dockerfile"); + Files.write(content.getBytes(), dockerfile); + File archive = Archives.tar(parentDir, folderPath + "/archive/archive.tar"); + FileInputStream data = new FileInputStream(archive); + Payload payload = Payloads.newInputStreamPayload(data); + payload.getContentMetadata().setContentLength(data.getChannel().size()); + payload.getContentMetadata().setContentType("application/tar"); + return payload; + } + +}
