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:
parent
247af9d516
commit
9ac141fcb9
3 changed files with 3 additions and 62 deletions
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue