layer1: add managed watcher config
This commit is contained in:
@@ -110,16 +110,20 @@ func NewWatcherNamespaceManager(ctx context.Context, namespaces []string, source
|
||||
return manager, err
|
||||
}
|
||||
|
||||
func PrepareManagedNamespaceWatcher(ctx context.Context, logger *zap.Logger, component string, namespaces []string, removalStrategy NamespaceRemovalStrategy, subscriber NamespaceSubscriber) (NamespaceManager, k8sCache.ResourceEventHandlerFuncs, error) {
|
||||
manager, err := NewWatcherNamespaceManager(ctx, namespaces, NamespaceSourceEnv, time.Now().UTC(), subscriber)
|
||||
handlers := NewNamespaceWatcherEventHandlers(ctx, logger, component, manager, removalStrategy)
|
||||
LogNamespaceManagerSummary(logger, component+": prepared namespace manager", manager.Summary())
|
||||
func PrepareManagedNamespaceWatcher(ctx context.Context, logger *zap.Logger, config ManagedNamespaceWatcherConfig) (NamespaceManager, k8sCache.ResourceEventHandlerFuncs, error) {
|
||||
strategy := config.RemovalStrategy
|
||||
if strategy == "" {
|
||||
strategy = NamespaceRemovalStrategyTrackOnly
|
||||
}
|
||||
manager, err := NewWatcherNamespaceManager(ctx, config.Namespaces, NamespaceSourceEnv, time.Now().UTC(), config.Subscriber)
|
||||
handlers := NewNamespaceWatcherEventHandlers(ctx, logger, config.Component, manager, strategy)
|
||||
LogNamespaceManagerSummary(logger, config.Component+": prepared namespace manager", manager.Summary())
|
||||
return manager, handlers, err
|
||||
}
|
||||
|
||||
func RunManagedNamespaceWatcher(ctx context.Context, logger *zap.Logger, component string, kubeClient kubernetes.Interface, mgr managerPkg.Interface, namespaces []string, removalStrategy NamespaceRemovalStrategy, subscriber NamespaceSubscriber) (NamespaceManager, error) {
|
||||
manager, handlers, err := PrepareManagedNamespaceWatcher(ctx, logger, component, namespaces, removalStrategy, subscriber)
|
||||
StartManagedNamespaceWatcher(ctx, logger, component, kubeClient, mgr, handlers)
|
||||
func RunManagedNamespaceWatcher(ctx context.Context, logger *zap.Logger, kubeClient kubernetes.Interface, mgr managerPkg.Interface, config ManagedNamespaceWatcherConfig) (NamespaceManager, error) {
|
||||
manager, handlers, err := PrepareManagedNamespaceWatcher(ctx, logger, config)
|
||||
StartManagedNamespaceWatcher(ctx, logger, config.Component, kubeClient, mgr, handlers)
|
||||
return manager, err
|
||||
}
|
||||
|
||||
|
||||
@@ -81,6 +81,13 @@ type NamespaceManagerSummary struct {
|
||||
Subscribers []string
|
||||
}
|
||||
|
||||
type ManagedNamespaceWatcherConfig struct {
|
||||
Component string
|
||||
Namespaces []string
|
||||
RemovalStrategy NamespaceRemovalStrategy
|
||||
Subscriber NamespaceSubscriber
|
||||
}
|
||||
|
||||
func NewNamespaceEvent(eventType NamespaceEventType, name string, labels map[string]string, source NamespaceSource, observedAt time.Time) NamespaceEvent {
|
||||
return NamespaceEvent{
|
||||
Type: eventType,
|
||||
|
||||
@@ -445,7 +445,12 @@ func TestNewNamespaceWatcherEventHandlers(t *testing.T) {
|
||||
func TestPrepareManagedNamespaceWatcher(t *testing.T) {
|
||||
router := &testNamespaceSubscriber{name: "router"}
|
||||
logger := zap.NewNop()
|
||||
manager, handlers, err := PrepareManagedNamespaceWatcher(context.Background(), logger, "router.NSWatcher", []string{"tenant-a"}, NamespaceRemovalStrategyTrackOnly, router)
|
||||
manager, handlers, err := PrepareManagedNamespaceWatcher(context.Background(), logger, ManagedNamespaceWatcherConfig{
|
||||
Component: "router.NSWatcher",
|
||||
Namespaces: []string{"tenant-a"},
|
||||
RemovalStrategy: NamespaceRemovalStrategyTrackOnly,
|
||||
Subscriber: router,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("expected watcher preparation success: %v", err)
|
||||
}
|
||||
@@ -466,7 +471,12 @@ func TestRunManagedNamespaceWatcher(t *testing.T) {
|
||||
defer cancel()
|
||||
router := &testNamespaceSubscriber{name: "router"}
|
||||
logger := zap.NewNop()
|
||||
manager, err := RunManagedNamespaceWatcher(ctx, logger, "router.NSWatcher", k8sfake.NewSimpleClientset(), managerPkg.New(), []string{"tenant-a"}, NamespaceRemovalStrategyTrackOnly, router)
|
||||
manager, err := RunManagedNamespaceWatcher(ctx, logger, k8sfake.NewSimpleClientset(), managerPkg.New(), ManagedNamespaceWatcherConfig{
|
||||
Component: "router.NSWatcher",
|
||||
Namespaces: []string{"tenant-a"},
|
||||
RemovalStrategy: NamespaceRemovalStrategyTrackOnly,
|
||||
Subscriber: router,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("expected managed namespace watcher run success: %v", err)
|
||||
}
|
||||
@@ -475,6 +485,30 @@ func TestRunManagedNamespaceWatcher(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrepareManagedNamespaceWatcherDefaultsToTrackOnly(t *testing.T) {
|
||||
router := &testNamespaceSubscriber{name: "router"}
|
||||
logger := zap.NewNop()
|
||||
manager, handlers, err := PrepareManagedNamespaceWatcher(context.Background(), logger, ManagedNamespaceWatcherConfig{
|
||||
Component: "router.NSWatcher",
|
||||
Namespaces: []string{"tenant-a"},
|
||||
Subscriber: router,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("expected watcher preparation success: %v", err)
|
||||
}
|
||||
namespace := &corev1.Namespace{}
|
||||
namespace.Name = "tenant-a"
|
||||
namespace.Labels = map[string]string{ManagedNamespaceLabelKey: ManagedNamespaceLabelValue}
|
||||
handlers.DeleteFunc(k8sCache.DeletedFinalStateUnknown{Obj: namespace})
|
||||
record, ok := manager.Get("tenant-a")
|
||||
if !ok || record.Phase != NamespacePhaseRemoved {
|
||||
t.Fatalf("expected default strategy to keep track-only removal semantics")
|
||||
}
|
||||
if router.removeCalls != 0 {
|
||||
t.Fatalf("expected default strategy not to dispatch remove")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNamespaceManagerSummary(t *testing.T) {
|
||||
manager := NewNamespaceManager()
|
||||
manager.Upsert(NamespaceEvent{Type: NamespaceEventAdd, Name: "tenant-a", Source: NamespaceSourceWatcher})
|
||||
|
||||
Reference in New Issue
Block a user