github.com/mkuzmin/terraform@v0.3.7-0.20161118171027-ec4c00ff92a9/config_unix.go (about)

     1  // +build !windows
     2  
     3  package main
     4  
     5  import (
     6  	"bytes"
     7  	"errors"
     8  	"log"
     9  	"os"
    10  	"os/exec"
    11  	"path/filepath"
    12  	"strings"
    13  )
    14  
    15  func configFile() (string, error) {
    16  	dir, err := homeDir()
    17  	if err != nil {
    18  		return "", err
    19  	}
    20  
    21  	return filepath.Join(dir, ".terraformrc"), nil
    22  }
    23  
    24  func configDir() (string, error) {
    25  	dir, err := homeDir()
    26  	if err != nil {
    27  		return "", err
    28  	}
    29  
    30  	return filepath.Join(dir, ".terraform.d"), nil
    31  }
    32  
    33  func homeDir() (string, error) {
    34  	// First prefer the HOME environmental variable
    35  	if home := os.Getenv("HOME"); home != "" {
    36  		log.Printf("[DEBUG] Detected home directory from env var: %s", home)
    37  		return home, nil
    38  	}
    39  
    40  	// If that fails, try the shell
    41  	var stdout bytes.Buffer
    42  	cmd := exec.Command("sh", "-c", "eval echo ~$USER")
    43  	cmd.Stdout = &stdout
    44  	if err := cmd.Run(); err != nil {
    45  		return "", err
    46  	}
    47  
    48  	result := strings.TrimSpace(stdout.String())
    49  	if result == "" {
    50  		return "", errors.New("blank output")
    51  	}
    52  
    53  	return result, nil
    54  }