From dca6dd17e9dfdd335afb4fe6beaac2c184214dac Mon Sep 17 00:00:00 2001 From: GaoXiaodong <13814823514@163.com> Date: Fri, 14 Oct 2022 18:33:55 +0800 Subject: [PATCH] fix(application): update install failed and upgrade failed message (#2113) Co-authored-by: xdonggao --- .../controller/app/action/install.go | 33 +++++------------ .../controller/app/action/upgrade.go | 36 +++++++------------ pkg/application/helm/action/install.go | 1 + 3 files changed, 22 insertions(+), 48 deletions(-) diff --git a/pkg/application/controller/app/action/install.go b/pkg/application/controller/app/action/install.go index 75ceb4876..ab03c360b 100644 --- a/pkg/application/controller/app/action/install.go +++ b/pkg/application/controller/app/action/install.go @@ -20,8 +20,6 @@ package action import ( "context" - "fmt" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" applicationv1 "tkestack.io/tke/api/application/v1" applicationversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/application/v1" @@ -32,7 +30,6 @@ import ( applicationprovider "tkestack.io/tke/pkg/application/provider/application" "tkestack.io/tke/pkg/application/util" chartpath "tkestack.io/tke/pkg/application/util/chartpath/v1" - "tkestack.io/tke/pkg/util/log" "tkestack.io/tke/pkg/util/metrics" ) @@ -43,8 +40,13 @@ func Install(ctx context.Context, app *applicationv1.App, repo appconfig.RepoConfiguration, updateStatusFunc applicationprovider.UpdateStatusFunc) (*applicationv1.App, error) { + newApp, err := applicationClient.Apps(app.Namespace).Get(ctx, app.Name, metav1.GetOptions{}) + if err != nil { + return nil, err + } + hooks := getHooks(app) - err := hooks.PreInstall(ctx, applicationClient, platformClient, app, repo, updateStatusFunc) + err = hooks.PreInstall(ctx, applicationClient, platformClient, app, repo, updateStatusFunc) if err != nil { return nil, err } @@ -54,31 +56,20 @@ func Install(ctx context.Context, } destfile, err := Pull(ctx, applicationClient, platformClient, app, repo, updateStatusFunc) if err != nil { - newStatus := app.Status.DeepCopy() + newStatus := newApp.Status.DeepCopy() if updateStatusFunc != nil { - if app.Status.Phase == applicationv1.AppPhaseInstallFailed { - log.Error(fmt.Sprintf("install app failed, helm pull err: %s", err.Error())) - metrics.GaugeApplicationInstallFailed.WithLabelValues(app.Spec.TargetCluster, app.Name).Set(1) - // delayed retry, queue.AddRateLimited does not meet the demand - return app, nil - } newStatus.Phase = applicationv1.AppPhaseInstallFailed newStatus.Message = "fetch chart failed" newStatus.Reason = err.Error() newStatus.LastTransitionTime = metav1.Now() - _, updateStatusErr := updateStatusFunc(ctx, app, &app.Status, newStatus) - metrics.GaugeApplicationInstallFailed.WithLabelValues(app.Spec.TargetCluster, app.Name).Set(1) + _, updateStatusErr := updateStatusFunc(ctx, newApp, &newApp.Status, newStatus) + metrics.GaugeApplicationInstallFailed.WithLabelValues(newApp.Spec.TargetCluster, newApp.Name).Set(1) if updateStatusErr != nil { return nil, updateStatusErr } } } - newApp, err := applicationClient.Apps(app.Namespace).Get(ctx, app.Name, metav1.GetOptions{}) - if err != nil { - return nil, err - } - values, err := helmutil.MergeValues(app.Spec.Values.Values, app.Spec.Values.RawValues, string(app.Spec.Values.RawValuesType)) if err != nil { return nil, err @@ -102,12 +93,6 @@ func Install(ctx context.Context, newStatus := newApp.Status.DeepCopy() var updateStatusErr error if err != nil { - if app.Status.Phase == applicationv1.AppPhaseInstallFailed { - log.Error(fmt.Sprintf("install app failed, helm install err: %s", err.Error())) - metrics.GaugeApplicationInstallFailed.WithLabelValues(app.Spec.TargetCluster, app.Name).Set(1) - // delayed retry, queue.AddRateLimited does not meet the demand - return app, nil - } newStatus.Phase = applicationv1.AppPhaseInstallFailed newStatus.Message = "install app failed" newStatus.Reason = err.Error() diff --git a/pkg/application/controller/app/action/upgrade.go b/pkg/application/controller/app/action/upgrade.go index 12eefb1e4..f9d187860 100644 --- a/pkg/application/controller/app/action/upgrade.go +++ b/pkg/application/controller/app/action/upgrade.go @@ -20,8 +20,6 @@ package action import ( "context" - "fmt" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" applicationv1 "tkestack.io/tke/api/application/v1" applicationversionedclient "tkestack.io/tke/api/client/clientset/versioned/typed/application/v1" @@ -32,7 +30,6 @@ import ( applicationprovider "tkestack.io/tke/pkg/application/provider/application" "tkestack.io/tke/pkg/application/util" chartpath "tkestack.io/tke/pkg/application/util/chartpath/v1" - "tkestack.io/tke/pkg/util/log" "tkestack.io/tke/pkg/util/metrics" ) @@ -43,8 +40,13 @@ func Upgrade(ctx context.Context, app *applicationv1.App, repo appconfig.RepoConfiguration, updateStatusFunc applicationprovider.UpdateStatusFunc) (*applicationv1.App, error) { + newApp, err := applicationClient.Apps(app.Namespace).Get(ctx, app.Name, metav1.GetOptions{}) + if err != nil { + return nil, err + } + hooks := getHooks(app) - err := hooks.PreUpgrade(ctx, applicationClient, platformClient, app, repo, updateStatusFunc) + err = hooks.PreUpgrade(ctx, applicationClient, platformClient, app, repo, updateStatusFunc) if err != nil { return nil, err } @@ -55,29 +57,21 @@ func Upgrade(ctx context.Context, destfile, err := Pull(ctx, applicationClient, platformClient, app, repo, updateStatusFunc) if err != nil { - newStatus := app.Status.DeepCopy() + newStatus := newApp.Status.DeepCopy() if updateStatusFunc != nil { - if app.Status.Phase == applicationv1.AppPhaseUpgradFailed { - log.Error(fmt.Sprintf("upgrade app failed, helm pull err: %s", err.Error())) - metrics.GaugeApplicationUpgradeFailed.WithLabelValues(app.Spec.TargetCluster, app.Name).Set(1) - // delayed retry, queue.AddRateLimited does not meet the demand - return app, nil - } newStatus.Phase = applicationv1.AppPhaseUpgradFailed newStatus.Message = "fetch chart failed" newStatus.Reason = err.Error() newStatus.LastTransitionTime = metav1.Now() - updateStatusFunc(ctx, app, &app.Status, newStatus) - metrics.GaugeApplicationUpgradeFailed.WithLabelValues(app.Spec.TargetCluster, app.Name).Set(1) + _, updateStatusErr := updateStatusFunc(ctx, newApp, &newApp.Status, newStatus) + metrics.GaugeApplicationUpgradeFailed.WithLabelValues(newApp.Spec.TargetCluster, newApp.Name).Set(1) + if updateStatusErr != nil { + return newApp, updateStatusErr + } } return nil, err } - newApp, err := applicationClient.Apps(app.Namespace).Get(ctx, app.Name, metav1.GetOptions{}) - if err != nil { - return nil, err - } - values, err := helmutil.MergeValues(app.Spec.Values.Values, app.Spec.Values.RawValues, string(app.Spec.Values.RawValuesType)) if err != nil { return nil, err @@ -103,12 +97,6 @@ func Upgrade(ctx context.Context, newStatus := newApp.Status.DeepCopy() var updateStatusErr error if err != nil { - if app.Status.Phase == applicationv1.AppPhaseUpgradFailed { - log.Error(fmt.Sprintf("upgrade app failed, helm upgrade err: %s", err.Error())) - metrics.GaugeApplicationUpgradeFailed.WithLabelValues(app.Spec.TargetCluster, app.Name).Set(1) - // delayed retry, queue.AddRateLimited does not meet the demand - return app, nil - } newStatus.Phase = applicationv1.AppPhaseUpgradFailed newStatus.Message = "upgrade app failed" newStatus.Reason = err.Error() diff --git a/pkg/application/helm/action/install.go b/pkg/application/helm/action/install.go index e94bbde04..062fca9b6 100644 --- a/pkg/application/helm/action/install.go +++ b/pkg/application/helm/action/install.go @@ -101,6 +101,7 @@ func (c *Client) InstallWithLocal(options *InstallOptions, chartLocalFile string client.ReleaseName = options.ReleaseName client.Description = options.Description client.IsUpgrade = options.IsUpgrade + client.Atomic = true options.ChartPathOptions.ApplyTo(&client.ChartPathOptions)