mirror of
https://github.com/containers/podman.git
synced 2026-03-19 07:08:38 -04:00
Merge pull request #5595 from stefano-pogliani/pod-ps-filter-label
Support label filters for podman pod ps
This commit is contained in:
@@ -162,7 +162,7 @@ func FilterAllPodsWithFilterFunc(r *libpod.Runtime, filters ...libpod.PodFilter)
|
||||
func GenerateFilterFunction(r *libpod.Runtime, filters []string) ([]libpod.PodFilter, error) {
|
||||
var filterFuncs []libpod.PodFilter
|
||||
for _, f := range filters {
|
||||
filterSplit := strings.Split(f, "=")
|
||||
filterSplit := strings.SplitN(f, "=", 2)
|
||||
if len(filterSplit) < 2 {
|
||||
return nil, errors.Errorf("filter input must be in the form of filter=value: %s is invalid", f)
|
||||
}
|
||||
@@ -256,6 +256,22 @@ func generatePodFilterFuncs(filter, filterValue string) (
|
||||
}
|
||||
return false
|
||||
}, nil
|
||||
case "label":
|
||||
var filterArray = strings.SplitN(filterValue, "=", 2)
|
||||
var filterKey = filterArray[0]
|
||||
if len(filterArray) > 1 {
|
||||
filterValue = filterArray[1]
|
||||
} else {
|
||||
filterValue = ""
|
||||
}
|
||||
return func(p *libpod.Pod) bool {
|
||||
for labelKey, labelValue := range p.Labels() {
|
||||
if labelKey == filterKey && ("" == filterValue || labelValue == filterValue) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}, nil
|
||||
}
|
||||
return nil, errors.Errorf("%s is an invalid filter", filter)
|
||||
}
|
||||
|
||||
@@ -520,6 +520,21 @@ func (p *PodmanTestIntegration) CreatePod(name string) (*PodmanSessionIntegratio
|
||||
return session, session.ExitCode(), session.OutputToString()
|
||||
}
|
||||
|
||||
// CreatePod creates a pod with no infra container and some labels.
|
||||
// it optionally takes a pod name
|
||||
func (p *PodmanTestIntegration) CreatePodWithLabels(name string, labels map[string]string) (*PodmanSessionIntegration, int, string) {
|
||||
var podmanArgs = []string{"pod", "create", "--infra=false", "--share", ""}
|
||||
if name != "" {
|
||||
podmanArgs = append(podmanArgs, "--name", name)
|
||||
}
|
||||
for labelKey, labelValue := range labels {
|
||||
podmanArgs = append(podmanArgs, "--label", fmt.Sprintf("%s=%s", labelKey, labelValue))
|
||||
}
|
||||
session := p.Podman(podmanArgs)
|
||||
session.WaitWithDefaultTimeout()
|
||||
return session, session.ExitCode(), session.OutputToString()
|
||||
}
|
||||
|
||||
func (p *PodmanTestIntegration) RunTopContainerInPod(name, pod string) *PodmanSessionIntegration {
|
||||
var podmanArgs = []string{"run", "--pod", pod}
|
||||
if name != "" {
|
||||
|
||||
@@ -204,4 +204,27 @@ var _ = Describe("Podman ps", func() {
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
Expect(session.OutputToString()).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("podman pod ps filter labels", func() {
|
||||
_, ec, podid1 := podmanTest.CreatePod("")
|
||||
Expect(ec).To(Equal(0))
|
||||
|
||||
_, ec, podid2 := podmanTest.CreatePodWithLabels("", map[string]string{
|
||||
"io.podman.test.label": "value1",
|
||||
"io.podman.test.key": "irrelevant-value",
|
||||
})
|
||||
Expect(ec).To(Equal(0))
|
||||
|
||||
_, ec, podid3 := podmanTest.CreatePodWithLabels("", map[string]string{
|
||||
"io.podman.test.label": "value2",
|
||||
})
|
||||
Expect(ec).To(Equal(0))
|
||||
|
||||
session := podmanTest.Podman([]string{"pod", "ps", "--no-trunc", "--filter", "label=io.podman.test.key", "--filter", "label=io.podman.test.label=value1"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
Expect(session.OutputToString()).To(Not(ContainSubstring(podid1)))
|
||||
Expect(session.OutputToString()).To(ContainSubstring(podid2))
|
||||
Expect(session.OutputToString()).To(Not(ContainSubstring(podid3)))
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user