Add preapply hook

Signed-off-by: Anton Bretting <sajfer@gmail.com>
This commit is contained in:
Anton Bretting
2022-09-19 08:55:44 +09:00
committed by Yusuke Kuoka
parent 9019cec4ac
commit 4e5987d833
3 changed files with 37 additions and 1 deletions
+31 -1
View File
@@ -1323,7 +1323,31 @@ func (a *App) apply(r *Run, c ApplyConfigProvider) (bool, bool, []error) {
}
}
if releasesToBeDeleted == nil && releasesToBeUpdated == nil {
var releasesWithPreApply []state.ReleaseSpec
for _, r := range toApplyWithNeeds {
release := r
if len(release.Hooks) > 0 {
for _, hook := range release.Hooks {
if slices.Contains(hook.Events, "preapply") {
releasesWithPreApply = append(releasesWithPreApply, release)
}
}
}
}
if len(releasesWithPreApply) > 0 {
msg := "Releases with preapply hooks: \n"
if infoMsg != nil {
msg = fmt.Sprintf("%s%s", *infoMsg, msg)
}
infoMsg = &msg
}
for _, release := range releasesWithPreApply {
tmp := fmt.Sprintf("%s %s (%s)", *infoMsg, release.Name, release.Chart)
infoMsg = &tmp
}
if releasesToBeDeleted == nil && releasesToBeUpdated == nil && releasesWithPreApply == nil {
if infoMsg != nil {
logger := c.Logger()
logger.Infof("")
@@ -1352,6 +1376,12 @@ Do you really want to apply?
if !interactive || interactive && r.askForConfirmation(confMsg) {
r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state)...)
for _, release := range st.Releases {
if _, err := st.TriggerPreapplyEvent(&release, "apply"); err != nil {
syncErrs = append(syncErrs, err)
}
}
// We deleted releases by traversing the DAG in reverse order
if len(releasesToBeDeleted) > 0 {
_, deletionErrs := withDAG(st, helm, a.Logger, state.PlanOptions{Reverse: true, SelectedReleases: toDelete, SkipNeeds: true}, a.WrapWithoutSelector(func(subst *state.HelmState, helm helmexec.Interface) []error {
+4
View File
@@ -2251,6 +2251,10 @@ func (st *HelmState) triggerPostsyncEvent(r *ReleaseSpec, evtErr error, helmfile
return st.triggerReleaseEvent("postsync", evtErr, r, helmfileCommand)
}
func (st *HelmState) TriggerPreapplyEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) {
return st.triggerReleaseEvent("preapply", nil, r, helmfileCommand)
}
func (st *HelmState) triggerReleaseEvent(evt string, evtErr error, r *ReleaseSpec, helmfileCmd string) (bool, error) {
bus := &event.Bus{
Hooks: r.Hooks,