Skip to content
Snippets Groups Projects
cmd.go 1.42 KiB
Newer Older
Florent Aide's avatar
Florent Aide committed
package runner

import (
steeve.chailloux's avatar
steeve.chailloux committed
	"os"
	"path/filepath"

Florent Aide's avatar
Florent Aide committed
	"github.com/go-cmd/cmd"
steeve.chailloux's avatar
steeve.chailloux committed
	"github.com/rs/zerolog"
Florent Aide's avatar
Florent Aide committed
)

func RunCMD(name string, args ...string) (err error, stdout, stderr []string) {
steeve.chailloux's avatar
steeve.chailloux committed
	// 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 ...
Florent Aide's avatar
Florent Aide committed
	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
}
steeve.chailloux's avatar
steeve.chailloux committed

func NewCmdConfig(logger zerolog.Logger, configDir string, namespace string) (*CmdConfig, error) {
	var cmdConfig CmdConfig
	cmdConfig.Namespace = namespace
	cmdConfig.Logger = logger

	baseCfg, err := NewConfig(configDir)
	if err != nil {
		return nil, err
	}

	nsCfgDir := filepath.Join(configDir, namespace)
	nsCfg, err := NewConfig(nsCfgDir)
	if err != nil && err != os.ErrNotExist {
		return nil, err
	}

	// TODO:
	// - merge baseCfg & nsCfg according to magic
	// - hydrate
	return &cmdConfig, nil
}

type CmdConfig struct {
	Spec      CmdSpec
	Namespace string
	Logger    zerolog.Logger
}

type CmdSpec struct {
	Variables []Variable
	Charts    CmdChart
}

type CmdChart struct {
	Helm map[string]CmdHelmChart
	Ytt  map[string]CmdYttChart
}

type CmdHelmChart struct {
	Type   string
	Name   string
	Values []string
}
type CmdYttChart struct {
	Type   string
	Name   string
	Files  []string
	Values []Value
}