Просмотр исходного кода

update helm release secret to circumvent pending error

Mohammed Nafees 4 лет назад
Родитель
Сommit
9e1851bbec
1 измененных файлов с 30 добавлено и 13 удалено
  1. 30 13
      internal/helm/agent.go

+ 30 - 13
internal/helm/agent.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"strconv"
 	"strings"
+	"time"
 
 	"github.com/pkg/errors"
 	"github.com/porter-dev/porter/internal/helm/loader"
@@ -12,6 +13,7 @@ import (
 	"helm.sh/helm/v3/pkg/action"
 	"helm.sh/helm/v3/pkg/chart"
 	"helm.sh/helm/v3/pkg/release"
+	"helm.sh/helm/v3/pkg/storage/driver"
 	corev1 "k8s.io/api/core/v1"
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/helm/pkg/chartutil"
@@ -221,27 +223,42 @@ func (a *Agent) UpgradeReleaseByValues(
 				return nil, fmt.Errorf("Upgrade failed: %w", err)
 			}
 
-			for _, secret := range secretList.Items {
-				secret.Labels["status"] = "failed"
+			if len(secretList.Items) > 0 {
+				mostRecentSecret := secretList.Items[0]
 
-				_, err = a.K8sAgent.Clientset.CoreV1().Secrets(rel.Namespace).Update(
-					context.Background(), &secret, v1.UpdateOptions{},
-				)
+				for i := 1; i < len(secretList.Items); i += 1 {
+					oldVersion, _ := strconv.Atoi(mostRecentSecret.Labels["version"])
+					newVersion, _ := strconv.Atoi(secretList.Items[i].Labels["version"])
 
-				if err != nil {
-					return nil, fmt.Errorf("Upgrade failed: %w", err)
+					if oldVersion < newVersion {
+						mostRecentSecret = secretList.Items[i]
+					}
 				}
-			}
 
-			// retry upgrade
-			res, err = cmd.Run(conf.Name, ch, conf.Values)
+				if time.Since(mostRecentSecret.CreationTimestamp.Time) >= time.Minute {
+					helmSecrets := driver.NewSecrets(a.K8sAgent.Clientset.CoreV1().Secrets(rel.Namespace))
 
-			if err != nil {
-				return nil, fmt.Errorf("Upgrade failed: %w", err)
+					rel.Info.Status = release.StatusFailed
+
+					err = helmSecrets.Update(mostRecentSecret.GetName(), rel)
+
+					if err != nil {
+						return nil, fmt.Errorf("Upgrade failed: %w", err)
+					}
+
+					// retry upgrade
+					res, err = cmd.Run(conf.Name, ch, conf.Values)
+
+					if err != nil {
+						return nil, fmt.Errorf("Upgrade failed: %w", err)
+					}
+
+					return res, nil
+				}
 			}
 		}
 
-		return nil, fmt.Errorf("Upgrade failed: %v", err)
+		return nil, fmt.Errorf("Upgrade failed: %w", err)
 	}
 
 	return res, nil