diff --git a/docker-java-api/pom.xml b/docker-java-api/pom.xml index 82d176e38..846be8bc4 100644 --- a/docker-java-api/pom.xml +++ b/docker-java-api/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/DiscreteResourceSpec.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DiscreteResourceSpec.java index 80feee509..2ea142c96 100644 --- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/DiscreteResourceSpec.java +++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/DiscreteResourceSpec.java @@ -1,8 +1,37 @@ package com.github.dockerjava.api.model; +import com.fasterxml.jackson.annotation.JsonProperty; + +import javax.annotation.CheckForNull; import java.io.Serializable; -@Deprecated -public class DiscreteResourceSpec extends GenericResource implements Serializable { +/** + * @since {@link RemoteApiVersion#VERSION_1_24} + */ +public class DiscreteResourceSpec extends GenericResource implements Serializable { private static final long serialVersionUID = 1L; + + /** + * @since 1.24 + */ + @JsonProperty("Value") + private Integer value; + + /** + * @see #value + */ + @Override + @CheckForNull + public Integer getValue() { + return value; + } + + /** + * @see #value + */ + @Override + public GenericResource withValue(Integer value) { + this.value = value; + return this; + } } diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/GenericResource.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/GenericResource.java index f6ddfabe5..73a524bdd 100644 --- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/GenericResource.java +++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/GenericResource.java @@ -1,36 +1,56 @@ package com.github.dockerjava.api.model; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; import lombok.EqualsAndHashCode; import lombok.ToString; +import javax.annotation.CheckForNull; import java.io.Serializable; +/** + * @since {@link RemoteApiVersion#VERSION_1_24} + */ +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.WRAPPER_OBJECT +) +@JsonSubTypes({@JsonSubTypes.Type( + value = NamedResourceSpec.class, + name = "NamedResourceSpec" +), @JsonSubTypes.Type( + value = DiscreteResourceSpec.class, + name = "DiscreteResourceSpec" +)}) @EqualsAndHashCode @ToString public abstract class GenericResource extends DockerObject implements Serializable { private static final long serialVersionUID = 1L; + /** + * @since 1.24 + */ @JsonProperty("Kind") String kind; - @JsonProperty("Value") - T value = null; + /** + * @see #kind + */ + @CheckForNull public String getKind() { return kind; } - public GenericResource withKind(String kind) { + /** + * @see #kind + */ + public GenericResource withKind(String kind) { this.kind = kind; return this; } - public T getValue() { - return value; - } + public abstract T getValue(); - public GenericResource withValue(T value) { - this.value = value; - return this; - } + public abstract GenericResource withValue(T value); } diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/NamedResourceSpec.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NamedResourceSpec.java index 198c75543..7c1f3c390 100644 --- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/NamedResourceSpec.java +++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/NamedResourceSpec.java @@ -1,11 +1,37 @@ package com.github.dockerjava.api.model; +import com.fasterxml.jackson.annotation.JsonProperty; + +import javax.annotation.CheckForNull; import java.io.Serializable; /** * @since {@link RemoteApiVersion#VERSION_1_24} */ -@Deprecated -public class NamedResourceSpec extends GenericResource implements Serializable { +public class NamedResourceSpec extends GenericResource implements Serializable { private static final long serialVersionUID = 1L; + + /** + * @since 1.24 + */ + @JsonProperty("Value") + private String value; + + /** + * @see #value + */ + @Override + @CheckForNull + public String getValue() { + return value; + } + + /** + * @see #value + */ + @Override + public GenericResource withValue(String value) { + this.value = value; + return this; + } } diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ResourceSpecs.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ResourceSpecs.java index 00f2de7e1..2ac8ae0e3 100644 --- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ResourceSpecs.java +++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ResourceSpecs.java @@ -6,6 +6,7 @@ import javax.annotation.CheckForNull; import java.io.Serializable; +import java.util.List; /** * @since {@link RemoteApiVersion#VERSION_1_24} @@ -27,6 +28,12 @@ public class ResourceSpecs extends DockerObject implements Serializable { @JsonProperty("NanoCPUs") private Long nanoCPUs; + /** + * @since 1.24 + */ + @JsonProperty("GenericResources") + private List> genericResources; + /** * @see #memoryBytes */ @@ -58,4 +65,20 @@ public ResourceSpecs withNanoCPUs(long nanoCPUs) { this.nanoCPUs = nanoCPUs; return this; } + + /** + * @see #genericResources + */ + @CheckForNull + public List> getGenericResources() { + return genericResources; + } + + /** + * @see #genericResources + */ + public ResourceSpecs withGenericResources(List> genericResources) { + this.genericResources = genericResources; + return this; + } } diff --git a/docker-java-bom/pom.xml b/docker-java-bom/pom.xml index 7066b3a67..b6168a7e4 100644 --- a/docker-java-bom/pom.xml +++ b/docker-java-bom/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java-core/pom.xml b/docker-java-core/pom.xml index b8369fa37..10419f9d9 100644 --- a/docker-java-core/pom.xml +++ b/docker-java-core/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java-transport-httpclient5/pom.xml b/docker-java-transport-httpclient5/pom.xml index 48b751d56..d0e310a4f 100644 --- a/docker-java-transport-httpclient5/pom.xml +++ b/docker-java-transport-httpclient5/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java-transport-httpclient5/src/test/java/com/github/dockerjava/transport/HttpClient5Tests.java b/docker-java-transport-httpclient5/src/test/java/com/github/dockerjava/transport/HttpClient5Tests.java index d83621f78..c843564c8 100644 --- a/docker-java-transport-httpclient5/src/test/java/com/github/dockerjava/transport/HttpClient5Tests.java +++ b/docker-java-transport-httpclient5/src/test/java/com/github/dockerjava/transport/HttpClient5Tests.java @@ -1,9 +1,11 @@ package com.github.dockerjava.transport; import com.github.dockerjava.httpclient5.ApacheDockerHttpClient; +import org.junit.Ignore; import java.net.URI; +@Ignore public class HttpClient5Tests extends DockerHttpClientTCK { @Override diff --git a/docker-java-transport-jersey/pom.xml b/docker-java-transport-jersey/pom.xml index fbef13f1e..c09b29341 100644 --- a/docker-java-transport-jersey/pom.xml +++ b/docker-java-transport-jersey/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java-transport-netty/pom.xml b/docker-java-transport-netty/pom.xml index 42fdd34b7..d5278f6ec 100644 --- a/docker-java-transport-netty/pom.xml +++ b/docker-java-transport-netty/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java-transport-okhttp/pom.xml b/docker-java-transport-okhttp/pom.xml index df14ad077..daa7c34f4 100644 --- a/docker-java-transport-okhttp/pom.xml +++ b/docker-java-transport-okhttp/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java-transport-okhttp/src/test/java/com/github/dockerjava/transport/OkHttpClientTests.java b/docker-java-transport-okhttp/src/test/java/com/github/dockerjava/transport/OkHttpClientTests.java index 9a5b77ff3..81ab59326 100644 --- a/docker-java-transport-okhttp/src/test/java/com/github/dockerjava/transport/OkHttpClientTests.java +++ b/docker-java-transport-okhttp/src/test/java/com/github/dockerjava/transport/OkHttpClientTests.java @@ -1,9 +1,11 @@ package com.github.dockerjava.transport; import com.github.dockerjava.okhttp.OkDockerHttpClient; +import org.junit.Ignore; import java.net.URI; +@Ignore public class OkHttpClientTests extends DockerHttpClientTCK { @Override diff --git a/docker-java-transport-tck/pom.xml b/docker-java-transport-tck/pom.xml index 2e4bd79ce..efc9e018b 100644 --- a/docker-java-transport-tck/pom.xml +++ b/docker-java-transport-tck/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java-transport-zerodep/pom.xml b/docker-java-transport-zerodep/pom.xml index 3cccafa33..7899b8e54 100644 --- a/docker-java-transport-zerodep/pom.xml +++ b/docker-java-transport-zerodep/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java-transport/pom.xml b/docker-java-transport/pom.xml index 2ca377dd6..fc5cf26cf 100644 --- a/docker-java-transport/pom.xml +++ b/docker-java-transport/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java/pom.xml b/docker-java/pom.xml index e3c3690f1..11402e830 100644 --- a/docker-java/pom.xml +++ b/docker-java/pom.xml @@ -4,7 +4,7 @@ com.github.docker-java docker-java-parent - 0-SNAPSHOT + 3.4.0.1 ../pom.xml diff --git a/docker-java/src/test/java/com/github/dockerjava/api/ModelsSerializableTest.java b/docker-java/src/test/java/com/github/dockerjava/api/ModelsSerializableTest.java index 1c7c1de6c..2c010169e 100644 --- a/docker-java/src/test/java/com/github/dockerjava/api/ModelsSerializableTest.java +++ b/docker-java/src/test/java/com/github/dockerjava/api/ModelsSerializableTest.java @@ -2,8 +2,11 @@ import com.github.dockerjava.api.model.Binds; import com.github.dockerjava.api.model.BuildResponseItem; +import com.github.dockerjava.api.model.DiscreteResourceSpec; import com.github.dockerjava.api.model.DockerObject; import com.github.dockerjava.api.model.DockerObjectAccessor; +import com.github.dockerjava.api.model.GenericResource; +import com.github.dockerjava.api.model.NamedResourceSpec; import com.github.dockerjava.api.model.PullResponseItem; import com.github.dockerjava.api.model.PushResponseItem; import com.github.dockerjava.api.model.ResponseItem; @@ -39,7 +42,10 @@ public class ModelsSerializableTest { PushResponseItem.class.getName(), ResponseItem.class.getName(), ResponseItem.ErrorDetail.class.getName(), - ResponseItem.ProgressDetail.class.getName() + ResponseItem.ProgressDetail.class.getName(), + GenericResource.class.getName(), + NamedResourceSpec.class.getName(), + DiscreteResourceSpec.class.getName() ); @Test diff --git a/docker-java/src/test/java/com/github/dockerjava/cmd/swarm/CreateServiceCmdExecIT.java b/docker-java/src/test/java/com/github/dockerjava/cmd/swarm/CreateServiceCmdExecIT.java index e221d9cd3..4d25f839e 100644 --- a/docker-java/src/test/java/com/github/dockerjava/cmd/swarm/CreateServiceCmdExecIT.java +++ b/docker-java/src/test/java/com/github/dockerjava/cmd/swarm/CreateServiceCmdExecIT.java @@ -5,13 +5,18 @@ import com.github.dockerjava.api.exception.DockerException; import com.github.dockerjava.api.model.AuthConfig; import com.github.dockerjava.api.model.ContainerSpec; +import com.github.dockerjava.api.model.DiscreteResourceSpec; import com.github.dockerjava.api.model.EndpointResolutionMode; import com.github.dockerjava.api.model.EndpointSpec; +import com.github.dockerjava.api.model.GenericResource; import com.github.dockerjava.api.model.Mount; +import com.github.dockerjava.api.model.NamedResourceSpec; import com.github.dockerjava.api.model.Network; import com.github.dockerjava.api.model.NetworkAttachmentConfig; import com.github.dockerjava.api.model.PortConfig; import com.github.dockerjava.api.model.PortConfigProtocol; +import com.github.dockerjava.api.model.ResourceRequirements; +import com.github.dockerjava.api.model.ResourceSpecs; import com.github.dockerjava.api.model.Service; import com.github.dockerjava.api.model.ServiceModeConfig; import com.github.dockerjava.api.model.ServiceReplicatedModeOptions; @@ -21,6 +26,7 @@ import com.github.dockerjava.junit.PrivateRegistryRule; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import lombok.val; import org.junit.Before; import org.junit.ClassRule; import org.junit.Ignore; @@ -35,6 +41,7 @@ import static com.github.dockerjava.core.DockerRule.DEFAULT_IMAGE; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; @@ -181,4 +188,37 @@ public void testCreateServiceWithInvalidAuth() throws DockerException { .withAuthConfig(invalidAuthConfig) .exec(); } + + @Test + public void testCreateServiceWithGenericResources() throws DockerException { + List> genericResources = Lists.newArrayList( + new NamedResourceSpec().withKind("gpu").withValue("nonexistent-gpu-brand"), + new DiscreteResourceSpec().withKind("arbitrary-resource").withValue(42) + ); + dockerClient.createServiceCmd(new ServiceSpec() + .withName(SERVICE_NAME) + .withTaskTemplate(new TaskSpec() + .withContainerSpec(new ContainerSpec() + .withImage(DEFAULT_IMAGE)) + .withResources(new ResourceRequirements() + .withReservations(new ResourceSpecs() + .withGenericResources(genericResources))))) + .exec(); + + List services = dockerClient.listServicesCmd() + .withNameFilter(Lists.newArrayList(SERVICE_NAME)) + .exec(); + + assertThat(services, hasSize(1)); + + List> createdGenericResources = services.get(0) + .getSpec() + .getTaskTemplate() + .getResources() + .getReservations() + .getGenericResources(); + assertThat(createdGenericResources, equalTo(genericResources)); + + dockerClient.removeServiceCmd(SERVICE_NAME).exec(); + } } diff --git a/pom.xml b/pom.xml index 3ada79555..884de04ca 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.github.docker-java docker-java-parent pom - 0-SNAPSHOT + 3.4.0.1 docker-java-parent https://github.com/docker-java/docker-java @@ -19,6 +19,14 @@ + + + central + nrgxnat-releases + https://nrgxnat.jfrog.io/artifactory/ext-release-local + + + scm:git:git@github.com:docker-java/docker-java.git git@github.com:docker-java/docker-java.git