From 0de5f60cdc6f5a087518fca9e64fa9aa18ece8ef Mon Sep 17 00:00:00 2001 From: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Date: Tue, 17 Dec 2024 02:27:37 -0500 Subject: [PATCH] chore(appset): reduce dupe code w/ DB (#21192) * chore(appset): reduce dupe code w/ DB Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix imports Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- applicationset/utils/clusterUtils.go | 62 +++-------------------- applicationset/utils/clusterUtils_test.go | 45 ---------------- 2 files changed, 7 insertions(+), 100 deletions(-) diff --git a/applicationset/utils/clusterUtils.go b/applicationset/utils/clusterUtils.go index 2645ff432cbb9..b95854e600d2f 100644 --- a/applicationset/utils/clusterUtils.go +++ b/applicationset/utils/clusterUtils.go @@ -2,22 +2,15 @@ package utils import ( "context" - "encoding/json" "fmt" - "strconv" - "strings" "sync" - "time" - - log "github.com/sirupsen/logrus" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/argoproj/argo-cd/v2/common" appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/util/db" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" - "k8s.io/utils/ptr" ) // The contents of this file are from @@ -126,11 +119,15 @@ func ListClusters(ctx context.Context, clientset kubernetes.Interface, namespace hasInClusterCredentials := false for i, clusterSecret := range clusterSecrets { // This line has changed from the original Argo CD code: now receives an error, and handles it - cluster, err := secretToCluster(&clusterSecret) + cluster, err := db.SecretToCluster(&clusterSecret) if err != nil || cluster == nil { return nil, fmt.Errorf("unable to convert cluster secret to cluster object '%s': %w", clusterSecret.Name, err) } + // db.SecretToCluster populates these, but they're not meant to be available to the caller. + cluster.Labels = nil + cluster.Annotations = nil + clusterList.Items[i] = *cluster if cluster.Server == appv1.KubernetesInternalAPIServerAddr { hasInClusterCredentials = true @@ -167,48 +164,3 @@ func getLocalCluster(clientset kubernetes.Interface) *appv1.Cluster { cluster.ConnectionState.ModifiedAt = &now return cluster } - -// secretToCluster converts a secret into a Cluster object -func secretToCluster(s *corev1.Secret) (*appv1.Cluster, error) { - var config appv1.ClusterConfig - if len(s.Data["config"]) > 0 { - if err := json.Unmarshal(s.Data["config"], &config); err != nil { - // This line has changed from the original Argo CD: now returns an error rather than panicing. - return nil, err - } - } - - var namespaces []string - for _, ns := range strings.Split(string(s.Data["namespaces"]), ",") { - if ns = strings.TrimSpace(ns); ns != "" { - namespaces = append(namespaces, ns) - } - } - var refreshRequestedAt *metav1.Time - if v, found := s.Annotations[appv1.AnnotationKeyRefresh]; found { - requestedAt, err := time.Parse(time.RFC3339, v) - if err != nil { - log.Warnf("Error while parsing date in cluster secret '%s': %v", s.Name, err) - } else { - refreshRequestedAt = &metav1.Time{Time: requestedAt} - } - } - var shard *int64 - if shardStr := s.Data["shard"]; shardStr != nil { - if val, err := strconv.Atoi(string(shardStr)); err != nil { - log.Warnf("Error while parsing shard in cluster secret '%s': %v", s.Name, err) - } else { - shard = ptr.To(int64(val)) - } - } - cluster := appv1.Cluster{ - ID: string(s.UID), - Server: strings.TrimRight(string(s.Data["server"]), "/"), - Name: string(s.Data["name"]), - Namespaces: namespaces, - Config: config, - RefreshRequestedAt: refreshRequestedAt, - Shard: shard, - } - return &cluster, nil -} diff --git a/applicationset/utils/clusterUtils_test.go b/applicationset/utils/clusterUtils_test.go index 3161f8ac82864..7d71db9f974e1 100644 --- a/applicationset/utils/clusterUtils_test.go +++ b/applicationset/utils/clusterUtils_test.go @@ -20,51 +20,6 @@ const ( fakeNamespace = "fake-ns" ) -// From Argo CD util/db/cluster_test.go -func Test_secretToCluster(t *testing.T) { - secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mycluster", - Namespace: fakeNamespace, - }, - Data: map[string][]byte{ - "name": []byte("test"), - "server": []byte("http://mycluster"), - "config": []byte("{\"username\":\"foo\", \"disableCompression\":true}"), - }, - } - cluster, err := secretToCluster(secret) - require.NoError(t, err) - assert.Equal(t, argoappv1.Cluster{ - Name: "test", - Server: "http://mycluster", - Config: argoappv1.ClusterConfig{ - Username: "foo", - DisableCompression: true, - }, - }, *cluster) -} - -// From Argo CD util/db/cluster_test.go -func Test_secretToCluster_NoConfig(t *testing.T) { - secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "mycluster", - Namespace: fakeNamespace, - }, - Data: map[string][]byte{ - "name": []byte("test"), - "server": []byte("http://mycluster"), - }, - } - cluster, err := secretToCluster(secret) - require.NoError(t, err) - assert.Equal(t, argoappv1.Cluster{ - Name: "test", - Server: "http://mycluster", - }, *cluster) -} - func createClusterSecret(secretName string, clusterName string, clusterServer string) *corev1.Secret { secret := &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{