From a8539a6d94e95cc786e3d88121edd253e4260bb5 Mon Sep 17 00:00:00 2001 From: James Andariese Date: Wed, 1 Nov 2023 19:16:34 -0500 Subject: [PATCH] clean up some defaults further use the default_macro crate (so few downloads!) to remove all those annoying default() calls at the end of every struct. --- Cargo.lock | 7 +++++++ Cargo.toml | 1 + src/main.rs | 45 +++++++++++++++++---------------------------- src/pod_utils.rs | 17 +++++++++++++---- 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2aff529..8e9a9d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -378,6 +378,12 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +[[package]] +name = "default_macro" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75f72a760da9c45f6497260e61e104af5bfb9e9646efa19df2c1b60b8eff425e" + [[package]] name = "digest" version = "0.10.7" @@ -543,6 +549,7 @@ version = "0.1.0" dependencies = [ "anyhow", "clap", + "default_macro", "futures", "humantime", "k8s-openapi", diff --git a/Cargo.toml b/Cargo.toml index ddc0825..210ca55 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,7 @@ categories = ["development-tools", "command-line-utilities"] [dependencies] anyhow = "1.0.75" clap = { version = "4.4.7", features = ["derive", "env"] } +default_macro = "0.2.1" futures = "0.3.29" humantime = "2.1.0" k8s-openapi = { version = "0.20.0", features = ["v1_27"] } diff --git a/src/main.rs b/src/main.rs index 560e665..c3317f1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,6 +25,7 @@ // * config mode (maybe) // * set the pvc storageclass instead +use default_macro::default; use futures::{StreamExt, TryStreamExt}; use k8s::apimachinery::pkg::api::resource::Quantity; use kube_quantity::{ParseQuantityError, ParsedQuantity}; @@ -257,12 +258,11 @@ async fn setup_pod(ctx: &mut AppContext) -> Result<(Api, String)> { if let None = existing_pvc { info!("pvc doesn't exist yet. creating now."); let repo_pvc = PersistentVolumeClaim { - metadata: ObjectMeta{ + metadata: default!(ObjectMeta{ name: Some(kube_pvc.to_owned()), namespace: Some(kube_ns.to_owned()), - ..ObjectMeta::default() - }, - spec: Some(PersistentVolumeClaimSpec { + }), + spec: Some(default!(PersistentVolumeClaimSpec { access_modes: Some(vec!["ReadWriteOnce".to_owned()]), resources: Some(ResourceRequirements { claims: None, @@ -271,11 +271,7 @@ async fn setup_pod(ctx: &mut AppContext) -> Result<(Api, String)> { }), storage_class_name: cfg.storageclass.clone(), volume_mode: Some("Filesystem".to_owned()), - volume_name: None, - data_source: None, - data_source_ref: None, - selector: None, - }), + })), status: None, }; let pp = PostParams::default(); @@ -286,8 +282,8 @@ async fn setup_pod(ctx: &mut AppContext) -> Result<(Api, String)> { // create the worker pod - let worker_pod = Pod{ - metadata: ObjectMeta{ + let worker_pod = default!(Pod{ + metadata: default!(ObjectMeta{ name: Some(kube_worker_name.to_owned()), namespace: Some(kube_ns.to_owned()), labels: Some({ @@ -299,11 +295,10 @@ async fn setup_pod(ctx: &mut AppContext) -> Result<(Api, String)> { } labels }), - ..ObjectMeta::default() - }, - spec: Some(PodSpec { + }), + spec: Some(default!(PodSpec { restart_policy: Some("Never".to_owned()), - containers: vec![Container{ + containers: vec![default!(Container{ name: KUBE_CONTAINER_NAME.to_owned(), command: Some(vec![ kube_shell_executable.to_owned(), @@ -314,30 +309,24 @@ async fn setup_pod(ctx: &mut AppContext) -> Result<(Api, String)> { working_dir: Some(kube_repo_mount_path.to_owned()), image_pull_policy: Some("IfNotPresent".to_owned()), volume_mounts: Some(vec![ - VolumeMount{ + default!(VolumeMount{ mount_path: kube_repo_mount_path.to_owned(), name: "repo".to_owned(), - ..VolumeMount::default() - } + }) ]), - ..Container::default() - }], + })], volumes: Some(vec![ - Volume{ + default!(Volume{ persistent_volume_claim: Some( PersistentVolumeClaimVolumeSource { claim_name: kube_pvc.to_owned(), read_only: Some(false), - ..PersistentVolumeClaimVolumeSource::default() } ), - ..Volume::default() - }, + }), ]), - ..PodSpec::default() - }), - ..Pod::default() - }; + })), + }); let mut lp = ListParams::default(); let mut ls: String = String::with_capacity(kube_pod_labels.len() * 100); diff --git a/src/pod_utils.rs b/src/pod_utils.rs index 60aa002..9a55728 100644 --- a/src/pod_utils.rs +++ b/src/pod_utils.rs @@ -33,7 +33,9 @@ use crate::*; pub trait PodExt { fn label_selectors(&self) -> Vec; + fn label_selector(&self) -> String; fn field_selectors(&self) -> Result>; + fn field_selector(&self) -> Result; } impl PodExt for Pod { @@ -46,6 +48,10 @@ impl PodExt for Pod { selectors } + fn label_selector(&self) -> String { + self.label_selectors().join(",").to_owned() + } + fn field_selectors(&self) -> Result> { Ok(vec![ format!( @@ -64,13 +70,16 @@ impl PodExt for Pod { ), ]) } + + fn field_selector(&self) -> Result { + Ok(self.field_selectors()?.join(",").to_owned()) + } } pub async fn wait_for_pod_running_watch(pods: &Api, pod: Pod) -> Result<()> { - let mut wp = WatchParams::default(); - for fs in pod.field_selectors()? { - wp = wp.fields(&fs); - } + let wp = default!(WatchParams{ + field_selector: Some(pod.field_selector()?), + }); let mut stream = pods.watch(&wp, "0").await?.boxed(); while let Some(status) = stream.try_next().await? { match status {