Re: Strict helmfile.yaml file ext when rendered as template (#599)
This is a successor to #440 rebuilt on top of #594 so that we can merge this while we are still at Hemlfile v0.x without worrying any backward-incompatibility. Much appreciation to @yxxhero for the original work! Signed-off-by: Yusuke Kuoka <ykuoka@gmail.com> Signed-off-by: Yusuke Kuoka <ykuoka@gmail.com>
This commit is contained in:
parent
8144638bab
commit
7860bddedc
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"github.com/helmfile/helmfile/pkg/filesystem"
|
"github.com/helmfile/helmfile/pkg/filesystem"
|
||||||
"github.com/helmfile/helmfile/pkg/helmexec"
|
"github.com/helmfile/helmfile/pkg/helmexec"
|
||||||
"github.com/helmfile/helmfile/pkg/remote"
|
"github.com/helmfile/helmfile/pkg/remote"
|
||||||
|
"github.com/helmfile/helmfile/pkg/runtime"
|
||||||
"github.com/helmfile/helmfile/pkg/state"
|
"github.com/helmfile/helmfile/pkg/state"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -124,29 +125,14 @@ func (ld *desiredStateLoader) loadFileWithOverrides(inheritedEnv, overrodeEnv *e
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
ext := filepath.Ext(f)
|
self, err := ld.load(
|
||||||
|
inheritedEnv,
|
||||||
var self *state.HelmState
|
overrodeEnv,
|
||||||
|
baseDir,
|
||||||
if !experimentalModeEnabled() || ext == ".gotmpl" {
|
f,
|
||||||
self, err = ld.renderAndLoad(
|
fileBytes,
|
||||||
inheritedEnv,
|
evaluateBases,
|
||||||
overrodeEnv,
|
)
|
||||||
baseDir,
|
|
||||||
f,
|
|
||||||
fileBytes,
|
|
||||||
evaluateBases,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
self, err = ld.load(
|
|
||||||
fileBytes,
|
|
||||||
baseDir,
|
|
||||||
file,
|
|
||||||
evaluateBases,
|
|
||||||
inheritedEnv,
|
|
||||||
overrodeEnv,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -170,7 +156,7 @@ func (a *desiredStateLoader) underlying() *state.StateCreator {
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *desiredStateLoader) load(yaml []byte, baseDir, file string, evaluateBases bool, env, overrodeEnv *environment.Environment) (*state.HelmState, error) {
|
func (a *desiredStateLoader) rawLoad(yaml []byte, baseDir, file string, evaluateBases bool, env, overrodeEnv *environment.Environment) (*state.HelmState, error) {
|
||||||
merged, err := env.Merge(overrodeEnv)
|
merged, err := env.Merge(overrodeEnv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -190,7 +176,7 @@ func (a *desiredStateLoader) load(yaml []byte, baseDir, file string, evaluateBas
|
||||||
return st, nil
|
return st, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ld *desiredStateLoader) renderAndLoad(env, overrodeEnv *environment.Environment, baseDir, filename string, content []byte, evaluateBases bool) (*state.HelmState, error) {
|
func (ld *desiredStateLoader) load(env, overrodeEnv *environment.Environment, baseDir, filename string, content []byte, evaluateBases bool) (*state.HelmState, error) {
|
||||||
// Allows part-splitting to work with CLRF-ed content
|
// Allows part-splitting to work with CLRF-ed content
|
||||||
normalizedContent := bytes.ReplaceAll(content, []byte("\r\n"), []byte("\n"))
|
normalizedContent := bytes.ReplaceAll(content, []byte("\r\n"), []byte("\n"))
|
||||||
parts := bytes.Split(normalizedContent, []byte("\n---\n"))
|
parts := bytes.Split(normalizedContent, []byte("\n---\n"))
|
||||||
|
|
@ -198,25 +184,32 @@ func (ld *desiredStateLoader) renderAndLoad(env, overrodeEnv *environment.Enviro
|
||||||
var finalState *state.HelmState
|
var finalState *state.HelmState
|
||||||
|
|
||||||
for i, part := range parts {
|
for i, part := range parts {
|
||||||
var yamlBuf *bytes.Buffer
|
|
||||||
var err error
|
|
||||||
|
|
||||||
id := fmt.Sprintf("%s.part.%d", filename, i)
|
id := fmt.Sprintf("%s.part.%d", filename, i)
|
||||||
|
|
||||||
if env == nil && overrodeEnv == nil {
|
var rawContent []byte
|
||||||
yamlBuf, err = ld.renderTemplatesToYaml(baseDir, id, part)
|
|
||||||
if err != nil {
|
if filepath.Ext(filename) == ".gotmpl" || !runtime.V1Mode {
|
||||||
return nil, fmt.Errorf("error during %s parsing: %v", id, err)
|
var yamlBuf *bytes.Buffer
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if env == nil && overrodeEnv == nil {
|
||||||
|
yamlBuf, err = ld.renderTemplatesToYaml(baseDir, id, part)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error during %s parsing: %v", id, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
yamlBuf, err = ld.renderTemplatesToYamlWithEnv(baseDir, id, part, env, overrodeEnv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error during %s parsing: %v", id, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
rawContent = yamlBuf.Bytes()
|
||||||
} else {
|
} else {
|
||||||
yamlBuf, err = ld.renderTemplatesToYamlWithEnv(baseDir, id, part, env, overrodeEnv)
|
rawContent = part
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("error during %s parsing: %v", id, err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
currentState, err := ld.load(
|
currentState, err := ld.rawLoad(
|
||||||
yamlBuf.Bytes(),
|
rawContent,
|
||||||
baseDir,
|
baseDir,
|
||||||
filename,
|
filename,
|
||||||
evaluateBases,
|
evaluateBases,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue