...
1 package envctl
2
3 import (
4 "time"
5
6 persistenceApi "edge-infra.dev/pkg/edge/apis/persistence/v1alpha1"
7 "edge-infra.dev/pkg/k8s/runtime/controller"
8 "edge-infra.dev/pkg/k8s/runtime/controller/metrics"
9 "edge-infra.dev/pkg/k8s/runtime/events"
10 "edge-infra.dev/pkg/lib/fog"
11
12 "github.com/go-logr/logr"
13
14 "k8s.io/apimachinery/pkg/runtime"
15 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
16 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
17
18 ctrl "sigs.k8s.io/controller-runtime"
19 )
20
21 const controllerName = "persistence-controller"
22
23
24
25 func Run(o ...controller.Option) error {
26 mgr, log, err := create(o...)
27 if err != nil {
28 return err
29 }
30
31 log.Info("starting manager")
32 if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
33 log.Error(err, "problem running manager")
34 return err
35 }
36
37 return nil
38 }
39
40
41
42 func create(o ...controller.Option) (ctrl.Manager, logr.Logger, error) {
43 ctrl.SetLogger(fog.New().WithName("envctl"))
44 log := ctrl.Log
45
46 cfg, opts := controller.ProcessOptions(o...)
47 opts.LeaderElection = false
48 opts.Scheme = createScheme()
49
50 mgr, err := ctrl.NewManager(cfg, opts)
51 if err != nil {
52 log.Error(err, "failed to create manager")
53 return nil, logr.Logger{}, err
54 }
55
56 m := metrics.New(mgr, "envctl")
57
58 if err = (&PersistenceReconciler{
59 Client: mgr.GetClient(),
60 EventRecorder: events.NewRecorder(mgr, ctrl.Log, controllerName),
61 Name: controllerName,
62 Metrics: m,
63 Conditions: persistenceConditions,
64 }).SetupWithManager(mgr); err != nil {
65 log.Error(err, "failed to create controller and set up with manager", "persistence", "persistence-reconciler")
66 return nil, logr.Logger{}, err
67 }
68
69 if err := (&ConfigMapReplicationReconciler{
70 Client: mgr.GetClient(),
71 Name: "configmap_replication_reconciler",
72 RequeueTime: 1 * time.Minute,
73 }).SetupWithManager(mgr); err != nil {
74 log.Error(err, "fail to create ConfigMapReplicationReconciler")
75 return nil, logr.Logger{}, err
76 }
77
78 return mgr, log, nil
79 }
80
81 func createScheme() *runtime.Scheme {
82 scheme := runtime.NewScheme()
83
84 utilruntime.Must(clientgoscheme.AddToScheme(scheme))
85 utilruntime.Must(persistenceApi.AddToScheme(scheme))
86 return scheme
87 }
88
View as plain text