@@ -5,11 +5,13 @@ import (
5
5
"encoding/json"
6
6
"errors"
7
7
"fmt"
8
+ "log"
8
9
"os"
9
10
"path/filepath"
10
11
"strings"
11
12
12
13
"github.com/hashicorp/go-version"
14
+ "github.com/hashicorp/hc-install/fs"
13
15
"github.com/hashicorp/hc-install/product"
14
16
"github.com/hashicorp/hc-install/releases"
15
17
"github.com/hashicorp/hcl/v2"
@@ -20,14 +22,42 @@ import (
20
22
)
21
23
22
24
func setupTerraform (cfg * Config ) (* tfexec.Terraform , error ) {
23
- installer := & releases.ExactVersion {
24
- Product : product .Terraform ,
25
- Version : version .Must (version .NewVersion ("1.8.4" )),
25
+ var err error
26
+
27
+ tfVersion := cfg .TerraformInstallConfig .Version
28
+ if tfVersion == nil {
29
+ // Not using latest to avoid unexpected breaking changes
30
+ log .Printf ("No Terraform version specified, defaulting to version 1.8.5" )
31
+ tfVersion = version .Must (version .NewVersion ("1.8.5" ))
26
32
}
27
33
28
- execPath , err := installer .Install (context .Background ())
29
- if err != nil {
30
- return nil , fmt .Errorf ("error installing Terraform: %s" , err )
34
+ // Check if Terraform is already installed
35
+ var execPath string
36
+ if cfg .TerraformInstallConfig .InstallDir != "" {
37
+ finder := fs.ExactVersion {
38
+ Product : product .Terraform ,
39
+ Version : tfVersion ,
40
+ ExtraPaths : []string {
41
+ cfg .TerraformInstallConfig .InstallDir ,
42
+ },
43
+ }
44
+
45
+ if execPath , err = finder .Find (context .Background ()); err == nil {
46
+ log .Printf ("Terraform %s already installed at %s" , tfVersion , execPath )
47
+ }
48
+ }
49
+
50
+ // Install Terraform if not found
51
+ if execPath == "" {
52
+ log .Printf ("Installing Terraform %s" , tfVersion )
53
+ installer := & releases.ExactVersion {
54
+ Product : product .Terraform ,
55
+ Version : tfVersion ,
56
+ InstallDir : cfg .TerraformInstallConfig .InstallDir ,
57
+ }
58
+ if execPath , err = installer .Install (context .Background ()); err != nil {
59
+ return nil , fmt .Errorf ("error installing Terraform: %s" , err )
60
+ }
31
61
}
32
62
33
63
tf , err := tfexec .NewTerraform (cfg .OutputDir , execPath )
0 commit comments