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.
This commit is contained in:
Arda Güçlü 2023-03-31 12:34:00 +03:00
parent d89d5ab268
commit 457bb58ebb
2 changed files with 19 additions and 4 deletions

View File

@ -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

View File

@ -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"