diff --git a/src/checks/kubelet_version.rs b/src/checks/kubelet_version.rs new file mode 100644 index 0000000..c2268e1 --- /dev/null +++ b/src/checks/kubelet_version.rs @@ -0,0 +1,40 @@ +use anyhow::anyhow; +use serde_derive::{Deserialize, Serialize}; +use std::process::Command; +use which::which; + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Version { + #[serde(rename = "kubeletVersion")] + pub kubelet_version: KubeletVersion, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct KubeletVersion { + pub major: String, + pub minor: String, +} + +pub fn check() -> anyhow::Result { + match which("kubelet") { + Err(_) => return Err(anyhow!("Couldn't find kubelet")), + Ok(kubectl) => { + let mut output = match Command::new(kubelet) + .arg("version") + .output() + { + Ok(c) => c, + Err(_) => return Err(anyhow!("Failed to execute kubelet")), + }; + + let stdout = String::from_utf8(output.stdout).expect("msg"); + + let version: Version = match serde_json::from_str(stdout.as_str()) { + Err(e) => return Err(anyhow!("kubelet failed to get version: {}", e)), + Ok(v) => v, + }; + + return Ok(version); + } + } +} \ No newline at end of file diff --git a/src/checks/mod.rs b/src/checks/mod.rs index ae3c5eb..90401ca 100644 --- a/src/checks/mod.rs +++ b/src/checks/mod.rs @@ -1 +1,2 @@ pub mod cli_version; +pub mod kubelet_version; \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index dea9bea..20a65c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,4 +10,14 @@ fn main() { "✅ kubectl version {}.{}", cli_version.client_version.major, cli_version.client_version.minor ); + + let kubelet_version = match checks::kubelet_version::check() { + Ok(c) => c, + Err(e) => panic!("❌ Failed to check kubelet version: {}", e") + }; + + println!( + "✅ kubelet version {}.{}", + kubelet_version.kubelet_version.major, kubelet_version.kubelet_version.minor + ); }