From 7e44da113a8fc16ca03d6b5ece00b2d40191111d Mon Sep 17 00:00:00 2001 From: pankangtian Date: Wed, 11 Dec 2024 14:31:45 +0800 Subject: [PATCH] optimization: The implementation of validateManifest is implemented only by the KubeClient.Build method, which is the same as the subsequent logic and is redundant. Signed-off-by: pankangtian --- pkg/action/upgrade.go | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/pkg/action/upgrade.go b/pkg/action/upgrade.go index 5002406ca..4bbc3cc1c 100644 --- a/pkg/action/upgrade.go +++ b/pkg/action/upgrade.go @@ -167,9 +167,6 @@ func (u *Upgrade) RunWithContext(ctx context.Context, name string, chart *chart. return nil, err } - u.cfg.Releases.MaxHistory = u.MaxHistory - - u.cfg.Log("performing update for %s", name) res, err := u.performUpgrade(ctx, currentRelease, upgradedRelease) if err != nil { return res, err @@ -303,11 +300,17 @@ func (u *Upgrade) prepareUpgrade(name string, chart *chart.Chart, vals map[strin if len(notesTxt) > 0 { upgradedRelease.Info.Notes = notesTxt } - err = validateManifest(u.cfg.KubeClient, manifestDoc.Bytes(), !u.DisableOpenAPIValidation) - return currentRelease, upgradedRelease, err + return currentRelease, upgradedRelease, nil } func (u *Upgrade) performUpgrade(ctx context.Context, originalRelease, upgradedRelease *release.Release) (*release.Release, error) { + target, err := u.cfg.KubeClient.Build(bytes.NewBufferString(upgradedRelease.Manifest), !u.DisableOpenAPIValidation) + if err != nil { + return upgradedRelease, errors.Wrap(err, "unable to build kubernetes objects from new release manifest") + } + u.cfg.Releases.MaxHistory = u.MaxHistory + u.cfg.Log("performing update for %s", upgradedRelease.Name) + current, err := u.cfg.KubeClient.Build(bytes.NewBufferString(originalRelease.Manifest), false) if err != nil { // Checking for removed Kubernetes API error so can provide a more informative error message to the user @@ -319,11 +322,6 @@ func (u *Upgrade) performUpgrade(ctx context.Context, originalRelease, upgradedR } return upgradedRelease, errors.Wrap(err, "unable to build kubernetes objects from current release manifest") } - target, err := u.cfg.KubeClient.Build(bytes.NewBufferString(upgradedRelease.Manifest), !u.DisableOpenAPIValidation) - if err != nil { - return upgradedRelease, errors.Wrap(err, "unable to build kubernetes objects from new release manifest") - } - // It is safe to use force only on target because these are resources currently rendered by the chart. err = target.Visit(setMetadataVisitor(upgradedRelease.Name, upgradedRelease.Namespace, true)) if err != nil { @@ -589,11 +587,6 @@ func (u *Upgrade) reuseValues(chart *chart.Chart, current *release.Release, newV return newVals, nil } -func validateManifest(c kube.Interface, manifest []byte, openAPIValidation bool) error { - _, err := c.Build(bytes.NewReader(manifest), openAPIValidation) - return err -} - // recreate captures all the logic for recreating pods for both upgrade and // rollback. If we end up refactoring rollback to use upgrade, this can just be // made an unexported method on the upgrade action.