...
1 package xserver
2
3 import (
4 "context"
5 "fmt"
6 "os"
7
8 "github.com/go-logr/logr"
9 kruntime "k8s.io/apimachinery/pkg/runtime"
10 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
11 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
12 ctrl "sigs.k8s.io/controller-runtime"
13
14 "edge-infra.dev/pkg/k8s/runtime/controller"
15 "edge-infra.dev/pkg/sds/display/constants"
16 "edge-infra.dev/pkg/sds/display/displaymanager/manager"
17 xorgmanager "edge-infra.dev/pkg/sds/display/displaymanager/manager/xorg"
18 )
19
20 const (
21 hostnameEnvvar = "HOSTNAME"
22 healthzCheckAddress = ":8082"
23 )
24
25 var errHostnameEnvvarNotSet = fmt.Errorf("%s envvar is not set", hostnameEnvvar)
26
27 var scheme = kruntime.NewScheme()
28
29 func init() {
30 utilruntime.Must(clientgoscheme.AddToScheme(scheme))
31 }
32
33 func Run(ctx context.Context, opts ...controller.Option) error {
34 log := ctrl.LoggerFrom(ctx).WithName(constants.XServerName)
35
36 mgr, err := createManager(opts...)
37 if err != nil {
38 log.Error(err, "unable to create manager")
39 return err
40 }
41
42 hostname := os.Getenv(hostnameEnvvar)
43 if hostname == "" {
44 log.Error(errHostnameEnvvarNotSet, "unable to find hostname")
45 return errHostnameEnvvarNotSet
46 }
47
48 displayManager := xorgmanager.NewXorgDisplayManager(hostname, mgr.GetClient(), log)
49 configChan := make(configChannel)
50
51 if err := registerComponentsWithManager(mgr, displayManager, configChan, log); err != nil {
52 log.Error(err, "unable to setup components with manager")
53 return err
54 }
55
56 if err := mgr.Start(ctx); err != nil {
57 log.Error(err, "xserver received an error")
58 return err
59 }
60
61 return nil
62 }
63
64 func createManager(opts ...controller.Option) (ctrl.Manager, error) {
65 mgrCfg, mgrOpts := controller.ProcessOptions(opts...)
66 mgrOpts.Scheme = scheme
67 mgrOpts.HealthProbeBindAddress = healthzCheckAddress
68 return ctrl.NewManager(mgrCfg, mgrOpts)
69 }
70
71 func registerComponentsWithManager(mgr ctrl.Manager, displayManager manager.DisplayManager, configChan configChannel, log logr.Logger) error {
72 r, err := NewXServerRunnable(displayManager, configChan, mgr.GetClient(), log)
73 if err != nil {
74 return err
75 }
76 if err := r.SetupWithManager(mgr); err != nil {
77 return err
78 }
79
80 c := NewConfigController(displayManager.Hostname(), configChan, mgr.GetClient())
81 return c.SetupWithManager(mgr)
82 }
83
View as plain text