diff --git a/src/main/java/com/kpelykh/docker/client/model/ContainerConfig.java b/src/main/java/com/kpelykh/docker/client/model/ContainerConfig.java index a756a4e5..af990d41 100644 --- a/src/main/java/com/kpelykh/docker/client/model/ContainerConfig.java +++ b/src/main/java/com/kpelykh/docker/client/model/ContainerConfig.java @@ -1,8 +1,25 @@ package com.kpelykh.docker.client.model; +import org.codehaus.jackson.JsonParser; +import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.annotate.JsonProperty; - +import org.codehaus.jackson.map.DeserializationContext; +import org.codehaus.jackson.map.JsonDeserializer; +import org.codehaus.jackson.map.TypeDeserializer; +import org.codehaus.jackson.map.annotate.JsonDeserialize; +import org.codehaus.jackson.map.deser.std.MapDeserializer; +import org.codehaus.jackson.map.deser.std.StdDeserializer; +import org.codehaus.jackson.map.deser.std.StdKeyDeserializers; +import org.codehaus.jackson.map.deser.std.StdValueInstantiator; +import org.codehaus.jackson.map.deser.std.StringDeserializer; +import org.codehaus.jackson.map.ser.std.MapSerializer; +import org.codehaus.jackson.map.type.TypeFactory; +import org.codehaus.jackson.type.JavaType; + +import java.io.IOException; import java.util.Arrays; +import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -28,6 +45,7 @@ public class ContainerConfig { @JsonProperty("Cmd") private String[] cmd; @JsonProperty("Dns") private String[] dns; @JsonProperty("Image") private String image; + @JsonDeserialize(using=VolumesSerializer.class) @JsonProperty("Volumes") private BoundHostVolumes volumes; @JsonProperty("VolumesFrom") private String volumesFrom = ""; @JsonProperty("Entrypoint") private String[] entrypoint = new String[]{}; @@ -279,4 +297,23 @@ public String toString() { ", domainName='" + domainName + '\'' + '}'; } + + public static class VolumesSerializer extends JsonDeserializer { + + @Override + public BoundHostVolumes deserialize(JsonParser jp, + DeserializationContext ctxt) throws IOException, + JsonProcessingException { + JavaType mapType = ctxt.getTypeFactory().constructMapType(HashMap.class, String.class, Object.class); + + JsonDeserializer deserializer = + ctxt.getDeserializerProvider().findTypedValueDeserializer(ctxt.getConfig(), mapType, null); + + Map map = (Map) deserializer.deserialize(jp, ctxt); + + // TODO construct BoundHostVolumes + return null; + } + + } } diff --git a/src/main/java/com/kpelykh/docker/client/model/HostConfig.java b/src/main/java/com/kpelykh/docker/client/model/HostConfig.java index 47a12fe9..9cff8f6f 100644 --- a/src/main/java/com/kpelykh/docker/client/model/HostConfig.java +++ b/src/main/java/com/kpelykh/docker/client/model/HostConfig.java @@ -1,6 +1,7 @@ package com.kpelykh.docker.client.model; import org.codehaus.jackson.annotate.JsonProperty; +import org.codehaus.jackson.annotate.JsonIgnore; import java.util.Arrays; @@ -42,10 +43,12 @@ public String[] getBinds() { return binds; } + @JsonIgnore public void setBinds(String[] binds) { this.binds = binds; } + @JsonIgnore public void setBinds(final BoundHostVolumes volumes) { setBinds(volumes.asBinds()); } diff --git a/src/test/java/com/kpelykh/docker/client/test/DockerClientTest.java b/src/test/java/com/kpelykh/docker/client/test/DockerClientTest.java index 3268ed56..03c7b8d1 100644 --- a/src/test/java/com/kpelykh/docker/client/test/DockerClientTest.java +++ b/src/test/java/com/kpelykh/docker/client/test/DockerClientTest.java @@ -3,8 +3,8 @@ import com.kpelykh.docker.client.DockerClient; import com.kpelykh.docker.client.DockerException; import com.kpelykh.docker.client.model.*; - import com.sun.jersey.api.client.ClientResponse; + import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; import org.apache.commons.lang.StringUtils; @@ -20,13 +20,13 @@ import java.net.DatagramSocket; import java.net.ServerSocket; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import static ch.lambdaj.Lambda.filter; import static ch.lambdaj.Lambda.selectUnique; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import static org.hamcrest.Matchers.hasItem; import static org.testinfected.hamcrest.jpa.HasFieldWithValue.hasField; /** @@ -218,12 +218,17 @@ public void testStartContainer() throws DockerException { containerConfig.setImage("busybox"); containerConfig.setCmd(new String[]{"true"}); + BoundHostVolumes vols = new BoundHostVolumes(Arrays.asList(new String[] {"/tmp:/tmp"})); + containerConfig.setVolumes(vols); + ContainerCreateResponse container = dockerClient.createContainer(containerConfig); LOG.info("Created container {}", container.toString()); assertThat(container.getId(), not(isEmptyString())); boolean add = tmpContainers.add(container.getId()); - dockerClient.startContainer(container.getId()); + HostConfig hostConfig = new HostConfig(); + hostConfig.setBinds(vols); + dockerClient.startContainer(container.getId(), hostConfig); ContainerInspectResponse containerInspectResponse = dockerClient.inspectContainer(container.getId()); LOG.info("Container Inspect: {}", containerInspectResponse.toString()); @@ -242,6 +247,7 @@ public void testStartContainer() throws DockerException { assertThat(containerInspectResponse.getState().exitCode, is(equalTo(0))); } + assertThat(containerInspectResponse.getVolumes(), hasKey("/tmp")); } @Test