parent
							
								
									61b4199c80
								
							
						
					
					
						commit
						2ebdf9a37c
					
				|  | @ -142,7 +142,9 @@ func (a *App) Repos(c ReposConfigProvider) error { | ||||||
| // TODO: Remove this function once Helmfile v0.x
 | // TODO: Remove this function once Helmfile v0.x
 | ||||||
| func (a *App) DeprecatedSyncCharts(c DeprecatedChartsConfigProvider) error { | func (a *App) DeprecatedSyncCharts(c DeprecatedChartsConfigProvider) error { | ||||||
| 	return a.ForEachState(func(run *Run) (_ bool, errs []error) { | 	return a.ForEachState(func(run *Run) (_ bool, errs []error) { | ||||||
| 		err := run.withPreparedCharts("charts", state.ChartPrepareOptions{ | 		err := run.withPreparedCharts(state.RunInfo{ | ||||||
|  | 			SubCommand: "charts", | ||||||
|  | 		}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:   true, | 			SkipRepos:   true, | ||||||
| 			SkipDeps:    true, | 			SkipDeps:    true, | ||||||
| 			Concurrency: 2, | 			Concurrency: 2, | ||||||
|  | @ -174,7 +176,7 @@ func (a *App) Diff(c DiffConfigProvider) error { | ||||||
| 
 | 
 | ||||||
| 		includeCRDs := !c.SkipCRDs() | 		includeCRDs := !c.SkipCRDs() | ||||||
| 
 | 
 | ||||||
| 		prepErr := run.withPreparedCharts("diff", state.ChartPrepareOptions{ | 		prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "diff"}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:              c.SkipDeps(), | 			SkipRepos:              c.SkipDeps(), | ||||||
| 			SkipDeps:               c.SkipDeps(), | 			SkipDeps:               c.SkipDeps(), | ||||||
| 			IncludeCRDs:            &includeCRDs, | 			IncludeCRDs:            &includeCRDs, | ||||||
|  | @ -239,7 +241,7 @@ func (a *App) Template(c TemplateConfigProvider) error { | ||||||
| 		// Live output should never be enabled for the "template" subcommand to avoid breaking `helmfile template | kubectl apply -f -`
 | 		// Live output should never be enabled for the "template" subcommand to avoid breaking `helmfile template | kubectl apply -f -`
 | ||||||
| 		run.helm.SetEnableLiveOutput(false) | 		run.helm.SetEnableLiveOutput(false) | ||||||
| 
 | 
 | ||||||
| 		prepErr := run.withPreparedCharts("template", state.ChartPrepareOptions{ | 		prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "template"}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:              c.SkipDeps(), | 			SkipRepos:              c.SkipDeps(), | ||||||
| 			SkipDeps:               c.SkipDeps(), | 			SkipDeps:               c.SkipDeps(), | ||||||
| 			IncludeCRDs:            &includeCRDs, | 			IncludeCRDs:            &includeCRDs, | ||||||
|  | @ -262,7 +264,7 @@ func (a *App) Template(c TemplateConfigProvider) error { | ||||||
| 
 | 
 | ||||||
| func (a *App) WriteValues(c WriteValuesConfigProvider) error { | func (a *App) WriteValues(c WriteValuesConfigProvider) error { | ||||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||||
| 		prepErr := run.withPreparedCharts("write-values", state.ChartPrepareOptions{ | 		prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "write-values"}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:   c.SkipDeps(), | 			SkipRepos:   c.SkipDeps(), | ||||||
| 			SkipDeps:    c.SkipDeps(), | 			SkipDeps:    c.SkipDeps(), | ||||||
| 			SkipCleanup: c.SkipCleanup(), | 			SkipCleanup: c.SkipCleanup(), | ||||||
|  | @ -312,7 +314,7 @@ func (a *App) Lint(c LintConfigProvider) error { | ||||||
| 		var lintErrs []error | 		var lintErrs []error | ||||||
| 
 | 
 | ||||||
| 		// `helm lint` on helm v2 and v3 does not support remote charts, that we need to set `forceDownload=true` here
 | 		// `helm lint` on helm v2 and v3 does not support remote charts, that we need to set `forceDownload=true` here
 | ||||||
| 		prepErr := run.withPreparedCharts("lint", state.ChartPrepareOptions{ | 		prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "lint"}, state.ChartPrepareOptions{ | ||||||
| 			ForceDownload:          true, | 			ForceDownload:          true, | ||||||
| 			SkipRepos:              c.SkipDeps(), | 			SkipRepos:              c.SkipDeps(), | ||||||
| 			SkipDeps:               c.SkipDeps(), | 			SkipDeps:               c.SkipDeps(), | ||||||
|  | @ -347,7 +349,7 @@ func (a *App) Lint(c LintConfigProvider) error { | ||||||
| 
 | 
 | ||||||
| func (a *App) Fetch(c FetchConfigProvider) error { | func (a *App) Fetch(c FetchConfigProvider) error { | ||||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||||
| 		prepErr := run.withPreparedCharts("pull", state.ChartPrepareOptions{ | 		prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "pull"}, state.ChartPrepareOptions{ | ||||||
| 			ForceDownload:     true, | 			ForceDownload:     true, | ||||||
| 			SkipRepos:         c.SkipDeps(), | 			SkipRepos:         c.SkipDeps(), | ||||||
| 			SkipDeps:          c.SkipDeps(), | 			SkipDeps:          c.SkipDeps(), | ||||||
|  | @ -369,7 +371,7 @@ func (a *App) Sync(c SyncConfigProvider) error { | ||||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||||
| 		includeCRDs := !c.SkipCRDs() | 		includeCRDs := !c.SkipCRDs() | ||||||
| 
 | 
 | ||||||
| 		prepErr := run.withPreparedCharts("sync", state.ChartPrepareOptions{ | 		prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "sync"}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:              c.SkipDeps(), | 			SkipRepos:              c.SkipDeps(), | ||||||
| 			SkipDeps:               c.SkipDeps(), | 			SkipDeps:               c.SkipDeps(), | ||||||
| 			Wait:                   c.Wait(), | 			Wait:                   c.Wait(), | ||||||
|  | @ -402,7 +404,7 @@ func (a *App) Apply(c ApplyConfigProvider) error { | ||||||
| 	err := a.ForEachState(func(run *Run) (ok bool, errs []error) { | 	err := a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||||
| 		includeCRDs := !c.SkipCRDs() | 		includeCRDs := !c.SkipCRDs() | ||||||
| 
 | 
 | ||||||
| 		prepErr := run.withPreparedCharts("apply", state.ChartPrepareOptions{ | 		prepErr := run.withPreparedCharts(state.RunInfo{SubCommand: "apply"}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:              c.SkipDeps(), | 			SkipRepos:              c.SkipDeps(), | ||||||
| 			SkipDeps:               c.SkipDeps(), | 			SkipDeps:               c.SkipDeps(), | ||||||
| 			Wait:                   c.Wait(), | 			Wait:                   c.Wait(), | ||||||
|  | @ -444,7 +446,7 @@ func (a *App) Apply(c ApplyConfigProvider) error { | ||||||
| 
 | 
 | ||||||
| func (a *App) Status(c StatusesConfigProvider) error { | func (a *App) Status(c StatusesConfigProvider) error { | ||||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||||
| 		err := run.withPreparedCharts("status", state.ChartPrepareOptions{ | 		err := run.withPreparedCharts(state.RunInfo{SubCommand: "status"}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:   true, | 			SkipRepos:   true, | ||||||
| 			SkipDeps:    true, | 			SkipDeps:    true, | ||||||
| 			Concurrency: c.Concurrency(), | 			Concurrency: c.Concurrency(), | ||||||
|  | @ -464,7 +466,7 @@ func (a *App) Status(c StatusesConfigProvider) error { | ||||||
| func (a *App) Delete(c DeleteConfigProvider) error { | func (a *App) Delete(c DeleteConfigProvider) error { | ||||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||||
| 		if !c.SkipCharts() { | 		if !c.SkipCharts() { | ||||||
| 			err := run.withPreparedCharts("delete", state.ChartPrepareOptions{ | 			err := run.withPreparedCharts(state.RunInfo{SubCommand: "delete"}, state.ChartPrepareOptions{ | ||||||
| 				SkipRepos:     c.SkipDeps(), | 				SkipRepos:     c.SkipDeps(), | ||||||
| 				SkipDeps:      c.SkipDeps(), | 				SkipDeps:      c.SkipDeps(), | ||||||
| 				Concurrency:   c.Concurrency(), | 				Concurrency:   c.Concurrency(), | ||||||
|  | @ -487,7 +489,7 @@ func (a *App) Delete(c DeleteConfigProvider) error { | ||||||
| func (a *App) Destroy(c DestroyConfigProvider) error { | func (a *App) Destroy(c DestroyConfigProvider) error { | ||||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||||
| 		if !c.SkipCharts() { | 		if !c.SkipCharts() { | ||||||
| 			err := run.withPreparedCharts("destroy", state.ChartPrepareOptions{ | 			err := run.withPreparedCharts(state.RunInfo{SubCommand: "destroy"}, state.ChartPrepareOptions{ | ||||||
| 				SkipRepos:     c.SkipDeps(), | 				SkipRepos:     c.SkipDeps(), | ||||||
| 				SkipDeps:      c.SkipDeps(), | 				SkipDeps:      c.SkipDeps(), | ||||||
| 				Concurrency:   c.Concurrency(), | 				Concurrency:   c.Concurrency(), | ||||||
|  | @ -514,7 +516,7 @@ func (a *App) Test(c TestConfigProvider) error { | ||||||
| 				"or set helm.sh/hook-delete-policy\n") | 				"or set helm.sh/hook-delete-policy\n") | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		err := run.withPreparedCharts("test", state.ChartPrepareOptions{ | 		err := run.withPreparedCharts(state.RunInfo{SubCommand: "test"}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:   c.SkipDeps(), | 			SkipRepos:   c.SkipDeps(), | ||||||
| 			SkipDeps:    c.SkipDeps(), | 			SkipDeps:    c.SkipDeps(), | ||||||
| 			Concurrency: c.Concurrency(), | 			Concurrency: c.Concurrency(), | ||||||
|  | @ -533,7 +535,7 @@ func (a *App) Test(c TestConfigProvider) error { | ||||||
| func (a *App) PrintDAGState(c DAGConfigProvider) error { | func (a *App) PrintDAGState(c DAGConfigProvider) error { | ||||||
| 	var err error | 	var err error | ||||||
| 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | 	return a.ForEachState(func(run *Run) (ok bool, errs []error) { | ||||||
| 		err = run.withPreparedCharts("show-dag", state.ChartPrepareOptions{ | 		err = run.withPreparedCharts(state.RunInfo{SubCommand: "show-dag"}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:   true, | 			SkipRepos:   true, | ||||||
| 			SkipDeps:    true, | 			SkipDeps:    true, | ||||||
| 			Concurrency: 2, | 			Concurrency: 2, | ||||||
|  | @ -549,7 +551,7 @@ func (a *App) PrintDAGState(c DAGConfigProvider) error { | ||||||
| 
 | 
 | ||||||
| func (a *App) PrintState(c StateConfigProvider) error { | func (a *App) PrintState(c StateConfigProvider) error { | ||||||
| 	return a.ForEachState(func(run *Run) (_ bool, errs []error) { | 	return a.ForEachState(func(run *Run) (_ bool, errs []error) { | ||||||
| 		err := run.withPreparedCharts("build", state.ChartPrepareOptions{ | 		err := run.withPreparedCharts(state.RunInfo{SubCommand: "build"}, state.ChartPrepareOptions{ | ||||||
| 			SkipRepos:   true, | 			SkipRepos:   true, | ||||||
| 			SkipDeps:    true, | 			SkipDeps:    true, | ||||||
| 			Concurrency: 2, | 			Concurrency: 2, | ||||||
|  | @ -621,7 +623,7 @@ func (a *App) ListReleases(c ListConfigProvider) error { | ||||||
| 		var err error | 		var err error | ||||||
| 
 | 
 | ||||||
| 		if !c.SkipCharts() { | 		if !c.SkipCharts() { | ||||||
| 			err = run.withPreparedCharts("list", state.ChartPrepareOptions{ | 			err = run.withPreparedCharts(state.RunInfo{SubCommand: "list"}, state.ChartPrepareOptions{ | ||||||
| 				SkipRepos:   true, | 				SkipRepos:   true, | ||||||
| 				SkipDeps:    true, | 				SkipDeps:    true, | ||||||
| 				Concurrency: 2, | 				Concurrency: 2, | ||||||
|  | @ -1480,7 +1482,7 @@ Do you really want to apply? | ||||||
| 		if _, preapplyErrors := withDAG(st, helm, a.Logger, state.PlanOptions{Purpose: "invoking preapply hooks for", Reverse: true, SelectedReleases: toApplyWithNeeds, SkipNeeds: true}, a.WrapWithoutSelector(func(subst *state.HelmState, helm helmexec.Interface) []error { | 		if _, preapplyErrors := withDAG(st, helm, a.Logger, state.PlanOptions{Purpose: "invoking preapply hooks for", Reverse: true, SelectedReleases: toApplyWithNeeds, SkipNeeds: true}, a.WrapWithoutSelector(func(subst *state.HelmState, helm helmexec.Interface) []error { | ||||||
| 			for _, r := range subst.Releases { | 			for _, r := range subst.Releases { | ||||||
| 				release := r | 				release := r | ||||||
| 				if _, err := st.TriggerPreapplyEvent(&release, "apply"); err != nil { | 				if _, err := st.TriggerPreapplyEvent(&release, state.RunInfo{SubCommand: "apply"}); err != nil { | ||||||
| 					return []error{err} | 					return []error{err} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | @ -1552,7 +1554,7 @@ Do you really want to apply? | ||||||
| 
 | 
 | ||||||
| 	for id := range releasesWithNoChange { | 	for id := range releasesWithNoChange { | ||||||
| 		r := releasesWithNoChange[id] | 		r := releasesWithNoChange[id] | ||||||
| 		if _, err := st.TriggerCleanupEvent(&r, "apply"); err != nil { | 		if _, err := st.TriggerCleanupEvent(&r, state.RunInfo{SubCommand: "apply"}); err != nil { | ||||||
| 			a.Logger.Warnf("warn: %v\n", err) | 			a.Logger.Warnf("warn: %v\n", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -1601,7 +1603,7 @@ func (a *App) delete(r *Run, purge bool, c DestroyConfigProvider) (bool, []error | ||||||
| 
 | 
 | ||||||
| 	for id := range releasesWithNoChange { | 	for id := range releasesWithNoChange { | ||||||
| 		r := releasesWithNoChange[id] | 		r := releasesWithNoChange[id] | ||||||
| 		if _, err := st.TriggerCleanupEvent(&r, "delete"); err != nil { | 		if _, err := st.TriggerCleanupEvent(&r, state.RunInfo{SubCommand: "delete"}); err != nil { | ||||||
| 			a.Logger.Warnf("warn: %v\n", err) | 			a.Logger.Warnf("warn: %v\n", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -1848,7 +1850,7 @@ func (a *App) sync(r *Run, c SyncConfigProvider) (bool, []error) { | ||||||
| 
 | 
 | ||||||
| 	for id := range releasesWithNoChange { | 	for id := range releasesWithNoChange { | ||||||
| 		r := releasesWithNoChange[id] | 		r := releasesWithNoChange[id] | ||||||
| 		if _, err := st.TriggerCleanupEvent(&r, "sync"); err != nil { | 		if _, err := st.TriggerCleanupEvent(&r, state.RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 			a.Logger.Warnf("warn: %v\n", err) | 			a.Logger.Warnf("warn: %v\n", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -39,7 +39,7 @@ func (r *Run) askForConfirmation(msg string) bool { | ||||||
| 	return AskForConfirmation(msg) | 	return AskForConfirmation(msg) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepareOptions, f func()) error { | func (r *Run) withPreparedCharts(helmfileRunInfo state.RunInfo, opts state.ChartPrepareOptions, f func()) error { | ||||||
| 	if r.ReleaseToChart != nil { | 	if r.ReleaseToChart != nil { | ||||||
| 		panic("Run.PrepareCharts can be called only once") | 		panic("Run.PrepareCharts can be called only once") | ||||||
| 	} | 	} | ||||||
|  | @ -67,13 +67,13 @@ func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepare | ||||||
| 		fmt.Printf("Charts will be downloaded to: %s\n", dir) | 		fmt.Printf("Charts will be downloaded to: %s\n", dir) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if _, err := r.state.TriggerGlobalPrepareEvent(helmfileCommand); err != nil { | 	if _, err := r.state.TriggerGlobalPrepareEvent(helmfileRunInfo); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	concurrency := opts.Concurrency | 	concurrency := opts.Concurrency | ||||||
| 
 | 
 | ||||||
| 	releaseToChart, errs := r.state.PrepareCharts(r.helm, dir, concurrency, helmfileCommand, opts) | 	releaseToChart, errs := r.state.PrepareCharts(r.helm, dir, concurrency, helmfileRunInfo, opts) | ||||||
| 
 | 
 | ||||||
| 	if len(errs) > 0 { | 	if len(errs) > 0 { | ||||||
| 		return fmt.Errorf("%v", errs) | 		return fmt.Errorf("%v", errs) | ||||||
|  | @ -98,7 +98,7 @@ func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepare | ||||||
| 
 | 
 | ||||||
| 	f() | 	f() | ||||||
| 
 | 
 | ||||||
| 	_, err := r.state.TriggerGlobalCleanupEvent(helmfileCommand) | 	_, err := r.state.TriggerGlobalCleanupEvent(helmfileRunInfo) | ||||||
| 
 | 
 | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -838,7 +838,7 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h | ||||||
| 				var relErr *ReleaseError | 				var relErr *ReleaseError | ||||||
| 				context := st.createHelmContext(release, workerIndex) | 				context := st.createHelmContext(release, workerIndex) | ||||||
| 
 | 
 | ||||||
| 				if _, err := st.triggerPresyncEvent(release, "sync"); err != nil { | 				if _, err := st.triggerPresyncEvent(release, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 					relErr = newReleaseFailedError(release, err) | 					relErr = newReleaseFailedError(release, err) | ||||||
| 				} else { | 				} else { | ||||||
| 					var args []string | 					var args []string | ||||||
|  | @ -851,13 +851,13 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h | ||||||
| 
 | 
 | ||||||
| 					m.Lock() | 					m.Lock() | ||||||
| 					start := time.Now() | 					start := time.Now() | ||||||
| 					if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil { | 					if _, err := st.triggerReleaseEvent("preuninstall", nil, release, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 						affectedReleases.Failed = append(affectedReleases.Failed, release) | 						affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||||
| 						relErr = newReleaseFailedError(release, err) | 						relErr = newReleaseFailedError(release, err) | ||||||
| 					} else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { | 					} else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { | ||||||
| 						affectedReleases.Failed = append(affectedReleases.Failed, release) | 						affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||||
| 						relErr = newReleaseFailedError(release, err) | 						relErr = newReleaseFailedError(release, err) | ||||||
| 					} else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil { | 					} else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 						affectedReleases.Failed = append(affectedReleases.Failed, release) | 						affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||||
| 						relErr = newReleaseFailedError(release, err) | 						relErr = newReleaseFailedError(release, err) | ||||||
| 					} else { | 					} else { | ||||||
|  | @ -867,11 +867,11 @@ func (st *HelmState) DeleteReleasesForSync(affectedReleases *AffectedReleases, h | ||||||
| 					m.Unlock() | 					m.Unlock() | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if _, err := st.triggerPostsyncEvent(release, relErr, "sync"); err != nil { | 				if _, err := st.triggerPostsyncEvent(release, relErr, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 					st.logger.Warnf("warn: %v\n", err) | 					st.logger.Warnf("warn: %v\n", err) | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if _, err := st.TriggerCleanupEvent(release, "sync"); err != nil { | 				if _, err := st.TriggerCleanupEvent(release, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 					st.logger.Warnf("warn: %v\n", err) | 					st.logger.Warnf("warn: %v\n", err) | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
|  | @ -948,7 +948,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme | ||||||
| 				context := st.createHelmContext(release, workerIndex) | 				context := st.createHelmContext(release, workerIndex) | ||||||
| 
 | 
 | ||||||
| 				start := time.Now() | 				start := time.Now() | ||||||
| 				if _, err := st.triggerPresyncEvent(release, "sync"); err != nil { | 				if _, err := st.triggerPresyncEvent(release, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 					relErr = newReleaseFailedError(release, err) | 					relErr = newReleaseFailedError(release, err) | ||||||
| 				} else if !release.Desired() { | 				} else if !release.Desired() { | ||||||
| 					installed, err := st.isReleaseInstalled(context, helm, *release) | 					installed, err := st.isReleaseInstalled(context, helm, *release) | ||||||
|  | @ -958,13 +958,13 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme | ||||||
| 						var args []string | 						var args []string | ||||||
| 						deletionFlags := st.appendConnectionFlags(args, release) | 						deletionFlags := st.appendConnectionFlags(args, release) | ||||||
| 						m.Lock() | 						m.Lock() | ||||||
| 						if _, err := st.triggerReleaseEvent("preuninstall", nil, release, "sync"); err != nil { | 						if _, err := st.triggerReleaseEvent("preuninstall", nil, release, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 							affectedReleases.Failed = append(affectedReleases.Failed, release) | 							affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||||
| 							relErr = newReleaseFailedError(release, err) | 							relErr = newReleaseFailedError(release, err) | ||||||
| 						} else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { | 						} else if err := helm.DeleteRelease(context, release.Name, deletionFlags...); err != nil { | ||||||
| 							affectedReleases.Failed = append(affectedReleases.Failed, release) | 							affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||||
| 							relErr = newReleaseFailedError(release, err) | 							relErr = newReleaseFailedError(release, err) | ||||||
| 						} else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, "sync"); err != nil { | 						} else if _, err := st.triggerReleaseEvent("postuninstall", nil, release, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 							affectedReleases.Failed = append(affectedReleases.Failed, release) | 							affectedReleases.Failed = append(affectedReleases.Failed, release) | ||||||
| 							relErr = newReleaseFailedError(release, err) | 							relErr = newReleaseFailedError(release, err) | ||||||
| 						} else { | 						} else { | ||||||
|  | @ -989,7 +989,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if _, err := st.triggerPostsyncEvent(release, relErr, "sync"); err != nil { | 				if _, err := st.triggerPostsyncEvent(release, relErr, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 					if relErr == nil { | 					if relErr == nil { | ||||||
| 						relErr = newReleaseFailedError(release, err) | 						relErr = newReleaseFailedError(release, err) | ||||||
| 					} else { | 					} else { | ||||||
|  | @ -997,7 +997,7 @@ func (st *HelmState) SyncReleases(affectedReleases *AffectedReleases, helm helme | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if _, err := st.TriggerCleanupEvent(release, "sync"); err != nil { | 				if _, err := st.TriggerCleanupEvent(release, RunInfo{SubCommand: "sync"}); err != nil { | ||||||
| 					if relErr == nil { | 					if relErr == nil { | ||||||
| 						relErr = newReleaseFailedError(release, err) | 						relErr = newReleaseFailedError(release, err) | ||||||
| 					} else { | 					} else { | ||||||
|  | @ -1074,6 +1074,12 @@ func releasesNeedCharts(releases []ReleaseSpec) []ReleaseSpec { | ||||||
| 	return result | 	return result | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // RunInfo contains helmfile run info
 | ||||||
|  | type RunInfo struct { | ||||||
|  | 	SubCommand string | ||||||
|  | 	DryRun     string | ||||||
|  | } | ||||||
|  | 
 | ||||||
| type ChartPrepareOptions struct { | type ChartPrepareOptions struct { | ||||||
| 	ForceDownload bool | 	ForceDownload bool | ||||||
| 	SkipRepos     bool | 	SkipRepos     bool | ||||||
|  | @ -1141,7 +1147,7 @@ type PrepareChartKey struct { | ||||||
| // Otheriwse, if a chart is not a helm chart, it will call "chartify" to turn it into a chart.
 | // Otheriwse, if a chart is not a helm chart, it will call "chartify" to turn it into a chart.
 | ||||||
| //
 | //
 | ||||||
| // If exists, it will also patch resources by json patches, strategic-merge patches, and injectors.
 | // If exists, it will also patch resources by json patches, strategic-merge patches, and injectors.
 | ||||||
| func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileCommand string, opts ChartPrepareOptions) (map[PrepareChartKey]string, []error) { | func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurrency int, helmfileRuninfo RunInfo, opts ChartPrepareOptions) (map[PrepareChartKey]string, []error) { | ||||||
| 	if !opts.SkipResolve { | 	if !opts.SkipResolve { | ||||||
| 		updated, err := st.ResolveDeps() | 		updated, err := st.ResolveDeps() | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
|  | @ -1186,7 +1192,7 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre | ||||||
| 				//
 | 				//
 | ||||||
| 				// If it wasn't called here, Helmfile can end up an issue like
 | 				// If it wasn't called here, Helmfile can end up an issue like
 | ||||||
| 				// https://github.com/roboll/helmfile/issues/1328
 | 				// https://github.com/roboll/helmfile/issues/1328
 | ||||||
| 				if _, err := st.triggerPrepareEvent(release, helmfileCommand); err != nil { | 				if _, err := st.triggerPrepareEvent(release, helmfileRuninfo); err != nil { | ||||||
| 					results <- &chartPrepareResult{err: err} | 					results <- &chartPrepareResult{err: err} | ||||||
| 					return | 					return | ||||||
| 				} | 				} | ||||||
|  | @ -1234,7 +1240,7 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre | ||||||
| 				skipDepsDefault := release.SkipDeps == nil && st.HelmDefaults.SkipDeps | 				skipDepsDefault := release.SkipDeps == nil && st.HelmDefaults.SkipDeps | ||||||
| 				skipDeps := (!isLocal && !chartFetchedByGoGetter) || skipDepsGlobal || skipDepsRelease || skipDepsDefault | 				skipDeps := (!isLocal && !chartFetchedByGoGetter) || skipDepsGlobal || skipDepsRelease || skipDepsDefault | ||||||
| 
 | 
 | ||||||
| 				if chartification != nil && helmfileCommand != "pull" { | 				if chartification != nil && helmfileRuninfo.SubCommand != "pull" { | ||||||
| 					c := chartify.New( | 					c := chartify.New( | ||||||
| 						chartify.HelmBin(st.DefaultHelmBinary), | 						chartify.HelmBin(st.DefaultHelmBinary), | ||||||
| 						chartify.KustomizeBin(st.DefaultKustomizeBinary), | 						chartify.KustomizeBin(st.DefaultKustomizeBinary), | ||||||
|  | @ -1526,7 +1532,7 @@ func (st *HelmState) TemplateReleases(helm helmexec.Interface, outputDir string, | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if _, err := st.TriggerCleanupEvent(release, "template"); err != nil { | 		if _, err := st.TriggerCleanupEvent(release, RunInfo{SubCommand: "template"}); err != nil { | ||||||
| 			st.logger.Warnf("warn: %v\n", err) | 			st.logger.Warnf("warn: %v\n", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -1627,7 +1633,7 @@ func (st *HelmState) WriteReleasesValues(helm helmexec.Interface, additionalValu | ||||||
| 			return []error{fmt.Errorf("writing values file %s: %w", outputValuesFile, err)} | 			return []error{fmt.Errorf("writing values file %s: %w", outputValuesFile, err)} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if _, err := st.TriggerCleanupEvent(release, "write-values"); err != nil { | 		if _, err := st.TriggerCleanupEvent(release, RunInfo{SubCommand: "write-values"}); err != nil { | ||||||
| 			st.logger.Warnf("warn: %v\n", err) | 			st.logger.Warnf("warn: %v\n", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -1702,7 +1708,7 @@ func (st *HelmState) LintReleases(helm helmexec.Interface, additionalValues []st | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if _, err := st.TriggerCleanupEvent(&release, "lint"); err != nil { | 		if _, err := st.TriggerCleanupEvent(&release, RunInfo{SubCommand: "lint"}); err != nil { | ||||||
| 			st.logger.Warnf("warn: %v\n", err) | 			st.logger.Warnf("warn: %v\n", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -2050,7 +2056,7 @@ func (st *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []st | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				if triggerCleanupEvents { | 				if triggerCleanupEvents { | ||||||
| 					if _, err := st.TriggerCleanupEvent(prep.release, "diff"); err != nil { | 					if _, err := st.TriggerCleanupEvent(prep.release, RunInfo{SubCommand: "diff"}); err != nil { | ||||||
| 						st.logger.Warnf("warn: %v\n", err) | 						st.logger.Warnf("warn: %v\n", err) | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
|  | @ -2116,7 +2122,7 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel | ||||||
| 		context := st.createHelmContext(&release, workerIndex) | 		context := st.createHelmContext(&release, workerIndex) | ||||||
| 
 | 
 | ||||||
| 		start := time.Now() | 		start := time.Now() | ||||||
| 		if _, err := st.triggerReleaseEvent("preuninstall", nil, &release, "delete"); err != nil { | 		if _, err := st.triggerReleaseEvent("preuninstall", nil, &release, RunInfo{SubCommand: "delete"}); err != nil { | ||||||
| 			affectedReleases.Failed = append(affectedReleases.Failed, &release) | 			affectedReleases.Failed = append(affectedReleases.Failed, &release) | ||||||
| 
 | 
 | ||||||
| 			return err | 			return err | ||||||
|  | @ -2127,7 +2133,7 @@ func (st *HelmState) DeleteReleases(affectedReleases *AffectedReleases, helm hel | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if _, err := st.triggerReleaseEvent("postuninstall", nil, &release, "delete"); err != nil { | 		if _, err := st.triggerReleaseEvent("postuninstall", nil, &release, RunInfo{SubCommand: "delete"}); err != nil { | ||||||
| 			affectedReleases.Failed = append(affectedReleases.Failed, &release) | 			affectedReleases.Failed = append(affectedReleases.Failed, &release) | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
|  | @ -2375,15 +2381,15 @@ func (st *HelmState) FilterReleases(includeTransitiveNeeds bool) error { | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (st *HelmState) TriggerGlobalPrepareEvent(helmfileCommand string) (bool, error) { | func (st *HelmState) TriggerGlobalPrepareEvent(runInfo RunInfo) (bool, error) { | ||||||
| 	return st.triggerGlobalReleaseEvent("prepare", nil, helmfileCommand) | 	return st.triggerGlobalReleaseEvent("prepare", nil, runInfo) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (st *HelmState) TriggerGlobalCleanupEvent(helmfileCommand string) (bool, error) { | func (st *HelmState) TriggerGlobalCleanupEvent(runInfo RunInfo) (bool, error) { | ||||||
| 	return st.triggerGlobalReleaseEvent("cleanup", nil, helmfileCommand) | 	return st.triggerGlobalReleaseEvent("cleanup", nil, runInfo) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (st *HelmState) triggerGlobalReleaseEvent(evt string, evtErr error, helmfileCmd string) (bool, error) { | func (st *HelmState) triggerGlobalReleaseEvent(evt string, evtErr error, runInfo RunInfo) (bool, error) { | ||||||
| 	bus := &event.Bus{ | 	bus := &event.Bus{ | ||||||
| 		Hooks:         st.Hooks, | 		Hooks:         st.Hooks, | ||||||
| 		StateFilePath: st.FilePath, | 		StateFilePath: st.FilePath, | ||||||
|  | @ -2395,32 +2401,32 @@ func (st *HelmState) triggerGlobalReleaseEvent(evt string, evtErr error, helmfil | ||||||
| 		Fs:            st.fs, | 		Fs:            st.fs, | ||||||
| 	} | 	} | ||||||
| 	data := map[string]any{ | 	data := map[string]any{ | ||||||
| 		"HelmfileCommand": helmfileCmd, | 		"HelmfileCommand": runInfo.SubCommand, | ||||||
| 	} | 	} | ||||||
| 	return bus.Trigger(evt, evtErr, data) | 	return bus.Trigger(evt, evtErr, data) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (st *HelmState) triggerPrepareEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) { | func (st *HelmState) triggerPrepareEvent(r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { | ||||||
| 	return st.triggerReleaseEvent("prepare", nil, r, helmfileCommand) | 	return st.triggerReleaseEvent("prepare", nil, r, helmfileRunInfo) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (st *HelmState) TriggerCleanupEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) { | func (st *HelmState) TriggerCleanupEvent(r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { | ||||||
| 	return st.triggerReleaseEvent("cleanup", nil, r, helmfileCommand) | 	return st.triggerReleaseEvent("cleanup", nil, r, helmfileRunInfo) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (st *HelmState) triggerPresyncEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) { | func (st *HelmState) triggerPresyncEvent(r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { | ||||||
| 	return st.triggerReleaseEvent("presync", nil, r, helmfileCommand) | 	return st.triggerReleaseEvent("presync", nil, r, helmfileRunInfo) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (st *HelmState) triggerPostsyncEvent(r *ReleaseSpec, evtErr error, helmfileCommand string) (bool, error) { | func (st *HelmState) triggerPostsyncEvent(r *ReleaseSpec, evtErr error, helmfileRunInfo RunInfo) (bool, error) { | ||||||
| 	return st.triggerReleaseEvent("postsync", evtErr, r, helmfileCommand) | 	return st.triggerReleaseEvent("postsync", evtErr, r, helmfileRunInfo) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (st *HelmState) TriggerPreapplyEvent(r *ReleaseSpec, helmfileCommand string) (bool, error) { | func (st *HelmState) TriggerPreapplyEvent(r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { | ||||||
| 	return st.triggerReleaseEvent("preapply", nil, r, helmfileCommand) | 	return st.triggerReleaseEvent("preapply", nil, r, helmfileRunInfo) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (st *HelmState) triggerReleaseEvent(evt string, evtErr error, r *ReleaseSpec, helmfileCmd string) (bool, error) { | func (st *HelmState) triggerReleaseEvent(evt string, evtErr error, r *ReleaseSpec, helmfileRunInfo RunInfo) (bool, error) { | ||||||
| 	bus := &event.Bus{ | 	bus := &event.Bus{ | ||||||
| 		Hooks:         r.Hooks, | 		Hooks:         r.Hooks, | ||||||
| 		StateFilePath: st.FilePath, | 		StateFilePath: st.FilePath, | ||||||
|  | @ -2435,7 +2441,7 @@ func (st *HelmState) triggerReleaseEvent(evt string, evtErr error, r *ReleaseSpe | ||||||
| 	data := map[string]any{ | 	data := map[string]any{ | ||||||
| 		"Values":          vals, | 		"Values":          vals, | ||||||
| 		"Release":         r, | 		"Release":         r, | ||||||
| 		"HelmfileCommand": helmfileCmd, | 		"HelmfileCommand": helmfileRunInfo.SubCommand, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return bus.Trigger(evt, evtErr, data) | 	return bus.Trigger(evt, evtErr, data) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue