func main()

in oracle/main.go [72:254]


func main() {
	klog.InitFlags(nil)

	var metricsAddr string
	var enableLeaderElection bool
	flag.StringVar(&metricsAddr, "metrics-addr", ":8080", "The address the metric endpoint binds to.")
	flag.BoolVar(&enableLeaderElection, "enable-leader-election", false,
		"Enable leader election for controller manager. Enabling this will ensure there is only one active controller manager.")
	flag.Parse()

	ctrl.SetLogger(klogr.New())

	images := make(map[string]string)
	images["dbinit"] = *dbInitImage
	images["service"] = *serviceImage
	images["logging_sidecar"] = *loggingSidecarImage
	images["monitoring"] = *monitoringAgentImage

	mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
		Scheme:             scheme,
		MetricsBindAddress: metricsAddr,
		LeaderElection:     enableLeaderElection,
		LeaderElectionID:   "controller-leader-election-helper",
		Port:               9443,
		Namespace:          *namespace,
	})
	if err != nil {
		setupLog.Error(err, "unable to start manager")
		os.Exit(1)
	}

	var locker = sync.Map{}

	if err = (&instancecontroller.InstanceReconciler{
		Client:        mgr.GetClient(),
		Log:           ctrl.Log.WithName("controllers").WithName("Instance"),
		SchemeVal:     mgr.GetScheme(),
		Images:        images,
		Recorder:      mgr.GetEventRecorderFor("instance-controller"),
		InstanceLocks: &locker,

		DatabaseClientFactory: &controllers.GRPCDatabaseClientFactory{},
	}).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "Instance")
		os.Exit(1)
	}
	if err = (&databasecontroller.DatabaseReconciler{
		Client:                mgr.GetClient(),
		Log:                   ctrl.Log.WithName("controllers").WithName("Database"),
		Scheme:                mgr.GetScheme(),
		Recorder:              mgr.GetEventRecorderFor("database-controller"),
		InstanceLocks:         &locker,
		DatabaseClientFactory: &controllers.GRPCDatabaseClientFactory{},
	}).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "Database")
		os.Exit(1)
	}
	if err = (&backupcontroller.BackupReconciler{
		Client:              mgr.GetClient(),
		Log:                 ctrl.Log.WithName("controllers").WithName("Backup"),
		Scheme:              mgr.GetScheme(),
		Recorder:            mgr.GetEventRecorderFor("backup-controller"),
		InstanceLocks:       &locker,
		OracleBackupFactory: &backupcontroller.RealOracleBackupFactory{},
		BackupCtrl:          &backupcontroller.RealBackupControl{Client: mgr.GetClient()},

		DatabaseClientFactory: &controllers.GRPCDatabaseClientFactory{},
	}).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "Backup")
		os.Exit(1)
	}
	if err = (&exportcontroller.ExportReconciler{
		Client:        mgr.GetClient(),
		Log:           ctrl.Log.WithName("controllers").WithName("Export"),
		Scheme:        mgr.GetScheme(),
		Recorder:      mgr.GetEventRecorderFor("export-controller"),
		InstanceLocks: &locker,

		DatabaseClientFactory: &controllers.GRPCDatabaseClientFactory{},
	}).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "Export")
		os.Exit(1)
	}
	if err = (&importcontroller.ImportReconciler{
		Client:        mgr.GetClient(),
		Log:           ctrl.Log.WithName("controllers").WithName("Import"),
		Scheme:        mgr.GetScheme(),
		Recorder:      mgr.GetEventRecorderFor("import-controller"),
		InstanceLocks: &locker,

		DatabaseClientFactory: &controllers.GRPCDatabaseClientFactory{},
	}).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "Import")
		os.Exit(1)
	}
	if err = (&pitrcontroller.PITRReconciler{
		Client: mgr.GetClient(),
		Log:    ctrl.Log.WithName("controllers").WithName("PITR"),
		Scheme: mgr.GetScheme(),
		BackupCtrl: &pitrcontroller.RealBackupControl{
			Client: mgr.GetClient(),
		},
		PITRCtrl: &pitrcontroller.RealPITRControl{
			Client: mgr.GetClient(),
		},
	}).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "PITR")
		os.Exit(1)
	}

	if err = backupschedulecontroller.NewBackupScheduleReconciler(
		mgr,
		&backupschedulecontroller.RealBackupScheduleControl{
			Client: mgr.GetClient(),
		},
		&cronanythingcontroller.RealCronAnythingControl{
			Client: mgr.GetClient(),
		},
		&backupschedulecontroller.RealBackupControl{
			Client: mgr.GetClient(),
		}).SetupWithManager(mgr); err != nil {
		setupLog.Error(err, "unable to create controller", "controller", "BackupSchedule")
		os.Exit(1)
	}

	cronAnythingReconciler, err := cronanythingcontroller.NewCronAnythingReconciler(
		mgr,
		ctrl.Log.WithName("controllers").WithName("CronAnything"),
		&cronanythingcontroller.RealCronAnythingControl{
			Client: mgr.GetClient(),
		},
		&locker,
	)
	if err != nil {
		setupLog.Error(err, "unable to init reconciler", "reconciler", "CronAnything")
		os.Exit(1)
	}

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

	// Use the testing namespace if supplied, otherwise deploy to the same namespace as the operator.
	operatorNS := "operator-system"
	if *namespace != "" {
		operatorNS = *namespace
	}

	c := mgr.GetClient()

	ctx := context.Background()
	release := &v1alpha1.Release{
		TypeMeta: metav1.TypeMeta{
			APIVersion: "oracle.db.anthosapis.com/v1alpha1",
			Kind:       "Release",
		},
		ObjectMeta: metav1.ObjectMeta{
			Name:      "release",
			Namespace: operatorNS,
		},
		Spec: v1alpha1.ReleaseSpec{
			Version: version,
		},
	}

	err = c.Create(ctx, release)

	if apierrors.IsAlreadyExists(err) {
		if err := c.Patch(ctx, release, client.Apply, client.ForceOwnership, client.FieldOwner("release-controller")); err != nil {
			setupLog.Error(err, "failed to patch release CRD")
		}
	} else if err != nil {
		setupLog.Error(err, "failed to install release CRD")
	}

	setupLog.Info("starting manager")
	if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
		setupLog.Error(err, "problem running manager")
		os.Exit(1)
	}
}