diff --git a/src/main/java/com/github/dockerjava/client/DockerClient.java b/src/main/java/com/github/dockerjava/client/DockerClient.java index 939b7a7cf..7302dabc4 100644 --- a/src/main/java/com/github/dockerjava/client/DockerClient.java +++ b/src/main/java/com/github/dockerjava/client/DockerClient.java @@ -8,6 +8,7 @@ import java.io.StringWriter; import java.net.URI; +import com.github.dockerjava.client.command.*; import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; import org.apache.http.client.HttpClient; @@ -18,34 +19,6 @@ import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; -import com.github.dockerjava.client.command.AbstrDockerCmd; -import com.github.dockerjava.client.command.AttachContainerCmd; -import com.github.dockerjava.client.command.AuthCmd; -import com.github.dockerjava.client.command.BuildImgCmd; -import com.github.dockerjava.client.command.CommitCmd; -import com.github.dockerjava.client.command.ContainerDiffCmd; -import com.github.dockerjava.client.command.CopyFileFromContainerCmd; -import com.github.dockerjava.client.command.CreateContainerCmd; -import com.github.dockerjava.client.command.ImportImageCmd; -import com.github.dockerjava.client.command.InfoCmd; -import com.github.dockerjava.client.command.InspectContainerCmd; -import com.github.dockerjava.client.command.InspectImageCmd; -import com.github.dockerjava.client.command.KillContainerCmd; -import com.github.dockerjava.client.command.ListContainersCmd; -import com.github.dockerjava.client.command.ListImagesCmd; -import com.github.dockerjava.client.command.LogContainerCmd; -import com.github.dockerjava.client.command.PullImageCmd; -import com.github.dockerjava.client.command.PushImageCmd; -import com.github.dockerjava.client.command.RemoveContainerCmd; -import com.github.dockerjava.client.command.RemoveImageCmd; -import com.github.dockerjava.client.command.RestartContainerCmd; -import com.github.dockerjava.client.command.SearchImagesCmd; -import com.github.dockerjava.client.command.StartContainerCmd; -import com.github.dockerjava.client.command.StopContainerCmd; -import com.github.dockerjava.client.command.TagImageCmd; -import com.github.dockerjava.client.command.TopContainerCmd; -import com.github.dockerjava.client.command.VersionCmd; -import com.github.dockerjava.client.command.WaitContainerCmd; import com.github.dockerjava.client.model.AuthConfig; import com.github.dockerjava.client.model.CreateContainerConfig; import com.github.dockerjava.client.utils.JsonClientFilter; @@ -62,11 +35,11 @@ */ public class DockerClient { - private Client client; - private WebResource baseResource; + private final CommandFactory cmdFactory; + private final WebResource baseResource; private AuthConfig authConfig; - + public DockerClient() throws DockerException { this(Config.createConfig()); } @@ -74,7 +47,7 @@ public DockerClient() throws DockerException { public DockerClient(String serverUrl) throws DockerException { this(configWithServerUrl(serverUrl)); } - + private static Config configWithServerUrl(String serverUrl) throws DockerException { final Config c = Config.createConfig(); @@ -82,40 +55,47 @@ private static Config configWithServerUrl(String serverUrl) return c; } - public DockerClient(Config config) { - ClientConfig clientConfig = new DefaultClientConfig(); - - SchemeRegistry schemeRegistry = new SchemeRegistry(); - schemeRegistry.register(new Scheme("http", config.url.getPort(), - PlainSocketFactory.getSocketFactory())); - schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory - .getSocketFactory())); - - PoolingClientConnectionManager cm = new PoolingClientConnectionManager( - schemeRegistry); - // Increase max total connection - cm.setMaxTotal(1000); - // Increase default max connection per route - cm.setDefaultMaxPerRoute(1000); - - HttpClient httpClient = new DefaultHttpClient(cm); - client = new ApacheHttpClient4(new ApacheHttpClient4Handler(httpClient, + public DockerClient(Config config) { + this(config, null); + } + + public DockerClient(Config config, CommandFactory cmdFactory) { + this.cmdFactory = cmdFactory; + + HttpClient httpClient = getPoolingHttpClient(config); + ClientConfig clientConfig = new DefaultClientConfig(); + Client client = new ApacheHttpClient4(new ApacheHttpClient4Handler(httpClient, null, false), clientConfig); // 1 hour client.setReadTimeout(config.readTimeout); - + client.addFilter(new JsonClientFilter()); - + if (config.enableLoggingFilter) client.addFilter(new SelectiveLoggingFilter()); baseResource = client.resource(config.url + "/v" + config.version); } - + private HttpClient getPoolingHttpClient(Config config) { + SchemeRegistry schemeRegistry = new SchemeRegistry(); + schemeRegistry.register(new Scheme("http", config.url.getPort(), + PlainSocketFactory.getSocketFactory())); + schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory + .getSocketFactory())); + + PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry); + // Increase max total connection + cm.setMaxTotal(1000); + // Increase default max connection per route + cm.setDefaultMaxPerRoute(1000); - public void setCredentials(String username, String password, String email) { + return new DefaultHttpClient(cm); + } + + + public void setCredentials(String username, String password, String email) { if (username == null) { throw new IllegalArgumentException("username is null"); } @@ -168,15 +148,15 @@ private static AuthConfig authConfigFromProperties() throws DockerException { * Authenticate with the server, useful for checking authentication. */ public AuthCmd authCmd() { - return new AuthCmd(authConfig()).withBaseResource(baseResource); + return cmdFactory.authCmd(authConfig()).withBaseResource(baseResource); } public InfoCmd infoCmd() throws DockerException { - return new InfoCmd().withBaseResource(baseResource); + return cmdFactory.infoCmd().withBaseResource(baseResource); } public VersionCmd versionCmd() throws DockerException { - return new VersionCmd().withBaseResource(baseResource); + return cmdFactory.versionCmd().withBaseResource(baseResource); } /** @@ -184,11 +164,11 @@ public VersionCmd versionCmd() throws DockerException { */ public PullImageCmd pullImageCmd(String repository) { - return new PullImageCmd(repository).withBaseResource(baseResource); + return cmdFactory.pullImageCmd(repository).withBaseResource(baseResource); } public PushImageCmd pushImageCmd(String name) { - return new PushImageCmd(name).withAuthConfig(authConfig()) + return cmdFactory.pushImageCmd(name).withAuthConfig(authConfig()) .withBaseResource(baseResource); } @@ -198,24 +178,24 @@ public PushImageCmd pushImageCmd(String name) { public ImportImageCmd importImageCmd(String repository, InputStream imageStream) { - return new ImportImageCmd(repository, imageStream) + return cmdFactory.importImageCmd(repository, imageStream) .withBaseResource(baseResource); } public SearchImagesCmd searchImagesCmd(String term) { - return new SearchImagesCmd(term).withBaseResource(baseResource); + return cmdFactory.searchImagesCmd(term).withBaseResource(baseResource); } public RemoveImageCmd removeImageCmd(String imageId) { - return new RemoveImageCmd(imageId).withBaseResource(baseResource); + return cmdFactory.removeImageCmd(imageId).withBaseResource(baseResource); } public ListImagesCmd listImagesCmd() { - return new ListImagesCmd().withBaseResource(baseResource); + return cmdFactory.listImagesCmd().withBaseResource(baseResource); } public InspectImageCmd inspectImageCmd(String imageId) { - return new InspectImageCmd(imageId).withBaseResource(baseResource); + return cmdFactory.inspectImageCmd(imageId).withBaseResource(baseResource); } /** @@ -223,85 +203,84 @@ public InspectImageCmd inspectImageCmd(String imageId) { */ public ListContainersCmd listContainersCmd() { - return new ListContainersCmd().withBaseResource(baseResource); + return cmdFactory.listContainersCmd().withBaseResource(baseResource); } public CreateContainerCmd createContainerCmd(String image) { - return new CreateContainerCmd(new CreateContainerConfig()).withImage( - image).withBaseResource(baseResource); + return cmdFactory.createContainerCmd(image).withBaseResource(baseResource); } public StartContainerCmd startContainerCmd(String containerId) { - return new StartContainerCmd(containerId) + return cmdFactory.startContainerCmd(containerId) .withBaseResource(baseResource); } public InspectContainerCmd inspectContainerCmd(String containerId) { - return new InspectContainerCmd(containerId) + return cmdFactory.inspectContainerCmd(containerId) .withBaseResource(baseResource); } public RemoveContainerCmd removeContainerCmd(String containerId) { - return new RemoveContainerCmd(containerId) + return cmdFactory.removeContainerCmd(containerId) .withBaseResource(baseResource); } public WaitContainerCmd waitContainerCmd(String containerId) { - return new WaitContainerCmd(containerId).withBaseResource(baseResource); + return cmdFactory.waitContainerCmd(containerId).withBaseResource(baseResource); } public AttachContainerCmd attachContainerCmd(String containerId) { - return new AttachContainerCmd(containerId).withBaseResource(baseResource); + return cmdFactory.attachContainerCmd(containerId).withBaseResource(baseResource); } - - + + public LogContainerCmd logContainerCmd(String containerId) { - return new LogContainerCmd(containerId).withBaseResource(baseResource); + return cmdFactory.logContainerCmd(containerId).withBaseResource(baseResource); } public CopyFileFromContainerCmd copyFileFromContainerCmd( String containerId, String resource) { - return new CopyFileFromContainerCmd(containerId, resource) + return cmdFactory.copyFileFromContainerCmd(containerId, resource) .withBaseResource(baseResource); } public ContainerDiffCmd containerDiffCmd(String containerId) { - return new ContainerDiffCmd(containerId).withBaseResource(baseResource); + return cmdFactory.containerDiffCmd(containerId).withBaseResource(baseResource); } public StopContainerCmd stopContainerCmd(String containerId) { - return new StopContainerCmd(containerId).withBaseResource(baseResource); + return cmdFactory.stopContainerCmd(containerId).withBaseResource(baseResource); } public KillContainerCmd killContainerCmd(String containerId) { - return new KillContainerCmd(containerId).withBaseResource(baseResource); + return cmdFactory.killContainerCmd(containerId).withBaseResource(baseResource); } public RestartContainerCmd restartContainerCmd(String containerId) { - return new RestartContainerCmd(containerId) + return cmdFactory.restartContainerCmd(containerId) .withBaseResource(baseResource); } public CommitCmd commitCmd(String containerId) { - return new CommitCmd(containerId).withBaseResource(baseResource); + return cmdFactory.commitCmd(containerId).withBaseResource(baseResource); } public BuildImgCmd buildImageCmd(File dockerFolder) { - return new BuildImgCmd(dockerFolder).withBaseResource(baseResource); + return cmdFactory.buildImgCmd(dockerFolder).withBaseResource(baseResource); } public BuildImgCmd buildImageCmd(InputStream tarInputStream) { - return new BuildImgCmd(tarInputStream).withBaseResource(baseResource); + return cmdFactory.buildImgCmd(tarInputStream).withBaseResource(baseResource); } public TopContainerCmd topContainerCmd(String containerId) { - return new TopContainerCmd(containerId).withBaseResource(baseResource); + return cmdFactory.topContainerCmd(containerId).withBaseResource(baseResource); } - + public TagImageCmd tagImageCmd(String imageId, String repository, String tag) { - return new TagImageCmd(imageId, repository, tag).withBaseResource(baseResource); + return cmdFactory.tagImageCmd(imageId, repository, tag).withBaseResource(baseResource); } - + /** * @return The output slurped into a string. diff --git a/src/main/java/com/github/dockerjava/client/command/AttachContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/AttachContainerCmd.java index 63dca1ed1..1b3acb979 100644 --- a/src/main/java/com/github/dockerjava/client/command/AttachContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/AttachContainerCmd.java @@ -16,9 +16,9 @@ /** * Attach to container - * + * * @param logs - true or false, includes logs. Defaults to false. - * + * * @param followStream * - true or false, return stream. Defaults to false. * @param stdout @@ -42,7 +42,31 @@ public AttachContainerCmd(String containerId) { withContainerId(containerId); } - public AttachContainerCmd withContainerId(String containerId) { + public String getContainerId() { + return containerId; + } + + public boolean hasLogsEnabled() { + return logs; + } + + public boolean hasFollowStreamEnabled() { + return followStream; + } + + public boolean hasTimestampsEnabled() { + return timestamps; + } + + public boolean hasStdoutEnabled() { + return stdout; + } + + public boolean hasStderrEnabled() { + return stderr; + } + + public AttachContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; @@ -91,7 +115,7 @@ protected ClientResponse impl() throws DockerException { params.add("timestamps", timestamps ? "1" : "0"); params.add("stdout", stdout ? "1" : "0"); params.add("stderr", stderr ? "1" : "0"); - params.add("follow", followStream ? "1" : "0"); + params.add("follow", followStream ? "1" : "0"); WebResource webResource = baseResource.path( String.format("/containers/%s/attach", containerId)) diff --git a/src/main/java/com/github/dockerjava/client/command/BuildImgCmd.java b/src/main/java/com/github/dockerjava/client/command/BuildImgCmd.java index 1aadd7dbb..34de8a8b7 100644 --- a/src/main/java/com/github/dockerjava/client/command/BuildImgCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/BuildImgCmd.java @@ -29,63 +29,83 @@ import com.sun.jersey.core.util.MultivaluedMapImpl; /** - * + * * Build an image from Dockerfile. - * + * * TODO: http://docs.docker.com/reference/builder/#dockerignore * */ public class BuildImgCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(BuildImgCmd.class); - + private static final Pattern ADD_OR_COPY_PATTERN = Pattern.compile("^(ADD|COPY)\\s+(.*)\\s+(.*)$"); - + private static final Pattern ENV_PATTERN = Pattern.compile("^ENV\\s+(.*)\\s+(.*)$"); - + private File dockerFolder = null; private InputStream tarInputStream = null; private String tag; private boolean noCache; private boolean remove = true; private boolean quiet; - - + + public BuildImgCmd(File dockerFolder) { Preconditions.checkNotNull(dockerFolder, "dockerFolder is null"); this.dockerFolder = dockerFolder; } - + public BuildImgCmd(InputStream tarInputStream) { Preconditions.checkNotNull(tarInputStream, "tarInputStream is null"); this.tarInputStream = tarInputStream; } - + public BuildImgCmd withTag(String tag) { Preconditions.checkNotNull(tag, "Tag is null"); this.tag = tag; return this; } - - public BuildImgCmd withNoCache() { + + public File getDockerFolder() { + return dockerFolder; + } + + public String getTag() { + return tag; + } + + public boolean hasNoCacheEnabled() { + return noCache; + } + + public boolean hasRemoveEnabled() { + return remove; + } + + public boolean isQuiet() { + return quiet; + } + + public BuildImgCmd withNoCache() { return withNoCache(true); } - + public BuildImgCmd withNoCache(boolean noCache) { this.noCache = noCache; return this; } - + public BuildImgCmd withRemove(boolean rm) { this.remove = rm; return this; } - + public BuildImgCmd withQuiet(boolean quiet) { this.quiet = quiet; return this; } - + @Override public String toString() { return new StringBuilder("build ") @@ -96,7 +116,7 @@ public String toString() { .append(dockerFolder != null ? dockerFolder.getPath() : "-") .toString(); } - + protected ClientResponse impl() { if (tarInputStream == null) { File dockerFolderTar = buildDockerFolderTar(); @@ -119,10 +139,10 @@ protected ClientResponse callDocker(final InputStream dockerFolderTarInputStream params.add("nocache", "true"); } if (remove) { - params.add("rm", "true"); + params.add("rm", "true"); } if (quiet) { - params.add("q", "true"); + params.add("q", "true"); } WebResource webResource = baseResource.path("/build").queryParams(params); @@ -141,12 +161,12 @@ protected ClientResponse callDocker(final InputStream dockerFolderTarInputStream } } } - + protected File buildDockerFolderTar() { Preconditions.checkArgument(dockerFolder.exists(), "Path %s doesn't exist", dockerFolder); Preconditions.checkArgument(dockerFolder.isDirectory(), "Folder %s doesn't exist", dockerFolder); Preconditions.checkState(new File(dockerFolder, "Dockerfile").exists(), "Dockerfile doesn't exist in " + dockerFolder); - + // ARCHIVE TAR String archiveNameWithOutExtension = UUID.randomUUID().toString(); @@ -164,30 +184,30 @@ protected File buildDockerFolderTar() { filesToAdd.add(dockerFile); MapenvironmentMap = new HashMap(); - + int lineNumber = 0; - + for (String cmd : dockerFileContent) { - + lineNumber++; - + if (cmd.trim().isEmpty() || cmd.startsWith("#")) continue; // skip emtpy and commend lines - + final Matcher envMatcher = ENV_PATTERN.matcher(cmd.trim()); - + if (envMatcher.find()) { if (envMatcher.groupCount() != 2) throw new DockerException(String.format("Wrong ENV format on line [%d]", lineNumber)); - + String variable = envMatcher.group(1).trim(); - + String value = envMatcher.group(2).trim(); - + environmentMap.put(variable, value); } - - + + final Matcher matcher = ADD_OR_COPY_PATTERN.matcher(cmd.trim()); if (matcher.find()) { if (matcher.groupCount() != 3) { @@ -195,9 +215,9 @@ protected File buildDockerFolderTar() { } String extractedResource = matcher.group(2); - + String resource = filterForEnvironmentVars(extractedResource, environmentMap).trim(); - + if(isFileResource(resource)) { File src = new File(resource); if (!src.isAbsolute()) { @@ -214,7 +234,7 @@ protected File buildDockerFolderTar() { } else { filesToAdd.add(src); } - } + } } } @@ -225,31 +245,31 @@ protected File buildDockerFolderTar() { throw new DockerException("Error occurred while preparing Docker context folder.", ex); } } - + private String filterForEnvironmentVars(String extractedResource, Map environmentMap) { - + if (environmentMap.size() > 0) { - + String currentResourceContent = extractedResource; - + for (Map.Entry entry : environmentMap.entrySet()) { - + String variable = entry.getKey(); - + String replacementValue = entry.getValue(); - + // handle: $VARIABLE case currentResourceContent = currentResourceContent.replaceAll("\\$" + variable, replacementValue); - + // handle ${VARIABLE} case currentResourceContent = currentResourceContent.replaceAll("\\$\\{" + variable + "\\}", replacementValue); - + } - + return currentResourceContent; } - else + else return extractedResource; } diff --git a/src/main/java/com/github/dockerjava/client/command/CommandFactory.java b/src/main/java/com/github/dockerjava/client/command/CommandFactory.java new file mode 100644 index 000000000..74585a396 --- /dev/null +++ b/src/main/java/com/github/dockerjava/client/command/CommandFactory.java @@ -0,0 +1,39 @@ +package com.github.dockerjava.client.command; + +import com.github.dockerjava.client.model.AuthConfig; + +import java.io.File; +import java.io.InputStream; + +public interface CommandFactory { + public AttachContainerCmd attachContainerCmd(String containerId); + public AuthCmd authCmd(AuthConfig authConfig); + public BuildImgCmd buildImgCmd(File dockerFolder); + public BuildImgCmd buildImgCmd(InputStream tarInputStream); + public CommitCmd commitCmd(String containerId); + public ContainerDiffCmd containerDiffCmd(String containerId); + public CopyFileFromContainerCmd copyFileFromContainerCmd(String containerId, String resource); + public CreateContainerCmd createContainerCmd(String image); + public ImportImageCmd importImageCmd(String repository, InputStream imageStream); + public InfoCmd infoCmd(); + public InspectContainerCmd inspectContainerCmd(String containerId); + public InspectImageCmd inspectImageCmd(String imageId); + public KillContainerCmd killContainerCmd(String containerId); + public ListContainersCmd listContainersCmd(); + public ListImagesCmd listImagesCmd(); + public LogContainerCmd logContainerCmd(String containerId); + public PauseContainerCmd pauseContainerCmd(String containerId); + public PullImageCmd pullImageCmd(String repository); + public PushImageCmd pushImageCmd(String imageName); + public RemoveContainerCmd removeContainerCmd(String containerId); + public RemoveImageCmd removeImageCmd(String imageId); + public RestartContainerCmd restartContainerCmd(String containerId); + public SearchImagesCmd searchImagesCmd(String searchTerm); + public StartContainerCmd startContainerCmd(String containerId); + public StopContainerCmd stopContainerCmd(String containerId); + public TagImageCmd tagImageCmd(String imageId, String repository, String tag); + public TopContainerCmd topContainerCmd(String containerId); + public UnpauseContainerCmd unpauseContainerCmd(String containerId); + public VersionCmd versionCmd(); + public WaitContainerCmd waitContainerCmd(String containerId); +} diff --git a/src/main/java/com/github/dockerjava/client/command/CommitCmd.java b/src/main/java/com/github/dockerjava/client/command/CommitCmd.java index a6f72014f..df1a450a6 100644 --- a/src/main/java/com/github/dockerjava/client/command/CommitCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/CommitCmd.java @@ -16,45 +16,69 @@ /** - * + * * Create a new image from a container's changes. Returns the new image ID. * */ public class CommitCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(CommitCmd.class); - + private String containerId, repository, tag, message, author; - + private boolean pause = true; - + private CommitConfig commitConfig = new CommitConfig(); - + public CommitCmd(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; } - - public CommitCmd withCommitConfig(CommitConfig commitConfig) { + + public String getContainerId() { + return containerId; + } + + public String getRepository() { + return repository; + } + + public String getTag() { + return tag; + } + + public String getMessage() { + return message; + } + + public String getAuthor() { + return author; + } + + public boolean hasPauseEnabled() { + return pause; + } + + public CommitCmd withCommitConfig(CommitConfig commitConfig) { checkCommitConfig(commitConfig); this.commitConfig = commitConfig; return this; } - + public CommitCmd withAttachStderr(boolean attachStderr) { this.commitConfig.setAttachStderr(attachStderr); return this; } - + public CommitCmd withAttachStderr() { return withAttachStderr(true); } - + public CommitCmd withAttachStdin(boolean attachStdin) { this.commitConfig.setAttachStdin(attachStdin); return this; } - + public CommitCmd withAttachStdin() { return withAttachStdin(true); } @@ -63,51 +87,51 @@ public CommitCmd withAttachStdout(boolean attachStdout) { this.commitConfig.setAttachStdout(attachStdout); return this; } - + public CommitCmd withAttachStdout() { return withAttachStdout(true); } - + public CommitCmd withCmd(String... cmd) { Preconditions.checkNotNull(cmd, "cmd was not specified"); this.commitConfig.setCmd(cmd); return this; } - + public CommitCmd withDisableNetwork(boolean disableNetwork) { this.commitConfig.setDisableNetwork(disableNetwork); return this; } - + public CommitCmd withAuthor(String author) { Preconditions.checkNotNull(author, "author was not specified"); this.author = author; return this; } - + public CommitCmd withMessage(String message) { Preconditions.checkNotNull(message, "message was not specified"); this.message = message; return this; } - + public CommitCmd withTag(String tag) { Preconditions.checkNotNull(tag, "tag was not specified"); this.tag = tag; return this; } - + public CommitCmd withRepository(String repository) { Preconditions.checkNotNull(repository, "repository was not specified"); this.repository = repository; return this; } - + public CommitCmd withPause(boolean pause) { this.pause = pause; return this; } - + @Override public String toString() { return new StringBuilder("commit ") @@ -118,14 +142,14 @@ public String toString() { .append(tag != null ? tag : "") .toString(); } - + private void checkCommitConfig(CommitConfig commitConfig) { Preconditions.checkNotNull(commitConfig, "CommitConfig was not specified"); } - + protected String impl() throws DockerException { checkCommitConfig(commitConfig); - + MultivaluedMap params = new MultivaluedMapImpl(); params.add("container", containerId); params.add("repo", repository); diff --git a/src/main/java/com/github/dockerjava/client/command/ContainerDiffCmd.java b/src/main/java/com/github/dockerjava/client/command/ContainerDiffCmd.java index ed684d04f..8c16e6008 100644 --- a/src/main/java/com/github/dockerjava/client/command/ContainerDiffCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/ContainerDiffCmd.java @@ -17,26 +17,30 @@ /** * Inspect changes on a container's filesystem - * + * * @param containerId - Id of the container - * + * */ public class ContainerDiffCmd extends AbstrDockerCmd> { private static final Logger LOGGER = LoggerFactory.getLogger(ContainerDiffCmd.class); private String containerId; - + public ContainerDiffCmd(String containerId) { withContainerId(containerId); } - - public ContainerDiffCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public ContainerDiffCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + @Override public String toString() { return new StringBuilder("diff ") diff --git a/src/main/java/com/github/dockerjava/client/command/CopyFileFromContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/CopyFileFromContainerCmd.java index 3e374aa57..dd9742788 100644 --- a/src/main/java/com/github/dockerjava/client/command/CopyFileFromContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/CopyFileFromContainerCmd.java @@ -13,33 +13,41 @@ import com.sun.jersey.api.client.WebResource; /** - * + * * Copy files or folders from a container. - * + * */ public class CopyFileFromContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(CopyFileFromContainerCmd.class); private String containerId, resource; - + public CopyFileFromContainerCmd(String containerId, String resource) { withContainerId(containerId); withResource(resource); } - - public CopyFileFromContainerCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public String getResource() { + return resource; + } + + public CopyFileFromContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + public CopyFileFromContainerCmd withResource(String resource) { Preconditions.checkNotNull(resource, "resource was not specified"); this.resource = resource; return this; } - + @Override public String toString() { return new StringBuilder("cp ") diff --git a/src/main/java/com/github/dockerjava/client/command/CreateContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/CreateContainerCmd.java index 267bf52ca..bf671172f 100644 --- a/src/main/java/com/github/dockerjava/client/command/CreateContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/CreateContainerCmd.java @@ -19,46 +19,50 @@ /** - * + * * Creates a new container. * */ public class CreateContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(CreateContainerCmd.class); - + private CreateContainerConfig containerCreateConfig; private String name; - + public CreateContainerCmd(String image) { this(new CreateContainerConfig()); Preconditions.checkNotNull(image, "image was not specified"); this.containerCreateConfig.withImage(image); } - + public CreateContainerCmd(CreateContainerConfig config) { Preconditions.checkNotNull(config, "config was not specified"); this.containerCreateConfig = config; } - - public CreateContainerCmd withImage(String image) { + + public String getName() { + return name; + } + + public CreateContainerCmd withImage(String image) { Preconditions.checkNotNull(image, "image was not specified"); this.containerCreateConfig.withImage(image); return this; } - + public CreateContainerCmd withCmd(String... cmd) { Preconditions.checkNotNull(cmd, "cmd was not specified"); this.containerCreateConfig.withCmd(cmd); return this; } - + public CreateContainerCmd withVolumes(Volume... volumes) { Preconditions.checkNotNull(volumes, "volumes was not specified"); this.containerCreateConfig.withVolumes(volumes); return this; } - + public CreateContainerCmd withEnv(String... env) { Preconditions.checkNotNull(env, "env was not specified"); this.containerCreateConfig.withEnv(env); @@ -69,21 +73,21 @@ public CreateContainerCmd withHostName(String hostName) { Preconditions.checkNotNull(hostName, "hostName was not specified"); this.containerCreateConfig.withHostName(hostName); return this; - } - + } + public CreateContainerCmd withName(String name) { Preconditions.checkNotNull(name, "name was not specified"); this.name = name; return this; } - + public CreateContainerCmd withExposedPorts(ExposedPort... exposedPorts) { Preconditions.checkNotNull(exposedPorts, "exposedPorts was not specified"); - + this.containerCreateConfig.withExposedPorts(exposedPorts); return this; } - + @Override public String toString() { return new StringBuilder("create container ") diff --git a/src/main/java/com/github/dockerjava/client/command/DefaultCommandFactory.java b/src/main/java/com/github/dockerjava/client/command/DefaultCommandFactory.java new file mode 100644 index 000000000..29f99485d --- /dev/null +++ b/src/main/java/com/github/dockerjava/client/command/DefaultCommandFactory.java @@ -0,0 +1,158 @@ +package com.github.dockerjava.client.command; + +import com.github.dockerjava.client.model.AuthConfig; + +import java.io.File; +import java.io.InputStream; + +public class DefaultCommandFactory implements CommandFactory { + @Override + public AttachContainerCmd attachContainerCmd(String containerId) { + return new AttachContainerCmd(containerId); + } + + @Override + public AuthCmd authCmd(AuthConfig authConfig) { + return new AuthCmd(authConfig); + } + + @Override + public BuildImgCmd buildImgCmd(File dockerFolder) { + return new BuildImgCmd(dockerFolder); + } + + @Override + public BuildImgCmd buildImgCmd(InputStream tarInputStream) { + return new BuildImgCmd(tarInputStream); + } + + @Override + public CommitCmd commitCmd(String containerId) { + return new CommitCmd(containerId); + } + + @Override + public ContainerDiffCmd containerDiffCmd(String containerId) { + return new ContainerDiffCmd(containerId); + } + + @Override + public CopyFileFromContainerCmd copyFileFromContainerCmd(String containerId, String resource) { + return new CopyFileFromContainerCmd(containerId, resource); + } + + @Override + public CreateContainerCmd createContainerCmd(String image) { + return new CreateContainerCmd(image); + } + + @Override + public ImportImageCmd importImageCmd(String repository, InputStream imageStream) { + return new ImportImageCmd(repository, imageStream); + } + + @Override + public InfoCmd infoCmd() { + return new InfoCmd(); + } + + @Override + public InspectContainerCmd inspectContainerCmd(String containerId) { + return new InspectContainerCmd(containerId); + } + + @Override + public InspectImageCmd inspectImageCmd(String imageId) { + return new InspectImageCmd(imageId); + } + + @Override + public KillContainerCmd killContainerCmd(String containerId) { + return new KillContainerCmd(containerId); + } + + @Override + public ListContainersCmd listContainersCmd() { + return new ListContainersCmd(); + } + + @Override + public ListImagesCmd listImagesCmd() { + return new ListImagesCmd(); + } + + @Override + public LogContainerCmd logContainerCmd(String containerId) { + return new LogContainerCmd(containerId); + } + + @Override + public PauseContainerCmd pauseContainerCmd(String containerId) { + return new PauseContainerCmd(containerId); + } + + @Override + public PullImageCmd pullImageCmd(String repository) { + return new PullImageCmd(repository); + } + + @Override + public PushImageCmd pushImageCmd(String imageName) { + return new PushImageCmd(imageName); + } + + @Override + public RemoveContainerCmd removeContainerCmd(String containerId) { + return new RemoveContainerCmd(containerId); + } + + @Override + public RemoveImageCmd removeImageCmd(String imageId) { + return new RemoveImageCmd(imageId); + } + + @Override + public RestartContainerCmd restartContainerCmd(String containerId) { + return new RestartContainerCmd(containerId); + } + + @Override + public SearchImagesCmd searchImagesCmd(String searchTerm) { + return new SearchImagesCmd(searchTerm); + } + + @Override + public StartContainerCmd startContainerCmd(String containerId) { + return new StartContainerCmd(containerId); + } + + @Override + public StopContainerCmd stopContainerCmd(String containerId) { + return new StopContainerCmd(containerId); + } + + @Override + public TagImageCmd tagImageCmd(String imageId, String repository, String tag) { + return new TagImageCmd(imageId, repository, tag); + } + + @Override + public TopContainerCmd topContainerCmd(String containerId) { + return new TopContainerCmd(containerId); + } + + @Override + public UnpauseContainerCmd unpauseContainerCmd(String containerId) { + return new UnpauseContainerCmd(containerId); + } + + @Override + public VersionCmd versionCmd() { + return new VersionCmd(); + } + + @Override + public WaitContainerCmd waitContainerCmd(String containerId) { + return new WaitContainerCmd(containerId); + } +} diff --git a/src/main/java/com/github/dockerjava/client/command/ImportImageCmd.java b/src/main/java/com/github/dockerjava/client/command/ImportImageCmd.java index 020d5e750..9d02d5926 100644 --- a/src/main/java/com/github/dockerjava/client/command/ImportImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/ImportImageCmd.java @@ -34,7 +34,15 @@ public ImportImageCmd(String repository, InputStream imageStream) { withImageStream(imageStream); } - /** + public String getRepository() { + return repository; + } + + public String getTag() { + return tag; + } + + /** * @param repository the repository to import to */ public ImportImageCmd withRepository(String repository) { diff --git a/src/main/java/com/github/dockerjava/client/command/InspectContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/InspectContainerCmd.java index ff031537e..a5e40dfe9 100644 --- a/src/main/java/com/github/dockerjava/client/command/InspectContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/InspectContainerCmd.java @@ -20,17 +20,21 @@ public class InspectContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(InspectImageCmd.class); - + private String imageId; - + public InspectImageCmd(String imageId) { withImageId(imageId); } - - public InspectImageCmd withImageId(String imageId) { + + public String getImageId() { + return imageId; + } + + public InspectImageCmd withImageId(String imageId) { Preconditions.checkNotNull(imageId, "imageId was not specified"); this.imageId = imageId; return this; } - + @Override public String toString() { return "inspect " + imageId; diff --git a/src/main/java/com/github/dockerjava/client/command/KillContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/KillContainerCmd.java index 1c6502624..9f9cc6a59 100644 --- a/src/main/java/com/github/dockerjava/client/command/KillContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/KillContainerCmd.java @@ -18,23 +18,31 @@ public class KillContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(KillContainerCmd.class); private String containerId, signal; - + public KillContainerCmd(String containerId) { withContainerId(containerId); } - - public KillContainerCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public String getSignal() { + return signal; + } + + public KillContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + public KillContainerCmd withSignal(String signal) { Preconditions.checkNotNull(signal, "signal was not specified"); this.signal = signal; return this; } - + @Override public String toString() { return "kill " + containerId; @@ -42,7 +50,7 @@ public String toString() { protected Void impl() throws DockerException { WebResource webResource = baseResource.path(String.format("/containers/%s/kill", containerId)); - + if(signal != null) { webResource = webResource.queryParam("signal", signal); } @@ -62,7 +70,7 @@ protected Void impl() throws DockerException { throw new DockerException(exception); } } - + return null; } } diff --git a/src/main/java/com/github/dockerjava/client/command/ListContainersCmd.java b/src/main/java/com/github/dockerjava/client/command/ListContainersCmd.java index 774061556..226e16805 100644 --- a/src/main/java/com/github/dockerjava/client/command/ListContainersCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/ListContainersCmd.java @@ -17,7 +17,7 @@ /** * List containers - * + * * @param showAll - true or false, Show all containers. Only running containers are shown by default. * @param showSize - true or false, Show the containers sizes. This is false by default. * @param limit - Show `limit` last created containers, include non-running ones. There is no limit by default. @@ -28,39 +28,59 @@ public class ListContainersCmd extends AbstrDockerCmd> { private static final Logger LOGGER = LoggerFactory.getLogger(ListContainersCmd.class); - + private int limit = -1; private boolean showSize, showAll = false; String sinceId, beforeId; - - public ListContainersCmd withShowAll(boolean showAll) { + + public int getLimit() { + return limit; + } + + public boolean hasShowSizeEnabled() { + return showSize; + } + + public boolean hasShowAllEnabled() { + return showAll; + } + + public String getSinceId() { + return sinceId; + } + + public String getBeforeId() { + return beforeId; + } + + public ListContainersCmd withShowAll(boolean showAll) { this.showAll = showAll; return this; } - + public ListContainersCmd withShowSize(boolean showSize) { this.showSize = showSize; return this; } - + public ListContainersCmd withLimit(int limit) { Preconditions.checkArgument(limit > 0, "limit must be greater 0"); this.limit = limit; return this; } - + public ListContainersCmd withSince(String since) { Preconditions.checkNotNull(since, "since was not specified"); this.sinceId = since; return this; } - + public ListContainersCmd withBefore(String before) { Preconditions.checkNotNull(before, "before was not specified"); this.beforeId = before; return this; } - + @Override public String toString() { return new StringBuilder("ps ") @@ -76,7 +96,7 @@ protected List impl() { MultivaluedMap params = new MultivaluedMapImpl(); if(limit >= 0) { params.add("limit", String.valueOf(limit)); - } + } params.add("all", showAll ? "1" : "0"); params.add("since", sinceId); params.add("before", beforeId); diff --git a/src/main/java/com/github/dockerjava/client/command/ListImagesCmd.java b/src/main/java/com/github/dockerjava/client/command/ListImagesCmd.java index e4611f511..27af8ed9a 100644 --- a/src/main/java/com/github/dockerjava/client/command/ListImagesCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/ListImagesCmd.java @@ -19,28 +19,36 @@ /** * List images - * + * * @param showAll - Show all images (by default filter out the intermediate images used to build) * @param filter - TODO: undocumented in docker remote api reference */ public class ListImagesCmd extends AbstrDockerCmd> { private static final Logger LOGGER = LoggerFactory.getLogger(ListImagesCmd.class); - + private String filter; private boolean showAll = false; - - public ListImagesCmd withShowAll(boolean showAll) { + + public String getFilter() { + return filter; + } + + public boolean hasShowAllEnabled() { + return showAll; + } + + public ListImagesCmd withShowAll(boolean showAll) { this.showAll = showAll; return this; } - + public ListImagesCmd withFilter(String filter) { Preconditions.checkNotNull(filter, "filter was not specified"); this.filter = filter; return this; } - + @Override public String toString() { return new StringBuilder("images ") diff --git a/src/main/java/com/github/dockerjava/client/command/LogContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/LogContainerCmd.java index d18ec9ac8..f1feb73a8 100644 --- a/src/main/java/com/github/dockerjava/client/command/LogContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/LogContainerCmd.java @@ -16,7 +16,7 @@ /** * Get container logs - * + * * @param followStream * - true or false, return stream. Defaults to false. * @param stdout @@ -35,7 +35,7 @@ public class LogContainerCmd extends AbstrDockerCmd params = new MultivaluedMapImpl(); params.add("timestamps", timestamps ? "1" : "0"); params.add("stdout", stdout ? "1" : "0"); params.add("stderr", stderr ? "1" : "0"); - params.add("follow", followStream ? "1" : "0"); - params.add("tail", tail < 0 ? "all" : ""+ tail); + params.add("follow", followStream ? "1" : "0"); + params.add("tail", tail < 0 ? "all" : ""+ tail); WebResource webResource = baseResource.path( String.format("/containers/%s/logs", containerId)) diff --git a/src/main/java/com/github/dockerjava/client/command/PauseContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/PauseContainerCmd.java index 18ce0b7ae..a45083697 100644 --- a/src/main/java/com/github/dockerjava/client/command/PauseContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/PauseContainerCmd.java @@ -13,38 +13,42 @@ /** * Pause a container. - * + * * @param containerId - Id of the container - * + * */ public class PauseContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(PauseContainerCmd.class); private String containerId; - + public PauseContainerCmd(String containerId) { withContainerId(containerId); } - - public PauseContainerCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public PauseContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + @Override public String toString() { return new StringBuilder("pause ") .append(containerId) .toString(); - } + } protected Integer impl() throws DockerException { WebResource webResource = baseResource.path(String.format("/containers/%s/pause", containerId)); ClientResponse response = null; - + try { LOGGER.trace("POST: {}", webResource); response = webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(ClientResponse.class); @@ -60,7 +64,7 @@ protected Integer impl() throws DockerException { throw new DockerException(exception); } } - + return response.getStatus(); } } diff --git a/src/main/java/com/github/dockerjava/client/command/PullImageCmd.java b/src/main/java/com/github/dockerjava/client/command/PullImageCmd.java index 16e0ee710..83832c474 100644 --- a/src/main/java/com/github/dockerjava/client/command/PullImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/PullImageCmd.java @@ -16,45 +16,57 @@ /** - * + * * Pull image from repository. * */ public class PullImageCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(PullImageCmd.class); - + private String repository, tag, registry; - + public PullImageCmd(String repository) { withRepository(repository); } - - public PullImageCmd withRepository(String repository) { + + public String getRepository() { + return repository; + } + + public String getTag() { + return tag; + } + + public String getRegistry() { + return registry; + } + + public PullImageCmd withRepository(String repository) { Preconditions.checkNotNull(repository, "repository was not specified"); this.repository = repository; return this; } - + public PullImageCmd withTag(String tag) { Preconditions.checkNotNull(tag, "tag was not specified"); this.tag = tag; return this; } - + public PullImageCmd withRegistry(String registry) { Preconditions.checkNotNull(registry, "registry was not specified"); this.registry = registry; return this; } - + @Override public String toString() { return new StringBuilder("pull ") .append(repository) .append(tag != null ? ":" + tag : "") .toString(); - } + } protected ClientResponse impl() { Preconditions.checkNotNull(repository, "Repository was not specified"); diff --git a/src/main/java/com/github/dockerjava/client/command/PushImageCmd.java b/src/main/java/com/github/dockerjava/client/command/PushImageCmd.java index 6d54a7562..41cdc077a 100644 --- a/src/main/java/com/github/dockerjava/client/command/PushImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/PushImageCmd.java @@ -20,14 +20,18 @@ public class PushImageCmd extends AbstrAuthCfgDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(PushImageCmd.class); - + private String name; - + public PushImageCmd(String name) { withName(name); } - - /** + + public String getName() { + return name; + } + + /** * @param name The name, e.g. "alexec/busybox" or just "busybox" if you want to default. Not null. */ public PushImageCmd withName(String name) { @@ -35,13 +39,13 @@ public PushImageCmd withName(String name) { this.name = name; return this; } - + @Override public String toString() { return new StringBuilder("push ") .append(name) .toString(); - } + } protected ClientResponse impl() { WebResource webResource = baseResource.path("/images/" + name(name) + "/push"); @@ -56,7 +60,7 @@ protected ClientResponse impl() { throw new DockerException(e); } } - + private String name(String name) { return name.contains("/") ? name : authConfig.getUsername(); } diff --git a/src/main/java/com/github/dockerjava/client/command/RemoveContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/RemoveContainerCmd.java index e13cd9701..3a12cd8e7 100644 --- a/src/main/java/com/github/dockerjava/client/command/RemoveContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/RemoveContainerCmd.java @@ -13,7 +13,7 @@ /** * Remove a container. - * + * * @param removeVolumes - true or false, Remove the volumes associated to the container. Defaults to false * @param force - true or false, Removes the container even if it was running. Defaults to false */ @@ -22,33 +22,45 @@ public class RemoveContainerCmd extends AbstrDockerCmd private static final Logger LOGGER = LoggerFactory.getLogger(RemoveContainerCmd.class); private String containerId; - + private boolean removeVolumes, force; - + public RemoveContainerCmd(String containerId) { withContainerId(containerId); } - - public RemoveContainerCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public boolean hasRemoveVolumesEnabled() { + return removeVolumes; + } + + public boolean hasForceEnabled() { + return force; + } + + public RemoveContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + public RemoveContainerCmd withRemoveVolumes(boolean removeVolumes) { this.removeVolumes = removeVolumes; return this; } - + public RemoveContainerCmd withForce() { return withForce(true); } - + public RemoveContainerCmd withForce(boolean force) { this.force = force; return this; } - + @Override public String toString() { return new StringBuilder("rm ") @@ -56,7 +68,7 @@ public String toString() { .append(force ? "--force=true" : "") .append(containerId) .toString(); - } + } protected Void impl() throws DockerException { Preconditions.checkState(!StringUtils.isEmpty(containerId), "Container ID can't be empty"); @@ -82,7 +94,7 @@ protected Void impl() throws DockerException { throw new DockerException(exception); } } - + return null; } } diff --git a/src/main/java/com/github/dockerjava/client/command/RemoveImageCmd.java b/src/main/java/com/github/dockerjava/client/command/RemoveImageCmd.java index 5bc2765c3..49707d51e 100644 --- a/src/main/java/com/github/dockerjava/client/command/RemoveImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/RemoveImageCmd.java @@ -11,42 +11,54 @@ import com.sun.jersey.api.client.WebResource; /** - * + * * Remove an image, deleting any tags it might have. - * + * */ public class RemoveImageCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(RemoveImageCmd.class); private String imageId; - + private boolean force, noPrune; - + public RemoveImageCmd(String imageId) { withImageId(imageId); } - - public RemoveImageCmd withImageId(String imageId) { + + public String getImageId() { + return imageId; + } + + public boolean hasForceEnabled() { + return force; + } + + public boolean hasNoPruneEnabled() { + return noPrune; + } + + public RemoveImageCmd withImageId(String imageId) { Preconditions.checkNotNull(imageId, "imageId was not specified"); this.imageId = imageId; return this; } - + public RemoveImageCmd withForce() { return withForce(true); } - + public RemoveImageCmd withForce(boolean force) { this.force = force; return this; } - + public RemoveImageCmd withNoPrune(boolean noPrune) { this.noPrune = noPrune; return this; } - + @Override public String toString() { return new StringBuilder("rmi ") @@ -54,7 +66,7 @@ public String toString() { .append(force ? "--force=true" : "") .append(imageId) .toString(); - } + } protected Void impl() throws DockerException { Preconditions.checkState(!StringUtils.isEmpty(imageId), "Image ID can't be empty"); @@ -62,11 +74,11 @@ protected Void impl() throws DockerException { try { WebResource webResource = baseResource.path("/images/" + imageId) .queryParam("force", force ? "1" : "0").queryParam("noprune", noPrune ? "1" : "0"); - + LOGGER.trace("DELETE: {}", webResource); webResource.delete(ClientResponse.class); - - + + } catch (UniformInterfaceException exception) { if (exception.getResponse().getStatus() == 204) { //no error @@ -81,7 +93,7 @@ protected Void impl() throws DockerException { throw new DockerException(exception); } } - + return null; } } diff --git a/src/main/java/com/github/dockerjava/client/command/RestartContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/RestartContainerCmd.java index 48a436c98..8a383af2e 100644 --- a/src/main/java/com/github/dockerjava/client/command/RestartContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/RestartContainerCmd.java @@ -13,41 +13,49 @@ /** * Restart a running container. - * + * * @param timeout - Timeout in seconds before killing the container. Defaults to 10 seconds. - * + * */ public class RestartContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(RestartContainerCmd.class); private String containerId; - + private int timeout = 10; - + public RestartContainerCmd(String containerId) { withContainerId(containerId); } - - public RestartContainerCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public int getTimeout() { + return timeout; + } + + public RestartContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + public RestartContainerCmd withtTimeout(int timeout) { Preconditions.checkArgument(timeout >= 0, "timeout must be greater or equal 0"); this.timeout = timeout; return this; } - + @Override public String toString() { return new StringBuilder("restart ") .append("--time=" + timeout + " ") .append(containerId) .toString(); - } + } protected Void impl() throws DockerException { WebResource webResource = baseResource.path(String.format("/containers/%s/restart", containerId)) @@ -68,7 +76,7 @@ protected Void impl() throws DockerException { throw new DockerException(exception); } } - + return null; } } diff --git a/src/main/java/com/github/dockerjava/client/command/SearchImagesCmd.java b/src/main/java/com/github/dockerjava/client/command/SearchImagesCmd.java index 90df5b787..6be296068 100644 --- a/src/main/java/com/github/dockerjava/client/command/SearchImagesCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/SearchImagesCmd.java @@ -16,32 +16,36 @@ /** - * - * + * + * * */ public class SearchImagesCmd extends AbstrDockerCmd> { private static final Logger LOGGER = LoggerFactory.getLogger(SearchImagesCmd.class); - + private String term; - + public SearchImagesCmd(String term) { withTerm(term); } - - public SearchImagesCmd withTerm(String term) { + + public String getTerm() { + return term; + } + + public SearchImagesCmd withTerm(String term) { Preconditions.checkNotNull(term, "term was not specified"); this.term = term; return this; } - + @Override public String toString() { return new StringBuilder("search ") .append(term) .toString(); - } + } protected List impl() { WebResource webResource = baseResource.path("/images/search").queryParam("term", term); diff --git a/src/main/java/com/github/dockerjava/client/command/StartContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/StartContainerCmd.java index 3a3eebb38..49901e939 100644 --- a/src/main/java/com/github/dockerjava/client/command/StartContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/StartContainerCmd.java @@ -26,15 +26,19 @@ public class StartContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(StartContainerCmd.class); private String containerId; - + private StartContainerConfig startContainerConfig; - + public StartContainerCmd(String containerId) { startContainerConfig = new StartContainerConfig(); withContainerId(containerId); } - - public StartContainerCmd withBinds(Bind... binds) { + + public String getContainerId() { + return containerId; + } + + public StartContainerCmd withBinds(Bind... binds) { startContainerConfig.setBinds(binds); return this; } @@ -76,13 +80,13 @@ public StartContainerCmd withVolumesFrom(String volumesFrom) { startContainerConfig.setVolumesFrom(volumesFrom); return this; } - + public StartContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + @Override public String toString() { return new StringBuilder("run ") @@ -90,7 +94,7 @@ public String toString() { .append(" using ") .append(startContainerConfig) .toString(); - } + } protected Void impl() throws DockerException { WebResource webResource = baseResource.path(String.format("/containers/%s/start", containerId)); @@ -103,8 +107,8 @@ protected Void impl() throws DockerException { } else { builder.post((StartContainerConfig) null); } - - + + } catch (UniformInterfaceException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format("No such container %s", containerId)); @@ -121,7 +125,7 @@ protected Void impl() throws DockerException { throw new DockerException(exception); } } - + return null; } } diff --git a/src/main/java/com/github/dockerjava/client/command/StopContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/StopContainerCmd.java index 9805cae1b..69f453914 100644 --- a/src/main/java/com/github/dockerjava/client/command/StopContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/StopContainerCmd.java @@ -12,42 +12,50 @@ /** * Stop a running container. - * + * * @param containerId - Id of the container * @param timeout - Timeout in seconds before killing the container. Defaults to 10 seconds. - * + * */ public class StopContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(StopContainerCmd.class); private String containerId; - + private int timeout = 10; - + public StopContainerCmd(String containerId) { withContainerId(containerId); } - - public StopContainerCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public int getTimeout() { + return timeout; + } + + public StopContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + public StopContainerCmd withTimeout(int timeout) { Preconditions.checkArgument(timeout >= 0, "timeout must be greater or equal 0"); this.timeout = timeout; return this; } - + @Override public String toString() { return new StringBuilder("stop ") .append("--time=" + timeout + " ") .append(containerId) .toString(); - } + } protected Void impl() throws DockerException { WebResource webResource = baseResource.path(String.format("/containers/%s/stop", containerId)) @@ -71,7 +79,7 @@ protected Void impl() throws DockerException { throw new DockerException(exception); } } - + return null; } } diff --git a/src/main/java/com/github/dockerjava/client/command/TagImageCmd.java b/src/main/java/com/github/dockerjava/client/command/TagImageCmd.java index 802890501..8b1f281c2 100644 --- a/src/main/java/com/github/dockerjava/client/command/TagImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/TagImageCmd.java @@ -15,7 +15,7 @@ /** * Tag an image into a repository - * + * * @param image * the local image to tag (either a name or an id) * @param repository @@ -27,44 +27,60 @@ public class TagImageCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(TagImageCmd.class); - + private String imageId, repository, tag; - + private boolean force; - + public TagImageCmd(String imageId, String repository, String tag) { withImageId(imageId); withRepository(repository); withTag(tag); } - - public TagImageCmd withImageId(String imageId) { + + public String getImageId() { + return imageId; + } + + public String getRepository() { + return repository; + } + + public String getTag() { + return tag; + } + + public boolean hasForceEnabled() { + return force; + } + + public TagImageCmd withImageId(String imageId) { Preconditions.checkNotNull(imageId, "imageId was not specified"); this.imageId = imageId; return this; } - + public TagImageCmd withRepository(String repository) { Preconditions.checkNotNull(repository, "repository was not specified"); this.repository = repository; return this; } - + public TagImageCmd withTag(String tag) { Preconditions.checkNotNull(tag, "tag was not specified"); this.tag = tag; return this; } - + public TagImageCmd withForce() { return withForce(true); } - + public TagImageCmd withForce(boolean force) { this.force = force; return this; } - + @Override public String toString() { return new StringBuilder("tag ") @@ -73,7 +89,7 @@ public String toString() { .append(imageId) .append(tag != null ? ":" + tag : "") .toString(); - } + } protected Integer impl() { diff --git a/src/main/java/com/github/dockerjava/client/command/TopContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/TopContainerCmd.java index 490f1951f..8794a2d75 100644 --- a/src/main/java/com/github/dockerjava/client/command/TopContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/TopContainerCmd.java @@ -14,47 +14,55 @@ import com.sun.jersey.api.client.WebResource; /** - * + * * @author marcus - * + * */ public class TopContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(TopContainerCmd.class); private String containerId; - + private String psArgs; - + public TopContainerCmd(String containerId) { withContainerId(containerId); } - - public TopContainerCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public String getPsArgs() { + return psArgs; + } + + public TopContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - - + + public TopContainerCmd withPsArgs(String psArgs) { Preconditions.checkNotNull(psArgs, "psArgs was not specified"); this.psArgs = psArgs; return this; } - + @Override public String toString() { return new StringBuilder("top ") .append(containerId) .append(psArgs != null ? " " + psArgs : "") .toString(); - } + } protected ContainerTopResponse impl() throws DockerException { WebResource webResource = baseResource.path(String.format("/containers/%s/top", containerId)); - - if(!StringUtils.isEmpty(psArgs)) + + if(!StringUtils.isEmpty(psArgs)) webResource = webResource.queryParam("ps_args", psArgs); try { diff --git a/src/main/java/com/github/dockerjava/client/command/UnpauseContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/UnpauseContainerCmd.java index 9ad1c95ac..9e75540c2 100644 --- a/src/main/java/com/github/dockerjava/client/command/UnpauseContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/UnpauseContainerCmd.java @@ -13,38 +13,42 @@ /** * Unpause a container. - * + * * @param containerId - Id of the container - * + * */ public class UnpauseContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(UnpauseContainerCmd.class); private String containerId; - + public UnpauseContainerCmd(String containerId) { withContainerId(containerId); } - - public UnpauseContainerCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public UnpauseContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + @Override public String toString() { return new StringBuilder("pause ") .append(containerId) .toString(); - } + } protected Integer impl() throws DockerException { WebResource webResource = baseResource.path(String.format("/containers/%s/unpause", containerId)); ClientResponse response = null; - + try { LOGGER.trace("POST: {}", webResource); response = webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(ClientResponse.class); @@ -60,7 +64,7 @@ protected Integer impl() throws DockerException { throw new DockerException(exception); } } - + return response.getStatus(); } } diff --git a/src/main/java/com/github/dockerjava/client/command/WaitContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/WaitContainerCmd.java index 41202f141..653a86db1 100644 --- a/src/main/java/com/github/dockerjava/client/command/WaitContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/WaitContainerCmd.java @@ -20,21 +20,25 @@ public class WaitContainerCmd extends AbstrDockerCmd private static final Logger LOGGER = LoggerFactory.getLogger(WaitContainerCmd.class); private String containerId; - + public WaitContainerCmd(String containerId) { withContainerId(containerId); } - - public WaitContainerCmd withContainerId(String containerId) { + + public String getContainerId() { + return containerId; + } + + public WaitContainerCmd withContainerId(String containerId) { Preconditions.checkNotNull(containerId, "containerId was not specified"); this.containerId = containerId; return this; } - + @Override public String toString() { return "wait " + containerId; - } + } protected Integer impl() throws DockerException { WebResource webResource = baseResource.path(String.format("/containers/%s/wait", containerId)); diff --git a/src/test/java/com/github/dockerjava/client/command/KillContainerCmdTest.java b/src/test/java/com/github/dockerjava/client/command/KillContainerCmdTest.java index 95f246c33..35c4ded06 100644 --- a/src/test/java/com/github/dockerjava/client/command/KillContainerCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/KillContainerCmdTest.java @@ -27,12 +27,9 @@ public class KillContainerCmdTest extends AbstractDockerClientTest { public static final Logger LOG = LoggerFactory .getLogger(KillContainerCmdTest.class); - String username; - @BeforeTest public void beforeTest() throws DockerException { super.beforeTest(); - username = dockerClient.authConfig().getUsername(); } @AfterTest diff --git a/src/test/java/com/github/dockerjava/client/command/RemoveContainerCmdTest.java b/src/test/java/com/github/dockerjava/client/command/RemoveContainerCmdTest.java index 96ef538d5..3e2bf4039 100644 --- a/src/test/java/com/github/dockerjava/client/command/RemoveContainerCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/RemoveContainerCmdTest.java @@ -24,16 +24,13 @@ import com.github.dockerjava.client.model.ContainerCreateResponse; public class RemoveContainerCmdTest extends AbstractDockerClientTest { - + public static final Logger LOG = LoggerFactory .getLogger(RemoveContainerCmdTest.class); - String username; - @BeforeTest public void beforeTest() throws DockerException { super.beforeTest(); - username = dockerClient.authConfig().getUsername(); } @AfterTest public void afterTest() { @@ -70,6 +67,6 @@ public void removeContainer() throws DockerException { } - + } diff --git a/src/test/java/com/github/dockerjava/client/command/RemoveImageCmdTest.java b/src/test/java/com/github/dockerjava/client/command/RemoveImageCmdTest.java index 4f640302e..81c5dcf5b 100644 --- a/src/test/java/com/github/dockerjava/client/command/RemoveImageCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/RemoveImageCmdTest.java @@ -25,16 +25,13 @@ import com.github.dockerjava.client.model.ContainerCreateResponse; public class RemoveImageCmdTest extends AbstractDockerClientTest { - + public static final Logger LOG = LoggerFactory .getLogger(RemoveImageCmdTest.class); - String username; - @BeforeTest public void beforeTest() throws DockerException { super.beforeTest(); - username = dockerClient.authConfig().getUsername(); } @AfterTest public void afterTest() { @@ -79,6 +76,6 @@ public void testRemoveImage() throws DockerException, InterruptedException { assertThat(containers, matcher); } - + } diff --git a/src/test/java/com/github/dockerjava/client/command/StopContainerCmdTest.java b/src/test/java/com/github/dockerjava/client/command/StopContainerCmdTest.java index 96059a858..d9151088d 100644 --- a/src/test/java/com/github/dockerjava/client/command/StopContainerCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/StopContainerCmdTest.java @@ -27,12 +27,9 @@ public class StopContainerCmdTest extends AbstractDockerClientTest { public static final Logger LOG = LoggerFactory .getLogger(StopContainerCmdTest.class); - String username; - @BeforeTest public void beforeTest() throws DockerException { super.beforeTest(); - username = dockerClient.authConfig().getUsername(); } @AfterTest diff --git a/src/test/java/com/github/dockerjava/client/command/TagImageCmdTest.java b/src/test/java/com/github/dockerjava/client/command/TagImageCmdTest.java index a756b49f8..62fd1d096 100644 --- a/src/test/java/com/github/dockerjava/client/command/TagImageCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/TagImageCmdTest.java @@ -20,16 +20,13 @@ import com.github.dockerjava.client.DockerException; public class TagImageCmdTest extends AbstractDockerClientTest { - + public static final Logger LOG = LoggerFactory .getLogger(TagImageCmdTest.class); - String username; - @BeforeTest public void beforeTest() throws DockerException { super.beforeTest(); - username = dockerClient.authConfig().getUsername(); } @AfterTest public void afterTest() { @@ -49,12 +46,12 @@ public void afterMethod(ITestResult result) { @Test public void testTagImage() throws DockerException, InterruptedException { String tag = String.valueOf(RandomUtils.nextInt(Integer.MAX_VALUE)); - + Integer result = dockerClient.tagImageCmd("busybox:latest", "docker-java/busybox", tag).exec(); assertThat(result, equalTo(Integer.valueOf(201))); - + dockerClient.removeImageCmd("docker-java/busybox:" + tag).exec(); } - + }