func NewTerraformSession()

in astro/terraform/session.go [53:98]


func NewTerraformSession(id, baseDir string, config Config) (*Session, error) {
	if err := config.Validate(); err != nil {
		return nil, err
	}

	if utils.FileExists(baseDir) {
		return nil, fmt.Errorf("cannot create new session: session already exist at %v", baseDir)
	}

	logDir, err := filepath.Abs(filepath.Join(baseDir, "logs"))
	if err != nil {
		return nil, err
	}

	sandboxDir, err := filepath.Abs(filepath.Join(baseDir, "sandbox"))
	if err != nil {
		return nil, err
	}

	for _, dir := range []string{baseDir, logDir, sandboxDir} {
		logger.Trace.Printf("terraform: mkdir: %v\n", dir)
		if err := os.Mkdir(dir, 0755); err != nil {
			return nil, err
		}
	}

	// Copy the Terraform code tree into the sandbox
	logger.Trace.Printf("terraform: copying tree from %v to %v", config.BasePath, sandboxDir)
	if err := cloneTree(config.BasePath, sandboxDir); err != nil {
		return nil, fmt.Errorf("unable to clone tree from %v to %v: %v", config.BasePath, sandboxDir, err)
	}

	moduleDir, err := filepath.Abs(filepath.Join(sandboxDir, config.ModulePath))
	if err != nil {
		return nil, err
	}

	return &Session{
		id:         id,
		config:     &config,
		baseDir:    baseDir,
		sandboxDir: sandboxDir,
		moduleDir:  moduleDir,
		logDir:     logDir,
	}, nil
}