From fbbb5d9f48c0aeeaad02bf88bd0c026a5a3cc8b2 Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Tue, 18 Oct 2022 14:54:08 +0800 Subject: [PATCH] Fix token path in hosted mode (#284) Signed-off-by: Jian Qiu Signed-off-by: Jian Qiu --- pkg/helpers/helpers_test.go | 3 +- pkg/helpers/sa_syncer.go | 11 +++--- pkg/helpers/sa_syncer_test.go | 2 +- .../clustermanager_controller.go | 2 +- .../klusterlet_controller.go | 2 +- test/e2e/clusterset_test.go | 37 ++++--------------- 6 files changed, 19 insertions(+), 38 deletions(-) diff --git a/pkg/helpers/helpers_test.go b/pkg/helpers/helpers_test.go index e5dd68703..17e6faece 100644 --- a/pkg/helpers/helpers_test.go +++ b/pkg/helpers/helpers_test.go @@ -3,6 +3,7 @@ package helpers import ( "context" "encoding/json" + "errors" "fmt" "reflect" "testing" @@ -1191,7 +1192,7 @@ func TestGetRelatedResource(t *testing.T) { objData := assets.MustCreateAssetFromTemplate(c.manifestFile, template, c.config).Data relatedResource, err := GenerateRelatedResource(objData) - if !reflect.DeepEqual(err, c.expectedErr) { + if !errors.Is(err, c.expectedErr) { t.Errorf(diff.ObjectDiff(err, c.expectedErr)) } if !reflect.DeepEqual(relatedResource, c.expectedRelatedResource) { diff --git a/pkg/helpers/sa_syncer.go b/pkg/helpers/sa_syncer.go index 5e70fd3f3..11889c4cc 100644 --- a/pkg/helpers/sa_syncer.go +++ b/pkg/helpers/sa_syncer.go @@ -3,6 +3,7 @@ package helpers import ( "context" "io/ioutil" + "path/filepath" "time" "github.com/openshift/library-go/pkg/operator/events" @@ -70,11 +71,11 @@ func SATokenGetter(ctx context.Context, saName, saNamespace string, saClient kub } } -func SyncKubeConfigSecret(ctx context.Context, secretName, secretNamespace string, templateKubeconfig *rest.Config, secretClient coreclientv1.SecretsGetter, tokenGetter TokenGetterFunc, recorder events.Recorder) error { +func SyncKubeConfigSecret(ctx context.Context, secretName, secretNamespace, kubeconfigPath string, templateKubeconfig *rest.Config, secretClient coreclientv1.SecretsGetter, tokenGetter TokenGetterFunc, recorder events.Recorder) error { secret, err := secretClient.Secrets(secretNamespace).Get(ctx, secretName, metav1.GetOptions{}) switch { case errors.IsNotFound(err): - return applyKubeconfigSecret(ctx, templateKubeconfig, secretName, secretNamespace, secretClient, tokenGetter, recorder) + return applyKubeconfigSecret(ctx, templateKubeconfig, secretName, secretNamespace, kubeconfigPath, secretClient, tokenGetter, recorder) case err != nil: return err } @@ -83,7 +84,7 @@ func SyncKubeConfigSecret(ctx context.Context, secretName, secretNamespace strin return nil } - return applyKubeconfigSecret(ctx, templateKubeconfig, secretName, secretNamespace, secretClient, tokenGetter, recorder) + return applyKubeconfigSecret(ctx, templateKubeconfig, secretName, secretNamespace, kubeconfigPath, secretClient, tokenGetter, recorder) } func tokenValid(secret *corev1.Secret) bool { @@ -112,7 +113,7 @@ func tokenValid(secret *corev1.Secret) bool { } // applyKubeconfigSecret would render saToken to a secret. -func applyKubeconfigSecret(ctx context.Context, templateKubeconfig *rest.Config, secretName, secretNamespace string, secretClient coreclientv1.SecretsGetter, tokenGetter TokenGetterFunc, recorder events.Recorder) error { +func applyKubeconfigSecret(ctx context.Context, templateKubeconfig *rest.Config, secretName, secretNamespace, kubeconfigPath string, secretClient coreclientv1.SecretsGetter, tokenGetter TokenGetterFunc, recorder events.Recorder) error { token, expiration, err := tokenGetter() if err != nil { @@ -155,7 +156,7 @@ func applyKubeconfigSecret(ctx context.Context, templateKubeconfig *rest.Config, }, AuthInfos: map[string]*clientcmdapi.AuthInfo{ "user": { - TokenFile: "token", + TokenFile: filepath.Join(filepath.Dir(kubeconfigPath), "token"), }, }, CurrentContext: "context", diff --git a/pkg/helpers/sa_syncer_test.go b/pkg/helpers/sa_syncer_test.go index 8e36499f8..14bda5a50 100644 --- a/pkg/helpers/sa_syncer_test.go +++ b/pkg/helpers/sa_syncer_test.go @@ -194,7 +194,7 @@ func TestApplyKubeconfigSecret(t *testing.T) { return tt.token, expiration, tt.tokenGetError } client := testclient.NewSimpleClientset(tt.secrets...) - err := SyncKubeConfigSecret(context.TODO(), secretName, secretNamespace, tkc, client.CoreV1(), tokenGetter, eventstesting.NewTestingEventRecorder(t)) + err := SyncKubeConfigSecret(context.TODO(), secretName, secretNamespace, "/tmp/kubeconfig", tkc, client.CoreV1(), tokenGetter, eventstesting.NewTestingEventRecorder(t)) if err != nil && !tt.wantErr { t.Error(err) } diff --git a/pkg/operators/clustermanager/controllers/clustermanagercontroller/clustermanager_controller.go b/pkg/operators/clustermanager/controllers/clustermanagercontroller/clustermanager_controller.go index b11292a15..b305886b5 100644 --- a/pkg/operators/clustermanager/controllers/clustermanagercontroller/clustermanager_controller.go +++ b/pkg/operators/clustermanager/controllers/clustermanagercontroller/clustermanager_controller.go @@ -754,7 +754,7 @@ func ensureSAKubeconfigs(ctx context.Context, clusterManagerName, clusterManager sas := getSAs(clusterManagerName) for _, sa := range sas { tokenGetter := helpers.SATokenGetter(ctx, sa, clusterManagerNamespace, hubClient) - err := helpers.SyncKubeConfigSecret(ctx, sa+"-kubeconfig", clusterManagerNamespace, &rest.Config{ + err := helpers.SyncKubeConfigSecret(ctx, sa+"-kubeconfig", clusterManagerNamespace, "/var/run/secrets/hub/kubeconfig", &rest.Config{ Host: hubKubeConfig.Host, TLSClientConfig: rest.TLSClientConfig{ CAData: hubKubeConfig.CAData, diff --git a/pkg/operators/klusterlet/controllers/klusterletcontroller/klusterlet_controller.go b/pkg/operators/klusterlet/controllers/klusterletcontroller/klusterlet_controller.go index 360548283..3ad62c0d7 100644 --- a/pkg/operators/klusterlet/controllers/klusterletcontroller/klusterlet_controller.go +++ b/pkg/operators/klusterlet/controllers/klusterletcontroller/klusterlet_controller.go @@ -565,7 +565,7 @@ func (n *klusterletController) createManagedClusterKubeconfig( saClient kubernetes.Interface, secretClient coreclientv1.SecretsGetter, recorder events.Recorder) error { tokenGetter := helpers.SATokenGetter(ctx, saName, klusterletNamespace, saClient) - err := helpers.SyncKubeConfigSecret(ctx, secretName, agentNamespace, kubeconfigTemplate, n.kubeClient.CoreV1(), tokenGetter, recorder) + err := helpers.SyncKubeConfigSecret(ctx, secretName, agentNamespace, "/spoke/config/kubeconfig", kubeconfigTemplate, n.kubeClient.CoreV1(), tokenGetter, recorder) if err != nil { _, _, _ = helpers.UpdateKlusterletStatus(ctx, n.klusterletClient, klusterletName, helpers.UpdateKlusterletConditionFn(metav1.Condition{ Type: klusterletApplied, Status: metav1.ConditionFalse, Reason: "KlusterletApplyFailed", diff --git a/test/e2e/clusterset_test.go b/test/e2e/clusterset_test.go index 4ab7c0f6d..028aeb4e3 100644 --- a/test/e2e/clusterset_test.go +++ b/test/e2e/clusterset_test.go @@ -34,19 +34,13 @@ var _ = ginkgo.Describe("Create v1beta2 managedclusterset", func() { } gomega.Eventually(func() bool { _, err := t.ClusterClient.ClusterV1beta2().ManagedClusterSets().Create(context.Background(), managedClusterSet, metav1.CreateOptions{}) - if err != nil { - return false - } - return true + return err == nil }, t.EventuallyTimeout*5, t.EventuallyInterval*5).Should(gomega.BeTrue()) ginkgo.By("Get v1beta2 ManagedClusterSet using v1beta2 client") gomega.Eventually(func() bool { _, err := t.ClusterClient.ClusterV1beta2().ManagedClusterSets().Get(context.Background(), managedClusterSetName, metav1.GetOptions{}) - if err != nil { - return false - } - return true + return err == nil }, t.EventuallyTimeout*5, t.EventuallyInterval*5).Should(gomega.BeTrue()) ginkgo.By("Update v1beta2 ManagedClusterSet using v1beta2 client") @@ -57,20 +51,14 @@ var _ = ginkgo.Describe("Create v1beta2 managedclusterset", func() { } updateManagedClusterSet := managedClusterSet.DeepCopy() updateManagedClusterSet.Spec.ClusterSelector.LabelSelector.MatchLabels = nil - updateManagedClusterSet, err = t.ClusterClient.ClusterV1beta2().ManagedClusterSets().Update(context.Background(), updateManagedClusterSet, metav1.UpdateOptions{}) - if err != nil { - return false - } - return true + _, err = t.ClusterClient.ClusterV1beta2().ManagedClusterSets().Update(context.Background(), updateManagedClusterSet, metav1.UpdateOptions{}) + return err == nil }, t.EventuallyTimeout*5, t.EventuallyInterval*5).Should(gomega.BeTrue()) ginkgo.By("Delete v1beta2 ManagedClusterSet using v1beta2 client") gomega.Eventually(func() bool { err := t.ClusterClient.ClusterV1beta2().ManagedClusterSets().Delete(context.Background(), managedClusterSetName, metav1.DeleteOptions{}) - if err != nil { - return false - } - return true + return err == nil }, t.EventuallyTimeout*5, t.EventuallyInterval*5).Should(gomega.BeTrue()) }) ginkgo.It("Create a v1beta2 labelselector based ManagedClusterSet and get/update/delete with v1beta1 client", func() { @@ -94,10 +82,7 @@ var _ = ginkgo.Describe("Create v1beta2 managedclusterset", func() { } gomega.Eventually(func() bool { _, err := t.ClusterClient.ClusterV1beta2().ManagedClusterSets().Create(context.Background(), managedClusterSet, metav1.CreateOptions{}) - if err != nil { - return false - } - return true + return err == nil }, t.EventuallyTimeout*5, t.EventuallyInterval*5).Should(gomega.BeTrue()) ginkgo.By("Get v1beta2 ManagedClusterSet using v1beta1 client") @@ -123,19 +108,13 @@ var _ = ginkgo.Describe("Create v1beta2 managedclusterset", func() { } updateManagedClusterSet.Spec.ClusterSelector.LabelSelector.MatchLabels = nil _, err = t.ClusterClient.ClusterV1beta1().ManagedClusterSets().Update(context.Background(), updateManagedClusterSet, metav1.UpdateOptions{}) - if err != nil { - return false - } - return true + return err == nil }, t.EventuallyTimeout*5, t.EventuallyInterval*5).Should(gomega.BeTrue()) ginkgo.By("Delete v1beta2 ManagedClusterSet using v1beta1 client") gomega.Eventually(func() bool { err := t.ClusterClient.ClusterV1beta1().ManagedClusterSets().Delete(context.Background(), managedClusterSetName, metav1.DeleteOptions{}) - if err != nil { - return false - } - return true + return err == nil }, t.EventuallyTimeout*5, t.EventuallyInterval*5).Should(gomega.BeTrue()) }) })