github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/e2e/framework/provisioning/config_terraform.go (about) 1 package provisioning 2 3 import ( 4 "encoding/json" 5 "io/ioutil" 6 "log" 7 "path/filepath" 8 ) 9 10 // ProvisionerConfigTerraform targets a Terraform cluster by reading the config 11 // from a file, as output by 'terraform output provisioning'. Malformed inputs 12 // will log.Fatal so that we halt the test run. 13 func ProvisionerConfigTerraform(config ProvisionerConfig) *ProvisioningTargets { 14 configFile, err := filepath.Abs(config.TerraformConfig) 15 if err != nil { 16 log.Fatalf("could not find -provision.terraform file: %v", err) 17 } 18 19 file, err := ioutil.ReadFile(configFile) 20 if err != nil { 21 log.Fatalf("could not read -provision.terraform file: %v", err) 22 } 23 24 targets := &ProvisioningTargets{} 25 err = json.Unmarshal(file, &targets) 26 if err != nil { 27 log.Fatalf("decoding error: %v\n", err) 28 } 29 30 for _, server := range targets.Servers { 31 canonicalize(server, config) 32 } 33 for _, client := range targets.Clients { 34 canonicalize(client, config) 35 } 36 return targets 37 } 38 39 func canonicalize(target *ProvisioningTarget, config ProvisionerConfig) { 40 41 // allow the '-nomad.*' command line flags to override 42 // the values we get from 'terraform output provisioning' 43 if config.NomadVersion != "" { 44 target.Deployment.NomadVersion = config.NomadVersion 45 } 46 if config.NomadSha != "" { 47 target.Deployment.NomadSha = config.NomadSha 48 } 49 if config.NomadLocalBinary != "" { 50 target.Deployment.NomadLocalBinary = config.NomadLocalBinary 51 } 52 53 if target.Deployment.RemoteBinaryPath == "" { 54 log.Fatal("bad runner config for 'remote_binary_path': missing value") 55 } 56 key, ok := target.Runner["key"].(string) 57 if !ok { 58 log.Fatalf("bad runner config for 'key': %v", target.Runner) 59 } 60 user, ok := target.Runner["user"].(string) 61 if !ok { 62 log.Fatalf("bad runner config for 'user': %v", target.Runner) 63 } 64 hostname, ok := target.Runner["host"].(string) 65 if !ok { 66 log.Fatalf("bad runner config for 'host': %v", target.Runner) 67 } 68 port, ok := target.Runner["port"].(float64) 69 if !ok { 70 log.Fatalf("bad runner config for 'port': %v", target.Runner) 71 } 72 73 runner := &SSHRunner{ 74 Key: key, 75 User: user, 76 Host: hostname, 77 Port: int(port), 78 } 79 if target.Deployment.Platform == "windows_amd64" { 80 runner.copyMethod = copyWindows 81 } else { 82 runner.copyMethod = copyLinux 83 } 84 target.runner = runner 85 }