package main import ( "flag" "os" "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" "sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/log/zap" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" forgebotv1alpha1 "git.unkin.net/unkin/forgebot/api/v1alpha1" "git.unkin.net/unkin/forgebot/internal/controller" ) var scheme = runtime.NewScheme() func init() { utilruntime.Must(clientgoscheme.AddToScheme(scheme)) utilruntime.Must(forgebotv1alpha1.AddToScheme(scheme)) } func main() { var metricsAddr string var probeAddr string var leaderElect bool var apiURL string flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "metrics endpoint") flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "health probe endpoint") flag.BoolVar(&leaderElect, "leader-elect", false, "enable leader election") flag.StringVar(&apiURL, "api-url", "", "forgebot API base URL for task completion callbacks") flag.Parse() if v := os.Getenv("FORGEBOT_API_URL"); v != "" && apiURL == "" { apiURL = v } ctrl.SetLogger(zap.New(zap.UseDevMode(false))) logger := ctrl.Log.WithName("setup") mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, Metrics: metricsserver.Options{ BindAddress: metricsAddr, }, HealthProbeBindAddress: probeAddr, LeaderElection: leaderElect, LeaderElectionID: "forgebot-operator", }) if err != nil { logger.Error(err, "unable to create manager") os.Exit(1) } if err := controller.SetupAll(mgr, controller.SetupOptions{APIURL: apiURL}); err != nil { logger.Error(err, "unable to setup controllers") os.Exit(1) } if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { logger.Error(err, "unable to set up health check") os.Exit(1) } if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil { logger.Error(err, "unable to set up ready check") os.Exit(1) } logger.Info("starting manager") if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { logger.Error(err, "manager exited with error") os.Exit(1) } }