From aac734ffd5867eb2b206a0cf5ad3e37817a27464 Mon Sep 17 00:00:00 2001 From: yxxhero <11087727+yxxhero@users.noreply.github.com> Date: Sun, 6 Aug 2023 21:49:55 +0800 Subject: [PATCH] fix re-using environment state in sub-helmfiles issue (#951) * fix re-using environment state in sub-helmfiles issue Signed-off-by: yxxhero --- pkg/app/desired_state_file_loader.go | 3 ++- pkg/state/create.go | 2 +- .../helmfiles/no-envs.yaml | 7 +++++++ .../helmfiles/no-values.yaml | 3 +++ .../helmfiles/prod.yaml | 2 +- .../helmfiles/test.yaml | 2 +- .../environment_missing_in_subhelmfile/input.yaml | 4 ++++ .../environment_missing_in_subhelmfile/output.yaml | 10 ++++++++-- 8 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-envs.yaml create mode 100644 test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-values.yaml diff --git a/pkg/app/desired_state_file_loader.go b/pkg/app/desired_state_file_loader.go index e0bc94f9..f02a9a1b 100644 --- a/pkg/app/desired_state_file_loader.go +++ b/pkg/app/desired_state_file_loader.go @@ -189,6 +189,7 @@ func (ld *desiredStateLoader) load(env, overrodeEnv *environment.Environment, ba normalizedContent := bytes.ReplaceAll(content, []byte("\r\n"), []byte("\n")) parts := bytes.Split(normalizedContent, []byte("\n---\n")) + hasEnv := env != nil || overrodeEnv != nil var finalState *state.HelmState for i, part := range parts { @@ -267,7 +268,7 @@ func (ld *desiredStateLoader) load(env, overrodeEnv *environment.Environment, ba // If environments are not defined in the helmfile at all although the env is specified, // it's a missing env situation. Let's fail. - if len(finalState.Environments) == 0 && evaluateBases && env.Name != state.DefaultEnv { + if len(finalState.Environments) == 0 && evaluateBases && !hasEnv && env.Name != state.DefaultEnv { return nil, &state.StateLoadError{ Msg: fmt.Sprintf("failed to read %s", finalState.FilePath), Cause: &state.UndefinedEnvError{Env: env.Name}, diff --git a/pkg/state/create.go b/pkg/state/create.go index 8457924d..c25e705a 100644 --- a/pkg/state/create.go +++ b/pkg/state/create.go @@ -248,7 +248,7 @@ func (c *StateCreator) loadEnvValues(st *HelmState, name string, failOnMissingEn return nil, err } } - } else if ctxEnv == nil && name != DefaultEnv && failOnMissingEnv { + } else if ctxEnv == nil && overrode == nil && name != DefaultEnv && failOnMissingEnv { return nil, &UndefinedEnvError{Env: name} } diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-envs.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-envs.yaml new file mode 100644 index 00000000..53316804 --- /dev/null +++ b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-envs.yaml @@ -0,0 +1,7 @@ +releases: +- name: no-envs + chart: ../../../charts/raw-0.0.1 + values: + - templates: + - | + envName: {{ .Values.envName }} diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-values.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-values.yaml new file mode 100644 index 00000000..e110ebe2 --- /dev/null +++ b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/no-values.yaml @@ -0,0 +1,3 @@ +releases: +- name: no-values + chart: ../../../charts/raw-0.0.1 \ No newline at end of file diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/prod.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/prod.yaml index 4d13d6a6..c7ddf876 100644 --- a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/prod.yaml +++ b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/prod.yaml @@ -6,7 +6,7 @@ environments: --- releases: -- name: raw +- name: prod chart: ../../../charts/raw-0.0.1 values: - templates: diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/test.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/test.yaml index 11bc0301..62a03bb1 100644 --- a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/test.yaml +++ b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/helmfiles/test.yaml @@ -6,7 +6,7 @@ environments: --- releases: -- name: raw +- name: test chart: ../../../charts/raw-0.0.1 values: - templates: diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml index 0bcf6499..6b312364 100644 --- a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml +++ b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/input.yaml @@ -10,3 +10,7 @@ helmfiles: - path: helmfiles/prod.yaml values: - envName: {{ .Values.envName }} +- path: helmfiles/no-envs.yaml + values: + - envName: {{ .Values.envName }} +- path: helmfiles/no-values.yaml \ No newline at end of file diff --git a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/output.yaml b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/output.yaml index b3a62542..c0cb7536 100644 --- a/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/output.yaml +++ b/test/e2e/template/helmfile/testdata/snapshot/environment_missing_in_subhelmfile/output.yaml @@ -1,7 +1,13 @@ -Building dependency release=raw, chart=../../../charts/raw-0.0.1 -Templating release=raw, chart=../../../charts/raw-0.0.1 +Building dependency release=test, chart=../../../charts/raw-0.0.1 +Templating release=test, chart=../../../charts/raw-0.0.1 --- # Source: raw/templates/resources.yaml subhelmfile: test envName: test +Building dependency release=no-envs, chart=../../../charts/raw-0.0.1 +Templating release=no-envs, chart=../../../charts/raw-0.0.1 +--- +# Source: raw/templates/resources.yaml +envName: test +