76 lines
1.6 KiB
Go
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
|
|
}
|