diff --git a/.golangci.yaml b/.golangci.yaml index b104749451..633e250d60 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -11,6 +11,7 @@ linters: - recvcheck - sqlclosecheck - wsl + - wsl_v5 # can be discussed with the team if enforced grouping of statements is desired, but generally considered too strict settings: cyclop: max-complexity: 20 diff --git a/api/scheme.go b/api/scheme.go index 2bd97eb132..d1bfd44b4d 100644 --- a/api/scheme.go +++ b/api/scheme.go @@ -9,7 +9,8 @@ import ( ) func AddToScheme(scheme *machineryruntime.Scheme) error { - if err := v1beta2.AddToScheme(scheme); err != nil { + err := v1beta2.AddToScheme(scheme) + if err != nil { return fmt.Errorf("failed to add scheme on v1beta2 api: %w", err) } diff --git a/api/shared/resource.go b/api/shared/resource.go index a7d0822642..f73b898be7 100644 --- a/api/shared/resource.go +++ b/api/shared/resource.go @@ -10,9 +10,10 @@ import ( // +k8s:deepcopy-gen=true type Resource struct { - Name string `json:"name"` - Namespace string `json:"namespace"` apimetav1.GroupVersionKind `json:",inline"` + + Name string `json:"name"` + Namespace string `json:"namespace"` } func (r Resource) ToUnstructured() *unstructured.Unstructured { diff --git a/api/shared/status.go b/api/shared/status.go index 57430c5c5a..023b8e6f68 100644 --- a/api/shared/status.go +++ b/api/shared/status.go @@ -9,6 +9,8 @@ import ( // Status defines the observed state of CustomObject. // +k8s:deepcopy-gen=true type Status struct { + LastOperation `json:"lastOperation,omitempty"` + // State signifies current state of CustomObject. // Value can be one of ("Ready", "Processing", "Error", "Deleting", "Warning"). // +kubebuilder:validation:Required @@ -24,8 +26,7 @@ type Status struct { // All resources that are synced are considered for orphan removal on configuration changes, // and it is used to determine effective differences from one state to the next. // +listType=atomic - Synced []Resource `json:"synced,omitempty"` - LastOperation `json:"lastOperation,omitempty"` + Synced []Resource `json:"synced,omitempty"` } func (s Status) WithState(state State) Status { diff --git a/api/v1beta1/kyma_types.go b/api/v1beta1/kyma_types.go index 146611d296..047ad2b07e 100644 --- a/api/v1beta1/kyma_types.go +++ b/api/v1beta1/kyma_types.go @@ -91,6 +91,8 @@ type KymaSpec struct { // KymaStatus defines the observed state of Kyma. type KymaStatus struct { + LastOperation `json:"lastOperation,omitempty"` + // State signifies current state of Kyma. // Value can be one of ("Ready", "Processing", "Error", "Deleting"). State State `json:"state,omitempty"` @@ -107,8 +109,6 @@ type KymaStatus struct { // Active Channel // +optional ActiveChannel string `json:"activeChannel,omitempty"` - - LastOperation `json:"lastOperation,omitempty"` } type ModuleStatus struct { @@ -187,11 +187,15 @@ type PartialMeta struct { type KymaList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []Kyma `json:"items"` + + Items []Kyma `json:"items"` } // Module defines the components to be installed. type Module struct { + // +kubebuilder:default:=CreateAndDelete + CustomResourcePolicy `json:"customResourcePolicy,omitempty"` + // Name is a unique identifier of the module. // It is used to resolve a ModuleTemplate for creating a set of resources on the cluster. // @@ -222,9 +226,6 @@ type Module struct { // It will be removed in the upcoming API version. RemoteModuleTemplateRef string `json:"remoteModuleTemplateRef,omitempty"` - // +kubebuilder:default:=CreateAndDelete - CustomResourcePolicy `json:"customResourcePolicy,omitempty"` - // Managed is determining whether the module is managed or not. If the module is unmanaged, the user is responsible // for the lifecycle of the module. // +kubebuilder:default:=true diff --git a/api/v1beta1/manifest_types.go b/api/v1beta1/manifest_types.go index 7143daa37a..70615b07b2 100644 --- a/api/v1beta1/manifest_types.go +++ b/api/v1beta1/manifest_types.go @@ -40,6 +40,9 @@ type Manifest struct { // ManifestSpec defines the desired state of Manifest. type ManifestSpec struct { + // +kubebuilder:default:=CreateAndDelete + CustomResourcePolicy `json:"customResourcePolicy,omitempty"` + // Remote indicates if Manifest should be installed on a remote cluster Remote bool `json:"remote"` @@ -58,9 +61,6 @@ type ManifestSpec struct { // +nullable // Resource specifies a resource to be watched for state updates Resource *unstructured.Unstructured `json:"resource,omitempty"` - - // +kubebuilder:default:=CreateAndDelete - CustomResourcePolicy `json:"customResourcePolicy,omitempty"` } // InstallInfo defines installation information. @@ -108,7 +108,8 @@ const ( type ManifestList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []Manifest `json:"items"` + + Items []Manifest `json:"items"` } //nolint:gochecknoinits // registers Kyma CRD on startup diff --git a/api/v1beta1/moduletemplate_types.go b/api/v1beta1/moduletemplate_types.go index 6cf4243999..7ac15957d1 100644 --- a/api/v1beta1/moduletemplate_types.go +++ b/api/v1beta1/moduletemplate_types.go @@ -106,7 +106,8 @@ type CustomStateCheck struct { type ModuleTemplateList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []ModuleTemplate `json:"items"` + + Items []ModuleTemplate `json:"items"` } // Target serves as a potential Installation Hint for the Controller to determine which Client to use for installation. diff --git a/api/v1beta1/resource.go b/api/v1beta1/resource.go index e452d22153..39a520d3cb 100644 --- a/api/v1beta1/resource.go +++ b/api/v1beta1/resource.go @@ -10,9 +10,10 @@ import ( // +k8s:deepcopy-gen=true type Resource struct { - Name string `json:"name"` - Namespace string `json:"namespace"` apimetav1.GroupVersionKind `json:",inline"` + + Name string `json:"name"` + Namespace string `json:"namespace"` } func (r Resource) ToUnstructured() *unstructured.Unstructured { diff --git a/api/v1beta1/status.go b/api/v1beta1/status.go index e867ce45be..7478e76ce4 100644 --- a/api/v1beta1/status.go +++ b/api/v1beta1/status.go @@ -9,6 +9,8 @@ import ( // Status defines the observed state of CustomObject. // +k8s:deepcopy-gen=true type Status struct { + LastOperation `json:"lastOperation,omitempty"` + // State signifies current state of CustomObject. // Value can be one of ("Ready", "Processing", "Error", "Deleting", "Warning"). // +kubebuilder:validation:Required @@ -24,8 +26,7 @@ type Status struct { // All resources that are synced are considered for orphan removal on configuration changes, // and it is used to determine effective differences from one state to the next. // +listType=atomic - Synced []Resource `json:"synced,omitempty"` - LastOperation `json:"lastOperation,omitempty"` + Synced []Resource `json:"synced,omitempty"` } func (s Status) WithState(state State) Status { diff --git a/api/v1beta1/watcher_types.go b/api/v1beta1/watcher_types.go index cbdbb22ebe..e359530e18 100644 --- a/api/v1beta1/watcher_types.go +++ b/api/v1beta1/watcher_types.go @@ -109,10 +109,10 @@ type WatcherStatus struct { // WatcherList contains a list of Watcher. type WatcherList struct { apimetav1.TypeMeta `json:",inline"` - // +kubebuilder:validation:Optional apimetav1.ListMeta `json:"metadata"` - Items []Watcher `json:"items"` + + Items []Watcher `json:"items"` } //nolint:gochecknoinits // registers Watcher CRD on startup diff --git a/api/v1beta2/kyma_types.go b/api/v1beta2/kyma_types.go index edda44fd6a..534f86c494 100644 --- a/api/v1beta2/kyma_types.go +++ b/api/v1beta2/kyma_types.go @@ -61,6 +61,9 @@ type KymaSpec struct { // Module defines the components to be installed. type Module struct { + // +kubebuilder:default:=CreateAndDelete + CustomResourcePolicy `json:"customResourcePolicy,omitempty"` + // Name is a unique identifier of the module. // It is used to resolve a ModuleTemplate for creating a set of resources on the cluster. // @@ -91,9 +94,6 @@ type Module struct { // It will be removed in the upcoming API version. RemoteModuleTemplateRef string `json:"remoteModuleTemplateRef,omitempty"` - // +kubebuilder:default:=CreateAndDelete - CustomResourcePolicy `json:"customResourcePolicy,omitempty"` - // Managed is determining whether the module is managed or not. If the module is unmanaged, the user is responsible // for the lifecycle of the module. // +kubebuilder:default:=true @@ -132,6 +132,8 @@ func (kyma *Kyma) GetModuleStatusMap() map[string]*ModuleStatus { // KymaStatus defines the observed state of Kyma. type KymaStatus struct { + shared.LastOperation `json:"lastOperation,omitempty"` + // State signifies current state of Kyma. // Value can be one of ("Ready", "Processing", "Error", "Deleting"). State shared.State `json:"state,omitempty"` @@ -148,8 +150,6 @@ type KymaStatus struct { // Active Channel // +optional ActiveChannel string `json:"activeChannel,omitempty"` - - shared.LastOperation `json:"lastOperation,omitempty"` } func (status *KymaStatus) GetModuleStatus(moduleName string) *ModuleStatus { @@ -312,7 +312,8 @@ func (kyma *Kyma) GetNoLongerExistingModuleStatus() []*ModuleStatus { type KymaList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []Kyma `json:"items"` + + Items []Kyma `json:"items"` } //nolint:gochecknoinits // registers Kyma CRD on startup diff --git a/api/v1beta2/manifest_types.go b/api/v1beta2/manifest_types.go index 092b437ac3..e64145aece 100644 --- a/api/v1beta2/manifest_types.go +++ b/api/v1beta2/manifest_types.go @@ -53,6 +53,9 @@ func (i InstallInfo) Raw() []byte { // ManifestSpec defines the desired state of Manifest. type ManifestSpec struct { + // +kubebuilder:default:=CreateAndDelete + CustomResourcePolicy `json:"customResourcePolicy,omitempty"` + // Remote indicates if Manifest should be installed on a remote cluster Remote bool `json:"remote"` @@ -72,9 +75,6 @@ type ManifestSpec struct { // Resource specifies a resource to be watched for state updates Resource *unstructured.Unstructured `json:"resource,omitempty"` - // +kubebuilder:default:=CreateAndDelete - CustomResourcePolicy `json:"customResourcePolicy,omitempty"` - // LocalizedImages specifies a list of docker image references valid for the environment where the Manifest is installed. // The list entries are corresponding to the images actually used in the K8s resources of the Kyma module. // If provided, when the Kyma Module is installed in the target cluster, the "localized" image reference is used instead of the original one. @@ -148,7 +148,8 @@ func (manifest *Manifest) IsMandatoryModule() bool { type ManifestList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []Manifest `json:"items"` + + Items []Manifest `json:"items"` } //nolint:gochecknoinits // registers Manifest CRD on startup diff --git a/api/v1beta2/modulereleasemeta_types.go b/api/v1beta2/modulereleasemeta_types.go index 92e009f9e6..0bdb0d873c 100644 --- a/api/v1beta2/modulereleasemeta_types.go +++ b/api/v1beta2/modulereleasemeta_types.go @@ -51,7 +51,8 @@ type ModuleReleaseMetaSpec struct { type ModuleReleaseMetaList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []ModuleReleaseMeta `json:"items"` + + Items []ModuleReleaseMeta `json:"items"` } type ChannelVersionAssignment struct { diff --git a/api/v1beta2/moduletemplate_types.go b/api/v1beta2/moduletemplate_types.go index 7a2756e122..471bb5f552 100644 --- a/api/v1beta2/moduletemplate_types.go +++ b/api/v1beta2/moduletemplate_types.go @@ -176,7 +176,8 @@ type CustomStateCheck struct { type ModuleTemplateList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []ModuleTemplate `json:"items"` + + Items []ModuleTemplate `json:"items"` } type Resource struct { diff --git a/api/v1beta2/watcher_types.go b/api/v1beta2/watcher_types.go index 7b453cccfe..0c99dc050d 100644 --- a/api/v1beta2/watcher_types.go +++ b/api/v1beta2/watcher_types.go @@ -132,7 +132,8 @@ func (watcher *Watcher) GetManagerName() string { type WatcherList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []Watcher `json:"items"` + + Items []Watcher `json:"items"` } //nolint:gochecknoinits // registers Watcher CRD on startup diff --git a/cmd/main.go b/cmd/main.go index a4f587ff18..856057dab0 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -123,7 +123,8 @@ func main() { ctrl.SetLogger(log.ConfigLogger(int8(flagVar.LogLevel), //nolint:gosec // loglevel should always be between -128 to 127 zapcore.Lock(os.Stdout))) setupLog.Info("starting Lifecycle-Manager version: " + buildVersion) - if err := flagVar.Validate(); err != nil { + err := flagVar.Validate() + if err != nil { setupLog.Error(err, "unable to start manager") os.Exit(bootstrapFailedExitCode) } @@ -156,7 +157,8 @@ func pprofStartServer(addr string, timeout time.Duration, setupLog logr.Logger) WriteTimeout: timeout, } - if err := server.ListenAndServe(); err != nil { + err := server.ListenAndServe() + if err != nil { setupLog.Error(err, "error starting pprof server") } } @@ -239,7 +241,8 @@ func setupManager(flagVar *flags.FlagVar, cacheOptions cache.Options, scheme *ma go cleanupStoredVersions(flagVar.DropCrdStoredVersionMap, mgr, logger) go scheduleMetricsCleanup(kymaMetrics, flagVar.MetricsCleanupIntervalInMinutes, mgr, logger) - if err = mgr.Start(ctrl.SetupSignalHandler()); err != nil { + err = mgr.Start(ctrl.SetupSignalHandler()) + if err != nil { logger.Error(err, "problem running manager") os.Exit(runtimeProblemExitCode) } @@ -314,11 +317,13 @@ func configManager(flagVar *flags.FlagVar, cacheOptions cache.Options, func addHealthChecks(mgr manager.Manager, setupLog logr.Logger) { // +kubebuilder:scaffold:builder - if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil { + err := mgr.AddHealthzCheck("healthz", healthz.Ping) + if err != nil { setupLog.Error(err, "unable to set up health check") os.Exit(1) } - if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil { + err = mgr.AddReadyzCheck("readyz", healthz.Ping) + if err != nil { setupLog.Error(err, "unable to set up ready check") os.Exit(1) } @@ -351,7 +356,8 @@ func scheduleMetricsCleanup(kymaMetrics *metrics.KymaMetrics, cleanupIntervalInM _, scheduleErr := scheduler.Every(cleanupIntervalInMinutes).Minutes().Do(func() { ctx, cancel := context.WithTimeout(ctx, metricCleanupTimeout) defer cancel() - if err := kymaMetrics.CleanupNonExistingKymaCrsMetrics(ctx, mgr.GetClient()); err != nil { + err := kymaMetrics.CleanupNonExistingKymaCrsMetrics(ctx, mgr.GetClient()) + if err != nil { setupLog.Info(fmt.Sprintf("failed to cleanup non existing kyma crs metrics, err: %s", err)) } }) @@ -384,7 +390,7 @@ func setupKymaReconciler(mgr ctrl.Manager, descriptorProvider *provider.CachedDe moduleStatusGen := generator.NewModuleStatusGenerator(fromerror.GenerateModuleStatusFromError) modulesStatusHandler := modules.NewStatusHandler(moduleStatusGen, kcpClient, kymaMetrics.RemoveModuleStateMetrics) - if err := (&kyma.Reconciler{ + err := (&kyma.Reconciler{ Client: kcpClient, SkrContextFactory: skrContextFactory, Event: event, @@ -411,7 +417,8 @@ func setupKymaReconciler(mgr ctrl.Manager, descriptorProvider *provider.CachedDe EnableDomainNameVerification: flagVar.EnableDomainNameVerification, IstioNamespace: flagVar.IstioNamespace, }, - ); err != nil { + ) + if err != nil { setupLog.Error(err, "unable to create controller", "controller", "Kyma") os.Exit(1) } @@ -428,7 +435,7 @@ func setupPurgeReconciler(mgr ctrl.Manager, flagVar.FailureMaxDelay, flagVar.RateLimiterFrequency, flagVar.RateLimiterBurst) options.CacheSyncTimeout = flagVar.CacheSyncTimeout - if err := (&purge.Reconciler{ + err := (&purge.Reconciler{ Client: mgr.GetClient(), SkrContextFactory: skrContextProvider, Event: event, @@ -438,7 +445,8 @@ func setupPurgeReconciler(mgr ctrl.Manager, Metrics: metrics.NewPurgeMetrics(), }).SetupWithManager( mgr, options, - ); err != nil { + ) + if err != nil { setupLog.Error(err, "unable to create controller", "controller", "PurgeReconciler") os.Exit(bootstrapFailedExitCode) } @@ -456,7 +464,7 @@ func setupManifestReconciler(mgr ctrl.Manager, flagVar *flags.FlagVar, options c manifestClient := manifestclient.NewManifestClient(event, mgr.GetClient()) orphanDetectionClient := kymarepository.NewClient(mgr.GetClient()) specResolver := spec.NewResolver(keychainLookupFromFlag(mgr, flagVar), img.NewPathExtractor()) - if err := manifest.SetupWithManager( + err := manifest.SetupWithManager( mgr, options, queue.RequeueIntervals{ Success: flagVar.ManifestRequeueSuccessInterval, Busy: flagVar.ManifestRequeueBusyInterval, @@ -469,7 +477,8 @@ func setupManifestReconciler(mgr ctrl.Manager, flagVar *flags.FlagVar, options c EnableDomainNameVerification: flagVar.EnableDomainNameVerification, }, metrics.NewManifestMetrics(sharedMetrics), mandatoryModulesMetrics, manifestClient, orphanDetectionClient, specResolver, - ); err != nil { + ) + if err != nil { setupLog.Error(err, "unable to create controller", "controller", "Manifest") os.Exit(bootstrapFailedExitCode) } @@ -492,7 +501,7 @@ func setupKcpWatcherReconciler(mgr ctrl.Manager, options ctrlruntime.Options, ev options.CacheSyncTimeout = flagVar.CacheSyncTimeout options.MaxConcurrentReconciles = flagVar.MaxConcurrentWatcherReconciles - if err := (&watcherctrl.Reconciler{ + err := (&watcherctrl.Reconciler{ Client: mgr.GetClient(), Event: event, Scheme: mgr.GetScheme(), @@ -504,7 +513,8 @@ func setupKcpWatcherReconciler(mgr ctrl.Manager, options ctrlruntime.Options, ev Warning: flags.DefaultKymaRequeueWarningInterval, }, IstioGatewayNamespace: flagVar.IstioGatewayNamespace, - }).SetupWithManager(mgr, options); err != nil { + }).SetupWithManager(mgr, options) + if err != nil { setupLog.Error(err, "unable to create watcher controller") os.Exit(bootstrapFailedExitCode) } @@ -522,7 +532,7 @@ func setupMandatoryModuleReconciler(mgr ctrl.Manager, options.CacheSyncTimeout = flagVar.CacheSyncTimeout options.MaxConcurrentReconciles = flagVar.MaxConcurrentMandatoryModuleReconciles - if err := (&mandatorymodule.InstallationReconciler{ + err := (&mandatorymodule.InstallationReconciler{ Client: mgr.GetClient(), RequeueIntervals: queue.RequeueIntervals{ Success: flagVar.MandatoryModuleRequeueSuccessInterval, @@ -533,7 +543,8 @@ func setupMandatoryModuleReconciler(mgr ctrl.Manager, RemoteSyncNamespace: flagVar.RemoteSyncNamespace, DescriptorProvider: descriptorProvider, Metrics: metrics, - }).SetupWithManager(mgr, options); err != nil { + }).SetupWithManager(mgr, options) + if err != nil { setupLog.Error(err, "unable to create controller", "controller", "MandatoryModule") os.Exit(bootstrapFailedExitCode) } @@ -551,7 +562,7 @@ func setupMandatoryModuleDeletionReconciler(mgr ctrl.Manager, options.CacheSyncTimeout = flagVar.CacheSyncTimeout options.MaxConcurrentReconciles = flagVar.MaxConcurrentMandatoryModuleDeletionReconciles - if err := (&mandatorymodule.DeletionReconciler{ + err := (&mandatorymodule.DeletionReconciler{ Client: mgr.GetClient(), Event: event, DescriptorProvider: descriptorProvider, @@ -561,7 +572,8 @@ func setupMandatoryModuleDeletionReconciler(mgr ctrl.Manager, Error: flagVar.KymaRequeueErrInterval, Warning: flagVar.KymaRequeueWarningInterval, }, - }).SetupWithManager(mgr, options); err != nil { + }).SetupWithManager(mgr, options) + if err != nil { setupLog.Error(err, "unable to create controller", "controller", "MandatoryModule") os.Exit(bootstrapFailedExitCode) } diff --git a/config/samples/component-integration-installed/crd/v1beta1/kcpmodule_types.go b/config/samples/component-integration-installed/crd/v1beta1/kcpmodule_types.go index 5aed650bb1..f00135d314 100644 --- a/config/samples/component-integration-installed/crd/v1beta1/kcpmodule_types.go +++ b/config/samples/component-integration-installed/crd/v1beta1/kcpmodule_types.go @@ -60,5 +60,6 @@ type KCPModuleStatus struct { type KCPModuleList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []KCPModule `json:"items"` + + Items []KCPModule `json:"items"` } diff --git a/config/samples/component-integration-installed/crd/v1beta2/kcpmodule_types.go b/config/samples/component-integration-installed/crd/v1beta2/kcpmodule_types.go index 30b6f22c95..57630fd7a1 100644 --- a/config/samples/component-integration-installed/crd/v1beta2/kcpmodule_types.go +++ b/config/samples/component-integration-installed/crd/v1beta2/kcpmodule_types.go @@ -61,5 +61,6 @@ type KCPModuleStatus struct { type KCPModuleList struct { apimetav1.TypeMeta `json:",inline"` apimetav1.ListMeta `json:"metadata,omitempty"` - Items []KCPModule `json:"items"` + + Items []KCPModule `json:"items"` } diff --git a/internal/controller/istiogatewaysecret/setup.go b/internal/controller/istiogatewaysecret/setup.go index 6440c14f0b..beebe20140 100644 --- a/internal/controller/istiogatewaysecret/setup.go +++ b/internal/controller/istiogatewaysecret/setup.go @@ -42,8 +42,9 @@ func SetupReconciler(mgr ctrl.Manager, annotation string, ) (time.Time, error) { if strValue, ok := secret.Annotations[annotation]; ok { - if time, err := time.Parse(time.RFC3339, strValue); err == nil { - return time, nil + parsedTime, err := time.Parse(time.RFC3339, strValue) + if err == nil { + return parsedTime, nil } } return time.Time{}, fmt.Errorf("%w: %s", errCouldNotGetTimeFromAnnotation, annotation) @@ -85,12 +86,13 @@ func (r *Reconciler) setupWithManager(mgr ctrl.Manager, opts ctrlruntime.Options GenericFunc: func(e event.GenericEvent) bool { return false }, } - if err := ctrl.NewControllerManagedBy(mgr). + err := ctrl.NewControllerManagedBy(mgr). For(&apicorev1.Secret{}). Named(controllerName). WithOptions(opts). WithEventFilter(secretPredicate). - Complete(r); err != nil { + Complete(r) + if err != nil { return fmt.Errorf("failed to setup manager for istio controller: %w", err) } diff --git a/internal/controller/kyma/controller.go b/internal/controller/kyma/controller.go index 6d94312441..f8473302e4 100644 --- a/internal/controller/kyma/controller.go +++ b/internal/controller/kyma/controller.go @@ -74,6 +74,7 @@ type Reconciler struct { client.Client event.Event queue.RequeueIntervals + SkrContextFactory remote.SkrContextProvider DescriptorProvider *provider.CachedDescriptorProvider SyncRemoteCrds remote.SyncCrdsUseCase @@ -91,11 +92,13 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu logger.V(log.DebugLevel).Info("Kyma reconciliation started") kyma := &v1beta2.Kyma{} - if err := r.Get(ctx, req.NamespacedName, kyma); err != nil { + err := r.Get(ctx, req.NamespacedName, kyma) + if err != nil { if util.IsNotFound(err) { logger.V(log.DebugLevel).Info(fmt.Sprintf("Kyma %s not found, probably already deleted", req.NamespacedName)) - if err = r.deleteOrphanedCertificate(ctx, req.Name); err != nil { + err = r.deleteOrphanedCertificate(ctx, req.Name) + if err != nil { return ctrl.Result{}, err } return ctrl.Result{}, nil @@ -104,7 +107,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu return ctrl.Result{}, fmt.Errorf("KymaController: %w", err) } - if err := r.UpdateModuleTemplatesIfNeeded(ctx); err != nil { + err = r.UpdateModuleTemplatesIfNeeded(ctx) + if err != nil { return ctrl.Result{}, fmt.Errorf("KymaController: %w", err) } @@ -115,7 +119,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu return ctrl.Result{RequeueAfter: r.Success}, nil } - err := r.SkrContextFactory.Init(ctx, kyma.GetNamespacedName()) + err = r.SkrContextFactory.Init(ctx, kyma.GetNamespacedName()) if !kyma.DeletionTimestamp.IsZero() && errors.Is(err, common.ErrAccessSecretNotFound) { return r.handleDeletedSkr(ctx, kyma) } @@ -173,7 +177,8 @@ func (r *Reconciler) DeleteNoLongerExistingModules(ctx context.Context, kyma *v1 } func (r *Reconciler) UpdateMetrics(ctx context.Context, kyma *v1beta2.Kyma) { - if err := r.Metrics.UpdateAll(kyma); err != nil { + err := r.Metrics.UpdateAll(kyma) + if err != nil { if metrics.IsMissingMetricsAnnotationOrLabel(err) { r.Event.Warning(kyma, metricsError, err) } @@ -191,7 +196,8 @@ func (r *Reconciler) IsKymaManaged() bool { func (r *Reconciler) GetModuleTemplateList(ctx context.Context) (*v1beta2.ModuleTemplateList, error) { moduleTemplateList := &v1beta2.ModuleTemplateList{} - if err := r.List(ctx, moduleTemplateList, &client.ListOptions{}); err != nil { + err := r.List(ctx, moduleTemplateList, &client.ListOptions{}) + if err != nil { return nil, fmt.Errorf("could not aggregate module templates for module catalog sync: %w", err) } @@ -206,7 +212,8 @@ func (r *Reconciler) UpdateModuleTemplatesIfNeeded(ctx context.Context) error { for _, mt := range moduleTemplateList.Items { if needUpdateForMandatoryModuleLabel(mt) { - if err = r.Update(ctx, &mt); err != nil { + err = r.Update(ctx, &mt) + if err != nil { return fmt.Errorf("failed to update ModuleTemplate, %w", err) } } @@ -224,7 +231,8 @@ func (r *Reconciler) handleDeletedSkr(ctx context.Context, kyma *v1beta2.Kyma) ( r.cleanupMetrics(kyma.Name) r.removeAllFinalizers(kyma) - if err := r.updateKyma(ctx, kyma); err != nil { + err := r.updateKyma(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.KymaUnderDeletionAndAccessSecretNotFound, queue.UnexpectedRequeue) return ctrl.Result{}, err } @@ -232,13 +240,16 @@ func (r *Reconciler) handleDeletedSkr(ctx context.Context, kyma *v1beta2.Kyma) ( return ctrl.Result{Requeue: true}, nil } +//nolint:funlen // reconcile is the main reconciliation function for Kyma, will be refactored in the future func (r *Reconciler) reconcile(ctx context.Context, kyma *v1beta2.Kyma) (ctrl.Result, error) { if !kyma.DeletionTimestamp.IsZero() && kyma.Status.State != shared.StateDeleting { - if err := r.deleteRemoteKyma(ctx, kyma); err != nil { + err := r.deleteRemoteKyma(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.RemoteKymaDeletion, queue.UnexpectedRequeue) return r.requeueWithError(ctx, kyma, err) } - if err := r.updateStatus(ctx, kyma, shared.StateDeleting, "waiting for modules to be deleted"); err != nil { + err = r.updateStatus(ctx, kyma, shared.StateDeleting, "waiting for modules to be deleted") + if err != nil { r.Metrics.RecordRequeueReason(metrics.StatusUpdateToDeleting, queue.UnexpectedRequeue) return r.requeueWithError(ctx, kyma, fmt.Errorf("could not update kyma status after triggering deletion: %w", err)) @@ -248,7 +259,8 @@ func (r *Reconciler) reconcile(ctx context.Context, kyma *v1beta2.Kyma) (ctrl.Re } if needsUpdate := kyma.EnsureLabelsAndFinalizers(); needsUpdate { - if err := r.Update(ctx, kyma); err != nil { + err := r.Update(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.LabelsAndFinalizersUpdate, queue.UnexpectedRequeue) return r.requeueWithError(ctx, kyma, fmt.Errorf("failed to update kyma after finalizer check: %w", err)) } @@ -262,7 +274,8 @@ func (r *Reconciler) reconcile(ctx context.Context, kyma *v1beta2.Kyma) (ctrl.Re return r.requeueWithError(ctx, kyma, fmt.Errorf("could not sync CRDs: %w", err)) } if updateRequired { - if err := r.Update(ctx, kyma); err != nil { + err := r.Update(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.CrdAnnotationsUpdate, queue.UnexpectedRequeue) return r.requeueWithError(ctx, kyma, fmt.Errorf("could not update kyma annotations: %w", err)) } @@ -270,7 +283,8 @@ func (r *Reconciler) reconcile(ctx context.Context, kyma *v1beta2.Kyma) (ctrl.Re return ctrl.Result{Requeue: true}, nil } // update the control-plane kyma with the changes to the spec of the remote Kyma - if err = r.replaceSpecFromRemote(ctx, kyma); err != nil { + err = r.replaceSpecFromRemote(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.SpecReplacementFromRemote, queue.UnexpectedRequeue) return r.requeueWithError(ctx, kyma, fmt.Errorf("could not replace control plane kyma spec"+ " with remote kyma spec: %w", err)) @@ -282,7 +296,8 @@ func (r *Reconciler) reconcile(ctx context.Context, kyma *v1beta2.Kyma) (ctrl.Re return ctrl.Result{}, err } - if err := r.syncStatusToRemote(ctx, kyma); err != nil { + err = r.syncStatusToRemote(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.StatusSyncToRemote, queue.UnexpectedRequeue) return r.requeueWithError(ctx, kyma, fmt.Errorf("could not synchronize remote kyma status: %w", err)) } @@ -295,7 +310,8 @@ func (r *Reconciler) deleteRemoteKyma(ctx context.Context, kyma *v1beta2.Kyma) e if err != nil { return fmt.Errorf("failed to get skrContext: %w", err) } - if err := skrContext.DeleteKyma(ctx); client.IgnoreNotFound(err) != nil { + err = skrContext.DeleteKyma(ctx) + if client.IgnoreNotFound(err) != nil { logf.FromContext(ctx).V(log.InfoLevel).Error(err, "Failed to be deleted remotely!") return fmt.Errorf("error occurred while trying to delete remotely synced kyma: %w", err) } @@ -335,11 +351,13 @@ func (r *Reconciler) syncStatusToRemote(ctx context.Context, kcpKyma *v1beta2.Ky return fmt.Errorf("failed to get skrContext: %w", err) } - if err := skrContext.SynchronizeKymaMetadata(ctx, kcpKyma, remoteKyma); err != nil { + err = skrContext.SynchronizeKymaMetadata(ctx, kcpKyma, remoteKyma) + if err != nil { return fmt.Errorf("failed to sync SKR Kyma CR Metadata: %w", err) } - if err := skrContext.SynchronizeKymaStatus(ctx, kcpKyma, remoteKyma); err != nil { + err = skrContext.SynchronizeKymaStatus(ctx, kcpKyma, remoteKyma) + if err != nil { return fmt.Errorf("failed to sync SKR Kyma CR Status: %w", err) } @@ -359,7 +377,8 @@ func (r *Reconciler) replaceSpecFromRemote(ctx context.Context, controlPlaneKyma remote.ReplaceSpec(controlPlaneKyma, remoteKyma) - if err := r.ValidateDefaultChannel(controlPlaneKyma); err != nil { + err = r.ValidateDefaultChannel(controlPlaneKyma) + if err != nil { return err } @@ -386,7 +405,8 @@ func (r *Reconciler) processKymaState(ctx context.Context, kyma *v1beta2.Kyma) ( } func (r *Reconciler) handleInitialState(ctx context.Context, kyma *v1beta2.Kyma) (ctrl.Result, error) { - if err := r.updateStatus(ctx, kyma, shared.StateProcessing, "started processing"); err != nil { + err := r.updateStatus(ctx, kyma, shared.StateProcessing, "started processing") + if err != nil { r.Metrics.RecordRequeueReason(metrics.InitialStateHandling, queue.UnexpectedRequeue) return ctrl.Result{}, err } @@ -412,7 +432,8 @@ func (r *Reconciler) handleProcessingState(ctx context.Context, kyma *v1beta2.Ky }) errGroup.Go(func() error { - if err := r.RemoteCatalog.SyncModuleCatalog(ctx, kyma); err != nil { + err := r.RemoteCatalog.SyncModuleCatalog(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.ModuleCatalogSync, queue.UnexpectedRequeue) kyma.UpdateCondition(v1beta2.ConditionTypeModuleCatalog, apimetav1.ConditionFalse) return fmt.Errorf("failed to synchronize remote module catalog: %w", err) @@ -423,7 +444,8 @@ func (r *Reconciler) handleProcessingState(ctx context.Context, kyma *v1beta2.Ky if r.WatcherEnabled() { errGroup.Go(func() error { - if err := r.SKRWebhookManager.Reconcile(ctx, kyma); err != nil { + err := r.SKRWebhookManager.Reconcile(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.SkrWebhookResourcesInstallation, queue.UnexpectedRequeue) kyma.UpdateCondition(v1beta2.ConditionTypeSKRWebhook, apimetav1.ConditionFalse) if errors.Is(err, watcher.ErrSkrCertificateNotReady) { @@ -436,7 +458,8 @@ func (r *Reconciler) handleProcessingState(ctx context.Context, kyma *v1beta2.Ky }) } - if err := errGroup.Wait(); err != nil { + err := errGroup.Wait() + if err != nil { return r.requeueWithError(ctx, kyma, err) } @@ -471,12 +494,14 @@ func (r *Reconciler) handleDeletingState(ctx context.Context, kyma *v1beta2.Kyma logger := logf.FromContext(ctx).V(log.InfoLevel) if r.WatcherEnabled() { - if err := r.SKRWebhookManager.Remove(ctx, kyma); err != nil { + err := r.SKRWebhookManager.Remove(ctx, kyma) + if err != nil { return ctrl.Result{}, err } } - if err := r.RemoteCatalog.Delete(ctx, kyma.GetNamespacedName()); err != nil { + err := r.RemoteCatalog.Delete(ctx, kyma.GetNamespacedName()) + if err != nil { err = fmt.Errorf("failed to delete remote module catalog: %w", err) r.Metrics.RecordRequeueReason(metrics.RemoteModuleCatalogDeletion, queue.UnexpectedRequeue) return r.requeueWithError(ctx, kyma, err) @@ -487,14 +512,16 @@ func (r *Reconciler) handleDeletingState(ctx context.Context, kyma *v1beta2.Kyma } r.SkrContextFactory.InvalidateCache(kyma.GetNamespacedName()) - if err = skrContext.RemoveFinalizersFromKyma(ctx); client.IgnoreNotFound(err) != nil { + err = skrContext.RemoveFinalizersFromKyma(ctx) + if client.IgnoreNotFound(err) != nil { r.Metrics.RecordRequeueReason(metrics.FinalizersRemovalFromRemoteKyma, queue.UnexpectedRequeue) return r.requeueWithError(ctx, kyma, err) } logger.Info("removed remote finalizers") - if err := r.cleanupManifestCRs(ctx, kyma); err != nil { + err = r.cleanupManifestCRs(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.CleanupManifestCrs, queue.UnexpectedRequeue) return ctrl.Result{}, err } @@ -502,7 +529,8 @@ func (r *Reconciler) handleDeletingState(ctx context.Context, kyma *v1beta2.Kyma r.cleanupMetrics(kyma.Name) controllerutil.RemoveFinalizer(kyma, shared.KymaFinalizer) - if err := r.updateKyma(ctx, kyma); err != nil { + err = r.updateKyma(ctx, kyma) + if err != nil { r.Metrics.RecordRequeueReason(metrics.KymaDeletion, queue.UnexpectedRequeue) return ctrl.Result{}, err } @@ -524,7 +552,8 @@ func (r *Reconciler) cleanupManifestCRs(ctx context.Context, kyma *v1beta2.Kyma) return nil } - if err = r.deleteManifests(ctx, relatedManifests); err != nil { + err = r.deleteManifests(ctx, relatedManifests) + if err != nil { return fmt.Errorf("error while trying to delete manifests: %w", err) } return ErrManifestsStillExist @@ -532,7 +561,8 @@ func (r *Reconciler) cleanupManifestCRs(ctx context.Context, kyma *v1beta2.Kyma) func (r *Reconciler) deleteManifests(ctx context.Context, manifests []v1beta2.Manifest) error { for i := range manifests { - if err := r.Delete(ctx, &manifests[i]); client.IgnoreNotFound(err) != nil { + err := r.Delete(ctx, &manifests[i]) + if client.IgnoreNotFound(err) != nil { return fmt.Errorf("error while trying to delete manifest: %w", err) } } @@ -542,8 +572,9 @@ func (r *Reconciler) deleteManifests(ctx context.Context, manifests []v1beta2.Ma func (r *Reconciler) getRelatedManifestCRs(ctx context.Context, kyma *v1beta2.Kyma) ([]v1beta2.Manifest, error) { manifestList := &v1beta2.ManifestList{} labelSelector := k8slabels.SelectorFromSet(k8slabels.Set{shared.KymaName: kyma.Name}) - if err := r.List(ctx, manifestList, - &client.ListOptions{LabelSelector: labelSelector}); client.IgnoreNotFound(err) != nil { + err := r.List(ctx, manifestList, + &client.ListOptions{LabelSelector: labelSelector}) + if client.IgnoreNotFound(err) != nil { return nil, fmt.Errorf("failed to get related manifests, %w", err) } @@ -561,7 +592,8 @@ func (r *Reconciler) removeAllFinalizers(kyma *v1beta2.Kyma) { } func (r *Reconciler) updateKyma(ctx context.Context, kyma *v1beta2.Kyma) error { - if err := r.Update(ctx, kyma); err != nil { + err := r.Update(ctx, kyma) + if err != nil { err = fmt.Errorf("error while updating kyma during deletion: %w", err) r.Event.Warning(kyma, updateSpecError, err) return err @@ -576,17 +608,19 @@ func (r *Reconciler) reconcileManifests(ctx context.Context, kyma *v1beta2.Kyma) modules := prsr.GenerateModulesFromTemplates(kyma, templates) runner := sync.New(r) - if err := runner.ReconcileManifests(ctx, kyma, modules); err != nil { + err := runner.ReconcileManifests(ctx, kyma, modules) + if err != nil { return fmt.Errorf("sync failed: %w", err) } - err := r.ModulesStatusHandler.UpdateModuleStatuses(ctx, kyma, modules) + err = r.ModulesStatusHandler.UpdateModuleStatuses(ctx, kyma, modules) if err != nil { return fmt.Errorf("failed to update module statuses: %w", err) } // If module get removed from kyma, the module deletion happens here. - if err := r.DeleteNoLongerExistingModules(ctx, kyma); err != nil { + err = r.DeleteNoLongerExistingModules(ctx, kyma) + if err != nil { return fmt.Errorf("error while syncing conditions during deleting non exists modules: %w", err) } return nil @@ -595,7 +629,8 @@ func (r *Reconciler) reconcileManifests(ctx context.Context, kyma *v1beta2.Kyma) func (r *Reconciler) updateStatus(ctx context.Context, kyma *v1beta2.Kyma, state shared.State, message string, ) error { - if err := status.Helper(r).UpdateStatusForExistingModules(ctx, kyma, state, message); err != nil { + err := status.Helper(r).UpdateStatusForExistingModules(ctx, kyma, state, message) + if err != nil { r.Event.Warning(kyma, patchStatusError, err) return fmt.Errorf("error while updating status to %s because of %s: %w", state, message, err) } @@ -603,7 +638,8 @@ func (r *Reconciler) updateStatus(ctx context.Context, kyma *v1beta2.Kyma, } func (r *Reconciler) updateStatusWithError(ctx context.Context, kyma *v1beta2.Kyma, err error) error { - if err := status.Helper(r).UpdateStatusForExistingModules(ctx, kyma, shared.StateError, err.Error()); err != nil { + err = status.Helper(r).UpdateStatusForExistingModules(ctx, kyma, shared.StateError, err.Error()) + if err != nil { r.Event.Warning(kyma, updateStatusError, err) return fmt.Errorf("error while updating status to %s: %w", shared.StateError, err) } @@ -625,7 +661,8 @@ func (r *Reconciler) deleteManifest(ctx context.Context, trackedManifest *v1beta func (r *Reconciler) deleteOrphanedCertificate(ctx context.Context, kymaName string) error { if r.WatcherEnabled() { - if err := r.SKRWebhookManager.RemoveSkrCertificate(ctx, kymaName); err != nil { + err := r.SKRWebhookManager.RemoveSkrCertificate(ctx, kymaName) + if err != nil { return err } } diff --git a/internal/controller/kyma/setup.go b/internal/controller/kyma/setup.go index 407bebf0cc..a8f9fd6577 100644 --- a/internal/controller/kyma/setup.go +++ b/internal/controller/kyma/setup.go @@ -54,10 +54,11 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager, opts ctrlruntime.Options shared.OperatorName, verifyFunc, ) - if err := mgr.Add(runnableListener); err != nil { + err := mgr.Add(runnableListener) + if err != nil { return fmt.Errorf("KymaReconciler %w", err) } - if err := ctrl.NewControllerManagedBy(mgr).For(&v1beta2.Kyma{}). + err = ctrl.NewControllerManagedBy(mgr).For(&v1beta2.Kyma{}). Named(controllerName). WithOptions(opts). WithEventFilter(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.LabelChangedPredicate{})). @@ -69,7 +70,8 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager, opts ctrlruntime.Options handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &v1beta2.Kyma{}, handler.OnlyControllerOwner()), builder.WithPredicates(predicate.ResourceVersionChangedPredicate{})). WatchesRawSource(source.Channel(runnableListener.ReceivedEvents, r.skrEventHandler())). - Complete(r); err != nil { + Complete(r) + if err != nil { return fmt.Errorf("failed to setup manager for kyma controller: %w", err) } diff --git a/internal/controller/mandatorymodule/deletion_controller.go b/internal/controller/mandatorymodule/deletion_controller.go index e67599d90d..484bbec703 100644 --- a/internal/controller/mandatorymodule/deletion_controller.go +++ b/internal/controller/mandatorymodule/deletion_controller.go @@ -44,6 +44,7 @@ type DeletionReconciler struct { client.Client event.Event queue.RequeueIntervals + DescriptorProvider *provider.CachedDescriptorProvider } @@ -52,7 +53,8 @@ func (r *DeletionReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c logger.V(log.DebugLevel).Info("Mandatory Module Deletion Reconciliation started") template := &v1beta2.ModuleTemplate{} - if err := r.Get(ctx, req.NamespacedName, template); err != nil { + err := r.Get(ctx, req.NamespacedName, template) + if err != nil { if util.IsNotFound(err) { logger.V(log.DebugLevel).Info(fmt.Sprintf("ModuleTemplate %s not found, probably already deleted", req.NamespacedName)) @@ -87,7 +89,8 @@ func (r *DeletionReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c return ctrl.Result{}, nil } - if err := r.removeManifests(ctx, manifests); err != nil { + err = r.removeManifests(ctx, manifests) + if err != nil { r.Event.Warning(template, deletingManifestError, err) return ctrl.Result{}, fmt.Errorf("failed to remove MandatoryModule Manifest: %w", err) } @@ -98,7 +101,8 @@ func (r *DeletionReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c func (r *DeletionReconciler) updateTemplateFinalizer(ctx context.Context, template *v1beta2.ModuleTemplate, ) (ctrl.Result, error) { - if err := r.Update(ctx, template); err != nil { + err := r.Update(ctx, template) + if err != nil { r.Event.Warning(template, settingFinalizerError, err) return ctrl.Result{}, fmt.Errorf("failed to update MandatoryModuleTemplate finalizer: %w", err) } @@ -114,10 +118,11 @@ func (r *DeletionReconciler) getCorrespondingManifests(ctx context.Context, if err != nil { return nil, fmt.Errorf("not able to get descriptor from template: %w", err) } - if err := r.List(ctx, manifests, &client.ListOptions{ + err = r.List(ctx, manifests, &client.ListOptions{ Namespace: template.Namespace, LabelSelector: k8slabels.SelectorFromSet(k8slabels.Set{shared.IsMandatoryModule: "true"}), - }); client.IgnoreNotFound(err) != nil { + }) + if client.IgnoreNotFound(err) != nil { return nil, fmt.Errorf("not able to list mandatory module manifests: %w", err) } @@ -128,7 +133,8 @@ func (r *DeletionReconciler) getCorrespondingManifests(ctx context.Context, func (r *DeletionReconciler) removeManifests(ctx context.Context, manifests []v1beta2.Manifest) error { for _, manifest := range manifests { - if err := r.Delete(ctx, &manifest); err != nil { + err := r.Delete(ctx, &manifest) + if err != nil { return fmt.Errorf("not able to delete manifest %s/%s: %w", manifest.Namespace, manifest.Name, err) } } diff --git a/internal/controller/mandatorymodule/installation_controller.go b/internal/controller/mandatorymodule/installation_controller.go index 2d029da004..e5ca1f4bcb 100644 --- a/internal/controller/mandatorymodule/installation_controller.go +++ b/internal/controller/mandatorymodule/installation_controller.go @@ -39,6 +39,7 @@ import ( type InstallationReconciler struct { client.Client queue.RequeueIntervals + DescriptorProvider *provider.CachedDescriptorProvider RemoteSyncNamespace string Metrics *metrics.MandatoryModulesMetrics @@ -49,7 +50,8 @@ func (r *InstallationReconciler) Reconcile(ctx context.Context, req ctrl.Request logger.V(log.DebugLevel).Info("Mandatory Module Reconciliation started") kyma := &v1beta2.Kyma{} - if err := r.Get(ctx, req.NamespacedName, kyma); err != nil { + err := r.Get(ctx, req.NamespacedName, kyma) + if err != nil { if util.IsNotFound(err) { logger.V(log.DebugLevel).Info(fmt.Sprintf("Kyma %s not found, probably already deleted", req.NamespacedName)) @@ -75,7 +77,8 @@ func (r *InstallationReconciler) Reconcile(ctx context.Context, req ctrl.Request } runner := sync.New(r) - if err := runner.ReconcileManifests(ctx, kyma, modules); err != nil { + err = runner.ReconcileManifests(ctx, kyma, modules) + if err != nil { return emptyResultWithErr(err) } diff --git a/internal/controller/mandatorymodule/setup.go b/internal/controller/mandatorymodule/setup.go index 3cf543e41e..14b009f4b1 100644 --- a/internal/controller/mandatorymodule/setup.go +++ b/internal/controller/mandatorymodule/setup.go @@ -19,7 +19,7 @@ const ( ) func (r *InstallationReconciler) SetupWithManager(mgr ctrl.Manager, opts ctrlruntime.Options) error { - if err := ctrl.NewControllerManagedBy(mgr). + err := ctrl.NewControllerManagedBy(mgr). For(&v1beta2.Kyma{}). Named(installationControllerName). WithOptions(opts). @@ -29,19 +29,21 @@ func (r *InstallationReconciler) SetupWithManager(mgr ctrl.Manager, opts ctrlrun handler.EnqueueRequestsFromMapFunc(watch.NewMandatoryTemplateChangeHandler(r).Watch()), ). Watches(&apicorev1.Secret{}, handler.Funcs{}). - Complete(r); err != nil { + Complete(r) + if err != nil { return fmt.Errorf("failed to setup manager for mandatory module installation controller: %w", err) } return nil } func (r *DeletionReconciler) SetupWithManager(mgr ctrl.Manager, opts ctrlruntime.Options) error { - if err := ctrl.NewControllerManagedBy(mgr). + err := ctrl.NewControllerManagedBy(mgr). For(&v1beta2.ModuleTemplate{}). Named(deletionControllerName). WithOptions(opts). WithEventFilter(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.LabelChangedPredicate{})). - Complete(r); err != nil { + Complete(r) + if err != nil { return fmt.Errorf("failed to setup manager for mandatory module deletion controller: %w", err) } return nil diff --git a/internal/controller/manifest/setup.go b/internal/controller/manifest/setup.go index 1272acb9c5..99e0793555 100644 --- a/internal/controller/manifest/setup.go +++ b/internal/controller/manifest/setup.go @@ -58,7 +58,8 @@ func SetupWithManager(mgr manager.Manager, opts ctrlruntime.Options, requeueInte ) // start listener as a manager runnable - if err := mgr.Add(runnableListener); err != nil { + err := mgr.Add(runnableListener) + if err != nil { return fmt.Errorf("failed to add to listener to manager: %w", err) } @@ -77,7 +78,7 @@ func SetupWithManager(mgr manager.Manager, opts ctrlruntime.Options, requeueInte } skrEventChannel := source.Channel(runnableListener.ReceivedEvents, addSkrEventToQueueFunc) - if err := ctrl.NewControllerManagedBy(mgr). + err = ctrl.NewControllerManagedBy(mgr). For(&v1beta2.Manifest{}). Named(controllerName). Watches(&apicorev1.Secret{}, handler.Funcs{}, @@ -86,7 +87,8 @@ func SetupWithManager(mgr manager.Manager, opts ctrlruntime.Options, requeueInte WatchesRawSource(skrEventChannel). WithOptions(opts). Complete(NewReconciler(mgr, requeueIntervals, manifestMetrics, mandatoryModulesMetrics, - manifestClient, orphanDetectionClient, specResolver)); err != nil { + manifestClient, orphanDetectionClient, specResolver)) + if err != nil { return fmt.Errorf("failed to setup manager for manifest controller: %w", err) } diff --git a/internal/controller/purge/controller.go b/internal/controller/purge/controller.go index 339a2cf46d..0980217cb2 100644 --- a/internal/controller/purge/controller.go +++ b/internal/controller/purge/controller.go @@ -50,6 +50,7 @@ const ( type Reconciler struct { client.Client event.Event + SkrContextFactory remote.SkrContextProvider PurgeFinalizerTimeout time.Duration SkipCRDs matcher.CRDMatcherFunc @@ -62,7 +63,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu logger.V(log.DebugLevel).Info("Purge reconciliation started") kyma := &v1beta2.Kyma{} - if err := r.Get(ctx, req.NamespacedName, kyma); err != nil { + err := r.Get(ctx, req.NamespacedName, kyma) + if err != nil { return handleKymaNotFoundError(logger, kyma, err) } @@ -75,7 +77,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu } start := time.Now() - err := r.SkrContextFactory.Init(ctx, kyma.GetNamespacedName()) + err = r.SkrContextFactory.Init(ctx, kyma.GetNamespacedName()) if err != nil { return r.handleSkrNotFoundError(ctx, kyma, err) } @@ -89,7 +91,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu } func (r *Reconciler) UpdateStatus(ctx context.Context, kyma *v1beta2.Kyma, state shared.State, message string) error { - if err := status.Helper(r).UpdateStatusForExistingModules(ctx, kyma, state, message); err != nil { + err := status.Helper(r).UpdateStatusForExistingModules(ctx, kyma, state, message) + if err != nil { return fmt.Errorf("failed updating status to %s because of %s: %w", state, message, err) } return nil @@ -110,7 +113,8 @@ func handleKymaNotFoundError(logger logr.Logger, kyma *v1beta2.Kyma, err error) } func (r *Reconciler) handleKymaNotMarkedForDeletion(ctx context.Context, kyma *v1beta2.Kyma) (ctrl.Result, error) { - if err := r.ensurePurgeFinalizer(ctx, kyma); err != nil { + err := r.ensurePurgeFinalizer(ctx, kyma) + if err != nil { logf.FromContext(ctx).V(log.DebugLevel).Info(fmt.Sprintf("Failed setting purge finalizer for Kyma %s: %s", kyma.GetName(), err)) r.Warning(kyma, setFinalizerFailure, err) return ctrl.Result{}, err @@ -181,7 +185,8 @@ func (r *Reconciler) handlePurge(ctx context.Context, kyma *v1beta2.Kyma, remote func (r *Reconciler) ensurePurgeFinalizer(ctx context.Context, kyma *v1beta2.Kyma) error { if controllerutil.AddFinalizer(kyma, shared.PurgeFinalizer) { - if err := r.Update(ctx, kyma); err != nil { + err := r.Update(ctx, kyma) + if err != nil { return fmt.Errorf("failed updating object: %w", err) } } @@ -190,7 +195,8 @@ func (r *Reconciler) ensurePurgeFinalizer(ctx context.Context, kyma *v1beta2.Kym func (r *Reconciler) dropPurgeFinalizer(ctx context.Context, kyma *v1beta2.Kyma) (bool, error) { if controllerutil.RemoveFinalizer(kyma, shared.PurgeFinalizer) { - if err := r.Update(ctx, kyma); err != nil { + err := r.Update(ctx, kyma) + if err != nil { return false, fmt.Errorf("failed updating object: %w", err) } return true, nil @@ -208,7 +214,8 @@ func (r *Reconciler) calculateRequeueAfterTime(kyma *v1beta2.Kyma) time.Duration func (r *Reconciler) performCleanup(ctx context.Context, remoteClient client.Client) ([]string, error) { crdList := apiextensionsv1.CustomResourceDefinitionList{} - if err := remoteClient.List(ctx, &crdList); err != nil { + err := remoteClient.List(ctx, &crdList) + if err != nil { return nil, fmt.Errorf("failed fetching CRDs from remote cluster: %w", err) } @@ -260,7 +267,8 @@ func getAllRemainingCRs(ctx context.Context, remoteClient client.Client, } staleResources.SetGroupVersionKind(gvk) - if err := remoteClient.List(ctx, &staleResources); err != nil { + err := remoteClient.List(ctx, &staleResources) + if err != nil { return unstructured.UnstructuredList{}, fmt.Errorf("failed fetching resources: %w", err) } @@ -274,7 +282,8 @@ func dropFinalizers(ctx context.Context, remoteClient client.Client, for index := range staleResources.Items { resource := staleResources.Items[index] resource.SetFinalizers(nil) - if err := remoteClient.Update(ctx, &resource); err != nil { + err := remoteClient.Update(ctx, &resource) + if err != nil { return handledResources, fmt.Errorf("failed updating resource: %w", err) } handledResources = append(handledResources, fmt.Sprintf("%s/%s", resource.GetNamespace(), resource.GetName())) diff --git a/internal/controller/purge/setup.go b/internal/controller/purge/setup.go index f827b2dc38..c06cd59f4f 100644 --- a/internal/controller/purge/setup.go +++ b/internal/controller/purge/setup.go @@ -13,12 +13,13 @@ import ( const controllerName = "purge" func (r *Reconciler) SetupWithManager(mgr ctrl.Manager, opts ctrlruntime.Options) error { - if err := ctrl.NewControllerManagedBy(mgr). + err := ctrl.NewControllerManagedBy(mgr). For(&v1beta2.Kyma{}). Named(controllerName). WithOptions(opts). WithEventFilter(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.LabelChangedPredicate{})). - Complete(r); err != nil { + Complete(r) + if err != nil { return fmt.Errorf("failed to setup manager for purge controller: %w", err) } return nil diff --git a/internal/controller/watcher/controller.go b/internal/controller/watcher/controller.go index d8a899e89e..ca51a0b0fc 100644 --- a/internal/controller/watcher/controller.go +++ b/internal/controller/watcher/controller.go @@ -55,12 +55,13 @@ var ( type Reconciler struct { client.Client event.Event + queue.RequeueIntervals + IstioClient *istio.Client VirtualServiceFactory istio.VirtualServiceFactory RestConfig *rest.Config Scheme *machineryruntime.Scheme IstioGatewayNamespace string - queue.RequeueIntervals } func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { @@ -68,7 +69,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu logger.V(log.DebugLevel).Info("Reconciliation loop starting") watcher := &v1beta2.Watcher{} - if err := r.Get(ctx, client.ObjectKey{Name: req.Name, Namespace: req.Namespace}, watcher); err != nil { + err := r.Get(ctx, client.ObjectKey{Name: req.Name, Namespace: req.Namespace}, watcher) + if err != nil { logger.V(log.DebugLevel).Info("Failed to get reconciliation object") if !util.IsNotFound(err) { return ctrl.Result{}, fmt.Errorf("watcherController: %w", err) diff --git a/internal/controller/watcher/setup.go b/internal/controller/watcher/setup.go index aa42902052..1d9ef9475b 100644 --- a/internal/controller/watcher/setup.go +++ b/internal/controller/watcher/setup.go @@ -31,12 +31,13 @@ func (r *Reconciler) SetupWithManager(mgr ctrl.Manager, options ctrlruntime.Opti return fmt.Errorf("unable to set VirtualService service for watcher controller: %w", err) } - if err = ctrl.NewControllerManagedBy(mgr). + err = ctrl.NewControllerManagedBy(mgr). For(&v1beta2.Watcher{}). Named(controllerName). WithOptions(options). WithEventFilter(predicate.Or(predicate.GenerationChangedPredicate{}, predicate.LabelChangedPredicate{})). - Complete(r); err != nil { + Complete(r) + if err != nil { return fmt.Errorf("failed to setup manager for watcher controller: %w", err) } diff --git a/internal/crd/storage_version_dropper.go b/internal/crd/storage_version_dropper.go index 11155907f9..9da8a4af14 100644 --- a/internal/crd/storage_version_dropper.go +++ b/internal/crd/storage_version_dropper.go @@ -21,7 +21,8 @@ func DropStoredVersion(ctx context.Context, kcpClient client.Client, versionsToB logger.V(log.DebugLevel).Info(fmt.Sprintf("Handling dropping stored versions for, %v", versionsToBeDroppedMap)) crdList := &apiextensionsv1.CustomResourceDefinitionList{} - if err := kcpClient.List(ctx, crdList); err != nil { + err := kcpClient.List(ctx, crdList) + if err != nil { logger.V(log.InfoLevel).Error(err, "unable to list CRDs") } @@ -41,7 +42,8 @@ func DropStoredVersion(ctx context.Context, kcpClient client.Client, versionsToB crdItem.Status.StoredVersions = newStoredVersions logger.V(log.InfoLevel).Info(fmt.Sprintf("The new storedVersions are %v", newStoredVersions)) crd := crdItem - if err := kcpClient.Status().Update(ctx, &crd); err != nil { + err := kcpClient.Status().Update(ctx, &crd) + if err != nil { msg := fmt.Sprintf("Failed to update CRD to remove %s from stored versions", storedVersionToDrop) logger.V(log.InfoLevel).Error(err, msg) } diff --git a/internal/declarative/v2/client_proxy.go b/internal/declarative/v2/client_proxy.go index d268a23c6f..bed2c9573c 100644 --- a/internal/declarative/v2/client_proxy.go +++ b/internal/declarative/v2/client_proxy.go @@ -66,10 +66,11 @@ func (p *ProxyClient) RESTMapper() meta.RESTMapper { // Create implements client.Client. func (p *ProxyClient) Create(ctx context.Context, obj client.Object, opts ...client.CreateOption) error { - if _, err := getResourceMapping(obj, p.mapper, true); err != nil { + _, err := getResourceMapping(obj, p.mapper, true) + if err != nil { return fmt.Errorf("failed to get resource mapping: %w", err) } - err := p.baseClient.Create(ctx, obj, opts...) + err = p.baseClient.Create(ctx, obj, opts...) if err != nil { return fmt.Errorf("failed to create object for [%v]: %w", obj, err) } @@ -78,10 +79,11 @@ func (p *ProxyClient) Create(ctx context.Context, obj client.Object, opts ...cli // Update implements client.Client. func (p *ProxyClient) Update(ctx context.Context, obj client.Object, opts ...client.UpdateOption) error { - if _, err := getResourceMapping(obj, p.mapper, true); err != nil { + _, err := getResourceMapping(obj, p.mapper, true) + if err != nil { return fmt.Errorf("failed to get resource mapping: %w", err) } - err := p.baseClient.Update(ctx, obj, opts...) + err = p.baseClient.Update(ctx, obj, opts...) if err != nil { return fmt.Errorf("failed to update object for[%v]:%w", obj, err) } @@ -90,10 +92,11 @@ func (p *ProxyClient) Update(ctx context.Context, obj client.Object, opts ...cli // Delete implements client.Client. func (p *ProxyClient) Delete(ctx context.Context, obj client.Object, opts ...client.DeleteOption) error { - if _, err := getResourceMapping(obj, p.mapper, true); err != nil { + _, err := getResourceMapping(obj, p.mapper, true) + if err != nil { return fmt.Errorf("failed to get resource mapping: %w", err) } - err := p.baseClient.Delete(ctx, obj, opts...) + err = p.baseClient.Delete(ctx, obj, opts...) if err != nil { return fmt.Errorf("failed to delete object for [%v]: %w", obj, err) } @@ -104,10 +107,11 @@ func (p *ProxyClient) Delete(ctx context.Context, obj client.Object, opts ...cli func (p *ProxyClient) DeleteAllOf( ctx context.Context, obj client.Object, opts ...client.DeleteAllOfOption, ) error { - if _, err := getResourceMapping(obj, p.mapper, true); err != nil { + _, err := getResourceMapping(obj, p.mapper, true) + if err != nil { return fmt.Errorf("failed to get resource mapping: %w", err) } - err := p.baseClient.DeleteAllOf(ctx, obj, opts...) + err = p.baseClient.DeleteAllOf(ctx, obj, opts...) if err != nil { return fmt.Errorf("failed to delete all objects for [%v]: %w", obj, err) } @@ -118,10 +122,11 @@ func (p *ProxyClient) DeleteAllOf( func (p *ProxyClient) Patch( ctx context.Context, obj client.Object, patch client.Patch, opts ...client.PatchOption, ) error { - if _, err := getResourceMapping(obj, p.mapper, true); err != nil { + _, err := getResourceMapping(obj, p.mapper, true) + if err != nil { return fmt.Errorf("failed to get resource mapping: %w", err) } - err := p.baseClient.Patch(ctx, obj, patch, opts...) + err = p.baseClient.Patch(ctx, obj, patch, opts...) if err != nil { return fmt.Errorf("failed to patch object for [%v]: %w", obj, err) } @@ -134,10 +139,11 @@ func (p *ProxyClient) Get(ctx context.Context, obj client.Object, opts ...client.GetOption, ) error { - if _, err := getResourceMapping(obj, p.mapper, true); err != nil { + _, err := getResourceMapping(obj, p.mapper, true) + if err != nil { return fmt.Errorf("failed to get resource mapping: %w", err) } - err := p.baseClient.Get(ctx, key, obj, opts...) + err = p.baseClient.Get(ctx, key, obj, opts...) if err != nil { return fmt.Errorf("failed to fetch object for [%v]: %w", obj, err) } @@ -146,10 +152,11 @@ func (p *ProxyClient) Get(ctx context.Context, // List implements client.Client. func (p *ProxyClient) List(ctx context.Context, obj client.ObjectList, opts ...client.ListOption) error { - if _, err := getResourceMapping(obj, p.mapper, true); err != nil { + _, err := getResourceMapping(obj, p.mapper, true) + if err != nil { return fmt.Errorf("failed to get resource mapping: %w", err) } - err := p.baseClient.List(ctx, obj, opts...) + err = p.baseClient.List(ctx, obj, opts...) if err != nil { return fmt.Errorf("failed to fetch object for [%v]: %w", obj, err) } diff --git a/internal/declarative/v2/default_transforms.go b/internal/declarative/v2/default_transforms.go index ec22b26757..d2184fdb70 100644 --- a/internal/declarative/v2/default_transforms.go +++ b/internal/declarative/v2/default_transforms.go @@ -56,7 +56,8 @@ func DockerImageLocalizationTransform(ctx context.Context, obj Object, resources ) for _, resource := range resources { - if err = rewriter.ReplaceImages(resource, localizedImages); err != nil { + err = rewriter.ReplaceImages(resource, localizedImages) + if err != nil { return fmt.Errorf("failed to rewrite images in resource %s/%s: %w", resource.GetNamespace(), resource.GetName(), err) } } diff --git a/internal/declarative/v2/default_transforms_test.go b/internal/declarative/v2/default_transforms_test.go index 161f70410e..94353f6964 100644 --- a/internal/declarative/v2/default_transforms_test.go +++ b/internal/declarative/v2/default_transforms_test.go @@ -19,14 +19,15 @@ func (t testObj) SetStatus(shared.Status) { panic("status not supported in test func Test_defaultTransforms(t *testing.T) { t.Parallel() tests := []struct { - name string declarativev2.ObjectTransform + + name string resources []*unstructured.Unstructured wantErr assert.ErrorAssertionFunc }{ { - "empty DisclaimerTransform", declarativev2.DisclaimerTransform, + "empty DisclaimerTransform", []*unstructured.Unstructured{}, func(testingT assert.TestingT, err error, i ...interface{}) bool { require.NoError(t, err) @@ -34,8 +35,8 @@ func Test_defaultTransforms(t *testing.T) { }, }, { - "empty KymaComponentTransform", declarativev2.KymaComponentTransform, + "empty KymaComponentTransform", []*unstructured.Unstructured{}, func(testingT assert.TestingT, err error, i ...interface{}) bool { require.NoError(t, err) @@ -43,8 +44,8 @@ func Test_defaultTransforms(t *testing.T) { }, }, { - "empty WatchedByManagedByOwnedBy", declarativev2.ManagedByOwnedBy, + "empty WatchedByManagedByOwnedBy", []*unstructured.Unstructured{}, func(testingT assert.TestingT, err error, i ...interface{}) bool { require.NoError(t, err) @@ -52,8 +53,8 @@ func Test_defaultTransforms(t *testing.T) { }, }, { - "simple DisclaimerTransform", declarativev2.DisclaimerTransform, + "simple DisclaimerTransform", []*unstructured.Unstructured{{Object: map[string]any{}}}, func(testingT assert.TestingT, err error, i ...interface{}) bool { require.NoError(t, err) @@ -69,8 +70,8 @@ func Test_defaultTransforms(t *testing.T) { }, }, { - "simple KymaComponentTransform", declarativev2.KymaComponentTransform, + "simple KymaComponentTransform", []*unstructured.Unstructured{{Object: map[string]any{}}}, func(testingT assert.TestingT, err error, i ...interface{}) bool { require.NoError(t, err) @@ -86,8 +87,8 @@ func Test_defaultTransforms(t *testing.T) { }, }, { - "simple WatchedByManagedByOwnedBy", declarativev2.ManagedByOwnedBy, + "simple WatchedByManagedByOwnedBy", []*unstructured.Unstructured{{Object: map[string]any{}}}, func(testingT assert.TestingT, err error, i ...interface{}) bool { require.NoError(t, err) diff --git a/internal/declarative/v2/factory.go b/internal/declarative/v2/factory.go index fbd00cc52c..61447a4051 100644 --- a/internal/declarative/v2/factory.go +++ b/internal/declarative/v2/factory.go @@ -31,11 +31,11 @@ const ( // heavy-duty work to deferred discovery logic and a single http client // as well as a client cache to support GV-based clients. type SingletonClients struct { - httpClient *http.Client - // controller runtime client client.Client + httpClient *http.Client + // the original config used for all clients config *rest.Config @@ -64,7 +64,8 @@ type SingletonClients struct { } func NewSingletonClients(info *ClusterInfo) (*SingletonClients, error) { - if err := setKubernetesDefaults(info.Config); err != nil { + err := setKubernetesDefaults(info.Config) + if err != nil { return nil, err } diff --git a/internal/declarative/v2/inmemory_rendered.go b/internal/declarative/v2/inmemory_rendered.go index 9869f8052f..790649ab0c 100644 --- a/internal/declarative/v2/inmemory_rendered.go +++ b/internal/declarative/v2/inmemory_rendered.go @@ -19,8 +19,9 @@ type ManifestParser interface { } type InMemoryManifestCache struct { - TTL time.Duration *ttlcache.Cache[string, internal.ManifestResources] + + TTL time.Duration } func NewInMemoryManifestCache(ttl time.Duration) *InMemoryManifestCache { diff --git a/internal/declarative/v2/options.go b/internal/declarative/v2/options.go index 7493aa760f..fda1ecee72 100644 --- a/internal/declarative/v2/options.go +++ b/internal/declarative/v2/options.go @@ -39,16 +39,15 @@ func DefaultOptions() *Options { type Options struct { record.EventRecorder - Config *rest.Config client.Client - TargetCluster ClusterFn - ClientCache ClientCacheKeyFn ManifestParser ManifestCache - CustomStateCheck StateCheck + Config *rest.Config + TargetCluster ClusterFn + CustomStateCheck StateCheck PostRenderTransforms []ObjectTransform } diff --git a/internal/declarative/v2/reconciler.go b/internal/declarative/v2/reconciler.go index a7f16c67a5..bc93d3e65b 100644 --- a/internal/declarative/v2/reconciler.go +++ b/internal/declarative/v2/reconciler.go @@ -63,6 +63,7 @@ type OrphanDetection interface { type Reconciler struct { queue.RequeueIntervals *Options + ManifestMetrics *metrics.ManifestMetrics MandatoryModuleMetrics *metrics.MandatoryModulesMetrics specResolver SpecResolver @@ -93,7 +94,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu defer r.recordReconciliationDuration(startTime, req.Name) manifest := &v1beta2.Manifest{} - if err := r.Get(ctx, req.NamespacedName, manifest); err != nil { + err := r.Get(ctx, req.NamespacedName, manifest) + if err != nil { if util.IsNotFound(err) { logf.FromContext(ctx).Info(req.String() + " namespace got deleted!") return ctrl.Result{}, nil @@ -109,7 +111,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu return ctrl.Result{RequeueAfter: r.Success}, nil } - if err := status.Initialize(manifest); err != nil { + err = status.Initialize(manifest) + if err != nil { return r.finishReconcile(ctx, manifest, metrics.ManifestInit, manifestStatus, err) } @@ -134,7 +137,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu return r.handleLabelsRemovalFinalizer(ctx, skrClient, manifest) } - if err := r.Delete(ctx, manifest); err != nil { + err := r.Delete(ctx, manifest) + if err != nil { return ctrl.Result{}, fmt.Errorf("manifestController: %w", err) } return ctrl.Result{RequeueAfter: r.Success}, nil @@ -180,7 +184,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu return r.finishReconcile(ctx, manifest, metrics.ManifestRenderResources, manifestStatus, err) } - if err := r.pruneDiff(ctx, skrClient, manifest, current, target, spec); errors.Is(err, + err = r.pruneDiff(ctx, skrClient, manifest, current, target, spec) + if errors.Is(err, resources.ErrDeletionNotFinished) { r.ManifestMetrics.RecordRequeueReason(metrics.ManifestPruneDiffNotFinished, queue.IntendedRequeue) return ctrl.Result{Requeue: true}, nil @@ -189,7 +194,8 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu } if !manifest.GetDeletionTimestamp().IsZero() { - if err := modulecr.NewClient(skrClient).RemoveDefaultModuleCR(ctx, r.Client, manifest); err != nil { + err := modulecr.NewClient(skrClient).RemoveDefaultModuleCR(ctx, r.Client, manifest) + if err != nil { if errors.Is(err, finalizer.ErrRequeueRequired) { r.ManifestMetrics.RecordRequeueReason(metrics.ManifestPreDeleteEnqueueRequired, queue.IntendedRequeue) return ctrl.Result{Requeue: true}, nil @@ -198,14 +204,16 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu } } - if err := skrresources.SyncResources(ctx, skrClient, manifest, target); err != nil { + err = skrresources.SyncResources(ctx, skrClient, manifest, target) + if err != nil { if errors.Is(err, skrresources.ErrClientUnauthorized) { r.invalidateClientCache(ctx, manifest) } return r.finishReconcile(ctx, manifest, metrics.ManifestSyncResources, manifestStatus, err) } - if err := r.syncManifestState(ctx, skrClient, manifest, target); err != nil { + err = r.syncManifestState(ctx, skrClient, manifest, target) + if err != nil { if errors.Is(err, finalizer.ErrRequeueRequired) { r.ManifestMetrics.RecordRequeueReason(metrics.ManifestSyncResourcesEnqueueRequired, queue.IntendedRequeue) return ctrl.Result{Requeue: true}, nil @@ -310,7 +318,8 @@ func (r *Reconciler) renderResources(ctx context.Context, skrClient Client, mani converter := skrresources.NewDefaultResourceToInfoConverter(skrresources.ResourceInfoConverter(skrClient), apimetav1.NamespaceDefault) - if target, err = r.renderTargetResources(ctx, skrClient, converter, manifest, spec); err != nil { + target, err = r.renderTargetResources(ctx, skrClient, converter, manifest, spec) + if err != nil { if errors.Is(err, modulecr.ErrWaitingForModuleCRsDeletion) { manifest.SetStatus(manifest.GetStatus().WithState(shared.StateDeleting). WithOperation("waiting for module crs deletion")) @@ -334,12 +343,14 @@ func (r *Reconciler) syncManifestState(ctx context.Context, skrClient Client, ma ) error { manifestStatus := manifest.GetStatus() - if err := modulecr.NewClient(skrClient).SyncDefaultModuleCR(ctx, manifest); err != nil { + err := modulecr.NewClient(skrClient).SyncDefaultModuleCR(ctx, manifest) + if err != nil { manifest.SetStatus(manifestStatus.WithState(shared.StateError).WithErr(err)) return err } - if err := finalizer.EnsureCRFinalizer(ctx, r.Client, manifest); err != nil { + err = finalizer.EnsureCRFinalizer(ctx, r.Client, manifest) + if err != nil { return err } if !manifest.GetDeletionTimestamp().IsZero() { @@ -378,7 +389,8 @@ func (r *Reconciler) renderTargetResources(ctx context.Context, skrClient client converter skrresources.ResourceToInfoConverter, manifest *v1beta2.Manifest, spec *Spec, ) ([]*resource.Info, error) { if !manifest.GetDeletionTimestamp().IsZero() { - if err := modulecr.NewClient(skrClient).CheckModuleCRsDeletion(ctx, manifest); err != nil { + err := modulecr.NewClient(skrClient).CheckModuleCRsDeletion(ctx, manifest) + if err != nil { return nil, err } @@ -397,7 +409,8 @@ func (r *Reconciler) renderTargetResources(ctx context.Context, skrClient client } for _, transform := range r.PostRenderTransforms { - if err := transform(ctx, manifest, targetResources.Items); err != nil { + err := transform(ctx, manifest, targetResources.Items) + if err != nil { return nil, err } } @@ -534,7 +547,8 @@ func (r *Reconciler) configClient(ctx context.Context, manifest *v1beta2.Manifes func (r *Reconciler) finishReconcile(ctx context.Context, manifest *v1beta2.Manifest, requeueReason metrics.ManifestRequeueReason, previousStatus shared.Status, originalErr error, ) (ctrl.Result, error) { - if err := r.manifestClient.PatchStatusIfDiffExist(ctx, manifest, previousStatus); err != nil { + err := r.manifestClient.PatchStatusIfDiffExist(ctx, manifest, previousStatus) + if err != nil { return ctrl.Result{}, err } if originalErr != nil { @@ -550,7 +564,8 @@ func (r *Reconciler) ssaSpec(ctx context.Context, manifest *v1beta2.Manifest, requeueReason metrics.ManifestRequeueReason, ) (ctrl.Result, error) { r.ManifestMetrics.RecordRequeueReason(requeueReason, queue.IntendedRequeue) - if err := r.manifestClient.SsaSpec(ctx, manifest); err != nil { + err := r.manifestClient.SsaSpec(ctx, manifest) + if err != nil { return ctrl.Result{}, err } return ctrl.Result{Requeue: true}, nil @@ -561,7 +576,8 @@ func (r *Reconciler) updateManifest(ctx context.Context, manifest *v1beta2.Manif ) (ctrl.Result, error) { r.ManifestMetrics.RecordRequeueReason(requeueReason, queue.IntendedRequeue) - if err := r.manifestClient.UpdateManifest(ctx, manifest); err != nil { + err := r.manifestClient.UpdateManifest(ctx, manifest) + if err != nil { return ctrl.Result{}, err } diff --git a/internal/declarative/v2/resource.go b/internal/declarative/v2/resource.go index bf9334e33c..07b62ff254 100644 --- a/internal/declarative/v2/resource.go +++ b/internal/declarative/v2/resource.go @@ -13,7 +13,8 @@ func (r *ResourceList) Append(val *resource.Info) { // Visit implements resource.Visitor. func (r ResourceList) Visit(fn resource.VisitorFunc) error { for _, i := range r { - if err := fn(i, nil); err != nil { + err := fn(i, nil) + if err != nil { return err } } diff --git a/internal/declarative/v2/state_check.go b/internal/declarative/v2/state_check.go index b98df05f20..7a264f42bd 100644 --- a/internal/declarative/v2/state_check.go +++ b/internal/declarative/v2/state_check.go @@ -33,7 +33,8 @@ func (c *ExistsStateCheck) GetState( if !ok { return shared.StateError, ErrNotValidClientObject } - if err := clnt.Get(ctx, client.ObjectKeyFromObject(obj), obj); client.IgnoreNotFound(err) != nil { + err := clnt.Get(ctx, client.ObjectKeyFromObject(obj), obj) + if client.IgnoreNotFound(err) != nil { return shared.StateError, fmt.Errorf("failed to fetch object by key: %w", err) } } diff --git a/internal/gatewaysecret/cabundle/handler.go b/internal/gatewaysecret/cabundle/handler.go index 4bc40b49e5..127bbe4d5b 100644 --- a/internal/gatewaysecret/cabundle/handler.go +++ b/internal/gatewaysecret/cabundle/handler.go @@ -97,10 +97,9 @@ func (h *Handler) createGatewaySecretFromRootSecret(ctx context.Context, func (h *Handler) requiresBundling(gwSecret *apicorev1.Secret, notBefore time.Time) bool { // If the last modified time of the gateway secret is after the notBefore time of the CA certificate, // then we don't need to update the gateway secret - if lastModified, err := h.parseTimeFromAnnotationFunc(gwSecret, shared.LastModifiedAtAnnotation); err == nil { - if lastModified.After(notBefore) { - return false - } + lastModified, err := h.parseTimeFromAnnotationFunc(gwSecret, shared.LastModifiedAtAnnotation) + if err == nil && lastModified.After(notBefore) { + return false } return true } diff --git a/internal/gatewaysecret/client/client.go b/internal/gatewaysecret/client/client.go index 618fb5a5a8..c0aa66c6e9 100644 --- a/internal/gatewaysecret/client/client.go +++ b/internal/gatewaysecret/client/client.go @@ -56,11 +56,13 @@ func (c *GatewaySecretRotationClient) GetGatewaySecret(ctx context.Context) (*ap } func (c *GatewaySecretRotationClient) CreateGatewaySecret(ctx context.Context, gatewaySecret *apicorev1.Secret) error { - if err := ensureGatewaySecret(gatewaySecret); err != nil { + err := ensureGatewaySecret(gatewaySecret) + if err != nil { return err } - if _, err := c.secretInterface.Create(ctx, gatewaySecret, apimetav1.CreateOptions{}); err != nil { + _, err = c.secretInterface.Create(ctx, gatewaySecret, apimetav1.CreateOptions{}) + if err != nil { return fmt.Errorf("failed to create gateway secret %s: %w", gatewaySecret.Name, err) } @@ -68,11 +70,13 @@ func (c *GatewaySecretRotationClient) CreateGatewaySecret(ctx context.Context, g } func (c *GatewaySecretRotationClient) UpdateGatewaySecret(ctx context.Context, gatewaySecret *apicorev1.Secret) error { - if err := ensureGatewaySecret(gatewaySecret); err != nil { + err := ensureGatewaySecret(gatewaySecret) + if err != nil { return err } - if _, err := c.secretInterface.Update(ctx, gatewaySecret, apimetav1.UpdateOptions{}); err != nil { + _, err = c.secretInterface.Update(ctx, gatewaySecret, apimetav1.UpdateOptions{}) + if err != nil { return fmt.Errorf("failed to update gateway secret %s: %w", gatewaySecret.Name, err) } diff --git a/internal/gatewaysecret/legacy/handler.go b/internal/gatewaysecret/legacy/handler.go index 3e10043417..fe18d2f845 100644 --- a/internal/gatewaysecret/legacy/handler.go +++ b/internal/gatewaysecret/legacy/handler.go @@ -68,7 +68,8 @@ func (h *Handler) createGatewaySecretFromRootSecret(ctx context.Context, rootSec func (h *Handler) requiresUpdate(gwSecret *apicorev1.Secret, notBefore time.Time) bool { // If the last modified time of the gateway secret is after the notBefore time of the CA certificate, // then we don't need to update the gateway secret - if lastModified, err := h.parseLastModifiedTime(gwSecret, shared.LastModifiedAtAnnotation); err == nil { + lastModified, err := h.parseLastModifiedTime(gwSecret, shared.LastModifiedAtAnnotation) + if err == nil { if !notBefore.IsZero() && lastModified.After(notBefore) { return false } diff --git a/internal/imagerewrite/resource_rewriter.go b/internal/imagerewrite/resource_rewriter.go index b40d3dff6d..0a508bb833 100644 --- a/internal/imagerewrite/resource_rewriter.go +++ b/internal/imagerewrite/resource_rewriter.go @@ -44,7 +44,8 @@ func (r *ResourceRewriter) ReplaceImages(resource *unstructured.Unstructured, ta return containers, nil } podContainersSetter := func(containers []*unstructured.Unstructured) error { - if err := setPodContainers(deploymentOrSimilar, containers); err != nil { + err := setPodContainers(deploymentOrSimilar, containers) + if err != nil { return fmt.Errorf("failed to set pod containers: %w", err) } return nil @@ -63,7 +64,8 @@ func (r *ResourceRewriter) ReplaceImages(resource *unstructured.Unstructured, ta return containers, nil } podInitContainersSetter := func(containers []*unstructured.Unstructured) error { - if err := setPodInitContainers(deploymentOrSimilar, containers); err != nil { + err := setPodInitContainers(deploymentOrSimilar, containers) + if err != nil { return fmt.Errorf("failed to set pod init containers: %w", err) } return nil @@ -91,12 +93,14 @@ func (r *ResourceRewriter) rewriteContainers(containersGetter podContainersGette } for cIdx, container := range containers { for _, rewriter := range r.rewriters { - if err := rewriter.Rewrite(targetImages, container); err != nil { + err := rewriter.Rewrite(targetImages, container) + if err != nil { return fmt.Errorf("failed to rewrite images in container %d: %w", cIdx, err) } } } - if err := containersSetter(containers); err != nil { + err = containersSetter(containers) + if err != nil { return err } return nil diff --git a/internal/imagerewrite/rewrite.go b/internal/imagerewrite/rewrite.go index 64bc8b5652..6c28539f2c 100644 --- a/internal/imagerewrite/rewrite.go +++ b/internal/imagerewrite/rewrite.go @@ -30,9 +30,10 @@ type NameAndTag string // // The overall format of a reference is: /:[@] type DockerImageReference struct { - HostAndPath string NameAndTag - Digest string + + HostAndPath string + Digest string } func NewDockerImageReference(val string) (*DockerImageReference, error) { @@ -91,7 +92,8 @@ func (r *PodContainerImageRewriter) Rewrite(targetImages []*DockerImageReference for _, targetImage := range targetImages { // We know that existingImage is a docker image reference, so we only have the verify if the : matches. if targetImage.Matches(existingImage.NameAndTag) { - if err := unstructured.SetNestedField(podContainer.Object, targetImage.String(), "image"); err != nil { + err := unstructured.SetNestedField(podContainer.Object, targetImage.String(), "image") + if err != nil { return fmt.Errorf("%w: %v", ErrFailedToSetNewImageInPodContainer, err.Error()) } break @@ -143,7 +145,8 @@ func (r *PodContainerEnvsRewriter) Rewrite(targetImages []*DockerImageReference, } // Set the modified environment variables back to the pod container - if err = unstructured.SetNestedSlice(podContainer.Object, envEntries, "env"); err != nil { + err = unstructured.SetNestedSlice(podContainer.Object, envEntries, "env") + if err != nil { return fmt.Errorf("%w: %v", ErrFailedToSetNewEnvListInPodContainer, err.Error()) } return nil diff --git a/internal/imagerewrite/support_test.go b/internal/imagerewrite/support_test.go index 774391b83b..980608448c 100644 --- a/internal/imagerewrite/support_test.go +++ b/internal/imagerewrite/support_test.go @@ -189,7 +189,7 @@ func newChangesComparator(t *testing.T, originalLines, rewrittenLines []string) } // verify checks that the expected changes exist in the differences between expected and actual lines. -func (c *changesComparator) verify(expectedChanges ...(func() *changeDefiner)) { +func (c *changesComparator) verify(expectedChanges ...func() *changeDefiner) { definersCount := len(expectedChanges) changesCount := len(c.differences) require.Len(c.t, expectedChanges, changesCount, "The number of registered changes (%d) must be equal to the number of differences between lines (%d)", definersCount, changesCount) @@ -244,7 +244,8 @@ func parseToUnstructured(resource string) (*unstructured.Unstructured, error) { } u := unstructured.Unstructured{} - if err := u.UnmarshalJSON(asJSON); err != nil { + err = u.UnmarshalJSON(asJSON) + if err != nil { return nil, err } return &u, nil diff --git a/internal/istio/client.go b/internal/istio/client.go index 77cad37faf..c33c1a969d 100644 --- a/internal/istio/client.go +++ b/internal/istio/client.go @@ -14,6 +14,7 @@ import ( type Client struct { istioclient.Interface + logger logr.Logger } diff --git a/internal/istio/httproute.go b/internal/istio/httproute.go index 72cc8e1ed6..a5adb0ec40 100644 --- a/internal/istio/httproute.go +++ b/internal/istio/httproute.go @@ -10,7 +10,8 @@ import ( ) func NewHTTPRoute(watcher *v1beta2.Watcher) (*istioapiv1beta1.HTTPRoute, error) { - if err := validateArgumentsForNewHTTPRoute(watcher); err != nil { + err := validateArgumentsForNewHTTPRoute(watcher) + if err != nil { return nil, err } diff --git a/internal/istio/virtualservice.go b/internal/istio/virtualservice.go index 7f527670b5..15d5be37be 100644 --- a/internal/istio/virtualservice.go +++ b/internal/istio/virtualservice.go @@ -39,7 +39,8 @@ func NewVirtualServiceService(scheme *machineryruntime.Scheme) (*VirtualServiceS } func (vss *VirtualServiceService) NewVirtualService(watcher *v1beta2.Watcher, gateways *istioclientapiv1beta1.GatewayList) (*istioclientapiv1beta1.VirtualService, error) { - if err := validateArgumentsForNewVirtualService(watcher, gateways); err != nil { + err := validateArgumentsForNewVirtualService(watcher, gateways) + if err != nil { return nil, err } @@ -62,7 +63,8 @@ func (vss *VirtualServiceService) NewVirtualService(watcher *v1beta2.Watcher, ga httpRoute, } - if err := controllerutil.SetOwnerReference(watcher, virtualService, vss.scheme); err != nil { + err = controllerutil.SetOwnerReference(watcher, virtualService, vss.scheme) + if err != nil { return nil, errors.Join(ErrFailedToAddOwnerReference, err) } diff --git a/internal/istio/virtualservice_test.go b/internal/istio/virtualservice_test.go index 4efbd4e01e..70a5ffb3bb 100644 --- a/internal/istio/virtualservice_test.go +++ b/internal/istio/virtualservice_test.go @@ -241,7 +241,8 @@ func createScheme(t *testing.T) *machineryruntime.Scheme { t.Helper() scheme := machineryruntime.NewScheme() - if err := api.AddToScheme(scheme); err != nil { + err := api.AddToScheme(scheme) + if err != nil { assert.Fail(t, "failed to setup scheme") } diff --git a/internal/maintenancewindows/maintenance_window.go b/internal/maintenancewindows/maintenance_window.go index 4e881c0afa..42b5c3c1f4 100644 --- a/internal/maintenancewindows/maintenance_window.go +++ b/internal/maintenancewindows/maintenance_window.go @@ -33,7 +33,8 @@ func InitializeMaintenanceWindow(log logr.Logger, policyName string, minWindowSize time.Duration, ) (MaintenanceWindow, error) { - if err := os.Setenv(resolver.PolicyPathENV, policiesDirectory); err != nil { + err := os.Setenv(resolver.PolicyPathENV, policiesDirectory) + if err != nil { return MaintenanceWindow{ MaintenanceWindowPolicy: nil, }, fmt.Errorf("failed to set the policy path env variable, %w", err) @@ -68,11 +69,8 @@ func InitializeMaintenanceWindow(log logr.Logger, } func MaintenancePolicyFileExists(policyFilePath string) bool { - if _, err := os.Stat(policyFilePath); os.IsNotExist(err) { - return false - } - - return true + _, err := os.Stat(policyFilePath) + return !os.IsNotExist(err) } // IsRequired determines if a maintenance window is required to update the given module. diff --git a/internal/manifest/client.go b/internal/manifest/client.go index 2cb4cf176e..5619a08404 100644 --- a/internal/manifest/client.go +++ b/internal/manifest/client.go @@ -45,7 +45,8 @@ func (cc *ClusterClient) GetRESTConfig( kubeConfigSecret := &apicorev1.Secret{} if len(kubeConfigSecretList.Items) < 1 { key := client.ObjectKey{Name: kymaOwner, Namespace: namespace} - if err := cc.DefaultClient.Get(ctx, key, kubeConfigSecret); err != nil { + err := cc.DefaultClient.Get(ctx, key, kubeConfigSecret) + if err != nil { return nil, fmt.Errorf("could not get by key (%s) or selector (%s): %w", key, labelSelector.String(), common.ErrAccessSecretNotFound) } diff --git a/internal/manifest/finalizer/handler.go b/internal/manifest/finalizer/handler.go index c1f5ed5489..7206af635b 100644 --- a/internal/manifest/finalizer/handler.go +++ b/internal/manifest/finalizer/handler.go @@ -64,10 +64,11 @@ func EnsureCRFinalizer(ctx context.Context, kcp client.Client, manifest *v1beta2 oMeta.SetFinalizers(manifest.GetFinalizers()) if added := controllerutil.AddFinalizer(oMeta, CustomResourceManagerFinalizer); added { - if err := kcp.Patch( + err := kcp.Patch( ctx, oMeta, client.Apply, client.ForceOwnership, client.FieldOwner(CustomResourceManagerFinalizer), - ); err != nil { + ) + if err != nil { return fmt.Errorf("failed to patch resource: %w", err) } return ErrRequeueRequired @@ -81,7 +82,8 @@ func RemoveCRFinalizer(ctx context.Context, kcp client.Client, manifest *v1beta2 } onCluster := manifest.DeepCopy() - if err := kcp.Get(ctx, client.ObjectKeyFromObject(manifest), onCluster); err != nil { + err := kcp.Get(ctx, client.ObjectKeyFromObject(manifest), onCluster) + if err != nil { // If the manifest is not found, we consider the finalizer removed. if util.IsNotFound(err) { return nil @@ -90,9 +92,10 @@ func RemoveCRFinalizer(ctx context.Context, kcp client.Client, manifest *v1beta2 } if removed := controllerutil.RemoveFinalizer(onCluster, CustomResourceManagerFinalizer); removed { - if err := kcp.Update( + err := kcp.Update( ctx, onCluster, client.FieldOwner(CustomResourceManagerFinalizer), - ); err != nil { + ) + if err != nil { return fmt.Errorf("failed to update resource: %w", err) } return ErrRequeueRequired diff --git a/internal/manifest/img/pathextractor.go b/internal/manifest/img/pathextractor.go index 0fb7ab78bd..406b042660 100644 --- a/internal/manifest/img/pathextractor.go +++ b/internal/manifest/img/pathextractor.go @@ -94,7 +94,8 @@ func (p PathExtractor) GetPathForFetchedLayer(ctx context.Context, defer blobReadCloser.Close() // create dir for uncompressed manifest - if err := os.MkdirAll(installPath, fs.ModePerm); err != nil { + err = os.MkdirAll(installPath, fs.ModePerm) + if err != nil { return "", fmt.Errorf( "failure while creating installPath directory for layer %s: %w", imageRef, err, @@ -104,7 +105,8 @@ func (p PathExtractor) GetPathForFetchedLayer(ctx context.Context, if err != nil { return "", fmt.Errorf("file create failed for layer %s: %w", imageRef, err) } - if _, err := io.Copy(outFile, blobReadCloser); err != nil { + _, err = io.Copy(outFile, blobReadCloser) + if err != nil { return "", fmt.Errorf("file copy storage failed for layer %s: %w", imageRef, err) } err = io.Closer(outFile).Close() @@ -149,7 +151,8 @@ func (p PathExtractor) ExtractLayer(tarPath string) (string, error) { return "", fmt.Errorf("failed to sanitize archive path: %w", err) } - if _, err := os.Stat(extractedFilePath); err == nil { + _, err = os.Stat(extractedFilePath) + if err == nil { return extractedFilePath, nil } @@ -159,7 +162,9 @@ func (p PathExtractor) ExtractLayer(tarPath string) (string, error) { } defer outFile.Close() - if _, err := io.Copy(outFile, tarReader); err != nil { //nolint:gosec // The upstream content is + //nolint:gosec // The tar file is expected to be small, as it is generated from a single layer + _, err = io.Copy(outFile, tarReader) + if err != nil { // from managed resources, and the size is controlled, so it is safe from decompression bomb attacks. return "", fmt.Errorf("failed to extract from tar: %w", err) } diff --git a/internal/manifest/labelsremoval/labels_removal.go b/internal/manifest/labelsremoval/labels_removal.go index 0a3231b7c0..57d8939035 100644 --- a/internal/manifest/labelsremoval/labels_removal.go +++ b/internal/manifest/labelsremoval/labels_removal.go @@ -57,11 +57,13 @@ func removeFromSyncedResources(ctx context.Context, manifestCR *v1beta2.Manifest } obj := constructResource(res) - if err := skrClient.Get(ctx, objectKey, obj); err != nil { + err := skrClient.Get(ctx, objectKey, obj) + if err != nil { return fmt.Errorf("failed to get resource, %w", err) } - if err := removeFromObject(ctx, obj, skrClient); err != nil { + err = removeFromObject(ctx, obj, skrClient) + if err != nil { return err } } @@ -87,7 +89,8 @@ func removeFromDefaultCR(ctx context.Context, func removeFromObject(ctx context.Context, obj *unstructured.Unstructured, skrClient client.Client) error { if removeManagedLabel(obj) { - if err := skrClient.Update(ctx, obj); err != nil { + err := skrClient.Update(ctx, obj) + if err != nil { return fmt.Errorf("failed to update object: %w", err) } } diff --git a/internal/manifest/labelsremoval/labels_removal_test.go b/internal/manifest/labelsremoval/labels_removal_test.go index 3ec5c45260..649f525b10 100644 --- a/internal/manifest/labelsremoval/labels_removal_test.go +++ b/internal/manifest/labelsremoval/labels_removal_test.go @@ -344,6 +344,7 @@ func (m *manifestClientStub) UpdateManifest(ctx context.Context, manifest *v1bet type errorClientStub struct { client.Client + fakeClient client.Client } diff --git a/internal/manifest/manifestclient/manifest_client.go b/internal/manifest/manifestclient/manifest_client.go index f08ebc1c3a..2453c987df 100644 --- a/internal/manifest/manifestclient/manifest_client.go +++ b/internal/manifest/manifestclient/manifest_client.go @@ -26,7 +26,8 @@ func NewManifestClient(event event.Event, kcpClient client.Client) *ManifestClie } func (m *ManifestClient) UpdateManifest(ctx context.Context, manifest *v1beta2.Manifest) error { - if err := m.Update(ctx, manifest); err != nil { + err := m.Update(ctx, manifest) + if err != nil { m.Warning(manifest, "UpdateObject", err) return fmt.Errorf("failed to update object: %w", err) } @@ -38,7 +39,8 @@ func (m *ManifestClient) PatchStatusIfDiffExist(ctx context.Context, manifest *v ) error { if HasStatusDiff(manifest.GetStatus(), previousStatus) { resetNonPatchableField(manifest) - if err := m.Status().Patch(ctx, manifest, client.Apply, client.ForceOwnership, DefaultFieldOwner); err != nil { + err := m.Status().Patch(ctx, manifest, client.Apply, client.ForceOwnership, DefaultFieldOwner) + if err != nil { m.Warning(manifest, "PatchStatus", err) return fmt.Errorf("failed to patch status: %w", err) } @@ -49,7 +51,8 @@ func (m *ManifestClient) PatchStatusIfDiffExist(ctx context.Context, manifest *v func (m *ManifestClient) SsaSpec(ctx context.Context, obj client.Object) error { resetNonPatchableField(obj) - if err := m.Patch(ctx, obj, client.Apply, client.ForceOwnership, DefaultFieldOwner); err != nil { + err := m.Patch(ctx, obj, client.Apply, client.ForceOwnership, DefaultFieldOwner) + if err != nil { m.Warning(obj, "PatchObject", err) return fmt.Errorf("failed to patch object: %w", err) } diff --git a/internal/manifest/modulecr/client.go b/internal/manifest/modulecr/client.go index 15499c22f2..7a299f7f11 100644 --- a/internal/manifest/modulecr/client.go +++ b/internal/manifest/modulecr/client.go @@ -51,8 +51,9 @@ func (c *Client) GetDefaultCR(ctx context.Context, manifest *v1beta2.Manifest) ( Kind: gvk.Kind, }) - if err := c.Get(ctx, - client.ObjectKey{Name: name, Namespace: namespace}, resourceCR); err != nil { + err := c.Get(ctx, + client.ObjectKey{Name: name, Namespace: namespace}, resourceCR) + if err != nil { return nil, fmt.Errorf("%w: failed to fetch default resource CR", err) } @@ -104,7 +105,8 @@ func (c *Client) RemoveDefaultModuleCR(ctx context.Context, kcp client.Client, m return err } if crDeleted { - if err := finalizer.RemoveCRFinalizer(ctx, kcp, manifest); err != nil { + err := finalizer.RemoveCRFinalizer(ctx, kcp, manifest) + if err != nil { manifest.SetStatus(manifest.GetStatus().WithErr(err)) return err } @@ -124,12 +126,14 @@ func (c *Client) SyncDefaultModuleCR(ctx context.Context, manifest *v1beta2.Mani shared.ManagedBy: shared.ManagedByLabelValue, })) - if err := c.Get(ctx, client.ObjectKeyFromObject(resource), resource); err != nil && util.IsNotFound(err) { + err := c.Get(ctx, client.ObjectKeyFromObject(resource), resource) + if err != nil && util.IsNotFound(err) { if !manifest.GetDeletionTimestamp().IsZero() { return nil } - if err := c.Create(ctx, resource, - client.FieldOwner(finalizer.CustomResourceManagerFinalizer)); err != nil && !apierrors.IsAlreadyExists(err) { + err := c.Create(ctx, resource, + client.FieldOwner(finalizer.CustomResourceManagerFinalizer)) + if err != nil && !apierrors.IsAlreadyExists(err) { return fmt.Errorf("failed to create resource: %w", err) } } @@ -147,9 +151,10 @@ func (c *Client) GetAllModuleCRsExcludingDefaultCR(ctx context.Context, resource := manifest.Spec.Resource.DeepCopy() resourceList := &unstructured.UnstructuredList{} resourceList.SetGroupVersionKind(resource.GroupVersionKind()) - if err := c.List(ctx, resourceList, &client.ListOptions{ + err := c.List(ctx, resourceList, &client.ListOptions{ Namespace: resource.GetNamespace(), - }); err != nil && !util.IsNotFound(err) { + }) + if err != nil && !util.IsNotFound(err) { return nil, fmt.Errorf("failed to list resources: %w", err) } diff --git a/internal/manifest/parser/template_to_module.go b/internal/manifest/parser/template_to_module.go index 5798bfce2c..7d4839687b 100644 --- a/internal/manifest/parser/template_to_module.go +++ b/internal/manifest/parser/template_to_module.go @@ -26,6 +26,7 @@ var ErrConvertingToOCIAccessSpec = errors.New("failed converting resource.Access type Parser struct { client.Client + descriptorProvider *provider.CachedDescriptorProvider remoteSyncNamespace string } @@ -108,8 +109,8 @@ func (p *Parser) appendModuleWithInformation(module templatelookup.ModuleInfo, k name := modulecommon.CreateModuleName(fqdn, kyma.Name, module.Name) setNameAndNamespaceIfEmpty(template, name, p.remoteSyncNamespace) var manifest *v1beta2.Manifest - if manifest, err = p.newManifestFromTemplate(module.Module, - template.ModuleTemplate); err != nil { + manifest, err = p.newManifestFromTemplate(module.Module, template.ModuleTemplate) + if err != nil { template.Err = err modules = append(modules, &modulecommon.Module{ ModuleName: module.Name, @@ -169,15 +170,18 @@ func (p *Parser) newManifestFromTemplate( return nil, fmt.Errorf("failed to get descriptor from template: %w", err) } - if layers, err = img.Parse(descriptor.ComponentDescriptor); err != nil { + layers, err = img.Parse(descriptor.ComponentDescriptor) + if err != nil { return nil, fmt.Errorf("could not parse descriptor: %w", err) } - if err := translateLayersAndMergeIntoManifest(manifest, layers); err != nil { + err = translateLayersAndMergeIntoManifest(manifest, layers) + if err != nil { return nil, fmt.Errorf("could not translate layers and merge them: %w", err) } - if err := appendOptionalCustomStateCheck(manifest, template.Spec.CustomStateCheck); err != nil { + err = appendOptionalCustomStateCheck(manifest, template.Spec.CustomStateCheck) + if err != nil { return nil, fmt.Errorf("could not translate custom state check: %w", err) } manifest.Spec.Version = descriptor.Version @@ -232,7 +236,8 @@ func appendOptionalCustomStateCheck(manifest *v1beta2.Manifest, stateCheck []*v1 func translateLayersAndMergeIntoManifest(manifest *v1beta2.Manifest, layers img.Layers) error { for _, layer := range layers { - if err := insertLayerIntoManifest(manifest, layer); err != nil { + err := insertLayerIntoManifest(manifest, layer) + if err != nil { return fmt.Errorf("error in layer %s: %w", layer.LayerName, err) } } diff --git a/internal/manifest/skrresources/collector.go b/internal/manifest/skrresources/collector.go index d720fbde1e..72aa469cc6 100644 --- a/internal/manifest/skrresources/collector.go +++ b/internal/manifest/skrresources/collector.go @@ -131,7 +131,8 @@ func compressAndBase64(in []byte) (string, error) { return "", fmt.Errorf("failed to write to gzip archive: %w", err) } - if err := archive.Close(); err != nil { + err = archive.Close() + if err != nil { return "", fmt.Errorf("failed to close gzip archive: %w", err) } @@ -166,7 +167,8 @@ func getFrequencyLimiterTTL() int { if configured := os.Getenv(frequencyLimiterTTLEnvVar); configured != "" { rxp := regexp.MustCompile(frequencyLimiterTTLRegexp) if rxp.MatchString(configured) { - if parsed, err := strconv.Atoi(configured); err == nil { + parsed, err := strconv.Atoi(configured) + if err == nil { res = parsed } } diff --git a/internal/manifest/skrresources/ssa.go b/internal/manifest/skrresources/ssa.go index 9695c1a5dd..07f7aabadc 100644 --- a/internal/manifest/skrresources/ssa.go +++ b/internal/manifest/skrresources/ssa.go @@ -64,7 +64,8 @@ func (c *ConcurrentDefaultSSA) Run(ctx context.Context, resources []*resource.In var errs []error for range resources { - if err := <-results; err != nil { + err := <-results + if err != nil { errs = append(errs, err) } } @@ -80,7 +81,8 @@ func (c *ConcurrentDefaultSSA) Run(ctx context.Context, resources []*resource.In return errors.Join(errs...) } logger.V(internal.DebugLogLevel).Info("ServerSideApply finished", "time", ssaFinish) - if err := c.collector.Emit(ctx); err != nil { + err := c.collector.Emit(ctx) + if err != nil { logger.V(internal.DebugLogLevel).Error(err, "error emitting data of unknown field managers") } return nil diff --git a/internal/manifest/skrresources/ssa_test.go b/internal/manifest/skrresources/ssa_test.go index c8f1adba62..e0bed1de5f 100644 --- a/internal/manifest/skrresources/ssa_test.go +++ b/internal/manifest/skrresources/ssa_test.go @@ -56,7 +56,8 @@ func TestConcurrentSSA(t *testing.T) { testCase.name, func(t *testing.T) { t.Parallel() ssa := skrresources.ConcurrentSSA(testCase.ssa.clnt, testCase.ssa.owner, inactiveCollector) - if err := ssa.Run(t.Context(), testCase.apply); err != nil { + err := ssa.Run(t.Context(), testCase.apply) + if err != nil { require.ErrorIs(t, err, testCase.err) } }, diff --git a/internal/manifest/skrresources/sync.go b/internal/manifest/skrresources/sync.go index 16c8fa4019..4eb87d95bd 100644 --- a/internal/manifest/skrresources/sync.go +++ b/internal/manifest/skrresources/sync.go @@ -21,7 +21,8 @@ func SyncResources(ctx context.Context, skrClient client.Client, manifest *v1bet managedFieldsCollector := NewManifestLogCollector(manifest, manifestclient.DefaultFieldOwner) - if err := ConcurrentSSA(skrClient, manifestclient.DefaultFieldOwner, managedFieldsCollector).Run(ctx, target); err != nil { + err := ConcurrentSSA(skrClient, manifestclient.DefaultFieldOwner, managedFieldsCollector).Run(ctx, target) + if err != nil { manifest.SetStatus(manifestStatus.WithState(shared.StateError).WithErr(err)) return err } diff --git a/internal/manifest/spec/resolver.go b/internal/manifest/spec/resolver.go index 4613b8fe8a..fc463d7d14 100644 --- a/internal/manifest/spec/resolver.go +++ b/internal/manifest/spec/resolver.go @@ -37,7 +37,8 @@ var ErrRenderModeInvalid = errors.New("render mode is invalid") func (s *Resolver) GetSpec(ctx context.Context, manifest *v1beta2.Manifest) (*declarativev2.Spec, error) { var imageSpec v1beta2.ImageSpec - if err := yaml.Unmarshal(manifest.Spec.Install.Source.Raw, &imageSpec); err != nil { + err := yaml.Unmarshal(manifest.Spec.Install.Source.Raw, &imageSpec) + if err != nil { return nil, fmt.Errorf("failed to unmarshal data: %w", err) } diff --git a/internal/manifest/statecheck/state_check.go b/internal/manifest/statecheck/state_check.go index 97dc7fa89e..37ee1b815f 100644 --- a/internal/manifest/statecheck/state_check.go +++ b/internal/manifest/statecheck/state_check.go @@ -79,14 +79,16 @@ func findManager(clt client.Client, resources []*resource.Info) *Manager { statefulSet := &apiappsv1.StatefulSet{} for _, res := range resources { - if err := clt.Scheme().Convert(res.Object, deploy, nil); err == nil { + err := clt.Scheme().Convert(res.Object, deploy, nil) + if err == nil { return &Manager{ kind: DeploymentKind, deployment: deploy, } } - if err := clt.Scheme().Convert(res.Object, statefulSet, nil); err == nil { + err = clt.Scheme().Convert(res.Object, statefulSet, nil) + if err == nil { return &Manager{ kind: StatefulSetKind, statefulSet: statefulSet, diff --git a/internal/manifest/statecheck/statefulset_state_check.go b/internal/manifest/statecheck/statefulset_state_check.go index d3be21c061..64f8ce0005 100644 --- a/internal/manifest/statecheck/statefulset_state_check.go +++ b/internal/manifest/statecheck/statefulset_state_check.go @@ -57,7 +57,8 @@ func getPodsList(ctx context.Context, clt client.Client, namespace string, Namespace: namespace, LabelSelector: k8slabels.SelectorFromSet(matchLabels), } - if err := clt.List(ctx, podList, listOptions); err != nil { + err := clt.List(ctx, podList, listOptions) + if err != nil { return nil, fmt.Errorf("failed to list pods: %w", err) } return podList, nil diff --git a/internal/pkg/flags/flags.go b/internal/pkg/flags/flags.go index d0e6815041..1ea36be04e 100644 --- a/internal/pkg/flags/flags.go +++ b/internal/pkg/flags/flags.go @@ -398,7 +398,8 @@ func (f FlagVar) Validate() error { return fmt.Errorf("%w: '%s'", common.ErrUnsupportedCertificateManagementSystem, f.CertificateManagement) } - if err := validateOciRegistryConfig(f.OciRegistryHost, f.OciRegistryCredSecretName); err != nil { + err := validateOciRegistryConfig(f.OciRegistryHost, f.OciRegistryCredSecretName) + if err != nil { return err } diff --git a/internal/pkg/metrics/kyma.go b/internal/pkg/metrics/kyma.go index d3d4311a79..807dcb42ee 100644 --- a/internal/pkg/metrics/kyma.go +++ b/internal/pkg/metrics/kyma.go @@ -22,9 +22,10 @@ const ( ) type KymaMetrics struct { + *SharedMetrics + KymaStateGauge *prometheus.GaugeVec moduleStateGauge *prometheus.GaugeVec - *SharedMetrics } type KymaRequeueReason string diff --git a/internal/pkg/metrics/kyma_test.go b/internal/pkg/metrics/kyma_test.go index 49ac5f1f03..2d0a4e8f66 100644 --- a/internal/pkg/metrics/kyma_test.go +++ b/internal/pkg/metrics/kyma_test.go @@ -74,7 +74,8 @@ func TestKymaMetrics_CleanupNonExistingKymaCrsMetrics(t *testing.T) { k := &metrics.KymaMetrics{ KymaStateGauge: sampleGauge, } - if err := k.CleanupNonExistingKymaCrsMetrics(t.Context(), fakeClientBuilder); err != nil { + err := k.CleanupNonExistingKymaCrsMetrics(t.Context(), fakeClientBuilder) + if err != nil { t.Errorf("CleanupNonExistingKymaCrsMetrics() error = %v", err) } diff --git a/internal/pkg/metrics/maintance_window_test.go b/internal/pkg/metrics/maintance_window_test.go index 550cbf5160..e7adda1e7d 100644 --- a/internal/pkg/metrics/maintance_window_test.go +++ b/internal/pkg/metrics/maintance_window_test.go @@ -15,21 +15,23 @@ func TestMaintenanceWindowMetrics(t *testing.T) { // Test recording a successful config read maintenanceWindowMetrics.RecordConfigReadSuccess(true) - if err := testutil.CollectAndCompare(maintenanceWindowMetrics.ConfigReadSuccessGauge, strings.NewReader(` + err := testutil.CollectAndCompare(maintenanceWindowMetrics.ConfigReadSuccessGauge, strings.NewReader(` # HELP lifecycle_mgr_maintenance_window_config_read_success Indicates whether the maintenance window configuration was read successfully (1 for success, 0 for failure) # TYPE lifecycle_mgr_maintenance_window_config_read_success gauge lifecycle_mgr_maintenance_window_config_read_success 1 - `)); err != nil { + `)) + if err != nil { t.Errorf("unexpected collecting result:\n%s", err) } // Test recording a failed config read maintenanceWindowMetrics.RecordConfigReadSuccess(false) - if err := testutil.CollectAndCompare(maintenanceWindowMetrics.ConfigReadSuccessGauge, strings.NewReader(` + err = testutil.CollectAndCompare(maintenanceWindowMetrics.ConfigReadSuccessGauge, strings.NewReader(` # HELP lifecycle_mgr_maintenance_window_config_read_success Indicates whether the maintenance window configuration was read successfully (1 for success, 0 for failure) # TYPE lifecycle_mgr_maintenance_window_config_read_success gauge lifecycle_mgr_maintenance_window_config_read_success 0 - `)); err != nil { + `)) + if err != nil { t.Errorf("unexpected collecting result:\n%s", err) } } diff --git a/internal/pkg/metrics/manifest.go b/internal/pkg/metrics/manifest.go index ee208c47f0..937bbe4232 100644 --- a/internal/pkg/metrics/manifest.go +++ b/internal/pkg/metrics/manifest.go @@ -38,6 +38,7 @@ const ( type ManifestMetrics struct { *SharedMetrics + ManifestDurationGauge *prometheus.GaugeVec } diff --git a/internal/pkg/resources/cleanup.go b/internal/pkg/resources/cleanup.go index 83687156c4..72be6fe853 100644 --- a/internal/pkg/resources/cleanup.go +++ b/internal/pkg/resources/cleanup.go @@ -35,7 +35,8 @@ func (c *ConcurrentCleanup) DeleteDiffResources(ctx context.Context, resources [ if err != nil { return err } - if err := c.cleanupResources(ctx, operatorManagedResources, status); err != nil { + err = c.cleanupResources(ctx, operatorManagedResources, status) + if err != nil { return err } return c.cleanupResources(ctx, operatorRelatedResources, status) @@ -106,7 +107,8 @@ func (c *ConcurrentCleanup) cleanupResources( resources []*resource.Info, status shared.Status, ) error { - if err := c.Run(ctx, resources); errors.Is(err, ErrDeletionNotFinished) { + err := c.Run(ctx, resources) + if errors.Is(err, ErrDeletionNotFinished) { c.manifest.SetStatus(status.WithState(shared.StateWarning).WithErr(err)) return err } else if err != nil { diff --git a/internal/pkg/resources/cleanup_test.go b/internal/pkg/resources/cleanup_test.go index 6e1c53d32c..a827d9dbce 100644 --- a/internal/pkg/resources/cleanup_test.go +++ b/internal/pkg/resources/cleanup_test.go @@ -68,6 +68,7 @@ func Test_DeleteDiffResourcesWhenManifestUnderDeleting(t *testing.T) { type ErrorMockFakeClient struct { client.WithWatch + failError error } diff --git a/internal/remote/client.go b/internal/remote/client.go index 321c2b0f24..ca34911c2f 100644 --- a/internal/remote/client.go +++ b/internal/remote/client.go @@ -12,6 +12,7 @@ type Client interface { type ConfigAndClient struct { client.Client + cfg *rest.Config } diff --git a/internal/remote/client_cache_test.go b/internal/remote/client_cache_test.go index 591914829e..cb2fce7918 100644 --- a/internal/remote/client_cache_test.go +++ b/internal/remote/client_cache_test.go @@ -69,6 +69,7 @@ func TestSizeClientCache(t *testing.T) { type TestClient struct { client.Client + name string } diff --git a/internal/remote/modulereleasemeta_syncer.go b/internal/remote/modulereleasemeta_syncer.go index b5c4c535ac..36c9bc30d7 100644 --- a/internal/remote/modulereleasemeta_syncer.go +++ b/internal/remote/modulereleasemeta_syncer.go @@ -52,12 +52,14 @@ func newModuleReleaseMetaSyncer(kcpClient, skrClient client.Client, settings *Se func (mts *moduleReleaseMetaSyncer) SyncToSKR(ctx context.Context, kcpModuleReleases []v1beta2.ModuleReleaseMeta) error { worker := mts.syncWorkerFactoryFn(mts.kcpClient, mts.skrClient, mts.settings) - if err := worker.SyncConcurrently(ctx, kcpModuleReleases); err != nil { + err := worker.SyncConcurrently(ctx, kcpModuleReleases) + if err != nil { return err } runtimeModuleReleases := &v1beta2.ModuleReleaseMetaList{} - if err := mts.skrClient.List(ctx, runtimeModuleReleases); err != nil { + err = mts.skrClient.List(ctx, runtimeModuleReleases) + if err != nil { // it can happen that the ModuleReleaseMeta CRD is not caught during to apply if there are no objects to apply // if this is the case and there is no CRD there can never be any ModuleReleaseMetas to delete if meta.IsNoMatchError(err) { @@ -74,7 +76,8 @@ func (mts *moduleReleaseMetaSyncer) SyncToSKR(ctx context.Context, kcpModuleRele // DeleteAllManaged deletes all ModuleReleaseMetas managed by KLM from the SKR cluster. func (mts *moduleReleaseMetaSyncer) DeleteAllManaged(ctx context.Context) error { moduleReleaseMetasRuntime := &v1beta2.ModuleReleaseMetaList{Items: []v1beta2.ModuleReleaseMeta{}} - if err := mts.skrClient.List(ctx, moduleReleaseMetasRuntime); err != nil { + err := mts.skrClient.List(ctx, moduleReleaseMetasRuntime) + if err != nil { // if there is no CRD or no ModuleReleaseMeta exists, // there can never be any ModuleReleaseMeta to delete if util.IsNotFound(err) { @@ -84,7 +87,8 @@ func (mts *moduleReleaseMetaSyncer) DeleteAllManaged(ctx context.Context) error } for i := range moduleReleaseMetasRuntime.Items { if isModuleReleaseMetaManagedByKcp(&moduleReleaseMetasRuntime.Items[i]) { - if err := mts.skrClient.Delete(ctx, &moduleReleaseMetasRuntime.Items[i]); err != nil && + err := mts.skrClient.Delete(ctx, &moduleReleaseMetasRuntime.Items[i]) + if err != nil && !util.IsNotFound(err) { return fmt.Errorf("failed to delete ModuleReleaseMeta from skr: %w", err) } diff --git a/internal/remote/modulereleasemeta_syncworker.go b/internal/remote/modulereleasemeta_syncworker.go index abdfe59ebe..da52a1c5e9 100644 --- a/internal/remote/modulereleasemeta_syncworker.go +++ b/internal/remote/modulereleasemeta_syncworker.go @@ -62,14 +62,16 @@ func (c *moduleReleaseMetaConcurrentWorker) SyncConcurrently(ctx context.Context } var errs []error for range channelLength { - if err := <-results; err != nil { + err := <-results + if err != nil { errs = append(errs, err) } } // retry if ModuleReleaseMeta CRD is not existing in SKR cluster if containsCRDNotFoundError(errs) { - if err := c.createCRD(ctx); err != nil { + err := c.createCRD(ctx) + if err != nil { return err } } @@ -94,7 +96,8 @@ func (c *moduleReleaseMetaConcurrentWorker) DeleteConcurrently(ctx context.Conte } var errs []error for range channelLength { - if err := <-results; err != nil { + err := <-results + if err != nil { errs = append(errs, err) } } diff --git a/internal/remote/moduletemplate_syncer.go b/internal/remote/moduletemplate_syncer.go index 0f45805030..9b7b57f250 100644 --- a/internal/remote/moduletemplate_syncer.go +++ b/internal/remote/moduletemplate_syncer.go @@ -52,12 +52,14 @@ func newModuleTemplateSyncer(kcpClient, skrClient client.Client, settings *Setti func (mts *moduleTemplateSyncer) SyncToSKR(ctx context.Context, kcpModules []v1beta2.ModuleTemplate) error { worker := mts.syncWorkerFactoryFn(mts.kcpClient, mts.skrClient, mts.settings) - if err := worker.SyncConcurrently(ctx, kcpModules); err != nil { + err := worker.SyncConcurrently(ctx, kcpModules) + if err != nil { return err } runtimeModules := &v1beta2.ModuleTemplateList{} - if err := mts.skrClient.List(ctx, runtimeModules); err != nil { + err = mts.skrClient.List(ctx, runtimeModules) + if err != nil { // it can happen that the ModuleTemplate CRD is not caught during to apply if there are no modules to apply // if this is the case and there is no CRD there can never be any module templates to delete if meta.IsNoMatchError(err) { @@ -74,7 +76,8 @@ func (mts *moduleTemplateSyncer) SyncToSKR(ctx context.Context, kcpModules []v1b // DeleteAllManaged deletes all ModuleTemplates managed by KLM from the SKR cluster. func (mts *moduleTemplateSyncer) DeleteAllManaged(ctx context.Context) error { moduleTemplatesRuntime := &v1beta2.ModuleTemplateList{Items: []v1beta2.ModuleTemplate{}} - if err := mts.skrClient.List(ctx, moduleTemplatesRuntime); err != nil { + err := mts.skrClient.List(ctx, moduleTemplatesRuntime) + if err != nil { // if there is no CRD or no module template exists, // there can never be any module templates to delete if util.IsNotFound(err) { @@ -84,7 +87,8 @@ func (mts *moduleTemplateSyncer) DeleteAllManaged(ctx context.Context) error { } for i := range moduleTemplatesRuntime.Items { if isModuleTemplateManagedByKcp(&moduleTemplatesRuntime.Items[i]) { - if err := mts.skrClient.Delete(ctx, &moduleTemplatesRuntime.Items[i]); err != nil && + err := mts.skrClient.Delete(ctx, &moduleTemplatesRuntime.Items[i]) + if err != nil && !util.IsNotFound(err) { return fmt.Errorf("failed to delete ModuleTemplate from skr: %w", err) } diff --git a/internal/remote/moduletemplate_syncworker.go b/internal/remote/moduletemplate_syncworker.go index ff16218c83..6665d964ed 100644 --- a/internal/remote/moduletemplate_syncworker.go +++ b/internal/remote/moduletemplate_syncworker.go @@ -62,14 +62,16 @@ func (c *moduleTemplateConcurrentWorker) SyncConcurrently(ctx context.Context, k } var errs []error for range channelLength { - if err := <-results; err != nil { + err := <-results + if err != nil { errs = append(errs, err) } } // retry if ModuleTemplate CRD is not existing in SKR cluster if containsCRDNotFoundError(errs) { - if err := c.createCRD(ctx); err != nil { + err := c.createCRD(ctx) + if err != nil { return err } } @@ -94,7 +96,8 @@ func (c *moduleTemplateConcurrentWorker) DeleteConcurrently(ctx context.Context, } var errs []error for range channelLength { - if err := <-results; err != nil { + err := <-results + if err != nil { errs = append(errs, err) } } diff --git a/internal/remote/remote_catalog.go b/internal/remote/remote_catalog.go index de9a9392e4..4c709de937 100644 --- a/internal/remote/remote_catalog.go +++ b/internal/remote/remote_catalog.go @@ -83,7 +83,8 @@ func newRemoteCatalog(kcpClient client.Client, skrContextFactory SkrContextProvi func (c *RemoteCatalog) SyncModuleCatalog(ctx context.Context, kyma *v1beta2.Kyma) error { moduleTemplateList := &v1beta2.ModuleTemplateList{} - if err := c.kcpClient.List(ctx, moduleTemplateList); err != nil { + err := c.kcpClient.List(ctx, moduleTemplateList) + if err != nil { return fmt.Errorf("failed to list ModuleTemplates: %w", err) } @@ -129,7 +130,8 @@ func (c *RemoteCatalog) GetModuleReleaseMetasToSync( moduleTemplateList *v1beta2.ModuleTemplateList, ) ([]v1beta2.ModuleReleaseMeta, error) { moduleReleaseMetaList := &v1beta2.ModuleReleaseMetaList{} - if err := c.kcpClient.List(ctx, moduleReleaseMetaList); err != nil { + err := c.kcpClient.List(ctx, moduleReleaseMetaList) + if err != nil { return nil, fmt.Errorf("failed to list ModuleReleaseMetas: %w", err) } diff --git a/internal/remote/skr_context.go b/internal/remote/skr_context.go index ad5c730995..58e6932605 100644 --- a/internal/remote/skr_context.go +++ b/internal/remote/skr_context.go @@ -36,6 +36,7 @@ const ( type SkrContext struct { Client + event event.Event } @@ -90,14 +91,16 @@ func (s *SkrContext) CreateKymaNamespace(ctx context.Context) error { } var buf bytes.Buffer - if err := json.NewEncoder(&buf).Encode(namespace); err != nil { + err := json.NewEncoder(&buf).Encode(namespace) + if err != nil { return fmt.Errorf("failed to encode namespace: %w", err) } patch := client.RawPatch(types.ApplyPatchType, buf.Bytes()) force := true patchOpts := &client.PatchOptions{Force: &force, FieldManager: fieldManager} - if err := s.Patch(ctx, namespace, patch, patchOpts); err != nil { + err = s.Patch(ctx, namespace, patch, patchOpts) + if err != nil { return fmt.Errorf("failed to ensure remote namespace exists: %w", err) } @@ -109,7 +112,8 @@ func (s *SkrContext) CreateOrFetchKyma( ) (*v1beta2.Kyma, error) { remoteKyma, err := s.getRemoteKyma(ctx) if meta.IsNoMatchError(err) || CRDNotFoundErr(err) { - if err := s.createOrUpdateCRD(ctx, kcpClient, shared.KymaKind.Plural()); err != nil { + err := s.createOrUpdateCRD(ctx, kcpClient, shared.KymaKind.Plural()) + if err != nil { return nil, err } s.event.Normal(kyma, crdInstallation, "CRDs were installed to SKR") @@ -175,7 +179,8 @@ func (s *SkrContext) SynchronizeKymaStatus(ctx context.Context, kcpKyma, skrKyma } syncStatus(&kcpKyma.Status, &skrKyma.Status) - if err := s.Client.Status().Update(ctx, skrKyma); err != nil { + err := s.Client.Status().Update(ctx, skrKyma) + if err != nil { err = fmt.Errorf("failed to synchronise Kyma status to SKR: %w", err) s.event.Warning(kcpKyma, statusSyncFailure, err) return err @@ -230,7 +235,8 @@ func (s *SkrContext) getRemoteKyma(ctx context.Context) (*v1beta2.Kyma, error) { }, } - if err := s.Get(ctx, client.ObjectKeyFromObject(skrKyma), skrKyma); err != nil { + err := s.Get(ctx, client.ObjectKeyFromObject(skrKyma), skrKyma) + if err != nil { return skrKyma, fmt.Errorf("failed to get remote kyma: %w", err) } diff --git a/internal/remote/skr_context_provider.go b/internal/remote/skr_context_provider.go index 5b8117b7f0..73be5b59cd 100644 --- a/internal/remote/skr_context_provider.go +++ b/internal/remote/skr_context_provider.go @@ -47,9 +47,10 @@ func (k *KymaSkrContextProvider) Init(ctx context.Context, kyma types.Namespaced } kubeConfigSecretList := &apicorev1.SecretList{} - if err := k.kcpClient.List(ctx, kubeConfigSecretList, &client.ListOptions{ + err := k.kcpClient.List(ctx, kubeConfigSecretList, &client.ListOptions{ LabelSelector: k8slabels.SelectorFromSet(k8slabels.Set{shared.KymaName: kyma.Name}), Namespace: kyma.Namespace, - }); err != nil { + }) + if err != nil { return fmt.Errorf("failed to list kubeconfig secrets: %w", err) } else if len(kubeConfigSecretList.Items) < 1 { return fmt.Errorf("secret with label %s=%s %w", shared.KymaName, kyma.Name, common.ErrAccessSecretNotFound) diff --git a/internal/remote/skr_context_test.go b/internal/remote/skr_context_test.go index f06c0d7345..e7971ed224 100644 --- a/internal/remote/skr_context_test.go +++ b/internal/remote/skr_context_test.go @@ -522,6 +522,7 @@ func assertLabelsAndAnnotations(t *testing.T, skrKyma *v1beta2.Kyma) { type eventStub struct { event.Event + called bool } @@ -530,9 +531,10 @@ func (e *eventStub) Warning(_ machineryruntime.Object, _ event.Reason, _ error) } type clientStub struct { + client.Client + err error status client.SubResourceWriter - client.Client called bool } @@ -550,8 +552,9 @@ func (*clientStub) Config() *rest.Config { } type statusClient struct { - err error client.SubResourceWriter + + err error called bool } diff --git a/internal/repository/istiogateway/istio_gateway.go b/internal/repository/istiogateway/istio_gateway.go index 9b43db0da1..6e6a43f596 100644 --- a/internal/repository/istiogateway/istio_gateway.go +++ b/internal/repository/istiogateway/istio_gateway.go @@ -20,10 +20,11 @@ func NewRepository(reader client.Reader) *Repository { func (r Repository) Get(ctx context.Context, name, namespace string) (*istioclientapiv1beta1.Gateway, error) { gateway := &istioclientapiv1beta1.Gateway{} - if err := r.reader.Get(ctx, client.ObjectKey{ + err := r.reader.Get(ctx, client.ObjectKey{ Namespace: namespace, Name: name, - }, gateway); err != nil { + }, gateway) + if err != nil { return nil, fmt.Errorf("failed to get istio gateway %s/%s: %w", namespace, name, err) } return gateway, nil diff --git a/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo.go b/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo.go index 2d6cf46755..9ad57b725d 100644 --- a/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo.go +++ b/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo.go @@ -97,7 +97,8 @@ func (r *Repository) Delete(ctx context.Context, name string) error { cert.SetName(name) cert.SetNamespace(r.certConfig.Namespace) - if err := r.kcpClient.Delete(ctx, cert); client.IgnoreNotFound(err) != nil { + err := r.kcpClient.Delete(ctx, cert) + if client.IgnoreNotFound(err) != nil { return fmt.Errorf("failed to delete certificate %s-%s: %w", name, r.certConfig.Namespace, err) } @@ -139,7 +140,8 @@ func (r *Repository) getCertificate(ctx context.Context, name string) (*certmana cert.SetName(name) cert.SetNamespace(r.certConfig.Namespace) - if err := r.kcpClient.Get(ctx, client.ObjectKeyFromObject(cert), cert); err != nil { + err := r.kcpClient.Get(ctx, client.ObjectKeyFromObject(cert), cert) + if err != nil { return nil, fmt.Errorf("failed to get certificate %s-%s: %w", name, r.certConfig.Namespace, err) } diff --git a/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_create_test.go b/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_create_test.go index 5fdb444840..546e6542cb 100644 --- a/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_create_test.go +++ b/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_create_test.go @@ -110,6 +110,7 @@ func TestCreate_ClientReturnsAnError_ReturnsError(t *testing.T) { type patchClientStub struct { client.Client + called bool object *certmanagerv1.Certificate err error diff --git a/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_delete_test.go b/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_delete_test.go index 7383a2187d..2876b9308f 100644 --- a/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_delete_test.go +++ b/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_delete_test.go @@ -87,6 +87,7 @@ func TestDelete_WhenCalledAndClientReturnsOtherError_ReturnsError(t *testing.T) type deleteClientStub struct { client.Client + called bool calledArg *certmanagerv1.Certificate err error diff --git a/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_get_test.go b/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_get_test.go index a4535950ff..a2be3ba768 100644 --- a/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_get_test.go +++ b/internal/repository/watcher/certificate/certmanager/certificate/certificate_repo_get_test.go @@ -245,6 +245,7 @@ func TestGetValidity_ClientReturnsAnError_ReturnsError(t *testing.T) { type getClientStub struct { client.Client + object *certmanagerv1.Certificate called bool err error diff --git a/internal/repository/watcher/certificate/gcm/certificate/certificate_repo.go b/internal/repository/watcher/certificate/gcm/certificate/certificate_repo.go index 2e36b59c54..71e6b1e8e6 100644 --- a/internal/repository/watcher/certificate/gcm/certificate/certificate_repo.go +++ b/internal/repository/watcher/certificate/gcm/certificate/certificate_repo.go @@ -112,7 +112,8 @@ func (r *Repository) Delete(ctx context.Context, name string) error { cert.SetName(name) cert.SetNamespace(r.certConfig.Namespace) - if err := r.kcpClient.Delete(ctx, cert); client.IgnoreNotFound(err) != nil { + err := r.kcpClient.Delete(ctx, cert) + if client.IgnoreNotFound(err) != nil { return fmt.Errorf("failed to delete certificate %s-%s: %w", name, r.certConfig.Namespace, err) } @@ -125,7 +126,8 @@ func (r *Repository) GetRenewalTime(ctx context.Context, name string) (time.Time cert.SetName(name) cert.SetNamespace(r.certConfig.Namespace) - if err := r.kcpClient.Get(ctx, client.ObjectKeyFromObject(cert), cert); err != nil { + err := r.kcpClient.Get(ctx, client.ObjectKeyFromObject(cert), cert) + if err != nil { return time.Time{}, fmt.Errorf("failed to get certificate %s-%s: %w", name, r.certConfig.Namespace, err) } @@ -147,7 +149,8 @@ func (r *Repository) GetValidity(ctx context.Context, name string) (time.Time, t cert.SetName(name) cert.SetNamespace(r.certConfig.Namespace) - if err := r.kcpClient.Get(ctx, client.ObjectKeyFromObject(cert), cert); err != nil { + err := r.kcpClient.Get(ctx, client.ObjectKeyFromObject(cert), cert) + if err != nil { return time.Time{}, time.Time{}, fmt.Errorf("failed to get certificate %s-%s: %w", name, r.certConfig.Namespace, err) } diff --git a/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_create_test.go b/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_create_test.go index 6914611f53..9a74452202 100644 --- a/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_create_test.go +++ b/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_create_test.go @@ -98,6 +98,7 @@ func TestCreate_ClientReturnsAnError_ReturnsError(t *testing.T) { type patchClientStub struct { client.Client + called bool object *gcertv1alpha1.Certificate err error diff --git a/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_delete_test.go b/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_delete_test.go index b64224aa2b..fc7634ea66 100644 --- a/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_delete_test.go +++ b/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_delete_test.go @@ -63,6 +63,7 @@ func TestDelete_ClientReturnsAnError_ReturnsError(t *testing.T) { type deleteClientStub struct { client.Client + called bool object *gcertv1alpha1.Certificate err error diff --git a/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_get_test.go b/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_get_test.go index 553215adc7..11e3c886cc 100644 --- a/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_get_test.go +++ b/internal/repository/watcher/certificate/gcm/certificate/certificate_repo_get_test.go @@ -282,6 +282,7 @@ func Test_CertificateClient_GetValidity_InvalidNotAfterDateError(t *testing.T) { type getClientStub struct { client.Client + object *gcertv1alpha1.Certificate called bool err error diff --git a/internal/repository/watcher/certificate/gcm/renewal/certificate_repo.go b/internal/repository/watcher/certificate/gcm/renewal/certificate_repo.go index 230676e546..0d6a7f4544 100644 --- a/internal/repository/watcher/certificate/gcm/renewal/certificate_repo.go +++ b/internal/repository/watcher/certificate/gcm/renewal/certificate_repo.go @@ -28,7 +28,8 @@ func (r *Repository) Get(ctx context.Context, name string) (*gcertv1alpha1.Certi cert.SetName(name) cert.SetNamespace(r.namespace) - if err := r.kcpClient.Get(ctx, client.ObjectKeyFromObject(cert), cert); err != nil { + err := r.kcpClient.Get(ctx, client.ObjectKeyFromObject(cert), cert) + if err != nil { return nil, fmt.Errorf("failed to get GCM Certificate %s-%s: %w", name, r.namespace, err) } @@ -40,7 +41,8 @@ func (r *Repository) Update(ctx context.Context, cert *gcertv1alpha1.Certificate return ErrNilCertificate } - if err := r.kcpClient.Update(ctx, cert); err != nil { + err := r.kcpClient.Update(ctx, cert) + if err != nil { return fmt.Errorf("failed to update GCM Certificate %s-%s: %w", cert.Name, cert.Namespace, err) } diff --git a/internal/repository/watcher/certificate/gcm/renewal/certificate_repo_test.go b/internal/repository/watcher/certificate/gcm/renewal/certificate_repo_test.go index ee4e5317d1..985488e062 100644 --- a/internal/repository/watcher/certificate/gcm/renewal/certificate_repo_test.go +++ b/internal/repository/watcher/certificate/gcm/renewal/certificate_repo_test.go @@ -75,6 +75,7 @@ func TestUpdate_WhenClientCallSucceeds_Returns(t *testing.T) { type clientStub struct { client.Client + getErr error getCalls int getLastCallArg client.ObjectKey diff --git a/internal/repository/watcher/certificate/secret/secret_repo.go b/internal/repository/watcher/certificate/secret/secret_repo.go index 5b71efaef2..f7f8e0f33f 100644 --- a/internal/repository/watcher/certificate/secret/secret_repo.go +++ b/internal/repository/watcher/certificate/secret/secret_repo.go @@ -36,7 +36,8 @@ func (r *Repository) Delete(ctx context.Context, name string) error { secret.SetName(name) secret.SetNamespace(r.namespace) - if err := r.kcpClient.Delete(ctx, secret); client.IgnoreNotFound(err) != nil { + err := r.kcpClient.Delete(ctx, secret) + if client.IgnoreNotFound(err) != nil { return fmt.Errorf("failed to delete secret %s-%s: %w", name, r.namespace, err) } diff --git a/internal/repository/watcher/certificate/secret/secret_repo_delete_test.go b/internal/repository/watcher/certificate/secret/secret_repo_delete_test.go index f72ac79434..8e945d7a03 100644 --- a/internal/repository/watcher/certificate/secret/secret_repo_delete_test.go +++ b/internal/repository/watcher/certificate/secret/secret_repo_delete_test.go @@ -55,6 +55,7 @@ func TestDelete_ClientReturnsNotFoundError_Returns(t *testing.T) { type deleteClientStub struct { client.Client + called bool calledWith *apicorev1.Secret err error diff --git a/internal/repository/watcher/certificate/secret/secret_repo_get_test.go b/internal/repository/watcher/certificate/secret/secret_repo_get_test.go index 221c72d129..674a35357e 100644 --- a/internal/repository/watcher/certificate/secret/secret_repo_get_test.go +++ b/internal/repository/watcher/certificate/secret/secret_repo_get_test.go @@ -48,6 +48,7 @@ func TestGet_ClientReturnsAnError_ReturnsError(t *testing.T) { type getClientStub struct { client.Client + called bool object *apicorev1.Secret err error diff --git a/internal/service/watcher/certificate/certificate_service.go b/internal/service/watcher/certificate/certificate_service.go index 71714612ff..4d2aefdbe4 100644 --- a/internal/service/watcher/certificate/certificate_service.go +++ b/internal/service/watcher/certificate/certificate_service.go @@ -69,7 +69,8 @@ func (c *Service) CreateSkrCertificate(ctx context.Context, kyma *v1beta2.Kyma) certName := constructSkrCertificateName(kyma.Name) commonName := kyma.GetRuntimeID() - if err = c.certRepo.Create(ctx, certName, commonName, dnsNames); err != nil { + err = c.certRepo.Create(ctx, certName, commonName, dnsNames) + if err != nil { return fmt.Errorf("failed to create SKR certificate: %w", err) } @@ -111,7 +112,8 @@ func (c *Service) RenewSkrCertificate(ctx context.Context, kymaName string) erro logf.FromContext(ctx).V(log.DebugLevel).Info("CA Certificate was rotated, removing certificate", "kyma", kymaName) - if err = c.renewalService.Renew(ctx, constructSkrCertificateName(kymaName)); err != nil { + err = c.renewalService.Renew(ctx, constructSkrCertificateName(kymaName)) + if err != nil { return fmt.Errorf("failed to delete SKR certificate secret: %w", err) } diff --git a/internal/service/watcher/certificate/renewal/certmanager/renewal_service.go b/internal/service/watcher/certificate/renewal/certmanager/renewal_service.go index 1bce003327..8f11d88920 100644 --- a/internal/service/watcher/certificate/renewal/certmanager/renewal_service.go +++ b/internal/service/watcher/certificate/renewal/certmanager/renewal_service.go @@ -20,7 +20,8 @@ func NewService(certRepo SecretRepository) *Service { } func (s *Service) Renew(ctx context.Context, name string) error { - if err := s.secretRepository.Delete(ctx, name); err != nil { + err := s.secretRepository.Delete(ctx, name) + if err != nil { return fmt.Errorf("failed to renew SKR certificate secret. Deletion failed: %w", err) } diff --git a/internal/service/watcher/certificate/renewal/gcm/renewal_service.go b/internal/service/watcher/certificate/renewal/gcm/renewal_service.go index c7d21c7434..f580c9b04d 100644 --- a/internal/service/watcher/certificate/renewal/gcm/renewal_service.go +++ b/internal/service/watcher/certificate/renewal/gcm/renewal_service.go @@ -25,7 +25,8 @@ func NewService(certRepo CertificateRepository) *Service { func (s *Service) Renew(ctx context.Context, name string) error { var cert *gcertv1alpha1.Certificate var err error - if cert, err = s.certRepo.Get(ctx, name); err != nil || cert == nil { + cert, err = s.certRepo.Get(ctx, name) + if err != nil || cert == nil { return fmt.Errorf("could not get certificate for renewal: %w", err) } @@ -35,7 +36,8 @@ func (s *Service) Renew(ctx context.Context, name string) error { cert.Spec.Renew = boolPtr(true) - if err = s.certRepo.Update(ctx, cert); err != nil { + err = s.certRepo.Update(ctx, cert) + if err != nil { return fmt.Errorf("failed to update certificate for renewal: %w", err) } diff --git a/internal/service/watcher/chartreader/chartreader_service.go b/internal/service/watcher/chartreader/chartreader_service.go index 4e15161e56..a5de56ad3f 100644 --- a/internal/service/watcher/chartreader/chartreader_service.go +++ b/internal/service/watcher/chartreader/chartreader_service.go @@ -43,7 +43,8 @@ func (s *Service) RunResourceOperationWithGroupedErrors(ctx context.Context, skr return operation(grpCtx, skrClient, resources[resIdx]) }) } - if err := errGrp.Wait(); err != nil { + err := errGrp.Wait() + if err != nil { return fmt.Errorf("failed to run resource operation: %w", err) } return nil diff --git a/internal/service/watcher/chartreader/chartreader_service_test.go b/internal/service/watcher/chartreader/chartreader_service_test.go index 13231b9d31..0a52f4bd81 100644 --- a/internal/service/watcher/chartreader/chartreader_service_test.go +++ b/internal/service/watcher/chartreader/chartreader_service_test.go @@ -86,7 +86,8 @@ kind: Secret metadata: name: test-secret ` - if err := os.WriteFile(manifestPath, []byte(content), 0o600); err != nil { + err := os.WriteFile(manifestPath, []byte(content), 0o600) + if err != nil { t.Fatalf("failed to write manifest: %v", err) } @@ -112,7 +113,8 @@ metadata: name: "invalid yaml", dir: func() string { d := t.TempDir() - if err := os.WriteFile(d+"/resources.yaml", []byte("not: [valid"), 0o600); err != nil { + err := os.WriteFile(d+"/resources.yaml", []byte("not: [valid"), 0o600) + if err != nil { return "" } return d diff --git a/internal/service/watcher/resources/resource_configurator.go b/internal/service/watcher/resources/resource_configurator.go index ff58c4d44b..632104a449 100644 --- a/internal/service/watcher/resources/resource_configurator.go +++ b/internal/service/watcher/resources/resource_configurator.go @@ -93,7 +93,8 @@ func (rc *ResourceConfigurator) ConfigureUnstructuredObject(object *unstructured func (rc *ResourceConfigurator) ConfigureDeployment(obj *unstructured.Unstructured, ) (*apiappsv1.Deployment, error) { deployment := &apiappsv1.Deployment{} - if err := machineryruntime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, deployment); err != nil { + err := machineryruntime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, deployment) + if err != nil { return nil, fmt.Errorf("%w: %w", errConvertUnstruct, err) } if len(deployment.Spec.Template.Labels) == 0 { @@ -142,7 +143,8 @@ func (rc *ResourceConfigurator) ConfigureNetworkPolicies(obj *unstructured.Unstr error, ) { networkPolicy := &apinetworkv1.NetworkPolicy{} - if err := machineryruntime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, networkPolicy); err != nil { + err := machineryruntime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, networkPolicy) + if err != nil { return nil, fmt.Errorf("%w: %w", errConvertUnstruct, err) } diff --git a/internal/setup/gatewaysecret.go b/internal/setup/gatewaysecret.go index a51646adbd..b674de96ef 100644 --- a/internal/setup/gatewaysecret.go +++ b/internal/setup/gatewaysecret.go @@ -14,8 +14,7 @@ import ( gcmcertificate "github.com/kyma-project/lifecycle-manager/internal/repository/watcher/certificate/gcm/certificate" ) -//nolint:ireturn // chosen implementation shall be abstracted -func SetupCertInterface(kcpClient client.Client, flagVar *flags.FlagVar) (gatewaysecretclient.CertificateInterface, +func SetupCertInterface(kcpClient client.Client, flagVar *flags.FlagVar) (gatewaysecretclient.CertificateInterface, //nolint:ireturn // we select the interface here on purpose error, ) { certificateConfig := config.CertificateValues{ diff --git a/internal/setup/ociregistryhostprovider.go b/internal/setup/ociregistryhostprovider.go index 4a005b9e1d..d8c5debab9 100644 --- a/internal/setup/ociregistryhostprovider.go +++ b/internal/setup/ociregistryhostprovider.go @@ -67,7 +67,8 @@ func (oci *OCIRegistryHostProvider) getHostFromCredSecret(ctx context.Context) ( var dockerConfig struct { Auths map[string]interface{} `json:"auths"` } - if err := json.Unmarshal(data, &dockerConfig); err != nil { + err = json.Unmarshal(data, &dockerConfig) + if err != nil { return "", fmt.Errorf("failed to unmarshal docker config json: %w", err) } diff --git a/internal/util.go b/internal/util.go index b9071da98b..bd46594717 100644 --- a/internal/util.go +++ b/internal/util.go @@ -26,7 +26,8 @@ func ParseManifestToObjects(path string) (ManifestResources, error) { result := builder.Do() - if err := result.Err(); err != nil { + err := result.Err() + if err != nil { return ManifestResources{}, fmt.Errorf("parse manifest: %w", err) } items, err := result.Infos() diff --git a/internal/watch/mandatory_template_change.go b/internal/watch/mandatory_template_change.go index aad0e37806..e851232c36 100644 --- a/internal/watch/mandatory_template_change.go +++ b/internal/watch/mandatory_template_change.go @@ -26,7 +26,8 @@ func (h *MandatoryTemplateChangeHandler) Watch() handler.MapFunc { emptyRequest := make([]reconcile.Request, 0) template := &v1beta2.ModuleTemplate{} - if err := h.Get(ctx, client.ObjectKeyFromObject(o), template); err != nil { + err := h.Get(ctx, client.ObjectKeyFromObject(o), template) + if err != nil { return emptyRequest } diff --git a/internal/watch/template_change.go b/internal/watch/template_change.go index f75598fc2d..1b230f5d3b 100644 --- a/internal/watch/template_change.go +++ b/internal/watch/template_change.go @@ -23,7 +23,8 @@ func (h *TemplateChangeHandler) Watch() handler.MapFunc { emptyRequest := make([]reconcile.Request, 0) template := &v1beta2.ModuleTemplate{} - if err := h.Get(ctx, client.ObjectKeyFromObject(o), template); err != nil { + err := h.Get(ctx, client.ObjectKeyFromObject(o), template) + if err != nil { return emptyRequest } diff --git a/maintenancewindows/resolver/maintwindow_test.go b/maintenancewindows/resolver/maintwindow_test.go index 63ff11dee3..bfc64ffce7 100644 --- a/maintenancewindows/resolver/maintwindow_test.go +++ b/maintenancewindows/resolver/maintwindow_test.go @@ -94,6 +94,7 @@ func (tc testCase) Message() string { type MaintWindowSuite struct { suite.Suite + plan resolver.MaintenanceWindowPolicy testCases []testCase } diff --git a/pkg/module/sync/runner.go b/pkg/module/sync/runner.go index 92ff39a0a1..7a4f814e0d 100644 --- a/pkg/module/sync/runner.go +++ b/pkg/module/sync/runner.go @@ -33,6 +33,7 @@ func New(clnt client.Client) *Runner { type Runner struct { client.Client + versioner machineryruntime.GroupVersioner converter machineryruntime.ObjectConvertor } @@ -61,7 +62,8 @@ func (r *Runner) ReconcileManifests(ctx context.Context, kyma *v1beta2.Kyma, results <- nil return } - if err := r.updateManifest(ctx, kyma, module); err != nil { + err := r.updateManifest(ctx, kyma, module) + if err != nil { results <- fmt.Errorf("could not update module %s: %w", module.Manifest.GetName(), err) return } @@ -71,7 +73,8 @@ func (r *Runner) ReconcileManifests(ctx context.Context, kyma *v1beta2.Kyma, } var errs []error for range modules { - if err := <-results; err != nil { + err := <-results + if err != nil { errs = append(errs, err) } } @@ -87,7 +90,8 @@ func (r *Runner) ReconcileManifests(ctx context.Context, kyma *v1beta2.Kyma, func (r *Runner) updateManifest(ctx context.Context, kyma *v1beta2.Kyma, module *modulecommon.Module, ) error { - if err := r.setupModule(module, kyma); err != nil { + err := r.setupModule(module, kyma) + if err != nil { return err } obj, err := r.converter.ConvertToVersion(module.Manifest, r.versioner) @@ -105,8 +109,8 @@ func (r *Runner) updateManifest(ctx context.Context, kyma *v1beta2.Kyma, return err } - if err := r.doUpdateWithStrategy(ctx, kyma.Labels[shared.ManagedBy], module, - manifestInCluster, newManifest, moduleStatus); err != nil { + err = r.doUpdateWithStrategy(ctx, kyma.Labels[shared.ManagedBy], module, manifestInCluster, newManifest, moduleStatus) + if err != nil { return err } module.Manifest = newManifest @@ -133,7 +137,8 @@ func (r *Runner) doUpdateWithStrategy(ctx context.Context, owner string, module return r.patchManifest(ctx, owner, newManifest) } // For disabled module, the manifest CR is under deleting, in this case, we only update the spec when it's still not deleted. - if err := r.updateAvailableManifestSpec(ctx, manifestInCluster, newManifest); err != nil && !util.IsNotFound(err) { + err := r.updateAvailableManifestSpec(ctx, manifestInCluster, newManifest) + if err != nil && !util.IsNotFound(err) { return err } return nil @@ -157,11 +162,12 @@ func (r *Runner) getManifest(ctx context.Context, name, namespace string) (*v1be } func (r *Runner) patchManifest(ctx context.Context, owner string, newManifest *v1beta2.Manifest) error { - if err := r.Patch(ctx, newManifest, + err := r.Patch(ctx, newManifest, client.Apply, client.FieldOwner(owner), client.ForceOwnership, - ); err != nil { + ) + if err != nil { return fmt.Errorf("error applying manifest %s: %w", client.ObjectKeyFromObject(newManifest), err) } return nil @@ -174,7 +180,8 @@ func (r *Runner) updateAvailableManifestSpec(ctx context.Context, return nil } manifestInCluster.Spec = newManifest.Spec - if err := r.Update(ctx, manifestInCluster); err != nil { + err := r.Update(ctx, manifestInCluster) + if err != nil { return fmt.Errorf("error update manifest %s: %w", client.ObjectKeyFromObject(newManifest), err) } return nil @@ -218,7 +225,8 @@ func (r *Runner) setupModule(module *modulecommon.Module, kyma *v1beta2.Kyma) er refs := module.Manifest.GetOwnerReferences() if len(refs) == 0 { - if err := controllerutil.SetControllerReference(kyma, module.Manifest, r.Scheme()); err != nil { + err := controllerutil.SetControllerReference(kyma, module.Manifest, r.Scheme()) + if err != nil { return fmt.Errorf("error setting owner reference on component CR of type: %s for resource %s %w", module.Manifest.GetName(), kyma.Name, err) } diff --git a/pkg/security/san_pinning.go b/pkg/security/san_pinning.go index f089fd9a9d..ab4298cf1e 100644 --- a/pkg/security/san_pinning.go +++ b/pkg/security/san_pinning.go @@ -139,7 +139,8 @@ func (v *RequestVerifier) getCertificateFromHeader(r *http.Request) (*x509.Certi // getDomain fetches the KymaCR, mentioned in the requests body, and returns the value of the SKR-Domain annotation. func (v *RequestVerifier) getDomain(request *http.Request, watcherEvtObject *types.WatchEvent) (string, error) { var kymaCR v1beta2.Kyma - if err := v.Client.Get(request.Context(), watcherEvtObject.Owner, &kymaCR); err != nil { + err := v.Client.Get(request.Context(), watcherEvtObject.Owner, &kymaCR) + if err != nil { return "", fmt.Errorf("failed to get Kyma CR: %w", err) } domain, ok := kymaCR.Annotations[shootDomainKey] diff --git a/pkg/status/kyma_helper.go b/pkg/status/kyma_helper.go index b253bf0fe0..d1024b6e52 100644 --- a/pkg/status/kyma_helper.go +++ b/pkg/status/kyma_helper.go @@ -14,6 +14,7 @@ import ( type KymaHelper struct { client.StatusWriter + recordKymaStatusMetrics func(ctx context.Context, kyma *v1beta2.Kyma) isManagedKyma bool } @@ -58,8 +59,9 @@ func (k *KymaHelper) UpdateStatusForExistingModules(ctx context.Context, if k.isManagedKyma { fieldOwner = shared.OperatorName } - if err := k.Patch(ctx, kyma, client.Apply, SubResourceOpts(client.ForceOwnership), - client.FieldOwner(fieldOwner)); err != nil { + err := k.Patch(ctx, kyma, client.Apply, SubResourceOpts(client.ForceOwnership), + client.FieldOwner(fieldOwner)) + if err != nil { return fmt.Errorf("status could not be updated: %w", err) } diff --git a/pkg/templatelookup/mandatory.go b/pkg/templatelookup/mandatory.go index 599868e20e..042104e02c 100644 --- a/pkg/templatelookup/mandatory.go +++ b/pkg/templatelookup/mandatory.go @@ -18,8 +18,9 @@ func GetMandatory(ctx context.Context, kymaClient client.Reader) (ModuleTemplate ) { mandatoryModuleTemplateList := &v1beta2.ModuleTemplateList{} labelSelector := k8slabels.SelectorFromSet(k8slabels.Set{shared.IsMandatoryModule: shared.EnableLabelValue}) - if err := kymaClient.List(ctx, mandatoryModuleTemplateList, - &client.ListOptions{LabelSelector: labelSelector}); err != nil { + err := kymaClient.List(ctx, mandatoryModuleTemplateList, + &client.ListOptions{LabelSelector: labelSelector}) + if err != nil { return nil, fmt.Errorf("could not list mandatory ModuleTemplates: %w", err) } diff --git a/pkg/templatelookup/moduleinfo.go b/pkg/templatelookup/moduleinfo.go index e12dbf2ec2..9b1b7c0c4f 100644 --- a/pkg/templatelookup/moduleinfo.go +++ b/pkg/templatelookup/moduleinfo.go @@ -15,6 +15,7 @@ var ( type ModuleInfo struct { v1beta2.Module + Enabled bool ValidationError error Unmanaged bool diff --git a/pkg/templatelookup/modulereleasemeta.go b/pkg/templatelookup/modulereleasemeta.go index ecf16aab65..1d2e2e3310 100644 --- a/pkg/templatelookup/modulereleasemeta.go +++ b/pkg/templatelookup/modulereleasemeta.go @@ -20,10 +20,11 @@ func GetModuleReleaseMeta(ctx context.Context, clnt client.Reader, moduleName st error, ) { mrm := &v1beta2.ModuleReleaseMeta{} - if err := clnt.Get(ctx, client.ObjectKey{ + err := clnt.Get(ctx, client.ObjectKey{ Namespace: namespace, Name: moduleName, - }, mrm); err != nil { + }, mrm) + if err != nil { return nil, fmt.Errorf("failed to fetch ModuleReleaseMeta for %s: %w", moduleName, err) } diff --git a/pkg/templatelookup/moduletemplateinfolookup/common.go b/pkg/templatelookup/moduletemplateinfolookup/common.go index 21f4d2a7c5..02b506d6fe 100644 --- a/pkg/templatelookup/moduletemplateinfolookup/common.go +++ b/pkg/templatelookup/moduletemplateinfolookup/common.go @@ -48,10 +48,11 @@ func getTemplateByVersion(ctx context.Context, moduleTemplate := &v1beta2.ModuleTemplate{} moduleTemplateName := fmt.Sprintf("%s-%s", moduleName, moduleVersion) - if err := clnt.Get(ctx, client.ObjectKey{ + err := clnt.Get(ctx, client.ObjectKey{ Name: moduleTemplateName, Namespace: namespace, - }, moduleTemplate); err != nil { + }, moduleTemplate) + if err != nil { return nil, fmt.Errorf("failed to get module template: %w", err) } diff --git a/pkg/templatelookup/regular.go b/pkg/templatelookup/regular.go index 506cad0397..80e254283b 100644 --- a/pkg/templatelookup/regular.go +++ b/pkg/templatelookup/regular.go @@ -20,6 +20,7 @@ var ( type ModuleTemplateInfo struct { *v1beta2.ModuleTemplate + Err error DesiredChannel string } @@ -34,6 +35,7 @@ type ModuleTemplateInfoLookupStrategy interface { type TemplateLookup struct { client.Reader + descriptorProvider *provider.CachedDescriptorProvider moduleTemplateInfoLookupStrategy ModuleTemplateInfoLookupStrategy } @@ -79,7 +81,8 @@ func (t *TemplateLookup) GetRegularTemplates(ctx context.Context, kyma *v1beta2. templates[moduleInfo.Name] = &templateInfo continue } - if err := t.descriptorProvider.Add(templateInfo.ModuleTemplate); err != nil { + err = t.descriptorProvider.Add(templateInfo.ModuleTemplate) + if err != nil { templateInfo.Err = fmt.Errorf("failed to get descriptor: %w", err) templates[moduleInfo.Name] = &templateInfo continue diff --git a/pkg/testutils/builder/moduletemplate.go b/pkg/testutils/builder/moduletemplate.go index 0faded3c5f..fe3774dcf6 100644 --- a/pkg/testutils/builder/moduletemplate.go +++ b/pkg/testutils/builder/moduletemplate.go @@ -193,7 +193,8 @@ func readComponentDescriptorFromYaml(template string, moduleTemplate *v1beta2.Mo if err != nil { panic(fmt.Errorf("read module template: %w", err)) } - if err := machineryaml.Unmarshal(moduleFile, &moduleTemplate); err != nil { + err = machineryaml.Unmarshal(moduleFile, &moduleTemplate) + if err != nil { panic(fmt.Errorf("unmarshal module template: %w", err)) } } diff --git a/pkg/testutils/kyma.go b/pkg/testutils/kyma.go index f49d819a41..2c7bf88dd7 100644 --- a/pkg/testutils/kyma.go +++ b/pkg/testutils/kyma.go @@ -90,14 +90,16 @@ func KymaDeleted(ctx context.Context, } func DeleteKymaByForceRemovePurgeFinalizer(ctx context.Context, clnt client.Client, kyma *v1beta2.Kyma) error { - if err := SyncKyma(ctx, clnt, kyma); err != nil { + err := SyncKyma(ctx, clnt, kyma) + if err != nil { return fmt.Errorf("sync kyma %w", err) } if !kyma.DeletionTimestamp.IsZero() { if controllerutil.ContainsFinalizer(kyma, shared.PurgeFinalizer) { controllerutil.RemoveFinalizer(kyma, shared.PurgeFinalizer) - if err := clnt.Update(ctx, kyma); err != nil { + err := clnt.Update(ctx, kyma) + if err != nil { return fmt.Errorf("can't remove purge finalizer %w", err) } } diff --git a/pkg/testutils/manifest.go b/pkg/testutils/manifest.go index 4f874648b6..055a91ddc4 100644 --- a/pkg/testutils/manifest.go +++ b/pkg/testutils/manifest.go @@ -116,10 +116,11 @@ func GetManifestWithMetadata(ctx context.Context, clnt client.Client, manifestNamespace, manifestName string, ) (*v1beta2.Manifest, error) { manifest := &v1beta2.Manifest{} - if err := clnt.Get(ctx, client.ObjectKey{ + err := clnt.Get(ctx, client.ObjectKey{ Namespace: manifestNamespace, Name: manifestName, - }, manifest); err != nil { + }, manifest) + if err != nil { return nil, fmt.Errorf("get manifest: %w", err) } return manifest, nil @@ -162,9 +163,10 @@ func MandatoryManifestExistsWithLabelAndAnnotation(ctx context.Context, clnt cli annotationKey, annotationValue string, ) error { manifests := v1beta2.ManifestList{} - if err := clnt.List(ctx, &manifests, &client.ListOptions{ + err := clnt.List(ctx, &manifests, &client.ListOptions{ LabelSelector: k8slabels.SelectorFromSet(k8slabels.Set{shared.IsMandatoryModule: "true"}), - }); err != nil { + }) + if err != nil { return fmt.Errorf("failed listing manifests: %w", err) } @@ -213,7 +215,8 @@ func NoManifestExist(ctx context.Context, clnt client.Client, ) error { manifestList := &v1beta2.ManifestList{} - if err := clnt.List(ctx, manifestList); err != nil { + err := clnt.List(ctx, manifestList) + if err != nil { return fmt.Errorf("error listing manifests: %w", err) } if len(manifestList.Items) == 0 { @@ -286,9 +289,10 @@ func SetSkipLabelToManifest( func SetSkipLabelToMandatoryManifests(ctx context.Context, clnt client.Client, ifSkip bool, ) error { manifestList := v1beta2.ManifestList{} - if err := clnt.List(ctx, &manifestList, &client.ListOptions{ + err := clnt.List(ctx, &manifestList, &client.ListOptions{ LabelSelector: k8slabels.SelectorFromSet(k8slabels.Set{shared.IsMandatoryModule: "true"}), - }); err != nil { + }) + if err != nil { return fmt.Errorf("failed to list manifests: %w", err) } for _, manifest := range manifestList.Items { @@ -305,9 +309,10 @@ func MandatoryModuleManifestExistWithCorrectVersion(ctx context.Context, clnt cl moduleName, expectedVersion string, ) error { manifestList := v1beta2.ManifestList{} - if err := clnt.List(ctx, &manifestList, &client.ListOptions{ + err := clnt.List(ctx, &manifestList, &client.ListOptions{ LabelSelector: k8slabels.SelectorFromSet(k8slabels.Set{shared.IsMandatoryModule: "true"}), - }); err != nil { + }) + if err != nil { return fmt.Errorf("failed to list manifests: %w", err) } @@ -335,9 +340,10 @@ func MandatoryModuleManifestContainsExpectedLabel(ctx context.Context, clnt clie moduleName, labelkey, labelValue string, ) error { manifestList := v1beta2.ManifestList{} - if err := clnt.List(ctx, &manifestList, &client.ListOptions{ + err := clnt.List(ctx, &manifestList, &client.ListOptions{ LabelSelector: k8slabels.SelectorFromSet(k8slabels.Set{shared.IsMandatoryModule: "true"}), - }); err != nil { + }) + if err != nil { return fmt.Errorf("failed to list manifests: %w", err) } @@ -398,7 +404,8 @@ func CheckManifestHasCorrectInstallRepo( } var installImageSpec *v1beta2.ImageSpec - if err = machineryaml.Unmarshal(manifest.Spec.Install.Source.Raw, &installImageSpec); err != nil { + err = machineryaml.Unmarshal(manifest.Spec.Install.Source.Raw, &installImageSpec) + if err != nil { return fmt.Errorf("error unmarshalling install image spec: %w", err) } @@ -616,7 +623,8 @@ func UpdateManifestSpec(cxt context.Context, clnt client.Client, manifestName st return err } manifest.Spec = spec - if err = clnt.Update(cxt, manifest); err != nil { + err = clnt.Update(cxt, manifest) + if err != nil { return fmt.Errorf("error updating Manifest: %w", err) } @@ -734,11 +742,12 @@ func GetManifestWithName(ctx context.Context, clnt client.Client, manifestName s func DeleteManifestAndVerify(ctx context.Context, clnt client.Client, manifest *v1beta2.Manifest) func() error { return func() error { - if err := clnt.Delete(ctx, manifest); err != nil && !util.IsNotFound(err) { + err := clnt.Delete(ctx, manifest) + if err != nil && !util.IsNotFound(err) { return fmt.Errorf("error deleting Manifest %s: %w", manifest.Name, err) } newManifest := v1beta2.Manifest{} - err := clnt.Get(ctx, client.ObjectKeyFromObject(manifest), &newManifest) + err = clnt.Get(ctx, client.ObjectKeyFromObject(manifest), &newManifest) if client.IgnoreNotFound(err) != nil { return fmt.Errorf("failed to fetch manifest %w", err) } diff --git a/pkg/testutils/modulecr.go b/pkg/testutils/modulecr.go index 7d2623fdb1..6656e7a6cf 100644 --- a/pkg/testutils/modulecr.go +++ b/pkg/testutils/modulecr.go @@ -106,7 +106,8 @@ func AddFinalizerToModuleCR(ctx context.Context, clnt client.Client, moduleCR *u } moduleCR.SetFinalizers(append(finalizers, finalizer)) - if err = clnt.Update(ctx, moduleCR); err != nil { + err = clnt.Update(ctx, moduleCR) + if err != nil { return fmt.Errorf("updating module CR %w", err) } diff --git a/pkg/testutils/modulereleasemeta.go b/pkg/testutils/modulereleasemeta.go index db81ec9351..12be262a13 100644 --- a/pkg/testutils/modulereleasemeta.go +++ b/pkg/testutils/modulereleasemeta.go @@ -38,7 +38,8 @@ func UpdateChannelVersionInModuleReleaseMeta(ctx context.Context, clnt client.Cl }) } - if err = clnt.Update(ctx, mrm); err != nil { + err = clnt.Update(ctx, mrm) + if err != nil { return fmt.Errorf("update module release meta: %w", err) } @@ -61,7 +62,8 @@ func GetModuleReleaseMeta(ctx context.Context, moduleName, namespace string, } func ModuleReleaseMetaExists(ctx context.Context, moduleName, namespace string, clnt client.Client) error { - if _, err := GetModuleReleaseMeta(ctx, moduleName, namespace, clnt); err != nil { + _, err := GetModuleReleaseMeta(ctx, moduleName, namespace, clnt) + if err != nil { if util.IsNotFound(err) { return ErrNotFound } @@ -106,13 +108,15 @@ func UpdateAllModuleReleaseMetaChannelVersions(ctx context.Context, client clien namespace, name, version string, ) error { meta := &v1beta2.ModuleReleaseMeta{} - if err := client.Get(ctx, types.NamespacedName{Namespace: namespace, Name: name}, meta); err != nil { + err := client.Get(ctx, types.NamespacedName{Namespace: namespace, Name: name}, meta) + if err != nil { return err } for i := range meta.Spec.Channels { meta.Spec.Channels[i].Version = version } - if err := client.Update(ctx, meta); err != nil { + err = client.Update(ctx, meta) + if err != nil { return err } return nil diff --git a/pkg/testutils/moduletemplate.go b/pkg/testutils/moduletemplate.go index 20219d56c9..a37f38795a 100644 --- a/pkg/testutils/moduletemplate.go +++ b/pkg/testutils/moduletemplate.go @@ -21,7 +21,8 @@ func CreateModuleTemplate(ctx context.Context, moduleTemplate *v1beta2.ModuleTemplate, ) error { moduleTemplate.SetResourceVersion("") // must be reset to enable retries - if err := clnt.Create(ctx, moduleTemplate); client.IgnoreAlreadyExists(err) != nil { + err := clnt.Create(ctx, moduleTemplate) + if client.IgnoreAlreadyExists(err) != nil { return fmt.Errorf("creating ModuleTemplate failed: %w", err) } return nil @@ -72,10 +73,11 @@ func ModuleTemplateExistsByName(ctx context.Context, moduleName string, namespace string, ) error { - if err := clnt.Get(ctx, client.ObjectKey{ + err := clnt.Get(ctx, client.ObjectKey{ Namespace: namespace, Name: moduleName, - }, &v1beta2.ModuleTemplate{}); err != nil { + }, &v1beta2.ModuleTemplate{}) + if err != nil { if util.IsNotFound(err) { return ErrNotFound } @@ -85,7 +87,8 @@ func ModuleTemplateExistsByName(ctx context.Context, func AllModuleTemplatesExists(ctx context.Context, clnt client.Client, kyma *v1beta2.Kyma) error { for _, module := range kyma.Spec.Modules { - if err := ModuleTemplateExists(ctx, clnt, module, kyma); err != nil { + err := ModuleTemplateExists(ctx, clnt, module, kyma) + if err != nil { return err } } @@ -108,7 +111,8 @@ func UpdateModuleTemplateSpec(ctx context.Context, return ErrManifestResourceIsNil } moduleTemplate.Spec.Data.Object["spec"] = map[string]any{key: newValue} - if err := clnt.Update(ctx, moduleTemplate); err != nil { + err = clnt.Update(ctx, moduleTemplate) + if err != nil { return fmt.Errorf("update module tempate: %w", err) } return nil @@ -132,7 +136,8 @@ func SetModuleTemplateBetaLabel(ctx context.Context, clnt client.Client, module moduleTemplate.Labels[shared.BetaLabel] = shared.DisableLabelValue } - if err := clnt.Update(ctx, moduleTemplate); err != nil { + err = clnt.Update(ctx, moduleTemplate) + if err != nil { return fmt.Errorf("failed to update module template: %w", err) } @@ -157,7 +162,8 @@ func SetModuleTemplateInternalLabel(ctx context.Context, clnt client.Client, mod moduleTemplate.Labels[shared.InternalLabel] = shared.DisableLabelValue } - if err := clnt.Update(ctx, moduleTemplate); err != nil { + err = clnt.Update(ctx, moduleTemplate) + if err != nil { return fmt.Errorf("failed to update module template: %w", err) } diff --git a/pkg/testutils/networkpolicy.go b/pkg/testutils/networkpolicy.go index 8e4ce8f766..0456d115b8 100644 --- a/pkg/testutils/networkpolicy.go +++ b/pkg/testutils/networkpolicy.go @@ -30,7 +30,8 @@ func GetNetworkPolicy(ctx context.Context, clnt client.Client, name, namespace s } func CreateNetworkPolicy(ctx context.Context, clnt client.Client, networkPolicy *apinetworkv1.NetworkPolicy) error { - if err := clnt.Create(ctx, networkPolicy); !apierrors.IsAlreadyExists(err) { + err := clnt.Create(ctx, networkPolicy) + if !apierrors.IsAlreadyExists(err) { return err } return nil diff --git a/pkg/testutils/unstructured.go b/pkg/testutils/unstructured.go index 308345e85a..109be9f15e 100644 --- a/pkg/testutils/unstructured.go +++ b/pkg/testutils/unstructured.go @@ -28,7 +28,8 @@ func DeleteCR(ctx context.Context, clnt client.Client, obj client.Object) error if err != nil { return err } - if err := clnt.Get(ctx, client.ObjectKey{Name: obj.GetName(), Namespace: obj.GetNamespace()}, obj); err != nil { + err = clnt.Get(ctx, client.ObjectKey{Name: obj.GetName(), Namespace: obj.GetNamespace()}, obj) + if err != nil { if util.IsNotFound(err) { return nil } @@ -55,7 +56,8 @@ func GetCR(ctx context.Context, clnt client.Client, ) (*unstructured.Unstructured, error) { obj := &unstructured.Unstructured{} obj.SetGroupVersionKind(gvk) - if err := clnt.Get(ctx, objectKey, obj); err != nil { + err := clnt.Get(ctx, objectKey, obj) + if err != nil { return nil, err } return obj, nil diff --git a/pkg/testutils/utils.go b/pkg/testutils/utils.go index ace27e84bb..3f603fd4ec 100644 --- a/pkg/testutils/utils.go +++ b/pkg/testutils/utils.go @@ -103,7 +103,8 @@ func AppendExternalCRDs(path string, files ...string) ([]*apiextensionsv1.Custom decoder := machineryaml.NewYAMLOrJSONDecoder(moduleFile, defaultBufferSize) for { crd := &apiextensionsv1.CustomResourceDefinition{} - if err = decoder.Decode(crd); err != nil { + err = decoder.Decode(crd) + if err != nil { if errors.Is(err, io.EOF) { break } @@ -124,8 +125,8 @@ func DeletionTimeStampExists(ctx context.Context, group, version, kind, name, na Version: version, Kind: kind, }) - if err := clnt.Get(ctx, - client.ObjectKey{Name: name, Namespace: namespace}, sampleCR); err != nil { + err := clnt.Get(ctx, client.ObjectKey{Name: name, Namespace: namespace}, sampleCR) + if err != nil { return false, err } @@ -183,12 +184,14 @@ func parseResourcesFromYAML(yamlFilePath string, clnt client.Client) ([]*unstruc func PatchServiceToTypeLoadBalancer(ctx context.Context, clnt client.Client, serviceName, namespace string) error { service := &apicorev1.Service{} - if err := clnt.Get(ctx, client.ObjectKey{Name: serviceName, Namespace: namespace}, service); err != nil { + err := clnt.Get(ctx, client.ObjectKey{Name: serviceName, Namespace: namespace}, service) + if err != nil { return err } service.Spec.Type = apicorev1.ServiceTypeLoadBalancer - if err := clnt.Update(ctx, service); err != nil { + err = clnt.Update(ctx, service) + if err != nil { return err } diff --git a/pkg/util/error.go b/pkg/util/error.go index 9450d9188e..e163bb1db2 100644 --- a/pkg/util/error.go +++ b/pkg/util/error.go @@ -67,7 +67,8 @@ func NestedErrorMessage(err error) string { if err == nil { return res } - if uwErr := errors.Unwrap(err); uwErr != nil { + uwErr := errors.Unwrap(err) + if uwErr != nil { res = uwErr.Error() } diff --git a/pkg/watcher/skr_webhook_manifest_manager.go b/pkg/watcher/skr_webhook_manifest_manager.go index 120cf3ac52..4d837c7374 100644 --- a/pkg/watcher/skr_webhook_manifest_manager.go +++ b/pkg/watcher/skr_webhook_manifest_manager.go @@ -103,7 +103,8 @@ func (m *SkrWebhookManifestManager) Reconcile(ctx context.Context, kyma *v1beta2 m.writeCertificateRenewalMetrics(ctx, kyma.Name, logger) - if err = m.skrCertificateService.RenewSkrCertificate(ctx, kyma.Name); err != nil { + err = m.skrCertificateService.RenewSkrCertificate(ctx, kyma.Name) + if err != nil { return fmt.Errorf("failed to renew SKR certificate: %w", err) } @@ -140,7 +141,8 @@ func (m *SkrWebhookManifestManager) Remove(ctx context.Context, kyma *v1beta2.Ky return fmt.Errorf("failed to get skrContext: %w", err) } - if err = m.skrCertificateService.DeleteSkrCertificate(ctx, kyma.Name); err != nil { + err = m.skrCertificateService.DeleteSkrCertificate(ctx, kyma.Name) + if err != nil { return fmt.Errorf("failed to delete SKR certificate: %w", err) } @@ -171,7 +173,8 @@ func (m *SkrWebhookManifestManager) Remove(ctx context.Context, kyma *v1beta2.Ky // RemoveSkrCertificate removes the SKR certificate from the KCP cluster. // The major anticipated use case is to cleanup orphaned certificates. func (m *SkrWebhookManifestManager) RemoveSkrCertificate(ctx context.Context, kymaName string) error { - if err := m.skrCertificateService.DeleteSkrCertificate(ctx, kymaName); err != nil { + err := m.skrCertificateService.DeleteSkrCertificate(ctx, kymaName) + if err != nil { return fmt.Errorf("failed to delete SKR certificate: %w", err) } @@ -294,7 +297,8 @@ func (m *SkrWebhookManifestManager) getBaseClientObjects() []client.Object { func getWatchers(ctx context.Context, kcpClient client.Client) ([]v1beta2.Watcher, error) { watcherList := &v1beta2.WatcherList{} - if err := kcpClient.List(ctx, watcherList); err != nil { + err := kcpClient.List(ctx, watcherList) + if err != nil { return nil, fmt.Errorf("error listing watcher CRs: %w", err) } @@ -307,12 +311,13 @@ func AssertDeploymentReady(ctx context.Context, skrClient client.Reader) error { Name: skrWebhookDeploymentName, Namespace: shared.DefaultRemoteNamespace, } - if err := skrClient.Get(ctx, deploymentKey, &deployment); err != nil { + err := skrClient.Get(ctx, deploymentKey, &deployment) + if err != nil { return fmt.Errorf("failed to get skr-webhook deployment: %w", err) } podList := &apicorev1.PodList{} - err := skrClient.List(ctx, podList, client.InNamespace(shared.DefaultRemoteNamespace), + err = skrClient.List(ctx, podList, client.InNamespace(shared.DefaultRemoteNamespace), client.MatchingLabels{"app": skrWebhookDeploymentName}) if err != nil { return fmt.Errorf("failed to list pods: %w", err) diff --git a/tests/e2e/commontestutils/deployment.go b/tests/e2e/commontestutils/deployment.go index 4cf8ef0f5e..1d54a01bc2 100644 --- a/tests/e2e/commontestutils/deployment.go +++ b/tests/e2e/commontestutils/deployment.go @@ -43,7 +43,8 @@ func StopDeployment(ctx context.Context, clnt client.Client, return nil } deploy.Spec.Replicas = int32Ptr(0) - if err := clnt.Update(ctx, deploy); err != nil { + err = clnt.Update(ctx, deploy) + if err != nil { return fmt.Errorf("could not update deployment: %w", err) } return ErrDeploymentUpdating @@ -60,7 +61,8 @@ func EnableDeployment(ctx context.Context, clnt client.Client, return nil } deploy.Spec.Replicas = int32Ptr(1) - if err := clnt.Update(ctx, deploy); err != nil { + err = clnt.Update(ctx, deploy) + if err != nil { return fmt.Errorf("could not update deployment: %w", err) } return ErrDeploymentUpdating @@ -70,7 +72,8 @@ func GetDeployment(ctx context.Context, clnt client.Client, name, namespace string, ) (*apiappsv1.Deployment, error) { deploy := &apiappsv1.Deployment{} - if err := clnt.Get(ctx, client.ObjectKey{Name: name, Namespace: namespace}, deploy); err != nil { + err := clnt.Get(ctx, client.ObjectKey{Name: name, Namespace: namespace}, deploy) + if err != nil { return nil, fmt.Errorf("could not get deployment: %w", err) } return deploy, nil diff --git a/tests/e2e/commontestutils/logs.go b/tests/e2e/commontestutils/logs.go index e7ec2289bc..78d5eeee71 100644 --- a/tests/e2e/commontestutils/logs.go +++ b/tests/e2e/commontestutils/logs.go @@ -51,7 +51,8 @@ func getPodLogs(ctx context.Context, ) (string, error) { pod := apicorev1.Pod{} podList := &apicorev1.PodList{} - if err := k8sClient.List(ctx, podList, &client.ListOptions{Namespace: namespace}); err != nil { + err := k8sClient.List(ctx, podList, &client.ListOptions{Namespace: namespace}) + if err != nil { return "", fmt.Errorf("failed to list pods %w", err) } diff --git a/tests/e2e/commontestutils/statefulset.go b/tests/e2e/commontestutils/statefulset.go index 7ddcf5fe7a..0a3ed1f56a 100644 --- a/tests/e2e/commontestutils/statefulset.go +++ b/tests/e2e/commontestutils/statefulset.go @@ -34,7 +34,8 @@ func GetStatefulSet(ctx context.Context, clnt client.Client, name, namespace string, ) (*apiappsv1.StatefulSet, error) { statefulSet := &apiappsv1.StatefulSet{} - if err := clnt.Get(ctx, client.ObjectKey{Name: name, Namespace: namespace}, statefulSet); err != nil { + err := clnt.Get(ctx, client.ObjectKey{Name: name, Namespace: namespace}, statefulSet) + if err != nil { return nil, fmt.Errorf("could not get statefulset: %w", err) } return statefulSet, nil diff --git a/tests/e2e/commontestutils/watcher.go b/tests/e2e/commontestutils/watcher.go index 9c5041e9cf..0bde470442 100644 --- a/tests/e2e/commontestutils/watcher.go +++ b/tests/e2e/commontestutils/watcher.go @@ -84,10 +84,11 @@ func verifySecretsHaveSameData(secretA *apicorev1.Secret, secretB *apicorev1.Sec func fetchCertificateSecret(ctx context.Context, secretName types.NamespacedName, k8sClient client.Client, ) (*apicorev1.Secret, error) { certificateSecret := &apicorev1.Secret{} - if err := k8sClient.Get(ctx, + err := k8sClient.Get(ctx, secretName, certificateSecret, - ); err != nil { + ) + if err != nil { return nil, fmt.Errorf("failed to fetch kcp certificate secret %w", err) } @@ -113,7 +114,8 @@ func DeleteCertificateSecret(ctx context.Context, secret types.NamespacedName, k func GetCACertificate(ctx context.Context, namespacedCertName types.NamespacedName, k8sClient client.Client, ) (*certmanagerv1.Certificate, error) { caCert := &certmanagerv1.Certificate{} - if err := k8sClient.Get(ctx, namespacedCertName, caCert); err != nil { + err := k8sClient.Get(ctx, namespacedCertName, caCert) + if err != nil { return nil, fmt.Errorf("failed to get secret %w", err) } @@ -138,10 +140,11 @@ func GatewaySecretCreationTimeIsUpdated(ctx context.Context, oldTime time.Time, func GetGatewaySecret(ctx context.Context, clnt client.Client) (*apicorev1.Secret, error) { secret := &apicorev1.Secret{} - if err := clnt.Get(ctx, client.ObjectKey{ + err := clnt.Get(ctx, client.ObjectKey{ Name: shared.GatewaySecretName, Namespace: shared.IstioNamespace, - }, secret); err != nil { + }, secret) + if err != nil { return nil, fmt.Errorf("failed to get gateway secret %s: %w", shared.GatewaySecretName, err) } return secret, nil @@ -149,7 +152,8 @@ func GetGatewaySecret(ctx context.Context, clnt client.Client) (*apicorev1.Secre func GetLastModifiedTimeFromAnnotation(secret *apicorev1.Secret) (time.Time, error) { if gwSecretLastModifiedAtValue, ok := secret.Annotations[shared.LastModifiedAtAnnotation]; ok { - if gwSecretLastModifiedAt, err := time.Parse(time.RFC3339, gwSecretLastModifiedAtValue); err == nil { + gwSecretLastModifiedAt, err := time.Parse(time.RFC3339, gwSecretLastModifiedAtValue) + if err == nil { return gwSecretLastModifiedAt, nil } } @@ -158,16 +162,18 @@ func GetLastModifiedTimeFromAnnotation(secret *apicorev1.Secret) (time.Time, err func RotateCAManuallyWithGCM(ctx context.Context, kcpClient client.Client) error { caCert := &gcertv1alpha1.Certificate{} - if err := kcpClient.Get(ctx, types.NamespacedName{ + err := kcpClient.Get(ctx, types.NamespacedName{ Name: shared.CACertificateName, Namespace: shared.IstioNamespace, - }, caCert); err != nil { + }, caCert) + if err != nil { return fmt.Errorf("failed to get CA certificate %w", err) } caCert.Spec.EnsureRenewedAfter = nil renew := true caCert.Spec.Renew = &renew - if err := kcpClient.Update(ctx, caCert); err != nil { + err = kcpClient.Update(ctx, caCert) + if err != nil { return fmt.Errorf("failed to update CA certificate %w", err) } return nil diff --git a/tests/e2e/deprovision_test.go b/tests/e2e/deprovision_test.go index 0b2b4a4fa2..c0aabbb0bf 100644 --- a/tests/e2e/deprovision_test.go +++ b/tests/e2e/deprovision_test.go @@ -1,6 +1,7 @@ package e2e_test import ( + "context" "os/exec" apimetav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -76,11 +77,11 @@ func RunDeletionTest(deletionPropagation apimetav1.DeletionPropagation) { }) It("When SKR Cluster is removed", func() { - cmd := exec.Command("sh", "../../scripts/tests/remove_skr_host_from_coredns.sh") + cmd := exec.CommandContext(context.Background(), "sh", "../../scripts/tests/remove_skr_host_from_coredns.sh") out, err := cmd.CombinedOutput() Expect(err).NotTo(HaveOccurred()) GinkgoWriter.Printf(string(out)) - cmd = exec.Command("k3d", "cluster", "rm", "skr") + cmd = exec.CommandContext(context.Background(), "k3d", "cluster", "rm", "skr") out, err = cmd.CombinedOutput() Expect(err).NotTo(HaveOccurred()) GinkgoWriter.Printf(string(out)) diff --git a/tests/e2e/utils_test.go b/tests/e2e/utils_test.go index f1b0be5f4a..d23c4108ca 100644 --- a/tests/e2e/utils_test.go +++ b/tests/e2e/utils_test.go @@ -173,7 +173,8 @@ func EnsureNamespaceHasCorrectLabels(ctx context.Context, clnt client.Client, ky labels map[string]string, ) error { var namespace apicorev1.Namespace - if err := clnt.Get(ctx, client.ObjectKey{Name: kymaNamespace}, &namespace); err != nil { + err := clnt.Get(ctx, client.ObjectKey{Name: kymaNamespace}, &namespace) + if err != nil { return fmt.Errorf("failed to get namespace %s: %w", kymaNamespace, err) } @@ -207,8 +208,9 @@ func SetFinalizer(name, namespace, group, version, kind string, finalizers []str Version: version, Kind: kind, }) - if err := clnt.Get(ctx, - client.ObjectKey{Name: name, Namespace: namespace}, resourceCR); err != nil { + err := clnt.Get(ctx, + client.ObjectKey{Name: name, Namespace: namespace}, resourceCR) + if err != nil { return err } diff --git a/tests/e2e/watcher_test.go b/tests/e2e/watcher_test.go index be5f1a00af..dbae1c2890 100644 --- a/tests/e2e/watcher_test.go +++ b/tests/e2e/watcher_test.go @@ -226,9 +226,10 @@ var _ = Describe("Enqueue Event from Watcher", Ordered, func() { func changeRemoteKymaChannel(ctx context.Context, kymaNamespace, channel string, k8sClient client.Client) error { kyma := &v1beta2.Kyma{} - if err := k8sClient.Get(ctx, + err := k8sClient.Get(ctx, client.ObjectKey{Name: defaultRemoteKymaName, Namespace: kymaNamespace}, - kyma); err != nil { + kyma) + if err != nil { return err } @@ -251,10 +252,10 @@ func checkWatcherDeploymentReady(ctx context.Context, deploymentName, deploymentNamespace string, k8sClient client.Client, ) error { watcherDeployment := &apiappsv1.Deployment{} - if err := k8sClient.Get(ctx, + err := k8sClient.Get(ctx, client.ObjectKey{Name: deploymentName, Namespace: deploymentNamespace}, - watcherDeployment, - ); err != nil { + watcherDeployment) + if err != nil { return err } @@ -278,7 +279,8 @@ func updateRemoteKymaStatusSubresource(k8sClient client.Client, kymaNamespace st LastUpdateTime: apimetav1.NewTime(time.Now()), } kyma.ManagedFields = nil - if err := k8sClient.Status().Update(ctx, kyma); err != nil { + err = k8sClient.Status().Update(ctx, kyma) + if err != nil { return fmt.Errorf("kyma status subresource could not be updated: %w", err) } @@ -294,7 +296,8 @@ func updateWatcherSpecField(ctx context.Context, k8sClient client.Client, name s return fmt.Errorf("failed to get Kyma %w", err) } watcherCR.Spec.Field = v1beta2.StatusField - if err = k8sClient.Update(ctx, watcherCR); err != nil { + err = k8sClient.Update(ctx, watcherCR) + if err != nil { return fmt.Errorf("failed to update watcher spec.field: %w", err) } return nil diff --git a/tests/e2e/watcher_zero_downtime_test.go b/tests/e2e/watcher_zero_downtime_test.go index 2add4376c5..9e04d47047 100644 --- a/tests/e2e/watcher_zero_downtime_test.go +++ b/tests/e2e/watcher_zero_downtime_test.go @@ -53,7 +53,8 @@ func triggerWatcherAndCheckDowntime(ctx context.Context, skrClient client.Client } else { kyma.Spec.Channel = v1beta2.DefaultChannel } - if err := skrClient.Update(ctx, kyma); err != nil && !strings.Contains(err.Error(), + err = skrClient.Update(ctx, kyma) + if err != nil && !strings.Contains(err.Error(), "the object has been modified") { return err } diff --git a/tests/integration/controller/kcp/helper_test.go b/tests/integration/controller/kcp/helper_test.go index d398e73791..d6cacf7dd9 100644 --- a/tests/integration/controller/kcp/helper_test.go +++ b/tests/integration/controller/kcp/helper_test.go @@ -14,9 +14,10 @@ import ( "github.com/kyma-project/lifecycle-manager/api/v1beta2" "github.com/kyma-project/lifecycle-manager/pkg/testutils/builder" - . "github.com/kyma-project/lifecycle-manager/pkg/testutils" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + + . "github.com/kyma-project/lifecycle-manager/pkg/testutils" ) var ( @@ -216,10 +217,11 @@ func updateCRDPropertyDescription(clnt client.Client, crdKind shared.Kind, Scope: crd.Spec.Scope, PreserveUnknownFields: crd.Spec.PreserveUnknownFields, } - if err := clnt.Patch(ctx, crd, + err = clnt.Patch(ctx, crd, client.Apply, client.ForceOwnership, - client.FieldOwner(shared.OperatorName)); err != nil { + client.FieldOwner(shared.OperatorName)) + if err != nil { return nil, err } crd, err = fetchCrd(clnt, crdKind) @@ -242,11 +244,12 @@ func getCrdSpec(crd *apiextensionsv1.CustomResourceDefinition) apiextensionsv1.J func fetchCrd(clnt client.Client, crdKind shared.Kind) (*apiextensionsv1.CustomResourceDefinition, error) { crd := &apiextensionsv1.CustomResourceDefinition{} - if err := clnt.Get( + err := clnt.Get( ctx, client.ObjectKey{ Name: fmt.Sprintf("%s.%s", crdKind.Plural(), v1beta2.GroupVersion.Group), }, crd, - ); err != nil { + ) + if err != nil { return nil, err } @@ -262,7 +265,8 @@ func updateKymaChannel(ctx context.Context, ) error { kyma := &v1beta2.Kyma{} // Get the latest version of the Kyma resource - if err := k8sClient.Get(ctx, client.ObjectKey{Name: kymaName, Namespace: kymaNamespace}, kyma); err != nil { + err := k8sClient.Get(ctx, client.ObjectKey{Name: kymaName, Namespace: kymaNamespace}, kyma) + if err != nil { return err } kyma.Spec.Channel = channel @@ -290,7 +294,8 @@ func kymaIsInExpectedStateWithUpdatedChannel(k8sClient client.Client, expectedState shared.State, ) error { kyma := &v1beta2.Kyma{} - if err := k8sClient.Get(ctx, client.ObjectKey{Name: kymaName, Namespace: kymaNamespace}, kyma); err != nil { + err := k8sClient.Get(ctx, client.ObjectKey{Name: kymaName, Namespace: kymaNamespace}, kyma) + if err != nil { return err } @@ -310,7 +315,8 @@ func kymaIsInExpectedStateWithLabelUpdated(k8sClient client.Client, expectedState shared.State, ) error { kyma := &v1beta2.Kyma{} - if err := k8sClient.Get(ctx, client.ObjectKey{Name: kymaName, Namespace: kymaNamespace}, kyma); err != nil { + err := k8sClient.Get(ctx, client.ObjectKey{Name: kymaName, Namespace: kymaNamespace}, kyma) + if err != nil { return err } diff --git a/tests/integration/controller/kcp/namespace_test.go b/tests/integration/controller/kcp/namespace_test.go index 1ad94b9bd4..d10012a92d 100644 --- a/tests/integration/controller/kcp/namespace_test.go +++ b/tests/integration/controller/kcp/namespace_test.go @@ -8,10 +8,9 @@ import ( apicorev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/client" + . "github.com/kyma-project/lifecycle-manager/pkg/testutils" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - - . "github.com/kyma-project/lifecycle-manager/pkg/testutils" ) var errLabelNotExist = errors.New("label does not exist on namespace") @@ -44,7 +43,8 @@ func namespaceHasExpectedLabels(ctx context.Context, clnt client.Client, kymaNamespace string, expectedLabels map[string]string, ) error { var namespace apicorev1.Namespace - if err := clnt.Get(ctx, client.ObjectKey{Name: kymaNamespace}, &namespace); err != nil { + err := clnt.Get(ctx, client.ObjectKey{Name: kymaNamespace}, &namespace) + if err != nil { return fmt.Errorf("failed to get namespace %s: %w", kymaNamespace, err) } diff --git a/tests/integration/controller/kcp/remote_sync_test.go b/tests/integration/controller/kcp/remote_sync_test.go index 73dce1c648..3320bd07fe 100644 --- a/tests/integration/controller/kcp/remote_sync_test.go +++ b/tests/integration/controller/kcp/remote_sync_test.go @@ -474,26 +474,32 @@ var _ = Describe("CRDs sync to SKR and annotations updated in KCP kyma", Ordered return err } - if err = assertCrdGenerationAnnotations(kcpKyma, "kyma-skr-crd-generation", skrKymaCrd); err != nil { + err = assertCrdGenerationAnnotations(kcpKyma, "kyma-skr-crd-generation", skrKymaCrd) + if err != nil { return err } - if err = assertCrdGenerationAnnotations(kcpKyma, "kyma-kcp-crd-generation", kcpKymaCrd); err != nil { + err = assertCrdGenerationAnnotations(kcpKyma, "kyma-kcp-crd-generation", kcpKymaCrd) + if err != nil { return err } - if err = assertCrdGenerationAnnotations(kcpKyma, "moduletemplate-skr-crd-generation", - skrModuleTemplateCrd); err != nil { + err = assertCrdGenerationAnnotations(kcpKyma, "moduletemplate-skr-crd-generation", + skrModuleTemplateCrd) + if err != nil { return err } - if err = assertCrdGenerationAnnotations(kcpKyma, "moduletemplate-kcp-crd-generation", - kcpModuleTemplateCrd); err != nil { + err = assertCrdGenerationAnnotations(kcpKyma, "moduletemplate-kcp-crd-generation", + kcpModuleTemplateCrd) + if err != nil { return err } - if err = assertCrdGenerationAnnotations(kcpKyma, "modulereleasemeta-skr-crd-generation", - skrModuleReleaseMetaCrd); err != nil { + err = assertCrdGenerationAnnotations(kcpKyma, "modulereleasemeta-skr-crd-generation", + skrModuleReleaseMetaCrd) + if err != nil { return err } - if err = assertCrdGenerationAnnotations(kcpKyma, "modulereleasemeta-kcp-crd-generation", - kcpModuleReleaseMetaCrd); err != nil { + err = assertCrdGenerationAnnotations(kcpKyma, "modulereleasemeta-kcp-crd-generation", + kcpModuleReleaseMetaCrd) + if err != nil { return err } diff --git a/tests/integration/controller/kyma/helper_test.go b/tests/integration/controller/kyma/helper_test.go index f2ed775f37..4457a71ec0 100644 --- a/tests/integration/controller/kyma/helper_test.go +++ b/tests/integration/controller/kyma/helper_test.go @@ -10,14 +10,12 @@ import ( "github.com/kyma-project/lifecycle-manager/api/shared" "github.com/kyma-project/lifecycle-manager/api/v1beta2" - crdv1beta2 "github.com/kyma-project/lifecycle-manager/config/samples/component-integration-installed/crd/v1beta2" //nolint:importas // a one-time reference for the package "github.com/kyma-project/lifecycle-manager/pkg/testutils/builder" + . "github.com/kyma-project/lifecycle-manager/pkg/testutils" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - - . "github.com/kyma-project/lifecycle-manager/pkg/testutils" ) const ( @@ -139,8 +137,9 @@ func UpdateAllManifestState(kymaName, kymaNamespace string, state shared.State) return err } for _, module := range kyma.Spec.Modules { - if err := UpdateManifestState(ctx, kcpClient, - kyma.GetName(), kyma.GetNamespace(), module.Name, state); err != nil { + err := UpdateManifestState(ctx, kcpClient, + kyma.GetName(), kyma.GetNamespace(), module.Name, state) + if err != nil { return err } } diff --git a/tests/integration/controller/kyma/kyma_module_channel_test.go b/tests/integration/controller/kyma/kyma_module_channel_test.go index 90444e9e84..e81eb18abe 100644 --- a/tests/integration/controller/kyma/kyma_module_channel_test.go +++ b/tests/integration/controller/kyma/kyma_module_channel_test.go @@ -498,7 +498,8 @@ func createModuleTemplateSetsForKyma(modules []v1beta2.Module, modifiedVersion, template.Spec.Descriptor.Raw = newDescriptor template.Spec.Channel = channel template.Name = fmt.Sprintf("%s-%s", template.Name, channel) - if err := kcpClient.Create(ctx, template); err != nil { + err = kcpClient.Create(ctx, template) + if err != nil { return err } } diff --git a/tests/integration/controller/kyma/kyma_module_enable_test.go b/tests/integration/controller/kyma/kyma_module_enable_test.go index da7f2e9be6..3be2bd9e85 100644 --- a/tests/integration/controller/kyma/kyma_module_enable_test.go +++ b/tests/integration/controller/kyma/kyma_module_enable_test.go @@ -1,13 +1,14 @@ package kyma_test import ( - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" "sigs.k8s.io/controller-runtime/pkg/client" "github.com/kyma-project/lifecycle-manager/api/shared" "github.com/kyma-project/lifecycle-manager/api/v1beta2" + . "github.com/kyma-project/lifecycle-manager/pkg/testutils" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" ) var _ = Describe("Given kyma CR with invalid module enabled", Ordered, func() { @@ -63,7 +64,8 @@ var _ = Describe("Given kyma CR with invalid module enabled", Ordered, func() { }) func givenKymaWithModule(kcpClient client.Client, kcpKyma *v1beta2.Kyma, skrClient client.Client, remoteKyma *v1beta2.Kyma, module v1beta2.Module) error { - if err := EnableModule(ctx, skrClient, remoteKyma.GetName(), remoteKyma.GetNamespace(), module); err != nil { + err := EnableModule(ctx, skrClient, remoteKyma.GetName(), remoteKyma.GetNamespace(), module) + if err != nil { return err } Eventually(SyncKyma, Timeout, Interval). diff --git a/tests/integration/controller/kyma/manifest_test.go b/tests/integration/controller/kyma/manifest_test.go index 3da166424c..983ac39e00 100644 --- a/tests/integration/controller/kyma/manifest_test.go +++ b/tests/integration/controller/kyma/manifest_test.go @@ -6,10 +6,9 @@ import ( "fmt" "reflect" - machineryaml "k8s.io/apimachinery/pkg/util/yaml" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" + machineryaml "k8s.io/apimachinery/pkg/util/yaml" "ocm.software/ocm/api/ocm" "ocm.software/ocm/api/ocm/compdesc" "ocm.software/ocm/api/ocm/cpi" @@ -19,13 +18,14 @@ import ( "ocm.software/ocm/api/utils/runtime" "sigs.k8s.io/controller-runtime/pkg/client" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - "github.com/kyma-project/lifecycle-manager/api/shared" "github.com/kyma-project/lifecycle-manager/api/v1beta2" "github.com/kyma-project/lifecycle-manager/internal/descriptor/types" "github.com/kyma-project/lifecycle-manager/internal/pkg/flags" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + . "github.com/kyma-project/lifecycle-manager/pkg/testutils" ) @@ -378,15 +378,18 @@ func findRawManifestResource(reslist []compdesc.Resource) *compdesc.Resource { func validateManifestSpecInstallSource(manifestImageSpec *v1beta2.ImageSpec, moduleTemplateDescriptor *types.Descriptor, ) error { - if err := validateManifestSpecInstallSourceName(manifestImageSpec, moduleTemplateDescriptor); err != nil { + err := validateManifestSpecInstallSourceName(manifestImageSpec, moduleTemplateDescriptor) + if err != nil { return err } - if err := validateManifestSpecInstallSourceRef(manifestImageSpec, moduleTemplateDescriptor); err != nil { + err = validateManifestSpecInstallSourceRef(manifestImageSpec, moduleTemplateDescriptor) + if err != nil { return err } - if err := validateManifestSpecInstallSourceRepo(manifestImageSpec, moduleTemplateDescriptor); err != nil { + err = validateManifestSpecInstallSourceRepo(manifestImageSpec, moduleTemplateDescriptor) + if err != nil { return err } diff --git a/tests/integration/controller/mandatorymodule/deletion/controller_test.go b/tests/integration/controller/mandatorymodule/deletion/controller_test.go index d353b8dd2d..67a76f4013 100644 --- a/tests/integration/controller/mandatorymodule/deletion/controller_test.go +++ b/tests/integration/controller/mandatorymodule/deletion/controller_test.go @@ -15,10 +15,9 @@ import ( "github.com/kyma-project/lifecycle-manager/api/v1beta2" "github.com/kyma-project/lifecycle-manager/pkg/testutils/builder" + . "github.com/kyma-project/lifecycle-manager/pkg/testutils" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - - . "github.com/kyma-project/lifecycle-manager/pkg/testutils" ) const ( @@ -130,13 +129,15 @@ func registerControlPlaneLifecycleForKyma(kyma *v1beta2.Kyma) { func deleteMandatoryModuleTemplates(ctx context.Context, clnt client.Client) error { templates := v1beta2.ModuleTemplateList{} - if err := clnt.List(ctx, &templates); err != nil { + err := clnt.List(ctx, &templates) + if err != nil { return fmt.Errorf("failed to list ModuleTemplates: %w", err) } for _, template := range templates.Items { if template.Spec.Mandatory { - if err := clnt.Delete(ctx, &template); err != nil { + err := clnt.Delete(ctx, &template) + if err != nil { return fmt.Errorf("failed to delete ModuleTemplate: %w", err) } } @@ -147,7 +148,8 @@ func deleteMandatoryModuleTemplates(ctx context.Context, clnt client.Client) err func mandatoryModuleTemplateFinalizerExists(ctx context.Context, clnt client.Client, obj client.ObjectKey) error { template := v1beta2.ModuleTemplate{} - if err := clnt.Get(ctx, obj, &template); err != nil { + err := clnt.Get(ctx, obj, &template) + if err != nil { return fmt.Errorf("failed to get ModuleTemplate: %w", err) } diff --git a/tests/integration/controller/mandatorymodule/installation/controller_test.go b/tests/integration/controller/mandatorymodule/installation/controller_test.go index 64dd63e0b7..1bee784226 100644 --- a/tests/integration/controller/mandatorymodule/installation/controller_test.go +++ b/tests/integration/controller/mandatorymodule/installation/controller_test.go @@ -12,10 +12,9 @@ import ( "github.com/kyma-project/lifecycle-manager/api/v1beta2" "github.com/kyma-project/lifecycle-manager/pkg/testutils/builder" + . "github.com/kyma-project/lifecycle-manager/pkg/testutils" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - - . "github.com/kyma-project/lifecycle-manager/pkg/testutils" ) var ( @@ -118,9 +117,10 @@ func registerControlPlaneLifecycleForKyma(kyma *v1beta2.Kyma) { func checkMandatoryManifestForKyma(ctx context.Context, kyma *v1beta2.Kyma, fqdn string) error { manifestList := v1beta2.ManifestList{} - if err := reconciler.List(ctx, &manifestList, &client.ListOptions{ + err := reconciler.List(ctx, &manifestList, &client.ListOptions{ LabelSelector: k8slabels.SelectorFromSet(k8slabels.Set{shared.KymaName: kyma.Name}), - }); err != nil { + }) + if err != nil { return err } for _, manifest := range manifestList.Items { diff --git a/tests/integration/controller/manifest/custom_resource_check/manifest_test.go b/tests/integration/controller/manifest/custom_resource_check/manifest_test.go index 4a37019efe..a6c7a602ce 100644 --- a/tests/integration/controller/manifest/custom_resource_check/manifest_test.go +++ b/tests/integration/controller/manifest/custom_resource_check/manifest_test.go @@ -173,10 +173,12 @@ func setCRStatus(ctx context.Context, clnt client.Client, moduleCR *unstructured if err != nil { return err } - if err = unstructured.SetNestedMap(moduleCR.Object, map[string]any{}, "status"); err != nil { + err = unstructured.SetNestedMap(moduleCR.Object, map[string]any{}, "status") + if err != nil { return err } - if err = unstructured.SetNestedField(moduleCR.Object, string(statusValue), "status", "state"); err != nil { + err = unstructured.SetNestedField(moduleCR.Object, string(statusValue), "status", "state") + if err != nil { return err } return clnt.Status().Update(ctx, moduleCR) diff --git a/tests/integration/controller/purge/controller_test.go b/tests/integration/controller/purge/controller_test.go index bab05f6972..3cfd313410 100644 --- a/tests/integration/controller/purge/controller_test.go +++ b/tests/integration/controller/purge/controller_test.go @@ -13,9 +13,10 @@ import ( "github.com/kyma-project/lifecycle-manager/api/v1beta2" "github.com/kyma-project/lifecycle-manager/tests/integration" - . "github.com/kyma-project/lifecycle-manager/pkg/testutils" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + + . "github.com/kyma-project/lifecycle-manager/pkg/testutils" ) const ( @@ -271,18 +272,22 @@ func createDestinationRuleFor(kyma *v1beta2.Kyma, nameSuffix string) *unstructur res.SetNamespace(kyma.Namespace) res.SetFinalizers([]string{testFinalizer}) - if err := unstructured.SetNestedMap(res.Object, map[string]interface{}{}, "spec"); err != nil { + err := unstructured.SetNestedMap(res.Object, map[string]interface{}{}, "spec") + if err != nil { return nil } - if err := unstructured.SetNestedMap(res.Object, map[string]interface{}{}, "spec", "trafficPolicy"); err != nil { + err = unstructured.SetNestedMap(res.Object, map[string]interface{}{}, "spec", "trafficPolicy") + if err != nil { return nil } - if err := unstructured.SetNestedMap(res.Object, - map[string]interface{}{}, "spec", "trafficPolicy", "loadBalancer"); err != nil { + err = unstructured.SetNestedMap(res.Object, + map[string]interface{}{}, "spec", "trafficPolicy", "loadBalancer") + if err != nil { return nil } - if err := unstructured.SetNestedField(res.Object, - "LEAST_REQUEST", "spec", "trafficPolicy", "loadBalancer", "simple"); err != nil { + err = unstructured.SetNestedField(res.Object, + "LEAST_REQUEST", "spec", "trafficPolicy", "loadBalancer", "simple") + if err != nil { return nil } return res @@ -298,13 +303,16 @@ func createIssuerFor(kyma *v1beta2.Kyma, nameSuffix string) *unstructured.Unstru res.SetNamespace(kyma.Namespace) res.SetFinalizers([]string{testFinalizer}) - if err := unstructured.SetNestedMap(res.Object, map[string]interface{}{}, "spec"); err != nil { + err := unstructured.SetNestedMap(res.Object, map[string]interface{}{}, "spec") + if err != nil { return nil } - if err := unstructured.SetNestedMap(res.Object, map[string]interface{}{}, "spec", "ca"); err != nil { + err = unstructured.SetNestedMap(res.Object, map[string]interface{}{}, "spec", "ca") + if err != nil { return nil } - if err := unstructured.SetNestedField(res.Object, "foobar", "spec", "ca", "secretName"); err != nil { + err = unstructured.SetNestedField(res.Object, "foobar", "spec", "ca", "secretName") + if err != nil { return nil } diff --git a/tests/integration/controller/withwatcher/watcher_controller_test.go b/tests/integration/controller/withwatcher/watcher_controller_test.go index fab7b0eebf..1172141bd5 100644 --- a/tests/integration/controller/withwatcher/watcher_controller_test.go +++ b/tests/integration/controller/withwatcher/watcher_controller_test.go @@ -112,7 +112,8 @@ func crSpecUpdates(_ *istio.Client) error { } watcherCR.Spec.ServiceInfo.Port = 9090 watcherCR.Spec.Field = v1beta2.StatusField - if err := kcpClient.Update(ctx, watcherCR); err != nil { + err = kcpClient.Update(ctx, watcherCR) + if err != nil { return err } } @@ -143,7 +144,8 @@ func expectVirtualServiceConfiguredCorrectly(customIstioClient *istio.Client, na if err != nil { return err } - if err := isListenerHTTPRouteConfigured(ctx, customIstioClient, namespace, watcherCR); err != nil { + err = isListenerHTTPRouteConfigured(ctx, customIstioClient, namespace, watcherCR) + if err != nil { return err } gateways, err := customIstioClient.ListGatewaysByLabelSelector(ctx, &watcherCR.Spec.Gateway.LabelSelector, @@ -152,13 +154,15 @@ func expectVirtualServiceConfiguredCorrectly(customIstioClient *istio.Client, na return err } Expect(gateways.Items).To(HaveLen(1)) - if err := isVirtualServiceHostsConfigured(ctx, watcherCR.Name, namespace, customIstioClient, - gateways.Items[0]); err != nil { + err = isVirtualServiceHostsConfigured(ctx, watcherCR.Name, namespace, customIstioClient, + gateways.Items[0]) + if err != nil { return err } - if err := verifyWatcherConfiguredAsVirtualServiceOwner(ctx, watcherCR.Name, namespace, watcherCR, - customIstioClient); err != nil { + err = verifyWatcherConfiguredAsVirtualServiceOwner(ctx, watcherCR.Name, namespace, watcherCR, + customIstioClient) + if err != nil { return err } } diff --git a/unit-test-coverage.yaml b/unit-test-coverage.yaml index d28cef3370..0cbb4879d4 100644 --- a/unit-test-coverage.yaml +++ b/unit-test-coverage.yaml @@ -40,7 +40,7 @@ packages: internal/service/watcher/resources: 82 internal/util/collections: 87 - pkg/module/sync: 10 + pkg/module/sync: 9 pkg/templatelookup: 87 pkg/templatelookup/moduletemplateinfolookup: 98 pkg/watcher: 10 diff --git a/versions.yaml b/versions.yaml index f010c96756..0e9bced2f6 100644 --- a/versions.yaml +++ b/versions.yaml @@ -4,7 +4,7 @@ gardenerCertManager: "0.17.5" controllerTools: "0.18.0" docker: "27.5.1" go: "1.24.6" -golangciLint: "2.1.6" +golangciLint: "2.3.1" istio: "1.24.1" k3d: "5.8.3" k8s: "1.32.2" # kubernetes version used in e2e tests