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 }