From 6b8154ecc620703ddaa38ba3bad8ec36d2fa5b70 Mon Sep 17 00:00:00 2001 From: Marko Mikulicic Date: Tue, 20 Oct 2026 09:46:52 +0200 Subject: [PATCH] fix: add Strimzi KafkaTopic v1 and Istio EnvoyFilter v1alpha3 The existing templates write apiVersions that current releases reject: - kafka.strimzi.io/v1beta2 KafkaTopic: Strimzi 1.0 removed every version older than v1, and Strimzi 1.3.0 only serves v1. - networking.istio.io/v1beta1 EnvoyFilter: Istio (checked 1.31.2) only serves EnvoyFilter as v1alpha3. Add the versions upstream serves. The old ones stay so existing users don't break, with a comment pointing at the new one. Co-Authored-By: Claude Opus 5.5 --- k8s.libsonnet | 24 ++++++++++++++++++++++++ tests/k8s_test.jsonnet | 7 +++++++ 2 files changed, 31 insertions(+) diff --git a/k8s.libsonnet b/k8s.libsonnet index 7dc2b9c..a9ff596 100644 --- a/k8s.libsonnet +++ b/k8s.libsonnet @@ -573,6 +573,16 @@ local kubecfg = import 'kubecfg.libsonnet'; DestinationRule: v.Object { kind: 'DestinationRule', }, + // Istio doesn't serve EnvoyFilter as v1beta1; use v1alpha3.EnvoyFilter. + EnvoyFilter: v.Object { + kind: 'EnvoyFilter', + }, + }, + v1alpha3:: { + local v = self, + Object: group.Object { + apiVersion+: 'v1alpha3', + }, EnvoyFilter: v.Object { kind: 'EnvoyFilter', }, @@ -634,6 +644,7 @@ local kubecfg = import 'kubecfg.libsonnet'; Object:: $.Object { apiVersion: 'kafka.strimzi.io/', }, + // Strimzi before 1.0 only; Strimzi 1.0 removed v1beta2. v1beta2:: { local v = self, Object: group.Object { @@ -647,6 +658,19 @@ local kubecfg = import 'kubecfg.libsonnet'; topicName: error 'required', }, }, + v1:: { + local v = self, + Object: group.Object { + apiVersion+: 'v1', + }, + KafkaTopic: v.Object { + kind: 'KafkaTopic', + spec+: v.KafkaTopicSpec, + }, + KafkaTopicSpec:: { + topicName: error 'required', + }, + }, }, 'rbac.authorization.k8s.io':: { diff --git a/tests/k8s_test.jsonnet b/tests/k8s_test.jsonnet index 40a2d7a..0eefe9d 100644 --- a/tests/k8s_test.jsonnet +++ b/tests/k8s_test.jsonnet @@ -34,6 +34,13 @@ local cron = manifest(k8s.batch.v1.CronJob { }); assert cron.spec.jobTemplate.spec.template.spec.nodeSelector.os == 'linux' : cron; +// add-on kinds use the apiVersion their projects serve today. +local apiOf(t) = manifest(t { metadata+: { name: 'x' } }).apiVersion; +assert apiOf(k8s['kafka.strimzi.io'].v1.KafkaTopic { spec+: { topicName: 't' } }) == 'kafka.strimzi.io/v1'; +assert apiOf(k8s['networking.istio.io'].v1alpha3.EnvoyFilter) == 'networking.istio.io/v1alpha3'; +assert kindOf('kafka.strimzi.io/v1', 'KafkaTopic') == 'KafkaTopic'; +assert kindOf('networking.istio.io/v1alpha3', 'EnvoyFilter') == 'EnvoyFilter'; + // adopt keeps arrays whose elements have no name instead of crashing. local adopted = manifest(k8s.adopt([{ apiVersion: 'apps/v1',