Skip to content

Commit 62d315c

Browse files
committed
pkg/client/fake/client.go: get gvk without potential panic in List()
1 parent 0f0740d commit 62d315c

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

pkg/client/fake/client.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ import (
2020
"context"
2121
"encoding/json"
2222
"os"
23+
"strings"
2324

2425
"k8s.io/apimachinery/pkg/api/meta"
2526
"k8s.io/apimachinery/pkg/runtime"
2627
"k8s.io/apimachinery/pkg/runtime/schema"
2728
"k8s.io/client-go/kubernetes/scheme"
2829
"k8s.io/client-go/testing"
2930

31+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3032
"sigs.k8s.io/controller-runtime/pkg/client"
3133
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
3234
logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
@@ -78,8 +80,21 @@ func (c *fakeClient) Get(ctx context.Context, key client.ObjectKey, obj runtime.
7880
}
7981

8082
func (c *fakeClient) List(ctx context.Context, opts *client.ListOptions, list runtime.Object) error {
81-
gvk := opts.Raw.TypeMeta.GroupVersionKind()
83+
var gvk schema.GroupVersionKind
84+
if opts.Raw != nil && opts.Raw.TypeMeta != (metav1.TypeMeta{}) {
85+
gvk = opts.Raw.TypeMeta.GroupVersionKind()
86+
} else {
87+
var err error
88+
gvk, err = apiutil.GVKForObject(list, scheme.Scheme)
89+
if err != nil {
90+
return err
91+
}
92+
if strings.HasSuffix(gvk.Kind, "List") {
93+
gvk.Kind = gvk.Kind[:len(gvk.Kind)-4]
94+
}
95+
}
8296
gvr, _ := meta.UnsafeGuessKindToResource(gvk)
97+
8398
o, err := c.tracker.List(gvr, gvk, opts.Namespace)
8499
if err != nil {
85100
return err

0 commit comments

Comments
 (0)