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")