feature: let FindChartInRepoURL return absolute chart URLs

pull/3187/head
Christoph Hösler 7 years ago
parent 2106766ab8
commit af9190f956

@ -85,7 +85,7 @@ There are five different ways you can express the chart you want to install:
2. By path to a packaged chart: helm install ./nginx-1.2.3.tgz 2. By path to a packaged chart: helm install ./nginx-1.2.3.tgz
3. By path to an unpacked chart directory: helm install ./nginx 3. By path to an unpacked chart directory: helm install ./nginx
4. By absolute URL: helm install https://example.com/charts/nginx-1.2.3.tgz 4. By absolute URL: helm install https://example.com/charts/nginx-1.2.3.tgz
5. By chart reference and repo url: helm install --repo https://example.com/charts nginx 5. By chart reference and repo url: helm install --repo https://example.com/charts/ nginx
CHART REFERENCES CHART REFERENCES
@ -425,22 +425,7 @@ func locateChartPath(repoURL, name, version string, verify bool, keyring,
if err != nil { if err != nil {
return "", err return "", err
} }
name = chartURL
parsedChartURL, err := url.Parse(chartURL)
if err != nil {
return "", err
}
if parsedChartURL.IsAbs() {
name = chartURL
} else {
parsedRepoURL, err := url.Parse(repoURL)
if err != nil {
return "", err
}
name = parsedRepoURL.ResolveReference(parsedChartURL).String()
}
} }
if _, err := os.Stat(settings.Home.Archive()); os.IsNotExist(err) { if _, err := os.Stat(settings.Home.Archive()); os.IsNotExist(err) {
@ -459,7 +444,7 @@ func locateChartPath(repoURL, name, version string, verify bool, keyring,
return filename, err return filename, err
} }
return filename, fmt.Errorf("file %q not found", name) return filename, fmt.Errorf("failed to download %q", name)
} }
func generateName(nameTemplate string) (string, error) { func generateName(nameTemplate string) (string, error) {

@ -46,7 +46,7 @@ There are five different ways you can express the chart you want to install:
2. By path to a packaged chart: helm install ./nginx-1.2.3.tgz 2. By path to a packaged chart: helm install ./nginx-1.2.3.tgz
3. By path to an unpacked chart directory: helm install ./nginx 3. By path to an unpacked chart directory: helm install ./nginx
4. By absolute URL: helm install https://example.com/charts/nginx-1.2.3.tgz 4. By absolute URL: helm install https://example.com/charts/nginx-1.2.3.tgz
5. By chart reference and repo url: helm install --repo https://example.com/charts nginx 5. By chart reference and repo url: helm install --repo https://example.com/charts/ nginx
CHART REFERENCES CHART REFERENCES

@ -184,7 +184,7 @@ func (r *ChartRepository) generateIndex() error {
} }
// FindChartInRepoURL finds chart in chart repository pointed by repoURL // FindChartInRepoURL finds chart in chart repository pointed by repoURL
// without adding repo to repostiories // without adding repo to repositories
func FindChartInRepoURL(repoURL, chartName, chartVersion, certFile, keyFile, caFile string, getters getter.Providers) (string, error) { func FindChartInRepoURL(repoURL, chartName, chartVersion, certFile, keyFile, caFile string, getters getter.Providers) (string, error) {
// Download and write the index file to a temporary location // Download and write the index file to a temporary location
@ -227,5 +227,28 @@ func FindChartInRepoURL(repoURL, chartName, chartVersion, certFile, keyFile, caF
return "", fmt.Errorf("%s has no downloadable URLs", errMsg) return "", fmt.Errorf("%s has no downloadable URLs", errMsg)
} }
return cv.URLs[0], nil chartURL := cv.URLs[0]
absoluteChartURL, err := MakeAbsoluteChartURL(repoURL, chartURL)
if err != nil {
return "", err
}
return absoluteChartURL, nil
}
// MakeAbsoluteChartURL resolves chartURL relative to repoURL.
// If chartURL is absolute, it returns chartURL.
func MakeAbsoluteChartURL(repoURL, chartURL string) (string, error) {
parsedRepoURL, err := url.Parse(repoURL)
if err != nil {
return "", err
}
parsedChartURL, err := url.Parse(chartURL)
if err != nil {
return "", err
}
return parsedRepoURL.ResolveReference(parsedChartURL).String(), nil
} }

@ -277,3 +277,21 @@ func TestErrorFindChartInRepoURL(t *testing.T) {
t.Errorf("Expected error for chart not found, but got a different error (%v)", err) t.Errorf("Expected error for chart not found, but got a different error (%v)", err)
} }
} }
func TestMakeAbsoluteChartURL(t *testing.T) {
chartURL, err := MakeAbsoluteChartURL("http://localhost:8123/charts/", "nginx-0.2.0.tgz")
if err != nil {
t.Errorf("%s", err)
}
if chartURL != "http://localhost:8123/charts/nginx-0.2.0.tgz" {
t.Errorf("%s", chartURL)
}
chartURL, err = MakeAbsoluteChartURL("http://localhost:8123", "https://kubernetes-charts.storage.googleapis.com/nginx-0.2.0.tgz")
if err != nil {
t.Errorf("%s", err)
}
if chartURL != "https://kubernetes-charts.storage.googleapis.com/nginx-0.2.0.tgz" {
t.Errorf("%s", chartURL)
}
}

Loading…
Cancel
Save