From 279baabf94e35c5454d07373d55986e51da46455 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Wed, 22 Oct 2025 17:01:48 -0400 Subject: [PATCH 1/3] chore: log missing kubeconfig data as warning --- providers/kubeconfig/provider.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/providers/kubeconfig/provider.go b/providers/kubeconfig/provider.go index c6314318..8ba1a759 100644 --- a/providers/kubeconfig/provider.go +++ b/providers/kubeconfig/provider.go @@ -22,6 +22,7 @@ import ( "context" "crypto/sha256" "encoding/hex" + "errors" "fmt" "sync" @@ -201,7 +202,7 @@ func (p *Provider) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result // Extract and validate kubeconfig data kubeconfigData, ok := secret.Data[p.opts.KubeconfigSecretKey] if !ok || len(kubeconfigData) == 0 { - log.Info("Secret does not contain kubeconfig data, skipping", "key", p.opts.KubeconfigSecretKey) + log.Error(errors.New("secret does not contain kubeconfig data, skipping"), "key", p.opts.KubeconfigSecretKey) return ctrl.Result{}, nil } From b06686ee7c7db6a66c584db1fa206c7cafdbcb81 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Thu, 23 Oct 2025 09:40:21 -0400 Subject: [PATCH 2/3] better log line, add tests --- providers/kubeconfig/provider.go | 3 +- providers/kubeconfig/provider_test.go | 50 +++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/providers/kubeconfig/provider.go b/providers/kubeconfig/provider.go index 8ba1a759..2f79b284 100644 --- a/providers/kubeconfig/provider.go +++ b/providers/kubeconfig/provider.go @@ -22,7 +22,6 @@ import ( "context" "crypto/sha256" "encoding/hex" - "errors" "fmt" "sync" @@ -202,7 +201,7 @@ func (p *Provider) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result // Extract and validate kubeconfig data kubeconfigData, ok := secret.Data[p.opts.KubeconfigSecretKey] if !ok || len(kubeconfigData) == 0 { - log.Error(errors.New("secret does not contain kubeconfig data, skipping"), "key", p.opts.KubeconfigSecretKey) + log.Error(nil, "Secret does not contain kubeconfig data, skipping", "key", p.opts.KubeconfigSecretKey) return ctrl.Result{}, nil } diff --git a/providers/kubeconfig/provider_test.go b/providers/kubeconfig/provider_test.go index 22ef6696..309a110b 100644 --- a/providers/kubeconfig/provider_test.go +++ b/providers/kubeconfig/provider_test.go @@ -328,6 +328,56 @@ var _ = Describe("Provider Namespace", Ordered, func() { Eventually(provider.ListClusters, "10s").Should(HaveLen(2)) }) + It("skips secrets that do not contain kubeconfig data", func() { + secretWithoutKubeconfig := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "invalid-secret", + Namespace: kubeconfigSecretNamespace, + Labels: map[string]string{ + kubeconfigSecretLabel: "true", + }, + }, + Data: map[string][]byte{ + "some-other-key": []byte("some-data"), + }, + } + err := localCli.Create(ctx, secretWithoutKubeconfig) + Expect(err).NotTo(HaveOccurred()) + + // Verify the cluster count hasn't changed (secret was skipped) + Eventually(provider.ListClusters, "2s").Should(HaveLen(2)) + Consistently(provider.ListClusters, "2s").Should(HaveLen(2)) + + // Clean up + err = localCli.Delete(ctx, secretWithoutKubeconfig) + Expect(err).NotTo(HaveOccurred()) + }) + + It("skips secrets with empty kubeconfig data", func() { + secretWithEmptyKubeconfig := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "empty-secret", + Namespace: kubeconfigSecretNamespace, + Labels: map[string]string{ + kubeconfigSecretLabel: "true", + }, + }, + Data: map[string][]byte{ + kubeconfigSecretKey: []byte(""), + }, + } + err := localCli.Create(ctx, secretWithEmptyKubeconfig) + Expect(err).NotTo(HaveOccurred()) + + // Verify the cluster count hasn't changed (secret was skipped) + Eventually(provider.ListClusters, "2s").Should(HaveLen(2)) + Consistently(provider.ListClusters, "2s").Should(HaveLen(2)) + + // Clean up + err = localCli.Delete(ctx, secretWithEmptyKubeconfig) + Expect(err).NotTo(HaveOccurred()) + }) + AfterAll(func() { By("Stopping the provider, cluster, manager, and controller", func() { cancel() From 1a410a48ca142d5eaffdcef97e329fd317ff5470 Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Sun, 9 Nov 2025 15:30:35 -0500 Subject: [PATCH 3/3] Update providers/kubeconfig/provider_test.go --- providers/kubeconfig/provider_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/providers/kubeconfig/provider_test.go b/providers/kubeconfig/provider_test.go index 309a110b..9624fe75 100644 --- a/providers/kubeconfig/provider_test.go +++ b/providers/kubeconfig/provider_test.go @@ -346,7 +346,7 @@ var _ = Describe("Provider Namespace", Ordered, func() { // Verify the cluster count hasn't changed (secret was skipped) Eventually(provider.ListClusters, "2s").Should(HaveLen(2)) - Consistently(provider.ListClusters, "2s").Should(HaveLen(2)) + Consistently(provider.ListClusters, "10s").Should(HaveLen(2)) // Clean up err = localCli.Delete(ctx, secretWithoutKubeconfig)