|
6 | 6 | "fmt" |
7 | 7 | "os" |
8 | 8 | "path/filepath" |
| 9 | + "regexp" |
9 | 10 | "strings" |
10 | 11 | "text/template" |
11 | 12 |
|
@@ -61,18 +62,53 @@ func CreateAdditionalTerraformFiles(tfFiles ...Template) error { |
61 | 62 | return nil |
62 | 63 | } |
63 | 64 |
|
| 65 | +// ModifyTerraformProviderVersion modifies the existing Terraform files to add AWS provider version constraint |
| 66 | +func ModifyTerraformProviderVersion(terraformOutputDir, awsProviderVersion string) error { |
| 67 | + kubernetesFile := terraformOutputDir + "/kubernetes.tf" |
| 68 | + |
| 69 | + cleanVersion := strings.Trim(awsProviderVersion, `"`) |
| 70 | + |
| 71 | + content, err := os.ReadFile(kubernetesFile) |
| 72 | + if err != nil { |
| 73 | + return fmt.Errorf("failed to read kubernetes.tf: %w", err) |
| 74 | + } |
| 75 | + |
| 76 | + awsVersionRegex := regexp.MustCompile(`(?s)(aws\s*=\s*\{[^}]*"version"\s*=\s*)"[^"]*"`) |
| 77 | + |
| 78 | + if !awsVersionRegex.MatchString(string(content)) { |
| 79 | + return fmt.Errorf("failed to find AWS provider version pattern in kubernetes.tf") |
| 80 | + } |
| 81 | + |
| 82 | + newVersionString := fmt.Sprintf(`${1}"%s"`, cleanVersion) |
| 83 | + newContent := awsVersionRegex.ReplaceAllString(string(content), newVersionString) |
| 84 | + |
| 85 | + err = os.WriteFile(kubernetesFile, []byte(newContent), 0644) |
| 86 | + if err != nil { |
| 87 | + return fmt.Errorf("failed to write modified kubernetes.tf: %w", err) |
| 88 | + } |
| 89 | + |
| 90 | + return nil |
| 91 | +} |
| 92 | + |
64 | 93 | func initTerraform(ctx context.Context, workingDir, terraformExecPath string, credentials aws.Credentials) (*tfexec.Terraform, error) { |
65 | 94 | tf, err := tfexec.NewTerraform(workingDir, terraformExecPath) |
66 | 95 | if err != nil { |
67 | 96 | return nil, err |
68 | 97 | } |
69 | 98 |
|
| 99 | + pluginCacheDir := fmt.Sprintf("%s/plugin-cache", filepath.Dir(terraformExecPath)) |
| 100 | + |
| 101 | + err = os.MkdirAll(pluginCacheDir, 0755) |
| 102 | + if err != nil { |
| 103 | + return nil, fmt.Errorf("failed to create plugin cache directory: %w", err) |
| 104 | + } |
| 105 | + |
70 | 106 | env := map[string]string{ |
71 | 107 | "AWS_ACCESS_KEY_ID": credentials.AccessKeyID, |
72 | 108 | "AWS_SECRET_ACCESS_KEY": credentials.SecretAccessKey, |
73 | 109 | "SPOTINST_TOKEN": os.Getenv("SPOTINST_TOKEN"), |
74 | 110 | "SPOTINST_ACCOUNT": os.Getenv("SPOTINST_ACCOUNT"), |
75 | | - "TF_PLUGIN_CACHE_DIR": fmt.Sprintf("%s/plugin-cache", filepath.Dir(terraformExecPath)), |
| 111 | + "TF_PLUGIN_CACHE_DIR": pluginCacheDir, |
76 | 112 | } |
77 | 113 |
|
78 | 114 | // this overrides all ENVVARs that are passed to Terraform |
|
0 commit comments