package main import ( "flag" "os" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/log/zap" metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" mikrotikv1alpha1 "code.brunner.ninja/feedc0de/mikrotik-operator/api/v1alpha1" "code.brunner.ninja/feedc0de/mikrotik-operator/internal/controller" ) func main() { var metricsAddress string var healthAddress string var leaderElection bool flag.StringVar(&metricsAddress, "metrics-bind-address", ":8080", "Address for the metrics endpoint") flag.StringVar(&healthAddress, "health-probe-bind-address", ":8081", "Address for health probes") flag.BoolVar(&leaderElection, "leader-elect", true, "Use leader election") zapOptions := zap.Options{Development: false} zapOptions.BindFlags(flag.CommandLine) flag.Parse() ctrl.SetLogger(zap.New(zap.UseFlagOptions(&zapOptions))) scheme := runtime.NewScheme() must(clientgoscheme.AddToScheme(scheme)) must(corev1.AddToScheme(scheme)) must(mikrotikv1alpha1.AddToScheme(scheme)) manager, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, Client: client.Options{Cache: &client.CacheOptions{ DisableFor: []client.Object{&corev1.Secret{}}, }}, Metrics: metricsserver.Options{BindAddress: metricsAddress}, HealthProbeBindAddress: healthAddress, LeaderElection: leaderElection, LeaderElectionID: "mikrotik-operator.mikrotik.brunner.ninja", }) if err != nil { ctrl.Log.Error(err, "unable to create manager") os.Exit(1) } reconciler := &controller.MikroTikRouterReconciler{Client: manager.GetClient(), Scheme: manager.GetScheme()} if err := reconciler.SetupWithManager(manager); err != nil { ctrl.Log.Error(err, "unable to create controller") os.Exit(1) } must(manager.AddHealthzCheck("healthz", healthz.Ping)) must(manager.AddReadyzCheck("readyz", healthz.Ping)) if err := manager.Start(ctrl.SetupSignalHandler()); err != nil { ctrl.Log.Error(err, "manager stopped") os.Exit(1) } } func must(err error) { if err != nil { ctrl.Log.Error(err, "fatal setup error") os.Exit(1) } }