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
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
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
@ -425,22 +425,7 @@ func locateChartPath(repoURL, name, version string, verify bool, keyring,
if err != nil {
return "", err
}
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()
}
name = chartURL
}
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, fmt.Errorf("file %q not found", name)
return filename, fmt.Errorf("failed to download %q", name)
}
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
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
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

@ -184,7 +184,7 @@ func (r *ChartRepository) generateIndex() error {
}
// 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) {
// 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 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)
}
}
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