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")
|
||||
var helmArgs []string
|
||||
if helmVersionConstraint.Check(&helm.version) {
|
||||
ociChartURLSplit := strings.Split(chart, ":")
|
||||
ociChartURL := fmt.Sprintf("oci://%s", ociChartURLSplit[0])
|
||||
ociChartTag := ociChartURLSplit[1]
|
||||
ociChartURL, ociChartTag := resolveOciChart(chart)
|
||||
tempDir, err := os.MkdirTemp("", "chart*")
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -447,9 +445,7 @@ func (helm *execer) ChartExport(chart string, path string, flags ...string) erro
|
|||
helmVersionConstraint, _ := semver.NewConstraint(">= 3.7.0")
|
||||
var helmArgs []string
|
||||
if helmVersionConstraint.Check(&helm.version) {
|
||||
ociChartURLSplit := strings.Split(chart, ":")
|
||||
ociChartURL := fmt.Sprintf("oci://%s", ociChartURLSplit[0])
|
||||
ociChartTag := ociChartURLSplit[1]
|
||||
ociChartURL, ociChartTag := resolveOciChart(chart)
|
||||
helmArgs = []string{"pull", ociChartURL, "--version", ociChartTag, "--untar"}
|
||||
} else {
|
||||
helmArgs = []string{"chart", "export", chart}
|
||||
|
|
@ -546,3 +542,21 @@ func (helm *execer) IsVersionAtLeast(versionStr string) bool {
|
|||
ver := semver.MustParse(versionStr)
|
||||
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")
|
||||
}
|
||||
}
|
||||
|
||||
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