k8s_openapi_ext/ext/
env.rs

1use super::*;
2
3/// Builders for `corev1::EnvVar` objects
4pub trait EnvVarExt {
5    /// Set an env var `name` with a given `value`
6    fn value(name: impl ToString, value: impl ToString) -> Self;
7    /// Set an env var `name` that points to a pod's name
8    fn metadata_name(name: impl ToString) -> Self;
9    fn metadata_namespace(name: impl ToString) -> Self;
10    fn metadata_uid(name: impl ToString) -> Self;
11    // metadata.labels\['\<KEY\>'\], metadata.annotations\['\<KEY\>'\],
12    /// Set an env var `name` that points to the node which this pod was requested to scheduled on
13    fn spec_nodename(name: impl ToString) -> Self;
14    /// Set an env var `name` that points to the requested ServiceAccountName for this pod
15    fn spec_service_account_name(name: impl ToString) -> Self;
16    fn status_host_ip(name: impl ToString) -> Self;
17    fn status_pod_ip(name: impl ToString) -> Self;
18    fn status_pod_ips(name: impl ToString) -> Self;
19    /// Set an env var `name` that points to the selected field in the pod
20    fn field_ref(name: impl ToString, field_path: impl ToString) -> Self;
21}
22
23impl EnvVarExt for corev1::EnvVar {
24    fn value(name: impl ToString, value: impl ToString) -> Self {
25        let name = name.to_string();
26        let value = Some(value.to_string());
27        Self {
28            name,
29            value,
30            value_from: None,
31        }
32    }
33
34    fn metadata_name(name: impl ToString) -> Self {
35        Self::field_ref(name, "metadata.name")
36    }
37
38    fn metadata_namespace(name: impl ToString) -> Self {
39        Self::field_ref(name, "metadata.namespace")
40    }
41
42    fn metadata_uid(name: impl ToString) -> Self {
43        Self::field_ref(name, "metadata.uid")
44    }
45
46    fn spec_nodename(name: impl ToString) -> Self {
47        Self::field_ref(name, "spec.nodeName")
48    }
49
50    fn spec_service_account_name(name: impl ToString) -> Self {
51        Self::field_ref(name, "spec.serviceAccountName")
52    }
53
54    fn status_host_ip(name: impl ToString) -> Self {
55        Self::field_ref(name, "status.hostIP")
56    }
57    fn status_pod_ip(name: impl ToString) -> Self {
58        Self::field_ref(name, "status.podIP")
59    }
60    fn status_pod_ips(name: impl ToString) -> Self {
61        Self::field_ref(name, "status.podIPs")
62    }
63
64    fn field_ref(name: impl ToString, field_path: impl ToString) -> Self {
65        let name = name.to_string();
66        let field_ref = corev1::ObjectFieldSelector {
67            api_version: None,
68            field_path: field_path.to_string(),
69        };
70        let source = corev1::EnvVarSource {
71            field_ref: Some(field_ref),
72            ..default()
73        };
74        Self {
75            name,
76            value: None,
77            value_from: Some(source),
78        }
79    }
80}
81
82pub trait ToEnvVar {
83    fn to_envvar(&self) -> corev1::EnvVar;
84}
85
86impl ToEnvVar for corev1::EnvVar {
87    fn to_envvar(&self) -> corev1::EnvVar {
88        self.clone()
89    }
90}
91
92impl<T, U> ToEnvVar for (T, U)
93where
94    T: fmt::Display,
95    U: fmt::Display,
96{
97    fn to_envvar(&self) -> corev1::EnvVar {
98        let (ref name, ref value) = *self;
99        corev1::EnvVar::value(name, value)
100    }
101}
102
103pub trait ToEnvFrom {
104    fn to_envfrom(self) -> corev1::EnvFromSource;
105}
106
107impl ToEnvFrom for corev1::SecretEnvSource {
108    fn to_envfrom(self) -> corev1::EnvFromSource {
109        corev1::EnvFromSource {
110            secret_ref: Some(self),
111            ..default()
112        }
113    }
114}
115
116impl ToEnvFrom for corev1::ConfigMapEnvSource {
117    fn to_envfrom(self) -> corev1::EnvFromSource {
118        corev1::EnvFromSource {
119            config_map_ref: Some(self),
120            ..default()
121        }
122    }
123}