fix: OCI Url and Version parse error
Signed-off-by: xiaomudk <xiaomudk@gmail.com>
This commit is contained in:
parent
6dc1736f15
commit
59ffa687df
|
|
@ -423,9 +423,7 @@ func (helm *execer) ChartPull(chart string, flags ...string) error {
|
||||||
helmVersionConstraint, _ := semver.NewConstraint(">= 3.7.0")
|
helmVersionConstraint, _ := semver.NewConstraint(">= 3.7.0")
|
||||||
var helmArgs []string
|
var helmArgs []string
|
||||||
if helmVersionConstraint.Check(&helm.version) {
|
if helmVersionConstraint.Check(&helm.version) {
|
||||||
ociChartURLSplit := strings.Split(chart, ":")
|
ociChartURL, ociChartTag := resolveOciChart(chart)
|
||||||
ociChartURL := fmt.Sprintf("oci://%s", ociChartURLSplit[0])
|
|
||||||
ociChartTag := ociChartURLSplit[1]
|
|
||||||
tempDir, err := os.MkdirTemp("", "chart*")
|
tempDir, err := os.MkdirTemp("", "chart*")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -447,9 +445,7 @@ func (helm *execer) ChartExport(chart string, path string, flags ...string) erro
|
||||||
helmVersionConstraint, _ := semver.NewConstraint(">= 3.7.0")
|
helmVersionConstraint, _ := semver.NewConstraint(">= 3.7.0")
|
||||||
var helmArgs []string
|
var helmArgs []string
|
||||||
if helmVersionConstraint.Check(&helm.version) {
|
if helmVersionConstraint.Check(&helm.version) {
|
||||||
ociChartURLSplit := strings.Split(chart, ":")
|
ociChartURL, ociChartTag := resolveOciChart(chart)
|
||||||
ociChartURL := fmt.Sprintf("oci://%s", ociChartURLSplit[0])
|
|
||||||
ociChartTag := ociChartURLSplit[1]
|
|
||||||
helmArgs = []string{"pull", ociChartURL, "--version", ociChartTag, "--untar"}
|
helmArgs = []string{"pull", ociChartURL, "--version", ociChartTag, "--untar"}
|
||||||
} else {
|
} else {
|
||||||
helmArgs = []string{"chart", "export", chart}
|
helmArgs = []string{"chart", "export", chart}
|
||||||
|
|
@ -546,3 +542,21 @@ func (helm *execer) IsVersionAtLeast(versionStr string) bool {
|
||||||
ver := semver.MustParse(versionStr)
|
ver := semver.MustParse(versionStr)
|
||||||
return helm.version.Equal(ver) || helm.version.GreaterThan(ver)
|
return helm.version.Equal(ver) || helm.version.GreaterThan(ver)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resolveOciChart(ociChart string) (ociChartURL, ociChartTag string) {
|
||||||
|
var urlTagIndex int
|
||||||
|
// Get the last : index
|
||||||
|
// e.g.,
|
||||||
|
// 1. registry:443/helm-charts
|
||||||
|
// 2. registry/helm-charts:latest
|
||||||
|
// 3. registry:443/helm-charts:latest
|
||||||
|
if strings.LastIndex(ociChart, ":") <= strings.LastIndex(ociChart, "/") {
|
||||||
|
urlTagIndex = len(ociChart)
|
||||||
|
ociChartTag = ""
|
||||||
|
} else {
|
||||||
|
urlTagIndex = strings.LastIndex(ociChart, ":")
|
||||||
|
ociChartTag = ociChart[urlTagIndex+1:]
|
||||||
|
}
|
||||||
|
ociChartURL = fmt.Sprintf("oci://%s", ociChart[:urlTagIndex])
|
||||||
|
return ociChartURL, ociChartTag
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -843,3 +843,42 @@ func Test_IsVersionAtLeast(t *testing.T) {
|
||||||
t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 3.2")
|
t.Error("helmexec.IsVersionAtLeast - 2.16.1 is atleast 3.2")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_resolveOciChart(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
chartPath string
|
||||||
|
ociChartURL string
|
||||||
|
ociChartTag string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "normal",
|
||||||
|
chartPath: "chart/nginx:v1",
|
||||||
|
ociChartURL: "oci://chart/nginx",
|
||||||
|
ociChartTag: "v1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "contains the port",
|
||||||
|
chartPath: "chart:5000/nginx:v1",
|
||||||
|
ociChartURL: "oci://chart:5000/nginx",
|
||||||
|
ociChartTag: "v1",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "no tag",
|
||||||
|
chartPath: "chart:5000/nginx",
|
||||||
|
ociChartURL: "oci://chart:5000/nginx",
|
||||||
|
ociChartTag: "",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for i := range tests {
|
||||||
|
tt := tests[i]
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
url, tag := resolveOciChart(tt.chartPath)
|
||||||
|
if tt.ociChartURL != url || tt.ociChartTag != tag {
|
||||||
|
actual := fmt.Sprintf("ociChartURL->%s ociChartTag->%s", url, tag)
|
||||||
|
expected := fmt.Sprintf("ociChartURL->%s ociChartTag->%s", tt.ociChartURL, tt.ociChartTag)
|
||||||
|
t.Errorf("resolveOciChart()\nactual = %v\nexpect = %v", actual, expected)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue