Merge pull request #3886 from xyz-li/app-fix
Fix: parse chart data by loader.LoadArchive
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user