Add presync event hook (#580)

* Add presync hook

* Add note to README about new hook
This commit is contained in:
Raj Perera 2019-05-08 21:13:31 -04:00 committed by KUOKA Yusuke
parent 0fc8ac395b
commit 55c275b3aa
2 changed files with 14 additions and 4 deletions

View File

@ -700,11 +700,14 @@ Currently supported `events` are:
- `prepare`
- `cleanup`
- `presync`
Hooks associated to `prepare` events are triggered after each release in your helmfile is loaded from YAML, before execution.
Hooks associated to `cleanup` events are triggered after each release is processed.
Hooks associated to `presync` events are triggered before each release is applied to the remote cluster. This is the ideal event to execute any commands that may mutate the cluster state as it will not be run for read-only operations like `lint`, `diff` or `template`.
The following is an example hook that just prints the contextual information provided to hook:
```

View File

@ -349,7 +349,10 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme
chart := normalizeChart(st.basePath, release.Chart)
var relErr *ReleaseError
context := st.createHelmContext(release, workerIndex)
if !release.Desired() {
if _, err := st.triggerPresyncEvent(release, "sync"); err != nil {
relErr = &ReleaseError{release, err}
} else if !release.Desired() {
installed, err := st.isReleaseInstalled(context, helm, *release)
if err != nil {
relErr = &ReleaseError{release, err}
@ -940,6 +943,10 @@ func (st *HelmState) triggerCleanupEvent(r *ReleaseSpec, helmfileCommand string)
return st.triggerReleaseEvent("cleanup", r, helmfileCommand)
}
func (st *HelmState) triggerPresyncEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) {
return st.triggerReleaseEvent("presync", r, helmfileCommand)
}
func (st *HelmState) triggerReleaseEvent(evt string, r *ReleaseSpec, helmfileCmd string) (bool, error) {
bus := &event.Bus{
Hooks: r.Hooks,