Merge pull request #23 from helmfile/fix-helmfile-deps-chartify
Fix helmfile deps not to remove entries for charts that are being chartified
This commit is contained in:
commit
a4542265ca
|
|
@ -80,8 +80,11 @@ func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepare
|
|||
Namespace: rel.Namespace,
|
||||
KubeContext: rel.KubeContext,
|
||||
}
|
||||
if chart := releaseToChart[key]; chart != "" {
|
||||
rel.Chart = chart
|
||||
if chart := releaseToChart[key]; chart != rel.Chart {
|
||||
// In this case we assume that the chart is downloaded and modified by Helmfile and chartify.
|
||||
// So we take note of the local filesystem path to the modified version of the chart
|
||||
// and use it later via the Release.ChartPathOrName() func.
|
||||
rel.ChartPath = chart
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -183,6 +183,11 @@ type RepositorySpec struct {
|
|||
type ReleaseSpec struct {
|
||||
// Chart is the name of the chart being installed to create this release
|
||||
Chart string `yaml:"chart,omitempty"`
|
||||
|
||||
// ChartPath is the downloaded and modified version of the remote Chart specified by the Chart field.
|
||||
// This field is empty when the release is going to use the remote chart as-is, without any modifications(e.g. chartify).
|
||||
ChartPath string `yaml:"chartPath,omitempty"`
|
||||
|
||||
// Directory is an alias to Chart which may be of more fit when you want to use a local/remote directory containing
|
||||
// K8s manifests or Kustomization as a chart
|
||||
Directory string `yaml:"directory,omitempty"`
|
||||
|
|
@ -315,6 +320,16 @@ type ReleaseSpec struct {
|
|||
SkipDeps *bool `yaml:"skipDeps,omitempty"`
|
||||
}
|
||||
|
||||
// ChartPathOrName returns ChartPath if it is non-empty, and returns Chart otherwise.
|
||||
// This is useful to redirect helm commands like `helm template`, `helm diff`, and `helm upgrade --install` to
|
||||
// our modified version of the chart, in case the user configured Helmfile to do modify the chart before being passed to Helm.
|
||||
func (r ReleaseSpec) ChartPathOrName() string {
|
||||
if r.ChartPath != "" {
|
||||
return r.ChartPath
|
||||
}
|
||||
return r.Chart
|
||||
}
|
||||
|
||||
type Release struct {
|
||||
ReleaseSpec
|
||||
|
||||
|
|
@ -804,7 +819,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme
|
|||
for prep := range jobQueue {
|
||||
release := prep.release
|
||||
flags := prep.flags
|
||||
chart := normalizeChart(st.basePath, release.Chart)
|
||||
chart := normalizeChart(st.basePath, release.ChartPathOrName())
|
||||
var relErr *ReleaseError
|
||||
context := st.createHelmContext(release, workerIndex)
|
||||
|
||||
|
|
@ -1396,7 +1411,7 @@ func (st *HelmState) TemplateReleases(helm helmexec.Interface, outputDir string,
|
|||
}
|
||||
|
||||
if len(errs) == 0 {
|
||||
if err := helm.TemplateRelease(release.Name, release.Chart, flags...); err != nil {
|
||||
if err := helm.TemplateRelease(release.Name, release.ChartPathOrName(), flags...); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
|
|
@ -1572,7 +1587,7 @@ func (st *HelmState) LintReleases(helm helmexec.Interface, additionalValues []st
|
|||
}
|
||||
|
||||
if len(errs) == 0 {
|
||||
if err := helm.Lint(release.Name, release.Chart, flags...); err != nil {
|
||||
if err := helm.Lint(release.Name, release.ChartPathOrName(), flags...); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
}
|
||||
|
|
@ -1870,7 +1885,7 @@ func (st *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []st
|
|||
buf := &bytes.Buffer{}
|
||||
if prep.upgradeDueToSkippedDiff {
|
||||
results <- diffResult{release, &ReleaseError{ReleaseSpec: release, err: nil, Code: HelmDiffExitCodeChanged}, buf}
|
||||
} else if err := helm.DiffRelease(st.createHelmContextWithWriter(release, buf), release.Name, normalizeChart(st.basePath, release.Chart), suppressDiff, flags...); err != nil {
|
||||
} else if err := helm.DiffRelease(st.createHelmContextWithWriter(release, buf), release.Name, normalizeChart(st.basePath, release.ChartPathOrName()), suppressDiff, flags...); err != nil {
|
||||
switch e := err.(type) {
|
||||
case helmexec.ExitError:
|
||||
// Propagate any non-zero exit status from the external command like `helm` that is failed under the hood
|
||||
|
|
|
|||
|
|
@ -38,39 +38,39 @@ func TestGenerateID(t *testing.T) {
|
|||
run(testcase{
|
||||
subject: "baseline",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
want: "foo-values-6d97d4c7ff",
|
||||
want: "foo-values-789768d94b",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different bytes content",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
data: []byte(`{"k":"v"}`),
|
||||
want: "foo-values-74fcbfbd68",
|
||||
want: "foo-values-7d669b768f",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different map content",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw"},
|
||||
data: map[string]interface{}{"k": "v"},
|
||||
want: "foo-values-7b954b6b6b",
|
||||
want: "foo-values-dd597bd55",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different chart",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "stable/envoy"},
|
||||
want: "foo-values-5c54676568",
|
||||
want: "foo-values-5d6c9f7f59",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "different name",
|
||||
release: ReleaseSpec{Name: "bar", Chart: "incubator/raw"},
|
||||
want: "bar-values-5fff459546",
|
||||
want: "bar-values-b6cdc56c",
|
||||
})
|
||||
|
||||
run(testcase{
|
||||
subject: "specific ns",
|
||||
release: ReleaseSpec{Name: "foo", Chart: "incubator/raw", Namespace: "myns"},
|
||||
want: "myns-foo-values-cfd9959dd",
|
||||
want: "myns-foo-values-7cddc65b5",
|
||||
})
|
||||
|
||||
for id, n := range ids {
|
||||
|
|
|
|||
Loading…
Reference in New Issue