Merge pull request #142 from mumoshu/make-purge-optional

Make purge optional when running "helmfile delete"
This commit is contained in:
KUOKA Yusuke 2018-05-16 08:59:35 +09:00 committed by GitHub
commit a7e35b7316
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 36 additions and 9 deletions

View File

@ -186,6 +186,12 @@ To supply the diff functionality Helmfile needs the [helm-diff](https://github.c
you should be able to simply execute `helm plugin install https://github.com/databus23/helm-diff`. For more details
please look at their [documentation](https://github.com/databus23/helm-diff#helm-diff-plugin).
### delete
The `helmfile delete` sub-command deletes all the releases defined in the manfiests
Note that `delete` doesn't purge releases. So `helmfile delete && helmfile sync` results in sync failed due to that releases names are not deleted but preserved for future references. If you really want to remove releases for reuse, add `--purge` flag to run it like `helmfile delete --purge`.
### secrets
The `secrets` parameter in a `helmfile.yaml` causes the [helm-secrets](https://github.com/futuresimple/helm-secrets) plugin to be executed to decrypt the file.

View File

@ -79,8 +79,8 @@ func (helm *execer) DiffRelease(name, chart string, flags ...string) error {
return err
}
func (helm *execer) DeleteRelease(name string) error {
out, err := helm.exec("delete", "--purge", name)
func (helm *execer) DeleteRelease(name string, flags ...string) error {
out, err := helm.exec(append([]string{"delete", name}, flags...)...)
helm.write(out)
return err
}

View File

@ -149,7 +149,16 @@ func Test_DeleteRelease(t *testing.T) {
var buffer bytes.Buffer
helm := MockExecer(&buffer, "dev")
helm.DeleteRelease("release")
expected := "exec: helm delete --purge release --kube-context dev\n"
expected := "exec: helm delete release --kube-context dev\n"
if buffer.String() != expected {
t.Errorf("helmexec.DeleteRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
}
}
func Test_DeleteRelease_Flags(t *testing.T) {
var buffer bytes.Buffer
helm := MockExecer(&buffer, "dev")
helm.DeleteRelease("release", "--purge")
expected := "exec: helm delete release --purge --kube-context dev\n"
if buffer.String() != expected {
t.Errorf("helmexec.DeleteRelease()\nactual = %v\nexpect = %v", buffer.String(), expected)
}

View File

@ -10,7 +10,7 @@ type Interface interface {
SyncRelease(name, chart string, flags ...string) error
DiffRelease(name, chart string, flags ...string) error
ReleaseStatus(name string) error
DeleteRelease(name string) error
DeleteRelease(name string, flags ...string) error
DecryptSecret(name string) (string, error)
}

12
main.go
View File

@ -252,14 +252,22 @@ func main() {
},
{
Name: "delete",
Usage: "delete charts from state file (helm delete)",
Usage: "delete releases from state file (helm delete)",
Flags: []cli.Flag{
cli.BoolFlag{
Name: "purge",
Usage: "purge releases i.e. free release names and histories",
},
},
Action: func(c *cli.Context) error {
state, helm, err := before(c)
if err != nil {
return err
}
errs := state.DeleteReleases(helm)
purge := c.Bool("purge")
errs := state.DeleteReleases(helm, purge)
return clean(state, errs)
},
},

View File

@ -356,14 +356,18 @@ func (state *HelmState) ReleaseStatuses(helm helmexec.Interface, workerLimit int
}
// DeleteReleases wrapper for executing helm delete on the releases
func (state *HelmState) DeleteReleases(helm helmexec.Interface) []error {
func (state *HelmState) DeleteReleases(helm helmexec.Interface, purge bool) []error {
var wg sync.WaitGroup
errs := []error{}
for _, release := range state.Releases {
wg.Add(1)
go func(wg *sync.WaitGroup, release ReleaseSpec) {
if err := helm.DeleteRelease(release.Name); err != nil {
flags := []string{}
if purge {
flags = append(flags, "--purge")
}
if err := helm.DeleteRelease(release.Name, flags...); err != nil {
errs = append(errs, err)
}
wg.Done()

View File

@ -546,7 +546,7 @@ func (helm *mockHelmExec) ReleaseStatus(release string) error {
helm.releases = append(helm.releases, mockRelease{name: release, flags: []string{}})
return nil
}
func (helm *mockHelmExec) DeleteRelease(name string) error {
func (helm *mockHelmExec) DeleteRelease(name string, flags ...string) error {
return nil
}
func (helm *mockHelmExec) DecryptSecret(name string) (string, error) {