1#[derive(Clone, Debug, Default, PartialEq)]
5pub struct NodeSystemInfo {
6 pub architecture: std::string::String,
8
9 pub boot_id: std::string::String,
11
12 pub container_runtime_version: std::string::String,
14
15 pub kernel_version: std::string::String,
17
18 pub kube_proxy_version: std::string::String,
20
21 pub kubelet_version: std::string::String,
23
24 pub machine_id: std::string::String,
26
27 pub operating_system: std::string::String,
29
30 pub os_image: std::string::String,
32
33 pub swap: Option<crate::api::core::v1::NodeSwapStatus>,
35
36 pub system_uuid: std::string::String,
38}
39
40impl crate::DeepMerge for NodeSystemInfo {
41 fn merge_from(&mut self, other: Self) {
42 crate::DeepMerge::merge_from(&mut self.architecture, other.architecture);
43 crate::DeepMerge::merge_from(&mut self.boot_id, other.boot_id);
44 crate::DeepMerge::merge_from(&mut self.container_runtime_version, other.container_runtime_version);
45 crate::DeepMerge::merge_from(&mut self.kernel_version, other.kernel_version);
46 crate::DeepMerge::merge_from(&mut self.kube_proxy_version, other.kube_proxy_version);
47 crate::DeepMerge::merge_from(&mut self.kubelet_version, other.kubelet_version);
48 crate::DeepMerge::merge_from(&mut self.machine_id, other.machine_id);
49 crate::DeepMerge::merge_from(&mut self.operating_system, other.operating_system);
50 crate::DeepMerge::merge_from(&mut self.os_image, other.os_image);
51 crate::DeepMerge::merge_from(&mut self.swap, other.swap);
52 crate::DeepMerge::merge_from(&mut self.system_uuid, other.system_uuid);
53 }
54}
55
56impl<'de> crate::serde::Deserialize<'de> for NodeSystemInfo {
57 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
58 #[allow(non_camel_case_types)]
59 enum Field {
60 Key_architecture,
61 Key_boot_id,
62 Key_container_runtime_version,
63 Key_kernel_version,
64 Key_kube_proxy_version,
65 Key_kubelet_version,
66 Key_machine_id,
67 Key_operating_system,
68 Key_os_image,
69 Key_swap,
70 Key_system_uuid,
71 Other,
72 }
73
74 impl<'de> crate::serde::Deserialize<'de> for Field {
75 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: crate::serde::Deserializer<'de> {
76 struct Visitor;
77
78 impl crate::serde::de::Visitor<'_> for Visitor {
79 type Value = Field;
80
81 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
82 f.write_str("field identifier")
83 }
84
85 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: crate::serde::de::Error {
86 Ok(match v {
87 "architecture" => Field::Key_architecture,
88 "bootID" => Field::Key_boot_id,
89 "containerRuntimeVersion" => Field::Key_container_runtime_version,
90 "kernelVersion" => Field::Key_kernel_version,
91 "kubeProxyVersion" => Field::Key_kube_proxy_version,
92 "kubeletVersion" => Field::Key_kubelet_version,
93 "machineID" => Field::Key_machine_id,
94 "operatingSystem" => Field::Key_operating_system,
95 "osImage" => Field::Key_os_image,
96 "swap" => Field::Key_swap,
97 "systemUUID" => Field::Key_system_uuid,
98 _ => Field::Other,
99 })
100 }
101 }
102
103 deserializer.deserialize_identifier(Visitor)
104 }
105 }
106
107 struct Visitor;
108
109 impl<'de> crate::serde::de::Visitor<'de> for Visitor {
110 type Value = NodeSystemInfo;
111
112 fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
113 f.write_str("NodeSystemInfo")
114 }
115
116 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error> where A: crate::serde::de::MapAccess<'de> {
117 let mut value_architecture: Option<std::string::String> = None;
118 let mut value_boot_id: Option<std::string::String> = None;
119 let mut value_container_runtime_version: Option<std::string::String> = None;
120 let mut value_kernel_version: Option<std::string::String> = None;
121 let mut value_kube_proxy_version: Option<std::string::String> = None;
122 let mut value_kubelet_version: Option<std::string::String> = None;
123 let mut value_machine_id: Option<std::string::String> = None;
124 let mut value_operating_system: Option<std::string::String> = None;
125 let mut value_os_image: Option<std::string::String> = None;
126 let mut value_swap: Option<crate::api::core::v1::NodeSwapStatus> = None;
127 let mut value_system_uuid: Option<std::string::String> = None;
128
129 while let Some(key) = crate::serde::de::MapAccess::next_key::<Field>(&mut map)? {
130 match key {
131 Field::Key_architecture => value_architecture = crate::serde::de::MapAccess::next_value(&mut map)?,
132 Field::Key_boot_id => value_boot_id = crate::serde::de::MapAccess::next_value(&mut map)?,
133 Field::Key_container_runtime_version => value_container_runtime_version = crate::serde::de::MapAccess::next_value(&mut map)?,
134 Field::Key_kernel_version => value_kernel_version = crate::serde::de::MapAccess::next_value(&mut map)?,
135 Field::Key_kube_proxy_version => value_kube_proxy_version = crate::serde::de::MapAccess::next_value(&mut map)?,
136 Field::Key_kubelet_version => value_kubelet_version = crate::serde::de::MapAccess::next_value(&mut map)?,
137 Field::Key_machine_id => value_machine_id = crate::serde::de::MapAccess::next_value(&mut map)?,
138 Field::Key_operating_system => value_operating_system = crate::serde::de::MapAccess::next_value(&mut map)?,
139 Field::Key_os_image => value_os_image = crate::serde::de::MapAccess::next_value(&mut map)?,
140 Field::Key_swap => value_swap = crate::serde::de::MapAccess::next_value(&mut map)?,
141 Field::Key_system_uuid => value_system_uuid = crate::serde::de::MapAccess::next_value(&mut map)?,
142 Field::Other => { let _: crate::serde::de::IgnoredAny = crate::serde::de::MapAccess::next_value(&mut map)?; },
143 }
144 }
145
146 Ok(NodeSystemInfo {
147 architecture: value_architecture.unwrap_or_default(),
148 boot_id: value_boot_id.unwrap_or_default(),
149 container_runtime_version: value_container_runtime_version.unwrap_or_default(),
150 kernel_version: value_kernel_version.unwrap_or_default(),
151 kube_proxy_version: value_kube_proxy_version.unwrap_or_default(),
152 kubelet_version: value_kubelet_version.unwrap_or_default(),
153 machine_id: value_machine_id.unwrap_or_default(),
154 operating_system: value_operating_system.unwrap_or_default(),
155 os_image: value_os_image.unwrap_or_default(),
156 swap: value_swap,
157 system_uuid: value_system_uuid.unwrap_or_default(),
158 })
159 }
160 }
161
162 deserializer.deserialize_struct(
163 "NodeSystemInfo",
164 &[
165 "architecture",
166 "bootID",
167 "containerRuntimeVersion",
168 "kernelVersion",
169 "kubeProxyVersion",
170 "kubeletVersion",
171 "machineID",
172 "operatingSystem",
173 "osImage",
174 "swap",
175 "systemUUID",
176 ],
177 Visitor,
178 )
179 }
180}
181
182impl crate::serde::Serialize for NodeSystemInfo {
183 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: crate::serde::Serializer {
184 let mut state = serializer.serialize_struct(
185 "NodeSystemInfo",
186 10 +
187 self.swap.as_ref().map_or(0, |_| 1),
188 )?;
189 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "architecture", &self.architecture)?;
190 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "bootID", &self.boot_id)?;
191 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "containerRuntimeVersion", &self.container_runtime_version)?;
192 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kernelVersion", &self.kernel_version)?;
193 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kubeProxyVersion", &self.kube_proxy_version)?;
194 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "kubeletVersion", &self.kubelet_version)?;
195 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "machineID", &self.machine_id)?;
196 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "operatingSystem", &self.operating_system)?;
197 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "osImage", &self.os_image)?;
198 if let Some(value) = &self.swap {
199 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "swap", value)?;
200 }
201 crate::serde::ser::SerializeStruct::serialize_field(&mut state, "systemUUID", &self.system_uuid)?;
202 crate::serde::ser::SerializeStruct::end(state)
203 }
204}
205
206#[cfg(feature = "schemars")]
207impl crate::schemars::JsonSchema for NodeSystemInfo {
208 fn schema_name() -> std::borrow::Cow<'static, str> {
209 "io.k8s.api.core.v1.NodeSystemInfo".into()
210 }
211
212 fn json_schema(__gen: &mut crate::schemars::SchemaGenerator) -> crate::schemars::Schema {
213 crate::schemars::json_schema!({
214 "description": "NodeSystemInfo is a set of ids/uuids to uniquely identify the node.",
215 "type": "object",
216 "properties": {
217 "architecture": {
218 "description": "The Architecture reported by the node",
219 "type": "string",
220 },
221 "bootID": {
222 "description": "Boot ID reported by the node.",
223 "type": "string",
224 },
225 "containerRuntimeVersion": {
226 "description": "ContainerRuntime Version reported by the node through runtime remote API (e.g. containerd://1.4.2).",
227 "type": "string",
228 },
229 "kernelVersion": {
230 "description": "Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).",
231 "type": "string",
232 },
233 "kubeProxyVersion": {
234 "description": "Deprecated: KubeProxy Version reported by the node.",
235 "type": "string",
236 },
237 "kubeletVersion": {
238 "description": "Kubelet Version reported by the node.",
239 "type": "string",
240 },
241 "machineID": {
242 "description": "MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html",
243 "type": "string",
244 },
245 "operatingSystem": {
246 "description": "The Operating System reported by the node",
247 "type": "string",
248 },
249 "osImage": {
250 "description": "OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).",
251 "type": "string",
252 },
253 "swap": ({
254 let mut schema_obj = __gen.subschema_for::<crate::api::core::v1::NodeSwapStatus>();
255 schema_obj.ensure_object().insert("description".into(), "Swap Info reported by the node.".into());
256 schema_obj
257 }),
258 "systemUUID": {
259 "description": "SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid",
260 "type": "string",
261 },
262 },
263 "required": [
264 "architecture",
265 "bootID",
266 "containerRuntimeVersion",
267 "kernelVersion",
268 "kubeProxyVersion",
269 "kubeletVersion",
270 "machineID",
271 "operatingSystem",
272 "osImage",
273 "systemUUID",
274 ],
275 })
276 }
277}