(args []string)
| 615 | } |
| 616 | |
| 617 | func handleDelete(args []string) { |
| 618 | deleteCmd := flag.NewFlagSet("delete", flag.ExitOnError) |
| 619 | stateBucketName := deleteCmd.String("state-bucket-name", "", "Bucket S3 do estado (deve ser o mesmo usado na criação).") |
| 620 | clusterName := deleteCmd.String("name", "", "Nome do cluster usado na criação (Ex: prod-eks). NÃO use o ID da AWS.") |
| 621 | awsRegion := deleteCmd.String("region", "us-east-1", "Região da AWS.") |
| 622 | refreshState := deleteCmd.Bool("refresh", true, "Validar estado real antes de destruir.") |
| 623 | |
| 624 | secretsProvider := deleteCmd.String("secrets-provider", "awskms", "Provider de criptografia: 'passphrase' ou 'awskms'.") |
| 625 | kmsKeyID := deleteCmd.String("kms-key-id", "", "ID da chave KMS (se usar awskms).") |
| 626 | configPassphrase := deleteCmd.String("config-passphrase", "", "Passphrase (se usar passphrase).") |
| 627 | |
| 628 | deleteCmd.Parse(args) |
| 629 | |
| 630 | if *secretsProvider == "awskms" { |
| 631 | if *kmsKeyID == "" { |
| 632 | fmt.Fprintln(os.Stderr, "❌ ERRO: Você precisa informar --kms-key-id no delete") |
| 633 | os.Exit(1) |
| 634 | } |
| 635 | os.Setenv("PULUMI_CONFIG_PASSPHRASE", *kmsKeyID) |
| 636 | } |
| 637 | |
| 638 | if *secretsProvider == "passphrase" { |
| 639 | finalPassphrase := *configPassphrase |
| 640 | if finalPassphrase == "" { |
| 641 | finalPassphrase = os.Getenv("PULUMI_CONFIG_PASSPHRASE") |
| 642 | } |
| 643 | if finalPassphrase == "" { |
| 644 | fmt.Fprintln(os.Stderr, "❌ ERRO: Passphrase necessária para deletar") |
| 645 | os.Exit(1) |
| 646 | } |
| 647 | os.Setenv("PULUMI_CONFIG_PASSPHRASE", finalPassphrase) |
| 648 | } |
| 649 | |
| 650 | if *clusterName == "" { |
| 651 | fmt.Fprintln(os.Stderr, "❌ Erro: O flag --name é obrigatório.") |
| 652 | fmt.Fprintln(os.Stderr, " Use o mesmo nome que você definiu ao criar o cluster.") |
| 653 | deleteCmd.Usage() |
| 654 | os.Exit(1) |
| 655 | } |
| 656 | |
| 657 | var backendURL string |
| 658 | if *stateBucketName != "" { |
| 659 | // Se S3 foi usado na criação, monte a URL com lock Dynamo |
| 660 | backendURL = fmt.Sprintf("s3://%s?region=%s", *stateBucketName, *awsRegion) |
| 661 | fmt.Fprintln(os.Stderr, "🧹 Usando backend S3:", backendURL) |
| 662 | } else { |
| 663 | // Tente usar o backend do 'pulumi login'; se não houver, caia para local |
| 664 | current, hasToken := getCurrentPulumiBackend() |
| 665 | switch { |
| 666 | case current == "": |
| 667 | home, _ := os.UserHomeDir() |
| 668 | localDir := filepath.Join(home, ".chatcli", "pulumi", *clusterName) |
| 669 | _ = os.MkdirAll(localDir, 0755) |
| 670 | backendURL = "file://" + localDir |
| 671 | fmt.Fprintln(os.Stderr, "🧹 Backend local (file) [fallback]:", backendURL) |
| 672 | |
| 673 | case strings.HasPrefix(current, "http://") || strings.HasPrefix(current, "https://"): |
| 674 | if hasToken { |
no test coverage detected