From 28621f1eb3f3a9ba212c844db4696f7f17450942 Mon Sep 17 00:00:00 2001 From: ithrael Date: Wed, 23 Aug 2023 11:34:44 +0800 Subject: [PATCH 1/4] fix(kubectl): kubectl events doesn't filter events by GroupVersion for resource with full name --- staging/src/k8s.io/kubectl/pkg/cmd/events/events.go | 1 + 1 file changed, 1 insertion(+) 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 152d6316f0f..1830d28f3b4 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/events/events.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/events/events.go @@ -229,6 +229,7 @@ func (o *EventsOptions) Run() error { if o.forName != "" { listOptions.FieldSelector = fields.AndSelectors( fields.OneTermEqualSelector("involvedObject.kind", o.forGVK.Kind), + fields.OneTermEqualSelector("involvedObject.apiVersion", o.forGVK.GroupVersion().String()), fields.OneTermEqualSelector("involvedObject.name", o.forName)).String() } if o.Watch { From 903156daa2b70a02460749f2c728beb41f7796cb Mon Sep 17 00:00:00 2001 From: ithrael Date: Thu, 31 Aug 2023 23:51:54 +0800 Subject: [PATCH 2/4] fix(test): add e2e-test for kubectl events filter by GroupVersion --- test/cmd/events.sh | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/test/cmd/events.sh b/test/cmd/events.sh index 1ada5dae2de..a7c1c952b9a 100755 --- a/test/cmd/events.sh +++ b/test/cmd/events.sh @@ -42,6 +42,62 @@ run_kubectl_events_tests() { kube::test::get_object_assert 'cronjob --namespace=test-events' "{{range.items}}{{ if eq $id_field \"pi\" }}found{{end}}{{end}}:" ':' ### Create a cronjob in a specific namespace kubectl create cronjob pi --schedule="59 23 31 2 *" --namespace=test-events "--image=$IMAGE_PERL" -- perl -Mbignum=bpi -wle 'print bpi(20)' "${kube_flags[@]:?}" + ### Create a crd + kubectl create -f - << __EOF__ +{ + "kind": "CustomResourceDefinition", + "apiVersion": "apiextensions.k8s.io/v1", + "metadata": { + "name": "cronjobs.example.com" + }, + "spec": { + "group": "example.com", + "scope": "Namespaced", + "names": { + "plural": "cronjobs", + "singular": "cronjob", + "kind": "Cronjob", + "shortNames": ["mycj"] + }, + "versions": [ + { + "name": "v1", + "served": true, + "storage": true, + "schema": { + "openAPIV3Schema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "image": {"type": "string"} + } + } + } + } + } + } + ] + } +} +__EOF__ + + ### Create a example.com/v1 Cronjob in a specific namespace + kubectl create -f - << __EOF__ +{ + "kind": "Cronjob", + "apiVersion": "example.com/v1", + "metadata": { + "name": "pi", + "namespace": "test-events" + }, + "spec": { + "image": "test" + } +} +__EOF__ + # Post-Condition: assertion object exists kube::test::get_object_assert 'cronjob/pi --namespace=test-events' "{{$id_field}}" 'pi' @@ -61,6 +117,10 @@ run_kubectl_events_tests() { 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 not returns event for fully qualified Cronjob.v1.example.com/pi when --for flag is used + output_message=$(kubectl events -n test-events --for Cronjob.v1.example.com/pi "${kube_flags[@]:?}" 2>&1) + kube::test::if_has_not_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" @@ -92,6 +152,8 @@ run_kubectl_events_tests() { #Clean up kubectl delete cronjob pi --namespace=test-events + kubectl delete mycj pi --namespace=test-events + kubectl delete crd cronjobs.example.com kubectl delete namespace test-events set +o nounset From 36e33cd88e8d40fdae077f9c958bd7ea0d0bf085 Mon Sep 17 00:00:00 2001 From: ithrael Date: Fri, 1 Sep 2023 22:16:06 +0800 Subject: [PATCH 3/4] fix(test): Remove 'shortNames' Property from CronJob Fields in e2e-test --- test/cmd/events.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/cmd/events.sh b/test/cmd/events.sh index a7c1c952b9a..439a776686a 100755 --- a/test/cmd/events.sh +++ b/test/cmd/events.sh @@ -56,8 +56,7 @@ run_kubectl_events_tests() { "names": { "plural": "cronjobs", "singular": "cronjob", - "kind": "Cronjob", - "shortNames": ["mycj"] + "kind": "Cronjob" }, "versions": [ { From 39e433891bcbe7e8452ee5d66b6cba0590771543 Mon Sep 17 00:00:00 2001 From: ithrael Date: Fri, 1 Sep 2023 23:13:26 +0800 Subject: [PATCH 4/4] fix(test): delete cronjobs.v1.example.com pi for clean up --- test/cmd/events.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cmd/events.sh b/test/cmd/events.sh index 439a776686a..5532fb2317b 100755 --- a/test/cmd/events.sh +++ b/test/cmd/events.sh @@ -151,7 +151,7 @@ __EOF__ #Clean up kubectl delete cronjob pi --namespace=test-events - kubectl delete mycj pi --namespace=test-events + kubectl delete cronjobs.v1.example.com pi --namespace=test-events kubectl delete crd cronjobs.example.com kubectl delete namespace test-events