1#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
4#[serde(rename = "ca-reference")]
5pub struct CaReference {
6 pub source: String,
7 #[serde(skip_serializing_if = "Option::is_none")]
8 pub verification: Option<Verification>,
9}
10impl CaReference {
11 pub fn new(source: String) -> Self {
12 Self {
13 source,
14 verification: None,
15 }
16 }
17}
18#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
19#[serde(rename = "config-reference")]
20pub struct ConfigReference {
21 #[serde(default)]
22 pub source: Option<String>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub verification: Option<Verification>,
25}
26#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
27#[serde(rename = "ignition-config")]
28pub struct IgnitionConfig {
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub merge: Option<Vec<ConfigReference>>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub replace: Option<ConfigReference>,
33}
34#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
35pub struct SecurityTls {
36 #[serde(skip_serializing_if = "Option::is_none")]
37 #[serde(rename = "certificateAuthorities")]
38 pub certificate_authorities: Option<Vec<CaReference>>,
39}
40#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
41#[serde(rename = "security")]
42pub struct Security {
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub tls: Option<SecurityTls>,
45}
46#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
47#[serde(rename = "timeouts")]
48pub struct Timeouts {
49 #[serde(default)]
50 #[serde(rename = "httpResponseHeaders")]
51 pub http_response_headers: Option<i64>,
52 #[serde(default)]
53 #[serde(rename = "httpTotal")]
54 pub http_total: Option<i64>,
55}
56#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
57#[serde(rename = "ignition")]
58pub struct Ignition {
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub config: Option<IgnitionConfig>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub security: Option<Security>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub timeouts: Option<Timeouts>,
65 #[serde(skip_serializing_if = "Option::is_none")]
66 pub version: Option<String>,
67}
68#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
69#[serde(rename = "group")]
70pub struct Group {
71 #[serde(default)]
72 pub gid: Option<i64>,
73 pub name: String,
74 #[serde(default)]
75 #[serde(rename = "passwordHash")]
76 pub password_hash: Option<String>,
77 #[serde(default)]
78 pub system: Option<bool>,
79}
80impl Group {
81 pub fn new(name: String) -> Self {
82 Self {
83 gid: None,
84 name,
85 password_hash: None,
86 system: None,
87 }
88 }
89}
90#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
91#[serde(rename = "user")]
92pub struct User {
93 #[serde(default)]
94 pub gecos: Option<String>,
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub groups: Option<Vec<String>>,
97 #[serde(default)]
98 #[serde(rename = "homeDir")]
99 pub home_dir: Option<String>,
100 pub name: String,
101 #[serde(default)]
102 #[serde(rename = "noCreateHome")]
103 pub no_create_home: Option<bool>,
104 #[serde(default)]
105 #[serde(rename = "noLogInit")]
106 pub no_log_init: Option<bool>,
107 #[serde(default)]
108 #[serde(rename = "noUserGroup")]
109 pub no_user_group: Option<bool>,
110 #[serde(default)]
111 #[serde(rename = "passwordHash")]
112 pub password_hash: Option<String>,
113 #[serde(default)]
114 #[serde(rename = "primaryGroup")]
115 pub primary_group: Option<String>,
116 #[serde(default)]
117 pub shell: Option<String>,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 #[serde(rename = "sshAuthorizedKeys")]
120 pub ssh_authorized_keys: Option<Vec<String>>,
121 #[serde(default)]
122 pub system: Option<bool>,
123 #[serde(default)]
124 pub uid: Option<i64>,
125}
126impl User {
127 pub fn new(name: String) -> Self {
128 Self {
129 gecos: None,
130 groups: None,
131 home_dir: None,
132 name,
133 no_create_home: None,
134 no_log_init: None,
135 no_user_group: None,
136 password_hash: None,
137 primary_group: None,
138 shell: None,
139 ssh_authorized_keys: None,
140 system: None,
141 uid: None,
142 }
143 }
144}
145#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
146#[serde(rename = "passwd")]
147pub struct Passwd {
148 #[serde(skip_serializing_if = "Option::is_none")]
149 pub groups: Option<Vec<Group>>,
150 #[serde(skip_serializing_if = "Option::is_none")]
151 pub users: Option<Vec<User>>,
152}
153#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
154#[serde(rename = "directory")]
155pub struct Directory {
156 #[serde(skip_serializing_if = "Option::is_none")]
157 pub group: Option<NodeGroup>,
158 #[serde(default)]
159 pub mode: Option<i64>,
160 #[serde(default)]
161 pub overwrite: Option<bool>,
162 pub path: String,
163 #[serde(skip_serializing_if = "Option::is_none")]
164 pub user: Option<NodeUser>,
165}
166impl Directory {
167 pub fn new(path: String) -> Self {
168 Self {
169 group: None,
170 mode: None,
171 overwrite: None,
172 path,
173 user: None,
174 }
175 }
176}
177#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
178#[serde(rename = "disk")]
179pub struct Disk {
180 pub device: String,
181 #[serde(skip_serializing_if = "Option::is_none")]
182 pub partitions: Option<Vec<Partition>>,
183 #[serde(default)]
184 #[serde(rename = "wipeTable")]
185 pub wipe_table: Option<bool>,
186}
187impl Disk {
188 pub fn new(device: String) -> Self {
189 Self {
190 device,
191 partitions: None,
192 wipe_table: None,
193 }
194 }
195}
196#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
197#[serde(rename = "file")]
198pub struct File {
199 #[serde(skip_serializing_if = "Option::is_none")]
200 pub append: Option<Vec<FileContents>>,
201 #[serde(skip_serializing_if = "Option::is_none")]
202 pub contents: Option<FileContents>,
203 #[serde(skip_serializing_if = "Option::is_none")]
204 pub group: Option<NodeGroup>,
205 #[serde(default)]
206 pub mode: Option<i64>,
207 #[serde(default)]
208 pub overwrite: Option<bool>,
209 pub path: String,
210 #[serde(skip_serializing_if = "Option::is_none")]
211 pub user: Option<NodeUser>,
212}
213impl File {
214 pub fn new(path: String) -> Self {
215 Self {
216 append: None,
217 contents: None,
218 group: None,
219 mode: None,
220 overwrite: None,
221 path,
222 user: None,
223 }
224 }
225}
226#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
227#[serde(rename = "file-contents")]
228pub struct FileContents {
229 #[serde(default)]
230 pub compression: Option<String>,
231 #[serde(default)]
232 pub source: Option<String>,
233 #[serde(skip_serializing_if = "Option::is_none")]
234 pub verification: Option<Verification>,
235}
236#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
237#[serde(rename = "filesystem")]
238pub struct Filesystem {
239 pub device: String,
240 #[serde(default)]
241 pub format: Option<String>,
242 #[serde(default)]
243 pub label: Option<String>,
244 #[serde(skip_serializing_if = "Option::is_none")]
245 pub options: Option<Vec<String>>,
246 #[serde(default)]
247 pub path: Option<String>,
248 #[serde(default)]
249 pub uuid: Option<String>,
250 #[serde(default)]
251 #[serde(rename = "wipeFilesystem")]
252 pub wipe_filesystem: Option<bool>,
253}
254impl Filesystem {
255 pub fn new(device: String) -> Self {
256 Self {
257 device,
258 format: None,
259 label: None,
260 options: None,
261 path: None,
262 uuid: None,
263 wipe_filesystem: None,
264 }
265 }
266}
267#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
268#[serde(rename = "link")]
269pub struct Link {
270 #[serde(skip_serializing_if = "Option::is_none")]
271 pub group: Option<NodeGroup>,
272 #[serde(default)]
273 pub hard: Option<bool>,
274 #[serde(default)]
275 pub overwrite: Option<bool>,
276 pub path: String,
277 pub target: String,
278 #[serde(skip_serializing_if = "Option::is_none")]
279 pub user: Option<NodeUser>,
280}
281impl Link {
282 pub fn new(path: String, target: String) -> Self {
283 Self {
284 group: None,
285 hard: None,
286 overwrite: None,
287 path,
288 target,
289 user: None,
290 }
291 }
292}
293#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
294pub struct NodeGroup {
295 #[serde(default)]
296 pub id: Option<i64>,
297 #[serde(default)]
298 pub name: Option<String>,
299}
300#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
301pub struct NodeUser {
302 #[serde(default)]
303 pub id: Option<i64>,
304 #[serde(default)]
305 pub name: Option<String>,
306}
307#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
308#[serde(rename = "node")]
309pub struct Node {
310 #[serde(skip_serializing_if = "Option::is_none")]
311 pub group: Option<NodeGroup>,
312 #[serde(default)]
313 pub overwrite: Option<bool>,
314 pub path: String,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub user: Option<NodeUser>,
317}
318impl Node {
319 pub fn new(path: String) -> Self {
320 Self {
321 group: None,
322 overwrite: None,
323 path,
324 user: None,
325 }
326 }
327}
328#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
329#[serde(rename = "partition")]
330pub struct Partition {
331 #[serde(default)]
332 pub guid: Option<String>,
333 #[serde(default)]
334 pub label: Option<String>,
335 #[serde(skip_serializing_if = "Option::is_none")]
336 pub number: Option<i64>,
337 #[serde(default)]
338 #[serde(rename = "shouldExist")]
339 pub should_exist: Option<bool>,
340 #[serde(default)]
341 #[serde(rename = "sizeMiB")]
342 pub size_mib: Option<i64>,
343 #[serde(default)]
344 #[serde(rename = "startMiB")]
345 pub start_mib: Option<i64>,
346 #[serde(default)]
347 #[serde(rename = "typeGuid")]
348 pub type_guid: Option<String>,
349 #[serde(default)]
350 #[serde(rename = "wipePartitionEntry")]
351 pub wipe_partition_entry: Option<bool>,
352}
353#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
354#[serde(rename = "raid")]
355pub struct Raid {
356 pub devices: Vec<String>,
357 pub level: String,
358 pub name: String,
359 #[serde(skip_serializing_if = "Option::is_none")]
360 pub options: Option<Vec<String>>,
361 #[serde(default)]
362 pub spares: Option<i64>,
363}
364impl Raid {
365 pub fn new(devices: Vec<String>, level: String, name: String) -> Self {
366 Self {
367 devices,
368 level,
369 name,
370 options: None,
371 spares: None,
372 }
373 }
374}
375#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
376#[serde(rename = "storage")]
377pub struct Storage {
378 #[serde(skip_serializing_if = "Option::is_none")]
379 pub directories: Option<Vec<Directory>>,
380 #[serde(skip_serializing_if = "Option::is_none")]
381 pub disks: Option<Vec<Disk>>,
382 #[serde(skip_serializing_if = "Option::is_none")]
383 pub files: Option<Vec<File>>,
384 #[serde(skip_serializing_if = "Option::is_none")]
385 pub filesystems: Option<Vec<Filesystem>>,
386 #[serde(skip_serializing_if = "Option::is_none")]
387 pub links: Option<Vec<Link>>,
388 #[serde(skip_serializing_if = "Option::is_none")]
389 pub raid: Option<Vec<Raid>>,
390}
391#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
392#[serde(rename = "dropin")]
393pub struct Dropin {
394 #[serde(default)]
395 pub contents: Option<String>,
396 pub name: String,
397}
398impl Dropin {
399 pub fn new(name: String) -> Self {
400 Self {
401 contents: None,
402 name,
403 }
404 }
405}
406#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
407#[serde(rename = "unit")]
408pub struct Unit {
409 #[serde(default)]
410 pub contents: Option<String>,
411 #[serde(skip_serializing_if = "Option::is_none")]
412 pub dropins: Option<Vec<Dropin>>,
413 #[serde(default)]
414 pub enabled: Option<bool>,
415 #[serde(default)]
416 pub mask: Option<bool>,
417 pub name: String,
418}
419impl Unit {
420 pub fn new(name: String) -> Self {
421 Self {
422 contents: None,
423 dropins: None,
424 enabled: None,
425 mask: None,
426 name,
427 }
428 }
429}
430#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
431#[serde(rename = "systemd")]
432pub struct Systemd {
433 #[serde(skip_serializing_if = "Option::is_none")]
434 pub units: Option<Vec<Unit>>,
435}
436#[derive(Clone, PartialEq, Debug, Default, Deserialize, Serialize)]
437#[serde(rename = "verification")]
438pub struct Verification {
439 #[serde(default)]
440 pub hash: Option<String>,
441}
442#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
443pub struct Config {
444 pub ignition: Ignition,
445 #[serde(skip_serializing_if = "Option::is_none")]
446 pub passwd: Option<Passwd>,
447 #[serde(skip_serializing_if = "Option::is_none")]
448 pub storage: Option<Storage>,
449 #[serde(skip_serializing_if = "Option::is_none")]
450 pub systemd: Option<Systemd>,
451}
452impl Config {
453 pub fn new(ignition: Ignition) -> Self {
454 Self {
455 ignition,
456 passwd: None,
457 storage: None,
458 systemd: None,
459 }
460 }
461}