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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
use super::*;
pub trait EnvVarExt {
fn value(name: impl ToString, value: impl ToString) -> Self;
fn metadata_name(name: impl ToString) -> Self;
fn metadata_namespace(name: impl ToString) -> Self;
fn metadata_uid(name: impl ToString) -> Self;
fn spec_nodename(name: impl ToString) -> Self;
fn spec_service_account_name(name: impl ToString) -> Self;
fn status_host_ip(name: impl ToString) -> Self;
fn status_pod_ip(name: impl ToString) -> Self;
fn status_pod_ips(name: impl ToString) -> Self;
fn field_ref(name: impl ToString, field_path: impl ToString) -> Self;
}
impl EnvVarExt for corev1::EnvVar {
fn value(name: impl ToString, value: impl ToString) -> Self {
let name = name.to_string();
let value = Some(value.to_string());
Self {
name,
value,
value_from: None,
}
}
fn metadata_name(name: impl ToString) -> Self {
Self::field_ref(name, "metadata.name")
}
fn metadata_namespace(name: impl ToString) -> Self {
Self::field_ref(name, "metadata.namespace")
}
fn metadata_uid(name: impl ToString) -> Self {
Self::field_ref(name, "metadata.uid")
}
fn spec_nodename(name: impl ToString) -> Self {
Self::field_ref(name, "spec.nodeName")
}
fn spec_service_account_name(name: impl ToString) -> Self {
Self::field_ref(name, "spec.serviceAccountName")
}
fn status_host_ip(name: impl ToString) -> Self {
Self::field_ref(name, "status.hostIP")
}
fn status_pod_ip(name: impl ToString) -> Self {
Self::field_ref(name, "status.podIP")
}
fn status_pod_ips(name: impl ToString) -> Self {
Self::field_ref(name, "status.podIPs")
}
fn field_ref(name: impl ToString, field_path: impl ToString) -> Self {
let name = name.to_string();
let field_ref = corev1::ObjectFieldSelector {
api_version: None,
field_path: field_path.to_string(),
};
let source = corev1::EnvVarSource {
field_ref: Some(field_ref),
..default()
};
Self {
name,
value: None,
value_from: Some(source),
}
}
}
pub trait ToEnvVar {
fn to_envvar(&self) -> corev1::EnvVar;
}
impl ToEnvVar for corev1::EnvVar {
fn to_envvar(&self) -> corev1::EnvVar {
self.clone()
}
}
impl<T, U> ToEnvVar for (T, U)
where
T: std::fmt::Display,
U: std::fmt::Display,
{
fn to_envvar(&self) -> corev1::EnvVar {
let (ref name, ref value) = *self;
corev1::EnvVar::value(name, value)
}
}
pub trait ToEnvFrom {
fn to_envfrom(self) -> corev1::EnvFromSource;
}
impl ToEnvFrom for corev1::SecretEnvSource {
fn to_envfrom(self) -> corev1::EnvFromSource {
corev1::EnvFromSource {
secret_ref: Some(self),
..default()
}
}
}
impl ToEnvFrom for corev1::ConfigMapEnvSource {
fn to_envfrom(self) -> corev1::EnvFromSource {
corev1::EnvFromSource {
config_map_ref: Some(self),
..default()
}
}
}