1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-29 02:45:06 +00:00

fix: don't filter on group when service based apiservice discovery fails (#6766)

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
This commit is contained in:
Charles-Edouard Brétéché 2023-04-03 16:44:01 +02:00 committed by GitHub
parent 247af9d516
commit 9ac141fcb9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 3 additions and 62 deletions

View file

@ -133,7 +133,7 @@ func (c serverResources) findResourceFromResourceName(gvr schema.GroupVersionRes
if err != nil && !strings.Contains(err.Error(), "Got empty response for") {
if discovery.IsGroupDiscoveryFailedError(err) {
logDiscoveryErrors(err)
} else if isMetricsServerUnavailable(gvr.GroupVersion(), err) {
} else if isServerCurrentlyUnableToHandleRequest(err) {
logger.V(3).Info("failed to find preferred resource version", "error", err.Error())
} else {
logger.Error(err, "failed to find preferred resource version")
@ -257,14 +257,14 @@ func (c serverResources) findResource(groupVersion string, kind string) (apiReso
serverPreferredResources, _ := c.cachedClient.ServerPreferredResources()
_, serverGroupsAndResources, err := c.cachedClient.ServerGroupsAndResources()
if err != nil && !strings.Contains(err.Error(), "Got empty response for") {
gv, err := schema.ParseGroupVersion(groupVersion)
_, err := schema.ParseGroupVersion(groupVersion)
if err != nil {
logger.Error(err, "failed to parse group/version", "groupVersion", groupVersion)
return nil, nil, schema.GroupVersionResource{}, err
}
if discovery.IsGroupDiscoveryFailedError(err) {
logDiscoveryErrors(err)
} else if isMetricsServerUnavailable(gv, err) {
} else if isServerCurrentlyUnableToHandleRequest(err) {
logger.V(3).Info("failed to find preferred resource version", "error", err.Error())
} else {
logger.Error(err, "failed to find preferred resource version")

View file

@ -3,7 +3,6 @@ package dclient
import (
"strings"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/discovery"
)
@ -26,10 +25,3 @@ func logDiscoveryErrors(err error) {
func isServerCurrentlyUnableToHandleRequest(err error) bool {
return err != nil && strings.Contains(err.Error(), "the server is currently unable to handle the request")
}
func isMetricsServerUnavailable(gv schema.GroupVersion, err error) bool {
// error message is defined at:
// https://github.com/kubernetes/apimachinery/blob/2456ebdaba229616fab2161a615148884b46644b/pkg/api/errors/errors.go#L432
return (gv.Group == "metrics.k8s.io" || gv.Group == "custom.metrics.k8s.io" || gv.Group == "external.metrics.k8s.io") &&
isServerCurrentlyUnableToHandleRequest(err)
}

View file

@ -3,8 +3,6 @@ package dclient
import (
"errors"
"testing"
"k8s.io/apimachinery/pkg/runtime/schema"
)
func Test_isServerCurrentlyUnableToHandleRequest(t *testing.T) {
@ -54,52 +52,3 @@ func Test_isServerCurrentlyUnableToHandleRequest(t *testing.T) {
})
}
}
func Test_isMetricsServerUnavailable(t *testing.T) {
type args struct {
gv schema.GroupVersion
err error
}
tests := []struct {
name string
args args
want bool
}{{
args: args{
gv: schema.GroupVersion{Group: "core", Version: "v1"},
err: nil,
},
want: false,
}, {
args: args{
gv: schema.GroupVersion{Group: "core", Version: "v1"},
err: errors.New("the server is currently unable to handle the request"),
},
want: false,
}, {
args: args{
gv: schema.GroupVersion{Group: "metrics.k8s.io", Version: "v1"},
err: errors.New("the server is currently unable to handle the request"),
},
want: true,
}, {
args: args{
gv: schema.GroupVersion{Group: "custom.metrics.k8s.io", Version: "v1"},
err: errors.New("the server is currently unable to handle the request"),
},
want: true,
}, {
args: args{
gv: schema.GroupVersion{Group: "external.metrics.k8s.io", Version: "v1"},
err: errors.New("the server is currently unable to handle the request"),
},
want: true,
}}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := isMetricsServerUnavailable(tt.args.gv, tt.args.err); got != tt.want {
t.Errorf("isMetricsServerUnavailable() = %v, want %v", got, tt.want)
}
})
}
}