package prometheusctl import ( "fmt" "os" "edge-infra.dev/pkg/k8s/runtime/controller" "edge-infra.dev/pkg/lib/logging" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" ctrl "sigs.k8s.io/controller-runtime" monitoringscheme "github.com/prometheus-operator/prometheus-operator/pkg/client/versioned/scheme" ) // Run creates the manager, sets up the controller, and then starts everything. // It returns the created manager for testing purposes func Run(o ...controller.Option) error { ctrl.SetLogger(logging.NewLogger().Logger) log := ctrl.Log.WithName("setup") cfg, err := newConfig(os.Args) if err != nil { log.Error(err, "failed to parse configuration") return err } mgr, err := create(cfg, o...) if err != nil { log.Error(err, "failed to create manager") return err } log.Info("starting manager") if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { log.Error(err, "problem running manager") return err } return nil } func create(cfg *config, o ...controller.Option) (ctrl.Manager, error) { ctlCfg, opts := controller.ProcessOptions(o...) opts.LeaderElectionID = "prometheusctl.edge.ncr.com" opts.Scheme = createScheme() mgr, err := ctrl.NewManager(ctlCfg, opts) if err != nil { return nil, fmt.Errorf("failed to create manager: %w", err) } if err = (&PrometheusStackdriverReconciler{ Client: mgr.GetClient(), config: *cfg, }).SetupWithManager(mgr); err != nil { return nil, fmt.Errorf("failed to set up reconciler: %w", err) } return mgr, nil } func createScheme() *runtime.Scheme { scheme := runtime.NewScheme() utilruntime.Must(clientgoscheme.AddToScheme(scheme)) utilruntime.Must(monitoringscheme.AddToScheme(scheme)) return scheme }