use anyhow::Result;
use clap::Parser;
use kube::Client;
use tracing::info;
use tracing_subscriber::{EnvFilter, fmt, prelude::*};
mod reconciler;
#[derive(Parser)]
#[command(name = "caixa-operator", version)]
struct Args {
#[arg(long, env = "CAIXA_WATCH_NAMESPACE", default_value = "")]
namespace: String,
#[arg(long, default_value = "text")]
log: String,
#[arg(long)]
oneshot: bool,
}
#[tokio::main]
async fn main() -> Result<()> {
let args = Args::parse();
init_tracing(&args.log);
info!(
version = env!("CARGO_PKG_VERSION"),
"caixa-operator starting"
);
let client = Client::try_default().await?;
reconciler::run(client, &args.namespace, args.oneshot).await?;
Ok(())
}
fn init_tracing(fmt_mode: &str) {
let filter =
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info,kube=warn"));
let registry = tracing_subscriber::registry().with(filter);
if fmt_mode == "json" {
registry.with(fmt::layer().json()).init();
} else {
registry.with(fmt::layer().compact()).init();
}
}