kopium

CI Crates.io

A kubernetes openapi unmangler.

Creates rust structs from a named crd by converting the live openapi schema.

⚠️ WARNING: ALPHA SOFTWARE ⚠️

Installation

sh cargo install kopium

Usage

sh kopium prometheusrules.monitoring.coreos.com > prometheusrule.rs rustfmt +nightly --edition 2021 prometheusrule.rs

Output

```rust use kube::CustomResource; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap;

[derive(CustomResource, Serialize, Deserialize, Clone, Debug)]

[kube(

group = "monitoring.coreos.com",
version = "v1",
kind = "PrometheusRule",
plural = "prometheusrules"

)]

[kube(namespaced)]

[kube(schema = "disabled")]

pub struct PrometheusRuleSpec { #[serde(default, skipserializingif = "Vec::is_empty")] pub groups: Vec, }

[derive(Serialize, Deserialize, Clone, Debug)]

pub struct PrometheusRuleGroups { pub interval: Option, pub name: String, pub partialresponsestrategy: Option, pub rules: Vec, }

[derive(Serialize, Deserialize, Clone, Debug)]

pub struct PrometheusRuleRules { pub alert: Option, #[serde(default, skipserializingif = "BTreeMap::isempty")] pub annotations: BTreeMap, pub expr: String, pub r#for: Option, #[serde(default, skipserializingif = "BTreeMap::isempty")] pub labels: BTreeMap, pub record: Option, } ```

Testing

Generate a CRD, tell the test runner to try to use it.

sh cargo run --bin kopium -- prometheusrules.monitoring.coreos.com > tests/gen.rs echo "pub type CR = PrometheusRule;" >> tests/gen.rs kubectl apply -f tests/pr.yaml # needs to contain a CR with name "gen" cargo test --test runner -- --nocapture

Requires kubernetes access to write customresourcedefinitions.