-
Florent Aide authoredFlorent Aide authored
cmd.go 5.44 KiB
package runner
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"text/template"
"github.com/go-cmd/cmd"
"github.com/rs/zerolog"
)
func RunCMD(name string, args ...string) (err error, stdout, stderr []string) {
// helm template -f base.yaml -f base.values.yaml -f ns.yaml -f ns.values.yaml
// ytt -f /chart-folder -f base.yaml -f ns.yaml -v ... -v ...
c := cmd.NewCmd(name, args...)
statusChan := c.Start()
status := <-statusChan
if status.Error != nil {
return err, status.Stdout, status.Stderr
}
stdout = status.Stdout
stderr = status.Stderr
return
}
func NewCmdConfig(logger zerolog.Logger, configDir string, namespace string) (*CmdConfig, error) {
cmdConfig := &CmdConfig{}
cmdConfig.RootDir = configDir
cmdConfig.Spec.Charts.Helm = make(map[string]CmdChart)
cmdConfig.Spec.Charts.Ytt = make(map[string]CmdChart)
cmdConfig.Namespace = namespace
cmdConfig.Logger = logger
baseCfg, err := NewConfig(configDir)
if err != nil {
return nil, err
}
nsCfgDir := filepath.Join(configDir, "environments", namespace)
nsCfg, err := NewConfig(nsCfgDir)
if err != nil && err != os.ErrNotExist {
return nil, err
}
// first "import" all variables from baseCfg
cmdConfig.Spec.Variables = baseCfg.Spec.Variables
// then merge in all variables from the nsCfg
cmdConfig.MergeVariables(nsCfg)
for name, c := range baseCfg.Spec.Charts.Helm {
cmdConfig.Spec.Charts.Helm[name] = NewCmdChartFromChart(c)
}
for name, c := range nsCfg.Spec.Charts.Helm {
cmdConfig.Spec.Charts.Helm[name] = NewCmdChartFromChart(c)
}
cmdConfig.populate()
tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
if err != nil {
return nil, fmt.Errorf("failed to create temp dir: %w", err)
}
// - hydrate
if err := cmdConfig.hydrate(tmpDir); err != nil {
return nil, err
}