fix: clean up temp files in FindChartInAuthAndTLSAndPassRepoURL (#11171)

Signed-off-by: CI <ci@argoproj.com>
pull/11172/head
CI 2 years ago
parent 9377988685
commit 24fa3d910d

@ -207,7 +207,7 @@ func (o *repoAddOptions) run(out io.Writer) error {
if o.repoCache != "" { if o.repoCache != "" {
r.CachePath = o.repoCache r.CachePath = o.repoCache
} }
if _, err := r.DownloadIndexFile(); err != nil { if _, _, err := r.DownloadIndexFile(); err != nil {
return errors.Wrapf(err, "looks like %q is not a valid chart repository or cannot be reached", o.url) return errors.Wrapf(err, "looks like %q is not a valid chart repository or cannot be reached", o.url)
} }

@ -122,7 +122,7 @@ func updateCharts(repos []*repo.ChartRepository, out io.Writer, failOnRepoUpdate
wg.Add(1) wg.Add(1)
go func(re *repo.ChartRepository) { go func(re *repo.ChartRepository) {
defer wg.Done() defer wg.Done()
if _, err := re.DownloadIndexFile(); err != nil { if _, _, err := re.DownloadIndexFile(); err != nil {
fmt.Fprintf(out, "...Unable to get an update from the %q chart repository (%s):\n\t%s\n", re.Config.Name, re.Config.URL, err) fmt.Fprintf(out, "...Unable to get an update from the %q chart repository (%s):\n\t%s\n", re.Config.Name, re.Config.URL, err)
repoFailList = append(repoFailList, re.Config.URL) repoFailList = append(repoFailList, re.Config.URL)
} else { } else {

@ -670,7 +670,7 @@ func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) error {
} }
wg.Add(1) wg.Add(1)
go func(r *repo.ChartRepository) { go func(r *repo.ChartRepository) {
if _, err := r.DownloadIndexFile(); err != nil { if _, _, err := r.DownloadIndexFile(); err != nil {
// For those dependencies that are not known to helm and using a // For those dependencies that are not known to helm and using a
// generated key name we display the repo url. // generated key name we display the repo url.
if strings.HasPrefix(r.Config.Name, managerKeyPrefix) { if strings.HasPrefix(r.Config.Name, managerKeyPrefix) {

@ -115,10 +115,10 @@ func (r *ChartRepository) Load() error {
} }
// DownloadIndexFile fetches the index from a repository. // DownloadIndexFile fetches the index from a repository.
func (r *ChartRepository) DownloadIndexFile() (string, error) { func (r *ChartRepository) DownloadIndexFile() (string, string, error) {
parsedURL, err := url.Parse(r.Config.URL) parsedURL, err := url.Parse(r.Config.URL)
if err != nil { if err != nil {
return "", err return "", "", err
} }
parsedURL.RawPath = path.Join(parsedURL.RawPath, "index.yaml") parsedURL.RawPath = path.Join(parsedURL.RawPath, "index.yaml")
parsedURL.Path = path.Join(parsedURL.Path, "index.yaml") parsedURL.Path = path.Join(parsedURL.Path, "index.yaml")
@ -133,17 +133,17 @@ func (r *ChartRepository) DownloadIndexFile() (string, error) {
getter.WithPassCredentialsAll(r.Config.PassCredentialsAll), getter.WithPassCredentialsAll(r.Config.PassCredentialsAll),
) )
if err != nil { if err != nil {
return "", err return "", "", err
} }
index, err := ioutil.ReadAll(resp) index, err := ioutil.ReadAll(resp)
if err != nil { if err != nil {
return "", err return "", "", err
} }
indexFile, err := loadIndex(index, r.Config.URL) indexFile, err := loadIndex(index, r.Config.URL)
if err != nil { if err != nil {
return "", err return "", "", err
} }
// Create the chart list file in the cache directory // Create the chart list file in the cache directory
@ -158,7 +158,7 @@ func (r *ChartRepository) DownloadIndexFile() (string, error) {
// Create the index file in the cache directory // Create the index file in the cache directory
fname := filepath.Join(r.CachePath, helmpath.CacheIndexFile(r.Config.Name)) fname := filepath.Join(r.CachePath, helmpath.CacheIndexFile(r.Config.Name))
os.MkdirAll(filepath.Dir(fname), 0755) os.MkdirAll(filepath.Dir(fname), 0755)
return fname, ioutil.WriteFile(fname, index, 0644) return fname, chartsFile, ioutil.WriteFile(fname, index, 0644)
} }
// Index generates an index for the chart repository and writes an index.yaml file. // Index generates an index for the chart repository and writes an index.yaml file.
@ -249,10 +249,13 @@ func FindChartInAuthAndTLSAndPassRepoURL(repoURL, username, password, chartName,
if err != nil { if err != nil {
return "", err return "", err
} }
idx, err := r.DownloadIndexFile() idx, chart, err := r.DownloadIndexFile()
if err != nil { if err != nil {
return "", errors.Wrapf(err, "looks like %q is not a valid chart repository or cannot be reached", repoURL) return "", errors.Wrapf(err, "looks like %q is not a valid chart repository or cannot be reached", repoURL)
} }
// Clean up temp files.
defer os.RemoveAll(idx)
defer os.RemoveAll(chart)
// Read the index file for the repository to get chart information and return chart URL // Read the index file for the repository to get chart information and return chart URL
repoIndex, err := LoadIndexFile(idx) repoIndex, err := LoadIndexFile(idx)

Loading…
Cancel
Save