46 lines
878 B
Go

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
}