package crd import ( "flink-kube-operator/internal/crd/v1alpha1" "k8s.io/client-go/dynamic" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" ) type Crd struct { client dynamic.NamespaceableResourceInterface } func New() *Crd { // Get Kubernetes config config, err := clientcmd.BuildConfigFromFlags("", clientcmd.RecommendedHomeFile) if err != nil { config, err = rest.InClusterConfig() if err != nil { panic(err) } } // Create dynamic client dynamicClient, err := dynamic.NewForConfig(config) if err != nil { panic(err) } // Get FlinkJob resource interface flinkJobClient := dynamicClient.Resource(v1alpha1.FlinkJobGVR) crd := Crd{ client: flinkJobClient, } // Watch for FlinkJob creation jobEventObservable := crd.watchFlinkJobs() // add finalizer to new resources go crd.manageFinalizer(jobEventObservable) return &crd }