github.com/argoproj/argo-cd/v2@v2.10.5/util/db/helmrepository.go (about)

     1  package db
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"google.golang.org/grpc/codes"
     9  	"google.golang.org/grpc/status"
    10  	v1 "k8s.io/api/core/v1"
    11  	"k8s.io/utils/pointer"
    12  
    13  	"github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"
    14  	"github.com/argoproj/argo-cd/v2/util/settings"
    15  )
    16  
    17  func getHelmRepoCredIndex(helmRepositories []settings.HelmRepoCredentials, repoURL string) int {
    18  	for i, cred := range helmRepositories {
    19  		if strings.EqualFold(cred.URL, repoURL) {
    20  			return i
    21  		}
    22  	}
    23  	return -1
    24  }
    25  
    26  func (db *db) getHelmRepo(repoURL string, helmRepositories []settings.HelmRepoCredentials) (*v1alpha1.Repository, error) {
    27  	index := getHelmRepoCredIndex(helmRepositories, repoURL)
    28  	if index < 0 {
    29  		return nil, status.Errorf(codes.NotFound, "repo '%s' not found", repoURL)
    30  	}
    31  	repoInfo := helmRepositories[index]
    32  
    33  	repo := &v1alpha1.Repository{
    34  		Repo: repoInfo.URL,
    35  		Type: "helm",
    36  		Name: repoInfo.Name,
    37  	}
    38  	err := db.unmarshalFromSecretsStr(map[*SecretMaperValidation]*v1.SecretKeySelector{
    39  		{Dest: &repo.Username, Transform: StripCRLFCharacter}:          repoInfo.UsernameSecret,
    40  		{Dest: &repo.Password, Transform: StripCRLFCharacter}:          repoInfo.PasswordSecret,
    41  		{Dest: &repo.TLSClientCertData, Transform: StripCRLFCharacter}: repoInfo.CertSecret,
    42  		{Dest: &repo.TLSClientCertKey, Transform: StripCRLFCharacter}:  repoInfo.KeySecret,
    43  	}, make(map[string]*v1.Secret))
    44  	return repo, err
    45  }
    46  
    47  // ListHelmRepositories lists configured helm repositories
    48  func (db *db) ListHelmRepositories(ctx context.Context) ([]*v1alpha1.Repository, error) {
    49  	helmRepositories, err := db.settingsMgr.GetHelmRepositories()
    50  	if err != nil {
    51  		return nil, fmt.Errorf("failed to get list of Helm repositories from settings manager: %w", err)
    52  	}
    53  
    54  	result := make([]*v1alpha1.Repository, len(helmRepositories))
    55  	for i, helmRepoInfo := range helmRepositories {
    56  		repo, err := db.getHelmRepo(helmRepoInfo.URL, helmRepositories)
    57  		if err != nil {
    58  			return nil, fmt.Errorf("failed to get Helm repository %q: %w", helmRepoInfo.URL, err)
    59  		}
    60  		result[i] = repo
    61  	}
    62  	repos, err := db.listRepositories(ctx, pointer.String("helm"))
    63  	if err != nil {
    64  		return nil, fmt.Errorf("failed to list Helm repositories: %w", err)
    65  	}
    66  	result = append(result, v1alpha1.Repositories(repos).Filter(func(r *v1alpha1.Repository) bool {
    67  		return r.Type == "helm" && r.Name != ""
    68  	})...)
    69  	return result, nil
    70  }