From b0e727bf4e9ff64b9863af5e7810f2bffae62938 Mon Sep 17 00:00:00 2001 From: LiHui Date: Thu, 22 Apr 2021 14:58:05 +0800 Subject: [PATCH] Fix: parse chart data by loader.LoadArchive Signed-off-by: LiHui --- pkg/models/openpitrix/applicationversions.go | 41 +++++--------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/pkg/models/openpitrix/applicationversions.go b/pkg/models/openpitrix/applicationversions.go index 91554bf35..39ed52bf2 100644 --- a/pkg/models/openpitrix/applicationversions.go +++ b/pkg/models/openpitrix/applicationversions.go @@ -17,18 +17,15 @@ limitations under the License. package openpitrix import ( - "archive/tar" "bytes" - "compress/gzip" "context" "encoding/base64" "errors" "fmt" - "io" - "io/ioutil" "reflect" "sort" - "strings" + + "helm.sh/helm/v3/pkg/chart/loader" "kubesphere.io/kubesphere/pkg/apiserver/query" @@ -531,43 +528,25 @@ func (c *applicationOperator) GetAppVersionFiles(versionId string, request *GetA var version *v1alpha1.HelmApplicationVersion var err error + // get chart data version, err = c.getAppVersionByVersionIdWithData(versionId) if err != nil { + klog.Errorf("get app version %s chart data failed: %v", versionId, err) return nil, err } - gzReader, err := gzip.NewReader(bytes.NewReader(version.Spec.Data)) + // parse chart data + chartData, err := loader.LoadArchive(bytes.NewReader(version.Spec.Data)) if err != nil { - klog.Errorf("read app version %s failed, error: %s", versionId, err) + klog.Errorf("Failed to load package for app version: %s, error: %+v", versionId, err) return nil, err } - tarReader := tar.NewReader(gzReader) - res := &GetAppVersionPackageFilesResponse{Files: map[string]strfmt.Base64{}, VersionId: versionId} - for { - header, err := tarReader.Next() - if err == io.EOF { - break - } - - if err != nil { - klog.Errorf("ExtractTarGz: Next() failed: %s", err.Error()) - return res, err - } - - switch header.Typeflag { - case tar.TypeReg: - curData, _ := ioutil.ReadAll(tarReader) - name := strings.TrimPrefix(header.Name, fmt.Sprintf("%s/", version.GetTrueName())) - res.Files[name] = curData - default: - klog.Errorf( - "ExtractTarGz: unknown type: %v in %s", - header.Typeflag, - header.Name) - } + for _, f := range chartData.Raw { + res.Files[f.Name] = f.Data } + return res, nil }