package controller
// This file defines types for controllers to register themselves with the
// controller package.
// Interface represents a controller that can be run.
type Interface interface {
// Run will start a controller. 'workers' should be the number of
// independent goroutines for this controller in question that are to be
// run, and the workers should shut down upon a signal on stopCh.
// This method should block until all workers have exited cleanly, thus
// allowing for graceful shutdown of control loops.
Run(workers int, stopCh <-chan struct{}) error
}
// Constructor is a function that creates a new control loop given a
// controller Context.
type Constructor func(ctx *ContextFactory) (Interface, error)
var (
known = make(map[string]Constructor)
)
// Known returns a map of the registered controller Constructors
func Known() map[string]Constructor {
return known
}
// Register registers a controller constructor with the controller package
func Register(name string, fn Constructor) {
known[name] = fn
}