Merge pull request #3886 from xyz-li/app-fix

Fix: parse chart data by loader.LoadArchive
This commit is contained in:
KubeSphere CI Bot
2021-05-28 14:46:32 +08:00
committed by GitHub

View File

@@ -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
}