Przeglądaj źródła

try to circumvent pending action error from Helm

Mohammed Nafees 4 lat temu
rodzic
commit
987d3fbacd
1 zmienionych plików z 34 dodań i 0 usunięć
  1. 34 0
      internal/helm/agent.go

+ 34 - 0
internal/helm/agent.go

@@ -207,6 +207,40 @@ func (a *Agent) UpgradeReleaseByValues(
 	res, err := cmd.Run(conf.Name, ch, conf.Values)
 
 	if err != nil {
+		// refer: https://github.com/helm/helm/blob/release-3.8/pkg/action/action.go#L62
+		// issue tracker: https://github.com/helm/helm/issues/4558
+		if err.Error() == "another operation (install/upgrade/rollback) is in progress" {
+			secretList, err := a.K8sAgent.Clientset.CoreV1().Secrets(rel.Namespace).List(
+				context.Background(),
+				v1.ListOptions{
+					LabelSelector: fmt.Sprintf("owner=helm,status in (pending-install, pending-upgrade, pending-rollback),name=%s", rel.Name),
+				},
+			)
+
+			if err != nil {
+				return nil, fmt.Errorf("Upgrade failed: %w", err)
+			}
+
+			for _, secret := range secretList.Items {
+				secret.Labels["status"] = "failed"
+
+				_, err = a.K8sAgent.Clientset.CoreV1().Secrets(rel.Namespace).Update(
+					context.Background(), &secret, v1.UpdateOptions{},
+				)
+
+				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 nil, fmt.Errorf("Upgrade failed: %v", err)
 	}