2022-05-04 18:05:03 +02:00
|
|
|
package config
|
|
|
|
|
|
|
|
import (
|
2022-09-30 13:24:47 +02:00
|
|
|
"context"
|
|
|
|
|
2022-09-28 13:45:16 +02:00
|
|
|
"github.com/go-logr/logr"
|
2022-05-04 18:05:03 +02:00
|
|
|
"github.com/kyverno/kyverno/pkg/config"
|
2022-09-30 13:24:47 +02:00
|
|
|
"github.com/kyverno/kyverno/pkg/controllers"
|
2022-05-23 15:45:04 +02:00
|
|
|
controllerutils "github.com/kyverno/kyverno/pkg/utils/controller"
|
2022-05-04 18:05:03 +02:00
|
|
|
"k8s.io/apimachinery/pkg/api/errors"
|
|
|
|
corev1informers "k8s.io/client-go/informers/core/v1"
|
|
|
|
corev1listers "k8s.io/client-go/listers/core/v1"
|
|
|
|
"k8s.io/client-go/util/workqueue"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2022-10-03 09:55:59 +02:00
|
|
|
// Workers is the number of workers for this controller
|
2022-10-06 12:38:35 +02:00
|
|
|
Workers = 3
|
|
|
|
ControllerName = "config-controller"
|
|
|
|
maxRetries = 10
|
2022-05-04 18:05:03 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
type controller struct {
|
|
|
|
configuration config.Configuration
|
|
|
|
|
|
|
|
// listers
|
|
|
|
configmapLister corev1listers.ConfigMapLister
|
|
|
|
|
|
|
|
// queue
|
|
|
|
queue workqueue.RateLimitingInterface
|
|
|
|
}
|
|
|
|
|
2022-09-30 13:24:47 +02:00
|
|
|
func NewController(configuration config.Configuration, configmapInformer corev1informers.ConfigMapInformer) controllers.Controller {
|
2022-05-04 18:05:03 +02:00
|
|
|
c := controller{
|
|
|
|
configuration: configuration,
|
|
|
|
configmapLister: configmapInformer.Lister(),
|
2022-10-06 12:38:35 +02:00
|
|
|
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), ControllerName),
|
2022-05-04 18:05:03 +02:00
|
|
|
}
|
2022-10-18 16:42:43 +02:00
|
|
|
controllerutils.AddDefaultEventHandlers(logger, configmapInformer.Informer(), c.queue)
|
2022-05-04 18:05:03 +02:00
|
|
|
return &c
|
|
|
|
}
|
|
|
|
|
2022-10-03 09:55:59 +02:00
|
|
|
func (c *controller) Run(ctx context.Context, workers int) {
|
2022-10-18 16:42:43 +02:00
|
|
|
controllerutils.Run(ctx, ControllerName, logger, c.queue, workers, maxRetries, c.reconcile)
|
2022-05-04 18:05:03 +02:00
|
|
|
}
|
|
|
|
|
2022-09-30 13:24:47 +02:00
|
|
|
func (c *controller) reconcile(ctx context.Context, logger logr.Logger, key, namespace, name string) error {
|
2022-05-11 08:14:30 +02:00
|
|
|
if namespace != config.KyvernoNamespace() || name != config.KyvernoConfigMapName() {
|
2022-05-04 18:05:03 +02:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
configMap, err := c.configmapLister.ConfigMaps(namespace).Get(name)
|
|
|
|
if err != nil {
|
|
|
|
if errors.IsNotFound(err) {
|
|
|
|
c.configuration.Load(nil)
|
|
|
|
}
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
c.configuration.Load(configMap.DeepCopy())
|
|
|
|
return nil
|
|
|
|
}
|