diff --git a/.golangci.yaml b/.golangci.yaml index 4f0bfaaab70df..f3eed8c74d49b 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -36,7 +36,6 @@ linters-settings: - appendAssign - assignOp # Keep it disabled for readability - exitAfterDefer - - ifElseChain - mapKey - typeSwitchVar goimports: diff --git a/applicationset/generators/git.go b/applicationset/generators/git.go index a2269fbb3d38e..ed1358ae43692 100644 --- a/applicationset/generators/git.go +++ b/applicationset/generators/git.go @@ -83,11 +83,12 @@ func (g *GitGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha1.Applic var err error var res []map[string]any - if len(appSetGenerator.Git.Directories) != 0 { + switch { + case len(appSetGenerator.Git.Directories) != 0: res, err = g.generateParamsForGitDirectories(appSetGenerator, noRevisionCache, verifyCommit, appSet.Spec.GoTemplate, appSet.Spec.GoTemplateOptions) - } else if len(appSetGenerator.Git.Files) != 0 { + case len(appSetGenerator.Git.Files) != 0: res, err = g.generateParamsForGitFiles(appSetGenerator, noRevisionCache, verifyCommit, appSet.Spec.GoTemplate, appSet.Spec.GoTemplateOptions) - } else { + default: return nil, EmptyAppSetGeneratorError } if err != nil { diff --git a/applicationset/generators/scm_provider.go b/applicationset/generators/scm_provider.go index 2b10b21a11e9e..a58b66b93dd8d 100644 --- a/applicationset/generators/scm_provider.go +++ b/applicationset/generators/scm_provider.go @@ -138,15 +138,16 @@ func (g *SCMProviderGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha ctx := context.Background() var provider scm_provider.SCMProviderService - if g.overrideProvider != nil { + switch { + case g.overrideProvider != nil: provider = g.overrideProvider - } else if providerConfig.Github != nil { + case providerConfig.Github != nil: var err error provider, err = g.githubProvider(ctx, providerConfig.Github, applicationSetInfo) if err != nil { return nil, fmt.Errorf("scm provider: %w", err) } - } else if providerConfig.Gitlab != nil { + case providerConfig.Gitlab != nil: providerConfig := providerConfig.Gitlab var caCerts []byte var scmError error @@ -164,7 +165,7 @@ func (g *SCMProviderGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha if err != nil { return nil, fmt.Errorf("error initializing Gitlab service: %w", err) } - } else if providerConfig.Gitea != nil { + case providerConfig.Gitea != nil: token, err := utils.GetSecretRef(ctx, g.client, providerConfig.Gitea.TokenRef, applicationSetInfo.Namespace, g.tokenRefStrictMode) if err != nil { return nil, fmt.Errorf("error fetching Gitea token: %w", err) @@ -173,7 +174,7 @@ func (g *SCMProviderGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha if err != nil { return nil, fmt.Errorf("error initializing Gitea service: %w", err) } - } else if providerConfig.BitbucketServer != nil { + case providerConfig.BitbucketServer != nil: providerConfig := providerConfig.BitbucketServer var caCerts []byte var scmError error @@ -183,25 +184,26 @@ func (g *SCMProviderGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha return nil, fmt.Errorf("error fetching CA certificates from ConfigMap: %w", scmError) } } - if providerConfig.BearerToken != nil { + switch { + case providerConfig.BearerToken != nil: appToken, err := utils.GetSecretRef(ctx, g.client, providerConfig.BearerToken.TokenRef, applicationSetInfo.Namespace, g.tokenRefStrictMode) if err != nil { return nil, fmt.Errorf("error fetching Secret Bearer token: %w", err) } provider, scmError = scm_provider.NewBitbucketServerProviderBearerToken(ctx, appToken, providerConfig.API, providerConfig.Project, providerConfig.AllBranches, g.scmRootCAPath, providerConfig.Insecure, caCerts) - } else if providerConfig.BasicAuth != nil { + case providerConfig.BasicAuth != nil: password, err := utils.GetSecretRef(ctx, g.client, providerConfig.BasicAuth.PasswordRef, applicationSetInfo.Namespace, g.tokenRefStrictMode) if err != nil { return nil, fmt.Errorf("error fetching Secret token: %w", err) } provider, scmError = scm_provider.NewBitbucketServerProviderBasicAuth(ctx, providerConfig.BasicAuth.Username, password, providerConfig.API, providerConfig.Project, providerConfig.AllBranches, g.scmRootCAPath, providerConfig.Insecure, caCerts) - } else { + default: provider, scmError = scm_provider.NewBitbucketServerProviderNoAuth(ctx, providerConfig.API, providerConfig.Project, providerConfig.AllBranches, g.scmRootCAPath, providerConfig.Insecure, caCerts) } if scmError != nil { return nil, fmt.Errorf("error initializing Bitbucket Server service: %w", scmError) } - } else if providerConfig.AzureDevOps != nil { + case providerConfig.AzureDevOps != nil: token, err := utils.GetSecretRef(ctx, g.client, providerConfig.AzureDevOps.AccessTokenRef, applicationSetInfo.Namespace, g.tokenRefStrictMode) if err != nil { return nil, fmt.Errorf("error fetching Azure Devops access token: %w", err) @@ -210,7 +212,7 @@ func (g *SCMProviderGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha if err != nil { return nil, fmt.Errorf("error initializing Azure Devops service: %w", err) } - } else if providerConfig.Bitbucket != nil { + case providerConfig.Bitbucket != nil: appPassword, err := utils.GetSecretRef(ctx, g.client, providerConfig.Bitbucket.AppPasswordRef, applicationSetInfo.Namespace, g.tokenRefStrictMode) if err != nil { return nil, fmt.Errorf("error fetching Bitbucket cloud appPassword: %w", err) @@ -219,13 +221,13 @@ func (g *SCMProviderGenerator) GenerateParams(appSetGenerator *argoprojiov1alpha if err != nil { return nil, fmt.Errorf("error initializing Bitbucket cloud service: %w", err) } - } else if providerConfig.AWSCodeCommit != nil { + case providerConfig.AWSCodeCommit != nil: var awsErr error provider, awsErr = scm_provider.NewAWSCodeCommitProvider(ctx, providerConfig.AWSCodeCommit.TagFilters, providerConfig.AWSCodeCommit.Role, providerConfig.AWSCodeCommit.Region, providerConfig.AWSCodeCommit.AllBranches) if awsErr != nil { return nil, fmt.Errorf("error initializing AWS codecommit service: %w", awsErr) } - } else { + default: return nil, errors.New("no SCM provider implementation configured") } diff --git a/cmd/argocd/commands/admin/backup.go b/cmd/argocd/commands/admin/backup.go index 5d4b25903665c..23512cbe8aa4b 100644 --- a/cmd/argocd/commands/admin/backup.go +++ b/cmd/argocd/commands/admin/backup.go @@ -275,7 +275,8 @@ func NewImportCommand() *cobra.Command { updateTracking(bakObj, &liveObj) } - if !exists { + switch { + case !exists: isForbidden := false if !dryRun { _, err = dynClient.Create(ctx, bakObj, metav1.CreateOptions{}) @@ -289,11 +290,11 @@ func NewImportCommand() *cobra.Command { if !isForbidden { fmt.Printf("%s/%s %s in namespace %s created%s\n", gvk.Group, gvk.Kind, bakObj.GetName(), bakObj.GetNamespace(), dryRunMsg) } - } else if specsEqual(*bakObj, liveObj) && checkAppHasNoNeedToStopOperation(liveObj, stopOperation) { + case specsEqual(*bakObj, liveObj) && checkAppHasNoNeedToStopOperation(liveObj, stopOperation): if verbose { fmt.Printf("%s/%s %s unchanged%s\n", gvk.Group, gvk.Kind, bakObj.GetName(), dryRunMsg) } - } else { + default: isForbidden := false if !dryRun { newLive := updateLive(bakObj, &liveObj, stopOperation) diff --git a/cmd/argocd/commands/admin/cluster.go b/cmd/argocd/commands/admin/cluster.go index 6e6745e02039e..97e3a74bd8e52 100644 --- a/cmd/argocd/commands/admin/cluster.go +++ b/cmd/argocd/commands/admin/cluster.go @@ -616,13 +616,14 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command var awsAuthConf *v1alpha1.AWSAuthConfig var execProviderConf *v1alpha1.ExecProviderConfig - if clusterOpts.AwsClusterName != "" { + switch { + case clusterOpts.AwsClusterName != "": awsAuthConf = &v1alpha1.AWSAuthConfig{ ClusterName: clusterOpts.AwsClusterName, RoleARN: clusterOpts.AwsRoleArn, Profile: clusterOpts.AwsProfile, } - } else if clusterOpts.ExecProviderCommand != "" { + case clusterOpts.ExecProviderCommand != "": execProviderConf = &v1alpha1.ExecProviderConfig{ Command: clusterOpts.ExecProviderCommand, Args: clusterOpts.ExecProviderArgs, @@ -630,10 +631,10 @@ func NewGenClusterConfigCommand(pathOpts *clientcmd.PathOptions) *cobra.Command APIVersion: clusterOpts.ExecProviderAPIVersion, InstallHint: clusterOpts.ExecProviderInstallHint, } - } else if generateToken { + case generateToken: bearerToken, err = GenerateToken(clusterOpts, conf) errors.CheckError(err) - } else if bearerToken == "" { + case bearerToken == "": bearerToken = "bearer-token" } if clusterOpts.Name != "" { diff --git a/cmd/argocd/commands/admin/project.go b/cmd/argocd/commands/admin/project.go index 6c42f2e155bfe..244253c2ceae5 100644 --- a/cmd/argocd/commands/admin/project.go +++ b/cmd/argocd/commands/admin/project.go @@ -223,13 +223,14 @@ func updateProjects(ctx context.Context, projIf appclient.AppProjectInterface, p break } policyPermission := modification(proj.Name, action) - if actionPolicyIndex == -1 && policyPermission != "" { + switch { + case actionPolicyIndex == -1 && policyPermission != "": updated = true role.Policies = append(role.Policies, formatPolicy(proj.Name, role.Name, policyPermission)) - } else if actionPolicyIndex > -1 && policyPermission == "" { + case actionPolicyIndex > -1 && policyPermission == "": updated = true role.Policies = append(role.Policies[:actionPolicyIndex], role.Policies[actionPolicyIndex+1:]...) - } else if actionPolicyIndex > -1 && policyPermission != "" { + case actionPolicyIndex > -1 && policyPermission != "": updated = true role.Policies[actionPolicyIndex] = formatPolicy(proj.Name, role.Name, policyPermission) } diff --git a/cmd/argocd/commands/admin/settings.go b/cmd/argocd/commands/admin/settings.go index 8e22cb5d6ad6f..4776b5963339a 100644 --- a/cmd/argocd/commands/admin/settings.go +++ b/cmd/argocd/commands/admin/settings.go @@ -64,9 +64,10 @@ func setSettingsMeta(obj metav1.Object) { func (opts *settingsOpts) createSettingsManager(ctx context.Context) (*settings.SettingsManager, error) { var argocdCM *corev1.ConfigMap - if opts.argocdCMPath == "" && !opts.loadClusterSettings { + switch { + case opts.argocdCMPath == "" && !opts.loadClusterSettings: return nil, stderrors.New("either --argocd-cm-path must be provided or --load-cluster-settings must be set to true") - } else if opts.argocdCMPath == "" { + case opts.argocdCMPath == "": realClientset, ns, err := opts.getK8sClient() if err != nil { return nil, err @@ -76,7 +77,7 @@ func (opts *settingsOpts) createSettingsManager(ctx context.Context) (*settings. if err != nil { return nil, err } - } else { + default: data, err := os.ReadFile(opts.argocdCMPath) if err != nil { return nil, err @@ -89,7 +90,8 @@ func (opts *settingsOpts) createSettingsManager(ctx context.Context) (*settings. setSettingsMeta(argocdCM) var argocdSecret *corev1.Secret - if opts.argocdSecretPath != "" { + switch { + case opts.argocdSecretPath != "": data, err := os.ReadFile(opts.argocdSecretPath) if err != nil { return nil, err @@ -99,7 +101,7 @@ func (opts *settingsOpts) createSettingsManager(ctx context.Context) (*settings. return nil, err } setSettingsMeta(argocdSecret) - } else if opts.loadClusterSettings { + case opts.loadClusterSettings: realClientset, ns, err := opts.getK8sClient() if err != nil { return nil, err @@ -108,7 +110,7 @@ func (opts *settingsOpts) createSettingsManager(ctx context.Context) (*settings. if err != nil { return nil, err } - } else { + default: argocdSecret = &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: common.ArgoCDSecretName, @@ -514,12 +516,12 @@ argocd admin settings resource-overrides health ./deploy.yaml --argocd-cm-path . executeResourceOverrideCommand(ctx, cmdCtx, args, func(res unstructured.Unstructured, _ v1alpha1.ResourceOverride, overrides map[string]v1alpha1.ResourceOverride) { gvk := res.GroupVersionKind() resHealth, err := healthutil.GetResourceHealth(&res, lua.ResourceHealthOverrides(overrides)) - - if err != nil { + switch { + case err != nil: errors.CheckError(err) - } else if resHealth == nil { + case resHealth == nil: fmt.Printf("Health script is not configured for '%s/%s'\n", gvk.Group, gvk.Kind) - } else { + default: _, _ = fmt.Printf("STATUS: %s\n", resHealth.Status) _, _ = fmt.Printf("MESSAGE: %s\n", resHealth.Message) } diff --git a/cmd/argocd/commands/app.go b/cmd/argocd/commands/app.go index 89f7dc4d0b6fc..3ce81351b33a1 100644 --- a/cmd/argocd/commands/app.go +++ b/cmd/argocd/commands/app.go @@ -188,11 +188,12 @@ func NewApplicationCreateCommand(clientOpts *argocdclient.ClientOptions) *cobra. errors.CheckError(err) var action string - if existing == nil { + switch { + case existing == nil: action = "created" - } else if !hasAppChanged(existing, created, upsert) { + case !hasAppChanged(existing, created, upsert): action = "unchanged" - } else { + default: action = "updated" } @@ -1285,7 +1286,8 @@ func NewApplicationDiffCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co argoSettings, err := settingsIf.Get(ctx, &settings.SettingsQuery{}) errors.CheckError(err) diffOption := &DifferenceOption{} - if app.Spec.HasMultipleSources() && len(revisions) > 0 && len(sourcePositions) > 0 { + switch { + case app.Spec.HasMultipleSources() && len(revisions) > 0 && len(sourcePositions) > 0: numOfSources := int64(len(app.Spec.GetSources())) for _, pos := range sourcePositions { if pos <= 0 || pos > numOfSources { @@ -1305,7 +1307,7 @@ func NewApplicationDiffCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co diffOption.res = res diffOption.revisions = revisions diffOption.sourcePositions = sourcePositions - } else if revision != "" { + case revision != "": q := application.ApplicationManifestQuery{ Name: &appName, Revision: &revision, @@ -1315,7 +1317,7 @@ func NewApplicationDiffCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co errors.CheckError(err) diffOption.res = res diffOption.revision = revision - } else if local != "" { + case local != "": if serverSideGenerate { client, err := appIf.GetManifestsWithFiles(ctx, grpc_retry.Disable()) errors.CheckError(err) @@ -1381,10 +1383,11 @@ func findandPrintDiff(ctx context.Context, app *argoappv1.Application, proj *arg liveObjs, err := cmdutil.LiveObjects(resources.Items) errors.CheckError(err) items := make([]objKeyLiveTarget, 0) - if diffOptions.local != "" { + switch { + case diffOptions.local != "": localObjs := groupObjsByKey(getLocalObjects(ctx, app, proj, diffOptions.local, diffOptions.localRepoRoot, argoSettings.AppLabelKey, diffOptions.cluster.Info.ServerVersion, diffOptions.cluster.Info.APIVersions, argoSettings.KustomizeOptions, argoSettings.TrackingMethod), liveObjs, app.Spec.Destination.Namespace) items = groupObjsForDiff(resources, localObjs, items, argoSettings, app.InstanceName(argoSettings.ControllerNamespace), app.Spec.Destination.Namespace) - } else if diffOptions.revision != "" || len(diffOptions.revisions) > 0 { + case diffOptions.revision != "" || len(diffOptions.revisions) > 0: var unstructureds []*unstructured.Unstructured for _, mfst := range diffOptions.res.Manifests { obj, err := argoappv1.UnmarshalToUnstructured(mfst) @@ -1393,7 +1396,7 @@ func findandPrintDiff(ctx context.Context, app *argoappv1.Application, proj *arg } groupedObjs := groupObjsByKey(unstructureds, liveObjs, app.Spec.Destination.Namespace) items = groupObjsForDiff(resources, groupedObjs, items, argoSettings, app.InstanceName(argoSettings.ControllerNamespace), app.Spec.Destination.Namespace) - } else if diffOptions.serversideRes != nil { + case diffOptions.serversideRes != nil: var unstructureds []*unstructured.Unstructured for _, mfst := range diffOptions.serversideRes.Manifests { obj, err := argoappv1.UnmarshalToUnstructured(mfst) @@ -1402,7 +1405,7 @@ func findandPrintDiff(ctx context.Context, app *argoappv1.Application, proj *arg } groupedObjs := groupObjsByKey(unstructureds, liveObjs, app.Spec.Destination.Namespace) items = groupObjsForDiff(resources, groupedObjs, items, argoSettings, app.InstanceName(argoSettings.ControllerNamespace), app.Spec.Destination.Namespace) - } else { + default: for i := range resources.Items { res := resources.Items[i] live := &unstructured.Unstructured{} @@ -2456,25 +2459,26 @@ func checkResourceStatus(watch watchOpts, healthStatus string, syncStatus string } healthCheckPassed := true - if watch.suspended && watch.health && watch.degraded { + switch { + case watch.suspended && watch.health && watch.degraded: healthCheckPassed = healthStatus == string(health.HealthStatusHealthy) || healthStatus == string(health.HealthStatusSuspended) || healthStatus == string(health.HealthStatusDegraded) - } else if watch.suspended && watch.degraded { + case watch.suspended && watch.degraded: healthCheckPassed = healthStatus == string(health.HealthStatusDegraded) || healthStatus == string(health.HealthStatusSuspended) - } else if watch.degraded && watch.health { + case watch.degraded && watch.health: healthCheckPassed = healthStatus == string(health.HealthStatusHealthy) || healthStatus == string(health.HealthStatusDegraded) // below are good - } else if watch.suspended && watch.health { + case watch.suspended && watch.health: healthCheckPassed = healthStatus == string(health.HealthStatusHealthy) || healthStatus == string(health.HealthStatusSuspended) - } else if watch.suspended { + case watch.suspended: healthCheckPassed = healthStatus == string(health.HealthStatusSuspended) - } else if watch.health { + case watch.health: healthCheckPassed = healthStatus == string(health.HealthStatusHealthy) - } else if watch.degraded { + case watch.degraded: healthCheckPassed = healthStatus == string(health.HealthStatusDegraded) } @@ -3019,7 +3023,8 @@ func NewApplicationManifestsCommand(clientOpts *argocdclient.ClientOptions) *cob var unstructureds []*unstructured.Unstructured switch source { case "git": - if local != "" { + switch { + case local != "": settingsConn, settingsIf := clientset.NewSettingsClientOrDie() defer argoio.Close(settingsConn) argoSettings, err := settingsIf.Get(context.Background(), &settings.SettingsQuery{}) @@ -3033,7 +3038,7 @@ func NewApplicationManifestsCommand(clientOpts *argocdclient.ClientOptions) *cob proj := getProject(ctx, c, clientOpts, app.Spec.Project) //nolint:staticcheck unstructureds = getLocalObjects(context.Background(), app, proj.Project, local, localRepoRoot, argoSettings.AppLabelKey, cluster.ServerVersion, cluster.Info.APIVersions, argoSettings.KustomizeOptions, argoSettings.TrackingMethod) - } else if len(revisions) > 0 && len(sourcePositions) > 0 { + case len(revisions) > 0 && len(sourcePositions) > 0: q := application.ApplicationManifestQuery{ Name: &appName, AppNamespace: &appNs, @@ -3049,7 +3054,7 @@ func NewApplicationManifestsCommand(clientOpts *argocdclient.ClientOptions) *cob errors.CheckError(err) unstructureds = append(unstructureds, obj) } - } else if revision != "" { + case revision != "": q := application.ApplicationManifestQuery{ Name: &appName, AppNamespace: &appNs, @@ -3063,7 +3068,7 @@ func NewApplicationManifestsCommand(clientOpts *argocdclient.ClientOptions) *cob errors.CheckError(err) unstructureds = append(unstructureds, obj) } - } else { + default: targetObjs, err := targetObjects(resources.Items) errors.CheckError(err) unstructureds = targetObjs diff --git a/cmd/argocd/commands/app_resources.go b/cmd/argocd/commands/app_resources.go index 6df7368894866..58d7b0f9f9818 100644 --- a/cmd/argocd/commands/app_resources.go +++ b/cmd/argocd/commands/app_resources.go @@ -211,7 +211,8 @@ func printTreeViewAppResourcesOrphaned(nodeMapping map[string]v1alpha1.ResourceN func printResources(listAll bool, orphaned bool, appResourceTree *v1alpha1.ApplicationTree, output string) { w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) - if output == "tree=detailed" { + switch output { + case "tree=detailed": fmt.Fprintf(w, "GROUP\tKIND\tNAMESPACE\tNAME\tORPHANED\tAGE\tHEALTH\tREASON\n") if !orphaned || listAll { @@ -223,7 +224,7 @@ func printResources(listAll bool, orphaned bool, appResourceTree *v1alpha1.Appli mapUidToNode, mapParentToChild, parentNode := parentChildInfo(appResourceTree.OrphanedNodes) printDetailedTreeViewAppResourcesOrphaned(mapUidToNode, mapParentToChild, parentNode, w) } - } else if output == "tree" { + case "tree": fmt.Fprintf(w, "GROUP\tKIND\tNAMESPACE\tNAME\tORPHANED\n") if !orphaned || listAll { @@ -235,7 +236,7 @@ func printResources(listAll bool, orphaned bool, appResourceTree *v1alpha1.Appli mapUidToNode, mapParentToChild, parentNode := parentChildInfo(appResourceTree.OrphanedNodes) printTreeViewAppResourcesOrphaned(mapUidToNode, mapParentToChild, parentNode, w) } - } else { + default: headers := []any{"GROUP", "KIND", "NAMESPACE", "NAME", "ORPHANED"} fmtStr := "%s\t%s\t%s\t%s\t%s\n" _, _ = fmt.Fprintf(w, fmtStr, headers...) diff --git a/cmd/argocd/commands/applicationset.go b/cmd/argocd/commands/applicationset.go index f01f897a9adf5..1bdb041e4303c 100644 --- a/cmd/argocd/commands/applicationset.go +++ b/cmd/argocd/commands/applicationset.go @@ -173,11 +173,12 @@ func NewApplicationSetCreateCommand(clientOpts *argocdclient.ClientOptions) *cob } var action string - if existing == nil { + switch { + case existing == nil: action = "created" - } else if !hasAppSetChanged(existing, created, upsert) { + case !hasAppSetChanged(existing, created, upsert): action = "unchanged" - } else { + default: action = "updated" } diff --git a/cmd/argocd/commands/cluster.go b/cmd/argocd/commands/cluster.go index fb8251b7246aa..a77f5f3e005ca 100644 --- a/cmd/argocd/commands/cluster.go +++ b/cmd/argocd/commands/cluster.go @@ -117,13 +117,14 @@ func NewClusterAddCommand(clientOpts *argocdclient.ClientOptions, pathOpts *clie managerBearerToken := "" var awsAuthConf *argoappv1.AWSAuthConfig var execProviderConf *argoappv1.ExecProviderConfig - if clusterOpts.AwsClusterName != "" { + switch { + case clusterOpts.AwsClusterName != "": awsAuthConf = &argoappv1.AWSAuthConfig{ ClusterName: clusterOpts.AwsClusterName, RoleARN: clusterOpts.AwsRoleArn, Profile: clusterOpts.AwsProfile, } - } else if clusterOpts.ExecProviderCommand != "" { + case clusterOpts.ExecProviderCommand != "": execProviderConf = &argoappv1.ExecProviderConfig{ Command: clusterOpts.ExecProviderCommand, Args: clusterOpts.ExecProviderArgs, @@ -131,7 +132,7 @@ func NewClusterAddCommand(clientOpts *argocdclient.ClientOptions, pathOpts *clie APIVersion: clusterOpts.ExecProviderAPIVersion, InstallHint: clusterOpts.ExecProviderInstallHint, } - } else { + default: // Install RBAC resources for managing the cluster if clusterOpts.ServiceAccount != "" { managerBearerToken, err = clusterauth.GetServiceAccountBearerToken(clientset, clusterOpts.SystemNamespace, clusterOpts.ServiceAccount, common.BearerTokenTimeout) diff --git a/cmd/argocd/commands/login.go b/cmd/argocd/commands/login.go index 007bedf8d3a8f..489194ce9f615 100644 --- a/cmd/argocd/commands/login.go +++ b/cmd/argocd/commands/login.go @@ -67,11 +67,12 @@ argocd login cd.argoproj.io --core`, os.Exit(1) } - if globalClientOpts.PortForward { + switch { + case globalClientOpts.PortForward: server = "port-forward" - } else if globalClientOpts.Core { + case globalClientOpts.Core: server = "kubernetes" - } else { + default: server = args[0] if !skipTestTLS { diff --git a/cmd/util/app.go b/cmd/util/app.go index 6613e648262c5..6e748f716977c 100644 --- a/cmd/util/app.go +++ b/cmd/util/app.go @@ -199,11 +199,12 @@ func SetAppSpecOptions(flags *pflag.FlagSet, spec *argoappv1.ApplicationSpec, ap } source, visited = ConstructSource(source, *appOpts, flags) if spec.HasMultipleSources() { - if sourcePosition == 0 { + switch { + case sourcePosition == 0: spec.Sources[sourcePosition] = *source - } else if sourcePosition > 0 { + case sourcePosition > 0: spec.Sources[sourcePosition-1] = *source - } else { + default: spec.Sources = append(spec.Sources, *source) } } else { @@ -259,7 +260,8 @@ func SetAppSpecOptions(flags *pflag.FlagSet, spec *argoappv1.ApplicationSpec, ap spec.SyncPolicy = nil } case "sync-retry-limit": - if appOpts.retryLimit > 0 { + switch { + case appOpts.retryLimit > 0: if spec.SyncPolicy == nil { spec.SyncPolicy = &argoappv1.SyncPolicy{} } @@ -271,13 +273,13 @@ func SetAppSpecOptions(flags *pflag.FlagSet, spec *argoappv1.ApplicationSpec, ap Factor: ptr.To(appOpts.retryBackoffFactor), }, } - } else if appOpts.retryLimit == 0 { + case appOpts.retryLimit == 0: if spec.SyncPolicy.IsZero() { spec.SyncPolicy = nil } else { spec.SyncPolicy.Retry = nil } - } else { + default: log.Fatalf("Invalid sync-retry-limit [%d]", appOpts.retryLimit) } } diff --git a/cmd/util/project.go b/cmd/util/project.go index 86e7b2b95a337..46a05801696df 100644 --- a/cmd/util/project.go +++ b/cmd/util/project.go @@ -202,13 +202,14 @@ func ConstructAppProj(fileURL string, args []string, opts ProjectOpts, c *cobra. APIVersion: application.Group + "/v1alpha1", }, } - if fileURL == "-" { + switch { + case fileURL == "-": // read stdin err := readProjFromStdin(&proj) if err != nil { return nil, err } - } else if fileURL != "" { + case fileURL != "": // read uri err := readProjFromURI(fileURL, &proj) if err != nil { @@ -218,7 +219,7 @@ func ConstructAppProj(fileURL string, args []string, opts ProjectOpts, c *cobra. if len(args) == 1 && args[0] != proj.Name { return nil, fmt.Errorf("project name '%s' does not match project spec metadata.name '%s'", args[0], proj.Name) } - } else { + default: // read arguments if len(args) == 0 { c.HelpFunc()(c, args) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 9b1b6323edb3f..4429c64beae39 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1365,7 +1365,8 @@ func (ctrl *ApplicationController) processRequestedAppOperation(app *appv1.Appli state = app.Status.OperationState.DeepCopy() terminating = state.Phase == synccommon.OperationTerminating // Failed operation with retry strategy might have be in-progress and has completion time - if state.FinishedAt != nil && !terminating { + switch { + case state.FinishedAt != nil && !terminating: retryAt, err := app.Status.OperationState.Operation.Retry.NextRetryAt(state.FinishedAt.Time, state.RetryCount) if err != nil { state.Phase = synccommon.OperationFailed @@ -1385,12 +1386,12 @@ func (ctrl *ApplicationController) processRequestedAppOperation(app *appv1.Appli ctrl.setOperationState(app, state) // Get rid of sync results and null out previous operation completion time state.SyncResult = nil - } else if ctrl.syncTimeout != time.Duration(0) && time.Now().After(state.StartedAt.Add(ctrl.syncTimeout)) && !terminating { + case ctrl.syncTimeout != time.Duration(0) && time.Now().After(state.StartedAt.Add(ctrl.syncTimeout)) && !terminating: state.Phase = synccommon.OperationTerminating state.Message = "operation is terminating due to timeout" ctrl.setOperationState(app, state) logCtx.Infof("Terminating in-progress operation due to timeout. Started at: %v, timeout: %v", state.StartedAt, ctrl.syncTimeout) - } else { + default: logCtx.Infof("Resuming in-progress operation. phase: %s, message: %s", state.Phase, state.Message) } } else { diff --git a/controller/cache/info.go b/controller/cache/info.go index dc94de479bfb6..78de447bbe482 100644 --- a/controller/cache/info.go +++ b/controller/cache/info.go @@ -405,17 +405,18 @@ func populatePodInfo(un *unstructured.Unstructured, res *ResourceInfo) { container := pod.Status.ContainerStatuses[i] restarts += int(container.RestartCount) - if container.State.Waiting != nil && container.State.Waiting.Reason != "" { + switch { + case container.State.Waiting != nil && container.State.Waiting.Reason != "": reason = container.State.Waiting.Reason - } else if container.State.Terminated != nil && container.State.Terminated.Reason != "" { + case container.State.Terminated != nil && container.State.Terminated.Reason != "": reason = container.State.Terminated.Reason - } else if container.State.Terminated != nil && container.State.Terminated.Reason == "" { + case container.State.Terminated != nil && container.State.Terminated.Reason == "": if container.State.Terminated.Signal != 0 { reason = fmt.Sprintf("Signal:%d", container.State.Terminated.Signal) } else { reason = fmt.Sprintf("ExitCode:%d", container.State.Terminated.ExitCode) } - } else if container.Ready && container.State.Running != nil { + case container.Ready && container.State.Running != nil: hasRunning = true readyContainers++ } diff --git a/controller/clusterinfoupdater.go b/controller/clusterinfoupdater.go index 2870b6ea1755e..65f4aed5960f2 100644 --- a/controller/clusterinfoupdater.go +++ b/controller/clusterinfoupdater.go @@ -147,15 +147,16 @@ func (c *clusterInfoUpdater) getUpdatedClusterInfo(ctx context.Context, apps []* if info != nil { clusterInfo.ServerVersion = info.K8SVersion clusterInfo.APIVersions = argo.APIResourcesToStrings(info.APIResources, true) - if info.LastCacheSyncTime == nil { + switch { + case info.LastCacheSyncTime == nil: clusterInfo.ConnectionState.Status = appv1.ConnectionStatusUnknown - } else if info.SyncError == nil { + case info.SyncError == nil: clusterInfo.ConnectionState.Status = appv1.ConnectionStatusSuccessful syncTime := metav1.NewTime(*info.LastCacheSyncTime) clusterInfo.CacheInfo.LastCacheSyncTime = &syncTime clusterInfo.CacheInfo.APIsCount = int64(info.APIsCount) clusterInfo.CacheInfo.ResourcesCount = int64(info.ResourcesCount) - } else { + default: clusterInfo.ConnectionState.Status = appv1.ConnectionStatusFailed clusterInfo.ConnectionState.Message = info.SyncError.Error() } diff --git a/controller/hydrator/hydrator.go b/controller/hydrator/hydrator.go index 57657aca3b358..743f2dbeac0e9 100644 --- a/controller/hydrator/hydrator.go +++ b/controller/hydrator/hydrator.go @@ -336,15 +336,16 @@ func appNeedsHydration(app *appv1.Application, statusHydrateTimeout time.Duratio hydratedAt = &app.Status.SourceHydrator.CurrentOperation.StartedAt } - if app.IsHydrateRequested() { + switch { + case app.IsHydrateRequested(): return true, "hydrate requested" - } else if app.Status.SourceHydrator.CurrentOperation == nil { + case app.Status.SourceHydrator.CurrentOperation == nil: return true, "no previous hydrate operation" - } else if !app.Spec.SourceHydrator.DeepEquals(app.Status.SourceHydrator.CurrentOperation.SourceHydrator) { + case !app.Spec.SourceHydrator.DeepEquals(app.Status.SourceHydrator.CurrentOperation.SourceHydrator): return true, "spec.sourceHydrator differs" - } else if app.Status.SourceHydrator.CurrentOperation.Phase == appv1.HydrateOperationPhaseFailed && metav1.Now().Sub(app.Status.SourceHydrator.CurrentOperation.FinishedAt.Time) > 2*time.Minute { + case app.Status.SourceHydrator.CurrentOperation.Phase == appv1.HydrateOperationPhaseFailed && metav1.Now().Sub(app.Status.SourceHydrator.CurrentOperation.FinishedAt.Time) > 2*time.Minute: return true, "previous hydrate operation failed more than 2 minutes ago" - } else if hydratedAt == nil || hydratedAt.Add(statusHydrateTimeout).Before(time.Now().UTC()) { + case hydratedAt == nil || hydratedAt.Add(statusHydrateTimeout).Before(time.Now().UTC()): return true, "hydration expired" } diff --git a/controller/sharding/cache.go b/controller/sharding/cache.go index b1aa29ba6859f..0aa263c86e073 100644 --- a/controller/sharding/cache.go +++ b/controller/sharding/cache.go @@ -153,11 +153,12 @@ func (sharding *ClusterSharding) updateDistribution() { } existingShard, ok := sharding.Shards[k] - if ok && existingShard != shard { + switch { + case ok && existingShard != shard: log.Infof("Cluster %s has changed shard from %d to %d", k, existingShard, shard) - } else if !ok { + case !ok: log.Infof("Cluster %s has been assigned to shard %d", k, shard) - } else { + default: log.Debugf("Cluster %s has not changed shard", k) } sharding.Shards[k] = shard diff --git a/controller/state.go b/controller/state.go index 5b1c7dbc0833a..5ea71e80909eb 100644 --- a/controller/state.go +++ b/controller/state.go @@ -821,12 +821,13 @@ func (m *appStateManager) CompareAppState(app *v1alpha1.Application, project *v1 // namespace from being pruned. isManagedNs := isManagedNamespace(targetObj, app) && liveObj == nil - if resState.Hook || ignore.Ignore(obj) || (targetObj != nil && hookutil.Skip(targetObj)) || !isSelfReferencedObj { + switch { + case resState.Hook || ignore.Ignore(obj) || (targetObj != nil && hookutil.Skip(targetObj)) || !isSelfReferencedObj: // For resource hooks, skipped resources or objects that may have // been created by another controller with annotations copied from // the source object, don't store sync status, and do not affect // overall sync status - } else if !isManagedNs && (diffResult.Modified || targetObj == nil || liveObj == nil) { + case !isManagedNs && (diffResult.Modified || targetObj == nil || liveObj == nil): // Set resource state to OutOfSync since one of the following is true: // * target and live resource are different // * target resource not defined and live resource is extra @@ -837,7 +838,7 @@ func (m *appStateManager) CompareAppState(app *v1alpha1.Application, project *v1 if !(needsPruning && resourceutil.HasAnnotationOption(obj, common.AnnotationCompareOptions, "IgnoreExtraneous")) { syncCode = v1alpha1.SyncStatusCodeOutOfSync } - } else { + default: resState.Status = v1alpha1.SyncStatusCodeSynced } // set unknown status to all resource that are not permitted in the app project diff --git a/pkg/apiclient/apiclient.go b/pkg/apiclient/apiclient.go index 2487e938edc7d..ea56a3b939444 100644 --- a/pkg/apiclient/apiclient.go +++ b/pkg/apiclient/apiclient.go @@ -319,7 +319,8 @@ func (c *client) OIDCConfig(ctx context.Context, set *settingspkg.Settings) (*oa var clientID string var issuerURL string var scopes []string - if set.OIDCConfig != nil && set.OIDCConfig.Issuer != "" { + switch { + case set.OIDCConfig != nil && set.OIDCConfig.Issuer != "": if set.OIDCConfig.CLIClientID != "" { clientID = set.OIDCConfig.CLIClientID } else { @@ -327,10 +328,10 @@ func (c *client) OIDCConfig(ctx context.Context, set *settingspkg.Settings) (*oa } issuerURL = set.OIDCConfig.Issuer scopes = set.OIDCConfig.Scopes - } else if set.DexConfig != nil && len(set.DexConfig.Connectors) > 0 { + case set.DexConfig != nil && len(set.DexConfig.Connectors) > 0: clientID = common.ArgoCDCLIClientAppID issuerURL = fmt.Sprintf("%s%s", set.URL, common.DexAPIEndpoint) - } else { + default: return nil, nil, fmt.Errorf("%s is not configured with SSO", c.ServerAddr) } provider, err := oidc.NewProvider(ctx, issuerURL) diff --git a/pkg/apis/application/v1alpha1/app_project_types.go b/pkg/apis/application/v1alpha1/app_project_types.go index 41f5198eb3d25..cb63dd52b1c45 100644 --- a/pkg/apis/application/v1alpha1/app_project_types.go +++ b/pkg/apis/application/v1alpha1/app_project_types.go @@ -493,11 +493,12 @@ func (proj AppProject) isDestinationMatched(dst ApplicationDestination) bool { dstNamespaceMatched := globMatch(item.Namespace, dst.Namespace, true) matched := (dstServerMatched || dstNameMatched) && dstNamespaceMatched - if matched { + switch { + case matched: anyDestinationMatched = true - } else if (!dstNameMatched && isDenyPattern(item.Name)) || (!dstServerMatched && isDenyPattern(item.Server)) && dstNamespaceMatched { + case (!dstNameMatched && isDenyPattern(item.Name)) || (!dstServerMatched && isDenyPattern(item.Server)) && dstNamespaceMatched: return false - } else if !dstNamespaceMatched && isDenyPattern(item.Namespace) && dstServerMatched { + case !dstNamespaceMatched && isDenyPattern(item.Namespace) && dstServerMatched: return false } } diff --git a/pkg/apis/application/v1alpha1/applicationset_types.go b/pkg/apis/application/v1alpha1/applicationset_types.go index cc79f20e19444..07f22bfb15e0f 100644 --- a/pkg/apis/application/v1alpha1/applicationset_types.go +++ b/pkg/apis/application/v1alpha1/applicationset_types.go @@ -447,15 +447,16 @@ type SCMProviderGenerator struct { } func (g *SCMProviderGenerator) CustomApiUrl() string { - if g.Github != nil { + switch { + case g.Github != nil: return g.Github.API - } else if g.Gitlab != nil { + case g.Gitlab != nil: return g.Gitlab.API - } else if g.Gitea != nil { + case g.Gitea != nil: return g.Gitea.API - } else if g.BitbucketServer != nil { + case g.BitbucketServer != nil: return g.BitbucketServer.API - } else if g.AzureDevOps != nil { + case g.AzureDevOps != nil: return g.AzureDevOps.API } return "" diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 43bf5cb76bb45..a53500172d94d 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -1506,11 +1506,12 @@ type SyncStrategy struct { // Force returns true if the sync strategy specifies to perform a forced sync func (m *SyncStrategy) Force() bool { - if m == nil { + switch { + case m == nil: return false - } else if m.Apply != nil { + case m.Apply != nil: return m.Apply.Force - } else if m.Hook != nil { + case m.Hook != nil: return m.Hook.Force } return false @@ -3314,7 +3315,9 @@ func ParseProxyUrl(proxyUrl string) (*url.URL, error) { func (c *Cluster) RawRestConfig() (*rest.Config, error) { var config *rest.Config var err error - if c.Server == KubernetesInternalAPIServerAddr && env.ParseBoolFromEnv(EnvVarFakeInClusterConfig, false) { + + switch { + case c.Server == KubernetesInternalAPIServerAddr && env.ParseBoolFromEnv(EnvVarFakeInClusterConfig, false): conf, exists := os.LookupEnv("KUBECONFIG") if exists { config, err = clientcmd.BuildConfigFromFlags("", conf) @@ -3326,9 +3329,9 @@ func (c *Cluster) RawRestConfig() (*rest.Config, error) { } config, err = clientcmd.BuildConfigFromFlags("", filepath.Join(homeDir, ".kube", "config")) } - } else if c.Server == KubernetesInternalAPIServerAddr && c.Config.Username == "" && c.Config.Password == "" && c.Config.BearerToken == "" { + case c.Server == KubernetesInternalAPIServerAddr && c.Config.Username == "" && c.Config.Password == "" && c.Config.BearerToken == "": config, err = rest.InClusterConfig() - } else if c.Server == KubernetesInternalAPIServerAddr { + case c.Server == KubernetesInternalAPIServerAddr: config, err = rest.InClusterConfig() if err == nil { config.Username = c.Config.Username @@ -3336,7 +3339,7 @@ func (c *Cluster) RawRestConfig() (*rest.Config, error) { config.BearerToken = c.Config.BearerToken config.BearerTokenFile = "" } - } else { + default: tlsClientConfig := rest.TLSClientConfig{ Insecure: c.Config.TLSClientConfig.Insecure, ServerName: c.Config.TLSClientConfig.ServerName, @@ -3344,7 +3347,8 @@ func (c *Cluster) RawRestConfig() (*rest.Config, error) { KeyData: c.Config.TLSClientConfig.KeyData, CAData: c.Config.TLSClientConfig.CAData, } - if c.Config.AWSAuthConfig != nil { + switch { + case c.Config.AWSAuthConfig != nil: args := []string{"aws", "--cluster-name", c.Config.AWSAuthConfig.ClusterName} if c.Config.AWSAuthConfig.RoleARN != "" { args = append(args, "--role-arn", c.Config.AWSAuthConfig.RoleARN) @@ -3362,7 +3366,7 @@ func (c *Cluster) RawRestConfig() (*rest.Config, error) { InteractiveMode: api.NeverExecInteractiveMode, }, } - } else if c.Config.ExecProviderConfig != nil { + case c.Config.ExecProviderConfig != nil: var env []api.ExecEnvVar if c.Config.ExecProviderConfig.Env != nil { for key, value := range c.Config.ExecProviderConfig.Env { @@ -3384,7 +3388,7 @@ func (c *Cluster) RawRestConfig() (*rest.Config, error) { InteractiveMode: api.NeverExecInteractiveMode, }, } - } else { + default: config = &rest.Config{ Host: c.Server, Username: c.Config.Username, diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index 83d0da1696265..3edb6bc11b009 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -1483,7 +1483,8 @@ func GenerateManifests(ctx context.Context, appPath, repoRoot, revision string, } var targets []*unstructured.Unstructured - if obj.IsList() { + switch { + case obj.IsList(): err = obj.EachListItem(func(object runtime.Object) error { unstructuredObj, ok := object.(*unstructured.Unstructured) if ok { @@ -1495,9 +1496,9 @@ func GenerateManifests(ctx context.Context, appPath, repoRoot, revision string, if err != nil { return nil, err } - } else if isNullList(obj) { + case isNullList(obj): // noop - } else { + default: targets = []*unstructured.Unstructured{obj} } @@ -1573,11 +1574,12 @@ func mergeSourceParameters(source *v1alpha1.ApplicationSource, path, appName str for _, filename := range overrides { info, err := os.Stat(filename) - if os.IsNotExist(err) { + switch { + case os.IsNotExist(err): continue - } else if info != nil && info.IsDir() { + case info != nil && info.IsDir(): continue - } else if err != nil { + case err != nil: // filename should be part of error message here return err } diff --git a/server/application/application.go b/server/application/application.go index 6a0959c4b99ad..c6568187edf1a 100644 --- a/server/application/application.go +++ b/server/application/application.go @@ -1473,14 +1473,15 @@ func (s *Server) DeleteResource(ctx context.Context, q *application.ApplicationR return nil, err } var deleteOption metav1.DeleteOptions - if q.GetOrphan() { + switch { + case q.GetOrphan(): propagationPolicy := metav1.DeletePropagationOrphan deleteOption = metav1.DeleteOptions{PropagationPolicy: &propagationPolicy} - } else if q.GetForce() { + case q.GetForce(): propagationPolicy := metav1.DeletePropagationBackground zeroGracePeriod := int64(0) deleteOption = metav1.DeleteOptions{PropagationPolicy: &propagationPolicy, GracePeriodSeconds: &zeroGracePeriod} - } else { + default: propagationPolicy := metav1.DeletePropagationForeground deleteOption = metav1.DeleteOptions{PropagationPolicy: &propagationPolicy} } diff --git a/server/cluster/cluster.go b/server/cluster/cluster.go index 5046961710e7a..d15721065e6e3 100644 --- a/server/cluster/cluster.go +++ b/server/cluster/cluster.go @@ -168,11 +168,12 @@ func (s *Server) Create(ctx context.Context, q *cluster.ClusterCreateRequest) (* return nil, status.Errorf(codes.Internal, "unable to check existing cluster details: %v", getErr) } - if existing.Equals(c) { + switch { + case existing.Equals(c): clust = existing - } else if q.Upsert { + case q.Upsert: return s.Update(ctx, &cluster.ClusterUpdateRequest{Cluster: c}) - } else { + default: return nil, status.Error(codes.InvalidArgument, argo.GenerateSpecIsDifferentErrorMessage("cluster", existing, c)) } } @@ -227,15 +228,16 @@ func (s *Server) getCluster(ctx context.Context, q *cluster.ClusterQuery) (*appv if q.Id != nil { q.Server = "" q.Name = "" - if q.Id.Type == "name" { + switch q.Id.Type { + case "name": q.Name = q.Id.Value - } else if q.Id.Type == "name_escaped" { + case "name_escaped": nameUnescaped, err := url.QueryUnescape(q.Id.Value) if err != nil { return nil, fmt.Errorf("failed to unescape cluster name: %w", err) } q.Name = nameUnescaped - } else { + default: q.Server = q.Id.Value } } diff --git a/server/repocreds/repocreds.go b/server/repocreds/repocreds.go index 0b3b6b6eed058..d50819c61e36b 100644 --- a/server/repocreds/repocreds.go +++ b/server/repocreds/repocreds.go @@ -112,11 +112,12 @@ func (s *Server) CreateRepositoryCredentials(ctx context.Context, q *repocredspk return nil, status.Errorf(codes.Internal, "unable to check existing repository credentials details: %v", getErr) } - if reflect.DeepEqual(existing, r) { + switch { + case reflect.DeepEqual(existing, r): err = nil - } else if q.Upsert { + case q.Upsert: return s.UpdateRepositoryCredentials(ctx, &repocredspkg.RepoCredsUpdateRequest{Creds: r}) - } else { + default: return nil, status.Error(codes.InvalidArgument, argo.GenerateSpecIsDifferentErrorMessage("repository credentials", existing, r)) } } @@ -146,11 +147,12 @@ func (s *Server) CreateWriteRepositoryCredentials(ctx context.Context, q *repocr return nil, status.Errorf(codes.Internal, "unable to check existing repository credentials details: %v", getErr) } - if reflect.DeepEqual(existing, r) { + switch { + case reflect.DeepEqual(existing, r): err = nil - } else if q.Upsert { + case q.Upsert: return s.UpdateWriteRepositoryCredentials(ctx, &repocredspkg.RepoCredsUpdateRequest{Creds: r}) - } else { + default: return nil, status.Error(codes.InvalidArgument, argo.GenerateSpecIsDifferentErrorMessage("repository credentials", existing, r)) } } diff --git a/server/repository/repository.go b/server/repository/repository.go index 7d66f5a57476e..19acf8b06b848 100644 --- a/server/repository/repository.go +++ b/server/repository/repository.go @@ -458,12 +458,13 @@ func (s *Server) CreateRepository(ctx context.Context, q *repositorypkg.RepoCrea existing.Type = text.FirstNonEmpty(existing.Type, "git") // repository ConnectionState may differ, so make consistent before testing existing.ConnectionState = r.ConnectionState - if reflect.DeepEqual(existing, r) { + switch { + case reflect.DeepEqual(existing, r): repo, err = existing, nil - } else if q.Upsert { + case q.Upsert: r.Project = q.Repo.Project return s.db.UpdateRepository(ctx, r) - } else { + default: return nil, status.Error(codes.InvalidArgument, argo.GenerateSpecIsDifferentErrorMessage("repository", existing, r)) } } @@ -503,11 +504,12 @@ func (s *Server) CreateWriteRepository(ctx context.Context, q *repositorypkg.Rep if getErr != nil { return nil, status.Errorf(codes.Internal, "unable to check existing repository details: %v", getErr) } - if reflect.DeepEqual(existing, q.Repo) { + switch { + case reflect.DeepEqual(existing, q.Repo): repo, err = existing, nil - } else if q.Upsert { + case q.Upsert: return s.db.UpdateWriteRepository(ctx, q.Repo) - } else { + default: return nil, status.Error(codes.InvalidArgument, argo.GenerateSpecIsDifferentErrorMessage("write repository", existing, q.Repo)) } } diff --git a/util/argo/argo.go b/util/argo/argo.go index 9a6fd10bb1f4d..37b5e40331ed3 100644 --- a/util/argo/argo.go +++ b/util/argo/argo.go @@ -549,7 +549,8 @@ func validateSourceHydrator(hydrator *argoappv1.SourceHydrator) []argoappv1.Appl func ValidatePermissions(ctx context.Context, spec *argoappv1.ApplicationSpec, proj *argoappv1.AppProject, db db.ArgoDB) ([]argoappv1.ApplicationCondition, error) { conditions := make([]argoappv1.ApplicationCondition, 0) - if spec.SourceHydrator != nil { + switch { + case spec.SourceHydrator != nil: condition := validateSourceHydrator(spec.SourceHydrator) if len(condition) > 0 { conditions = append(conditions, condition...) @@ -561,7 +562,7 @@ func ValidatePermissions(ctx context.Context, spec *argoappv1.ApplicationSpec, p Message: fmt.Sprintf("application repo %s is not permitted in project '%s'", spec.GetSource().RepoURL, spec.Project), }) } - } else if spec.HasMultipleSources() { + case spec.HasMultipleSources(): for _, source := range spec.Sources { condition := validateSourcePermissions(source, spec.HasMultipleSources()) if len(condition) > 0 { @@ -576,7 +577,7 @@ func ValidatePermissions(ctx context.Context, spec *argoappv1.ApplicationSpec, p }) } } - } else { + default: conditions = validateSourcePermissions(spec.GetSource(), spec.HasMultipleSources()) if len(conditions) > 0 { return conditions, nil @@ -910,13 +911,14 @@ func NormalizeSource(source *argoappv1.ApplicationSource) *argoappv1.Application source.Helm = nil } if source.Directory != nil && source.Directory.IsZero() { - if source.Directory.Exclude != "" && source.Directory.Include != "" { + switch { + case source.Directory.Exclude != "" && source.Directory.Include != "": source.Directory = &argoappv1.ApplicationSourceDirectory{Exclude: source.Directory.Exclude, Include: source.Directory.Include} - } else if source.Directory.Exclude != "" { + case source.Directory.Exclude != "": source.Directory = &argoappv1.ApplicationSourceDirectory{Exclude: source.Directory.Exclude} - } else if source.Directory.Include != "" { + case source.Directory.Include != "": source.Directory = &argoappv1.ApplicationSourceDirectory{Include: source.Directory.Include} - } else { + default: source.Directory = nil } } diff --git a/util/argo/normalizers/util.go b/util/argo/normalizers/util.go index 289c8bcccdae9..91af12d6a428e 100644 --- a/util/argo/normalizers/util.go +++ b/util/argo/normalizers/util.go @@ -9,12 +9,13 @@ func getGroupKindForOverrideKey(key string) (string, string, error) { var group, kind string parts := strings.Split(key, "/") - if len(parts) == 2 { + switch len(parts) { + case 2: group = parts[0] kind = parts[1] - } else if len(parts) == 1 { + case 1: kind = parts[0] - } else { + default: return "", "", fmt.Errorf("override key must be / or , got: '%s' ", key) } return group, kind, nil diff --git a/util/cache/cache.go b/util/cache/cache.go index a1787cc1fb0cc..a4fb5ff153ccb 100644 --- a/util/cache/cache.go +++ b/util/cache/cache.go @@ -189,15 +189,16 @@ func AddCacheFlagsToCmd(cmd *cobra.Command, opts ...Options) func() (*Cache, err } tlsConfig.Certificates = []tls.Certificate{clientCert} } - if insecureRedis { + switch { + case insecureRedis: tlsConfig.InsecureSkipVerify = true - } else if redisCACertificate != "" { + case redisCACertificate != "": redisCA, err := certutil.ParseTLSCertificatesFromPath(redisCACertificate) if err != nil { return nil, err } tlsConfig.RootCAs = certutil.GetCertPoolFromPEMData(redisCA) - } else { + default: var err error tlsConfig.RootCAs, err = x509.SystemCertPool() if err != nil { diff --git a/util/config/env.go b/util/config/env.go index f5576e649ee0a..4f2b8cf475fe6 100644 --- a/util/config/env.go +++ b/util/config/env.go @@ -30,15 +30,16 @@ func LoadFlags() error { var key string for _, opt := range opts { - if strings.HasPrefix(opt, "--") { + switch { + case strings.HasPrefix(opt, "--"): if key != "" { flags[key] = "true" } key = strings.TrimPrefix(opt, "--") - } else if key != "" { + case key != "": flags[key] = opt key = "" - } else { + default: return errors.New("ARGOCD_OPTS invalid at '" + opt + "'") } } diff --git a/util/db/certificate.go b/util/db/certificate.go index 455934791772d..aeb7c78c9b006 100644 --- a/util/db/certificate.go +++ b/util/db/certificate.go @@ -191,7 +191,8 @@ func (db *db) CreateRepoCertificate(ctx context.Context, certificates *appsv1.Re } } - if certificate.CertType == "ssh" { + switch { + case certificate.CertType == "ssh": // Whether we have a new certificate entry newEntry := true // Whether we have upserted an existing certificate entry @@ -241,7 +242,7 @@ func (db *db) CreateRepoCertificate(ctx context.Context, certificates *appsv1.Re created = append(created, certificate) saveSSHData = true } - } else if certificate.CertType == "https" { + case certificate.CertType == "https": var tlsCertificate *TLSCertificate newEntry := true upserted := false @@ -308,7 +309,7 @@ func (db *db) CreateRepoCertificate(ctx context.Context, certificates *appsv1.Re } saveTLSData = true } - } else { + default: // Invalid/unknown certificate type return nil, fmt.Errorf("Unknown certificate type: %s", certificate.CertType) } diff --git a/util/db/repository_secrets_test.go b/util/db/repository_secrets_test.go index b01f7338f7696..0f656076648af 100644 --- a/util/db/repository_secrets_test.go +++ b/util/db/repository_secrets_test.go @@ -295,15 +295,16 @@ func TestSecretsRepositoryBackend_ListRepositories(t *testing.T) { assert.Len(t, repositories, 2) for _, repository := range repositories { - if repository.Name == "ArgoCD" { + switch { + case repository.Name == "ArgoCD": assert.Equal(t, "git@github.com:argoproj/argo-cd.git", repository.Repo) assert.Equal(t, "someUsername", repository.Username) assert.Equal(t, "somePassword", repository.Password) - } else if repository.Name == "UserManagedRepo" { + case repository.Name == "UserManagedRepo": assert.Equal(t, "git@github.com:argoproj/argoproj.git", repository.Repo) assert.Equal(t, "someOtherUsername", repository.Username) assert.Equal(t, "someOtherPassword", repository.Password) - } else { + default: assert.Fail(t, "unexpected repository found in list") } } diff --git a/util/glob/list.go b/util/glob/list.go index 86ebbd39d124f..9a62374c2e645 100644 --- a/util/glob/list.go +++ b/util/glob/list.go @@ -20,11 +20,12 @@ const ( func MatchStringInList(list []string, item string, patternMatch string) bool { for _, ll := range list { // If string is wrapped in "/", assume it is a regular expression. - if patternMatch == REGEXP && strings.HasPrefix(ll, "/") && strings.HasSuffix(ll, "/") && regex.Match(ll[1:len(ll)-1], item) { + switch { + case patternMatch == REGEXP && strings.HasPrefix(ll, "/") && strings.HasSuffix(ll, "/") && regex.Match(ll[1:len(ll)-1], item): return true - } else if (patternMatch == REGEXP || patternMatch == GLOB) && Match(ll, item) { + case (patternMatch == REGEXP || patternMatch == GLOB) && Match(ll, item): return true - } else if patternMatch == EXACT && item == ll { + case patternMatch == EXACT && item == ll: return true } } diff --git a/util/http/http.go b/util/http/http.go index a293e63c3095b..954117d7dce04 100644 --- a/util/http/http.go +++ b/util/http/http.go @@ -64,11 +64,12 @@ func splitCookie(key, value, attributes string) []string { } var cookie string - if j == 0 && numberOfChunks == 1 { + switch { + case j == 0 && numberOfChunks == 1: cookie = fmt.Sprintf("%s=%s", key, value[i:end]) - } else if j == 0 { + case j == 0: cookie = fmt.Sprintf("%s=%d:%s", key, numberOfChunks, value[i:end]) - } else { + default: cookie = fmt.Sprintf("%s-%d=%s", key, j, value[i:end]) } if attributes != "" { @@ -102,15 +103,16 @@ func JoinCookies(key string, cookieList []*http.Cookie) (string, error) { } parts := strings.Split(token, ":") - if len(parts) == 2 { + switch len(parts) { + case 2: if numOfChunks, err = strconv.Atoi(parts[0]); err != nil { return "", err } sb.WriteString(parts[1]) - } else if len(parts) == 1 { + case 1: numOfChunks = 1 sb.WriteString(parts[0]) - } else { + default: return "", fmt.Errorf("invalid cookie for key %s", key) } diff --git a/util/kustomize/kustomize.go b/util/kustomize/kustomize.go index 1eb255d758442..76b7b95c84cac 100644 --- a/util/kustomize/kustomize.go +++ b/util/kustomize/kustomize.go @@ -123,13 +123,14 @@ func (k *kustomize) Build(opts *v1alpha1.ApplicationSourceKustomize, kustomizeOp log.Warnf("Could not parse URL %s: %v", k.repo, err) } else { caPath, err := certutil.GetCertBundlePathForRepository(parsedURL.Host) - if err != nil { + switch { + case err != nil: // Some error while getting CA bundle log.Warnf("Could not get CA bundle path for %s: %v", parsedURL.Host, err) - } else if caPath == "" { + case caPath == "": // No cert configured log.Debugf("No caCert found for repo %s", parsedURL.Host) - } else { + default: // Make Git use CA bundle environ = append(environ, "GIT_SSL_CAINFO="+caPath) } diff --git a/util/oidc/oidc.go b/util/oidc/oidc.go index 3436df82cc77d..bebb59605cb28 100644 --- a/util/oidc/oidc.go +++ b/util/oidc/oidc.go @@ -642,11 +642,12 @@ func (a *ClientApp) GetUserInfo(actualClaims jwt.MapClaims, issuerURL, userInfoP // only use configured expiry if the token lives longer and the expiry is configured // if the token has no expiry, use the expiry of the actual token // otherwise use the expiry of the token - if settingExpiry < tokenExpiry && settingExpiry != 0 { + switch { + case settingExpiry < tokenExpiry && settingExpiry != 0: cacheExpiry = settingExpiry - } else if tokenExpiry < 0 { + case tokenExpiry < 0: cacheExpiry = getTokenExpiration(actualClaims) - } else { + default: cacheExpiry = tokenExpiry }