From bd454fb427e1445e16665221d6368723d5ca5bbd Mon Sep 17 00:00:00 2001 From: Weiping Cai Date: Tue, 23 Jun 2020 15:35:52 +0800 Subject: [PATCH] mv error to storage,warp error Signed-off-by: Weiping Cai --- cmd/helm/install.go | 19 ------------------- pkg/storage/driver/cfgmaps.go | 2 ++ pkg/storage/driver/driver.go | 2 ++ pkg/storage/driver/secrets.go | 7 +++++++ 4 files changed, 11 insertions(+), 19 deletions(-) diff --git a/cmd/helm/install.go b/cmd/helm/install.go index f953c1230..21a41b9f9 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -17,7 +17,6 @@ limitations under the License. package main import ( - "bytes" "fmt" "io" "time" @@ -193,10 +192,6 @@ func runInstall(args []string, client *action.Install, valueOpts *values.Options return nil, err } - if _, err := isLimitSize(chartRequested.Raw); err != nil { - return nil, err - } - if chartRequested.Metadata.Deprecated { fmt.Fprintln(out, "WARNING: This chart is deprecated") } @@ -245,20 +240,6 @@ func isChartInstallable(ch *chart.Chart) (bool, error) { return false, errors.Errorf("%s charts are not installable", ch.Metadata.Type) } -// It is to limit the total size of the template file to 3m, and the content of files over 3m should not be allowed to be installed. -// -// This is because the server requires the requestbody to be less than 3m when creating secrets.For details, please refer to: https://github.com/kubernetes/kubernetes/blob/release-1.18/staging/src/k8s.io/apiserver/pkg/server/config.go#L323 -func isLimitSize(raw []*chart.File) (bool, error) { - totalSize := int64(0) - for _, r := range raw { - totalSize += int64(bytes.Count(r.Data, []byte(""))) - } - if totalSize < int64(3 * 1024 * 1024) { - return true, nil - } - return false,errors.Errorf("Chart package too large, limit is 3MB.") -} - // Provide dynamic auto-completion for the install and template commands func compInstall(args []string, toComplete string, client *action.Install) ([]string, completion.BashCompDirective) { requiredArgs := 1 diff --git a/pkg/storage/driver/cfgmaps.go b/pkg/storage/driver/cfgmaps.go index 71e635975..5559f98ff 100644 --- a/pkg/storage/driver/cfgmaps.go +++ b/pkg/storage/driver/cfgmaps.go @@ -166,6 +166,8 @@ func (cfgmaps *ConfigMaps) Create(key string, rls *rspb.Release) error { if _, err := cfgmaps.impl.Create(context.Background(), obj, metav1.CreateOptions{}); err != nil { if apierrors.IsAlreadyExists(err) { return ErrReleaseExists + }else if apierrors.IsRequestEntityTooLargeError(err){ + return ErrPackageTooLarge } cfgmaps.Log("create: failed to create: %s", err) diff --git a/pkg/storage/driver/driver.go b/pkg/storage/driver/driver.go index 9c01f3766..a72fade8e 100644 --- a/pkg/storage/driver/driver.go +++ b/pkg/storage/driver/driver.go @@ -29,6 +29,8 @@ var ( ErrReleaseNotFound = errors.New("release: not found") // ErrReleaseExists indicates that a release already exists. ErrReleaseExists = errors.New("release: already exists") + // ErrPackageTooLarge indicates that package too large,because of storage limit,reference: https://github.com/kubernetes/kubernetes/blob/release-1.18/staging/src/k8s.io/apiserver/pkg/server/config.go#L323 + ErrPackageTooLarge = errors.New("Chart package too large,storage limit is 3145728") // ErrInvalidKey indicates that a release key could not be parsed. ErrInvalidKey = errors.New("release: invalid key") // ErrNoDeployedReleases indicates that there are no releases with the given key in the deployed state diff --git a/pkg/storage/driver/secrets.go b/pkg/storage/driver/secrets.go index 44280f70f..1442eab3a 100644 --- a/pkg/storage/driver/secrets.go +++ b/pkg/storage/driver/secrets.go @@ -156,6 +156,8 @@ func (secrets *Secrets) Create(key string, rls *rspb.Release) error { if _, err := secrets.impl.Create(context.Background(), obj, metav1.CreateOptions{}); err != nil { if apierrors.IsAlreadyExists(err) { return ErrReleaseExists + }else if apierrors.IsRequestEntityTooLargeError(err){ + return ErrPackageTooLarge } return errors.Wrap(err, "create: failed to create") @@ -179,6 +181,11 @@ func (secrets *Secrets) Update(key string, rls *rspb.Release) error { } // push the secret object out into the kubiverse _, err = secrets.impl.Update(context.Background(), obj, metav1.UpdateOptions{}) + + if apierrors.IsRequestEntityTooLargeError(err){ + return ErrPackageTooLarge + } + return errors.Wrap(err, "update: failed to update") }