use kube::CustomResource; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use super::webservice::{Condition, ResourceRequirements}; #[derive(CustomResource, Serialize, Deserialize, Default, Debug, Clone, JsonSchema)] #[kube( group = "irc.now", version = "v1alpha1", kind = "MinioInstance", namespaced, status = "MinioInstanceStatus", shortname = "minio", printcolumn = r#"{"name":"Storage", "type":"string", "jsonPath":".spec.storageSize"}"#, printcolumn = r#"{"name":"Ready", "type":"string", "jsonPath":".status.conditions[?(@.type==\"Ready\")].status"}"# )] pub struct MinioInstanceSpec { #[serde(default = "default_storage_size")] pub storage_size: String, #[serde(default)] pub storage_class_name: Option, pub credentials_secret: String, #[serde(default)] pub resources: Option, } fn default_storage_size() -> String { "10Gi".to_string() } #[derive(Serialize, Deserialize, Default, Debug, Clone, JsonSchema)] pub struct MinioInstanceStatus { #[serde(default)] pub conditions: Vec, #[serde(default)] pub observed_generation: Option, } #[cfg(test)] mod tests { use super::*; use kube::CustomResourceExt; #[test] fn crd_generates_valid_schema() { let crd = MinioInstance::crd(); let name = crd.metadata.name.unwrap(); assert_eq!(name, "minioinstances.irc.now"); } #[test] fn default_storage_size_is_10gi() { let spec: MinioInstanceSpec = serde_json::from_str(r#"{"credentials_secret":"test"}"#).unwrap(); assert_eq!(spec.storage_size, "10Gi"); } }