k8s_openapi_ext/get/
deployment.rs

1use super::*;
2
3pub trait DeploymentGetExt {
4    fn spec(&self) -> Option<&appsv1::DeploymentSpec>;
5
6    fn status(&self) -> Option<&appsv1::DeploymentStatus>;
7
8    // From spec
9
10    fn min_ready_seconds(&self) -> Option<i32> {
11        self.spec()?.min_ready_seconds
12    }
13
14    fn paused(&self) -> Option<bool> {
15        self.spec()?.paused
16    }
17
18    fn progress_deadline_seconds(&self) -> Option<i32> {
19        self.spec()?.progress_deadline_seconds
20    }
21
22    fn revision_history_limit(&self) -> Option<i32> {
23        self.spec()?.revision_history_limit
24    }
25
26    fn selector(&self) -> Option<&metav1::LabelSelector> {
27        self.spec().map(|spec| &spec.selector)
28    }
29
30    fn strategy(&self) -> Option<&appsv1::DeploymentStrategy> {
31        self.spec()?.strategy.as_ref()
32    }
33
34    fn template(&self) -> Option<&corev1::PodTemplateSpec> {
35        self.spec().map(|spec| &spec.template)
36    }
37
38    fn spec_replicas(&self) -> Option<i32> {
39        self.spec()?.replicas
40    }
41
42    // From status
43    fn conditions(&self) -> Option<&[appsv1::DeploymentCondition]> {
44        self.status()?.conditions.as_deref()
45    }
46
47    fn status_replicas(&self) -> Option<i32> {
48        self.status()?.replicas
49    }
50
51    fn available_replicas(&self) -> Option<i32> {
52        self.status()?.available_replicas
53    }
54
55    fn ready_replicas(&self) -> Option<i32> {
56        self.status()?.ready_replicas
57    }
58
59    fn unavailable_replicas(&self) -> Option<i32> {
60        self.status()?.unavailable_replicas
61    }
62
63    fn updated_replicas(&self) -> Option<i32> {
64        self.status()?.updated_replicas
65    }
66
67    fn collision_count(&self) -> Option<i32> {
68        self.status()?.collision_count
69    }
70
71    fn observed_generation(&self) -> Option<i64> {
72        self.status()?.observed_generation
73    }
74
75    // Shortcuts
76    fn containers(&self) -> Option<&[corev1::Container]> {
77        self.template()?.containers()
78    }
79
80    fn port_by_name(&self, name: impl AsRef<str>) -> Option<&corev1::ContainerPort> {
81        let name = name.as_ref();
82        self.containers()?
83            .iter()
84            .find_map(|container| container.port_by_name(name))
85    }
86}
87
88impl DeploymentGetExt for appsv1::Deployment {
89    fn spec(&self) -> Option<&appsv1::DeploymentSpec> {
90        self.spec.as_ref()
91    }
92
93    fn status(&self) -> Option<&appsv1::DeploymentStatus> {
94        self.status.as_ref()
95    }
96}
97
98impl DeploymentGetExt for appsv1::DeploymentSpec {
99    fn spec(&self) -> Option<&appsv1::DeploymentSpec> {
100        Some(self)
101    }
102
103    fn status(&self) -> Option<&appsv1::DeploymentStatus> {
104        None
105    }
106}
107
108impl DeploymentGetExt for appsv1::DeploymentStatus {
109    fn spec(&self) -> Option<&appsv1::DeploymentSpec> {
110        None
111    }
112
113    fn status(&self) -> Option<&appsv1::DeploymentStatus> {
114        Some(self)
115    }
116}