in cmd/main.go [64:170]
func main() {
infoLogger := getLoggerWithLogLevel("info")
infoLogger.Info("version",
"GitVersion", version.GitVersion,
"GitCommit", version.GitCommit,
"BuildDate", version.BuildDate,
)
controllerCFG, err := loadControllerConfig()
if err != nil {
infoLogger.Error(err, "unable to load controller config")
os.Exit(1)
}
ctrlLogger := getLoggerWithLogLevel(controllerCFG.LogLevel)
ctrl.SetLogger(ctrlLogger)
restCFG, err := config.BuildRestConfig(controllerCFG.RuntimeConfig)
if err != nil {
setupLog.Error(err, "unable to build REST config")
os.Exit(1)
}
clientSetRestConfig, err := config.BuildRestConfig(controllerCFG.RuntimeConfig)
if err != nil {
setupLog.Error(err, "unable to build REST config")
os.Exit(1)
}
clientSetRestConfig.AcceptContentTypes = "application/vnd.kubernetes.protobuf,application/json"
clientSetRestConfig.ContentType = "application/vnd.kubernetes.protobuf"
clientSet, err := kubernetes.NewForConfig(clientSetRestConfig)
if err != nil {
setupLog.Error(err, "unable to obtain clientSet")
os.Exit(1)
}
ctx := ctrl.SetupSignalHandler()
enableNetworkPolicyController := true
setupLog.Info("Checking args for enabling CM", "ConfigMapEnabled", controllerCFG.EnableConfigMapCheck)
setupLog.Info("Checking args for PE chunk size", "PEChunkSize", controllerCFG.EndpointChunkSize)
setupLog.Info("Checking args for policy batch time", "NPBatchTime", controllerCFG.PodUpdateBatchPeriodDuration)
setupLog.Info("Checking args for reconciler count", "ReconcilerCount", controllerCFG.MaxConcurrentReconciles)
if controllerCFG.EnableConfigMapCheck {
var cancelFn context.CancelFunc
ctx, cancelFn = context.WithCancel(ctx)
setupLog.Info("Enable network policy controller based on configuration", "configmap", configmap.GetControllerConfigMapId())
configMapManager := config.NewConfigmapManager(configmap.GetControllerConfigMapId(),
clientSet, cancelFn, configmap.GetConfigmapCheckFn(), ctrl.Log.WithName("configmap-manager"))
if err := configMapManager.MonitorConfigMap(ctx); err != nil {
setupLog.Error(err, "Unable to monitor configmap for checking if controller is enabled")
os.Exit(1)
}
enableNetworkPolicyController = configMapManager.IsControllerEnabled()
if !enableNetworkPolicyController {
setupLog.Info("Disabling leader election since network policy controller is not enabled")
controllerCFG.RuntimeConfig.EnableLeaderElection = false
}
}
rtOpts := config.BuildRuntimeOptions(controllerCFG.RuntimeConfig, scheme)
mgr, err := ctrl.NewManager(restCFG, rtOpts)
if err != nil {
setupLog.Error(err, "unable to create controller manager")
os.Exit(1)
}
policyEndpointsManager := policyendpoints.NewPolicyEndpointsManager(mgr.GetClient(),
controllerCFG.EndpointChunkSize, ctrl.Log.WithName("endpoints-manager"))
finalizerManager := k8s.NewDefaultFinalizerManager(mgr.GetClient(), ctrl.Log.WithName("finalizer-manager"))
policyController := controllers.NewPolicyReconciler(mgr.GetClient(), policyEndpointsManager,
controllerCFG, finalizerManager, ctrl.Log.WithName("controllers").WithName("policy"))
if enableNetworkPolicyController {
setupLog.Info("Network Policy controller is enabled, starting watches")
if err := policyController.SetupWithManager(ctx, mgr); err != nil {
setupLog.Error(err, "Unable to setup network policy controller")
os.Exit(1)
}
}
//+kubebuilder:scaffold:builder
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)
}
if controllerCFG.EnableGoProfiling {
go func() {
if err := http.ListenAndServe("localhost:6060", nil); err != nil {
setupLog.Error(err, "Error starting HTTP server")
}
}()
}
setupLog.Info("starting controller manager")
if err := mgr.Start(ctx); err != nil {
setupLog.Error(err, "problem running controller manager")
os.Exit(1)
}
setupLog.Info("controller manager stopped")
}