github.com/rohankumardubey/nomad@v0.11.8/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  }