in main.go [44:178]
func main() {
var (
metricsAddr string
enableLeaderElection bool
probeAddr string
)
flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.")
flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.")
flag.BoolVar(&enableLeaderElection, "leader-elect", helper.RunningInCluster(),
"Enable leader election for controllers manager. "+
"Enabling this will ensure there is only one active controllers manager.")
mode, err := helper.GetDebugMode()
if err != nil {
setupLog.Error(err, "failed to get debug mode value")
os.Exit(1)
}
opts := zap.Options{
Development: mode,
}
opts.BindFlags(flag.CommandLine)
flag.Parse()
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
utilruntime.Must(sonarApi.AddToScheme(scheme))
utilruntime.Must(sonarApi.AddToScheme(scheme))
v := buildInfo.Get()
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
setupLog.Info("Starting the Sonar Operator",
"version", v.Version,
"git-commit", v.GitCommit,
"git-tag", v.GitTag,
"build-date", v.BuildDate,
"go-version", v.Go,
"go-client", v.KubectlVersion,
"platform", v.Platform,
)
ns, err := helper.GetWatchNamespace()
if err != nil {
setupLog.Error(err, "failed to get watch namespace")
os.Exit(1)
}
cfg := ctrl.GetConfigOrDie()
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
Scheme: scheme,
MetricsBindAddress: metricsAddr,
HealthProbeBindAddress: probeAddr,
Port: DefaultPort,
LeaderElection: enableLeaderElection,
LeaderElectionID: sonarOperatorLock,
MapperProvider: func(c *rest.Config) (meta.RESTMapper, error) {
return apiutil.NewDynamicRESTMapper(cfg)
},
Namespace: ns,
})
if err != nil {
setupLog.Error(err, "failed to start manager")
os.Exit(1)
}
apiClientProvider := sonarclient.NewApiClientProvider(mgr.GetClient())
if err = sonar.NewReconcileSonar(
mgr.GetClient(),
mgr.GetScheme(),
apiClientProvider,
).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "failed to setup sonar reconcile")
os.Exit(1)
}
if err = sonaruser.NewSonarUserReconciler(
mgr.GetClient(),
mgr.GetScheme(),
apiClientProvider,
).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "failed to setup sonar user reconcile")
os.Exit(1)
}
if err = permission_template.NewSonarPermissionTemplateReconciler(
mgr.GetClient(),
mgr.GetScheme(),
apiClientProvider,
).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "failed to setup permission template reconcile")
os.Exit(1)
}
if err = group.NewSonarGroupReconciler(
mgr.GetClient(),
mgr.GetScheme(),
apiClientProvider,
).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "failed to setup sonar group reconcile")
os.Exit(1)
}
if err = qualitygate.NewSonarQualityGateReconciler(mgr.GetClient(), mgr.GetScheme(), apiClientProvider).
SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "SonarQualityGate")
os.Exit(1)
}
if err = qualityprofile.NewSonarQualityProfileReconciler(mgr.GetClient(), mgr.GetScheme(), apiClientProvider).
SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "SonarQualityProfile")
os.Exit(1)
}
//+kubebuilder:scaffold:builder
if err = mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
setupLog.Error(err, "failed to set up health check")
os.Exit(1)
}
if err = mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
setupLog.Error(err, "failed to set up ready check")
os.Exit(1)
}
setupLog.Info("starting manager")
if err = mgr.Start(ctrl.SetupSignalHandler()); err != nil {
setupLog.Error(err, "problem running manager")
os.Exit(1)
}
}