Add pre/postuninstall hooks (#1375)

Exmple:

```
releases:
- name: test2
  chart: stable/mysql
  installed: false
  hooks:
  - events:
    - prepare
    - preuninstall
    - postuninstall
    - cleanup
    showlogs: true
    command: "echo"
    args:
    - "event name = {{` {{ .Event.Name `}} }}"
```

Output:

```
helmfile apply
Listing releases matching ^test2$
test2   default         1               2020-07-23 00:51:44.975478 +0900 JST    deployed        mysql-1.6.6     5.7.30

helmfile.yaml: basePath=.

hook[preuninstall] logs | event name =  preuninstall
hook[preuninstall] logs |
Deleting test2
release "test2" uninstalled

helmfile.yaml: basePath=.

hook[postuninstall] logs | event name =  postuninstall
hook[postuninstall] logs |
helmfile.yaml: basePath=.

hook[cleanup] logs | event name =  cleanup
hook[cleanup] logs |

DELETED RELEASES:
NAME
test2
```

Resolves #802
This commit is contained in:
KUOKA Yusuke
2020-07-23 01:09:36 +09:00
committed by GitHub
parent b5830a3011
commit ee8ea507a6
2 changed files with 40 additions and 10 deletions
+30 -8
View File
@@ -6,7 +6,6 @@ import (
"encoding/hex"
"errors"
"fmt"
"github.com/variantdev/chartify"
"io"
"io/ioutil"
"os"
@@ -19,6 +18,8 @@ import (
"sync"
"text/template"
"github.com/variantdev/chartify"
"github.com/roboll/helmfile/pkg/environment"
"github.com/roboll/helmfile/pkg/event"
"github.com/roboll/helmfile/pkg/helmexec"
@@ -547,8 +548,13 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h
}
deletionFlags := st.appendConnectionFlags(args, release)
m.Lock()
if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil {
if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil {
affectedReleases.Failed = append(affectedReleases.Failed, release)
relErr = newReleaseFailedError(release, err)
} else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil {
affectedReleases.Failed = append(affectedReleases.Failed, release)
relErr = newReleaseFailedError(release, err)
} else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil {
affectedReleases.Failed = append(affectedReleases.Failed, release)
relErr = newReleaseFailedError(release, err)
} else {
@@ -652,8 +658,13 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme
}
deletionFlags := st.appendConnectionFlags(args, release)
m.Lock()
if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil {
if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil {
affectedReleases.Failed = append(affectedReleases.Failed, release)
relErr = newReleaseFailedError(release, err)
} else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil {
affectedReleases.Failed = append(affectedReleases.Failed, release)
relErr = newReleaseFailedError(release, err)
} else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil {
affectedReleases.Failed = append(affectedReleases.Failed, release)
relErr = newReleaseFailedError(release, err)
} else {
@@ -1309,13 +1320,24 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel
}
context := st.createHelmContext(&release, workerIndex)
if _, err := st.triggerReleaseEvent("preuninstall", nil, &release, "delete"); err != nil {
affectedReleases.Failed = append(affectedReleases.Failed, &release)
return err
}
if err := helm.DeleteRelease(context, release.Name, flags...); err != nil {
affectedReleases.Failed = append(affectedReleases.Failed, &release)
return err
} else {
affectedReleases.Deleted = append(affectedReleases.Deleted, &release)
return nil
}
if _, err := st.triggerReleaseEvent("postuninstall", nil, &release, "delete"); err != nil {
affectedReleases.Failed = append(affectedReleases.Failed, &release)
return err
}
affectedReleases.Deleted = append(affectedReleases.Deleted, &release)
return nil
})
}