summaryrefslogtreecommitdiff
path: root/pkg/domain/infra/abi
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2022-01-13 18:40:52 +0100
committerGitHub <noreply@github.com>2022-01-13 18:40:52 +0100
commit48e63975aac7f13048a4b2e426e36d2c81828d6d (patch)
tree580f2d30341d45c087c4d5a47392a325d97f5ce1 /pkg/domain/infra/abi
parenteeb76db0fd0dc2a1115c2f2ad12c82eadbc62509 (diff)
parenta4cef543504600db95453aa863b97ed82c833d41 (diff)
downloadpodman-48e63975aac7f13048a4b2e426e36d2c81828d6d.tar.gz
podman-48e63975aac7f13048a4b2e426e36d2c81828d6d.tar.bz2
podman-48e63975aac7f13048a4b2e426e36d2c81828d6d.zip
Merge pull request #12826 from vrothberg/force-rm-pod
podman container rm: remove pod
Diffstat (limited to 'pkg/domain/infra/abi')
-rw-r--r--pkg/domain/infra/abi/containers.go34
1 files changed, 33 insertions, 1 deletions
diff --git a/pkg/domain/infra/abi/containers.go b/pkg/domain/infra/abi/containers.go
index a4522698e..afd25d313 100644
--- a/pkg/domain/infra/abi/containers.go
+++ b/pkg/domain/infra/abi/containers.go
@@ -357,24 +357,56 @@ func (ic *ContainerEngine) ContainerRm(ctx context.Context, namesOrIds []string,
return rmReports, nil
}
+ alreadyRemoved := make(map[string]bool)
+ addReports := func(newReports []*reports.RmReport) {
+ for i := range newReports {
+ alreadyRemoved[newReports[i].Id] = true
+ rmReports = append(rmReports, newReports[i])
+ }
+ }
if !options.All && options.Depend {
// Add additional containers based on dependencies to container map
for _, ctr := range ctrs {
+ if alreadyRemoved[ctr.ID()] {
+ continue
+ }
reports, err := ic.Libpod.RemoveDepend(ctx, ctr, options.Force, options.Volumes, options.Timeout)
if err != nil {
return rmReports, err
}
- rmReports = append(rmReports, reports...)
+ addReports(reports)
}
return rmReports, nil
}
+
+ // If --all is set, make sure to remove the infra containers'
+ // dependencies before doing the parallel removal below.
+ if options.All {
+ for _, ctr := range ctrs {
+ if alreadyRemoved[ctr.ID()] || !ctr.IsInfra() {
+ continue
+ }
+ reports, err := ic.Libpod.RemoveDepend(ctx, ctr, options.Force, options.Volumes, options.Timeout)
+ if err != nil {
+ return rmReports, err
+ }
+ addReports(reports)
+ }
+ }
+
errMap, err := parallelctr.ContainerOp(ctx, ctrs, func(c *libpod.Container) error {
+ if alreadyRemoved[c.ID()] {
+ return nil
+ }
return ic.removeContainer(ctx, c, options)
})
if err != nil {
return nil, err
}
for ctr, err := range errMap {
+ if alreadyRemoved[ctr.ID()] {
+ continue
+ }
report := new(reports.RmReport)
report.Id = ctr.ID()
report.Err = err