layer1: hook builder watcher to namespace manager

This commit is contained in:
Naeel
2026-04-26 10:33:36 +03:00
parent ad0f83fd4b
commit b12a8e5e75
2 changed files with 35 additions and 4 deletions
@@ -0,0 +1,20 @@
# 2026-04-26 — NamespaceManager rewrite, step 27
## Цель шага
Сделать первый реальный runtime hook на `NamespaceManager` в `buildermgr` watcher.
## Что меняем
1. `buildermgr.StartNSWatcher()` поднимает локальный `NamespaceManager`.
2. В manager заранее bootstrapped текущий snapshot resolver-а.
3. Watcher `Add/Update` события прогоняет через:
- `Upsert()`
- `DispatchAdd()` или `DispatchResync()`
4. Подписчиком manager-а становится уже существующий `buildermgr` subscriber adapter.
## Что НЕ меняем
- не меняем `registerBuilderNamespace()`;
- не добавляем remove path;
- не меняем остальные компоненты.
+15 -4
View File
@@ -30,6 +30,9 @@ func StartNSWatcher(
pkgw *packageWatcher,
mgr manager.Interface,
) {
nsManager := utils.NewBootstrappedNamespaceManager(utils.DefaultNSResolver(), utils.NamespaceSourceEnv, time.Now().UTC())
nsManager.Subscribe(NewNamespaceSubscriber(envw, pkgw, mgr))
factory := k8sInformers.NewSharedInformerFactoryWithOptions(
kubeClient,
30*time.Minute,
@@ -42,18 +45,26 @@ func StartNSWatcher(
_, _ = nsInformer.AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
ns := builderNSName(obj)
if ns == "" {
nsObj, ok := obj.(*corev1.Namespace)
if !ok || nsObj.Name == "" {
return
}
registerBuilderNamespace(ctx, ns, envw, pkgw, mgr)
nsManager.Upsert(utils.NamespaceEventFromNamespace(utils.NamespaceEventAdd, nsObj, utils.NamespaceSourceWatcher, time.Now().UTC()))
if _, _, err := nsManager.DispatchAdd(ctx, nsObj.Name); err != nil {
logger.Error("buildermgr.NSWatcher: DispatchAdd failed",
zap.String("namespace", nsObj.Name), zap.Error(err))
}
},
UpdateFunc: func(_, newObj interface{}) {
nsObj, ok := newObj.(*corev1.Namespace)
if !ok || !utils.IsManagedNamespace(nsObj.Labels) {
return
}
registerBuilderNamespace(ctx, nsObj.Name, envw, pkgw, mgr)
nsManager.Upsert(utils.NamespaceEventFromNamespace(utils.NamespaceEventUpdate, nsObj, utils.NamespaceSourceWatcher, time.Now().UTC()))
if _, _, err := nsManager.DispatchResync(ctx, nsObj.Name); err != nil {
logger.Error("buildermgr.NSWatcher: DispatchResync failed",
zap.String("namespace", nsObj.Name), zap.Error(err))
}
},
})