#[allow(unused_imports)]
mod prelude {
pub use kube::CustomResource;
pub use serde::{Serialize, Deserialize};
pub use std::collections::BTreeMap;
pub use k8s_openapi::apimachinery::pkg::util::intstr::IntOrString;
pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition;
}
use self::prelude::*;
#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, PartialEq)]
#[kube(group = "flagger.app", version = "v1beta1", kind = "Canary", plural = "canaries")]
#[kube(namespaced)]
#[kube(status = "CanaryStatus")]
#[kube(schema = "disabled")]
#[kube(derive="PartialEq")]
pub struct CanarySpec {
pub analysis: CanaryAnalysis,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "autoscalerRef")]
pub autoscaler_ref: Option<CanaryAutoscalerRef>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "ingressRef")]
pub ingress_ref: Option<CanaryIngressRef>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "metricsServer")]
pub metrics_server: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "progressDeadlineSeconds")]
pub progress_deadline_seconds: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "revertOnDeletion")]
pub revert_on_deletion: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "routeRef")]
pub route_ref: Option<CanaryRouteRef>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service: Option<CanaryService>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "skipAnalysis")]
pub skip_analysis: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suspend: Option<bool>,
#[serde(rename = "targetRef")]
pub target_ref: CanaryTargetRef,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "upstreamRef")]
pub upstream_ref: Option<CanaryUpstreamRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysis {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub alerts: Option<Vec<CanaryAnalysisAlerts>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "canaryReadyThreshold")]
pub canary_ready_threshold: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub interval: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub iterations: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "match")]
pub r#match: Option<Vec<CanaryAnalysisMatch>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxWeight")]
pub max_weight: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metrics: Option<Vec<CanaryAnalysisMetrics>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mirror: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "mirrorWeight")]
pub mirror_weight: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "primaryReadyThreshold")]
pub primary_ready_threshold: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinity")]
pub session_affinity: Option<CanaryAnalysisSessionAffinity>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "stepWeight")]
pub step_weight: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "stepWeightPromotion")]
pub step_weight_promotion: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "stepWeights")]
pub step_weights: Option<Vec<f64>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub threshold: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub webhooks: Option<Vec<CanaryAnalysisWebhooks>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisAlerts {
pub name: String,
#[serde(rename = "providerRef")]
pub provider_ref: CanaryAnalysisAlertsProviderRef,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub severity: Option<CanaryAnalysisAlertsSeverity>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisAlertsProviderRef {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryAnalysisAlertsSeverity {
#[serde(rename = "")]
KopiumEmpty,
#[serde(rename = "info")]
Info,
#[serde(rename = "warn")]
Warn,
#[serde(rename = "error")]
Error,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisMatch {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub headers: Option<BTreeMap<String, CanaryAnalysisMatchHeaders>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "queryParams")]
pub query_params: Option<BTreeMap<String, CanaryAnalysisMatchQueryParams>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")]
pub source_labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisMatchHeaders {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub suffix: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisMatchQueryParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisMetrics {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub interval: Option<String>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub query: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "templateRef")]
pub template_ref: Option<CanaryAnalysisMetricsTemplateRef>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "templateVariables")]
pub template_variables: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub threshold: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "thresholdRange")]
pub threshold_range: Option<CanaryAnalysisMetricsThresholdRange>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisMetricsTemplateRef {
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisMetricsThresholdRange {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min: Option<f64>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisSessionAffinity {
#[serde(rename = "cookieName")]
pub cookie_name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[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<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub partitioned: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "primaryCookieName")]
pub primary_cookie_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sameSite")]
pub same_site: Option<CanaryAnalysisSessionAffinitySameSite>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub secure: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryAnalysisSessionAffinitySameSite {
Strict,
Lax,
None,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAnalysisWebhooks {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "disableTLS")]
pub disable_tls: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "muteAlert")]
pub mute_alert: Option<bool>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub retries: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub timeout: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
pub r#type: Option<CanaryAnalysisWebhooksType>,
pub url: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryAnalysisWebhooksType {
#[serde(rename = "")]
KopiumEmpty,
#[serde(rename = "confirm-rollout")]
ConfirmRollout,
#[serde(rename = "pre-rollout")]
PreRollout,
#[serde(rename = "rollout")]
Rollout,
#[serde(rename = "confirm-promotion")]
ConfirmPromotion,
#[serde(rename = "post-rollout")]
PostRollout,
#[serde(rename = "event")]
Event,
#[serde(rename = "rollback")]
Rollback,
#[serde(rename = "confirm-traffic-increase")]
ConfirmTrafficIncrease,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct CanaryAutoscalerRef {
#[serde(rename = "apiVersion")]
pub api_version: String,
pub kind: CanaryAutoscalerRefKind,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "primaryScalerQueries")]
pub primary_scaler_queries: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "primaryScalerReplicas")]
pub primary_scaler_replicas: Option<CanaryAutoscalerRefPrimaryScalerReplicas>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryAutoscalerRefKind {
HorizontalPodAutoscaler,
ScaledObject,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryAutoscalerRefPrimaryScalerReplicas {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxReplicas")]
pub max_replicas: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "minReplicas")]
pub min_replicas: Option<i64>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct CanaryIngressRef {
#[serde(rename = "apiVersion")]
pub api_version: String,
pub kind: CanaryIngressRefKind,
pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryIngressRefKind {
Ingress,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct CanaryRouteRef {
#[serde(rename = "apiVersion")]
pub api_version: String,
pub kind: CanaryRouteRefKind,
pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryRouteRefKind {
ApisixRoute,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryService {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub apex: Option<CanaryServiceApex>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "appProtocol")]
pub app_protocol: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub backends: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub canary: Option<CanaryServiceCanary>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "corsPolicy")]
pub cors_policy: Option<CanaryServiceCorsPolicy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub delegation: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "gatewayRefs")]
pub gateway_refs: Option<Vec<CanaryServiceGatewayRefs>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub gateways: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub headers: Option<CanaryServiceHeaders>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub headless: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub hosts: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "match")]
pub r#match: Option<Vec<CanaryServiceMatch>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "meshName")]
pub mesh_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mirror: Option<Vec<CanaryServiceMirror>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
pub port: f64,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "portDiscovery")]
pub port_discovery: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "portName")]
pub port_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub primary: Option<CanaryServicePrimary>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub retries: Option<CanaryServiceRetries>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub rewrite: Option<CanaryServiceRewrite>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "targetPort")]
pub target_port: Option<IntOrString>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub timeout: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "trafficDistribution")]
pub traffic_distribution: Option<CanaryServiceTrafficDistribution>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "trafficPolicy")]
pub traffic_policy: Option<CanaryServiceTrafficPolicy>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "unmanagedMetadata")]
pub unmanaged_metadata: Option<CanaryServiceUnmanagedMetadata>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceApex {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub annotations: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceCanary {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub annotations: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceCorsPolicy {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "allowCredentials")]
pub allow_credentials: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "allowHeaders")]
pub allow_headers: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "allowMethods")]
pub allow_methods: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "allowOrigin")]
pub allow_origin: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "allowOrigins")]
pub allow_origins: Option<Vec<CanaryServiceCorsPolicyAllowOrigins>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "exposeHeaders")]
pub expose_headers: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxAge")]
pub max_age: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceCorsPolicyAllowOrigins {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceGatewayRefs {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub group: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub port: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sectionName")]
pub section_name: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceHeaders {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub request: Option<CanaryServiceHeadersRequest>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub response: Option<CanaryServiceHeadersResponse>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceHeadersRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub add: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub remove: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub set: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceHeadersResponse {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub add: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub remove: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub set: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMatch {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authority: Option<CanaryServiceMatchAuthority>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub gateways: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub headers: Option<BTreeMap<String, CanaryServiceMatchHeaders>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "ignoreUriCase")]
pub ignore_uri_case: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub method: Option<CanaryServiceMatchMethod>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub port: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "queryParams")]
pub query_params: Option<BTreeMap<String, CanaryServiceMatchQueryParams>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scheme: Option<CanaryServiceMatchScheme>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceLabels")]
pub source_labels: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sourceNamespace")]
pub source_namespace: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub uri: Option<CanaryServiceMatchUri>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "withoutHeaders")]
pub without_headers: Option<BTreeMap<String, CanaryServiceMatchWithoutHeaders>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMatchAuthority {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMatchHeaders {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMatchMethod {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMatchQueryParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMatchScheme {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMatchUri {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMatchWithoutHeaders {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub exact: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub prefix: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub regex: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMirror {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "backendRef")]
pub backend_ref: Option<CanaryServiceMirrorBackendRef>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceMirrorBackendRef {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub group: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kind: Option<String>,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub port: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServicePrimary {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub annotations: Option<BTreeMap<String, String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub labels: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceRetries {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub attempts: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "perTryTimeout")]
pub per_try_timeout: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "retryOn")]
pub retry_on: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceRewrite {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub authority: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
pub r#type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub uri: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryServiceTrafficDistribution {
PreferClose,
PreferSameZone,
PreferSameNode,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicy {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "connectionPool")]
pub connection_pool: Option<CanaryServiceTrafficPolicyConnectionPool>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "loadBalancer")]
pub load_balancer: Option<CanaryServiceTrafficPolicyLoadBalancer>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "outlierDetection")]
pub outlier_detection: Option<CanaryServiceTrafficPolicyOutlierDetection>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tls: Option<CanaryServiceTrafficPolicyTls>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyConnectionPool {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub http: Option<CanaryServiceTrafficPolicyConnectionPoolHttp>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyConnectionPoolHttp {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "h2UpgradePolicy")]
pub h2_upgrade_policy: Option<CanaryServiceTrafficPolicyConnectionPoolHttpH2UpgradePolicy>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "http1MaxPendingRequests")]
pub http1_max_pending_requests: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "http2MaxRequests")]
pub http2_max_requests: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "idleTimeout")]
pub idle_timeout: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxRequestsPerConnection")]
pub max_requests_per_connection: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxRetries")]
pub max_retries: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryServiceTrafficPolicyConnectionPoolHttpH2UpgradePolicy {
#[serde(rename = "DEFAULT")]
Default,
#[serde(rename = "DO_NOT_UPGRADE")]
DoNotUpgrade,
#[serde(rename = "UPGRADE")]
Upgrade,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyLoadBalancer {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "consistentHash")]
pub consistent_hash: Option<CanaryServiceTrafficPolicyLoadBalancerConsistentHash>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "localityLbSetting")]
pub locality_lb_setting: Option<CanaryServiceTrafficPolicyLoadBalancerLocalityLbSetting>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub simple: Option<CanaryServiceTrafficPolicyLoadBalancerSimple>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "warmupDurationSecs")]
pub warmup_duration_secs: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyLoadBalancerConsistentHash {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "httpCookie")]
pub http_cookie: Option<CanaryServiceTrafficPolicyLoadBalancerConsistentHashHttpCookie>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "httpHeaderName")]
pub http_header_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "httpQueryParameterName")]
pub http_query_parameter_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "minimumRingSize")]
pub minimum_ring_size: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "useSourceIp")]
pub use_source_ip: Option<bool>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyLoadBalancerConsistentHashHttpCookie {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ttl: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyLoadBalancerLocalityLbSetting {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub distribute: Option<Vec<CanaryServiceTrafficPolicyLoadBalancerLocalityLbSettingDistribute>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub failover: Option<Vec<CanaryServiceTrafficPolicyLoadBalancerLocalityLbSettingFailover>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyLoadBalancerLocalityLbSettingDistribute {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub to: Option<BTreeMap<String, i64>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyLoadBalancerLocalityLbSettingFailover {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub to: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryServiceTrafficPolicyLoadBalancerSimple {
#[serde(rename = "ROUND_ROBIN")]
RoundRobin,
#[serde(rename = "LEAST_CONN")]
LeastConn,
#[serde(rename = "RANDOM")]
Random,
#[serde(rename = "PASSTHROUGH")]
Passthrough,
#[serde(rename = "LEAST_REQUEST")]
LeastRequest,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyOutlierDetection {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "baseEjectionTime")]
pub base_ejection_time: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "consecutive5xxErrors")]
pub consecutive5xx_errors: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "consecutiveErrors")]
pub consecutive_errors: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "consecutiveGatewayErrors")]
pub consecutive_gateway_errors: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub interval: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "maxEjectionPercent")]
pub max_ejection_percent: Option<i32>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "minHealthPercent")]
pub min_health_percent: Option<i32>,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceTrafficPolicyTls {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "caCertificates")]
pub ca_certificates: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "clientCertificate")]
pub client_certificate: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mode: Option<CanaryServiceTrafficPolicyTlsMode>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "privateKey")]
pub private_key: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sni: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "subjectAltNames")]
pub subject_alt_names: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryServiceTrafficPolicyTlsMode {
#[serde(rename = "DISABLE")]
Disable,
#[serde(rename = "SIMPLE")]
Simple,
#[serde(rename = "MUTUAL")]
Mutual,
#[serde(rename = "ISTIO_MUTUAL")]
IstioMutual,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryServiceUnmanagedMetadata {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub annotations: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub labels: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct CanaryTargetRef {
#[serde(rename = "apiVersion")]
pub api_version: String,
pub kind: CanaryTargetRefKind,
pub name: String,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryTargetRefKind {
DaemonSet,
Deployment,
Service,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub struct CanaryUpstreamRef {
#[serde(rename = "apiVersion")]
pub api_version: String,
pub kind: CanaryUpstreamRefKind,
pub name: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub namespace: Option<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryUpstreamRefKind {
Upstream,
}
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct CanaryStatus {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "canaryWeight")]
pub canary_weight: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub conditions: Option<Vec<Condition>>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "failedChecks")]
pub failed_checks: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub iterations: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "lastAppliedSpec")]
pub last_applied_spec: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "lastPromotedSpec")]
pub last_promoted_spec: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "lastTransitionTime")]
pub last_transition_time: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub phase: Option<CanaryStatusPhase>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "previousSessionAffinityCookie")]
pub previous_session_affinity_cookie: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "primarySessionAffinityCookie")]
pub primary_session_affinity_cookie: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "sessionAffinityCookie")]
pub session_affinity_cookie: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none", rename = "trackedConfigs")]
pub tracked_configs: Option<BTreeMap<String, String>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum CanaryStatusPhase {
#[serde(rename = "")]
KopiumEmpty,
Initializing,
Initialized,
Waiting,
Progressing,
WaitingPromotion,
Promoting,
Finalising,
Succeeded,
Failed,
Terminating,
Terminated,
}