From b0179218b9495996177b142fa4cda8fcb5623a87 Mon Sep 17 00:00:00 2001 From: KUOKA Yusuke Date: Wed, 15 May 2019 13:16:22 +0900 Subject: [PATCH] fix: helmfile panicing on missing lock file (#596) Fixes #595 --- state/chart_dependency.go | 6 +++- state/state_test.go | 46 ++++++++++++++++++++++++ test/integration/environment.values.yaml | 1 + test/integration/happypath.yaml | 21 +++++++++++ 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 test/integration/environment.values.yaml diff --git a/state/chart_dependency.go b/state/chart_dependency.go index 8a2989ff..a78bf353 100644 --- a/state/chart_dependency.go +++ b/state/chart_dependency.go @@ -140,6 +140,10 @@ func (st *HelmState) mergeLockedDependencies() (*HelmState, error) { depMan := NewChartDependencyManager(filename, st.logger) + if st.readFile != nil { + depMan.readFile = st.readFile + } + return resolveDependencies(st, depMan, unresolved) } @@ -325,7 +329,7 @@ func (m *chartDependencyManager) Resolve(unresolved *UnresolvedDependencies) (*R updatedLockFileContent, err := m.readBytes(m.lockFileName()) if err != nil { if os.IsNotExist(err) { - return nil, true, nil + return nil, false, nil } return nil, false, err } diff --git a/state/state_test.go b/state/state_test.go index 0a2b5cf8..14866082 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -1500,6 +1500,52 @@ generated: 2019-05-14T11:29:35.144399+09:00 } } +func TestHelmState_ResolveDeps(t *testing.T) { + logger := helmexec.NewLogger(os.Stderr, "debug") + state := &HelmState{ + basePath: "/src", + FilePath: "/src/helmfile.yaml", + Releases: []ReleaseSpec{ + { + Chart: "./..", + }, + { + Chart: "../examples", + }, + { + Chart: "../../helmfile", + }, + { + Chart: "published", + }, + { + Chart: "published/deeper", + }, + { + Chart: "stable/envoy", + }, + }, + Repositories: []RepositorySpec{ + { + Name: "stable", + URL: "https://kubernetes-charts.storage.googleapis.com", + }, + }, + logger: logger, + readFile: func(f string) ([]byte, error) { + if f != "helmfile.lock" { + return nil, fmt.Errorf("stub: unexpected file: %s", f) + } + return nil, os.ErrNotExist + }, + } + + _, err := state.ResolveDeps() + if err != nil { + t.Errorf("unexpected error: %v", err) + } +} + func TestHelmState_ReleaseStatuses(t *testing.T) { tests := []struct { name string diff --git a/test/integration/environment.values.yaml b/test/integration/environment.values.yaml new file mode 100644 index 00000000..7c73625e --- /dev/null +++ b/test/integration/environment.values.yaml @@ -0,0 +1 @@ +mysecret: MYSECRET diff --git a/test/integration/happypath.yaml b/test/integration/happypath.yaml index 915fc0ee..f1f5f780 100644 --- a/test/integration/happypath.yaml +++ b/test/integration/happypath.yaml @@ -1,6 +1,13 @@ +environments: + default: + values: + - environment.values.yaml +--- repositories: - name: stable url: https://kubernetes-charts.storage.googleapis.com/ + - name: incubator + url: https://kubernetes-charts-incubator.storage.googleapis.com helmDefaults: kubeContext: minikube @@ -12,3 +19,17 @@ releases: set: - name: ingress.enabled value: false + + - name: raw + chart: incubator/raw + values: + - mysecret: {{ .Environment.Values.mysecret }} + resources: [] + templates: + - | + apiVersion: v1 + kind: Secret + metadata: + name: common-secret + stringData: + mykey: {{ .Values.mysecret }}