func main()

in main.go [43:168]


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 controller manager. "+
			"Enabling this will ensure there is only one active controller manager.")

	mode, err := helper.GetDebugMode()
	if err != nil {
		setupLog.Error(err, "unable 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(nexusApiV1Alpha1.AddToScheme(scheme))

	v := buildInfo.Get()

	ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))

	setupLog.Info("Starting the Nexus 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 := helper.GetWatchNamespace()
	cfg := ctrl.GetConfigOrDie()

	mgr, err := ctrl.NewManager(cfg, ctrl.Options{
		Scheme:                 scheme,
		MetricsBindAddress:     metricsAddr,
		HealthProbeBindAddress: probeAddr,
		Port:                   9443,
		LeaderElection:         enableLeaderElection,
		LeaderElectionID:       nexusOperatorLock,
		MapperProvider: func(c *rest.Config) (meta.RESTMapper, error) {
			return apiutil.NewDynamicRESTMapper(cfg)
		},
		Namespace: ns,
	})
	if err != nil {
		setupLog.Error(err, "unable to start manager")
		os.Exit(1)
	}

	apiClientProvider := nexusclient.NewApiClientProvider(mgr.GetClient())

	if err = nexus.NewNexusReconciler(mgr.GetClient(), mgr.GetScheme(), apiClientProvider).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "nexus")
		os.Exit(1)
	}

	if err = role.NewNexusRoleReconciler(mgr.GetClient(), mgr.GetScheme(), apiClientProvider).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "role")
		os.Exit(1)
	}

	if err = user.NewNexusUserReconciler(mgr.GetClient(), mgr.GetScheme(), apiClientProvider).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "user")
		os.Exit(1)
	}

	if err = repository.NewNexusRepositoryReconciler(mgr.GetClient(), apiClientProvider).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "repository")
		os.Exit(1)
	}

	if err = script.NewNexusScriptReconciler(mgr.GetClient(), apiClientProvider).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "NexusScript")
		os.Exit(1)
	}

	if err = blobstore.NewNexusBlobStoreReconciler(mgr.GetClient(), apiClientProvider).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "NexusBlobStore")
		os.Exit(1)
	}

	if err = cleanuppolicy.NewNexusCleanupPolicyReconciler(mgr.GetClient(), apiClientProvider).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "NexusCleanupPolicy")
		os.Exit(1)
	}
	//+kubebuilder:scaffold:builder

	ctx := ctrl.SetupSignalHandler()

	if os.Getenv("ENABLE_WEBHOOKS") != "false" {
		if err = webhook.RegisterValidationWebHook(ctx, mgr, ns); err != nil {
			setupLog.Error(err, "failed to create webhook", "webhook", "NexusRepository")
			os.Exit(1)
		}
	}

	if err = mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
		setupLog.Error(err, "unable to set up health check")
		os.Exit(1)
	}

	if err = mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
		setupLog.Error(err, "unable to set up ready check")
		os.Exit(1)
	}

	setupLog.Info("starting manager")

	if err = mgr.Start(ctx); err != nil {
		setupLog.Error(err, "problem running manager")
		os.Exit(1)
	}
}