summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Guzik <jakubmguzik@gmail.com>2021-05-12 00:39:01 +0200
committerJakub Guzik <jakubmguzik@gmail.com>2021-05-12 09:05:06 +0200
commit5e6405334c3d0422b5ec7cd09ef9c58d8f558dba (patch)
treecc5ca0e47596bdcb2509a4134b4c8b8178b0549e
parent3aae34694623cce5f1da4a93c7c1e729c528402c (diff)
downloadpodman-5e6405334c3d0422b5ec7cd09ef9c58d8f558dba.tar.gz
podman-5e6405334c3d0422b5ec7cd09ef9c58d8f558dba.tar.bz2
podman-5e6405334c3d0422b5ec7cd09ef9c58d8f558dba.zip
Add support for cli network prune --filter flag
Signed-off-by: Jakub Guzik <jakubmguzik@gmail.com>
-rw-r--r--cmd/podman/networks/prune.go16
-rw-r--r--docs/source/markdown/podman-network-ls.1.md2
-rw-r--r--docs/source/markdown/podman-network-prune.1.md14
-rw-r--r--test/e2e/network_test.go46
4 files changed, 73 insertions, 5 deletions
diff --git a/cmd/podman/networks/prune.go b/cmd/podman/networks/prune.go
index ebba06db5..bcc55f0f4 100644
--- a/cmd/podman/networks/prune.go
+++ b/cmd/podman/networks/prune.go
@@ -6,6 +6,7 @@ import (
"os"
"strings"
+ "github.com/containers/common/pkg/completion"
"github.com/containers/podman/v3/cmd/podman/common"
"github.com/containers/podman/v3/cmd/podman/registry"
"github.com/containers/podman/v3/cmd/podman/utils"
@@ -31,12 +32,14 @@ var (
var (
networkPruneOptions entities.NetworkPruneOptions
force bool
+ filter = []string{}
)
-func networkPruneFlags(flags *pflag.FlagSet) {
- //TODO: Not implemented but for future reference
- //flags.StringSliceVar(&networkPruneOptions.Filters,"filters", []string{}, "provide filter values (e.g. 'until=<timestamp>')")
+func networkPruneFlags(cmd *cobra.Command, flags *pflag.FlagSet) {
flags.BoolVarP(&force, "force", "f", false, "do not prompt for confirmation")
+ filterFlagName := "filter"
+ flags.StringArrayVar(&filter, filterFlagName, []string{}, "Provide filter values (e.g. 'label=<key>=<value>')")
+ _ = cmd.RegisterFlagCompletionFunc(filterFlagName, completion.AutocompleteNone)
}
func init() {
@@ -46,12 +49,13 @@ func init() {
Parent: networkCmd,
})
flags := networkPruneCommand.Flags()
- networkPruneFlags(flags)
+ networkPruneFlags(networkPruneCommand, flags)
}
func networkPrune(cmd *cobra.Command, _ []string) error {
var (
errs utils.OutputErrors
+ err error
)
if !force {
reader := bufio.NewReader(os.Stdin)
@@ -65,6 +69,10 @@ func networkPrune(cmd *cobra.Command, _ []string) error {
return nil
}
}
+ networkPruneOptions.Filters, err = common.ParseFilters(filter)
+ if err != nil {
+ return err
+ }
responses, err := registry.ContainerEngine().NetworkPrune(registry.Context(), networkPruneOptions)
if err != nil {
setExitCode(err)
diff --git a/docs/source/markdown/podman-network-ls.1.md b/docs/source/markdown/podman-network-ls.1.md
index a5c6ff0c0..b7fd13ec6 100644
--- a/docs/source/markdown/podman-network-ls.1.md
+++ b/docs/source/markdown/podman-network-ls.1.md
@@ -13,7 +13,7 @@ Displays a list of existing podman networks.
#### **--filter**, **-f**
Filter output based on conditions given.
-Multiple filters can be given with multiple uses of the --filter flag.
+Multiple filters can be given with multiple uses of the --filter option.
Filters with the same key work inclusive with the only exception being
`label` which is exclusive. Filters with different keys always work exclusive.
diff --git a/docs/source/markdown/podman-network-prune.1.md b/docs/source/markdown/podman-network-prune.1.md
index af0a7295d..e18ffaaea 100644
--- a/docs/source/markdown/podman-network-prune.1.md
+++ b/docs/source/markdown/podman-network-prune.1.md
@@ -16,6 +16,20 @@ the so-called default network which goes by the name of *podman*.
Do not prompt for confirmation
+#### **--filter**
+
+Filter output based on conditions given.
+Multiple filters can be given with multiple uses of the --filter option.
+Filters with the same key work inclusive with the only exception being
+`label` which is exclusive. Filters with different keys always work exclusive.
+
+Valid filters are listed below:
+
+| **Filter** | **Description** |
+| ---------- | ------------------------------------------------------------------------------------- |
+| label | [Key] or [Key=Value] Label assigned to a network |
+| until | only remove networks created before given timestamp |
+
## EXAMPLE
Prune networks
diff --git a/test/e2e/network_test.go b/test/e2e/network_test.go
index ff2e1eb66..6f28d7e19 100644
--- a/test/e2e/network_test.go
+++ b/test/e2e/network_test.go
@@ -584,6 +584,52 @@ var _ = Describe("Podman network", func() {
Expect(nc.ExitCode()).To(Equal(0))
})
+ It("podman network prune --filter", func() {
+ net1 := "macvlan" + stringid.GenerateNonCryptoID() + "net1"
+
+ nc := podmanTest.Podman([]string{"network", "create", net1})
+ nc.WaitWithDefaultTimeout()
+ defer podmanTest.removeCNINetwork(net1)
+ Expect(nc.ExitCode()).To(Equal(0))
+
+ list := podmanTest.Podman([]string{"network", "ls", "--format", "{{.Name}}"})
+ list.WaitWithDefaultTimeout()
+ Expect(list.ExitCode()).To(BeZero())
+
+ Expect(StringInSlice(net1, list.OutputToStringArray())).To(BeTrue())
+ if !isRootless() {
+ Expect(StringInSlice("podman", list.OutputToStringArray())).To(BeTrue())
+ }
+
+ // -f needed only to skip y/n question
+ prune := podmanTest.Podman([]string{"network", "prune", "-f", "--filter", "until=50"})
+ prune.WaitWithDefaultTimeout()
+ Expect(prune.ExitCode()).To(BeZero())
+
+ listAgain := podmanTest.Podman([]string{"network", "ls", "--format", "{{.Name}}"})
+ listAgain.WaitWithDefaultTimeout()
+ Expect(listAgain.ExitCode()).To(BeZero())
+
+ Expect(StringInSlice(net1, listAgain.OutputToStringArray())).To(BeTrue())
+ if !isRootless() {
+ Expect(StringInSlice("podman", list.OutputToStringArray())).To(BeTrue())
+ }
+
+ // -f needed only to skip y/n question
+ prune = podmanTest.Podman([]string{"network", "prune", "-f", "--filter", "until=5000000000000"})
+ prune.WaitWithDefaultTimeout()
+ Expect(prune.ExitCode()).To(BeZero())
+
+ listAgain = podmanTest.Podman([]string{"network", "ls", "--format", "{{.Name}}"})
+ listAgain.WaitWithDefaultTimeout()
+ Expect(listAgain.ExitCode()).To(BeZero())
+
+ Expect(StringInSlice(net1, listAgain.OutputToStringArray())).To(BeFalse())
+ if !isRootless() {
+ Expect(StringInSlice("podman", list.OutputToStringArray())).To(BeTrue())
+ }
+ })
+
It("podman network prune", func() {
// Create two networks
// Check they are there