multi-tenant: EnsureNamespaceSA + ns_watcher SA provisioning (v8)
This commit is contained in:
@@ -39,6 +39,7 @@ import (
|
||||
"github.com/fission/fission/pkg/executor/util"
|
||||
fetcherConfig "github.com/fission/fission/pkg/fetcher/config"
|
||||
"github.com/fission/fission/pkg/generated/clientset/versioned"
|
||||
genInformer "github.com/fission/fission/pkg/generated/informers/externalversions"
|
||||
"github.com/fission/fission/pkg/utils"
|
||||
"github.com/fission/fission/pkg/utils/manager"
|
||||
)
|
||||
@@ -498,3 +499,47 @@ func (envw *environmentWatcher) createBuilderDeployment(ctx context.Context, env
|
||||
|
||||
return deployment, nil
|
||||
}
|
||||
|
||||
// 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})
|
||||
factory.Start(ctx.Done())
|
||||
envw.logger.Info("buildermgr.envWatcher.AddNamespace: done", zap.String("namespace", ns))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user