Skip to content

Commit

Permalink
feat: Experimental Helm v3 mode
Browse files Browse the repository at this point in the history
Set `HELMFILE_HELM3=1` and run `helmfile` like `HELMFILE_HELM3=1 helmfile ...`.

When `HELMFILE_HELM3` is set, `test` and `template` behaves works differently so that it works with Helm 3.

Note that `helmfile diff` doesn't work as `helm-diff` called under the hood doesn't support Helm v3 yet.

Ref #668
  • Loading branch information
mumoshu committed Sep 7, 2019
1 parent 6dfc9be commit ba56556
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 6 deletions.
21 changes: 19 additions & 2 deletions pkg/helmexec/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,14 @@ func (helm *execer) DecryptSecret(context HelmContext, name string, flags ...str

func (helm *execer) TemplateRelease(name string, chart string, flags ...string) error {
helm.logger.Infof("Templating release=%v, chart=%v", name, chart)
out, err := helm.exec(append([]string{"template", chart, "--name", name}, flags...), map[string]string{})
var args []string
if helm.isHelm3() {
args = []string{"template", name, chart}
} else {
args = []string{"template", chart, "--name", name}
}

out, err := helm.exec(append(args, flags...), map[string]string{})
helm.write(out)
return err
}
Expand Down Expand Up @@ -261,7 +268,13 @@ func (helm *execer) TestRelease(context HelmContext, name string, flags ...strin
helm.logger.Infof("Testing %v", name)
preArgs := context.GetTillerlessArgs(helm.helmBinary)
env := context.getTillerlessEnv()
out, err := helm.exec(append(append(preArgs, "test", name), flags...), env)
var args []string
if helm.isHelm3() {
args = []string{"test", "run", name}
} else {
args = []string{"test", name}
}
out, err := helm.exec(append(append(preArgs, args...), flags...), env)
helm.write(out)
return err
}
Expand Down Expand Up @@ -292,3 +305,7 @@ func (helm *execer) write(out []byte) {
fmt.Printf("%s\n", out)
}
}

func (helm *execer) isHelm3() bool {
return os.Getenv("HELMFILE_HELM3") != ""
}
14 changes: 10 additions & 4 deletions pkg/state/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -930,13 +930,21 @@ func (st *HelmState) TestReleases(helm helmexec.Interface, cleanup bool, timeout
if cleanup {
flags = append(flags, "--cleanup")
}
flags = append(flags, "--timeout", strconv.Itoa(timeout))
duration := strconv.Itoa(timeout)
if st.isHelm3() {
duration += "s"
}
flags = append(flags, "--timeout", duration)
flags = st.appendConnectionFlags(flags, &release)

return helm.TestRelease(st.createHelmContext(&release, workerIndex), release.Name, flags...)
})
}

func (st *HelmState) isHelm3() bool {
return os.Getenv("HELMFILE_HELM3") != ""
}

// Clean will remove any generated secrets
func (st *HelmState) Clean() []error {
errs := []error{}
Expand Down Expand Up @@ -1250,9 +1258,7 @@ func (st *HelmState) flagsForUpgrade(helm helmexec.Interface, release *ReleaseSp
}

func (st *HelmState) flagsForTemplate(helm helmexec.Interface, release *ReleaseSpec, workerIndex int) ([]string, error) {
flags := []string{
"--name", release.Name,
}
flags := []string{}

var err error
flags, err = st.appendHelmXFlags(flags, release)
Expand Down

0 comments on commit ba56556

Please sign in to comment.