diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 7ca4e6e50..10e204d3c 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- Add `serviceOverrides` field of type `Service` to `ListenerClass.spec.serviceOverrides` ([#1142]). + +### Changed + +- BREAKING: `ListenerClassSpec` no longer implements `Eq` ([#1142]). + +[#1142]: https://github.com/stackabletech/operator-rs/pull/1142 + ## [0.103.0] - 2026-01-16 ### Changed diff --git a/crates/stackable-operator/crds/DummyCluster.yaml b/crates/stackable-operator/crds/DummyCluster.yaml index 655d1c30c..f6fcee01b 100644 --- a/crates/stackable-operator/crds/DummyCluster.yaml +++ b/crates/stackable-operator/crds/DummyCluster.yaml @@ -407,7 +407,7 @@ spec: default: {} description: |- In the `podOverrides` property you can define a - [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core) + [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core) to override any property that can be set on a Kubernetes Pod. Read the [Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides) @@ -695,7 +695,7 @@ spec: default: {} description: |- In the `podOverrides` property you can define a - [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core) + [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core) to override any property that can be set on a Kubernetes Pod. Read the [Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides) diff --git a/crates/stackable-operator/crds/ListenerClass.yaml b/crates/stackable-operator/crds/ListenerClass.yaml index 0e87e2b65..bdff6976a 100644 --- a/crates/stackable-operator/crds/ListenerClass.yaml +++ b/crates/stackable-operator/crds/ListenerClass.yaml @@ -89,6 +89,20 @@ spec: - Local nullable: true type: string + serviceOverrides: + default: + apiVersion: v1 + kind: Service + metadata: {} + description: |- + In the `serviceOverrides` property you can define a + [Service](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#service-v1-core) + to override any property that can be set on a Kubernetes Service. + + This mechanism is similar to the `podOverrides`, which are documented in the + [Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides). + type: object + x-kubernetes-preserve-unknown-fields: true serviceType: description: The method used to access the services. enum: diff --git a/crates/stackable-operator/src/crd/listener/class/mod.rs b/crates/stackable-operator/src/crd/listener/class/mod.rs index dd4e9e550..505a29605 100644 --- a/crates/stackable-operator/src/crd/listener/class/mod.rs +++ b/crates/stackable-operator/src/crd/listener/class/mod.rs @@ -7,26 +7,26 @@ use std::collections::BTreeMap; -#[cfg(doc)] use k8s_openapi::api::core::v1::Service; use kube::CustomResource; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use stackable_versioned::versioned; -use crate::crd::listener::core::v1alpha1 as core_v1alpha1; #[cfg(doc)] use crate::crd::listener::listeners::v1alpha1::Listener; +use crate::{crd::listener::core::v1alpha1 as core_v1alpha1, utils::crds::raw_object_schema}; mod v1alpha1_impl; #[versioned(version(name = "v1alpha1"))] pub mod versioned { + /// Defines a policy for how [Listeners](DOCS_BASE_URL_PLACEHOLDER/listener-operator/listener) should be exposed. /// Read the [ListenerClass documentation](DOCS_BASE_URL_PLACEHOLDER/listener-operator/listenerclass) /// for more information. #[versioned(crd(group = "listeners.stackable.tech"))] - #[derive(CustomResource, Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq, Eq)] + #[derive(CustomResource, Serialize, Deserialize, Clone, Debug, JsonSchema, PartialEq)] #[serde(rename_all = "camelCase")] pub struct ListenerClassSpec { pub service_type: core_v1alpha1::ServiceType, @@ -93,5 +93,15 @@ pub mod versioned { /// Because of this we don't enable pinning by default to support all environments. #[serde(default)] pub pinned_node_ports: bool, + + /// In the `serviceOverrides` property you can define a + /// [Service](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#service-v1-core) + /// to override any property that can be set on a Kubernetes Service. + /// + /// This mechanism is similar to the `podOverrides`, which are documented in the + /// [Pod overrides documentation](DOCS_BASE_URL_PLACEHOLDER/concepts/overrides#pod-overrides). + #[serde(default)] + #[schemars(schema_with = "raw_object_schema")] + pub service_overrides: Service, } } diff --git a/crates/stackable-operator/src/role_utils.rs b/crates/stackable-operator/src/role_utils.rs index 704b81a02..b82bd6623 100644 --- a/crates/stackable-operator/src/role_utils.rs +++ b/crates/stackable-operator/src/role_utils.rs @@ -152,7 +152,7 @@ pub struct CommonConfiguration { pub cli_overrides: BTreeMap, /// In the `podOverrides` property you can define a - /// [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core) + /// [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podtemplatespec-v1-core) /// to override any property that can be set on a Kubernetes Pod. /// Read the /// [Pod overrides documentation](DOCS_BASE_URL_PLACEHOLDER/concepts/overrides#pod-overrides)