1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
use std::fmt;
use std::fmt::Formatter;
use serde::{Deserialize, Serialize};
use crate::core::models::{Container, Env, Labels, MatchLabels, Selector, Spec, Template, TemplateSpec, Metadata};
#[derive(Serialize, Deserialize, PartialEq, Debug)]
pub struct DaemonSet {
#[serde(rename = "apiVersion")]
api_version: String,
kind: String,
metadata: Metadata,
spec: Spec
}
impl fmt::Display for DaemonSet {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{}", serde_yml::to_string(self).unwrap())
}
}
impl DaemonSet {
pub fn new(name: String, image: String) -> DaemonSet {
DaemonSet {
api_version: "apps/v1".to_string(),
kind: "DaemonSet".to_string(),
metadata: Metadata {
name: name.clone(),
labels: Labels {
name: name.clone()
}
},
spec: Spec {
replicas: 1,
selector: Selector {
match_labels: MatchLabels {
name: name.clone()
}
},
template: Template {
metadata: Metadata {
labels: Labels {
name: name.clone()
},
name: name.clone(),
},
spec: TemplateSpec {
containers: vec![
Container {
name: name.clone(),
image,
env: vec![
Env {
name: "TEST_VAR".to_string(),
value: "asdasd".to_string(),
}
],
ports: vec![],
volume_mounts: vec![]
}
],
}
},
},
}
}
}