From f4d047a4a2760d56d44b08f5762969df8865db4d Mon Sep 17 00:00:00 2001 From: Hidde Beydals Date: Thu, 27 Aug 2020 17:33:31 +0200 Subject: [PATCH] Support Helm repository indexes with relative URLs --- controllers/helmchart_controller.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/controllers/helmchart_controller.go b/controllers/helmchart_controller.go index b7408ac74..47756d0cc 100644 --- a/controllers/helmchart_controller.go +++ b/controllers/helmchart_controller.go @@ -180,12 +180,27 @@ func (r *HelmChartReconciler) reconcile(ctx context.Context, repository sourcev1 // TODO(hidde): according to the Helm source the first item is not // always the correct one to pick, check for updates once in awhile. + // Ref: https://github.com/helm/helm/blob/v3.3.0/pkg/downloader/chart_downloader.go#L241 ref := cv.URLs[0] u, err := url.Parse(ref) if err != nil { err = fmt.Errorf("invalid chart URL format '%s': %w", ref, err) } + // Prepend the chart repository base URL if the URL is relative + if !u.IsAbs() { + repoURL, err := url.Parse(repository.Spec.URL) + if err != nil { + err = fmt.Errorf("invalid repository URL format '%s': %w", repository.Spec.URL, err) + return sourcev1.HelmChartNotReady(chart, sourcev1.ChartPullFailedReason, err.Error()), err + } + q := repoURL.Query() + // Trailing slash is required for ResolveReference to work + repoURL.Path = strings.TrimSuffix(repoURL.Path, "/") + "/" + u = repoURL.ResolveReference(u) + u.RawQuery = q.Encode() + } + c, err := r.Getters.ByScheme(u.Scheme) if err != nil { return sourcev1.HelmChartNotReady(chart, sourcev1.ChartPullFailedReason, err.Error()), err