...
1 package terminalctl
2
3 import (
4 "fmt"
5
6 "github.com/go-logr/logr"
7 corev1 "k8s.io/api/core/v1"
8 "k8s.io/apimachinery/pkg/runtime"
9 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
10 ctrl "sigs.k8s.io/controller-runtime"
11
12 v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
13
14 clusterApi "edge-infra.dev/pkg/edge/apis/cluster/v1alpha1"
15 syncedobjectApi "edge-infra.dev/pkg/edge/apis/syncedobject/apis/v1alpha1"
16 "edge-infra.dev/pkg/k8s/runtime/controller"
17 "edge-infra.dev/pkg/k8s/runtime/controller/metrics"
18
19 "edge-infra.dev/pkg/lib/fog"
20 "edge-infra.dev/pkg/sds/k8s/controllers/terminalctl/pkg/plugins"
21 "edge-infra.dev/pkg/sds/k8s/controllers/terminalctl/pkg/plugins/emergencyaccess"
22 )
23
24
25
26 func Run(config Config, o ...controller.Option) error {
27 ctrl.SetLogger(fog.New())
28 registerPlugins(config)
29 mgr, log, err := create(config, o...)
30 if err != nil {
31 return err
32 }
33
34 log.Info("starting manager")
35 if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
36 log.Error(err, "problem running manager")
37 return err
38 }
39
40 return nil
41 }
42
43
44
45 func create(config Config, o ...controller.Option) (ctrl.Manager, logr.Logger, error) {
46 log := ctrl.Log.WithName("setup")
47
48 mgr, err := createMgr(o...)
49 if err != nil {
50 log.Error(err, "failed to create manager")
51 return nil, logr.Logger{}, err
52 }
53
54 err = registerController(mgr, &config)
55 if err != nil {
56 log.Error(err, "failed to register controller", "controller", "terminal-reconciler")
57 return nil, log, err
58 }
59
60 return mgr, log, nil
61 }
62
63 func createMgr(o ...controller.Option) (ctrl.Manager, error) {
64 cfg, opts := controller.ProcessOptions(o...)
65 opts.LeaderElectionID = "terminalctl.edge.ncr.com"
66 opts.Scheme = createScheme()
67
68 return ctrl.NewManager(cfg, opts)
69 }
70
71 func registerController(mgr ctrl.Manager, cfg *Config) error {
72 if err := (&TerminalReconciler{
73 Client: mgr.GetClient(),
74 Log: ctrl.Log.WithName("terminal-reconciler"),
75 Metrics: metrics.New(mgr, "terminalctl"),
76 Conditions: terminalConditions,
77 Config: cfg,
78 Name: "terminal-controller",
79 }).SetupWithManager(mgr); err != nil {
80 return fmt.Errorf("failed to set up terminal controller: %w", err)
81 }
82
83 return nil
84 }
85
86 func createScheme() *runtime.Scheme {
87 scheme := runtime.NewScheme()
88
89 utilruntime.Must(corev1.AddToScheme(scheme))
90 utilruntime.Must(v1ien.AddToScheme(scheme))
91 utilruntime.Must(clusterApi.AddToScheme(scheme))
92 utilruntime.Must(syncedobjectApi.AddToScheme(scheme))
93 return scheme
94 }
95
96
97 func registerPlugins(_ Config) {
98 plugins.Register(emergencyaccess.Emergencyaccess{})
99 }
100
View as plain text