* [ch11782] | Anoop | Add validations for components * [ch11782] | Anoop | Allow database & servicerole structure to be null * [ch11782] | Anoop | Add required validation for s3 fields
82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"github.cmd.navi-tech.in/navi-infra/infra-provisioner/bindata"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
"text/template"
|
|
|
|
"github.com/Masterminds/sprig/v3"
|
|
)
|
|
|
|
const TemplatesDir = "templates"
|
|
const InitScript = "./deploy.sh"
|
|
|
|
func provisionResource(resourceName, resourceDir string, manifest *Manifest, templateOnly, plan bool) error {
|
|
err := templateResourceTf(resourceName, resourceDir, manifest)
|
|
if err != nil {
|
|
log.Fatalf("\nErr: %v", err)
|
|
return err
|
|
}
|
|
|
|
if !templateOnly {
|
|
err = executeResourceTf(resourceDir, plan)
|
|
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 := bindata.AssetDir(strings.Join([]string{TemplatesDir, resourceDir}, "/"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, tfFile := range tfFiles {
|
|
tfBytes := bindata.MustAsset(strings.Join([]string{TemplatesDir, 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, 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)
|
|
}
|
|
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
|
|
}
|