71 lines
2.3 KiB
Go
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)
|
|
}
|
|
}
|