package main import ( "flag" "os" cephv1 "git.unkin.net/unkin/cephrgw-operator/api/v1alpha1" k8upv1 "github.com/k8up-io/k8up/v2/api/v1" "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" "git.unkin.net/unkin/autobackup-operator/internal/controller" ) var scheme = runtime.NewScheme() func init() { utilruntime.Must(clientgoscheme.AddToScheme(scheme)) utilruntime.Must(cephv1.AddToScheme(scheme)) utilruntime.Must(k8upv1.AddToScheme(scheme)) } func main() { var metricsAddr, probeAddr, destNamespace, destConfigMap string var leaderElect bool flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "metrics endpoint address") flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "health probe address") flag.BoolVar(&leaderElect, "leader-elect", false, "enable leader election") flag.StringVar(&destNamespace, "destinations-namespace", envOr("POD_NAMESPACE", "autobackup-operator"), "namespace holding the destinations ConfigMap") flag.StringVar(&destConfigMap, "destinations-configmap", "autobackup-destinations", "name of the destinations lookup ConfigMap") flag.Parse() 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: "autobackup-operator", }) if err != nil { logger.Error(err, "unable to create manager") os.Exit(1) } if err := controller.SetupAll(mgr, destNamespace, destConfigMap); err != nil { logger.Error(err, "unable to set up 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 autobackup-operator") if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { logger.Error(err, "manager exited with error") os.Exit(1) } } func envOr(key, def string) string { if v := os.Getenv(key); v != "" { return v } return def }