From d83cb28f392eb3a8092c06c85cf28048c7520ae2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 09:31:37 +0000 Subject: [PATCH 1/3] Update kubernetes dependencies --- go.mod | 12 ++++++------ go.sum | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index 710fd57a8e..82d13c5d52 100644 --- a/go.mod +++ b/go.mod @@ -67,11 +67,11 @@ require ( golang.org/x/term v0.41.0 golang.org/x/time v0.14.0 gopkg.in/yaml.v3 v3.0.1 - k8s.io/api v0.35.1 - k8s.io/apimachinery v0.35.1 + k8s.io/api v0.35.2 + k8s.io/apimachinery v0.35.2 k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 modernc.org/sqlite v1.46.2 - sigs.k8s.io/controller-runtime v0.22.4 + sigs.k8s.io/controller-runtime v0.23.3 sigs.k8s.io/yaml v1.6.0 ) @@ -297,7 +297,7 @@ require ( gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect - k8s.io/apiextensions-apiserver v0.34.1 // indirect + k8s.io/apiextensions-apiserver v0.35.0 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect modernc.org/libc v1.70.0 // indirect @@ -306,7 +306,7 @@ require ( oras.land/oras-go/v2 v2.6.0 // indirect sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect sigs.k8s.io/randfill v1.0.0 // indirect - sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect + sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 // indirect ) require ( @@ -341,5 +341,5 @@ require ( golang.org/x/crypto v0.49.0 golang.org/x/exp v0.0.0-20260218203240-3dfff04db8fa // indirect golang.org/x/sys v0.42.0 - k8s.io/client-go v0.35.1 + k8s.io/client-go v0.35.2 ) diff --git a/go.sum b/go.sum index 89bbd5e98b..83c15089b9 100644 --- a/go.sum +++ b/go.sum @@ -1150,14 +1150,14 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -k8s.io/api v0.35.1 h1:0PO/1FhlK/EQNVK5+txc4FuhQibV25VLSdLMmGpDE/Q= -k8s.io/api v0.35.1/go.mod h1:28uR9xlXWml9eT0uaGo6y71xK86JBELShLy4wR1XtxM= -k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI= -k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc= -k8s.io/apimachinery v0.35.1 h1:yxO6gV555P1YV0SANtnTjXYfiivaTPvCTKX6w6qdDsU= -k8s.io/apimachinery v0.35.1/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns= -k8s.io/client-go v0.35.1 h1:+eSfZHwuo/I19PaSxqumjqZ9l5XiTEKbIaJ+j1wLcLM= -k8s.io/client-go v0.35.1/go.mod h1:1p1KxDt3a0ruRfc/pG4qT/3oHmUj1AhSHEcxNSGg+OA= +k8s.io/api v0.35.2 h1:tW7mWc2RpxW7HS4CoRXhtYHSzme1PN1UjGHJ1bdrtdw= +k8s.io/api v0.35.2/go.mod h1:7AJfqGoAZcwSFhOjcGM7WV05QxMMgUaChNfLTXDRE60= +k8s.io/apiextensions-apiserver v0.35.0 h1:3xHk2rTOdWXXJM+RDQZJvdx0yEOgC0FgQ1PlJatA5T4= +k8s.io/apiextensions-apiserver v0.35.0/go.mod h1:E1Ahk9SADaLQ4qtzYFkwUqusXTcaV2uw3l14aqpL2LU= +k8s.io/apimachinery v0.35.2 h1:NqsM/mmZA7sHW02JZ9RTtk3wInRgbVxL8MPfzSANAK8= +k8s.io/apimachinery v0.35.2/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns= +k8s.io/client-go v0.35.2 h1:YUfPefdGJA4aljDdayAXkc98DnPkIetMl4PrKX97W9o= +k8s.io/client-go v0.35.2/go.mod h1:4QqEwh4oQpeK8AaefZ0jwTFJw/9kIjdQi0jpKeYvz7g= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE= @@ -1194,14 +1194,14 @@ modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc= oras.land/oras-go/v2 v2.6.0/go.mod h1:magiQDfG6H1O9APp+rOsvCPcW1GD2MM7vgnKY0Y+u1o= -sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A= -sigs.k8s.io/controller-runtime v0.22.4/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8= +sigs.k8s.io/controller-runtime v0.23.3 h1:VjB/vhoPoA9l1kEKZHBMnQF33tdCLQKJtydy4iqwZ80= +sigs.k8s.io/controller-runtime v0.23.3/go.mod h1:B6COOxKptp+YaUT5q4l6LqUJTRpizbgf9KSRNdQGns0= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= -sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco= -sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= +sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 h1:2WOzJpHUBVrrkDjU4KBT8n5LDcj824eX0I5UKcgeRUs= +sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= From a5bfa2f877b4561eaad14086b72cfac2637fad03 Mon Sep 17 00:00:00 2001 From: Radoslav Dimitrov Date: Wed, 18 Mar 2026 00:05:22 +0200 Subject: [PATCH 2/3] Migrate off from the deprecated API Signed-off-by: Radoslav Dimitrov --- .../controllers/embeddingserver_controller.go | 16 +++++++--- .../embeddingserver_controller_test.go | 8 ++--- .../controllers/mcpremoteproxy_controller.go | 6 ++-- .../mcpremoteproxy_reconciler_test.go | 12 ++++---- .../controllers/mcpserver_controller.go | 6 ++-- ...rver_invalid_podtemplate_reconcile_test.go | 6 ++-- .../virtualmcpserver_controller.go | 30 +++++++++---------- .../virtualmcpserver_vmcpconfig.go | 4 +-- cmd/thv-operator/main.go | 8 ++--- .../embedding-server/suite_test.go | 2 +- .../mcp-remote-proxy/suite_test.go | 2 +- 11 files changed, 54 insertions(+), 46 deletions(-) diff --git a/cmd/thv-operator/controllers/embeddingserver_controller.go b/cmd/thv-operator/controllers/embeddingserver_controller.go index a17f79197c..c33d1363cc 100644 --- a/cmd/thv-operator/controllers/embeddingserver_controller.go +++ b/cmd/thv-operator/controllers/embeddingserver_controller.go @@ -20,7 +20,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" @@ -35,7 +35,7 @@ import ( type EmbeddingServerReconciler struct { client.Client Scheme *runtime.Scheme - Recorder record.EventRecorder + Recorder events.EventRecorder PlatformDetector *ctrlutil.SharedPlatformDetector ImageValidation validation.ImageValidation } @@ -386,7 +386,15 @@ func (r *EmbeddingServerReconciler) validateAndUpdatePodTemplateStatus( Message: fmt.Sprintf("Invalid PodTemplateSpec: %v", err), ObservedGeneration: embedding.Generation, }) - r.Recorder.Event(embedding, corev1.EventTypeWarning, "ValidationFailed", fmt.Sprintf("Invalid PodTemplateSpec: %v", err)) + r.Recorder.Eventf( + embedding, + nil, + corev1.EventTypeWarning, + "ValidationFailed", + "ValidationFailed", + "Invalid PodTemplateSpec: %v", + err, + ) return false } @@ -1055,7 +1063,7 @@ func (r *EmbeddingServerReconciler) finalizeEmbeddingServer(ctx context.Context, // Cleanup logic here if needed // For now, Kubernetes will handle cascade deletion of owned resources - r.Recorder.Event(embedding, corev1.EventTypeNormal, "Deleted", "EmbeddingServer has been finalized") + r.Recorder.Eventf(embedding, nil, corev1.EventTypeNormal, "Deleted", "Deleted", "EmbeddingServer has been finalized") } // SetupWithManager sets up the controller with the Manager. diff --git a/cmd/thv-operator/controllers/embeddingserver_controller_test.go b/cmd/thv-operator/controllers/embeddingserver_controller_test.go index 5e0a2b97ac..f6596eeb24 100644 --- a/cmd/thv-operator/controllers/embeddingserver_controller_test.go +++ b/cmd/thv-operator/controllers/embeddingserver_controller_test.go @@ -15,7 +15,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/utils/ptr" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client/fake" @@ -366,7 +366,7 @@ func TestReconcile_NotFound(t *testing.T) { reconciler := &EmbeddingServerReconciler{ Client: fakeClient, Scheme: scheme, - Recorder: record.NewFakeRecorder(10), + Recorder: events.NewFakeRecorder(10), ImageValidation: validation.ImageValidationAlwaysAllow, } @@ -398,7 +398,7 @@ func TestReconcile_CreateResources(t *testing.T) { reconciler := &EmbeddingServerReconciler{ Client: fakeClient, Scheme: scheme, - Recorder: record.NewFakeRecorder(10), + Recorder: events.NewFakeRecorder(10), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), ImageValidation: validation.ImageValidationAlwaysAllow, } @@ -655,7 +655,7 @@ func TestHandleDeletion(t *testing.T) { reconciler := &EmbeddingServerReconciler{ Client: fakeClient, Scheme: scheme, - Recorder: record.NewFakeRecorder(10), + Recorder: events.NewFakeRecorder(10), } result, done, err := reconciler.handleDeletion(context.TODO(), tt.embedding) diff --git a/cmd/thv-operator/controllers/mcpremoteproxy_controller.go b/cmd/thv-operator/controllers/mcpremoteproxy_controller.go index a098dd02d0..51fda8644b 100644 --- a/cmd/thv-operator/controllers/mcpremoteproxy_controller.go +++ b/cmd/thv-operator/controllers/mcpremoteproxy_controller.go @@ -21,7 +21,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/handler" @@ -39,7 +39,7 @@ import ( type MCPRemoteProxyReconciler struct { client.Client Scheme *runtime.Scheme - Recorder record.EventRecorder + Recorder events.EventRecorder PlatformDetector *ctrlutil.SharedPlatformDetector } @@ -405,7 +405,7 @@ func (r *MCPRemoteProxyReconciler) failValidation(proxy *mcpv1alpha1.MCPRemotePr // recordValidationEvent emits a Warning event for a validation failure. func (r *MCPRemoteProxyReconciler) recordValidationEvent(proxy *mcpv1alpha1.MCPRemoteProxy, reason, message string) { if r.Recorder != nil { - r.Recorder.Event(proxy, corev1.EventTypeWarning, reason, message) + r.Recorder.Eventf(proxy, nil, corev1.EventTypeWarning, reason, reason, message) } } diff --git a/cmd/thv-operator/controllers/mcpremoteproxy_reconciler_test.go b/cmd/thv-operator/controllers/mcpremoteproxy_reconciler_test.go index cfd6c4ed0e..129821ee01 100644 --- a/cmd/thv-operator/controllers/mcpremoteproxy_reconciler_test.go +++ b/cmd/thv-operator/controllers/mcpremoteproxy_reconciler_test.go @@ -28,7 +28,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" @@ -304,7 +304,7 @@ func TestMCPRemoteProxyFullReconciliation(t *testing.T) { reconciler := &MCPRemoteProxyReconciler{ Client: fakeClient, Scheme: scheme, - Recorder: record.NewFakeRecorder(10), + Recorder: events.NewFakeRecorder(10), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), } @@ -389,7 +389,7 @@ func TestMCPRemoteProxyConfigChangePropagation(t *testing.T) { reconciler := &MCPRemoteProxyReconciler{ Client: fakeClient, Scheme: scheme, - Recorder: record.NewFakeRecorder(10), + Recorder: events.NewFakeRecorder(10), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), } @@ -467,7 +467,7 @@ func TestMCPRemoteProxyStatusProgression(t *testing.T) { reconciler := &MCPRemoteProxyReconciler{ Client: fakeClient, Scheme: scheme, - Recorder: record.NewFakeRecorder(10), + Recorder: events.NewFakeRecorder(10), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), } @@ -1005,7 +1005,7 @@ func TestValidateSpecConfigurationConditions(t *testing.T) { WithStatusSubresource(&mcpv1alpha1.MCPRemoteProxy{}). Build() - fakeRecorder := record.NewFakeRecorder(10) + fakeRecorder := events.NewFakeRecorder(10) reconciler := &MCPRemoteProxyReconciler{ Client: fakeClient, Scheme: scheme, @@ -1139,7 +1139,7 @@ func TestValidateAndHandleConfigs(t *testing.T) { reconciler := &MCPRemoteProxyReconciler{ Client: fakeClient, Scheme: scheme, - Recorder: record.NewFakeRecorder(10), + Recorder: events.NewFakeRecorder(10), } err := reconciler.validateAndHandleConfigs(context.TODO(), tt.proxy) diff --git a/cmd/thv-operator/controllers/mcpserver_controller.go b/cmd/thv-operator/controllers/mcpserver_controller.go index e6a2534d3d..a3fe911d8c 100644 --- a/cmd/thv-operator/controllers/mcpserver_controller.go +++ b/cmd/thv-operator/controllers/mcpserver_controller.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" @@ -47,7 +47,7 @@ import ( type MCPServerReconciler struct { client.Client Scheme *runtime.Scheme - Recorder record.EventRecorder + Recorder events.EventRecorder PlatformDetector *ctrlutil.SharedPlatformDetector ImageValidation validation.ImageValidation } @@ -641,7 +641,7 @@ func (r *MCPServerReconciler) validateAndUpdatePodTemplateStatus(ctx context.Con if err != nil { // Record event for invalid PodTemplateSpec if r.Recorder != nil { - r.Recorder.Eventf(mcpServer, corev1.EventTypeWarning, "InvalidPodTemplateSpec", + r.Recorder.Eventf(mcpServer, nil, corev1.EventTypeWarning, "InvalidPodTemplateSpec", "InvalidPodTemplateSpec", "Failed to parse PodTemplateSpec: %v. Deployment blocked until PodTemplateSpec is fixed.", err) } diff --git a/cmd/thv-operator/controllers/mcpserver_invalid_podtemplate_reconcile_test.go b/cmd/thv-operator/controllers/mcpserver_invalid_podtemplate_reconcile_test.go index cd63dd23ea..9a73a40992 100644 --- a/cmd/thv-operator/controllers/mcpserver_invalid_podtemplate_reconcile_test.go +++ b/cmd/thv-operator/controllers/mcpserver_invalid_podtemplate_reconcile_test.go @@ -14,7 +14,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" @@ -107,7 +107,7 @@ func TestMCPServerReconciler_InvalidPodTemplateSpec(t *testing.T) { require.NoError(t, mcpv1alpha1.AddToScheme(s)) // Create a fake event recorder for each test - eventRecorder := record.NewFakeRecorder(10) + eventRecorder := events.NewFakeRecorder(10) // Create a fake client with the MCPServer fakeClient := fake.NewClientBuilder(). @@ -211,7 +211,7 @@ func TestDeploymentArgsWithInvalidPodTemplateSpec(t *testing.T) { r := &MCPServerReconciler{ Client: fakeClient, Scheme: s, - Recorder: record.NewFakeRecorder(10), + Recorder: events.NewFakeRecorder(10), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), } diff --git a/cmd/thv-operator/controllers/virtualmcpserver_controller.go b/cmd/thv-operator/controllers/virtualmcpserver_controller.go index 6064e728fb..8d026071c8 100644 --- a/cmd/thv-operator/controllers/virtualmcpserver_controller.go +++ b/cmd/thv-operator/controllers/virtualmcpserver_controller.go @@ -22,7 +22,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" @@ -87,7 +87,7 @@ type AuthConfigError struct { type VirtualMCPServerReconciler struct { client.Client Scheme *runtime.Scheme - Recorder record.EventRecorder + Recorder events.EventRecorder PlatformDetector *ctrlutil.SharedPlatformDetector } @@ -483,7 +483,7 @@ func (r *VirtualMCPServerReconciler) validateAndUpdatePodTemplateStatus( if err != nil { // Record event for invalid PodTemplateSpec if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "InvalidPodTemplateSpec", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "InvalidPodTemplateSpec", "InvalidPodTemplateSpec", "Failed to parse PodTemplateSpec: %v. Deployment blocked until PodTemplateSpec is fixed.", err) } @@ -537,7 +537,7 @@ func (r *VirtualMCPServerReconciler) ensureAllResources( statusManager.SetObservedGeneration(vmcp.Generation) // Record event for secret validation failure if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "SecretValidationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "SecretValidationFailed", "SecretValidationFailed", "Secret validation failed: %v", err) } return ctrl.Result{}, err @@ -691,7 +691,7 @@ func (r *VirtualMCPServerReconciler) ensureHMACSecret( if err != nil { ctxLogger.Error(err, "Failed to generate HMAC secret") if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "HMACSecretGenerationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "HMACSecretGenerationFailed", "HMACSecretGenerationFailed", "Failed to generate HMAC secret: %v", err) } return fmt.Errorf("failed to generate HMAC secret: %w", err) @@ -727,7 +727,7 @@ func (r *VirtualMCPServerReconciler) ensureHMACSecret( if err := r.Create(ctx, newSecret); err != nil { ctxLogger.Error(err, "Failed to create HMAC secret") if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "HMACSecretCreationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "HMACSecretCreationFailed", "HMACSecretCreationFailed", "Failed to create HMAC secret: %v", err) } return fmt.Errorf("failed to create HMAC secret: %w", err) @@ -735,7 +735,7 @@ func (r *VirtualMCPServerReconciler) ensureHMACSecret( // Record success event if r.Recorder != nil { - r.Recorder.Event(vmcp, corev1.EventTypeNormal, "HMACSecretCreated", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "HMACSecretCreated", "HMACSecretCreated", "HMAC secret created for session token binding") } return nil @@ -748,7 +748,7 @@ func (r *VirtualMCPServerReconciler) ensureHMACSecret( if err := r.validateHMACSecret(ctx, vmcp, secret); err != nil { ctxLogger.Error(err, "Existing HMAC secret is invalid", "Secret.Name", secretName) if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "HMACSecretValidationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "HMACSecretValidationFailed", "HMACSecretValidationFailed", "Existing HMAC secret validation failed: %v", err) } return fmt.Errorf("existing HMAC secret validation failed: %w", err) @@ -897,14 +897,14 @@ func (r *VirtualMCPServerReconciler) ensureDeployment( ctxLogger.Error(err, "Failed to create new Deployment") // Record event for deployment creation failure if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "DeploymentCreationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "DeploymentCreationFailed", "DeploymentCreationFailed", "Failed to create Deployment: %v", err) } return ctrl.Result{}, err } // Record event for successful deployment creation if r.Recorder != nil { - r.Recorder.Event(vmcp, corev1.EventTypeNormal, "DeploymentCreated", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "DeploymentCreated", "DeploymentCreated", "Deployment created successfully") } // Return empty result to continue with rest of reconciliation (Service, status update, etc.) @@ -941,7 +941,7 @@ func (r *VirtualMCPServerReconciler) ensureDeployment( ctxLogger.Error(err, "Failed to update Deployment") // Record event for deployment update failure if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "DeploymentUpdateFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "DeploymentUpdateFailed", "DeploymentUpdateFailed", "Failed to update Deployment: %v", err) } // Return error to trigger reconcile retry (handles transient failures and conflicts) @@ -949,7 +949,7 @@ func (r *VirtualMCPServerReconciler) ensureDeployment( } // Record event for successful deployment update (config change triggers rollout) if r.Recorder != nil { - r.Recorder.Event(vmcp, corev1.EventTypeNormal, "DeploymentUpdated", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "DeploymentUpdated", "DeploymentUpdated", "Deployment updated, rolling out new configuration") } // Return empty result to continue with rest of reconciliation @@ -983,14 +983,14 @@ func (r *VirtualMCPServerReconciler) ensureService( ctxLogger.Error(err, "Failed to create new Service") // Record event for service creation failure if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "ServiceCreationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "ServiceCreationFailed", "ServiceCreationFailed", "Failed to create Service: %v", err) } return ctrl.Result{}, err } // Record event for successful service creation if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeNormal, "ServiceCreated", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "ServiceCreated", "ServiceCreated", "Service %s created successfully", serviceName) } // Return empty result to continue with rest of reconciliation @@ -1905,7 +1905,7 @@ func (r *VirtualMCPServerReconciler) validateEmbeddingServerRef( ) statusManager.SetObservedGeneration(vmcp.Generation) if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "EmbeddingServerRefNotFound", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "EmbeddingServerRefNotFound", "EmbeddingServerRefNotFound", "Referenced EmbeddingServer %s not found", refName) } return err diff --git a/cmd/thv-operator/controllers/virtualmcpserver_vmcpconfig.go b/cmd/thv-operator/controllers/virtualmcpserver_vmcpconfig.go index 83fc2ca9e0..a445f647b9 100644 --- a/cmd/thv-operator/controllers/virtualmcpserver_vmcpconfig.go +++ b/cmd/thv-operator/controllers/virtualmcpserver_vmcpconfig.go @@ -130,7 +130,7 @@ func (r *VirtualMCPServerReconciler) populateOptimizerEmbeddingService( "consider using embeddingServerRef for managed lifecycle", "embeddingService", config.Optimizer.EmbeddingService) if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "EmbeddingServiceManual", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "EmbeddingServiceManual", "EmbeddingServiceManual", "config.optimizer.embeddingService is set without embeddingServerRef; "+ "specifying an embeddingServerRef is the recommended configuration") } @@ -157,7 +157,7 @@ func (r *VirtualMCPServerReconciler) populateOptimizerFromRef( "overridden", config.Optimizer.EmbeddingService, "new", esURL) if r.Recorder != nil { - r.Recorder.Eventf(vmcp, corev1.EventTypeWarning, "EmbeddingServiceOverridden", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "EmbeddingServiceOverridden", "EmbeddingServiceOverridden", "config.optimizer.embeddingService will be replaced by EmbeddingServerRef %q URL", vmcp.Spec.EmbeddingServerRef.Name) } diff --git a/cmd/thv-operator/main.go b/cmd/thv-operator/main.go index 099b897bbc..1e80b8a63f 100644 --- a/cmd/thv-operator/main.go +++ b/cmd/thv-operator/main.go @@ -234,7 +234,7 @@ func setupServerControllers(mgr ctrl.Manager, enableRegistry bool) error { rec := &controllers.MCPServerReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("mcpserver-controller"), + Recorder: mgr.GetEventRecorder("mcpserver-controller"), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), ImageValidation: imageValidation, } @@ -262,7 +262,7 @@ func setupServerControllers(mgr ctrl.Manager, enableRegistry bool) error { if err := (&controllers.MCPRemoteProxyReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("mcpremoteproxy-controller"), + Recorder: mgr.GetEventRecorder("mcpremoteproxy-controller"), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), }).SetupWithManager(mgr); err != nil { return fmt.Errorf("unable to create controller MCPRemoteProxy: %w", err) @@ -272,7 +272,7 @@ func setupServerControllers(mgr ctrl.Manager, enableRegistry bool) error { if err := (&controllers.EmbeddingServerReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("embeddingserver-controller"), + Recorder: mgr.GetEventRecorder("embeddingserver-controller"), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), ImageValidation: imageValidation, }).SetupWithManager(mgr); err != nil { @@ -306,7 +306,7 @@ func setupAggregationControllers(mgr ctrl.Manager) error { if err := (&controllers.VirtualMCPServerReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("virtualmcpserver-controller"), + Recorder: mgr.GetEventRecorder("virtualmcpserver-controller"), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), }).SetupWithManager(mgr); err != nil { return fmt.Errorf("unable to create controller VirtualMCPServer: %w", err) diff --git a/cmd/thv-operator/test-integration/embedding-server/suite_test.go b/cmd/thv-operator/test-integration/embedding-server/suite_test.go index d8e7376933..c29f518514 100644 --- a/cmd/thv-operator/test-integration/embedding-server/suite_test.go +++ b/cmd/thv-operator/test-integration/embedding-server/suite_test.go @@ -100,7 +100,7 @@ var _ = BeforeSuite(func() { err = (&controllers.EmbeddingServerReconciler{ Client: k8sManager.GetClient(), Scheme: k8sManager.GetScheme(), - Recorder: k8sManager.GetEventRecorderFor("embeddingserver-controller"), + Recorder: k8sManager.GetEventRecorder("embeddingserver-controller"), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), ImageValidation: validation.ImageValidationAlwaysAllow, }).SetupWithManager(k8sManager) diff --git a/cmd/thv-operator/test-integration/mcp-remote-proxy/suite_test.go b/cmd/thv-operator/test-integration/mcp-remote-proxy/suite_test.go index 9a5331e524..2ce2a07ad3 100644 --- a/cmd/thv-operator/test-integration/mcp-remote-proxy/suite_test.go +++ b/cmd/thv-operator/test-integration/mcp-remote-proxy/suite_test.go @@ -135,7 +135,7 @@ var _ = BeforeSuite(func() { err = (&controllers.MCPRemoteProxyReconciler{ Client: k8sManager.GetClient(), Scheme: k8sManager.GetScheme(), - Recorder: k8sManager.GetEventRecorderFor("mcpremoteproxy-controller"), + Recorder: k8sManager.GetEventRecorder("mcpremoteproxy-controller"), PlatformDetector: ctrlutil.NewSharedPlatformDetector(), }).SetupWithManager(k8sManager) Expect(err).ToNot(HaveOccurred()) From 3eebb4eae15fdba5c86e4b6b91e8619b7558d250 Mon Sep 17 00:00:00 2001 From: Radoslav Dimitrov Date: Wed, 18 Mar 2026 00:14:20 +0200 Subject: [PATCH 3/3] Update the action and the reason Signed-off-by: Radoslav Dimitrov --- .../controllers/embeddingserver_controller.go | 4 +-- .../controllers/mcpremoteproxy_controller.go | 2 +- .../controllers/mcpserver_controller.go | 2 +- .../virtualmcpserver_controller.go | 26 +++++++++---------- .../virtualmcpserver_vmcpconfig.go | 4 +-- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/cmd/thv-operator/controllers/embeddingserver_controller.go b/cmd/thv-operator/controllers/embeddingserver_controller.go index c33d1363cc..97f2db6e8a 100644 --- a/cmd/thv-operator/controllers/embeddingserver_controller.go +++ b/cmd/thv-operator/controllers/embeddingserver_controller.go @@ -391,7 +391,7 @@ func (r *EmbeddingServerReconciler) validateAndUpdatePodTemplateStatus( nil, corev1.EventTypeWarning, "ValidationFailed", - "ValidationFailed", + "ValidatePodTemplateSpec", "Invalid PodTemplateSpec: %v", err, ) @@ -1063,7 +1063,7 @@ func (r *EmbeddingServerReconciler) finalizeEmbeddingServer(ctx context.Context, // Cleanup logic here if needed // For now, Kubernetes will handle cascade deletion of owned resources - r.Recorder.Eventf(embedding, nil, corev1.EventTypeNormal, "Deleted", "Deleted", "EmbeddingServer has been finalized") + r.Recorder.Eventf(embedding, nil, corev1.EventTypeNormal, "Deleted", "Finalize", "EmbeddingServer has been finalized") } // SetupWithManager sets up the controller with the Manager. diff --git a/cmd/thv-operator/controllers/mcpremoteproxy_controller.go b/cmd/thv-operator/controllers/mcpremoteproxy_controller.go index 51fda8644b..b281329ba3 100644 --- a/cmd/thv-operator/controllers/mcpremoteproxy_controller.go +++ b/cmd/thv-operator/controllers/mcpremoteproxy_controller.go @@ -405,7 +405,7 @@ func (r *MCPRemoteProxyReconciler) failValidation(proxy *mcpv1alpha1.MCPRemotePr // recordValidationEvent emits a Warning event for a validation failure. func (r *MCPRemoteProxyReconciler) recordValidationEvent(proxy *mcpv1alpha1.MCPRemoteProxy, reason, message string) { if r.Recorder != nil { - r.Recorder.Eventf(proxy, nil, corev1.EventTypeWarning, reason, reason, message) + r.Recorder.Eventf(proxy, nil, corev1.EventTypeWarning, reason, "ValidateSpec", message) } } diff --git a/cmd/thv-operator/controllers/mcpserver_controller.go b/cmd/thv-operator/controllers/mcpserver_controller.go index a3fe911d8c..4fd9e40bea 100644 --- a/cmd/thv-operator/controllers/mcpserver_controller.go +++ b/cmd/thv-operator/controllers/mcpserver_controller.go @@ -641,7 +641,7 @@ func (r *MCPServerReconciler) validateAndUpdatePodTemplateStatus(ctx context.Con if err != nil { // Record event for invalid PodTemplateSpec if r.Recorder != nil { - r.Recorder.Eventf(mcpServer, nil, corev1.EventTypeWarning, "InvalidPodTemplateSpec", "InvalidPodTemplateSpec", + r.Recorder.Eventf(mcpServer, nil, corev1.EventTypeWarning, "InvalidPodTemplateSpec", "ValidatePodTemplateSpec", "Failed to parse PodTemplateSpec: %v. Deployment blocked until PodTemplateSpec is fixed.", err) } diff --git a/cmd/thv-operator/controllers/virtualmcpserver_controller.go b/cmd/thv-operator/controllers/virtualmcpserver_controller.go index 8d026071c8..10b191b047 100644 --- a/cmd/thv-operator/controllers/virtualmcpserver_controller.go +++ b/cmd/thv-operator/controllers/virtualmcpserver_controller.go @@ -483,7 +483,7 @@ func (r *VirtualMCPServerReconciler) validateAndUpdatePodTemplateStatus( if err != nil { // Record event for invalid PodTemplateSpec if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "InvalidPodTemplateSpec", "InvalidPodTemplateSpec", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "InvalidPodTemplateSpec", "ValidatePodTemplateSpec", "Failed to parse PodTemplateSpec: %v. Deployment blocked until PodTemplateSpec is fixed.", err) } @@ -537,7 +537,7 @@ func (r *VirtualMCPServerReconciler) ensureAllResources( statusManager.SetObservedGeneration(vmcp.Generation) // Record event for secret validation failure if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "SecretValidationFailed", "SecretValidationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "SecretValidationFailed", "ValidateSecrets", "Secret validation failed: %v", err) } return ctrl.Result{}, err @@ -691,7 +691,7 @@ func (r *VirtualMCPServerReconciler) ensureHMACSecret( if err != nil { ctxLogger.Error(err, "Failed to generate HMAC secret") if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "HMACSecretGenerationFailed", "HMACSecretGenerationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "HMACSecretGenerationFailed", "GenerateHMACSecret", "Failed to generate HMAC secret: %v", err) } return fmt.Errorf("failed to generate HMAC secret: %w", err) @@ -727,7 +727,7 @@ func (r *VirtualMCPServerReconciler) ensureHMACSecret( if err := r.Create(ctx, newSecret); err != nil { ctxLogger.Error(err, "Failed to create HMAC secret") if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "HMACSecretCreationFailed", "HMACSecretCreationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "HMACSecretCreationFailed", "CreateHMACSecret", "Failed to create HMAC secret: %v", err) } return fmt.Errorf("failed to create HMAC secret: %w", err) @@ -735,7 +735,7 @@ func (r *VirtualMCPServerReconciler) ensureHMACSecret( // Record success event if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "HMACSecretCreated", "HMACSecretCreated", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "HMACSecretCreated", "CreateHMACSecret", "HMAC secret created for session token binding") } return nil @@ -748,7 +748,7 @@ func (r *VirtualMCPServerReconciler) ensureHMACSecret( if err := r.validateHMACSecret(ctx, vmcp, secret); err != nil { ctxLogger.Error(err, "Existing HMAC secret is invalid", "Secret.Name", secretName) if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "HMACSecretValidationFailed", "HMACSecretValidationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "HMACSecretValidationFailed", "ValidateHMACSecret", "Existing HMAC secret validation failed: %v", err) } return fmt.Errorf("existing HMAC secret validation failed: %w", err) @@ -897,14 +897,14 @@ func (r *VirtualMCPServerReconciler) ensureDeployment( ctxLogger.Error(err, "Failed to create new Deployment") // Record event for deployment creation failure if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "DeploymentCreationFailed", "DeploymentCreationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "DeploymentCreationFailed", "CreateDeployment", "Failed to create Deployment: %v", err) } return ctrl.Result{}, err } // Record event for successful deployment creation if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "DeploymentCreated", "DeploymentCreated", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "DeploymentCreated", "CreateDeployment", "Deployment created successfully") } // Return empty result to continue with rest of reconciliation (Service, status update, etc.) @@ -941,7 +941,7 @@ func (r *VirtualMCPServerReconciler) ensureDeployment( ctxLogger.Error(err, "Failed to update Deployment") // Record event for deployment update failure if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "DeploymentUpdateFailed", "DeploymentUpdateFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "DeploymentUpdateFailed", "UpdateDeployment", "Failed to update Deployment: %v", err) } // Return error to trigger reconcile retry (handles transient failures and conflicts) @@ -949,7 +949,7 @@ func (r *VirtualMCPServerReconciler) ensureDeployment( } // Record event for successful deployment update (config change triggers rollout) if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "DeploymentUpdated", "DeploymentUpdated", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "DeploymentUpdated", "UpdateDeployment", "Deployment updated, rolling out new configuration") } // Return empty result to continue with rest of reconciliation @@ -983,14 +983,14 @@ func (r *VirtualMCPServerReconciler) ensureService( ctxLogger.Error(err, "Failed to create new Service") // Record event for service creation failure if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "ServiceCreationFailed", "ServiceCreationFailed", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "ServiceCreationFailed", "CreateService", "Failed to create Service: %v", err) } return ctrl.Result{}, err } // Record event for successful service creation if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "ServiceCreated", "ServiceCreated", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeNormal, "ServiceCreated", "CreateService", "Service %s created successfully", serviceName) } // Return empty result to continue with rest of reconciliation @@ -1905,7 +1905,7 @@ func (r *VirtualMCPServerReconciler) validateEmbeddingServerRef( ) statusManager.SetObservedGeneration(vmcp.Generation) if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "EmbeddingServerRefNotFound", "EmbeddingServerRefNotFound", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "EmbeddingServerRefNotFound", "ValidateEmbeddingServerRef", "Referenced EmbeddingServer %s not found", refName) } return err diff --git a/cmd/thv-operator/controllers/virtualmcpserver_vmcpconfig.go b/cmd/thv-operator/controllers/virtualmcpserver_vmcpconfig.go index a445f647b9..442fce56dc 100644 --- a/cmd/thv-operator/controllers/virtualmcpserver_vmcpconfig.go +++ b/cmd/thv-operator/controllers/virtualmcpserver_vmcpconfig.go @@ -130,7 +130,7 @@ func (r *VirtualMCPServerReconciler) populateOptimizerEmbeddingService( "consider using embeddingServerRef for managed lifecycle", "embeddingService", config.Optimizer.EmbeddingService) if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "EmbeddingServiceManual", "EmbeddingServiceManual", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "EmbeddingServiceManual", "ValidateEmbeddingService", "config.optimizer.embeddingService is set without embeddingServerRef; "+ "specifying an embeddingServerRef is the recommended configuration") } @@ -157,7 +157,7 @@ func (r *VirtualMCPServerReconciler) populateOptimizerFromRef( "overridden", config.Optimizer.EmbeddingService, "new", esURL) if r.Recorder != nil { - r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "EmbeddingServiceOverridden", "EmbeddingServiceOverridden", + r.Recorder.Eventf(vmcp, nil, corev1.EventTypeWarning, "EmbeddingServiceOverridden", "ResolveEmbeddingService", "config.optimizer.embeddingService will be replaced by EmbeddingServerRef %q URL", vmcp.Spec.EmbeddingServerRef.Name) }