Merge pull request #11756 from Luap99/network-prune

CNI: network remove do not error for ENOENT
This commit is contained in:
OpenShift Merge Robot
2021-09-27 15:23:57 -04:00
committed by GitHub
3 changed files with 53 additions and 26 deletions

View File

@ -170,7 +170,11 @@ func (n *cniNetwork) NetworkRemove(nameOrID string) error {
file := network.filename
delete(n.networks, network.libpodNet.Name)
return os.Remove(file)
// make sure to not error for ErrNotExist
if err := os.Remove(file); err != nil && !errors.Is(err, os.ErrNotExist) {
return err
}
return nil
}
// NetworkList will return all known Networks. Optionally you can

View File

@ -1021,6 +1021,27 @@ var _ = Describe("Config", func() {
Expect(err.Error()).To(ContainSubstring("subnet 10.10.0.0/24 is already used on the host or by another config"))
})
It("remove network should not error when config file does not exists on disk", func() {
name := "mynet"
network := types.Network{Name: name}
_, err := libpodNet.NetworkCreate(network)
Expect(err).To(BeNil())
path := filepath.Join(cniConfDir, name+".conflist")
Expect(path).To(BeARegularFile())
err = os.Remove(path)
Expect(err).To(BeNil())
Expect(path).ToNot(BeARegularFile())
err = libpodNet.NetworkRemove(name)
Expect(err).To(BeNil())
nets, err := libpodNet.NetworkList()
Expect(err).To(BeNil())
Expect(nets).To(HaveLen(1))
Expect(nets).ToNot(ContainElement(HaveNetworkName(name)))
})
})
Context("network load valid existing ones", func() {

View File

@ -603,6 +603,11 @@ var _ = Describe("Podman network", func() {
})
It("podman network prune --filter", func() {
// set custom cni directory to prevent flakes
podmanTest.CNIConfigDir = tempdir
if IsRemote() {
podmanTest.RestartRemoteService()
}
net1 := "macvlan" + stringid.GenerateNonCryptoID() + "net1"
nc := podmanTest.Podman([]string{"network", "create", net1})
@ -613,11 +618,10 @@ var _ = Describe("Podman network", func() {
list := podmanTest.Podman([]string{"network", "ls", "--format", "{{.Name}}"})
list.WaitWithDefaultTimeout()
Expect(list).Should(Exit(0))
Expect(list.OutputToStringArray()).Should(HaveLen(2))
Expect(StringInSlice(net1, list.OutputToStringArray())).To(BeTrue())
if !isRootless() {
Expect(StringInSlice("podman", list.OutputToStringArray())).To(BeTrue())
}
Expect(list.OutputToStringArray()).Should(ContainElement(net1))
Expect(list.OutputToStringArray()).Should(ContainElement("podman"))
// -f needed only to skip y/n question
prune := podmanTest.Podman([]string{"network", "prune", "-f", "--filter", "until=50"})
@ -627,11 +631,10 @@ var _ = Describe("Podman network", func() {
listAgain := podmanTest.Podman([]string{"network", "ls", "--format", "{{.Name}}"})
listAgain.WaitWithDefaultTimeout()
Expect(listAgain).Should(Exit(0))
Expect(listAgain.OutputToStringArray()).Should(HaveLen(2))
Expect(StringInSlice(net1, listAgain.OutputToStringArray())).To(BeTrue())
if !isRootless() {
Expect(StringInSlice("podman", list.OutputToStringArray())).To(BeTrue())
}
Expect(listAgain.OutputToStringArray()).Should(ContainElement(net1))
Expect(listAgain.OutputToStringArray()).Should(ContainElement("podman"))
// -f needed only to skip y/n question
prune = podmanTest.Podman([]string{"network", "prune", "-f", "--filter", "until=5000000000000"})
@ -641,14 +644,18 @@ var _ = Describe("Podman network", func() {
listAgain = podmanTest.Podman([]string{"network", "ls", "--format", "{{.Name}}"})
listAgain.WaitWithDefaultTimeout()
Expect(listAgain).Should(Exit(0))
Expect(listAgain.OutputToStringArray()).Should(HaveLen(1))
Expect(StringInSlice(net1, listAgain.OutputToStringArray())).To(BeFalse())
if !isRootless() {
Expect(StringInSlice("podman", list.OutputToStringArray())).To(BeTrue())
}
Expect(listAgain.OutputToStringArray()).ShouldNot(ContainElement(net1))
Expect(listAgain.OutputToStringArray()).Should(ContainElement("podman"))
})
It("podman network prune", func() {
// set custom cni directory to prevent flakes
podmanTest.CNIConfigDir = tempdir
if IsRemote() {
podmanTest.RestartRemoteService()
}
// Create two networks
// Check they are there
// Run a container on one of them
@ -669,13 +676,11 @@ var _ = Describe("Podman network", func() {
list := podmanTest.Podman([]string{"network", "ls", "--format", "{{.Name}}"})
list.WaitWithDefaultTimeout()
Expect(list).Should(Exit(0))
Expect(list.OutputToStringArray()).Should(HaveLen(3))
Expect(StringInSlice(net1, list.OutputToStringArray())).To(BeTrue())
Expect(StringInSlice(net2, list.OutputToStringArray())).To(BeTrue())
if !isRootless() {
Expect(StringInSlice("podman", list.OutputToStringArray())).To(BeTrue())
}
Expect(list.OutputToStringArray()).Should(ContainElement(net1))
Expect(list.OutputToStringArray()).Should(ContainElement(net2))
Expect(list.OutputToStringArray()).Should(ContainElement("podman"))
session := podmanTest.Podman([]string{"run", "-dt", "--net", net2, ALPINE, "top"})
session.WaitWithDefaultTimeout()
@ -688,13 +693,10 @@ var _ = Describe("Podman network", func() {
listAgain := podmanTest.Podman([]string{"network", "ls", "--format", "{{.Name}}"})
listAgain.WaitWithDefaultTimeout()
Expect(listAgain).Should(Exit(0))
Expect(listAgain.OutputToStringArray()).Should(HaveLen(2))
Expect(StringInSlice(net1, listAgain.OutputToStringArray())).To(BeFalse())
Expect(StringInSlice(net2, listAgain.OutputToStringArray())).To(BeTrue())
// Make sure default network 'podman' still exists
if !isRootless() {
Expect(StringInSlice("podman", list.OutputToStringArray())).To(BeTrue())
}
Expect(listAgain.OutputToStringArray()).ShouldNot(ContainElement(net1))
Expect(listAgain.OutputToStringArray()).Should(ContainElement(net2))
Expect(listAgain.OutputToStringArray()).Should(ContainElement("podman"))
})
})