From 457bb58ebbf5a863ce30f51c53a84bc41c2380dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arda=20G=C3=BC=C3=A7l=C3=BC?= Date: Fri, 31 Mar 2023 12:34:00 +0300 Subject: [PATCH] kubectl events: Support fully qualified names for --for flag Users can pass resources into `kubectl events` command via `--for` flag, if they have desire to only get events for the resource they specify. However, current `kubectl events` does not support passing fully qualified names(e.g. `replicasets.apps`, `cronjobs.v1.batch`, etc.). This PR adds support for this. --- .../src/k8s.io/kubectl/pkg/cmd/events/events.go | 15 +++++++++++---- test/cmd/events.sh | 8 ++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/events/events.go b/staging/src/k8s.io/kubectl/pkg/cmd/events/events.go index f2cc941ca56..4cc12fbfa92 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/events/events.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/events/events.go @@ -386,11 +386,18 @@ func decodeResourceTypeName(mapper meta.RESTMapper, s string) (gvk schema.GroupV } resource, name := seg[0], seg[1] - var gvr schema.GroupVersionResource - gvr, err = mapper.ResourceFor(schema.GroupVersionResource{Resource: resource}) - if err != nil { - return + fullySpecifiedGVR, groupResource := schema.ParseResourceArg(strings.ToLower(resource)) + gvr := schema.GroupVersionResource{} + if fullySpecifiedGVR != nil { + gvr, _ = mapper.ResourceFor(*fullySpecifiedGVR) } + if gvr.Empty() { + gvr, err = mapper.ResourceFor(groupResource.WithVersion("")) + if err != nil { + return + } + } + gvk, err = mapper.KindFor(gvr) if err != nil { return diff --git a/test/cmd/events.sh b/test/cmd/events.sh index 0dc9200c55d..1ada5dae2de 100755 --- a/test/cmd/events.sh +++ b/test/cmd/events.sh @@ -57,6 +57,14 @@ run_kubectl_events_tests() { output_message=$(kubectl events -n test-events --for=Cronjob/pi "${kube_flags[@]:?}" 2>&1) kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi" + # Post-Condition: events returns event for fully qualified Cronjob.v1.batch/pi when --for flag is used + output_message=$(kubectl events -n test-events --for Cronjob.v1.batch/pi "${kube_flags[@]:?}" 2>&1) + kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi" + + # Post-Condition: events returns event for fully qualified without version Cronjob.batch/pi when --for flag is used + output_message=$(kubectl events -n test-events --for=Cronjob.batch/pi "${kube_flags[@]:?}" 2>&1) + kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi" + # Post-Condition: events returns event for Cronjob/pi when watch is enabled output_message=$(kubectl events -n test-events --for=Cronjob/pi --watch --request-timeout=1 "${kube_flags[@]:?}" 2>&1) kube::test::if_has_string "${output_message}" "Warning" "InvalidSchedule" "Cronjob/pi"