mirror of
https://github.com/containers/podman.git
synced 2025-06-20 17:13:43 +08:00
Fix podman network rm --force when network is used by a pod
I added a test to prevent a future regression. Signed-off-by: Paul Holzinger <paul.holzinger@web.de>
This commit is contained in:
@ -82,12 +82,21 @@ func (ic *ContainerEngine) NetworkRm(ctx context.Context, namesOrIds []string, o
|
||||
// We need to iterate containers looking to see if they belong to the given network
|
||||
for _, c := range containers {
|
||||
if util.StringInSlice(name, c.Config().Networks) {
|
||||
// if user passes force, we nuke containers
|
||||
// if user passes force, we nuke containers and pods
|
||||
if !options.Force {
|
||||
// Without the force option, we return an error
|
||||
return reports, errors.Errorf("%q has associated containers with it. Use -f to forcibly delete containers", name)
|
||||
return reports, errors.Errorf("%q has associated containers with it. Use -f to forcibly delete containers and pods", name)
|
||||
}
|
||||
if err := ic.Libpod.RemoveContainer(ctx, c, true, true); err != nil {
|
||||
if c.IsInfra() {
|
||||
// if we have a infra container we need to remove the pod
|
||||
pod, err := ic.Libpod.GetPod(c.PodID())
|
||||
if err != nil {
|
||||
return reports, err
|
||||
}
|
||||
if err := ic.Libpod.RemovePod(ctx, pod, true, true); err != nil {
|
||||
return reports, err
|
||||
}
|
||||
} else if err := ic.Libpod.RemoveContainer(ctx, c, true, true); err != nil {
|
||||
return reports, err
|
||||
}
|
||||
}
|
||||
|
@ -263,4 +263,35 @@ var _ = Describe("Podman network", func() {
|
||||
rmAll.WaitWithDefaultTimeout()
|
||||
Expect(rmAll.ExitCode()).To(BeZero())
|
||||
})
|
||||
|
||||
It("podman network remove --force with pod", func() {
|
||||
netName := "testnet"
|
||||
session := podmanTest.Podman([]string{"network", "create", netName})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(BeZero())
|
||||
|
||||
session = podmanTest.Podman([]string{"pod", "create", "--network", netName})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(BeZero())
|
||||
podID := session.OutputToString()
|
||||
|
||||
session = podmanTest.Podman([]string{"create", "--pod", podID, ALPINE})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(BeZero())
|
||||
|
||||
session = podmanTest.Podman([]string{"network", "rm", "--force", netName})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(BeZero())
|
||||
|
||||
// check if pod is deleted
|
||||
session = podmanTest.Podman([]string{"pod", "exists", podID})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(1))
|
||||
|
||||
// check if net is deleted
|
||||
session = podmanTest.Podman([]string{"network", "ls"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(BeZero())
|
||||
Expect(session.OutputToString()).To(Not(ContainSubstring(netName)))
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user