diff options
author | Daniel J Walsh <dwalsh@redhat.com> | 2020-12-04 14:06:52 -0500 |
---|---|---|
committer | Daniel J Walsh <dwalsh@redhat.com> | 2020-12-09 06:17:28 -0500 |
commit | a59e2a1a114c039e1780aa2b08b9452dc569cdf4 (patch) | |
tree | 1e40d530bd96ef9e4609383788175852465c49b8 /pkg/domain/infra | |
parent | dd295f297b6dd51d22c64c75f4ef4f80f953bbde (diff) | |
download | podman-a59e2a1a114c039e1780aa2b08b9452dc569cdf4.tar.gz podman-a59e2a1a114c039e1780aa2b08b9452dc569cdf4.tar.bz2 podman-a59e2a1a114c039e1780aa2b08b9452dc569cdf4.zip |
Repeat system pruning until there is nothing removed
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
Diffstat (limited to 'pkg/domain/infra')
-rw-r--r-- | pkg/domain/infra/abi/system.go | 76 |
1 files changed, 50 insertions, 26 deletions
diff --git a/pkg/domain/infra/abi/system.go b/pkg/domain/infra/abi/system.go index ec2532bea..7ed58092b 100644 --- a/pkg/domain/infra/abi/system.go +++ b/pkg/domain/infra/abi/system.go @@ -168,37 +168,61 @@ func checkInput() error { // nolint:deadcode,unused // SystemPrune removes unused data from the system. Pruning pods, containers, volumes and images. func (ic *ContainerEngine) SystemPrune(ctx context.Context, options entities.SystemPruneOptions) (*entities.SystemPruneReport, error) { var systemPruneReport = new(entities.SystemPruneReport) - podPruneReport, err := ic.prunePodHelper(ctx) - if err != nil { - return nil, err - } - systemPruneReport.PodPruneReport = podPruneReport - - containerPruneReport, err := ic.pruneContainersHelper(nil) - if err != nil { - return nil, err - } - systemPruneReport.ContainerPruneReport = containerPruneReport - - results, err := ic.Libpod.ImageRuntime().PruneImages(ctx, options.All, nil) - if err != nil { - return nil, err - } - report := entities.ImagePruneReport{ - Report: entities.Report{ - Id: results, - Err: nil, - }, - } + found := true + for found { + found = false + podPruneReport, err := ic.prunePodHelper(ctx) + if err != nil { + return nil, err + } + if len(podPruneReport) > 0 { + found = true + } + systemPruneReport.PodPruneReport = append(systemPruneReport.PodPruneReport, podPruneReport...) + containerPruneReport, err := ic.pruneContainersHelper(nil) + if err != nil { + return nil, err + } + if len(containerPruneReport.ID) > 0 { + found = true + } + if systemPruneReport.ContainerPruneReport == nil { + systemPruneReport.ContainerPruneReport = containerPruneReport + } else { + for name, val := range containerPruneReport.ID { + systemPruneReport.ContainerPruneReport.ID[name] = val + } + } - systemPruneReport.ImagePruneReport = &report + results, err := ic.Libpod.ImageRuntime().PruneImages(ctx, options.All, nil) - if options.Volume { - volumePruneReport, err := ic.pruneVolumesHelper(ctx) if err != nil { return nil, err } - systemPruneReport.VolumePruneReport = volumePruneReport + if len(results) > 0 { + found = true + } + + if systemPruneReport.ImagePruneReport == nil { + systemPruneReport.ImagePruneReport = &entities.ImagePruneReport{ + Report: entities.Report{ + Id: results, + Err: nil, + }, + } + } else { + systemPruneReport.ImagePruneReport.Report.Id = append(systemPruneReport.ImagePruneReport.Report.Id, results...) + } + if options.Volume { + volumePruneReport, err := ic.pruneVolumesHelper(ctx) + if err != nil { + return nil, err + } + if len(volumePruneReport) > 0 { + found = true + } + systemPruneReport.VolumePruneReport = append(systemPruneReport.VolumePruneReport, volumePruneReport...) + } } return systemPruneReport, nil } |