2020-01-13 18:49:36 +05:30
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
2020-05-06 18:51:14 +05:30
|
|
|
"log"
|
2020-01-13 18:49:36 +05:30
|
|
|
"os"
|
|
|
|
|
"os/exec"
|
2020-05-06 18:51:14 +05:30
|
|
|
"strings"
|
|
|
|
|
"text/template"
|
|
|
|
|
|
2020-09-17 12:58:18 +05:30
|
|
|
"github.cmd.navi-tech.in/navi-infra/infra-provisioner/bindata"
|
|
|
|
|
|
2020-05-06 18:51:14 +05:30
|
|
|
"github.com/Masterminds/sprig/v3"
|
2020-01-13 18:49:36 +05:30
|
|
|
)
|
|
|
|
|
|
2020-05-27 13:51:41 +05:30
|
|
|
const TemplatesDir = "templates"
|
|
|
|
|
const InitScript = "./deploy.sh"
|
2020-01-13 18:49:36 +05:30
|
|
|
|
2020-05-06 18:51:14 +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)
|
2020-01-14 15:29:50 +05:30
|
|
|
if err != nil {
|
2020-01-13 18:49:36 +05:30
|
|
|
log.Fatalf("\nErr: %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-14 15:29:50 +05:30
|
|
|
if !templateOnly {
|
2020-05-06 18:51:14 +05:30
|
|
|
err = executeResourceTf(resourceDir, plan)
|
|
|
|
|
if err != nil {
|
2020-01-14 15:29:50 +05:30
|
|
|
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 {
|
2020-01-14 15:29:50 +05:30
|
|
|
log.Printf("Creating templates for %s in %s", templateName, resourceDir)
|
2020-01-13 18:49:36 +05:30
|
|
|
|
2020-05-27 13:51:41 +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 {
|
2020-05-27 13:51:41 +05:30
|
|
|
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)
|
2020-01-14 15:29:50 +05:30
|
|
|
if err != nil {
|
2020-01-13 18:49:36 +05:30
|
|
|
log.Fatalf("\nErr: %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
2020-02-26 12:55:57 +05:30
|
|
|
err = t.Execute(tfOut, manifest)
|
2020-01-14 15:29:50 +05:30
|
|
|
if err != nil {
|
2020-01-13 18:49:36 +05:30
|
|
|
log.Fatalf("\nErr: %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
2020-01-13 20:26:28 +05:30
|
|
|
tfOut.Close()
|
2020-01-13 18:49:36 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2020-05-06 18:51:14 +05:30
|
|
|
func executeResourceTf(resourceDir string, plan bool) error {
|
|
|
|
|
var cmd *exec.Cmd
|
|
|
|
|
if plan {
|
2020-05-27 13:51:41 +05:30
|
|
|
cmd = exec.Command(InitScript, "plan")
|
2020-05-06 18:51:14 +05:30
|
|
|
} else {
|
|
|
|
|
log.Printf("Running terraform for %s", resourceDir)
|
2020-05-27 13:51:41 +05:30
|
|
|
cmd = exec.Command(InitScript)
|
2020-05-06 18:51:14 +05:30
|
|
|
}
|
2020-01-13 18:49:36 +05:30
|
|
|
cmd.Dir = resourceDir
|
|
|
|
|
cmd.Stdout = os.Stdout
|
|
|
|
|
cmd.Stderr = os.Stderr
|
2020-05-06 18:51:14 +05:30
|
|
|
err := cmd.Run()
|
2020-01-14 15:29:50 +05:30
|
|
|
if err != nil {
|
2020-01-13 18:49:36 +05:30
|
|
|
log.Fatalf("\nErr: %v", err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return err
|
|
|
|
|
}
|