Port the fix for `needs` to `helmfile delete` and `destroy`
This ports the fix for `helfmile apply` to `delete` and `destroy`, so that specifying `--selector` does not break those commands anymore. Ref #919
This commit is contained in:
parent
f41fe86452
commit
4751613f39
|
|
@ -158,15 +158,15 @@ func (a *App) Status(c StatusesConfigProvider) error {
|
|||
}
|
||||
|
||||
func (a *App) Delete(c DeleteConfigProvider) error {
|
||||
return a.reverse().ForEachStateFiltered(func(run *Run) []error {
|
||||
return run.Delete(c)
|
||||
}, true)
|
||||
return a.reverse().ForEachState(func(run *Run) (bool, []error) {
|
||||
return a.delete(run, c.Purge(), c)
|
||||
})
|
||||
}
|
||||
|
||||
func (a *App) Destroy(c DestroyConfigProvider) error {
|
||||
return a.reverse().ForEachStateFiltered(func(run *Run) []error {
|
||||
return run.Destroy(c)
|
||||
}, true)
|
||||
return a.reverse().ForEachState(func(run *Run) (bool, []error) {
|
||||
return a.delete(run, true, c)
|
||||
})
|
||||
}
|
||||
|
||||
func (a *App) Test(c TestConfigProvider) error {
|
||||
|
|
@ -460,7 +460,7 @@ func withDAG(templated *state.HelmState, helm helmexec.Interface, logger *zap.Su
|
|||
|
||||
logger.Debugf("processing %d groups of releases in this order:\n%s", numBatches, printBatches(batches))
|
||||
|
||||
all := true
|
||||
any := false
|
||||
|
||||
for i, batch := range batches {
|
||||
var targets []state.ReleaseSpec
|
||||
|
|
@ -485,10 +485,10 @@ func withDAG(templated *state.HelmState, helm helmexec.Interface, logger *zap.Su
|
|||
return false, errs
|
||||
}
|
||||
|
||||
all = all && processed
|
||||
any = any || processed
|
||||
}
|
||||
|
||||
return all, nil
|
||||
return any, nil
|
||||
}
|
||||
|
||||
type Opts struct {
|
||||
|
|
@ -835,6 +835,78 @@ Do you really want to apply?
|
|||
return true, syncErrs
|
||||
}
|
||||
|
||||
func (a *App) delete(r *Run, purge bool, c DestroyConfigProvider) (bool, []error) {
|
||||
st := r.state
|
||||
helm := r.helm
|
||||
|
||||
affectedReleases := state.AffectedReleases{}
|
||||
|
||||
var deletingReleases []state.ReleaseSpec
|
||||
|
||||
if len(st.Selectors) > 0 {
|
||||
var err error
|
||||
deletingReleases, err = st.GetFilteredReleases()
|
||||
if err != nil {
|
||||
return false, []error{err}
|
||||
}
|
||||
if len(deletingReleases) == 0 {
|
||||
return false, nil
|
||||
}
|
||||
} else {
|
||||
deletingReleases = st.Releases
|
||||
}
|
||||
|
||||
releasesToBeDeleted := map[string]state.ReleaseSpec{}
|
||||
for _, r := range deletingReleases {
|
||||
id := state.ReleaseToID(&r)
|
||||
releasesToBeDeleted[id] = r
|
||||
}
|
||||
|
||||
names := make([]string, len(deletingReleases))
|
||||
for i, r := range deletingReleases {
|
||||
names[i] = fmt.Sprintf(" %s (%s)", r.Name, r.Chart)
|
||||
}
|
||||
|
||||
var errs []error
|
||||
var any bool
|
||||
|
||||
msg := fmt.Sprintf(`Affected releases are:
|
||||
%s
|
||||
|
||||
Do you really want to delete?
|
||||
Helmfile will delete all your releases, as shown above.
|
||||
|
||||
`, strings.Join(names, "\n"))
|
||||
interactive := c.Interactive()
|
||||
if !interactive || interactive && r.askForConfirmation(msg) {
|
||||
r.helm.SetExtraArgs(argparser.GetArgs(c.Args(), r.state)...)
|
||||
|
||||
if len(releasesToBeDeleted) > 0 {
|
||||
deleted, deletionErrs := withDAG(st, helm, a.Logger, true, a.Wrap(func(subst *state.HelmState, helm helmexec.Interface) []error {
|
||||
var rs []state.ReleaseSpec
|
||||
|
||||
for _, r := range subst.Releases {
|
||||
if _, ok := releasesToBeDeleted[state.ReleaseToID(&r)]; ok {
|
||||
rs = append(rs, r)
|
||||
}
|
||||
}
|
||||
|
||||
subst.Releases = rs
|
||||
|
||||
return subst.DeleteReleases(&affectedReleases, helm, c.Concurrency(), purge)
|
||||
}))
|
||||
|
||||
any = any || deleted
|
||||
|
||||
if deletionErrs != nil && len(deletionErrs) > 0 {
|
||||
errs = append(errs, deletionErrs...)
|
||||
}
|
||||
}
|
||||
}
|
||||
affectedReleases.DisplayAffectedReleases(c.Logger())
|
||||
return any, errs
|
||||
}
|
||||
|
||||
func fileExistsAt(path string) bool {
|
||||
fileInfo, err := os.Stat(path)
|
||||
return err == nil && fileInfo.Mode().IsRegular()
|
||||
|
|
|
|||
Loading…
Reference in New Issue