Files
feedc0de fd5f5c454f
Validate and publish / Test image and chart (push) Successful in 2m33s
Validate and publish / Publish image and OCI chart (push) Successful in 22s
Support multiple service port forwardings
2026-08-31 14:13:56 +02:00

71 lines
2.3 KiB
Go

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)
}
}