github.com/mcuckson/tflint@v0.8.0/tflint/terraform.go (about)

     1  package tflint
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"log"
     7  	"os"
     8  	"path/filepath"
     9  	"strings"
    10  
    11  	"github.com/hashicorp/terraform/terraform"
    12  	"github.com/zclconf/go-cty/cty"
    13  )
    14  
    15  var defaultValuesFile = "terraform.tfvars"
    16  
    17  func getTFDataDir() string {
    18  	dir := os.Getenv("TF_DATA_DIR")
    19  	if dir != "" {
    20  		log.Printf("[INFO] TF_DATA_DIR environment variable found: %s", dir)
    21  	} else {
    22  		dir = ".terraform"
    23  	}
    24  
    25  	return dir
    26  }
    27  
    28  func getTFModuleDir() string {
    29  	return filepath.Join(getTFDataDir(), "modules")
    30  }
    31  
    32  func getTFModuleManifestPath() string {
    33  	return filepath.Join(getTFModuleDir(), "modules.json")
    34  }
    35  
    36  func getTFWorkspace() string {
    37  	if envVar := os.Getenv("TF_WORKSPACE"); envVar != "" {
    38  		log.Printf("[INFO] TF_WORKSPACE environment variable found: %s", envVar)
    39  		return envVar
    40  	}
    41  
    42  	envData, _ := ioutil.ReadFile(filepath.Join(getTFDataDir(), "environment"))
    43  	current := string(bytes.TrimSpace(envData))
    44  	if current != "" {
    45  		log.Printf("[INFO] environment file found: %s", current)
    46  	} else {
    47  		current = "default"
    48  	}
    49  
    50  	return current
    51  }
    52  
    53  func getTFEnvVariables() terraform.InputValues {
    54  	envVariables := make(terraform.InputValues)
    55  	for _, e := range os.Environ() {
    56  		idx := strings.Index(e, "=")
    57  		envKey := e[:idx]
    58  		envVal := e[idx+1:]
    59  
    60  		if strings.HasPrefix(envKey, "TF_VAR_") {
    61  			log.Printf("[INFO] TF_VAR_* environment variable found: key=%s", envKey)
    62  			varName := strings.Replace(envKey, "TF_VAR_", "", 1)
    63  
    64  			envVariables[varName] = &terraform.InputValue{
    65  				Value:      cty.StringVal(envVal),
    66  				SourceType: terraform.ValueFromEnvVar,
    67  			}
    68  		}
    69  	}
    70  
    71  	return envVariables
    72  }