Skip to content

Commit a78f5ee

Browse files
Automated merge from development to main
2 parents 7ebd6e2 + 4878164 commit a78f5ee

File tree

3 files changed

+247
-0
lines changed

3 files changed

+247
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package io.github.intisy.docker.model;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
5+
/**
6+
* Represents a device mapping from host to container.
7+
*
8+
* @author Finn Birich
9+
*/
10+
public class DeviceMapping {
11+
@SerializedName("PathOnHost")
12+
private String pathOnHost;
13+
14+
@SerializedName("PathInContainer")
15+
private String pathInContainer;
16+
17+
@SerializedName("CgroupPermissions")
18+
private String cgroupPermissions;
19+
20+
public DeviceMapping() {
21+
}
22+
23+
public DeviceMapping(String pathOnHost, String pathInContainer, String cgroupPermissions) {
24+
this.pathOnHost = pathOnHost;
25+
this.pathInContainer = pathInContainer;
26+
this.cgroupPermissions = cgroupPermissions;
27+
}
28+
29+
/**
30+
* Create a device mapping with read-write-mknod permissions.
31+
*/
32+
public static DeviceMapping of(String pathOnHost, String pathInContainer) {
33+
return new DeviceMapping(pathOnHost, pathInContainer, "rwm");
34+
}
35+
36+
public String getPathOnHost() {
37+
return pathOnHost;
38+
}
39+
40+
public DeviceMapping setPathOnHost(String pathOnHost) {
41+
this.pathOnHost = pathOnHost;
42+
return this;
43+
}
44+
45+
public String getPathInContainer() {
46+
return pathInContainer;
47+
}
48+
49+
public DeviceMapping setPathInContainer(String pathInContainer) {
50+
this.pathInContainer = pathInContainer;
51+
return this;
52+
}
53+
54+
public String getCgroupPermissions() {
55+
return cgroupPermissions;
56+
}
57+
58+
public DeviceMapping setCgroupPermissions(String cgroupPermissions) {
59+
this.cgroupPermissions = cgroupPermissions;
60+
return this;
61+
}
62+
}
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package io.github.intisy.docker.model;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
5+
import java.util.ArrayList;
6+
import java.util.Collections;
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
/**
11+
* Represents a device request for container access to host devices (e.g., GPUs).
12+
*
13+
* @author Finn Birich
14+
*/
15+
public class DeviceRequest {
16+
@SerializedName("Driver")
17+
private String driver;
18+
19+
@SerializedName("Count")
20+
private Integer count;
21+
22+
@SerializedName("DeviceIDs")
23+
private List<String> deviceIDs;
24+
25+
@SerializedName("Capabilities")
26+
private List<List<String>> capabilities;
27+
28+
@SerializedName("Options")
29+
private Map<String, String> options;
30+
31+
public DeviceRequest() {
32+
}
33+
34+
/**
35+
* Create a device request for all NVIDIA GPUs.
36+
*/
37+
public static DeviceRequest requestAllGpus() {
38+
return new DeviceRequest()
39+
.withDriver("nvidia")
40+
.withCount(-1)
41+
.withCapabilities(Collections.singletonList(Collections.singletonList("gpu")));
42+
}
43+
44+
/**
45+
* Create a device request for a specific number of GPUs.
46+
*/
47+
public static DeviceRequest requestGpus(int count) {
48+
return new DeviceRequest()
49+
.withDriver("nvidia")
50+
.withCount(count)
51+
.withCapabilities(Collections.singletonList(Collections.singletonList("gpu")));
52+
}
53+
54+
/**
55+
* Create a device request for specific GPU device IDs.
56+
*/
57+
public static DeviceRequest requestGpusByIds(List<String> deviceIds) {
58+
return new DeviceRequest()
59+
.withDriver("nvidia")
60+
.withDeviceIDs(deviceIds)
61+
.withCapabilities(Collections.singletonList(Collections.singletonList("gpu")));
62+
}
63+
64+
public String getDriver() {
65+
return driver;
66+
}
67+
68+
public DeviceRequest setDriver(String driver) {
69+
this.driver = driver;
70+
return this;
71+
}
72+
73+
public DeviceRequest withDriver(String driver) {
74+
this.driver = driver;
75+
return this;
76+
}
77+
78+
public Integer getCount() {
79+
return count;
80+
}
81+
82+
public DeviceRequest setCount(Integer count) {
83+
this.count = count;
84+
return this;
85+
}
86+
87+
public DeviceRequest withCount(Integer count) {
88+
this.count = count;
89+
return this;
90+
}
91+
92+
public List<String> getDeviceIDs() {
93+
return deviceIDs;
94+
}
95+
96+
public DeviceRequest setDeviceIDs(List<String> deviceIDs) {
97+
this.deviceIDs = deviceIDs;
98+
return this;
99+
}
100+
101+
public DeviceRequest withDeviceIDs(List<String> deviceIDs) {
102+
this.deviceIDs = deviceIDs;
103+
return this;
104+
}
105+
106+
public List<List<String>> getCapabilities() {
107+
return capabilities;
108+
}
109+
110+
public DeviceRequest setCapabilities(List<List<String>> capabilities) {
111+
this.capabilities = capabilities;
112+
return this;
113+
}
114+
115+
public DeviceRequest withCapabilities(List<List<String>> capabilities) {
116+
this.capabilities = capabilities;
117+
return this;
118+
}
119+
120+
public Map<String, String> getOptions() {
121+
return options;
122+
}
123+
124+
public DeviceRequest setOptions(Map<String, String> options) {
125+
this.options = options;
126+
return this;
127+
}
128+
129+
public DeviceRequest withOptions(Map<String, String> options) {
130+
this.options = options;
131+
return this;
132+
}
133+
}

src/main/java/io/github/intisy/docker/model/HostConfig.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,15 @@ public class HostConfig {
7979
@SerializedName("ShmSize")
8080
private Long shmSize;
8181

82+
@SerializedName("DeviceRequests")
83+
private List<DeviceRequest> deviceRequests;
84+
85+
@SerializedName("Devices")
86+
private List<DeviceMapping> devices;
87+
88+
@SerializedName("Runtime")
89+
private String runtime;
90+
8291
public HostConfig() {
8392
}
8493

@@ -312,6 +321,49 @@ public HostConfig setShmSize(Long shmSize) {
312321
return this;
313322
}
314323

324+
public List<DeviceRequest> getDeviceRequests() {
325+
return deviceRequests;
326+
}
327+
328+
public HostConfig setDeviceRequests(List<DeviceRequest> deviceRequests) {
329+
this.deviceRequests = deviceRequests;
330+
return this;
331+
}
332+
333+
public HostConfig addDeviceRequest(DeviceRequest deviceRequest) {
334+
if (this.deviceRequests == null) {
335+
this.deviceRequests = new ArrayList<>();
336+
}
337+
this.deviceRequests.add(deviceRequest);
338+
return this;
339+
}
340+
341+
public List<DeviceMapping> getDevices() {
342+
return devices;
343+
}
344+
345+
public HostConfig setDevices(List<DeviceMapping> devices) {
346+
this.devices = devices;
347+
return this;
348+
}
349+
350+
public HostConfig addDevice(DeviceMapping device) {
351+
if (this.devices == null) {
352+
this.devices = new ArrayList<>();
353+
}
354+
this.devices.add(device);
355+
return this;
356+
}
357+
358+
public String getRuntime() {
359+
return runtime;
360+
}
361+
362+
public HostConfig setRuntime(String runtime) {
363+
this.runtime = runtime;
364+
return this;
365+
}
366+
315367
/**
316368
* Restart policy for a container.
317369
*/

0 commit comments

Comments
 (0)