From dd0105f22db6efb3208feda3bf82b3b9bc7eedaf Mon Sep 17 00:00:00 2001 From: Matt Fulgo Date: Mon, 14 Jul 2014 20:58:30 -0400 Subject: [PATCH 1/4] Removes username from tests when unused The field is never used in these tests. It should make it easier to separate tests that require a docker.io account from those that do not. --- .../client/command/KillContainerCmdTest.java | 3 --- .../client/command/RemoveContainerCmdTest.java | 7 ++----- .../dockerjava/client/command/RemoveImageCmdTest.java | 7 ++----- .../client/command/StopContainerCmdTest.java | 3 --- .../dockerjava/client/command/TagImageCmdTest.java | 11 ++++------- 5 files changed, 8 insertions(+), 23 deletions(-) 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(); } - + } From 39201090e3453d83a49ef5161d2b6ac424ad791e Mon Sep 17 00:00:00 2001 From: Matt Fulgo Date: Wed, 16 Jul 2014 16:25:37 -0400 Subject: [PATCH 2/4] Cleans up DockerClient constructor Just doing a little refactoring of the constructor to make it easier to read. --- .../dockerjava/client/DockerClient.java | 89 +++++++------------ 1 file changed, 31 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/github/dockerjava/client/DockerClient.java b/src/main/java/com/github/dockerjava/client/DockerClient.java index 939b7a7cf..c17c200de 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,10 @@ */ public class DockerClient { - private Client client; - private WebResource baseResource; + private final WebResource baseResource; private AuthConfig authConfig; - + public DockerClient() throws DockerException { this(Config.createConfig()); } @@ -74,7 +46,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 +54,41 @@ 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) { + 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); + + return new DefaultHttpClient(cm); + } - public void setCredentials(String username, String password, String email) { + + public void setCredentials(String username, String password, String email) { if (username == null) { throw new IllegalArgumentException("username is null"); } @@ -253,8 +226,8 @@ public WaitContainerCmd waitContainerCmd(String containerId) { public AttachContainerCmd attachContainerCmd(String containerId) { return new AttachContainerCmd(containerId).withBaseResource(baseResource); } - - + + public LogContainerCmd logContainerCmd(String containerId) { return new LogContainerCmd(containerId).withBaseResource(baseResource); } @@ -297,11 +270,11 @@ public BuildImgCmd buildImageCmd(InputStream tarInputStream) { public TopContainerCmd topContainerCmd(String containerId) { return new TopContainerCmd(containerId).withBaseResource(baseResource); } - + public TagImageCmd tagImageCmd(String imageId, String repository, String tag) { return new TagImageCmd(imageId, repository, tag).withBaseResource(baseResource); } - + /** * @return The output slurped into a string. From f184f5590141709212a4f56273ca89ef5661d00b Mon Sep 17 00:00:00 2001 From: Matt Fulgo Date: Wed, 16 Jul 2014 18:51:54 -0400 Subject: [PATCH 3/4] Creates an injectable CommandFactory for DockerClient In order to improve the usability of DockerClient in tests, this introduces a CommandFactory interface (and default implementation). The interface can be injected into the DockerClient at construction, allowing the use of a CommandFactory that returns mock or stub commands for later test assertions. I envision that the methods that create the commands from the DockerClient itself could be deprecated: users of the library could create the commands from the CommandFactory directly and simply pass them into the DockerClient#execute method where teh baseResource and (if appropriate) authConfig would be set on the command before it's executed. Issue #25 --- .../dockerjava/client/DockerClient.java | 64 +++---- .../client/command/CommandFactory.java | 39 +++++ .../client/command/DefaultCommandFactory.java | 158 ++++++++++++++++++ 3 files changed, 232 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/github/dockerjava/client/command/CommandFactory.java create mode 100644 src/main/java/com/github/dockerjava/client/command/DefaultCommandFactory.java diff --git a/src/main/java/com/github/dockerjava/client/DockerClient.java b/src/main/java/com/github/dockerjava/client/DockerClient.java index c17c200de..7302dabc4 100644 --- a/src/main/java/com/github/dockerjava/client/DockerClient.java +++ b/src/main/java/com/github/dockerjava/client/DockerClient.java @@ -35,6 +35,7 @@ */ public class DockerClient { + private final CommandFactory cmdFactory; private final WebResource baseResource; private AuthConfig authConfig; @@ -55,6 +56,12 @@ private static Config configWithServerUrl(String serverUrl) } 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, @@ -141,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); } /** @@ -157,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); } @@ -171,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); } /** @@ -196,83 +203,82 @@ 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); } 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/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); + } +} From 1459ffb0441f049d6d0c674bfe1c12c835fdd7fb Mon Sep 17 00:00:00 2001 From: Matt Fulgo Date: Fri, 18 Jul 2014 16:09:12 -0400 Subject: [PATCH 4/4] Adds some getters to command objects This only adds getters for fields that are of immutable types (Strings, booleans, ints). For objects that take in Config objects, I'll look at adding getters in a future commit. Ideally all of these things would be immutable. Issue #25 --- .../client/command/AttachContainerCmd.java | 32 ++++- .../client/command/BuildImgCmd.java | 110 +++++++++++------- .../dockerjava/client/command/CommitCmd.java | 70 +++++++---- .../client/command/ContainerDiffCmd.java | 16 ++- .../command/CopyFileFromContainerCmd.java | 22 ++-- .../client/command/CreateContainerCmd.java | 32 ++--- .../client/command/ImportImageCmd.java | 10 +- .../client/command/InspectContainerCmd.java | 12 +- .../client/command/InspectImageCmd.java | 14 ++- .../client/command/KillContainerCmd.java | 22 ++-- .../client/command/ListContainersCmd.java | 40 +++++-- .../client/command/ListImagesCmd.java | 20 +++- .../client/command/LogContainerCmd.java | 42 +++++-- .../client/command/PauseContainerCmd.java | 22 ++-- .../client/command/PullImageCmd.java | 30 +++-- .../client/command/PushImageCmd.java | 18 +-- .../client/command/RemoveContainerCmd.java | 34 ++++-- .../client/command/RemoveImageCmd.java | 42 ++++--- .../client/command/RestartContainerCmd.java | 28 +++-- .../client/command/SearchImagesCmd.java | 20 ++-- .../client/command/StartContainerCmd.java | 24 ++-- .../client/command/StopContainerCmd.java | 28 +++-- .../client/command/TagImageCmd.java | 40 +++++-- .../client/command/TopContainerCmd.java | 32 +++-- .../client/command/UnpauseContainerCmd.java | 22 ++-- .../client/command/WaitContainerCmd.java | 14 ++- 26 files changed, 528 insertions(+), 268 deletions(-) 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/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/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));