kubus 0.2.0

Derive based kubernetes operator framework
Documentation
use std::{sync::Arc, time::Duration};

use k8s_openapi::api::core::v1::Pod;
use kube::{Client, ResourceExt, runtime::controller::Action};
use kubus::{Operator, Result, kubus};

struct Context {
    _things: Vec<i32>,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::try_default().await?;
    let context = Context { _things: vec![] };

    Operator::with_client(client, context)
        .handler(apply_pod)
        .handler(cleanup_pod)
        .run()
        .await?;

    Ok(())
}

#[kubus(event = Apply, finalizer = "kubus.io/cleanup")]
async fn apply_pod(pod: Arc<Pod>, _ctx: Arc<Context>) -> Result<Action> {
    let name = pod.name_unchecked();
    let namespace = pod.namespace().unwrap();

    println!("apply event for pod {name} in {namespace}");

    Ok(Action::requeue(Duration::from_secs(5)))
}

#[kubus(event = Delete, finalizer = "kubus.io/cleanup")]
async fn cleanup_pod(pod: Arc<Pod>, _ctx: Arc<Context>) -> Result<Action> {
    let name = pod.name_unchecked();
    let namespace = pod.namespace().unwrap();

    println!("delete event for pod {name} in {namespace}");

    Ok(Action::requeue(Duration::from_secs(5)))
}