From 5a9138711ba2982801226835618a6a669e355f3a Mon Sep 17 00:00:00 2001 From: Ta-Ching Chen Date: Mon, 11 Nov 2019 02:42:08 +0800 Subject: [PATCH] Fix helm pre-upgrade check failure problem (#1397) The helm pre-upgrade check failed due to the program tries to check whether a multierr is a nil pointer instead of errors it contains. This PR changes the way the program checks multierr in order not to block the upgrade. --- cmd/preupgradechecks/preupgradechecks.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cmd/preupgradechecks/preupgradechecks.go b/cmd/preupgradechecks/preupgradechecks.go index 63825f29..6d9daf07 100644 --- a/cmd/preupgradechecks/preupgradechecks.go +++ b/cmd/preupgradechecks/preupgradechecks.go @@ -86,7 +86,6 @@ func (client *PreUpgradeTaskClient) IsFissionReInstall() bool { func (client *PreUpgradeTaskClient) VerifyFunctionSpecReferences() { client.logger.Info("verifying function spec references for all functions in the cluster") - result := &multierror.Error{} var err error var fList *fv1.FunctionList @@ -103,28 +102,30 @@ func (client *PreUpgradeTaskClient) VerifyFunctionSpecReferences() { zap.Int("max_retries", maxRetries)) } + errs := &multierror.Error{} + // check that all secrets, configmaps, packages are in the same namespace for _, fn := range fList.Items { secrets := fn.Spec.Secrets for _, secret := range secrets { if secret.Namespace != fn.Metadata.Namespace { - result = multierror.Append(result, fmt.Errorf("function : %s.%s cannot reference a secret : %s in namespace : %s", fn.Metadata.Name, fn.Metadata.Namespace, secret.Name, secret.Namespace)) + errs = multierror.Append(errs, fmt.Errorf("function : %s.%s cannot reference a secret : %s in namespace : %s", fn.Metadata.Name, fn.Metadata.Namespace, secret.Name, secret.Namespace)) } } configmaps := fn.Spec.ConfigMaps for _, configmap := range configmaps { if configmap.Namespace != fn.Metadata.Namespace { - result = multierror.Append(result, fmt.Errorf("function : %s.%s cannot reference a configmap : %s in namespace : %s", fn.Metadata.Name, fn.Metadata.Namespace, configmap.Name, configmap.Namespace)) + errs = multierror.Append(errs, fmt.Errorf("function : %s.%s cannot reference a configmap : %s in namespace : %s", fn.Metadata.Name, fn.Metadata.Namespace, configmap.Name, configmap.Namespace)) } } if fn.Spec.Package.PackageRef.Namespace != fn.Metadata.Namespace { - result = multierror.Append(result, fmt.Errorf("function : %s.%s cannot reference a package : %s in namespace : %s", fn.Metadata.Name, fn.Metadata.Namespace, fn.Spec.Package.PackageRef.Name, fn.Spec.Package.PackageRef.Namespace)) + errs = multierror.Append(errs, fmt.Errorf("function : %s.%s cannot reference a package : %s in namespace : %s", fn.Metadata.Name, fn.Metadata.Namespace, fn.Spec.Package.PackageRef.Name, fn.Spec.Package.PackageRef.Namespace)) } } - if result != nil { + if errs.ErrorOrNil() != nil { client.logger.Fatal("installation failed", zap.Error(err), zap.String("summary", "a function cannot reference secrets, configmaps and packages outside it's own namespace"))