use kube::CustomResource;
use super::*;
pub use common::*;
pub use condition::*;
pub use ip_family::ClusterIpFamily;
pub use ip_family::InvalidIpFamily;
pub use phase::ClusterPhase;
mod common;
mod condition;
mod impls;
mod ip_family;
mod phase;
pub const CLUSTER_FINALIZER: &str = "cluster.cluster.x-k8s.io";
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize, CustomResource)]
#[serde(rename_all = "camelCase")]
#[kube(
group = "cluster.x-k8s.io",
version = "v1beta1",
kind = "Cluster",
plural = "clusters",
shortname = "cl",
status = "ClusterStatus"
)]
#[kube(namespaced)]
#[kube(schema = "disabled")]
pub struct ClusterSpec {
pub paused: Option<bool>,
pub cluster_network: Option<ClusterNetwork>,
pub control_plane_endpoint: Option<ApiEndpoint>,
pub control_plane_ref: Option<corev1::ObjectReference>,
pub infrastructure_ref: Option<corev1::ObjectReference>,
pub topology: Option<Topology>,
}
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Topology {
pub class: String,
pub version: String,
pub rollout_after: Option<metav1::Time>,
pub control_plane: Option<ControlPlaneTopology>,
pub workers: Option<WorkersTopology>,
pub variables: Option<Vec<ClusterVariable>>,
}
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct ControlPlaneTopology {
pub metadata: Option<ObjectMeta>,
pub replicas: Option<i32>,
}
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WorkersTopology {
pub machine_deployments: Option<Vec<MachineDeploymentTopology>>,
}
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct MachineDeploymentTopology {
pub metadata: Option<ObjectMeta>,
pub class: String,
pub name: String,
pub replicas: Option<i32>,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct ClusterVariable {
pub name: String,
pub value: apiextensionsv1::JSON,
}
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClusterNetwork {
pub api_server_port: Option<i32>,
pub services: Option<NetworkRanges>,
pub pods: Option<NetworkRanges>,
pub service_domain: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct NetworkRanges {
pub cidr_blocks: Vec<String>,
}
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClusterStatus {
pub failure_domains: Option<FailureDomains>,
pub failure_reason: Option<capierrors::ClusterStatusError>,
pub failure_message: Option<String>,
pub phase: Option<ClusterPhase>,
pub infrastructure_ready: Option<bool>,
pub control_plane_ready: Option<bool>,
pub conditions: Option<Conditions>,
pub observed_generation: i64,
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct ApiEndpoint {
pub host: String,
pub port: i32,
}
pub type FailureDomains = BTreeMap<String, FailureDomainSpec>;
#[skip_serializing_none]
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct FailureDomainSpec {
pub control_plane: Option<bool>,
pub attributes: Option<BTreeMap<String, String>>,
}
#[cfg(test)]
mod tests;