Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/checks/kubelet_version.rs
Original file line number Diff line number Diff line change
@@ -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<Version> {
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);
}
}
}
1 change: 1 addition & 0 deletions src/checks/mod.rs
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
pub mod cli_version;
pub mod kubelet_version;
10 changes: 10 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
);
}