...

Source file src/edge-infra.dev/pkg/sds/display/k8s/controllers/xserver/manager.go

Documentation: edge-infra.dev/pkg/sds/display/k8s/controllers/xserver

     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