# istio-api-rs A collection of CRDs used in Istio, generated by [`kopium`](https://github.com/kube-rs/kopium) directly from [`istio CRDs`](https://github.com/istio/istio/blob/master/manifests/charts/base/crds/crd-all.gen.yaml). ## Quick Start `istio-api-rs` is built on top of [`kube-rs`](https://github.com/kube-rs/kube-rs) as a set of CRDs, which means it can be easily used under `kube_rs` like below: ```rust use istio_api_rs::networking::v1beta1::{ destination_rule::*, gateway::*, virtual_service::*, }; use kube::{ api::ListParams, client::ConfigExt, Api, Client, Config, }; use hyper_util::rt::TokioExecutor; use tower::{BoxError, ServiceBuilder}; #[tokio::main] async fn main() -> anyhow::Result<()> { let kube_config = Config::infer().await?; let https = kube_config.rustls_https_connector()?; tracing_subscriber::fmt::init(); let service = ServiceBuilder::new() .layer(kube_config.base_uri_layer()) .option_layer(kube_config.auth_layer()?) .map_err(BoxError::from) .service(hyper_util::client::legacy::Client::builder(TokioExecutor::new()).build(https)); let client = Client::new(service, kube_config.default_namespace); let list_opt = ListParams::default(); let gws: Api = Api::namespaced(client.clone(), "default"); for gw in gws.list(&list_opt).await? { println!("Found Gateway: {}", gw.metadata.name.unwrap()); } let drs: Api = Api::namespaced(client.clone(), "default"); for dr in drs.list(&list_opt).await? { println!("Found Destination Rule: {}", dr.metadata.name.unwrap()); } let vss: Api = Api::namespaced(client.clone(), "default"); for vs in vss.list(&list_opt).await? { let content = serde_yaml::to_string(&vs).unwrap(); println!("Found Virtual Service with YAML content: {}", content); } Ok(()) } ``` And in `cargo.toml`, you should specify the API version for both `k8s` & `istio` like: ```toml [dependencies] # ... tokio = { version = "1", features = ["full"] } hyper-util = "0.1.10" tower = "0.5.1" rustls = "0.20" anyhow = "1" serde_yaml = "0.9" tracing-subscriber = "0.3" kube = { version = "0.96", features = ["runtime", "derive"] } k8s-openapi = { version = "0.23", features = ["v1_31"] } istio-api-rs = { version = "0.10.0", features = ["v1_23"] } # ... ``` ## Other `istio-api-rs` is currently developed and tested on istio/api since v1.10, the lower api version is out of this repository's concern. The repository is using [`istio-api-rs-codegen`](https://github.com/BlankZhu/istio-api-rs-codegen) as code generator, go check that repository if you want to know more about how the codes are generated. For release package, see [crates.io](https://crates.io/crates/istio-api-rs).