podman/libpod/reset.go
Daniel J Walsh 4352d58549
Add support for containers.conf
vendor in c/common config pkg for containers.conf

Signed-off-by: Qi Wang qiwan@redhat.com
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-03-27 14:36:03 -04:00

118 lines
2.5 KiB
Go

package libpod
import (
"context"
"os"
"path/filepath"
"github.com/containers/libpod/libpod/define"
"github.com/containers/libpod/pkg/rootless"
"github.com/containers/libpod/pkg/util"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)
// Reset removes all storage
func (r *Runtime) Reset(ctx context.Context) error {
pods, err := r.GetAllPods()
if err != nil {
return err
}
for _, p := range pods {
if err := r.RemovePod(ctx, p, true, true); err != nil {
if errors.Cause(err) == define.ErrNoSuchPod {
continue
}
logrus.Errorf("Error removing Pod %s: %v", p.ID(), err)
}
}
ctrs, err := r.GetAllContainers()
if err != nil {
return err
}
for _, c := range ctrs {
if err := r.RemoveContainer(ctx, c, true, true); err != nil {
if err := r.RemoveStorageContainer(c.ID(), true); err != nil {
if errors.Cause(err) == define.ErrNoSuchCtr {
continue
}
logrus.Errorf("Error removing container %s: %v", c.ID(), err)
}
}
}
if err := stopPauseProcess(); err != nil {
logrus.Errorf("Error stopping pause process: %v", err)
}
ir := r.ImageRuntime()
images, err := ir.GetImages()
if err != nil {
return err
}
for _, i := range images {
if err := i.Remove(ctx, true); err != nil {
if errors.Cause(err) == define.ErrNoSuchImage {
continue
}
logrus.Errorf("Error removing image %s: %v", i.ID(), err)
}
}
volumes, err := r.state.AllVolumes()
if err != nil {
return err
}
for _, v := range volumes {
if err := r.RemoveVolume(ctx, v, true); err != nil {
if errors.Cause(err) == define.ErrNoSuchVolume {
continue
}
logrus.Errorf("Error removing volume %s: %v", v.config.Name, err)
}
}
_, prevError := r.store.Shutdown(true)
if err := os.RemoveAll(r.store.GraphRoot()); err != nil {
if prevError != nil {
logrus.Error(prevError)
}
prevError = err
}
if err := os.RemoveAll(r.store.RunRoot()); err != nil {
if prevError != nil {
logrus.Error(prevError)
}
prevError = err
}
runtimeDir, err := util.GetRuntimeDir()
if err != nil {
return err
}
tempDir := r.config.Engine.TmpDir
if tempDir == runtimeDir {
tempDir = filepath.Join(tempDir, "containers")
}
if err := os.RemoveAll(tempDir); err != nil {
if prevError != nil {
logrus.Error(prevError)
}
prevError = err
}
if rootless.IsRootless() {
configPath := filepath.Join(os.Getenv("HOME"), ".config/containers")
if err := os.RemoveAll(configPath); err != nil {
if prevError != nil {
logrus.Error(prevError)
}
prevError = err
}
}
return prevError
}