From fd175ed05ce918b45c766bbacf49e311c9f1e356 Mon Sep 17 00:00:00 2001 From: Luis Ramirez Date: Wed, 4 Dec 2024 18:45:54 -0500 Subject: [PATCH] Only update secret when cluster secret contents differ Also change the label name --- cmd/root.go | 4 ++-- internal/controller/controller.go | 37 ++++++++++++++++++------------- pkg/common/common.go | 10 ++++----- 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 2bca5e0..baa5679 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -109,10 +109,10 @@ var rootCmd = &cobra.Command{ if _, ok := s.Labels[common.ControllerNameLabel]; ok { var name string var namespace string - if name, ok = s.Annotations[common.SecretNameAnnotation]; !ok { + if name, ok = s.Labels[common.ClusterNameLabel]; !ok { return nil } - if namespace, ok = s.Annotations[common.SecretNamespaceAnnotation]; !ok { + if namespace, ok = s.Labels[common.ClusterNamespaceLabel]; !ok { return nil } return []reconcile.Request{ diff --git a/internal/controller/controller.go b/internal/controller/controller.go index 98f7f2b..c1182ae 100644 --- a/internal/controller/controller.go +++ b/internal/controller/controller.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "reflect" "time" "github.com/superorbital/capargo/pkg/common" @@ -127,34 +128,38 @@ func (c *ClusterKubeconfigReconciler) createOrUpdateArgoCluster(ctx context.Cont Labels: map[string]string{ argocdcommon.LabelKeySecretType: argocdcommon.LabelValueSecretTypeCluster, common.ControllerNameLabel: common.ControllerName, - }, - Annotations: map[string]string{ - common.SecretNameAnnotation: cluster.Name, - common.SecretNamespaceAnnotation: cluster.Namespace, + common.ClusterNameLabel: cluster.Name, + common.ClusterNamespaceLabel: cluster.Namespace, }, }, - StringData: map[string]string{ - "name": cluster.Name, - "server": config.Host, - "config": string(ccJson), + Data: map[string][]byte{ + "name": []byte(cluster.Name), + "server": []byte(config.Host), + "config": ccJson, }, } - action := "Created ArgoCD cluster secret" - err = c.Create(ctx, &argoClusterSecret, &client.CreateOptions{}) - if err != nil && !errors.IsAlreadyExists(err) { + existingArgoClusterSecret := corev1.Secret{} + err = c.Get(ctx, client.ObjectKeyFromObject(&argoClusterSecret), &existingArgoClusterSecret, &client.GetOptions{}) + if err != nil && !errors.IsNotFound(err) { return err } - if err != nil && errors.IsAlreadyExists(err) { - action = "Updated ArgoCD cluster secret" - err = c.Update(ctx, &argoClusterSecret, &client.UpdateOptions{}) - if err != nil { + if errors.IsNotFound(err) { + if err := c.Create(ctx, &argoClusterSecret, &client.CreateOptions{}); err != nil { return err } + logger.V(4).Info("Created ArgoCD cluster", "cluster", cluster) + } else { + if !reflect.DeepEqual(existingArgoClusterSecret.Labels, argoClusterSecret.Labels) || + !reflect.DeepEqual(existingArgoClusterSecret.Data, argoClusterSecret.Data) { + if err := c.Update(ctx, &argoClusterSecret, &client.UpdateOptions{}); err != nil { + return err + } + logger.V(4).Info("Updated ArgoCD cluster", "cluster", cluster) + } } - logger.V(4).Info(action, "cluster", cluster) return nil } diff --git a/pkg/common/common.go b/pkg/common/common.go index 7fd9284..f1c572f 100644 --- a/pkg/common/common.go +++ b/pkg/common/common.go @@ -1,9 +1,9 @@ package common const ( - slug = "superorbital.io" - ControllerName = "capargo" - ControllerNameLabel = slug + "/controller-name" - SecretNameAnnotation = slug + "/cluster-name" - SecretNamespaceAnnotation = slug + "/cluster-namespace" + slug = "superorbital.io" + ControllerName = "capargo" + ControllerNameLabel = ControllerName + "." + slug + "/controller-name" + ClusterNameLabel = ControllerName + "." + slug + "/cluster-name" + ClusterNamespaceLabel = ControllerName + "." + slug + "/cluster-namespace" )