2023年11月29日发(作者:)
code-generator⽣成代码
⼀、⽣成代码如下
package main
import (
"flag"
"fmt"
crdv1beta1 "/cnych/controller-demo/pkg/apis/stable/v1beta1"
"/apimachinery/pkg/api/errors"
"/apimachinery/pkg/util/runtime"
"/apimachinery/pkg/util/wait"
"/client-go/tools/cache"
"/client-go/util/workqueue"
"os"
"os/signal"
"path/filepath"
"syscall"
"time"
"/golang/glog"
"/client-go/tools/clientcmd"
"/client-go/util/homedir"
"/klog"
}
crontabClient, err := Config(cfg)
if err != nil {
("Error building example clientset: %s", ())
}
// informerFactory ⼯⼚类, 这⾥注⼊我们通过代码⽣成的 client
// clent 主要⽤于和 API Server 进⾏通信,实现 ListAndWatch
crontabInformerFactory := redInformerFactory(crontabClient, *30)
// 实例化⾃定义控制器
controller := NewController(().V1beta1().CronTabs())
// 启动 informer,开始List & Watch
go (stopCh)
if err = (2, stopCh); err != nil {
("Error running controller: %s", ())
}
}
func NewController(informer bInformer) *Controller {
//使⽤client 和前⾯创建的 Informer,初始化了⾃定义控制器
controller := &Controller{
informer: informer,
// WorkQueue 的实现,负责同步 Informer 和控制循环之间的数据
workqueue: edRateLimitingQueue(tControllerRateLimiter(), "CronTab"),
}
("Setting up crontab event handlers")
// informer 注册了三个 Handler(AddFunc、UpdateFunc 和 DeleteFunc)
// 分别对应 API 对象的“添加”“更新”和“删除”事件。
// ⽽具体的处理操作,都是将该事件对应的 API 对象加⼊到⼯作队列中
er().AddEventHandler(ceEventHandlerFuncs{
AddFunc: eCronTab,
UpdateFunc: func(old, new interface{}) {
oldObj := old.(*b)
newObj := new.(*b)
// 如果资源版本相同则不处理
if ceVersion == ceVersion {
return
}
eCronTab(new)
},
DeleteFunc: eCronTabForDelete,
})
return controller
}
func (c *Controller) Run(threadiness int, stopCh <-chan struct{}) error {
defer Crash()
defer wn()
// 记录开始⽇志
("Starting CronTab control loop")
("Waiting for informer caches to sync")
if ok := rCacheSync(stopCh, er().HasSynced); !ok {
return ("failed to wait for caches to sync")
if shutdown {
return false
}
err := func(obj interface{}) error {
defer (obj)
var key string
var ok bool
if key, ok = obj.(string); !ok {
(obj)
Error(("expected string in workqueue but got %#v", obj))
return nil
}
if err := ndler(key); err != nil {
return ("error syncing '%s': %s", key, ())
}
(obj)
("Successfully synced '%s'", key)
return nil
}(obj)
if err != nil {


发布评论