func()

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)
}