From 0666b4ffbf3cf88031dadb2a0d1002a0235d26be Mon Sep 17 00:00:00 2001 From: TusharMohapatra07 Date: Thu, 31 Jul 2025 15:09:15 +0530 Subject: [PATCH] events: add support for label filter with key only Fixes: #26702 Signed-off-by: TusharMohapatra07 --- docs/source/markdown/podman-events.1.md | 2 +- libpod/events/filters.go | 22 ++++++++++++++-------- test/system/090-events.bats | 4 ++++ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/docs/source/markdown/podman-events.1.md b/docs/source/markdown/podman-events.1.md index 4052a50f32..9eb898c93d 100644 --- a/docs/source/markdown/podman-events.1.md +++ b/docs/source/markdown/podman-events.1.md @@ -99,7 +99,7 @@ filters are supported: | container | [Name or ID] Container's name or ID | | event | event_status (described above) | | image | [Name or ID] Image name or ID | -| label | [key=value] label | +| label | [key] or [key=value] label | | pod | [Name or ID] Pod name or ID | | volume | [Name or ID] Volume name or ID | | type | Event_type (described above) | diff --git a/libpod/events/filters.go b/libpod/events/filters.go index 00bdd19ee5..3bb22114e6 100644 --- a/libpod/events/filters.go +++ b/libpod/events/filters.go @@ -67,14 +67,20 @@ func generateEventFilter(filter, filterValue string) (func(e *Event) bool, error var found bool // iterate labels and see if we match a key and value for eventKey, eventValue := range e.Attributes { - filterValueSplit := strings.SplitN(filterValue, "=", 2) - // if the filter isn't right, just return false - if len(filterValueSplit) < 2 { - return false - } - if eventKey == filterValueSplit[0] && eventValue == filterValueSplit[1] { - found = true - break + filterKey, filterVal, hasValue := strings.Cut(filterValue, "=") + // match "key=value" or "key" + if !hasValue { + // match by key only + if eventKey == filterKey { + found = true + break + } + } else { + // match by key and value + if eventKey == filterKey && eventValue == filterVal { + found = true + break + } } } return found diff --git a/test/system/090-events.bats b/test/system/090-events.bats index ff3ffb8b61..6ad67bbbb5 100644 --- a/test/system/090-events.bats +++ b/test/system/090-events.bats @@ -28,6 +28,10 @@ load helpers.network run_podman events --since "$before" --filter type=container --filter container=$cname --filter event=start --stream=false is "$output" "$expect" "filtering just by container" + # Filter just by label key (without value) + run_podman events --since "$before" --filter type=container --filter label=${labelname} --filter event=start --stream=false + is "$output" "$expect" "filtering by label key only" + # check --no-trunc=false truncID=${id:0:12} run_podman events --since "$before" --filter container=$cname --filter event=start --stream=false --no-trunc=false