Files
infra-provisioner/resource.go
2020-02-26 12:55:57 +05:30

76 lines
1.6 KiB
Go

package main
import (
"strings"
"github.com/Masterminds/sprig/v3"
"text/template"
"os"
"os/exec"
"log"
)
const TEMPLATES_DIR = "templates"
const INIT_SCRIPT = "./deploy.sh"
func provisionResource(resourceName, resourceDir string, manifest *Manifest, templateOnly bool) error {
err := templateResourceTf(resourceName, resourceDir, manifest)
if err != nil {
log.Fatalf("\nErr: %v", err)
return err
}
if !templateOnly {
err = executeResourceTf(resourceDir)
if(err != nil) {
log.Fatalf("\nErr: %v", err)
return err
}
}
return nil
}
func templateResourceTf(templateName, resourceDir string, manifest *Manifest) error {
log.Printf("Creating templates for %s in %s", templateName, resourceDir)
tfFiles, err := AssetDir(strings.Join([]string{TEMPLATES_DIR, resourceDir}, "/"))
if err != nil {
return err
}
for _, tfFile := range tfFiles {
tfBytes := MustAsset(strings.Join([]string{TEMPLATES_DIR, resourceDir, tfFile}, "/"))
t := template.Must(template.New(templateName).Funcs(sprig.TxtFuncMap()).Parse(string(tfBytes)))
tfOut, err := createFile(resourceDir, tfFile)
if err != nil {
log.Fatalf("\nErr: %v", err)
return err
}
err = t.Execute(tfOut, manifest)
if err != nil {
log.Fatalf("\nErr: %v", err)
return err
}
tfOut.Close()
}
return nil
}
func executeResourceTf(resourceDir string) error {
log.Printf("Running terraform for %s", resourceDir)
cmd := exec.Command(INIT_SCRIPT)
cmd.Dir = resourceDir
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
log.Fatalf("\nErr: %v", err)
return err
}
return err
}