Add preapply hook

Signed-off-by: Anton Bretting <sajfer@gmail.com>
This commit is contained in:
Anton Bretting 2022-04-30 14:36:38 +02:00 committed by Yusuke Kuoka
parent 9019cec4ac
commit 4e5987d833
3 changed files with 37 additions and 1 deletions

2
go.sum
View File

@ -1373,6 +1373,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/exp v0.0.0-20220428152302-39d4317da171 h1:TfdoLivD44QwvssI9Sv1xwa5DcL5XQr4au4sZ2F2NV4=
golang.org/x/exp v0.0.0-20220428152302-39d4317da171/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=

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 {

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,