From e22e321dbe824f0bdbd172cfb0e923c5992af6af Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 23 Jul 2026 16:23:40 -0700 Subject: [PATCH 1/3] pkg/agenticrun/controller: Additional logging to AgenticRun CRD detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding additional logging to the logic from f29721f788 (OTA-2084: Conditionally deploy console plugin when AgenticRun CRD is present, 2026-07-21, #1425), to make it easier to debug logs like: $ oc -n openshift-cluster-version logs -l k8s-app=cluster-version-operator --tail -1 | grep -i controller.go | tail -n3 I0723 23:05:41.142338 1 controller.go:184] Started syncing CVO configuration "ClusterVersionOperator/agenticrun-lifecycle-controller" I0723 23:05:41.142835 1 controller.go:191] Failed to disable console plugin, skipping manifest cleanup: getting console operator config: no kind is registered for the type v1.Console in scheme "k8s.io/client-go/kubernetes/scheme/register.go:84" I0723 23:05:41.142922 1 controller.go:186] Finished syncing CVO configuration (586.586µs) where the cluster-version operator apparently thinks that there is no AgenticRun CRD. Despite the AgenticRun CRD having existed in that cluster for hours by the time we got those CVO logs. $ oc get customresourcedefinitions agenticruns.agentic.openshift.io NAME CREATED AT agenticruns.agentic.openshift.io 2026-07-23T19:21:46Z --- pkg/agenticrun/controller.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/agenticrun/controller.go b/pkg/agenticrun/controller.go index 66ca7adebf..43ad38cd6f 100644 --- a/pkg/agenticrun/controller.go +++ b/pkg/agenticrun/controller.go @@ -153,12 +153,14 @@ func (c *Controller) crdAvailable() bool { } c.crdLastChecked = time.Now() if c.client == nil { + klog.V(i.Normal).Info("No AgenticRun controller client, assuming there are no AgenticRuns") c.crdAvailableCache = false return false } crd := &apiextensionsv1.CustomResourceDefinition{} err := c.client.Get(context.Background(), ctrlruntimeclient.ObjectKey{Name: "agenticruns.agentic.openshift.io"}, crd) c.crdAvailableCache = err == nil + klog.V(i.Normal).Infof("AgenticRun CustomResourceDefinition available? %t (%v)", c.crdAvailableCache, err) return c.crdAvailableCache } From 182246834cac8390cd39b298db1e60a5c3e08dd0 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 23 Jul 2026 21:13:27 -0700 Subject: [PATCH 2/3] pkg/start: Add apiextension to the Runtime client scheme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoid: $ oc -n openshift-cluster-version logs -l k8s-app=cluster-version-operator --tail -1 | grep controller.go | tail -n4 I0724 03:17:24.334404 1 controller.go:186] Started syncing CVO configuration "ClusterVersionOperator/agenticrun-lifecycle-controller" I0724 03:17:24.334427 1 controller.go:163] AgenticRun CustomResourceDefinition available? false (no kind is registered for the type v1.CustomResourceDefinition in scheme "k8s.io/client-go/kubernetes/scheme/register.go:84") I0724 03:17:24.334445 1 controller.go:193] Failed to disable console plugin, skipping manifest cleanup: getting console operator config: no kind is registered for the type v1.Console in scheme "k8s.io/client-go/kubernetes/scheme/register.go:84" I0724 03:17:24.334449 1 controller.go:188] Finished syncing CVO configuration (47.291µs) out of the: crd := &apiextensionsv1.CustomResourceDefinition{} err := c.client.Get(context.Background(), ctrlruntimeclient.ObjectKey{Name: "agenticruns.agentic.openshift.io"}, crd) call in pkg/agenticrun's Controller.crdAvailable, even when the CRD itself exists in the cluster: $ oc get customresourcedefinitions agenticruns.agentic.openshift.io NAME CREATED AT agenticruns.agentic.openshift.io 2026-07-24T00:40:30Z By registering scheme.AddToScheme (all the normal stuff) and apiextensionsv1.AddToScheme (the CRD type), we can successfully execute that Get. --- pkg/start/start.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/start/start.go b/pkg/start/start.go index 3f15b70b73..5add280ca3 100644 --- a/pkg/start/start.go +++ b/pkg/start/start.go @@ -16,9 +16,11 @@ import ( runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" v1 "k8s.io/api/core/v1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/dynamic" @@ -531,7 +533,13 @@ func (cb *ClientBuilder) DynamicClientOrDie(name string, configFns ...func(*rest } func (cb *ClientBuilder) RuntimeControllerClientOrDie(name string, configFns ...func(*rest.Config)) runtimeclient.Client { - c, err := runtimeclient.New(rest.AddUserAgent(cb.RestConfig(configFns...), name), runtimeclient.Options{}) + runtimeScheme := runtime.NewScheme() + utilruntime.Must(scheme.AddToScheme(runtimeScheme)) + utilruntime.Must(apiextensionsv1.AddToScheme(runtimeScheme)) + + c, err := runtimeclient.New(rest.AddUserAgent(cb.RestConfig(configFns...), name), runtimeclient.Options{ + Scheme: runtimeScheme, + }) if err != nil { panic(err) } From 2eafe1af6896ccb28b210d45cc0ea32dc2f44a11 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Thu, 23 Jul 2026 21:44:23 -0700 Subject: [PATCH 3/3] pkg/start: Add operator.openshift.io to the Runtime client scheme Similar to d8505c7d25 (pkg/start: Add apiextension to the Runtime client scheme, 2026-07-23, #1428), but a different scheme. This time, we're avoiding: $ oc -n openshift-cluster-version logs -l k8s-app=cluster-version-operator --tail -1 | grep controller.go | tail -n4 I0724 04:36:36.039365 1 controller.go:186] Started syncing CVO configuration "ClusterVersionOperator/agenticrun-lifecycle-controller" I0724 04:36:36.100611 1 controller.go:207] Failed to enable console plugin: getting console operator config: no kind is registered for the type v1.Console in scheme "github.com/openshift/cluster-version-operator/pkg/start/start.go:536" ... out of the: enableConsolePlugin(ctx context.Context, client ctrlruntimeclient.Client) error { console := &operatorv1.Console{} if err := client.Get(ctx, types.NamespacedName{Name: "cluster"}, console); err != nil { call in pkg/agenticrun. By registering operatorv1.AddToScheme, we can successfully interact with those operator.openshift.io resources. --- pkg/start/start.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/start/start.go b/pkg/start/start.go index 5add280ca3..5339a58e94 100644 --- a/pkg/start/start.go +++ b/pkg/start/start.go @@ -37,6 +37,7 @@ import ( "k8s.io/klog/v2" configv1 "github.com/openshift/api/config/v1" + operatorv1 "github.com/openshift/api/operator/v1" clientset "github.com/openshift/client-go/config/clientset/versioned" configinformers "github.com/openshift/client-go/config/informers/externalversions" operatorclientset "github.com/openshift/client-go/operator/clientset/versioned" @@ -536,6 +537,7 @@ func (cb *ClientBuilder) RuntimeControllerClientOrDie(name string, configFns ... runtimeScheme := runtime.NewScheme() utilruntime.Must(scheme.AddToScheme(runtimeScheme)) utilruntime.Must(apiextensionsv1.AddToScheme(runtimeScheme)) + utilruntime.Must(operatorv1.AddToScheme(runtimeScheme)) c, err := runtimeclient.New(rest.AddUserAgent(cb.RestConfig(configFns...), name), runtimeclient.Options{ Scheme: runtimeScheme,