From 87bc5744a3676f710281f3d59a9e0eeae372a01c Mon Sep 17 00:00:00 2001 From: Mangaal Date: Mon, 25 Mar 2024 15:56:40 +0530 Subject: [PATCH 1/9] add const key value for ComponentRepoServer Signed-off-by: Mangaal --- common/common.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common/common.go b/common/common.go index 628169e6e5075..0e97baf697dd6 100644 --- a/common/common.go +++ b/common/common.go @@ -188,6 +188,9 @@ const ( // AnnotationKeyAppSkipReconcile tells the Application to skip the Application controller reconcile. // Skip reconcile when the value is "true" or any other string values that can be strconv.ParseBool() to be true. AnnotationKeyAppSkipReconcile = "argocd.argoproj.io/skip-reconcile" + + LabelKeyComponentRepoServer = "app.kubernetes.io/component" + LabelValueComponentRepoServer = "repo-server" ) // Environment variables for tuning and debugging Argo CD From 4987796752054c49fcf5d8cb7ef034790c769f92 Mon Sep 17 00:00:00 2001 From: Mangaal Date: Mon, 25 Mar 2024 17:11:25 +0530 Subject: [PATCH 2/9] update NewRepoServerClient() to look for service with ComponentRepoServer labels , if the label exist construct label selector PortForward Signed-off-by: Mangaal --- cmd/argocd/commands/headless/headless.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/cmd/argocd/commands/headless/headless.go b/cmd/argocd/commands/headless/headless.go index d48019a2216b9..eca3cb0fb498a 100644 --- a/cmd/argocd/commands/headless/headless.go +++ b/cmd/argocd/commands/headless/headless.go @@ -18,6 +18,7 @@ import ( "github.com/redis/go-redis/v9" log "github.com/sirupsen/logrus" "github.com/spf13/pflag" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/client-go/kubernetes" cache2 "k8s.io/client-go/tools/cache" @@ -115,6 +116,7 @@ type forwardRepoClientset struct { repoClientset repoapiclient.Clientset err error repoServerName string + kubeClientset kubernetes.Interface } func (c *forwardRepoClientset) NewRepoServerClient() (io.Closer, repoapiclient.RepoServerServiceClient, error) { @@ -122,7 +124,19 @@ func (c *forwardRepoClientset) NewRepoServerClient() (io.Closer, repoapiclient.R overrides := clientcmd.ConfigOverrides{ CurrentContext: c.context, } - repoServerPodLabelSelector := common.LabelKeyAppName + "=" + c.repoServerName + repoServerName := c.repoServerName + repoServererviceLabelSelector := common.LabelKeyComponentRepoServer + "=" + common.LabelValueComponentRepoServer + repoServerServices, err := c.kubeClientset.CoreV1().Services(c.namespace).List(context.Background(), v1.ListOptions{LabelSelector: repoServererviceLabelSelector}) + if err != nil { + c.err = err + return + } + if len(repoServerServices.Items) > 0 { + if repoServerServicelabel, ok := repoServerServices.Items[0].Labels[common.LabelKeyAppName]; ok && repoServerServicelabel != "" { + repoServerName = repoServerServicelabel + } + } + repoServerPodLabelSelector := common.LabelKeyAppName + "=" + repoServerName repoServerPort, err := kubeutil.PortForward(8081, c.namespace, &overrides, repoServerPodLabelSelector) if err != nil { c.err = err @@ -237,7 +251,7 @@ func MaybeStartLocalServer(ctx context.Context, clientOpts *apiclient.ClientOpti KubeClientset: kubeClientset, Insecure: true, ListenHost: *address, - RepoClientset: &forwardRepoClientset{namespace: namespace, context: ctxStr, repoServerName: clientOpts.RepoServerName}, + RepoClientset: &forwardRepoClientset{namespace: namespace, context: ctxStr, repoServerName: clientOpts.RepoServerName, kubeClientset: kubeClientset}, EnableProxyExtension: false, }) srv.Init(ctx) From 29b0e7a37e3ed0434e15f920cf29f0ecb3cf0ce5 Mon Sep 17 00:00:00 2001 From: Mangaal Date: Mon, 25 Mar 2024 17:14:33 +0530 Subject: [PATCH 3/9] add comment for the new constants Signed-off-by: Mangaal --- common/common.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/common.go b/common/common.go index 0e97baf697dd6..f4b176946bcbd 100644 --- a/common/common.go +++ b/common/common.go @@ -188,8 +188,9 @@ const ( // AnnotationKeyAppSkipReconcile tells the Application to skip the Application controller reconcile. // Skip reconcile when the value is "true" or any other string values that can be strconv.ParseBool() to be true. AnnotationKeyAppSkipReconcile = "argocd.argoproj.io/skip-reconcile" - - LabelKeyComponentRepoServer = "app.kubernetes.io/component" + // LabelKeyComponentRepoServer is the label key to identify the component as repo-server + LabelKeyComponentRepoServer = "app.kubernetes.io/component" + // LabelValueComponentRepoServer is the label value for the repo-server component LabelValueComponentRepoServer = "repo-server" ) From ec4b22a3a5f0475936dc5e64ecffc8d5e924fcf3 Mon Sep 17 00:00:00 2001 From: Mangaal Date: Wed, 27 Mar 2024 16:20:36 +0530 Subject: [PATCH 4/9] instead of passing nil which leads to nil ptr referance error, pass empty ClusterSharding{} Signed-off-by: Mangaal --- cmd/argocd/commands/admin/app.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/argocd/commands/admin/app.go b/cmd/argocd/commands/admin/app.go index 096c92f9feb01..6b10165b8c67b 100644 --- a/cmd/argocd/commands/admin/app.go +++ b/cmd/argocd/commands/admin/app.go @@ -24,6 +24,7 @@ import ( "github.com/argoproj/argo-cd/v2/controller" "github.com/argoproj/argo-cd/v2/controller/cache" "github.com/argoproj/argo-cd/v2/controller/metrics" + "github.com/argoproj/argo-cd/v2/controller/sharding" argocdclient "github.com/argoproj/argo-cd/v2/pkg/apiclient" "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" appclientset "github.com/argoproj/argo-cd/v2/pkg/client/clientset/versioned" @@ -437,5 +438,5 @@ func reconcileApplications( } func newLiveStateCache(argoDB db.ArgoDB, appInformer kubecache.SharedIndexInformer, settingsMgr *settings.SettingsManager, server *metrics.MetricsServer) cache.LiveStateCache { - return cache.NewLiveStateCache(argoDB, appInformer, settingsMgr, kubeutil.NewKubectl(), server, func(managedByApp map[string]bool, ref apiv1.ObjectReference) {}, nil, argo.NewResourceTracking()) + return cache.NewLiveStateCache(argoDB, appInformer, settingsMgr, kubeutil.NewKubectl(), server, func(managedByApp map[string]bool, ref apiv1.ObjectReference) {}, &sharding.ClusterSharding{}, argo.NewResourceTracking()) } From dde9a3e6f985886f5e6c048945c21830194c7776 Mon Sep 17 00:00:00 2001 From: Mangaal Date: Wed, 27 Mar 2024 16:33:02 +0530 Subject: [PATCH 5/9] check for operator install repo server name Signed-off-by: Mangaal --- cmd/argocd/commands/admin/app.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/cmd/argocd/commands/admin/app.go b/cmd/argocd/commands/admin/app.go index 6b10165b8c67b..bcd16ed4887e7 100644 --- a/cmd/argocd/commands/admin/app.go +++ b/cmd/argocd/commands/admin/app.go @@ -270,18 +270,26 @@ func NewReconcileCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command var result []appReconcileResult if refresh { + appClientset := appclientset.NewForConfigOrDie(cfg) + kubeClientset := kubernetes.NewForConfigOrDie(cfg) if repoServerAddress == "" { printLine("Repo server is not provided, trying to port-forward to argocd-repo-server pod.") overrides := clientcmd.ConfigOverrides{} - repoServerPodLabelSelector := common.LabelKeyAppName + "=" + clientOpts.RepoServerName + repoServerName := clientOpts.RepoServerName + repoServererviceLabelSelector := common.LabelKeyComponentRepoServer + "=" + common.LabelValueComponentRepoServer + repoServerServices, err := kubeClientset.CoreV1().Services(namespace).List(context.Background(), v1.ListOptions{LabelSelector: repoServererviceLabelSelector}) + errors.CheckError(err) + if len(repoServerServices.Items) > 0 { + if repoServerServicelabel, ok := repoServerServices.Items[0].Labels[common.LabelKeyAppName]; ok && repoServerServicelabel != "" { + repoServerName = repoServerServicelabel + } + } + repoServerPodLabelSelector := common.LabelKeyAppName + "=" + repoServerName repoServerPort, err := kubeutil.PortForward(8081, namespace, &overrides, repoServerPodLabelSelector) errors.CheckError(err) repoServerAddress = fmt.Sprintf("localhost:%d", repoServerPort) } repoServerClient := reposerverclient.NewRepoServerClientset(repoServerAddress, 60, reposerverclient.TLSConfiguration{DisableTLS: false, StrictValidation: false}) - - appClientset := appclientset.NewForConfigOrDie(cfg) - kubeClientset := kubernetes.NewForConfigOrDie(cfg) result, err = reconcileApplications(ctx, kubeClientset, appClientset, namespace, repoServerClient, selector, newLiveStateCache, serverSideDiff) errors.CheckError(err) } else { From eb41e7cad76c7f782f483cba7e599116824a9966 Mon Sep 17 00:00:00 2001 From: Mangaal Date: Wed, 27 Mar 2024 16:38:31 +0530 Subject: [PATCH 6/9] handle empty nil ptr dereference error Signed-off-by: Mangaal --- controller/cache/cache.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 4df1bf9f2c5ac..7e5eca60a5b9e 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -437,7 +437,7 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e return nil, fmt.Errorf("error getting cluster: %w", err) } - if !c.canHandleCluster(cluster) { + if !c.canHandleCluster(cluster) && c.clusterSharding == nil { return nil, fmt.Errorf("controller is configured to ignore cluster %s", cluster.Server) } From 58a7e28705811ff03718b224817c2a4df0bae199 Mon Sep 17 00:00:00 2001 From: Mangaal Date: Thu, 28 Mar 2024 10:57:44 +0530 Subject: [PATCH 7/9] handle nil prt dereference Signed-off-by: Mangaal --- controller/cache/cache.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/controller/cache/cache.go b/controller/cache/cache.go index 7e5eca60a5b9e..826079d62cda3 100644 --- a/controller/cache/cache.go +++ b/controller/cache/cache.go @@ -437,7 +437,11 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e return nil, fmt.Errorf("error getting cluster: %w", err) } - if !c.canHandleCluster(cluster) && c.clusterSharding == nil { + if c.clusterSharding == nil { + return nil, fmt.Errorf("unable to handle cluster %s: cluster sharding is not configured", cluster.Server) + } + + if !c.canHandleCluster(cluster) { return nil, fmt.Errorf("controller is configured to ignore cluster %s", cluster.Server) } From d051cab9fe19c50bbea6aa07c640f7b6a28d2700 Mon Sep 17 00:00:00 2001 From: Mangaal Date: Thu, 28 Mar 2024 20:14:39 +0530 Subject: [PATCH 8/9] typo correction Signed-off-by: Mangaal --- cmd/argocd/commands/admin/app.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/argocd/commands/admin/app.go b/cmd/argocd/commands/admin/app.go index bcd16ed4887e7..ebdec7f261ffc 100644 --- a/cmd/argocd/commands/admin/app.go +++ b/cmd/argocd/commands/admin/app.go @@ -276,8 +276,8 @@ func NewReconcileCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command printLine("Repo server is not provided, trying to port-forward to argocd-repo-server pod.") overrides := clientcmd.ConfigOverrides{} repoServerName := clientOpts.RepoServerName - repoServererviceLabelSelector := common.LabelKeyComponentRepoServer + "=" + common.LabelValueComponentRepoServer - repoServerServices, err := kubeClientset.CoreV1().Services(namespace).List(context.Background(), v1.ListOptions{LabelSelector: repoServererviceLabelSelector}) + repoServerServiceLabelSelector := common.LabelKeyComponentRepoServer + "=" + common.LabelValueComponentRepoServer + repoServerServices, err := kubeClientset.CoreV1().Services(namespace).List(context.Background(), v1.ListOptions{LabelSelector: repoServerServiceLabelSelector}) errors.CheckError(err) if len(repoServerServices.Items) > 0 { if repoServerServicelabel, ok := repoServerServices.Items[0].Labels[common.LabelKeyAppName]; ok && repoServerServicelabel != "" { From 39e53716050062bfcb82c9a852e29cb7d16bd5d2 Mon Sep 17 00:00:00 2001 From: Mangaal Date: Fri, 29 Mar 2024 10:52:04 +0530 Subject: [PATCH 9/9] run clidocsgen Signed-off-by: Mangaal --- docs/operator-manual/server-commands/argocd-repo-server.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/operator-manual/server-commands/argocd-repo-server.md b/docs/operator-manual/server-commands/argocd-repo-server.md index 083bdc2a0a72a..0f824f494f2af 100644 --- a/docs/operator-manual/server-commands/argocd-repo-server.md +++ b/docs/operator-manual/server-commands/argocd-repo-server.md @@ -21,6 +21,7 @@ argocd-repo-server [flags] --disable-helm-manifest-max-extracted-size Disable maximum size of helm manifest archives when extracted --disable-tls Disable TLS on the gRPC endpoint --helm-manifest-max-extracted-size string Maximum size of helm manifest archives when extracted (default "1G") + --helm-registry-max-index-size string Maximum size of registry index file (default "1G") -h, --help help for argocd-repo-server --logformat string Set the logging format. One of: text|json (default "text") --loglevel string Set the logging level. One of: debug|info|warn|error (default "info")