cockroach_deploy 0.1.2

Rust lib for a basic local cockroachdb deployment with optional CLI
Documentation
use anyhow::Result;
use k8s_openapi::api::core::v1::Namespace;
use kube::api::ObjectMeta;
use kube::{Api, Client, Config};
use log::info;

pub(crate) async fn init_namespace(namespace: &str) -> Result<Client> {
    let client = Client::try_default().await?;
    check_namespace(&client, &namespace).await?;
    let mut config = Config::infer().await?;
    config.default_namespace = namespace.to_string();
    let client = Client::try_from(config)?;
    Ok(client)
}

async fn check_namespace(client: &Client, namespace_str: &str) -> Result<()> {
    let namespaces: Api<Namespace> = Api::all(client.clone());
    let namespace_struct = Namespace {
        metadata: ObjectMeta {
            name: Some(namespace_str.to_string()),
            ..Default::default()
        },
        ..Default::default()
    };
    match namespaces.get(namespace_str).await {
        Ok(_) => {
            info!(
                "{} already exists, skipping namespace creation",
                &namespace_str
            );
            return Ok(());
        }
        Err(_) => {
            namespaces
                .create(&Default::default(), &namespace_struct)
                .await?;
            info!("successfully created {} namespace", &namespace_str)
        }
    }

    Ok(())
}