From 33d3c530903242087c44b967af9a87d83a8e6f1c Mon Sep 17 00:00:00 2001 From: Alan Richman Date: Wed, 3 Jun 2026 17:42:13 -0500 Subject: [PATCH] add image transformer for knative serving queue proxy image into config-deployment configmap Signed-off-by: Alan Richman --- pkg/reconciler/common/images.go | 19 +++++++++++ pkg/reconciler/common/images_test.go | 48 ++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/pkg/reconciler/common/images.go b/pkg/reconciler/common/images.go index 18721e6f88..aecdd5e32d 100644 --- a/pkg/reconciler/common/images.go +++ b/pkg/reconciler/common/images.go @@ -43,6 +43,12 @@ var ( delimiter = "/" ) +const ( + configMapDeployment = "config-deployment" + queueSidecarImageKey = "queue-sidecar-image" + queueProxyOverride = "queue-proxy" +) + // ImageTransform updates image with a new registry and tag func ImageTransform(registry *base.Registry, log *zap.SugaredLogger) mf.Transformer { return func(u *unstructured.Unstructured) error { @@ -51,6 +57,10 @@ func ImageTransform(registry *base.Registry, log *zap.SugaredLogger) mf.Transfor return updateCachingImage(registry, u, log) } + if u.GetKind() == "ConfigMap" && u.GetName() == configMapDeployment { + return updateQueueProxyImage(registry, u, log) + } + // Handle all resources that contain a PodSpec. var podSpec *corev1.PodSpec var obj metav1.Object @@ -182,6 +192,15 @@ func updateCachingImage(registry *base.Registry, u *unstructured.Unstructured, l return nil } +func updateQueueProxyImage(registry *base.Registry, u *unstructured.Unstructured, log *zap.SugaredLogger) error { + image, ok := registry.Override[queueProxyOverride] + if !ok { + return nil + } + log.Debugw("Updating queue-sidecar-image", "image", image) + return unstructured.SetNestedField(u.Object, image, "data", queueSidecarImageKey) +} + func getImageName(fullImageURL string) string { if !strings.Contains(fullImageURL, "/") { return "" diff --git a/pkg/reconciler/common/images_test.go b/pkg/reconciler/common/images_test.go index 306d22870e..9c7cb4b787 100644 --- a/pkg/reconciler/common/images_test.go +++ b/pkg/reconciler/common/images_test.go @@ -21,6 +21,7 @@ import ( "go.uber.org/zap" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/client-go/kubernetes/scheme" caching "knative.dev/caching/pkg/apis/caching/v1alpha1" "knative.dev/operator/pkg/apis/operator/base" @@ -362,6 +363,53 @@ func TestImageTransform(t *testing.T) { } } +func TestQueueProxyImageTransform(t *testing.T) { + for _, tt := range []struct { + name string + registry base.Registry + expected string + }{{ + name: "OverridesQueueSidecarImage", + registry: base.Registry{ + Override: map[string]string{ + "queue-proxy": "registry.my-org.com/knative-serving-queue:1.22.0", + }, + }, + expected: "registry.my-org.com/knative-serving-queue:1.22.0", + }, { + name: "NoOverrideKeepsOriginal", + registry: base.Registry{}, + expected: "gcr.io/knative-releases/knative.dev/serving/cmd/queue@sha256:abcdef", + }, { + name: "OtherOverridesDoNotAffectQueueSidecar", + registry: base.Registry{ + Override: map[string]string{ + "activator": "registry.my-org.com/activator:1.22.0", + }, + }, + expected: "gcr.io/knative-releases/knative.dev/serving/cmd/queue@sha256:abcdef", + }} { + t.Run(tt.name, func(t *testing.T) { + cm := &unstructured.Unstructured{} + cm.SetUnstructuredContent(map[string]interface{}{ + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": map[string]interface{}{ + "name": "config-deployment", + }, + "data": map[string]interface{}{ + "queue-sidecar-image": "gcr.io/knative-releases/knative.dev/serving/cmd/queue@sha256:abcdef", + }, + }) + transform := ImageTransform(&tt.registry, log) + err := transform(cm) + util.AssertEqual(t, err, nil) + val, _, _ := unstructured.NestedString(cm.Object, "data", "queue-sidecar-image") + util.AssertEqual(t, val, tt.expected) + }) + } +} + func TestImagePullSecrets(t *testing.T) { for _, tt := range []struct { name string