diff --git a/providers/kubeconfig/provider.go b/providers/kubeconfig/provider.go index c631431..2f79b28 100644 --- a/providers/kubeconfig/provider.go +++ b/providers/kubeconfig/provider.go @@ -201,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.Info("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 22ef669..9624fe7 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, "10s").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()