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
}