From 325dbbc97f53e1ce459ff7ac50c5b827bad2114c Mon Sep 17 00:00:00 2001 From: Gabriel Goller Date: Wed, 29 Nov 2023 14:29:00 +0100 Subject: [PATCH] node: status: declutter kernel-version Return a struct with all the components of the kernel version like it has been done in pve. Also return the legacy `kversion` to keep backwards compat. Signed-off-by: Gabriel Goller Tested-by: Lukas Wagner --- pbs-api-types/src/node.rs | 40 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/pbs-api-types/src/node.rs b/pbs-api-types/src/node.rs index ab626157..c4e9a179 100644 --- a/pbs-api-types/src/node.rs +++ b/pbs-api-types/src/node.rs @@ -1,3 +1,5 @@ +use std::ffi::OsStr; + use proxmox_schema::*; use serde::{Deserialize, Serialize}; @@ -38,6 +40,40 @@ pub struct NodeInformation { pub fingerprint: String, } +#[api] +#[derive(Serialize, Deserialize, Default)] +#[serde(rename_all = "lowercase")] +/// The current kernel version (output of `uname`) +pub struct KernelVersionInformation { + /// The systemname/nodename + pub sysname: String, + /// The kernel release number + pub release: String, + /// The kernel version + pub version: String, + /// The machine architecture + pub machine: String, +} + +impl KernelVersionInformation { + pub fn from_uname_parts( + sysname: &OsStr, + release: &OsStr, + version: &OsStr, + machine: &OsStr, + ) -> Self { + KernelVersionInformation { + sysname: sysname.to_str().map(String::from).unwrap_or_default(), + release: release.to_str().map(String::from).unwrap_or_default(), + version: version.to_str().map(String::from).unwrap_or_default(), + machine: machine.to_str().map(String::from).unwrap_or_default(), + } + } + + pub fn get_legacy(&self) -> String { + format!("{} {} {}", self.sysname, self.release, self.version) + } +} #[api] #[derive(Serialize, Deserialize, Copy, Clone)] @@ -111,7 +147,9 @@ pub struct NodeStatus { pub uptime: u64, /// Load for 1, 5 and 15 minutes. pub loadavg: [f64; 3], - /// The current kernel version. + /// The current kernel version (NEW struct type). + pub current_kernel: KernelVersionInformation, + /// The current kernel version (LEGACY string type). pub kversion: String, /// Total CPU usage since last query. pub cpu: f64,