feat: add bare application controller

This commit is contained in:
2026-05-17 19:17:22 +02:00
parent 879e399b38
commit dedee24389
31 changed files with 2213 additions and 19 deletions
+31 -7
View File
@@ -21,6 +21,7 @@ import (
"flag"
"net/url"
"os"
"sync"
"time"
"gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/signals"
@@ -32,6 +33,7 @@ import (
// Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).
// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
applicationcontroller "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/controllers/application"
proxyprovidercontroller "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/controllers/proxyprovider"
clientset "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/clientset/versioned"
informers "gitea.t000-n.de/t.behrendt/authentik-kubernetes-operator/pkg/generated/informers/externalversions"
@@ -62,7 +64,7 @@ func main() {
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
}
proxyProviderClient, err := clientset.NewForConfig(cfg)
clientset, err := clientset.NewForConfig(cfg)
if err != nil {
logger.Error(err, "Error building proxy provider clientset")
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
@@ -74,20 +76,42 @@ func main() {
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
}
proxyProviderInformerFactory := informers.NewSharedInformerFactory(proxyProviderClient, time.Second*30)
proxyProviderInformerFactory := informers.NewSharedInformerFactory(clientset, time.Second*30)
controller := proxyprovidercontroller.NewController(ctx, kubeClient, proxyProviderClient, authentikClient,
ppController := proxyprovidercontroller.NewController(ctx, kubeClient, clientset, authentikClient,
proxyProviderInformerFactory.Proxyprovider().V1alpha1().ProxyProviders(),
)
applicationInformerFactory := informers.NewSharedInformerFactory(clientset, time.Second*30)
appController := applicationcontroller.NewController(ctx, kubeClient, clientset, authentikClient,
applicationInformerFactory.Application().V1alpha1().Applications(),
)
// notice that there is no need to run Start methods in a separate goroutine. (i.e. go kubeInformerFactory.Start(ctx.done())
// Start method is non-blocking and runs all registered informers in a dedicated goroutine.
proxyProviderInformerFactory.Start(ctx.Done())
applicationInformerFactory.Start(ctx.Done())
if err = controller.Run(ctx, 2); err != nil {
logger.Error(err, "Error running controller")
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
}
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
if err := ppController.Run(ctx, 2); err != nil {
logger.Error(err, "Error running proxy provider controller")
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
}
}()
go func() {
defer wg.Done()
if err := appController.Run(ctx, 2); err != nil {
logger.Error(err, "Error running application controller")
klog.FlushAndExit(klog.ExitFlushTimeout, 1)
}
}()
wg.Wait()
}
func init() {