diff --git a/cmd/main.go b/cmd/main.go index 6f88a93221..0421f7b288 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -144,11 +144,11 @@ func pprofStartServer(addr string, timeout time.Duration, setupLog logr.Logger) } func setupManager(flagVar *flags.FlagVar, cacheOptions cache.Options, scheme *machineryruntime.Scheme, - setupLog logr.Logger, + logger logr.Logger, ) { mgr, err := configManager(flagVar, cacheOptions, scheme) if err != nil { - setupLog.Error(err, "unable to start manager") + logger.Error(err, "unable to start manager") os.Exit(bootstrapFailedExitCode) } kcpRestConfig := mgr.GetConfig() @@ -160,13 +160,13 @@ func setupManager(flagVar *flags.FlagVar, cacheOptions cache.Options, scheme *ma var options ctrlruntime.Options if flagVar.EnableKcpWatcher { if skrWebhookManager, err = createSkrWebhookManager(mgr, skrContextProvider, flagVar); err != nil { - setupLog.Error(err, "failed to create skr webhook manager") + logger.Error(err, "failed to create skr webhook manager") os.Exit(bootstrapFailedExitCode) } - setupKcpWatcherReconciler(mgr, options, eventRecorder, flagVar, setupLog) + setupKcpWatcherReconciler(mgr, options, eventRecorder, flagVar, logger) err = istiogatewaysecret.SetupReconciler(mgr, flagVar, options) if err != nil { - setupLog.Error(err, "unable to create controller", "controller", "Istio") + logger.Error(err, "unable to create controller", "controller", "Istio") os.Exit(bootstrapFailedExitCode) } } @@ -175,47 +175,53 @@ func setupManager(flagVar *flags.FlagVar, cacheOptions cache.Options, scheme *ma descriptorProvider := provider.NewCachedDescriptorProvider() kymaMetrics := metrics.NewKymaMetrics(sharedMetrics) mandatoryModulesMetrics := metrics.NewMandatoryModulesMetrics() - maintenanceWindowsMetrics := metrics.NewMaintenanceWindowMetrics() - maintenanceWindow, err := maintenancewindows.InitializeMaintenanceWindow(setupLog, - maintenanceWindowPoliciesDirectory, - maintenanceWindowPolicyName, - // align the configuration values before rollout - // https://github.com/kyma-project/lifecycle-manager/issues/2165 - true, - minMaintenanceWindowSize) - if err != nil { - maintenanceWindowsMetrics.RecordConfigReadSuccess(false) - setupLog.Error(err, "unable to set maintenance windows policy") - } - maintenanceWindowsMetrics.RecordConfigReadSuccess(true) + maintenanceWindow := initMaintenanceWindow(logger) setupKymaReconciler(mgr, descriptorProvider, skrContextProvider, eventRecorder, flagVar, options, skrWebhookManager, - kymaMetrics, setupLog, maintenanceWindow) - setupManifestReconciler(mgr, flagVar, options, sharedMetrics, mandatoryModulesMetrics, setupLog, + kymaMetrics, logger, maintenanceWindow) + setupManifestReconciler(mgr, flagVar, options, sharedMetrics, mandatoryModulesMetrics, logger, eventRecorder) - setupMandatoryModuleReconciler(mgr, descriptorProvider, flagVar, options, mandatoryModulesMetrics, setupLog) - setupMandatoryModuleDeletionReconciler(mgr, descriptorProvider, eventRecorder, flagVar, options, setupLog) + setupMandatoryModuleReconciler(mgr, descriptorProvider, flagVar, options, mandatoryModulesMetrics, logger) + setupMandatoryModuleDeletionReconciler(mgr, descriptorProvider, eventRecorder, flagVar, options, logger) if flagVar.EnablePurgeFinalizer { - setupPurgeReconciler(mgr, skrContextProvider, eventRecorder, flagVar, options, setupLog) + setupPurgeReconciler(mgr, skrContextProvider, eventRecorder, flagVar, options, logger) } if flagVar.EnableWebhooks { // enable conversion webhook for CRDs here - setupLog.Info("currently no configured webhooks") + logger.Info("currently no configured webhooks") } - addHealthChecks(mgr, setupLog) + addHealthChecks(mgr, logger) - go cleanupStoredVersions(flagVar.DropCrdStoredVersionMap, mgr, setupLog) - go scheduleMetricsCleanup(kymaMetrics, flagVar.MetricsCleanupIntervalInMinutes, mgr, setupLog) + go cleanupStoredVersions(flagVar.DropCrdStoredVersionMap, mgr, logger) + go scheduleMetricsCleanup(kymaMetrics, flagVar.MetricsCleanupIntervalInMinutes, mgr, logger) if err = mgr.Start(ctrl.SetupSignalHandler()); err != nil { - setupLog.Error(err, "problem running manager") + logger.Error(err, "problem running manager") os.Exit(runtimeProblemExitCode) } } +func initMaintenanceWindow(logger logr.Logger) *maintenancewindows.MaintenanceWindow { + maintenanceWindowsMetrics := metrics.NewMaintenanceWindowMetrics() + maintenanceWindow, err := maintenancewindows.InitializeMaintenanceWindow(logger, + maintenanceWindowPoliciesDirectory, + maintenanceWindowPolicyName, + // align the configuration values before rollout + // https://github.com/kyma-project/lifecycle-manager/issues/2165 + true, + minMaintenanceWindowSize) + if err != nil { + maintenanceWindowsMetrics.RecordConfigReadSuccess(false) + logger.Error(err, "unable to set maintenance windows policy") + } + maintenanceWindowsMetrics.RecordConfigReadSuccess(true) + return maintenanceWindow +} + +//nolint:ireturn // the implementation is not a part of the public API func configManager(flagVar *flags.FlagVar, cacheOptions cache.Options, scheme *machineryruntime.Scheme, ) (manager.Manager, error) { @@ -239,7 +245,10 @@ func configManager(flagVar *flags.FlagVar, cacheOptions cache.Options, Cache: cacheOptions, }, ) - return mgr, err + if err != nil { + return nil, fmt.Errorf("unable to create manager: %w", err) + } + return mgr, nil } func addHealthChecks(mgr manager.Manager, setupLog logr.Logger) { diff --git a/internal/pkg/metrics/maintance_window_test.go b/internal/pkg/metrics/maintance_window_test.go index cdd1fc1a42..b21e6306d4 100644 --- a/internal/pkg/metrics/maintance_window_test.go +++ b/internal/pkg/metrics/maintance_window_test.go @@ -4,17 +4,18 @@ import ( "strings" "testing" - "github.com/kyma-project/lifecycle-manager/internal/pkg/metrics" "github.com/prometheus/client_golang/prometheus/testutil" + + "github.com/kyma-project/lifecycle-manager/internal/pkg/metrics" ) func TestMaintenanceWindowMetrics(t *testing.T) { // Create a new instance of MaintenanceWindowMetrics - m := metrics.NewMaintenanceWindowMetrics() + maintenanceWindowMetrics := metrics.NewMaintenanceWindowMetrics() // Test recording a successful config read - m.RecordConfigReadSuccess(true) - if err := testutil.CollectAndCompare(m.ConfigReadSuccessGauge, strings.NewReader(` + maintenanceWindowMetrics.RecordConfigReadSuccess(true) + if err := testutil.CollectAndCompare(maintenanceWindowMetrics.ConfigReadSuccessGauge, strings.NewReader(` # HELP maintenance_window_config_read_success Indicates whether the maintenance window configuration was read successfully (1 for success, 0 for failure) # TYPE maintenance_window_config_read_success gauge maintenance_window_config_read_success 1 @@ -23,8 +24,8 @@ func TestMaintenanceWindowMetrics(t *testing.T) { } // Test recording a failed config read - m.RecordConfigReadSuccess(false) - if err := testutil.CollectAndCompare(m.ConfigReadSuccessGauge, strings.NewReader(` + maintenanceWindowMetrics.RecordConfigReadSuccess(false) + if err := testutil.CollectAndCompare(maintenanceWindowMetrics.ConfigReadSuccessGauge, strings.NewReader(` # HELP maintenance_window_config_read_success Indicates whether the maintenance window configuration was read successfully (1 for success, 0 for failure) # TYPE maintenance_window_config_read_success gauge maintenance_window_config_read_success 0