X Tutup
Skip to content

Commit 6fa074b

Browse files
committed
Add ulimit support
1 parent f4d5a4d commit 6fa074b

File tree

3 files changed

+115
-42
lines changed

3 files changed

+115
-42
lines changed

src/main/java/com/github/dockerjava/api/model/HostConfig.java

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

3-
import java.util.Map;
4-
5-
import org.apache.commons.lang.builder.ToStringBuilder;
6-
73
import com.fasterxml.jackson.annotation.JsonIgnore;
84
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
95
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import org.apache.commons.lang.builder.ToStringBuilder;
7+
108

119
@JsonIgnoreProperties(ignoreUnknown = true)
1210
public class HostConfig {
@@ -59,13 +57,16 @@ public class HostConfig {
5957
@JsonProperty("ExtraHosts")
6058
private String[] extraHosts;
6159

60+
@JsonProperty("Ulimits")
61+
private Ulimit[] ulimits;
62+
6263
public HostConfig() {
6364
}
6465

6566
public HostConfig(Bind[] binds, Link[] links, LxcConf[] lxcConf, Ports portBindings, boolean publishAllPorts,
6667
boolean privileged, String[] dns, String[] dnsSearch, VolumesFrom[] volumesFrom, String containerIDFile,
6768
Capability[] capAdd, Capability[] capDrop, RestartPolicy restartPolicy, String networkMode, Device[] devices,
68-
String[] extraHosts) {
69+
String[] extraHosts, Ulimit[] ulimits) {
6970
this.binds = new Binds(binds);
7071
this.links = new Links(links);
7172
this.lxcConf = lxcConf;
@@ -82,6 +83,7 @@ public HostConfig(Bind[] binds, Link[] links, LxcConf[] lxcConf, Ports portBindi
8283
this.networkMode = networkMode;
8384
this.devices = devices;
8485
this.extraHosts = extraHosts;
86+
this.ulimits = ulimits;
8587
}
8688

8789

@@ -151,6 +153,10 @@ public Capability[] getCapDrop() {
151153
return capDrop;
152154
}
153155

156+
public Ulimit[] getUlimits() {
157+
return ulimits;
158+
}
159+
154160
@JsonIgnore
155161
public void setBinds(Bind... binds) {
156162
this.binds = new Binds(binds);
@@ -217,6 +223,10 @@ public void setExtraHosts(String[] extraHosts) {
217223
this.extraHosts = extraHosts;
218224
}
219225

226+
public void setUlimits(Ulimit[] ulimits) {
227+
this.ulimits = ulimits;
228+
}
229+
220230
@Override
221231
public String toString() {
222232
return ToStringBuilder.reflectionToString(this);
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.github.dockerjava.api.model;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import org.apache.commons.lang.builder.EqualsBuilder;
5+
import org.apache.commons.lang.builder.HashCodeBuilder;
6+
7+
import static com.google.common.base.Preconditions.checkNotNull;
8+
9+
/**
10+
* @author Vangie Du (duwan@live.com)
11+
*/
12+
public class Ulimit {
13+
14+
@JsonProperty("Name")
15+
private String name ;
16+
17+
@JsonProperty("Soft")
18+
private int soft;
19+
20+
@JsonProperty("Hard")
21+
private int hard;
22+
23+
public Ulimit() {
24+
25+
}
26+
27+
public Ulimit(String name, int soft, int hard) {
28+
checkNotNull(name, "Name is null");
29+
30+
this.name = name;
31+
this.soft = soft;
32+
this.hard = hard;
33+
}
34+
35+
public String getName() {
36+
return name;
37+
}
38+
39+
public int getSoft() {
40+
return soft;
41+
}
42+
43+
public int getHard() {
44+
return hard;
45+
}
46+
47+
@Override
48+
public boolean equals(Object obj) {
49+
if (obj instanceof Ulimit) {
50+
Ulimit other = (Ulimit) obj;
51+
return new EqualsBuilder()
52+
.append(name, other.getName())
53+
.append(soft, other.getSoft())
54+
.append(hard, other.getHard()).isEquals();
55+
} else
56+
return super.equals(obj);
57+
58+
}
59+
60+
@Override
61+
public int hashCode() {
62+
return new HashCodeBuilder().append(name).append(soft).append(hard).toHashCode();
63+
}
64+
}

src/test/java/com/github/dockerjava/core/command/CreateContainerCmdImplTest.java

Lines changed: 36 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,23 @@
11
package com.github.dockerjava.core.command;
22

3-
import static com.github.dockerjava.api.model.Capability.MKNOD;
4-
import static com.github.dockerjava.api.model.Capability.NET_ADMIN;
5-
import static org.hamcrest.MatcherAssert.assertThat;
6-
import static org.hamcrest.Matchers.contains;
7-
import static org.hamcrest.Matchers.containsInAnyOrder;
8-
import static org.hamcrest.Matchers.containsString;
9-
import static org.hamcrest.Matchers.equalTo;
10-
import static org.hamcrest.Matchers.hasItemInArray;
11-
import static org.hamcrest.Matchers.is;
12-
import static org.hamcrest.Matchers.isEmptyString;
13-
import static org.hamcrest.Matchers.not;
14-
import static org.hamcrest.Matchers.notNullValue;
15-
import static org.hamcrest.Matchers.startsWith;
3+
import com.github.dockerjava.api.ConflictException;
4+
import com.github.dockerjava.api.DockerException;
5+
import com.github.dockerjava.api.command.CreateContainerResponse;
6+
import com.github.dockerjava.api.command.InspectContainerResponse;
7+
import com.github.dockerjava.api.model.*;
8+
import com.github.dockerjava.client.AbstractDockerClientTest;
9+
import org.testng.ITestResult;
10+
import org.testng.annotations.*;
1611

1712
import java.lang.reflect.Method;
1813
import java.security.SecureRandom;
1914
import java.util.Arrays;
2015
import java.util.UUID;
2116

22-
import org.testng.ITestResult;
23-
import org.testng.annotations.AfterMethod;
24-
import org.testng.annotations.AfterTest;
25-
import org.testng.annotations.BeforeMethod;
26-
import org.testng.annotations.BeforeTest;
27-
import org.testng.annotations.Test;
28-
29-
import com.github.dockerjava.api.ConflictException;
30-
import com.github.dockerjava.api.DockerException;
31-
import com.github.dockerjava.api.command.CreateContainerResponse;
32-
import com.github.dockerjava.api.command.InspectContainerResponse;
33-
import com.github.dockerjava.api.model.AccessMode;
34-
import com.github.dockerjava.api.model.Bind;
35-
import com.github.dockerjava.api.model.Device;
36-
import com.github.dockerjava.api.model.ExposedPort;
37-
import com.github.dockerjava.api.model.HostConfig;
38-
import com.github.dockerjava.api.model.Link;
39-
import com.github.dockerjava.api.model.Ports;
40-
import com.github.dockerjava.api.model.RestartPolicy;
41-
import com.github.dockerjava.api.model.Volume;
42-
import com.github.dockerjava.api.model.VolumeRW;
43-
import com.github.dockerjava.api.model.Volumes;
44-
import com.github.dockerjava.api.model.VolumesFrom;
45-
import com.github.dockerjava.client.AbstractDockerClientTest;
17+
import static com.github.dockerjava.api.model.Capability.MKNOD;
18+
import static com.github.dockerjava.api.model.Capability.NET_ADMIN;
19+
import static org.hamcrest.MatcherAssert.assertThat;
20+
import static org.hamcrest.Matchers.*;
4621

4722
@Test(groups = "integration")
4823
public class CreateContainerCmdImplTest extends AbstractDockerClientTest {
@@ -564,5 +539,29 @@ public void createContainerWithMacAddress() throws DockerException {
564539
assertEquals(inspectContainerResponse.getConfig().getMacAddress(),
565540
"00:80:41:ae:fd:7e");
566541
}
542+
543+
@Test
544+
public void createContainerWithULimits() throws DockerException {
545+
546+
Ulimit[] ulimits = {new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096)};
547+
548+
HostConfig hostConfig = new HostConfig();
549+
hostConfig.setUlimits(ulimits);
550+
551+
CreateContainerResponse container = dockerClient
552+
.createContainerCmd("busybox").withName("container")
553+
.withHostConfig(hostConfig).exec();
554+
555+
LOG.info("Created container {}", container.toString());
556+
557+
assertThat(container.getId(), not(isEmptyString()));
558+
559+
InspectContainerResponse inspectContainerResponse = dockerClient
560+
.inspectContainerCmd(container.getId()).exec();
561+
562+
assertThat(Arrays.asList(inspectContainerResponse.getHostConfig().getUlimits()),
563+
containsInAnyOrder(new Ulimit("nproc", 709, 1026), new Ulimit("nofile", 1024, 4096)));
564+
565+
}
567566

568567
}

0 commit comments

Comments
 (0)
X Tutup