1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct Resources {
10 #[serde(default, skip_serializing_if = "Vec::is_empty")]
12 pub devices: Vec<DeviceCgroup>,
13
14 #[serde(skip_serializing_if = "Option::is_none")]
16 pub memory: Option<MemoryResources>,
17
18 #[serde(skip_serializing_if = "Option::is_none")]
20 pub cpu: Option<CpuResources>,
21
22 #[serde(rename = "blockIO", skip_serializing_if = "Option::is_none")]
24 pub block_io: Option<BlockIoResources>,
25
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub pids: Option<PidsResources>,
29
30 #[serde(default, skip_serializing_if = "Vec::is_empty")]
32 pub hugepage_limits: Vec<HugepageLimit>,
33
34 #[serde(skip_serializing_if = "Option::is_none")]
36 pub network: Option<NetworkResources>,
37
38 #[serde(default, skip_serializing_if = "HashMap::is_empty")]
40 pub rdma: HashMap<String, RdmaResource>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct DeviceCgroup {
47 pub allow: bool,
49 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
51 pub device_type: Option<String>,
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub major: Option<i64>,
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub minor: Option<i64>,
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub access: Option<String>,
61}
62
63#[derive(Debug, Clone, Default, Serialize, Deserialize)]
65#[serde(rename_all = "camelCase")]
66pub struct MemoryResources {
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub limit: Option<i64>,
70 #[serde(skip_serializing_if = "Option::is_none")]
72 pub reservation: Option<i64>,
73 #[serde(skip_serializing_if = "Option::is_none")]
75 pub swap: Option<i64>,
76 #[serde(skip_serializing_if = "Option::is_none")]
78 pub kernel: Option<i64>,
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub kernel_tcp: Option<i64>,
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub swappiness: Option<u64>,
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub disable_oom_killer: Option<bool>,
88 #[serde(skip_serializing_if = "Option::is_none")]
90 pub use_hierarchy: Option<bool>,
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub check_before_update: Option<bool>,
94}
95
96#[derive(Debug, Clone, Default, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct CpuResources {
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub shares: Option<u64>,
103 #[serde(skip_serializing_if = "Option::is_none")]
105 pub quota: Option<i64>,
106 #[serde(skip_serializing_if = "Option::is_none")]
108 pub burst: Option<u64>,
109 #[serde(skip_serializing_if = "Option::is_none")]
111 pub period: Option<u64>,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub realtime_runtime: Option<i64>,
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub realtime_period: Option<u64>,
118 #[serde(skip_serializing_if = "Option::is_none")]
120 pub cpus: Option<String>,
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub mems: Option<String>,
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub idle: Option<i64>,
127}
128
129#[derive(Debug, Clone, Default, Serialize, Deserialize)]
131#[serde(rename_all = "camelCase")]
132pub struct BlockIoResources {
133 #[serde(skip_serializing_if = "Option::is_none")]
135 pub weight: Option<u16>,
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub leaf_weight: Option<u16>,
139 #[serde(default, skip_serializing_if = "Vec::is_empty")]
141 pub weight_device: Vec<WeightDevice>,
142 #[serde(default, skip_serializing_if = "Vec::is_empty")]
144 pub throttle_read_bps_device: Vec<ThrottleDevice>,
145 #[serde(default, skip_serializing_if = "Vec::is_empty")]
147 pub throttle_write_bps_device: Vec<ThrottleDevice>,
148 #[serde(default, skip_serializing_if = "Vec::is_empty")]
150 pub throttle_read_iops_device: Vec<ThrottleDevice>,
151 #[serde(default, skip_serializing_if = "Vec::is_empty")]
153 pub throttle_write_iops_device: Vec<ThrottleDevice>,
154}
155
156#[derive(Debug, Clone, Serialize, Deserialize)]
158#[serde(rename_all = "camelCase")]
159pub struct WeightDevice {
160 pub major: i64,
162 pub minor: i64,
164 #[serde(skip_serializing_if = "Option::is_none")]
166 pub weight: Option<u16>,
167 #[serde(skip_serializing_if = "Option::is_none")]
169 pub leaf_weight: Option<u16>,
170}
171
172#[derive(Debug, Clone, Serialize, Deserialize)]
174#[serde(rename_all = "camelCase")]
175pub struct ThrottleDevice {
176 pub major: i64,
178 pub minor: i64,
180 pub rate: u64,
182}
183
184#[derive(Debug, Clone, Default, Serialize, Deserialize)]
186pub struct PidsResources {
187 pub limit: i64,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize)]
193#[serde(rename_all = "camelCase")]
194pub struct HugepageLimit {
195 pub page_size: String,
197 pub limit: u64,
199}
200
201#[derive(Debug, Clone, Default, Serialize, Deserialize)]
203pub struct NetworkResources {
204 #[serde(rename = "classID", skip_serializing_if = "Option::is_none")]
206 pub class_id: Option<u32>,
207 #[serde(default, skip_serializing_if = "Vec::is_empty")]
209 pub priorities: Vec<NetworkPriority>,
210}
211
212#[derive(Debug, Clone, Serialize, Deserialize)]
214pub struct NetworkPriority {
215 pub name: String,
217 pub priority: u32,
219}
220
221#[derive(Debug, Clone, Default, Serialize, Deserialize)]
223#[serde(rename_all = "camelCase")]
224pub struct RdmaResource {
225 #[serde(skip_serializing_if = "Option::is_none")]
227 pub hca_handles: Option<u32>,
228 #[serde(skip_serializing_if = "Option::is_none")]
230 pub hca_objects: Option<u32>,
231}