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

guarding on aws_assume_role_chains sql in transaction

Stefan McShane 3 лет назад
Родитель
Сommit
64a8add886
1 измененных файлов с 17 добавлено и 7 удалено
  1. 17 7
      cmd/migrate/main.go

+ 17 - 7
cmd/migrate/main.go

@@ -2,6 +2,7 @@ package main
 
 import (
 	"errors"
+	"fmt"
 	"log"
 
 	"github.com/porter-dev/porter/api/server/shared/config/envloader"
@@ -49,13 +50,22 @@ func main() {
 		logger.Fatal().Err(err).Msg("failed to drop clusters token cache constraint")
 		return
 	}
-	if err := db.Exec("alter table aws_assume_role_chains ADD CONSTRAINT IF NOT EXISTS fk_projects FOREIGN KEY(project_id) REFERENCES projects(id);").Error; err != nil {
-		logger.Fatal().Err(err).Msg("failed to create fk constraint for assume role chains")
-		return
-	}
-	if err := db.Exec("alter table aws_assume_role_chains ADD IF NOT EXISTS unique (project_id, source_arn, target_arn);").Error; err != nil {
-		logger.Fatal().Err(err).Msg("failed to create unique constraint for assume role chains")
-		return
+
+	err = db.Transaction(func(tx *pgorm.DB) error {
+		if err := db.Exec("alter table aws_assume_role_chains DROP CONSTRAINT IF EXISTS fk_projects;").Error; err != nil {
+			return fmt.Errorf("failed to drop fk constraint for assume role chains: %w", err)
+		}
+		if err := db.Exec("alter table aws_assume_role_chains ADD CONSTRAINT fk_projects FOREIGN KEY(project_id) REFERENCES projects(id);").Error; err != nil {
+			return fmt.Errorf("failed to create fk constraint for assume role chains: %w", err)
+		}
+
+		if err := db.Exec("alter table aws_assume_role_chains ADD unique (project_id, source_arn, target_arn);").Error; err != nil {
+			return fmt.Errorf("failed to create unique constraint for assume role chains: %w", err)
+		}
+		return nil
+	})
+	if err != nil {
+		logger.Fatal().Err(err).Msg("error updating cluster control plane tables")
 	}
 
 	tx := db.Begin()