diff --git a/cmd/cdi-controller/BUILD.bazel b/cmd/cdi-controller/BUILD.bazel index 978da16a7f..fef03a76d1 100644 --- a/cmd/cdi-controller/BUILD.bazel +++ b/cmd/cdi-controller/BUILD.bazel @@ -27,13 +27,16 @@ go_library( "//vendor/k8s.io/api/batch/v1:go_default_library", "//vendor/k8s.io/api/networking/v1:go_default_library", "//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", + "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", "//vendor/sigs.k8s.io/controller-runtime/pkg/cache:go_default_library", + "//vendor/sigs.k8s.io/controller-runtime/pkg/client/apiutil:go_default_library", "//vendor/sigs.k8s.io/controller-runtime/pkg/client/config:go_default_library", "//vendor/sigs.k8s.io/controller-runtime/pkg/log:go_default_library", "//vendor/sigs.k8s.io/controller-runtime/pkg/log/zap:go_default_library", diff --git a/cmd/cdi-controller/controller.go b/cmd/cdi-controller/controller.go index c3bcea379e..e6f3947340 100644 --- a/cmd/cdi-controller/controller.go +++ b/cmd/cdi-controller/controller.go @@ -18,13 +18,16 @@ import ( batchv1 "k8s.io/api/batch/v1" networkingv1 "k8s.io/api/networking/v1" extv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/fields" apiruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes" clientgoscheme "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/cache" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" "sigs.k8s.io/controller-runtime/pkg/client/config" logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" @@ -170,16 +173,26 @@ func start() { } } + clientcfg := config.GetConfigOrDie() + mapper, err := apiutil.NewDynamicRESTMapper(clientcfg) + if err != nil { + klog.Errorf("Failed to create rest mapper %v", err) + os.Exit(1) + } + mapperProvider := func(c *rest.Config) (meta.RESTMapper, error) { + return mapper, nil + } opts := manager.Options{ LeaderElection: true, LeaderElectionNamespace: namespace, LeaderElectionID: "cdi-controller-leader-election-helper", LeaderElectionResourceLock: "leases", - NewCache: getNewManagerCache(namespace), + NewCache: getNewManagerCache(namespace, mapper), Scheme: scheme, + MapperProvider: mapperProvider, } - mgr, err := manager.New(config.GetConfigOrDie(), opts) + mgr, err := manager.New(clientcfg, opts) if err != nil { klog.Errorf("Unable to setup controller manager: %v", err) os.Exit(1) @@ -377,7 +390,7 @@ func registerMetrics() { // Note: objects you read once with the controller runtime client are cached. // TODO: Make our watches way more specific using labels, for example, // at the point of writing this, we don't care about VolumeSnapshots without the CDI label -func getNewManagerCache(cdiNamespace string) cache.NewCacheFunc { +func getNewManagerCache(cdiNamespace string, mapper meta.RESTMapper) cache.NewCacheFunc { namespaceSelector := fields.Set{"metadata.namespace": cdiNamespace}.AsSelector() return cache.BuilderWithOptions( cache.Options{ @@ -395,6 +408,7 @@ func getNewManagerCache(cdiNamespace string) cache.NewCacheFunc { Field: namespaceSelector, }, }, + Mapper: mapper, }, ) }