mirror of
https://github.com/vmware-tanzu/pinniped.git
synced 2026-09-20 15:04:34 +00:00
Add initial controller boilerplate and example controller
Signed-off-by: Monis Khan <mok@vmware.com>
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
Copyright 2020 VMware, Inc.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package controller
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"k8s.io/klog/v2"
|
||||
)
|
||||
|
||||
type Manager interface {
|
||||
Start(ctx context.Context)
|
||||
WithController(controller Controller, workers int) Manager
|
||||
}
|
||||
|
||||
func NewManager() Manager {
|
||||
return &controllerManager{}
|
||||
}
|
||||
|
||||
// runnableController represents single controller runnable configuration.
|
||||
type runnableController struct {
|
||||
controller Controller
|
||||
workers int
|
||||
}
|
||||
|
||||
type controllerManager struct {
|
||||
controllers []runnableController
|
||||
}
|
||||
|
||||
var _ Manager = &controllerManager{}
|
||||
|
||||
func (c *controllerManager) WithController(controller Controller, workers int) Manager {
|
||||
c.controllers = append(c.controllers, runnableController{
|
||||
controller: controller,
|
||||
workers: workers,
|
||||
})
|
||||
return c
|
||||
}
|
||||
|
||||
// Start will run all managed controllers and block until all controllers shutdown.
|
||||
// When the context passed is cancelled, all controllers are signalled to shutdown.
|
||||
func (c *controllerManager) Start(ctx context.Context) {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(len(c.controllers))
|
||||
for i := range c.controllers {
|
||||
idx := i
|
||||
go func() {
|
||||
r := c.controllers[idx]
|
||||
defer klog.InfoS("controller terminated", "controller", r.controller.Name())
|
||||
defer wg.Done()
|
||||
r.controller.Run(ctx, r.workers)
|
||||
}()
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
Reference in New Issue
Block a user