|
|
|
@ -221,18 +221,28 @@ func (blder *Builder) project(obj client.Object, proj objectProjection) (client.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (blder *Builder) doWatch() error {
|
|
|
|
|
// 创建一个类型(中间类型)
|
|
|
|
|
// Reconcile type
|
|
|
|
|
typeForSrc, err := blder.project(blder.forInput.object, blder.forInput.objectProjection)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建源头的类型
|
|
|
|
|
src := &source.Kind{Type: typeForSrc}
|
|
|
|
|
// 消息的回调函数
|
|
|
|
|
hdler := &handler.EnqueueRequestForObject{}
|
|
|
|
|
|
|
|
|
|
// 处理全局的回调,如果外部没有手动添加,这里不会有实质性作用。也就是说我们可以自己添加回调函数来有更多的处理。
|
|
|
|
|
allPredicates := append(blder.globalPredicates, blder.forInput.predicates...)
|
|
|
|
|
|
|
|
|
|
// 调用 Watch 函数,蓝监控事件。比较底层的方法。在比较老的版本中很常用。目前不推荐使用。
|
|
|
|
|
if err := blder.ctrl.Watch(src, hdler, allPredicates...); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用 Watch 函数,蓝监控Input源中的事件。
|
|
|
|
|
// Watches the managed types
|
|
|
|
|
for _, own := range blder.ownsInput {
|
|
|
|
|
typeForSrc, err := blder.project(own.object, own.objectProjection)
|
|
|
|
@ -251,6 +261,7 @@ func (blder *Builder) doWatch() error {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 调用 Watch 函数,蓝监控Owns源中的事件。
|
|
|
|
|
// Do the watch requests
|
|
|
|
|
for _, w := range blder.watchesInput {
|
|
|
|
|
allPredicates := append([]predicate.Predicate(nil), blder.globalPredicates...)
|
|
|
|
@ -280,9 +291,12 @@ func (blder *Builder) getControllerName(gvk schema.GroupVersionKind) string {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (blder *Builder) doController(r reconcile.Reconciler) error {
|
|
|
|
|
// 初始化 全局 的选项,主要是 并发度的控制,同步超时时间
|
|
|
|
|
globalOpts := blder.mgr.GetControllerOptions()
|
|
|
|
|
|
|
|
|
|
// 初始化 controller 的选项,主要是来自外部的设置
|
|
|
|
|
ctrlOptions := blder.ctrlOptions
|
|
|
|
|
// 将我们定义的 reconcile 函数,复制给 controller 的 reconcile
|
|
|
|
|
if ctrlOptions.Reconciler == nil {
|
|
|
|
|
ctrlOptions.Reconciler = r
|
|
|
|
|
}
|
|
|
|
@ -294,6 +308,7 @@ func (blder *Builder) doController(r reconcile.Reconciler) error {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置并发度
|
|
|
|
|
// Setup concurrency.
|
|
|
|
|
if ctrlOptions.MaxConcurrentReconciles == 0 {
|
|
|
|
|
groupKind := gvk.GroupKind().String()
|
|
|
|
@ -303,13 +318,16 @@ func (blder *Builder) doController(r reconcile.Reconciler) error {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置同步的超时时间
|
|
|
|
|
// Setup cache sync timeout.
|
|
|
|
|
if ctrlOptions.CacheSyncTimeout == 0 && globalOpts.CacheSyncTimeout != nil {
|
|
|
|
|
ctrlOptions.CacheSyncTimeout = *globalOpts.CacheSyncTimeout
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建 controller 名字
|
|
|
|
|
controllerName := blder.getControllerName(gvk)
|
|
|
|
|
|
|
|
|
|
// 设置日志
|
|
|
|
|
// Setup the logger.
|
|
|
|
|
if ctrlOptions.LogConstructor == nil {
|
|
|
|
|
log := blder.mgr.GetLogger().WithValues(
|
|
|
|
|