Skip to content

Commit 3951333

Browse files
authored
Add support for reference query param in List Images (docker-java#1941)
`filter` query param was removed in Docker API 1.41. Using `reference` query param will allow to use format <image-name>[:<tag>]. Also, `withFilter(String name, Collection<String> value)` is provided. Fixes docker-java#1935
1 parent 2c690f3 commit 3951333

3 files changed

Lines changed: 61 additions & 1 deletion

File tree

docker-java-api/src/main/java/com/github/dockerjava/api/command/ListImagesCmd.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.dockerjava.api.command;
22

3+
import java.util.Collection;
34
import java.util.List;
45
import java.util.Map;
56

@@ -44,6 +45,15 @@ public interface ListImagesCmd extends SyncDockerCmd<List<Image>> {
4445
*/
4546
ListImagesCmd withLabelFilter(Map<String, String> labels);
4647

48+
/**
49+
* Filter images by reference
50+
*
51+
* @param reference string in the form {@code <image-name>[:<tag>]}
52+
*/
53+
ListImagesCmd withReferenceFilter(String reference);
54+
55+
ListImagesCmd withFilter(String key, Collection<String> values);
56+
4757
interface Exec extends DockerCmdSyncExec<ListImagesCmd, List<Image>> {
4858
}
4959

docker-java-core/src/main/java/com/github/dockerjava/core/command/ListImagesCmdImpl.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import static com.google.common.base.Preconditions.checkNotNull;
44

5+
import java.util.Collection;
6+
import java.util.Collections;
57
import java.util.List;
68
import java.util.Map;
79

@@ -46,7 +48,7 @@ public ListImagesCmd withShowAll(Boolean showAll) {
4648
@Override
4749
public ListImagesCmd withDanglingFilter(Boolean dangling) {
4850
checkNotNull(dangling, "dangling have not been specified");
49-
filters.withFilter("dangling", dangling.toString());
51+
withFilter("dangling", Collections.singletonList(dangling.toString()));
5052
return this;
5153
}
5254

@@ -71,6 +73,21 @@ public ListImagesCmd withImageNameFilter(String imageNameFilter) {
7173
return this;
7274
}
7375

76+
@Override
77+
public ListImagesCmd withReferenceFilter(String reference) {
78+
checkNotNull(reference, "reference filter not specified");
79+
withFilter("reference", Collections.singletonList(reference));
80+
return this;
81+
}
82+
83+
@Override
84+
public ListImagesCmd withFilter(String key, Collection<String> values) {
85+
checkNotNull(key, "key not specified");
86+
checkNotNull(values, "values not specified");
87+
filters.withFilter(key, values);
88+
return this;
89+
}
90+
7491
@Override
7592
public String getImageNameFilter() {
7693
return this.imageNameFilter;

docker-java/src/test/java/com/github/dockerjava/cmd/ListImagesCmdIT.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,20 @@
44
import com.github.dockerjava.api.exception.DockerException;
55
import com.github.dockerjava.api.model.Image;
66
import com.github.dockerjava.api.model.Info;
7+
import org.apache.commons.lang3.RandomUtils;
78
import org.junit.Test;
89
import org.slf4j.Logger;
910
import org.slf4j.LoggerFactory;
1011

12+
import java.util.Collections;
1113
import java.util.List;
1214

1315
import static com.github.dockerjava.utils.TestUtils.isNotSwarm;
1416
import static org.hamcrest.MatcherAssert.assertThat;
1517
import static org.hamcrest.Matchers.emptyArray;
1618
import static org.hamcrest.Matchers.equalTo;
1719
import static org.hamcrest.Matchers.greaterThan;
20+
import static org.hamcrest.Matchers.hasSize;
1821
import static org.hamcrest.Matchers.is;
1922
import static org.hamcrest.Matchers.emptyString;
2023
import static org.hamcrest.Matchers.not;
@@ -54,6 +57,36 @@ public void listImagesWithDanglingFilter() throws DockerException {
5457
assertTrue(imageInFilteredList);
5558
}
5659

60+
@Test
61+
public void listImagesWithReferenceFilter() throws DockerException {
62+
String tag = "" + RandomUtils.nextInt(0, Integer.MAX_VALUE);
63+
64+
dockerRule.getClient().tagImageCmd("busybox:latest", "docker-java/busybox", tag).exec();
65+
try {
66+
List<Image> images = dockerRule.getClient().listImagesCmd().withReferenceFilter("docker-java/busybox")
67+
.exec();
68+
assertThat(images, hasSize(1));
69+
}
70+
finally {
71+
dockerRule.getClient().removeImageCmd("docker-java/busybox:" + tag).exec();
72+
}
73+
}
74+
75+
@Test
76+
public void listImagesWithFilter() throws DockerException {
77+
String tag = "" + RandomUtils.nextInt(0, Integer.MAX_VALUE);
78+
79+
dockerRule.getClient().tagImageCmd("busybox:latest", "docker-java/busybox", tag).exec();
80+
try {
81+
List<Image> images = dockerRule.getClient().listImagesCmd().withFilter("reference", Collections.singletonList("docker-java/busybox"))
82+
.exec();
83+
assertThat(images, hasSize(1));
84+
}
85+
finally {
86+
dockerRule.getClient().removeImageCmd("docker-java/busybox:" + tag).exec();
87+
}
88+
}
89+
5790
private boolean isImageInFilteredList(List<Image> images, String expectedImageId) {
5891
for (Image image : images) {
5992
if (expectedImageId.equals(image.getId())) {

0 commit comments

Comments
 (0)