use clap::Args;
use super::*;
#[derive(Clone, Debug, Default, Args)]
pub struct KubeapiOptions {
#[arg(long, global = true)]
pub cache_dir: Option<PathBuf>,
#[arg(long = "as", global = true)]
pub as_user: Option<String>,
#[arg(long, global = true)]
pub as_group: Option<Vec<String>>,
#[arg(long, global = true)]
pub as_uid: Option<String>,
}
impl KubeapiOptions {
pub fn cache_dir(&self) -> PathBuf {
self.cache_dir
.clone()
.or_else(|| etcetera::home_dir().ok())
.unwrap_or_default()
.join(".kube")
.join("cache")
}
pub fn discovery_cache_for_config(
&self,
config: &kube::Config,
) -> Result<PathBuf, kube::config::KubeconfigError> {
config
.cluster_url
.host()
.map(|server| self.cache_dir().join("discovery").join(server))
.ok_or(kube::config::KubeconfigError::MissingClusterUrl)
}
}
#[derive(Clone, Debug, Default, Args)]
pub struct KubeConfigOptions {
#[arg(long, global = true)]
pub cluster: Option<String>,
#[arg(long, global = true)]
pub context: Option<String>,
#[arg(long, global = true)]
pub user: Option<String>,
}
impl KubeConfigOptions {
pub fn kube_config_options(&self) -> kube::config::KubeConfigOptions {
kube::config::KubeConfigOptions {
context: self.context.clone(),
cluster: self.cluster.clone(),
user: self.user.clone(),
}
}
}