mirror of
https://github.com/containers/podman.git
synced 2025-06-26 21:07:02 +08:00
Merge pull request #13116 from Luap99/reset-networks
system prune: remove all networks
This commit is contained in:
@ -21,7 +21,7 @@ import (
|
||||
var (
|
||||
systemResetDescription = `Reset podman storage back to default state"
|
||||
|
||||
All containers will be stopped and removed, and all images, volumes and container content will be removed.
|
||||
All containers will be stopped and removed, and all images, volumes, networks and container content will be removed.
|
||||
`
|
||||
systemResetCommand = &cobra.Command{
|
||||
Annotations: map[string]string{registry.EngineMode: registry.ABIMode},
|
||||
@ -55,11 +55,11 @@ func reset(cmd *cobra.Command, args []string) {
|
||||
// Prompt for confirmation if --force is not set
|
||||
if !forceFlag {
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
fmt.Println(`
|
||||
WARNING! This will remove:
|
||||
fmt.Println(`WARNING! This will remove:
|
||||
- all containers
|
||||
- all pods
|
||||
- all images
|
||||
- all networks
|
||||
- all build cache`)
|
||||
if len(listCtn) > 0 {
|
||||
fmt.Println(`WARNING! The following external containers will be purged:`)
|
||||
|
@ -7,7 +7,7 @@ podman\-system\-reset - Reset storage back to initial state
|
||||
**podman system reset** [*options*]
|
||||
|
||||
## DESCRIPTION
|
||||
**podman system reset** removes all pods, containers, images and volumes.
|
||||
**podman system reset** removes all pods, containers, images, networks and volumes.
|
||||
|
||||
This command must be run **before** changing any of the following fields in the
|
||||
`containers.conf` or `storage.conf` files: `driver`, `static_dir`, `tmp_dir`
|
||||
@ -28,6 +28,17 @@ Print usage statement
|
||||
|
||||
## EXAMPLES
|
||||
|
||||
```
|
||||
$ podman system reset
|
||||
WARNING! This will remove:
|
||||
- all containers
|
||||
- all pods
|
||||
- all images
|
||||
- all networks
|
||||
- all build cache
|
||||
Are you sure you want to continue? [y/N] y
|
||||
```
|
||||
|
||||
### Switching rootless user from VFS driver to overlay with fuse-overlayfs
|
||||
|
||||
If the user ran rootless containers without having the `fuse-overlayfs` program
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/containers/common/libimage"
|
||||
"github.com/containers/common/libnetwork/types"
|
||||
"github.com/containers/podman/v4/libpod/define"
|
||||
"github.com/containers/podman/v4/pkg/errorhandling"
|
||||
"github.com/containers/podman/v4/pkg/rootless"
|
||||
@ -70,6 +71,22 @@ func (r *Runtime) Reset(ctx context.Context) error {
|
||||
}
|
||||
}
|
||||
|
||||
// remove all networks
|
||||
nets, err := r.network.NetworkList()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, net := range nets {
|
||||
// do not delete the default network
|
||||
if net.Name == r.network.DefaultNetworkName() {
|
||||
continue
|
||||
}
|
||||
// ignore not exists errors because of the TOCTOU problem
|
||||
if err := r.network.NetworkRemove(net.Name); err != nil && !errors.Is(err, types.ErrNoSuchNetwork) {
|
||||
logrus.Errorf("Removing network %s: %v", net.Name, err)
|
||||
}
|
||||
}
|
||||
|
||||
xdgRuntimeDir := filepath.Clean(os.Getenv("XDG_RUNTIME_DIR"))
|
||||
_, prevError := r.store.Shutdown(true)
|
||||
graphRoot := filepath.Clean(r.store.GraphRoot())
|
||||
|
@ -38,6 +38,10 @@ var _ = Describe("podman system reset", func() {
|
||||
SkipIfRemote("system reset not supported on podman --remote")
|
||||
// system reset will not remove additional store images, so need to grab length
|
||||
|
||||
// change the network dir so that we do not conflict with other tests
|
||||
// that would use the same network dir and cause unnecessary flakes
|
||||
podmanTest.NetworkConfigDir = tempdir
|
||||
|
||||
session := podmanTest.Podman([]string{"rmi", "--force", "--all"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
@ -56,16 +60,16 @@ var _ = Describe("podman system reset", func() {
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
|
||||
session = podmanTest.Podman([]string{"network", "create"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
|
||||
session = podmanTest.Podman([]string{"system", "reset", "-f"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
|
||||
Expect(session.ErrorToString()).To(Not(ContainSubstring("Failed to add pause process")))
|
||||
|
||||
// If remote then the API service should have exited
|
||||
// On local tests this is a noop
|
||||
podmanTest.StartRemoteService()
|
||||
|
||||
session = podmanTest.Podman([]string{"images", "-n"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
@ -80,5 +84,11 @@ var _ = Describe("podman system reset", func() {
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
Expect(session.OutputToStringArray()).To(BeEmpty())
|
||||
|
||||
session = podmanTest.Podman([]string{"network", "ls", "-q"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
// default network should exists
|
||||
Expect(session.OutputToStringArray()).To(HaveLen(1))
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user