kcr_jetstream_nats_io 3.20260118.103134

Kubernetes Custom Resource Bindings
Documentation
// WARNING: generated by kopium - manual changes will be overwritten
// kopium command: kopium --docs --derive=Default --derive=PartialEq --smart-derive-elision --filename crd-catalog/nats-io/nack/jetstream.nats.io/v1beta2/keyvalues.yaml
// kopium version: 0.22.5

#[allow(unused_imports)]
mod prelude {
    pub use kube::CustomResource;
    pub use serde::{Serialize, Deserialize};
    pub use k8s_openapi::apimachinery::pkg::apis::meta::v1::Condition;
}
use self::prelude::*;

#[derive(CustomResource, Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
#[kube(group = "jetstream.nats.io", version = "v1beta2", kind = "KeyValue", plural = "keyvalues")]
#[kube(namespaced)]
#[kube(status = "KeyValueStatus")]
#[kube(schema = "disabled")]
#[kube(derive="Default")]
#[kube(derive="PartialEq")]
pub struct KeyValueSpec {
    /// Name of the account to which the Stream belongs.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub account: Option<String>,
    /// A unique name for the KV Store.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub bucket: Option<String>,
    /// KV Store compression.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub compression: Option<bool>,
    /// NATS user credentials for connecting to servers. Please make sure your controller has mounted the creds on its path.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub creds: Option<String>,
    /// The description of the KV Store.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    /// The number of historical values to keep per key.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub history: Option<i64>,
    /// The JetStream domain to use for the KV store.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "jsDomain")]
    pub js_domain: Option<String>,
    /// LimitMarkerTTL is how long the bucket keeps markers when keys are removed by the TTL setting, 0 meaning markers are not supported
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "limitMarkerTtl")]
    pub limit_marker_ttl: Option<i64>,
    /// The maximum size of the KV Store in bytes.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxBytes")]
    pub max_bytes: Option<i64>,
    /// The maximum size of a value in bytes.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "maxValueSize")]
    pub max_value_size: Option<i64>,
    /// A KV Store mirror.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub mirror: Option<KeyValueMirror>,
    /// NATS user NKey for connecting to servers.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub nkey: Option<String>,
    /// The KV Store placement via tags or cluster name.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub placement: Option<KeyValuePlacement>,
    /// When true, the managed KV Store will not be deleted when the resource is deleted.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preventDelete")]
    pub prevent_delete: Option<bool>,
    /// When true, the managed KV Store will not be updated when the resource is updated.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "preventUpdate")]
    pub prevent_update: Option<bool>,
    /// The number of replicas to keep for the KV Store in clustered JetStream.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub replicas: Option<i64>,
    /// Republish configuration for the KV Store.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub republish: Option<KeyValueRepublish>,
    /// A list of servers for creating the KV Store.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub servers: Option<Vec<String>>,
    /// A KV Store's sources.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub sources: Option<Vec<KeyValueSources>>,
    /// The storage backend to use for the KV Store.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub storage: Option<KeyValueStorage>,
    /// A client's TLS certs and keys.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tls: Option<KeyValueTls>,
    /// When true, the KV Store will initiate TLS before server INFO.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "tlsFirst")]
    pub tls_first: Option<bool>,
    /// The time expiry for keys.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub ttl: Option<String>,
}

/// A KV Store mirror.
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct KeyValueMirror {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalApiPrefix")]
    pub external_api_prefix: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalDeliverPrefix")]
    pub external_deliver_prefix: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterSubject")]
    pub filter_subject: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "optStartSeq")]
    pub opt_start_seq: Option<i64>,
    /// Time format must be RFC3339.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "optStartTime")]
    pub opt_start_time: Option<String>,
    /// List of subject transforms for this mirror.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "subjectTransforms")]
    pub subject_transforms: Option<Vec<KeyValueMirrorSubjectTransforms>>,
}

/// A subject transform pair.
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct KeyValueMirrorSubjectTransforms {
    /// Destination subject.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dest: Option<String>,
    /// Source subject.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub source: Option<String>,
}

/// The KV Store placement via tags or cluster name.
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct KeyValuePlacement {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub cluster: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub tags: Option<Vec<String>>,
}

/// Republish configuration for the KV Store.
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct KeyValueRepublish {
    /// Messages will be additionally published to this subject after Bucket.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub destination: Option<String>,
    /// Messages will be published from this subject to the destination subject.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub source: Option<String>,
}

#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct KeyValueSources {
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalApiPrefix")]
    pub external_api_prefix: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "externalDeliverPrefix")]
    pub external_deliver_prefix: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "filterSubject")]
    pub filter_subject: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "optStartSeq")]
    pub opt_start_seq: Option<i64>,
    /// Time format must be RFC3339.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "optStartTime")]
    pub opt_start_time: Option<String>,
    /// List of subject transforms for this mirror.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "subjectTransforms")]
    pub subject_transforms: Option<Vec<KeyValueSourcesSubjectTransforms>>,
}

/// A subject transform pair.
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct KeyValueSourcesSubjectTransforms {
    /// Destination subject.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dest: Option<String>,
    /// Source subject.
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub source: Option<String>,
}

#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum KeyValueStorage {
    #[serde(rename = "file")]
    File,
    #[serde(rename = "memory")]
    Memory,
}

/// A client's TLS certs and keys.
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct KeyValueTls {
    /// A client's cert filepath. Should be mounted.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientCert")]
    pub client_cert: Option<String>,
    /// A client's key filepath. Should be mounted.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "clientKey")]
    pub client_key: Option<String>,
    /// A list of filepaths to CAs. Should be mounted.
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "rootCas")]
    pub root_cas: Option<Vec<String>>,
}

#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
pub struct KeyValueStatus {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub conditions: Option<Vec<Condition>>,
    #[serde(default, skip_serializing_if = "Option::is_none", rename = "observedGeneration")]
    pub observed_generation: Option<i64>,
}