# HG changeset patch
# User Steeve Chailloux <steeve.chailloux@orus.io>
# Date 1652956352 -7200
#      Thu May 19 12:32:32 2022 +0200
# Node ID ef4877d6d4e0c5af75ad88aa9badcb45f545d174
# Parent  47583b2d05ffbf5b1e92acce3e69eb6dd1226e00
runner: add Ytt type and Ytt.BuildArgs methode

diff --git a/runner/config.go b/runner/config.go
--- a/runner/config.go
+++ b/runner/config.go
@@ -109,7 +109,29 @@
 type CmdSpec struct {
 	Variables []Variable
 	Charts    CmdCharts
-	Ytt       []string
+	Ytt       Ytt
+}
+
+type Ytt []string
+
+func (y Ytt) BuildArgs(namespace string, compiled []string) ([]string, error) {
+	// ytt -f $chartsTmpFile --file-mark "$(basename $chartsTmpFile):type=yaml-plain"\
+	//   -f base/ytt/ -f base/ytt.yml -f ns1/ytt/ -f ns1/ytt.yml
+	var args []string
+	for _, c := range compiled {
+		args = append(args, "-f", c, "--file-mark", filepath.Base(c))
+	}
+	for _, entry := range []string{
+		filepath.Join("base", "ytt"),
+		filepath.Join("base", "ytt.yaml"),
+		filepath.Join("environments", namespace, "ytt"),
+		filepath.Join("environments", namespace, "ytt.yaml")} {
+
+		if _, err := os.Stat(entry); !os.IsExist(err) {
+			args = append(args, "-f", entry)
+		}
+	}
+	return args, nil
 }
 
 type CmdCharts map[string]CmdChart
@@ -144,9 +166,6 @@
 	return args, nil
 }
 
-// ytt -f $chartsTmpFile --file-mark "$(basename $chartsTmpFile):type=yaml-plain"\
-//   -f base/ytt/ -f base/ytt.yml -f ns1/ytt/ -f ns1/ytt.yml
-
 func cmdChartFromChart(c Chart) CmdChart {
 	return CmdChart{
 		Type:            c.Type,
diff --git a/runner/config_test.go b/runner/config_test.go
--- a/runner/config_test.go
+++ b/runner/config_test.go
@@ -1,10 +1,12 @@
 package runner
 
 import (
+	"path/filepath"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
+	"orus.io/cloudcrane/beaver/testutils"
 )
 
 func TestConfig(t *testing.T) {
@@ -17,3 +19,27 @@
 	assert.Equal(t, "vendor/helm/postgresql", config.Spec.Charts["postgres"].Path)
 	assert.Equal(t, "vendor/ytt/odoo", config.Spec.Charts["odoo"].Path)
 }
+
+func TestYttBuildArgs(t *testing.T) {
+	tl := testutils.NewTestLogger(t)
+	testNS := "ns1"
+	absConfigDir, err := filepath.Abs("fixtures/")
+	require.NoError(t, err)
+	c := NewCmdConfig(tl.Logger(), absConfigDir, testNS, false)
+	require.NoError(t, c.Initialize())
+
+	args, err := c.Spec.Ytt.BuildArgs(testNS, []string{"/tmp/postgres.1234.yaml", "/tmp/odoo.5678.yaml"})
+	require.NoError(t, err)
+	assert.Equal(
+		t,
+		args,
+		[]string{
+			"-f", "/tmp/postgres.1234.yaml", "--file-mark", "postgres.1234.yaml",
+			"-f", "/tmp/odoo.5678.yaml", "--file-mark", "odoo.5678.yaml",
+			"-f", "base/ytt",
+			"-f", "base/ytt.yaml",
+			"-f", "environments/ns1/ytt",
+			"-f", "environments/ns1/ytt.yaml",
+		},
+	)
+}