...

Source file src/edge-infra.dev/pkg/sds/k8s/controllers/terminalctl/controller.go

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

     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  // Run creates the manager, sets up the controller, and then starts
    25  // everything.  It returns the created manager for testing purposes
    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  // create wires up the reconciler(s) with a created manager and returns the
    44  // manager + setup logger
    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  // add new plugins here to be automatically executed by controller.
    97  func registerPlugins(_ Config) {
    98  	plugins.Register(emergencyaccess.Emergencyaccess{})
    99  }
   100  

View as plain text