Skip to content

Commit 837881f

Browse files
authored
feat: Support serviceOverrides on the ListenerClass (#365)
* test: Add kuttl test for objectOverrides * feat: Support serviceOverride on the ListenerClass * Update to op-rs 0.104.0 * changelog
1 parent b184ac6 commit 837881f

14 files changed

Lines changed: 135 additions & 32 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file.
88

99
- Support objectOverrides using `.spec.objectOverrides` on the `Listener`.
1010
See [objectOverrides concepts page](https://docs.stackable.tech/home/nightly/concepts/overrides/#object-overrides) for details ([#364]).
11+
- Support serviceOverrides using `.spec.serviceOverrides` on the `ListenerClass` ([#365]).
1112

1213
### Changed
1314

@@ -20,6 +21,7 @@ All notable changes to this project will be documented in this file.
2021
[#360]: https://github.com/stackabletech/listener-operator/pull/360
2122
[#363]: https://github.com/stackabletech/listener-operator/pull/363
2223
[#364]: https://github.com/stackabletech/listener-operator/pull/364
24+
[#365]: https://github.com/stackabletech/listener-operator/pull/365
2325

2426
## [25.11.0] - 2025-11-07
2527

Cargo.lock

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.nix

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ edition = "2021"
1010
repository = "https://github.com/stackabletech/listener-operator"
1111

1212
[workspace.dependencies]
13-
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.102.0", features = ["telemetry", "versioned"] }
13+
stackable-operator = { git = "https://github.com/stackabletech/operator-rs.git", tag = "stackable-operator-0.104.0", features = ["telemetry", "versioned"] }
1414

1515
anyhow = "1.0"
1616
built = { version = "0.8", features = ["chrono", "git2"] }

crate-hashes.json

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/helm/listener-operator/crds/crds.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,20 @@ spec:
9191
- Local
9292
nullable: true
9393
type: string
94+
serviceOverrides:
95+
default:
96+
apiVersion: v1
97+
kind: Service
98+
metadata: {}
99+
description: |-
100+
In the `serviceOverrides` property you can define a
101+
[Service](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#service-v1-core)
102+
to override any property that can be set on a Kubernetes Service.
103+
104+
This mechanism is similar to the `podOverrides`, which are documented in the
105+
[Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides).
106+
type: object
107+
x-kubernetes-preserve-unknown-fields: true
94108
serviceType:
95109
description: The method used to access the services.
96110
enum:

rust/operator-binary/src/listener_controller.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use stackable_operator::{
1717
crd::listener,
1818
iter::TryFromIterator,
1919
k8s_openapi::{
20+
DeepMerge,
2021
api::core::v1::{Endpoints, Node, PersistentVolume, Service, ServicePort, ServiceSpec},
2122
apimachinery::pkg::apis::meta::v1::LabelSelector,
2223
},
@@ -348,7 +349,7 @@ pub async fn reconcile(
348349
}
349350
};
350351

351-
let svc = Service {
352+
let mut svc = Service {
352353
metadata: ObjectMetaBuilder::new()
353354
.namespace(ns)
354355
.name(&svc_name)
@@ -402,6 +403,12 @@ pub async fn reconcile(
402403
}),
403404
..Default::default()
404405
};
406+
407+
// The overrides need to come last!
408+
svc.merge_from(listener_class.spec.service_overrides.clone());
409+
// Prevent accidental further modification by removing mutability
410+
let svc = svc;
411+
405412
let svc_ref = ObjectRef::from_obj(&svc);
406413
let svc = cluster_resources
407414
.add(&ctx.client, svc)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{% if test_scenario['values']['openshift'] == 'true' %}
2+
# see https://github.com/stackabletech/issues/issues/566
3+
---
4+
apiVersion: kuttl.dev/v1beta1
5+
kind: TestStep
6+
commands:
7+
- script: kubectl patch namespace $NAMESPACE -p '{"metadata":{"labels":{"pod-security.kubernetes.io/enforce":"privileged"}}}'
8+
timeout: 120
9+
{% endif %}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
apiVersion: kuttl.dev/v1beta1
3+
kind: TestStep
4+
commands:
5+
- script: envsubst '$NAMESPACE' < 05_listenerclass.yaml | kubectl apply -n $NAMESPACE -f -
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
apiVersion: listeners.stackable.tech/v1alpha1
3+
kind: ListenerClass
4+
metadata:
5+
name: listener-operator-test-overrides-$NAMESPACE
6+
spec:
7+
serviceType: ClusterIP
8+
serviceAnnotations:
9+
deprecated: was here
10+
winner: deprecated
11+
serviceOverrides:
12+
metadata:
13+
annotations:
14+
serviceOverrides: was here
15+
winner: serviceOverrides
16+
spec:
17+
sessionAffinity: ClientIP

0 commit comments

Comments
 (0)