2个版本

0.1.1 2022年7月28日
0.1.0 2022年7月28日

#18#事件源


用于 knative-eventing

Apache-2.0

41KB
739 代码行

Knative

Knative 和 Knative Eventing 自定义资源定义和对象的 Rust 实现,利用 kube-rs

此实现是不完整的,应被视为预alpha版本。它仅包含完整规范的一小部分。

目前,您可以使用此crate根据knative的期望管理自定义事件源 CustomResource 的状态。

use schemars::JsonSchema;
use serde::{Serialize, Deserialize};
use kube::{Api, CustomResource, Resource, ResourceExt};
use kube::runtime::controller::{Action, Context};
use knative::source_types::{
    SourceSpec,
    SourceStatus,
    SourceCondition,
    SinkManager,
};
use std::sync::Arc;

#[derive(Serialize, Deserialize, CustomResource, Clone, Debug, JsonSchema)]
#[kube(group = "mysource.dev", version = "v1", kind = "MySource", status = "MySourceStatus", namespaced)]
struct MySourceSpec {
    #[serde(flatten)]
    source_spec: SourceSpec,
}

#[derive(Serialize, Deserialize, Debug, Clone, JsonSchema)]
struct MySourceStatus {
    #[serde(flatten)]
    source_status: SourceStatus<SourceCondition>,
}

#[derive(Clone)]
struct Data {
    client: kube::Client,
}

async fn reconcile(my_resource: Arc<MySource>, ctx: Context<Data>) -> Result<Action, kube::Error> {
    let client = ctx.get_ref().client.clone();
    let api = Api::<MySource>::namespaced(
        client.clone(),
        my_resource.namespace().as_ref().unwrap()
    );
    let mut resource = api.get_status(&my_resource.name()).await?;

    if let Some(ref mut status) = resource.status {
        status.source_status.mark_sink("http://hardcoded-sink".parse().unwrap());

        // ...set the K_SINK environment variable on the receive-adapter that this controller manages

        // ...patch the new status with the api
    }

    Ok(Action::requeue(std::time::Duration::from_secs( 60 * 60)))
}

此外,此crate的参考用法目前仍在进行中!

依赖关系

~52MB
~796K SLoC