events: include labels in pod and volume attributes

Fixes: #26480

Signed-off-by: Jiwoo Ahn <ikwydls1314@gmail.com>
This commit is contained in:
Jiwoo Ahn 2026-06-08 16:00:06 +09:00
parent 334e0f23c8
commit ef2d2e4a58
3 changed files with 33 additions and 6 deletions

View file

@ -126,12 +126,10 @@ func (c *Container) newExecDiedEvent(sessionID string, exitCode int) {
e.Type = events.Container
intExitCode := exitCode
e.ContainerExitCode = &intExitCode
e.Attributes = make(map[string]string)
e.Attributes["execID"] = sessionID
e.Details = events.Details{
Attributes: c.Labels(),
}
attrs := c.Labels()
attrs["execID"] = sessionID
e.Attributes = attrs
if err := c.runtime.eventer.Write(e); err != nil {
logrus.Errorf("Unable to write exec died event: %q", err)
@ -169,6 +167,7 @@ func (p *Pod) newPodEvent(status events.Status) {
e.ID = p.ID()
e.Name = p.Name()
e.Type = events.Pod
e.Attributes = p.Labels()
if err := p.runtime.eventer.Write(e); err != nil {
logrus.Errorf("Unable to write pod event: %q", err)
}
@ -189,6 +188,7 @@ func (v *Volume) newVolumeEvent(status events.Status) {
e := events.NewEvent(status)
e.Name = v.Name()
e.Type = events.Volume
e.Attributes = v.Labels()
if err := v.runtime.eventer.Write(e); err != nil {
logrus.Errorf("Unable to write volume event: %q", err)
}

View file

@ -77,6 +77,9 @@ func (e EventJournalD) Write(ee Event) error {
}
case Volume:
m["PODMAN_NAME"] = ee.Name
if err := addLabelsToJournal(m, ee.Details.Attributes); err != nil {
return err
}
}
// starting with commit 7e6e267329 we set LogLevel=notice for the systemd healthcheck unit
@ -275,6 +278,10 @@ func newEventFromJournalEntry(entry *sdjournal.JournalEntry) (*Event, error) {
}
}
newEvent.Details.ContainerInspectData = entry.Fields["PODMAN_CONTAINER_INSPECT_DATA"]
case Volume:
if err := getLabelsFromJournal(entry, &newEvent); err != nil {
return nil, err
}
case Network:
newEvent.ID = entry.Fields["PODMAN_ID"]
newEvent.Network = entry.Fields["PODMAN_NETWORK_NAME"]

View file

@ -443,7 +443,9 @@ EOF
# bats test_tags=ci:parallel
@test "events - volume events" {
local vname=v-$(safename)
run_podman volume create $vname
local lname=label$(safename | tr -d -)
local lvalue="labelvalue-$(safename) $(random_string 5)"
run_podman volume create --label="$lname=$lvalue" $vname
run_podman volume rm $vname
run_podman events --since=1m --stream=false --filter volume=$vname
@ -454,6 +456,10 @@ EOF
# Prefix test
run_podman events --since=1m --stream=false --filter volume=${vname:0:9}
assert "$output" = "$notrunc_results"
# Labels test
run_podman events --since=1m --stream=false --filter volume=$vname --filter event=create --format "{{.Attributes}}"
assert "$output" =~ "${lname}:${lvalue}" "podman-events output includes volume label"
}
# bats test_tags=ci:parallel
@ -461,3 +467,17 @@ EOF
run_podman 125 events --since="the dawn of time...ish"
assert "$output" =~ "failed to parse event filters"
}
# bats test_tags=ci:parallel
@test "events - pod labels in event attributes" {
local pname=p-$(safename)
local lname=label$(safename | tr -d -)
local lvalue="labelvalue-$(safename) $(random_string 5)"
run_podman pod create --name $pname --label "$lname=$lvalue"
run_podman events --since=1m --stream=false --filter type=pod --filter event=create --format "{{.Name}} {{.Attributes}}"
assert "$output" =~ "$pname .*${lname}:${lvalue}" "podman-events output includes pod label"
run_podman pod rm -f $pname
}