#[allow(unused_imports)]
mod prelude {
pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString;
pub use kube::CustomResource;
pub use schemars::JsonSchema;
pub use serde::{Deserialize, Serialize};
}
use self::prelude::*;
#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
#[kube(
group = "traefik.io",
version = "v1alpha1",
kind = "IngressRoute",
plural = "ingressroutes"
)]
#[kube(namespaced)]
#[kube(derive = "Default")]
pub struct IngressRouteSpec {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "entryPoints"
)]
pub entry_points: Option<Vec<String>>,
pub routes: Vec<IngressRouteRoutes>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tls: Option<IngressRouteTls>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteRoutes {
pub kind: IngressRouteRoutesKind,
#[serde(rename = "match")]
pub r#match: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub middlewares: Option<Vec<IngressRouteRoutesMiddlewares>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub priority: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub services: Option<Vec<IngressRouteRoutesServices>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub syntax: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema, Default)]
pub enum IngressRouteRoutesKind {
#[default]
Rule,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteRoutesMiddlewares {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteRoutesServices {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<IngressRouteRoutesServicesKind>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "nativeLB")]
pub native_lb: Option<bool>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "passHostHeader"
)]
pub pass_host_header: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub port: Option<IntOrString>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "responseForwarding"
)]
pub response_forwarding: Option<IngressRouteRoutesServicesResponseForwarding>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scheme: Option<String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "serversTransport"
)]
pub servers_transport: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sticky: Option<IngressRouteRoutesServicesSticky>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub strategy: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub weight: Option<i64>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
pub enum IngressRouteRoutesServicesKind {
Service,
TraefikService,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteRoutesServicesResponseForwarding {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "flushInterval"
)]
pub flush_interval: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteRoutesServicesSticky {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cookie: Option<IngressRouteRoutesServicesStickyCookie>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteRoutesServicesStickyCookie {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "httpOnly")]
pub http_only: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxAge")]
pub max_age: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sameSite")]
pub same_site: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub secure: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTls {
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "certResolver"
)]
pub cert_resolver: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub domains: Option<Vec<IngressRouteTlsDomains>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub options: Option<IngressRouteTlsOptions>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
rename = "secretName"
)]
pub secret_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub store: Option<IngressRouteTlsStore>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTlsDomains {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub main: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sans: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTlsOptions {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, JsonSchema)]
pub struct IngressRouteTlsStore {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}