Files
infra-provisioner/resource.go

83 lines
1.8 KiB
Go
Raw Permalink Normal View History

2020-01-13 18:49:36 +05:30
package main
import (
"log"
2020-01-13 18:49:36 +05:30
"os"
"os/exec"
"strings"
"text/template"
2020-09-17 12:58:18 +05:30
"github.cmd.navi-tech.in/navi-infra/infra-provisioner/bindata"
"github.com/Masterminds/sprig/v3"
2020-01-13 18:49:36 +05:30
)
const TemplatesDir = "templates"
const InitScript = "./deploy.sh"
2020-01-13 18:49:36 +05:30
func provisionResource(resourceName, resourceDir string, manifest *Manifest, templateOnly, plan bool) error {
2020-09-17 12:58:18 +05:30
err := templateResourceTf(resourceName, resourceDir, manifest, resourceDir)
if err != nil {
2020-01-13 18:49:36 +05:30
log.Fatalf("\nErr: %v", err)
return err
}
if !templateOnly {
err = executeResourceTf(resourceDir, plan)
if err != nil {
log.Fatalf("\nErr: %v", err)
return err
}
2020-01-13 18:49:36 +05:30
}
return nil
}
2020-09-17 12:58:18 +05:30
func templateResourceTf(templateName, resourceDir string, manifest *Manifest, destinationDir string) error {
log.Printf("Creating templates for %s in %s", templateName, resourceDir)
2020-01-13 18:49:36 +05:30
tfFiles, err := bindata.AssetDir(strings.Join([]string{TemplatesDir, resourceDir}, "/"))
2020-01-13 18:49:36 +05:30
if err != nil {
return err
}
for _, tfFile := range tfFiles {
tfBytes := bindata.MustAsset(strings.Join([]string{TemplatesDir, resourceDir, tfFile}, "/"))
2020-01-13 18:49:36 +05:30
t := template.Must(template.New(templateName).Funcs(sprig.TxtFuncMap()).Parse(string(tfBytes)))
2020-09-17 12:58:18 +05:30
tfOut, err := createFile(destinationDir, tfFile)
if err != nil {
2020-01-13 18:49:36 +05:30
log.Fatalf("\nErr: %v", err)
return err
}
err = t.Execute(tfOut, manifest)
if err != nil {
2020-01-13 18:49:36 +05:30
log.Fatalf("\nErr: %v", err)
return err
}
tfOut.Close()
2020-01-13 18:49:36 +05:30
}
return nil
}
func executeResourceTf(resourceDir string, plan bool) error {
var cmd *exec.Cmd
if plan {
cmd = exec.Command(InitScript, "plan")
} else {
log.Printf("Running terraform for %s", resourceDir)
cmd = exec.Command(InitScript)
}
2020-01-13 18:49:36 +05:30
cmd.Dir = resourceDir
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err := cmd.Run()
if err != nil {
2020-01-13 18:49:36 +05:30
log.Fatalf("\nErr: %v", err)
return err
}
return err
}