Commit af9190f9 authored by Christoph Hösler's avatar Christoph Hösler

feature: let FindChartInRepoURL return absolute chart URLs

parent 2106766a
...@@ -85,7 +85,7 @@ There are five different ways you can express the chart you want to install: ...@@ -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, ...@@ -425,22 +425,7 @@ func locateChartPath(repoURL, name, version string, verify bool, keyring,
if err != nil { if err != nil {
return "", err return "", err
} }
parsedChartURL, err := url.Parse(chartURL)
if err != nil {
return "", err
}
if parsedChartURL.IsAbs() {
name = chartURL 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, ...@@ -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: ...@@ -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 { ...@@ -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 ...@@ -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) { ...@@ -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)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment