in astro/terraform.go [29:80]
func (session *Session) newTerraformSession(execution *boundExecution) (*terraform.Session, error) {
terraformSessionDir := filepath.Join(session.path, execution.ID())
moduleConfig := execution.ModuleConfig()
config := terraform.Config{
Name: moduleConfig.Name,
BasePath: moduleConfig.TerraformCodeRoot,
ModulePath: moduleConfig.Path,
Remote: moduleConfig.Remote,
Variables: execution.Variables(),
TerraformParameters: execution.TerraformParameters(),
}
// Fetch the right Terraform version
terraformVersion := moduleConfig.Terraform.Version
if terraformVersion != nil {
terraformPath, err := session.repo.project.terraformVersions.Get(terraformVersion.String())
if err != nil {
return nil, fmt.Errorf("unable to activate Terraform %v: %v", terraformVersion.String(), err)
}
config.TerraformPath = terraformPath
}
// In Terraform 0.9.x and later, the backend configuration must be
// in the Terraform code itself.
if terraform.VersionMatches(terraformVersion, ">= 0.9") {
config.Remote.Backend = ""
}
// Create a shared plugin directory
if terraform.VersionMatches(terraformVersion, ">= 0.10") {
if _, exists := os.LookupEnv("TF_PLUGIN_CACHE_DIR"); !exists {
pluginDir := filepath.Join(session.repo.path, "plugins")
logger.Trace.Printf("astro: creating shared plugin directory: %v", pluginDir)
if err := os.MkdirAll(pluginDir, 0755); err != nil {
return nil, err
}
config.SharedPluginDir = pluginDir
}
}
// If an override path has been specified, use that instead
if moduleConfig.Terraform.Path != "" {
config.TerraformPath = moduleConfig.Terraform.Path
}
return terraform.NewTerraformSession(execution.ID(), terraformSessionDir, config)
}