133 lines
5.0 KiB
Python
133 lines
5.0 KiB
Python
import re
|
|
|
|
# ── envwatcher.go ─────────────────────────────────────────────────────────────
|
|
with open("/home/naeel/terra/fission-src/pkg/buildermgr/envwatcher.go") as f:
|
|
src = f.read()
|
|
|
|
# добавляем genInformer import если нет
|
|
if "genInformer" not in src:
|
|
src = src.replace(
|
|
'"github.com/fission/fission/pkg/generated/clientset/versioned"',
|
|
'"github.com/fission/fission/pkg/generated/clientset/versioned"\n\t'
|
|
'genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"',
|
|
1
|
|
)
|
|
|
|
# добавляем fmt если нет
|
|
if '"fmt"' not in src:
|
|
src = src.replace('"context"', '"context"\n\t"fmt"', 1)
|
|
|
|
addon = r'''
|
|
// AddNamespace dynamically registers a new namespace in environmentWatcher.
|
|
// Creates a per-NS Environment informer. Safe to call repeatedly — deduplicates via nsResolver.
|
|
func (envw *environmentWatcher) AddNamespace(ctx context.Context, ns string, mgr manager.Interface) {
|
|
if !envw.nsResolver.AddNamespace(ns) {
|
|
return // already registered
|
|
}
|
|
envw.logger.Info("buildermgr.envWatcher.AddNamespace: setting up informer", zap.String("namespace", ns))
|
|
|
|
factory := genInformer.NewFilteredSharedInformerFactory(envw.fissionClient, 30*time.Minute, ns, nil)
|
|
envInf := factory.Core().V1().Environments().Informer()
|
|
|
|
_, err := envInf.AddEventHandler(k8sCache.ResourceEventHandlerFuncs{
|
|
AddFunc: func(obj interface{}) {
|
|
envObj := obj.(*fv1.Environment)
|
|
envw.AddUpdateBuilder(ctx, envObj)
|
|
},
|
|
UpdateFunc: func(oldObj interface{}, newObj interface{}) {
|
|
oldEnvObj := oldObj.(*fv1.Environment)
|
|
newEnvObj := newObj.(*fv1.Environment)
|
|
if oldEnvObj.ResourceVersion == newEnvObj.ResourceVersion {
|
|
return
|
|
}
|
|
envw.AddUpdateBuilder(ctx, newEnvObj)
|
|
},
|
|
DeleteFunc: func(obj interface{}) {
|
|
envObj, ok := obj.(*fv1.Environment)
|
|
if !ok {
|
|
return
|
|
}
|
|
envw.deleteBuilder(ctx, envObj)
|
|
},
|
|
})
|
|
if err != nil {
|
|
envw.logger.Error("buildermgr.envWatcher.AddNamespace: add handler failed",
|
|
zap.String("namespace", ns), zap.Error(fmt.Errorf("%w", err)))
|
|
return
|
|
}
|
|
|
|
envw.envWatchInformer[ns] = envInf
|
|
mgr.AddInformers(ctx, map[string]k8sCache.SharedIndexInformer{ns: envInf})
|
|
envw.logger.Info("buildermgr.envWatcher.AddNamespace: done", zap.String("namespace", ns))
|
|
}
|
|
'''
|
|
|
|
with open("/home/naeel/terra/fission-src/pkg/buildermgr/envwatcher.go", "w") as f:
|
|
f.write(src + addon)
|
|
print("envwatcher.go: done")
|
|
|
|
# ── pkgwatcher.go ─────────────────────────────────────────────────────────────
|
|
with open("/home/naeel/terra/fission-src/pkg/buildermgr/pkgwatcher.go") as f:
|
|
src = f.read()
|
|
|
|
# добавляем genInformer import если нет
|
|
if "genInformer" not in src:
|
|
src = src.replace(
|
|
'"github.com/fission/fission/pkg/generated/clientset/versioned"',
|
|
'"github.com/fission/fission/pkg/generated/clientset/versioned"\n\t'
|
|
'genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"',
|
|
1
|
|
)
|
|
|
|
# добавляем fmt если нет
|
|
if '"fmt"' not in src:
|
|
src = src.replace('"context"', '"context"\n\t"fmt"', 1)
|
|
|
|
# Добавляем k8sInformers если нет
|
|
if "k8sInformers" not in src:
|
|
src = src.replace(
|
|
'"k8s.io/client-go/kubernetes"',
|
|
'"k8s.io/client-go/kubernetes"\n\tk8sInformers "k8s.io/client-go/informers"',
|
|
1
|
|
)
|
|
|
|
addon2 = r'''
|
|
// AddNamespace dynamically registers a new namespace in packageWatcher.
|
|
// Creates per-NS Package and Pod informers. Safe to call repeatedly.
|
|
func (pkgw *packageWatcher) AddNamespace(ctx context.Context, ns string, mgr manager.Interface) {
|
|
if !pkgw.nsResolver.AddNamespace(ns) {
|
|
return // already registered
|
|
}
|
|
pkgw.logger.Info("buildermgr.pkgWatcher.AddNamespace: setting up informers", zap.String("namespace", ns))
|
|
|
|
// Package informer
|
|
fissionFactory := genInformer.NewFilteredSharedInformerFactory(pkgw.fissionClient, 30*time.Minute, ns, nil)
|
|
pkgInf := fissionFactory.Core().V1().Packages().Informer()
|
|
|
|
_, err := pkgInf.AddEventHandler(pkgw.packageInformerHandler(ctx))
|
|
if err != nil {
|
|
pkgw.logger.Error("buildermgr.pkgWatcher.AddNamespace: pkg handler failed",
|
|
zap.String("namespace", ns), zap.Error(fmt.Errorf("%w", err)))
|
|
return
|
|
}
|
|
|
|
// Pod informer for build logs
|
|
podFactory := k8sInformers.NewSharedInformerFactoryWithOptions(pkgw.k8sClient, 30*time.Minute,
|
|
k8sInformers.WithNamespace(ns))
|
|
podInf := podFactory.Core().V1().Pods().Informer()
|
|
|
|
pkgw.pkgInformer[ns] = pkgInf
|
|
pkgw.podInformer[ns] = podInf
|
|
|
|
mgr.AddInformers(ctx, map[string]k8sCache.SharedIndexInformer{
|
|
ns + "/pkg": pkgInf,
|
|
ns + "/pod": podInf,
|
|
})
|
|
pkgw.logger.Info("buildermgr.pkgWatcher.AddNamespace: done", zap.String("namespace", ns))
|
|
}
|
|
'''
|
|
|
|
with open("/home/naeel/terra/fission-src/pkg/buildermgr/pkgwatcher.go", "w") as f:
|
|
f.write(src + addon2)
|
|
print("pkgwatcher.go: done")
|