From 43e387bee9b8b7c90ad02e3ec50d9d6971ded3f5 Mon Sep 17 00:00:00 2001 From: Marc Vornetran Date: Thu, 6 Aug 2026 07:54:16 +0200 Subject: [PATCH 1/4] Fix `MaintenanceTimeWindow` timezone pattern to accept all valid UTC offsets (#15388) * Extend MaintenanceTimeWindow validation pattern into negative timezone ranges * Run `make generate` * Restrict pattern to valid UTC timezones (PR review) * Update examples to include negative timezones (PR review) * Run `make generate` --- charts/gardener/operator/files/crd-gardens.yaml | 8 ++++---- docs/api-reference/core.md | 4 ++-- .../operator/10-crd-operator.gardener.cloud_gardens.yaml | 8 ++++---- pkg/apis/core/types_shoot.go | 4 ++-- pkg/apis/core/v1beta1/generated.proto | 8 ++++---- pkg/apis/core/v1beta1/types_shoot.go | 8 ++++---- pkg/apiserver/openapi/openapi_generated.go | 4 ++-- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/charts/gardener/operator/files/crd-gardens.yaml b/charts/gardener/operator/files/crd-gardens.yaml index 1333681295c..c4f4fc15bed 100644 --- a/charts/gardener/operator/files/crd-gardens.yaml +++ b/charts/gardener/operator/files/crd-gardens.yaml @@ -2025,15 +2025,15 @@ spec: properties: begin: description: |- - Begin is the beginning of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + Begin is the beginning of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". If not present, a random value will be computed. - pattern: ([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00 + pattern: ([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]([+](0[0-9]|1[0-4])|[-](0[0-9]|1[0-2]))00 type: string end: description: |- - End is the end of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + End is the end of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". If not present, the value will be computed based on the "Begin" value. - pattern: ([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00 + pattern: ([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]([+](0[0-9]|1[0-4])|[-](0[0-9]|1[0-2]))00 type: string required: - begin diff --git a/docs/api-reference/core.md b/docs/api-reference/core.md index 7d669b84624..a81ba38c0c7 100644 --- a/docs/api-reference/core.md +++ b/docs/api-reference/core.md @@ -8208,7 +8208,7 @@ string -

Begin is the beginning of the time window in the format HHMMSS+ZONE, e.g. "220000+0100".
If not present, a random value will be computed.

+

Begin is the beginning of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500".
If not present, a random value will be computed.

@@ -8219,7 +8219,7 @@ string -

End is the end of the time window in the format HHMMSS+ZONE, e.g. "220000+0100".
If not present, the value will be computed based on the "Begin" value.

+

End is the end of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500".
If not present, the value will be computed based on the "Begin" value.

diff --git a/example/operator/10-crd-operator.gardener.cloud_gardens.yaml b/example/operator/10-crd-operator.gardener.cloud_gardens.yaml index 1333681295c..c4f4fc15bed 100644 --- a/example/operator/10-crd-operator.gardener.cloud_gardens.yaml +++ b/example/operator/10-crd-operator.gardener.cloud_gardens.yaml @@ -2025,15 +2025,15 @@ spec: properties: begin: description: |- - Begin is the beginning of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + Begin is the beginning of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". If not present, a random value will be computed. - pattern: ([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00 + pattern: ([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]([+](0[0-9]|1[0-4])|[-](0[0-9]|1[0-2]))00 type: string end: description: |- - End is the end of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + End is the end of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". If not present, the value will be computed based on the "Begin" value. - pattern: ([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00 + pattern: ([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]([+](0[0-9]|1[0-4])|[-](0[0-9]|1[0-2]))00 type: string required: - begin diff --git a/pkg/apis/core/types_shoot.go b/pkg/apis/core/types_shoot.go index 6beaeb17b75..8b0b72c0d45 100644 --- a/pkg/apis/core/types_shoot.go +++ b/pkg/apis/core/types_shoot.go @@ -1307,10 +1307,10 @@ type MaintenanceRotationConfig struct { // MaintenanceTimeWindow contains information about the time window for maintenance operations. type MaintenanceTimeWindow struct { - // Begin is the beginning of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + // Begin is the beginning of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". // If not present, a random value will be computed. Begin string - // End is the end of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + // End is the end of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". // If not present, the value will be computed based on the "Begin" value. End string } diff --git a/pkg/apis/core/v1beta1/generated.proto b/pkg/apis/core/v1beta1/generated.proto index 3a79ff038e3..4592842e93d 100644 --- a/pkg/apis/core/v1beta1/generated.proto +++ b/pkg/apis/core/v1beta1/generated.proto @@ -2292,16 +2292,16 @@ message MaintenanceRotationConfig { // MaintenanceTimeWindow contains information about the time window for maintenance operations. message MaintenanceTimeWindow { - // Begin is the beginning of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + // Begin is the beginning of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". // If not present, a random value will be computed. // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00` + // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]([+](0[0-9]|1[0-4])|[-](0[0-9]|1[0-2]))00` optional string begin = 1; - // End is the end of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + // End is the end of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". // If not present, the value will be computed based on the "Begin" value. // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00` + // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]([+](0[0-9]|1[0-4])|[-](0[0-9]|1[0-2]))00` optional string end = 2; } diff --git a/pkg/apis/core/v1beta1/types_shoot.go b/pkg/apis/core/v1beta1/types_shoot.go index 7529460cb40..1a98eb1defc 100644 --- a/pkg/apis/core/v1beta1/types_shoot.go +++ b/pkg/apis/core/v1beta1/types_shoot.go @@ -1704,15 +1704,15 @@ type MaintenanceRotationConfig struct { // MaintenanceTimeWindow contains information about the time window for maintenance operations. type MaintenanceTimeWindow struct { - // Begin is the beginning of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + // Begin is the beginning of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". // If not present, a random value will be computed. // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00` + // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]([+](0[0-9]|1[0-4])|[-](0[0-9]|1[0-2]))00` Begin string `json:"begin" protobuf:"bytes,1,opt,name=begin"` - // End is the end of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". + // End is the end of the time window in the format HHMMSS±ZONE, e.g. "220000+0100" or "220000-0500". // If not present, the value will be computed based on the "Begin" value. // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00` + // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]([+](0[0-9]|1[0-4])|[-](0[0-9]|1[0-2]))00` End string `json:"end" protobuf:"bytes,2,opt,name=end"` } diff --git a/pkg/apiserver/openapi/openapi_generated.go b/pkg/apiserver/openapi/openapi_generated.go index f6a03180510..c0eb0a9577c 100644 --- a/pkg/apiserver/openapi/openapi_generated.go +++ b/pkg/apiserver/openapi/openapi_generated.go @@ -6674,7 +6674,7 @@ func schema_pkg_apis_core_v1beta1_MaintenanceTimeWindow(ref common.ReferenceCall Properties: map[string]spec.Schema{ "begin": { SchemaProps: spec.SchemaProps{ - Description: "Begin is the beginning of the time window in the format HHMMSS+ZONE, e.g. \"220000+0100\". If not present, a random value will be computed.", + Description: "Begin is the beginning of the time window in the format HHMMSS±ZONE, e.g. \"220000+0100\" or \"220000-0500\". If not present, a random value will be computed.", Default: "", Type: []string{"string"}, Format: "", @@ -6682,7 +6682,7 @@ func schema_pkg_apis_core_v1beta1_MaintenanceTimeWindow(ref common.ReferenceCall }, "end": { SchemaProps: spec.SchemaProps{ - Description: "End is the end of the time window in the format HHMMSS+ZONE, e.g. \"220000+0100\". If not present, the value will be computed based on the \"Begin\" value.", + Description: "End is the end of the time window in the format HHMMSS±ZONE, e.g. \"220000+0100\" or \"220000-0500\". If not present, the value will be computed based on the \"Begin\" value.", Default: "", Type: []string{"string"}, Format: "", From 33b3af3e786b6c57294c6c99a062c0fa6cef36a5 Mon Sep 17 00:00:00 2001 From: Shafeeque E S Date: Thu, 6 Aug 2026 11:24:25 +0530 Subject: [PATCH 2/4] gardenlet: wait for `vpn-shoot` to be ready before checking tunnel connection (#15442) * Wait for vpn-shoot to be ready before proceeding * Wrap the Wait in a closure to prevent nil pointer panic for workerless shoots * Use managedresources.WaitUntilHealthyAndNotProgressing function for healthcheck * Fix unit test --- pkg/component/networking/vpn/shoot/shoot.go | 2 +- pkg/component/networking/vpn/shoot/shoot_test.go | 4 ++++ .../controller/shoot/shoot/reconciler_reconcile.go | 10 +++++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pkg/component/networking/vpn/shoot/shoot.go b/pkg/component/networking/vpn/shoot/shoot.go index eb5a93be8eb..524310a1d5e 100644 --- a/pkg/component/networking/vpn/shoot/shoot.go +++ b/pkg/component/networking/vpn/shoot/shoot.go @@ -354,7 +354,7 @@ func (v *vpnShoot) Wait(ctx context.Context) error { timeoutCtx, cancel := context.WithTimeout(ctx, TimeoutWaitForManagedResource) defer cancel() - return managedresources.WaitUntilHealthy(timeoutCtx, v.client, v.namespace, managedResourceName) + return managedresources.WaitUntilHealthyAndNotProgressing(timeoutCtx, v.client, v.namespace, managedResourceName) } func (v *vpnShoot) WaitCleanup(ctx context.Context) error { diff --git a/pkg/component/networking/vpn/shoot/shoot_test.go b/pkg/component/networking/vpn/shoot/shoot_test.go index ff6d0166cc6..72cadd75514 100644 --- a/pkg/component/networking/vpn/shoot/shoot_test.go +++ b/pkg/component/networking/vpn/shoot/shoot_test.go @@ -1165,6 +1165,10 @@ var _ = Describe("VPNShoot", func() { Type: resourcesv1alpha1.ResourcesHealthy, Status: gardencorev1beta1.ConditionTrue, }, + { + Type: resourcesv1alpha1.ResourcesProgressing, + Status: gardencorev1beta1.ConditionFalse, + }, }, }, })).To(Succeed()) diff --git a/pkg/gardenlet/controller/shoot/shoot/reconciler_reconcile.go b/pkg/gardenlet/controller/shoot/shoot/reconciler_reconcile.go index aefbecad207..a9a82684f4f 100644 --- a/pkg/gardenlet/controller/shoot/shoot/reconciler_reconcile.go +++ b/pkg/gardenlet/controller/shoot/shoot/reconciler_reconcile.go @@ -761,6 +761,14 @@ func (r *Reconciler) setupReconcileHostedShootFlow(b *botanistpkg.Botanist, flow Dependencies: flow.NewTaskIDs(waitUntilControlPlaneReady, waitUntilExtensionResourcesAfterKAPIReady, // Extensions might deploy webhooks for system components waitUntilGardenerResourceManagerReady, deployGardenerResourceManager, deployKubeScheduler, deployVPNSeedServer, waitUntilShootNamespacesReady), }) + waitUntilVPNShootReady = g.Add(flow.Task{ + Name: "Waiting until vpn-shoot system component is ready", + Fn: flow.TaskFn(func(ctx context.Context) error { + return b.Shoot.Components.SystemComponents.VPNShoot.Wait(ctx) + }), + SkipIf: b.Shoot.IsWorkerless || b.Shoot.HibernationEnabled || flowCtx.skipReadiness, + Dependencies: flow.NewTaskIDs(deployVPNShoot), + }) deployNodeProblemDetector = g.Add(flow.Task{ Name: "Deploying node-problem-detector system component", Fn: flow.TaskFn(func(ctx context.Context) error { @@ -845,7 +853,7 @@ func (r *Reconciler) setupReconcileHostedShootFlow(b *botanistpkg.Botanist, flow deployNodeExporter, deployNodeLocalDNS, deployMetricsServer, - deployVPNShoot, + waitUntilVPNShootReady, deployNodeProblemDetector, deployKubeProxy, deployBlackboxExporter, From af06df8eaa944e26f0d97bb9ffeb6286637e373b Mon Sep 17 00:00:00 2001 From: Rafael Franzke Date: Thu, 6 Aug 2026 11:18:17 +0200 Subject: [PATCH 3/4] Wait for `kube-root-ca.crt` `ConfigMap`s to contain the new CA bundle before rolling workers (#15430) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Wait for `kube-root-ca.crt` `ConfigMap`s to be updated before rolling workers during CA rotation During the `RotationPreparing` phase of CA rotation, `kube-controller-manager`'s `RootCACertificatePublisherController` must propagate the new CA bundle to the `kube-root-ca.crt` `ConfigMap` in every namespace before worker pools roll. Nodes that join before the `ConfigMap`s are updated only receive the old CA, which becomes invalid after rotation completes and breaks service account token validation. Note that `RootCACertificatePublisherController` runs with only a single worker (https://github.com/kubernetes/kubernetes/blob/0e5f0f9374ca822d0a5619088d4a00f335b8bafd/cmd/kube-controller-manager/app/certificates.go#L275-L287), so propagation can be slow in clusters with many namespaces or `ConfigMap` admission webhooks — hence the 5-minute retry window. Assisted-by: Claude Signed-off-by: rfranzke * Address PR review feedback Signed-off-by: rfranzke --------- Signed-off-by: rfranzke --- .../shoot/shoot/reconciler_reconcile.go | 27 ++-- .../botanist/kubecontrollermanager.go | 70 +++++++++++ .../botanist/kubecontrollermanager_test.go | 118 ++++++++++++++++++ .../gardener/secretsrotation/constants.go | 4 + 4 files changed, 208 insertions(+), 11 deletions(-) diff --git a/pkg/gardenlet/controller/shoot/shoot/reconciler_reconcile.go b/pkg/gardenlet/controller/shoot/shoot/reconciler_reconcile.go index a9a82684f4f..5f8807f1e1d 100644 --- a/pkg/gardenlet/controller/shoot/shoot/reconciler_reconcile.go +++ b/pkg/gardenlet/controller/shoot/shoot/reconciler_reconcile.go @@ -218,6 +218,10 @@ func (r *Reconciler) setupReconcileHostedShootFlow(b *botanistpkg.Botanist, flow var ( deployExtensionAfterKAPIMsg = "Deploying extension resources after kube-apiserver" waitExtensionAfterKAPIMsg = "Waiting until extension resources handled after kube-apiserver are ready" + + rotationPreparingPhases = sets.New(gardencorev1beta1.RotationPreparing, gardencorev1beta1.RotationPreparingWithoutWorkersRollout) + caRotationPreparing = rotationPreparingPhases.Has(v1beta1helper.GetShootCARotationPhase(b.Shoot.GetInfo().Status.Credentials)) + saKeyRotationPreparing = rotationPreparingPhases.Has(v1beta1helper.GetShootServiceAccountKeyRotationPhase(b.Shoot.GetInfo().Status.Credentials)) ) if b.Shoot.HibernationEnabled { deployExtensionAfterKAPIMsg = "Hibernating extension resources before kube-apiserver hibernation" @@ -606,13 +610,11 @@ func (r *Reconciler) setupReconcileHostedShootFlow(b *botanistpkg.Botanist, flow Fn: flow.TaskFn(b.DeployKubeControllerManager).RetryUntilTimeout(defaultInterval, defaultTimeout), Dependencies: flow.NewTaskIDs(initializeSecretsManagement, deployCloudProviderSecret, waitUntilGardenerResourceManagerReady), }) + waitUntilKubeControllerManagerReady = g.Add(flow.Task{ - Name: "Waiting until kube-controller-manager reports readiness", - Fn: b.Shoot.Components.ControlPlane.KubeControllerManager.Wait, - SkipIf: flowCtx.skipReadiness || !sets.New( - gardencorev1beta1.RotationPreparing, - gardencorev1beta1.RotationPreparingWithoutWorkersRollout, - ).Has(v1beta1helper.GetShootServiceAccountKeyRotationPhase(b.Shoot.GetInfo().Status.Credentials)), + Name: "Waiting until kube-controller-manager reports readiness", + Fn: b.Shoot.Components.ControlPlane.KubeControllerManager.Wait, + SkipIf: flowCtx.skipReadiness || (!saKeyRotationPreparing && !caRotationPreparing), Dependencies: flow.NewTaskIDs(deployKubeControllerManager), }) createNewServiceAccountSecrets = g.Add(flow.Task{ @@ -620,10 +622,7 @@ func (r *Reconciler) setupReconcileHostedShootFlow(b *botanistpkg.Botanist, flow Fn: flow.TaskFn(func(ctx context.Context) error { return secretsrotation.CreateNewServiceAccountSecrets(ctx, b.Logger, b.ShootClientSet.Client(), b.SecretsManager) }).RetryUntilTimeout(30*time.Second, 10*time.Minute), - SkipIf: !sets.New( - gardencorev1beta1.RotationPreparing, - gardencorev1beta1.RotationPreparingWithoutWorkersRollout, - ).Has(v1beta1helper.GetShootServiceAccountKeyRotationPhase(b.Shoot.GetInfo().Status.Credentials)), + SkipIf: !saKeyRotationPreparing, Dependencies: flow.NewTaskIDs(initializeShootClients, waitUntilKubeControllerManagerReady), }) _ = g.Add(flow.Task{ @@ -634,6 +633,12 @@ func (r *Reconciler) setupReconcileHostedShootFlow(b *botanistpkg.Botanist, flow SkipIf: v1beta1helper.GetShootServiceAccountKeyRotationPhase(b.Shoot.GetInfo().Status.Credentials) != gardencorev1beta1.RotationCompleting, Dependencies: flow.NewTaskIDs(initializeShootClients, waitUntilKubeControllerManagerReady), }) + waitUntilKubeRootCAConfigMapsUpdated = g.Add(flow.Task{ + Name: "Waiting until kube-root-ca.crt ConfigMaps have been updated with new CA bundle", + Fn: flow.TaskFn(b.WaitUntilKubeRootCAConfigMapsUpdated).RetryUntilTimeout(30*time.Second, 5*time.Minute), + SkipIf: b.Shoot.IsWorkerless || b.Shoot.HibernationEnabled || flowCtx.skipReadiness || !caRotationPreparing, + Dependencies: flow.NewTaskIDs(initializeShootClients, waitUntilKubeControllerManagerReady), + }) deleteBastions = g.Add(flow.Task{ Name: "Deleting Bastions", Fn: b.DeleteBastions, @@ -877,7 +882,7 @@ func (r *Reconciler) setupReconcileHostedShootFlow(b *botanistpkg.Botanist, flow Name: "Configuring shoot worker pools", Fn: flow.TaskFn(b.DeployWorker).RetryUntilTimeout(defaultInterval, defaultTimeout), SkipIf: b.Shoot.IsWorkerless, - Dependencies: flow.NewTaskIDs(deployMachineControllerManager, deployShootSystemResources), + Dependencies: flow.NewTaskIDs(deployMachineControllerManager, deployShootSystemResources, waitUntilKubeRootCAConfigMapsUpdated), }) waitUntilWorkerStatusUpdate = g.Add(flow.Task{ Name: "Waiting until worker resource status is updated with latest machine deployments", diff --git a/pkg/gardenlet/operation/botanist/kubecontrollermanager.go b/pkg/gardenlet/operation/botanist/kubecontrollermanager.go index 93c96cb7997..fa54f3e2e17 100644 --- a/pkg/gardenlet/operation/botanist/kubecontrollermanager.go +++ b/pkg/gardenlet/operation/botanist/kubecontrollermanager.go @@ -5,17 +5,30 @@ package botanist import ( + "bytes" "context" + "fmt" + "sync/atomic" + "golang.org/x/time/rate" + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/selection" "sigs.k8s.io/controller-runtime/pkg/client" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" kubecontrollermanager "github.com/gardener/gardener/pkg/component/kubernetes/controllermanager" "github.com/gardener/gardener/pkg/component/shared" + "github.com/gardener/gardener/pkg/utils" + "github.com/gardener/gardener/pkg/utils/flow" + "github.com/gardener/gardener/pkg/utils/gardener/secretsrotation" kubernetesutils "github.com/gardener/gardener/pkg/utils/kubernetes" + secretsutils "github.com/gardener/gardener/pkg/utils/secrets" ) +const kubeRootCAConfigMapUpdateQPS = 100 + // DefaultKubeControllerManager returns a deployer for the kube-controller-manager. func (b *Botanist) DefaultKubeControllerManager() (kubecontrollermanager.Interface, error) { return shared.NewKubeControllerManager( @@ -66,3 +79,60 @@ func (b *Botanist) WaitForKubeControllerManagerToBeActive(ctx context.Context) e func (b *Botanist) ScaleKubeControllerManagerToOne(ctx context.Context) error { return kubernetesutils.ScaleDeployment(ctx, b.SeedClientSet.Client(), client.ObjectKey{Namespace: b.Shoot.ControlPlaneNamespace, Name: v1beta1constants.DeploymentNameKubeControllerManager}, 1) } + +// WaitUntilKubeRootCAConfigMapsUpdated verifies that all kube-root-ca.crt ConfigMaps in all namespaces of the shoot +// cluster contain the CA bundle published by kube-controller-manager. It labels each confirmed ConfigMap with +// credentials.gardener.cloud/ca-bundle-name so that retries skip already-verified ConfigMaps. This should only be +// called during the 'Preparing' phase of the CA rotation operation, after kube-controller-manager is ready. +func (b *Botanist) WaitUntilKubeRootCAConfigMapsUpdated(ctx context.Context) error { + caBundleSecret, found := b.SecretsManager.Get(v1beta1constants.SecretNameCACluster) + if !found { + return fmt.Errorf("secret %q not found", v1beta1constants.SecretNameCACluster) + } + + configMapList := &corev1.ConfigMapList{} + if err := b.ShootClientSet.Client().List(ctx, configMapList, + client.MatchingFields{"metadata.name": "kube-root-ca.crt"}, + client.MatchingLabelsSelector{Selector: labels.NewSelector().Add(utils.MustNewRequirement(secretsrotation.LabelKeyCABundleName, selection.NotEquals, caBundleSecret.Name))}, + ); err != nil { + return fmt.Errorf("failed listing kube-root-ca.crt ConfigMaps with outdated CA bundle: %w", err) + } + + if len(configMapList.Items) == 0 { + return nil + } + + b.Logger.Info("Found kube-root-ca.crt ConfigMaps not yet confirmed to contain the new CA bundle", "number", len(configMapList.Items)) + + var ( + limiter = rate.NewLimiter(rate.Limit(kubeRootCAConfigMapUpdateQPS), kubeRootCAConfigMapUpdateQPS) + notReady atomic.Int32 + taskFns []flow.TaskFn + ) + + for _, configMap := range configMapList.Items { + taskFns = append(taskFns, func(ctx context.Context) error { + if caBundleInConfigMap, ok := configMap.Data[secretsutils.DataKeyCertificateCA]; !ok || !bytes.Equal([]byte(caBundleInConfigMap), caBundleSecret.Data[secretsutils.DataKeyCertificateBundle]) { + notReady.Add(1) + return nil + } + + if err := limiter.Wait(ctx); err != nil { + return fmt.Errorf("error while waiting for limiter: %w", err) + } + + patch := client.MergeFrom(configMap.DeepCopy()) + metav1.SetMetaDataLabel(&configMap.ObjectMeta, secretsrotation.LabelKeyCABundleName, caBundleSecret.Name) + return b.ShootClientSet.Client().Patch(ctx, &configMap, patch) + }) + } + + if err := flow.Parallel(taskFns...)(ctx); err != nil { + return fmt.Errorf("error while ensuring kube-root-ca.crt ConfigMaps are updated: %w", err) + } + + if n := notReady.Load(); n > 0 { + return fmt.Errorf("%d kube-root-ca.crt ConfigMap(s) do not yet contain the expected CA bundle", n) + } + return nil +} diff --git a/pkg/gardenlet/operation/botanist/kubecontrollermanager_test.go b/pkg/gardenlet/operation/botanist/kubecontrollermanager_test.go index 160f7878eed..ecc3d1c5190 100644 --- a/pkg/gardenlet/operation/botanist/kubecontrollermanager_test.go +++ b/pkg/gardenlet/operation/botanist/kubecontrollermanager_test.go @@ -16,12 +16,14 @@ import ( . "github.com/onsi/gomega" "go.uber.org/mock/gomock" appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/client/interceptor" gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" "github.com/gardener/gardener/pkg/client/kubernetes" fakekubernetes "github.com/gardener/gardener/pkg/client/kubernetes/fake" kubeapiserver "github.com/gardener/gardener/pkg/component/kubernetes/apiserver" @@ -31,6 +33,10 @@ import ( . "github.com/gardener/gardener/pkg/gardenlet/operation/botanist" seedpkg "github.com/gardener/gardener/pkg/gardenlet/operation/seed" shootpkg "github.com/gardener/gardener/pkg/gardenlet/operation/shoot" + secretsrotation "github.com/gardener/gardener/pkg/utils/gardener/secretsrotation" + secretsutils "github.com/gardener/gardener/pkg/utils/secrets" + secretsmanager "github.com/gardener/gardener/pkg/utils/secrets/manager" + fakesecretsmanager "github.com/gardener/gardener/pkg/utils/secrets/manager/fake" ) var _ = Describe("KubeControllerManager", func() { @@ -318,4 +324,116 @@ var _ = Describe("KubeControllerManager", func() { Expect(botanist.ScaleKubeControllerManagerToOne(ctx)).To(MatchError(fakeErr)) }) }) + + Describe("#WaitUntilKubeRootCAConfigMapsUpdated", func() { + var ( + runtimeClient client.Client + shootClient client.Client + fakeSecretsManager secretsmanager.Interface + + kubeAPIServerNamespace = "shoot--foo--bar" + bundleContent = []byte("-----BEGIN CERTIFICATE-----\nMIIBundleCA\n-----END CERTIFICATE-----\n") + ) + + BeforeEach(func() { + runtimeClient = fakeclient.NewClientBuilder().WithScheme(kubernetes.SeedScheme).Build() + shootClient = fakeclient.NewClientBuilder().WithScheme(kubernetes.ShootScheme).WithIndex(&corev1.ConfigMap{}, "metadata.name", func(obj client.Object) []string { + return []string{obj.GetName()} + }).Build() + fakeSecretsManager = fakesecretsmanager.New(runtimeClient, kubeAPIServerNamespace) + + botanist.Logger = logr.Discard() + botanist.SecretsManager = fakeSecretsManager + botanist.ShootClientSet = fakekubernetes.NewClientSetBuilder().WithClient(shootClient).Build() + + Expect(runtimeClient.Create(ctx, &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: v1beta1constants.SecretNameCACluster, + Namespace: kubeAPIServerNamespace, + }, + Data: map[string][]byte{ + secretsutils.DataKeyCertificateBundle: bundleContent, + }, + })).To(Succeed()) + }) + + It("should succeed immediately when there are no ConfigMaps", func() { + Expect(botanist.WaitUntilKubeRootCAConfigMapsUpdated(ctx)).To(Succeed()) + }) + + It("should succeed immediately when all kube-root-ca.crt ConfigMaps are already labeled", func() { + Expect(shootClient.Create(ctx, &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "kube-root-ca.crt", + Namespace: "ns1", + Labels: map[string]string{secretsrotation.LabelKeyCABundleName: v1beta1constants.SecretNameCACluster}, + }, + Data: map[string]string{secretsutils.DataKeyCertificateCA: string(bundleContent)}, + })).To(Succeed()) + + Expect(botanist.WaitUntilKubeRootCAConfigMapsUpdated(ctx)).To(Succeed()) + }) + + It("should label ConfigMaps that contain the expected bundle", func() { + cm1 := &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Name: "kube-root-ca.crt", Namespace: "ns1"}, + Data: map[string]string{secretsutils.DataKeyCertificateCA: string(bundleContent)}, + } + Expect(shootClient.Create(ctx, cm1)).To(Succeed()) + + Expect(botanist.WaitUntilKubeRootCAConfigMapsUpdated(ctx)).To(Succeed()) + + Expect(shootClient.Get(ctx, client.ObjectKeyFromObject(cm1), cm1)).To(Succeed()) + Expect(cm1.Labels).To(HaveKeyWithValue(secretsrotation.LabelKeyCABundleName, v1beta1constants.SecretNameCACluster)) + }) + + It("should return an error when a ConfigMap has no ca.crt data", func() { + Expect(shootClient.Create(ctx, &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Name: "kube-root-ca.crt", Namespace: "ns1"}, + })).To(Succeed()) + + Expect(botanist.WaitUntilKubeRootCAConfigMapsUpdated(ctx)).To(MatchError(ContainSubstring("1 kube-root-ca.crt ConfigMap(s) do not yet contain the expected CA bundle"))) + }) + + It("should return an error when a ConfigMap does not contain the expected bundle", func() { + Expect(shootClient.Create(ctx, &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Name: "kube-root-ca.crt", Namespace: "ns1"}, + Data: map[string]string{secretsutils.DataKeyCertificateCA: "old-ca-only"}, + })).To(Succeed()) + + Expect(botanist.WaitUntilKubeRootCAConfigMapsUpdated(ctx)).To(MatchError(ContainSubstring("1 kube-root-ca.crt ConfigMap(s) do not yet contain the expected CA bundle"))) + }) + + It("should only process unlabeled ConfigMaps and ignore non-kube-root-ca.crt ConfigMaps", func() { + cmLabeled := &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "kube-root-ca.crt", + Namespace: "ns1", + Labels: map[string]string{secretsrotation.LabelKeyCABundleName: v1beta1constants.SecretNameCACluster}, + }, + Data: map[string]string{secretsutils.DataKeyCertificateCA: string(bundleContent)}, + } + cmUnlabeled := &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Name: "kube-root-ca.crt", Namespace: "ns2"}, + Data: map[string]string{secretsutils.DataKeyCertificateCA: string(bundleContent)}, + } + cmOtherName := &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{Name: "some-other-configmap", Namespace: "ns3"}, + } + Expect(shootClient.Create(ctx, cmLabeled)).To(Succeed()) + Expect(shootClient.Create(ctx, cmUnlabeled)).To(Succeed()) + Expect(shootClient.Create(ctx, cmOtherName)).To(Succeed()) + + Expect(botanist.WaitUntilKubeRootCAConfigMapsUpdated(ctx)).To(Succeed()) + + Expect(shootClient.Get(ctx, client.ObjectKeyFromObject(cmLabeled), cmLabeled)).To(Succeed()) + Expect(cmLabeled.Labels).To(HaveKeyWithValue(secretsrotation.LabelKeyCABundleName, v1beta1constants.SecretNameCACluster)) + + Expect(shootClient.Get(ctx, client.ObjectKeyFromObject(cmUnlabeled), cmUnlabeled)).To(Succeed()) + Expect(cmUnlabeled.Labels).To(HaveKeyWithValue(secretsrotation.LabelKeyCABundleName, v1beta1constants.SecretNameCACluster)) + + Expect(shootClient.Get(ctx, client.ObjectKeyFromObject(cmOtherName), cmOtherName)).To(Succeed()) + Expect(cmOtherName.Labels).NotTo(HaveKey(secretsrotation.LabelKeyCABundleName)) + }) + }) }) diff --git a/pkg/utils/gardener/secretsrotation/constants.go b/pkg/utils/gardener/secretsrotation/constants.go index 04912b05d59..4ff517d5f47 100644 --- a/pkg/utils/gardener/secretsrotation/constants.go +++ b/pkg/utils/gardener/secretsrotation/constants.go @@ -13,6 +13,10 @@ const ( // AnnotationKeyEtcdSnapshotted is an annotation indicating that ETCD snapshot was completed AnnotationKeyEtcdSnapshotted = "credentials.gardener.cloud/etcd-snapshotted" + // LabelKeyCABundleName is a label key used to mark kube-root-ca.crt ConfigMaps that have already been confirmed + // to contain a specific CA bundle. The label value is the name of the CA bundle secret. + LabelKeyCABundleName = "credentials.gardener.cloud/ca-bundle-name" + labelKeyRotationKeyName = "credentials.gardener.cloud/key-name" rotationQPS = 100 ) From 315d8f38b211ad0538f28d89011f0d89ac8d1f98 Mon Sep 17 00:00:00 2001 From: DobromirPeev <102480232+DobromirNPeev@users.noreply.github.com> Date: Thu, 6 Aug 2026 12:18:27 +0300 Subject: [PATCH 4/4] Enable default revive rules with a golangci-lint linter (revive) (#15431) * Add golangci-lint linter to enable default revive rules * Fix 'redefines-builtin-id' errors * Fix 'blank-imports' errors * Fix 'increment-decrement' errors * Fix 'superfluous-else' errors * Fix 'receiver-naming' errors * Run 'make generate' * Make comments inline * FIx more 'blank-imports' errors * Address 'ialidzhikov' comments * Make blank import comments inline and consistent --- .golangci.yaml.in | 5 +- .../pkg/webhook/cloudprovider/mock/mocks.go | 8 +- .../pkg/webhook/cloudprovider/mutator.go | 14 +- .../controlplane/genericmutator/mock/mocks.go | 144 +++++++++--------- .../controlplane/genericmutator/mutator.go | 98 ++++++------ .../genericmutator/mutator_test.go | 4 +- .../genericmutator/noopensurer.go | 4 +- extensions/pkg/webhook/mock/mocks.go | 8 +- extensions/pkg/webhook/network/mutator.go | 12 +- extensions/pkg/webhook/registration_test.go | 6 +- extensions/pkg/webhook/webhook.go | 4 +- .../authentication/validation/validation.go | 4 +- pkg/api/core/helper/cloudprofile.go | 24 +-- .../core/v1beta1/helper/condition_builder.go | 2 +- pkg/api/core/validation/cloudprofile.go | 22 +-- .../core/validation/controllerdeployment.go | 4 +- .../core/validation/controllerinstallation.go | 30 ++-- .../core/validation/controllerregistration.go | 24 +-- pkg/api/core/validation/exposureclass.go | 6 +- pkg/api/core/validation/project_test.go | 6 +- pkg/api/core/validation/shoot.go | 70 ++++----- pkg/api/extensions/validation/backupbucket.go | 18 +-- pkg/api/extensions/validation/backupentry.go | 16 +- pkg/api/extensions/validation/bastion.go | 18 +-- .../extensions/validation/containerruntime.go | 18 +-- pkg/api/extensions/validation/controlplane.go | 18 +-- pkg/api/extensions/validation/dnsrecord.go | 20 +-- pkg/api/extensions/validation/extension.go | 16 +- .../extensions/validation/infrastructure.go | 18 +-- pkg/api/extensions/validation/network.go | 22 +-- .../validation/operatingsystemconfig.go | 18 +-- .../validation/selfhostedshootexposure.go | 16 +- pkg/api/extensions/validation/worker.go | 18 +-- .../validation/managedseedset.go | 8 +- pkg/apis/core/types_cloudprofile.go | 4 +- .../autoscaling/pvcautoscaler/assets/doc.go | 2 +- .../autoscaling/vpa/templates/doc.go | 2 +- .../extensions/dnsrecord/dnsrecord.go | 4 +- .../gardener/dashboard/terminal/assets/doc.go | 2 +- pkg/component/networking/istio/istio_test.go | 12 +- pkg/component/shared/victorialogs.go | 2 +- .../controllerinstallation/add.go | 18 +-- .../shoot/maintenance/reconciler.go | 2 +- .../bootstrap/certificate/certificate_util.go | 8 +- .../controller/shoot/care/add_test.go | 4 +- .../controller/operatingsystemconfig/add.go | 6 +- .../validator/namespacedcloudprofile.go | 6 +- pkg/provider-local/webhook/shoot/mutator.go | 6 +- .../predicate/condition_status_test.go | 20 +-- pkg/scheduler/controller/shoot/reconciler.go | 6 +- pkg/utils/flow/taskfn_test.go | 2 +- pkg/utils/kubernetes/client/client.go | 2 +- pkg/utils/random.go | 24 +-- .../test/matchers/managedresource_test.go | 2 +- pkg/utils/validation/validation.go | 23 ++- pkg/utils/version/version.go | 12 +- .../pkg/global/finalizerremoval/admission.go | 8 +- .../resourcereferencemanager/admission.go | 6 +- plugin/pkg/shoot/quotavalidator/admission.go | 16 +- .../webhook/cloudprovider/ensurer.go | 8 +- .../resourcemanager/health/crds/doc.go | 2 +- .../testmachinery/shoots/operations/worker.go | 24 +-- 62 files changed, 476 insertions(+), 480 deletions(-) diff --git a/.golangci.yaml.in b/.golangci.yaml.in index 58611400928..05d9551acbb 100644 --- a/.golangci.yaml.in +++ b/.golangci.yaml.in @@ -259,13 +259,10 @@ linters: misspell: mode: restricted # only check comments revive: + enable-default-rules: true rules: - - name: context-as-argument - name: duplicated-imports - name: early-return - - name: exported - - name: unreachable-code - - name: unused-parameter custom: logcheck: path: <>/logcheck.so diff --git a/extensions/pkg/webhook/cloudprovider/mock/mocks.go b/extensions/pkg/webhook/cloudprovider/mock/mocks.go index 1137d89424e..b4f911f6294 100644 --- a/extensions/pkg/webhook/cloudprovider/mock/mocks.go +++ b/extensions/pkg/webhook/cloudprovider/mock/mocks.go @@ -43,15 +43,15 @@ func (m *MockEnsurer) EXPECT() *MockEnsurerMockRecorder { } // EnsureCloudProviderSecret mocks base method. -func (m *MockEnsurer) EnsureCloudProviderSecret(ctx context.Context, gctx context0.GardenContext, new, old *v1.Secret) error { +func (m *MockEnsurer) EnsureCloudProviderSecret(ctx context.Context, gctx context0.GardenContext, newSecret, oldSecret *v1.Secret) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureCloudProviderSecret", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureCloudProviderSecret", ctx, gctx, newSecret, oldSecret) ret0, _ := ret[0].(error) return ret0 } // EnsureCloudProviderSecret indicates an expected call of EnsureCloudProviderSecret. -func (mr *MockEnsurerMockRecorder) EnsureCloudProviderSecret(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureCloudProviderSecret(ctx, gctx, newSecret, oldSecret any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureCloudProviderSecret", reflect.TypeOf((*MockEnsurer)(nil).EnsureCloudProviderSecret), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureCloudProviderSecret", reflect.TypeOf((*MockEnsurer)(nil).EnsureCloudProviderSecret), ctx, gctx, newSecret, oldSecret) } diff --git a/extensions/pkg/webhook/cloudprovider/mutator.go b/extensions/pkg/webhook/cloudprovider/mutator.go index 6718f282cb8..e42d26aa054 100644 --- a/extensions/pkg/webhook/cloudprovider/mutator.go +++ b/extensions/pkg/webhook/cloudprovider/mutator.go @@ -20,7 +20,7 @@ import ( // Ensurer ensures that the cloudprovider secret conforms to the provider requirements. type Ensurer interface { - EnsureCloudProviderSecret(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *corev1.Secret) error + EnsureCloudProviderSecret(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newSecret, oldSecret *corev1.Secret) error } // NewMutator creates a new cloudprovider mutator. @@ -39,12 +39,12 @@ type mutator struct { } // Mutate validates and if needed mutates the given object. -func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { - if new.GetDeletionTimestamp() != nil { +func (m *mutator) Mutate(ctx context.Context, newObj, oldObj client.Object) error { + if newObj.GetDeletionTimestamp() != nil { return nil } - newSecret, ok := new.(*corev1.Secret) + newSecret, ok := newObj.(*corev1.Secret) if !ok { return fmt.Errorf("could not mutate: object is not of type %q", "Secret") } @@ -53,14 +53,14 @@ func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { } var oldSecret *corev1.Secret - if old != nil { - oldSecret, ok = old.(*corev1.Secret) + if oldObj != nil { + oldSecret, ok = oldObj.(*corev1.Secret) if !ok { return fmt.Errorf("could not mutate: old object could not be casted to type %q", "Secret") } } - etcx := extensionscontextwebhook.NewGardenContext(m.client, new) + etcx := extensionscontextwebhook.NewGardenContext(m.client, newObj) webhook.LogMutation(m.logger, newSecret.Kind, newSecret.Namespace, newSecret.Name) return m.ensurer.EnsureCloudProviderSecret(ctx, etcx, newSecret, oldSecret) } diff --git a/extensions/pkg/webhook/controlplane/genericmutator/mock/mocks.go b/extensions/pkg/webhook/controlplane/genericmutator/mock/mocks.go index 25e7c950446..64b4e37bd8a 100644 --- a/extensions/pkg/webhook/controlplane/genericmutator/mock/mocks.go +++ b/extensions/pkg/webhook/controlplane/genericmutator/mock/mocks.go @@ -49,157 +49,157 @@ func (m *MockEnsurer) EXPECT() *MockEnsurerMockRecorder { } // EnsureAdditionalFiles mocks base method. -func (m *MockEnsurer) EnsureAdditionalFiles(ctx context.Context, gctx context0.GardenContext, new, old *[]v1alpha10.File) error { +func (m *MockEnsurer) EnsureAdditionalFiles(ctx context.Context, gctx context0.GardenContext, newFiles, oldFiles *[]v1alpha10.File) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureAdditionalFiles", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureAdditionalFiles", ctx, gctx, newFiles, oldFiles) ret0, _ := ret[0].(error) return ret0 } // EnsureAdditionalFiles indicates an expected call of EnsureAdditionalFiles. -func (mr *MockEnsurerMockRecorder) EnsureAdditionalFiles(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureAdditionalFiles(ctx, gctx, newFiles, oldFiles any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureAdditionalFiles", reflect.TypeOf((*MockEnsurer)(nil).EnsureAdditionalFiles), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureAdditionalFiles", reflect.TypeOf((*MockEnsurer)(nil).EnsureAdditionalFiles), ctx, gctx, newFiles, oldFiles) } // EnsureAdditionalProvisionFiles mocks base method. -func (m *MockEnsurer) EnsureAdditionalProvisionFiles(ctx context.Context, gctx context0.GardenContext, new, old *[]v1alpha10.File) error { +func (m *MockEnsurer) EnsureAdditionalProvisionFiles(ctx context.Context, gctx context0.GardenContext, newFiles, oldFiles *[]v1alpha10.File) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureAdditionalProvisionFiles", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureAdditionalProvisionFiles", ctx, gctx, newFiles, oldFiles) ret0, _ := ret[0].(error) return ret0 } // EnsureAdditionalProvisionFiles indicates an expected call of EnsureAdditionalProvisionFiles. -func (mr *MockEnsurerMockRecorder) EnsureAdditionalProvisionFiles(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureAdditionalProvisionFiles(ctx, gctx, newFiles, oldFiles any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureAdditionalProvisionFiles", reflect.TypeOf((*MockEnsurer)(nil).EnsureAdditionalProvisionFiles), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureAdditionalProvisionFiles", reflect.TypeOf((*MockEnsurer)(nil).EnsureAdditionalProvisionFiles), ctx, gctx, newFiles, oldFiles) } // EnsureAdditionalProvisionUnits mocks base method. -func (m *MockEnsurer) EnsureAdditionalProvisionUnits(ctx context.Context, gctx context0.GardenContext, new, old *[]v1alpha10.Unit) error { +func (m *MockEnsurer) EnsureAdditionalProvisionUnits(ctx context.Context, gctx context0.GardenContext, newUnits, oldUnits *[]v1alpha10.Unit) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureAdditionalProvisionUnits", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureAdditionalProvisionUnits", ctx, gctx, newUnits, oldUnits) ret0, _ := ret[0].(error) return ret0 } // EnsureAdditionalProvisionUnits indicates an expected call of EnsureAdditionalProvisionUnits. -func (mr *MockEnsurerMockRecorder) EnsureAdditionalProvisionUnits(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureAdditionalProvisionUnits(ctx, gctx, newUnits, oldUnits any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureAdditionalProvisionUnits", reflect.TypeOf((*MockEnsurer)(nil).EnsureAdditionalProvisionUnits), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureAdditionalProvisionUnits", reflect.TypeOf((*MockEnsurer)(nil).EnsureAdditionalProvisionUnits), ctx, gctx, newUnits, oldUnits) } // EnsureAdditionalUnits mocks base method. -func (m *MockEnsurer) EnsureAdditionalUnits(ctx context.Context, gctx context0.GardenContext, new, old *[]v1alpha10.Unit) error { +func (m *MockEnsurer) EnsureAdditionalUnits(ctx context.Context, gctx context0.GardenContext, newUnits, oldUnits *[]v1alpha10.Unit) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureAdditionalUnits", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureAdditionalUnits", ctx, gctx, newUnits, oldUnits) ret0, _ := ret[0].(error) return ret0 } // EnsureAdditionalUnits indicates an expected call of EnsureAdditionalUnits. -func (mr *MockEnsurerMockRecorder) EnsureAdditionalUnits(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureAdditionalUnits(ctx, gctx, newUnits, oldUnits any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureAdditionalUnits", reflect.TypeOf((*MockEnsurer)(nil).EnsureAdditionalUnits), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureAdditionalUnits", reflect.TypeOf((*MockEnsurer)(nil).EnsureAdditionalUnits), ctx, gctx, newUnits, oldUnits) } // EnsureCRIConfig mocks base method. -func (m *MockEnsurer) EnsureCRIConfig(ctx context.Context, gctx context0.GardenContext, new, old *v1alpha10.CRIConfig) error { +func (m *MockEnsurer) EnsureCRIConfig(ctx context.Context, gctx context0.GardenContext, newCRIConfig, oldCRIConfig *v1alpha10.CRIConfig) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureCRIConfig", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureCRIConfig", ctx, gctx, newCRIConfig, oldCRIConfig) ret0, _ := ret[0].(error) return ret0 } // EnsureCRIConfig indicates an expected call of EnsureCRIConfig. -func (mr *MockEnsurerMockRecorder) EnsureCRIConfig(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureCRIConfig(ctx, gctx, newCRIConfig, oldCRIConfig any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureCRIConfig", reflect.TypeOf((*MockEnsurer)(nil).EnsureCRIConfig), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureCRIConfig", reflect.TypeOf((*MockEnsurer)(nil).EnsureCRIConfig), ctx, gctx, newCRIConfig, oldCRIConfig) } // EnsureClusterAutoscalerDeployment mocks base method. -func (m *MockEnsurer) EnsureClusterAutoscalerDeployment(ctx context.Context, gctx context0.GardenContext, new, old *v1.Deployment) error { +func (m *MockEnsurer) EnsureClusterAutoscalerDeployment(ctx context.Context, gctx context0.GardenContext, newDeployment, oldDeployment *v1.Deployment) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureClusterAutoscalerDeployment", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureClusterAutoscalerDeployment", ctx, gctx, newDeployment, oldDeployment) ret0, _ := ret[0].(error) return ret0 } // EnsureClusterAutoscalerDeployment indicates an expected call of EnsureClusterAutoscalerDeployment. -func (mr *MockEnsurerMockRecorder) EnsureClusterAutoscalerDeployment(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureClusterAutoscalerDeployment(ctx, gctx, newDeployment, oldDeployment any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureClusterAutoscalerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureClusterAutoscalerDeployment), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureClusterAutoscalerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureClusterAutoscalerDeployment), ctx, gctx, newDeployment, oldDeployment) } // EnsureETCD mocks base method. -func (m *MockEnsurer) EnsureETCD(ctx context.Context, gctx context0.GardenContext, new, old *v1alpha1.Etcd) error { +func (m *MockEnsurer) EnsureETCD(ctx context.Context, gctx context0.GardenContext, newEtcd, oldEtcd *v1alpha1.Etcd) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureETCD", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureETCD", ctx, gctx, newEtcd, oldEtcd) ret0, _ := ret[0].(error) return ret0 } // EnsureETCD indicates an expected call of EnsureETCD. -func (mr *MockEnsurerMockRecorder) EnsureETCD(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureETCD(ctx, gctx, newEtcd, oldEtcd any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureETCD", reflect.TypeOf((*MockEnsurer)(nil).EnsureETCD), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureETCD", reflect.TypeOf((*MockEnsurer)(nil).EnsureETCD), ctx, gctx, newEtcd, oldEtcd) } // EnsureGardenerResourceManagerDeployment mocks base method. -func (m *MockEnsurer) EnsureGardenerResourceManagerDeployment(ctx context.Context, gctx context0.GardenContext, new, old *v1.Deployment) error { +func (m *MockEnsurer) EnsureGardenerResourceManagerDeployment(ctx context.Context, gctx context0.GardenContext, newDeployment, oldDeployment *v1.Deployment) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureGardenerResourceManagerDeployment", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureGardenerResourceManagerDeployment", ctx, gctx, newDeployment, oldDeployment) ret0, _ := ret[0].(error) return ret0 } // EnsureGardenerResourceManagerDeployment indicates an expected call of EnsureGardenerResourceManagerDeployment. -func (mr *MockEnsurerMockRecorder) EnsureGardenerResourceManagerDeployment(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureGardenerResourceManagerDeployment(ctx, gctx, newDeployment, oldDeployment any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureGardenerResourceManagerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureGardenerResourceManagerDeployment), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureGardenerResourceManagerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureGardenerResourceManagerDeployment), ctx, gctx, newDeployment, oldDeployment) } // EnsureKubeAPIServerDeployment mocks base method. -func (m *MockEnsurer) EnsureKubeAPIServerDeployment(ctx context.Context, gctx context0.GardenContext, new, old *v1.Deployment) error { +func (m *MockEnsurer) EnsureKubeAPIServerDeployment(ctx context.Context, gctx context0.GardenContext, newDeployment, oldDeployment *v1.Deployment) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureKubeAPIServerDeployment", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureKubeAPIServerDeployment", ctx, gctx, newDeployment, oldDeployment) ret0, _ := ret[0].(error) return ret0 } // EnsureKubeAPIServerDeployment indicates an expected call of EnsureKubeAPIServerDeployment. -func (mr *MockEnsurerMockRecorder) EnsureKubeAPIServerDeployment(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureKubeAPIServerDeployment(ctx, gctx, newDeployment, oldDeployment any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeAPIServerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeAPIServerDeployment), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeAPIServerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeAPIServerDeployment), ctx, gctx, newDeployment, oldDeployment) } // EnsureKubeControllerManagerDeployment mocks base method. -func (m *MockEnsurer) EnsureKubeControllerManagerDeployment(ctx context.Context, gctx context0.GardenContext, new, old *v1.Deployment) error { +func (m *MockEnsurer) EnsureKubeControllerManagerDeployment(ctx context.Context, gctx context0.GardenContext, newDeployment, oldDeployment *v1.Deployment) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureKubeControllerManagerDeployment", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureKubeControllerManagerDeployment", ctx, gctx, newDeployment, oldDeployment) ret0, _ := ret[0].(error) return ret0 } // EnsureKubeControllerManagerDeployment indicates an expected call of EnsureKubeControllerManagerDeployment. -func (mr *MockEnsurerMockRecorder) EnsureKubeControllerManagerDeployment(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureKubeControllerManagerDeployment(ctx, gctx, newDeployment, oldDeployment any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeControllerManagerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeControllerManagerDeployment), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeControllerManagerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeControllerManagerDeployment), ctx, gctx, newDeployment, oldDeployment) } // EnsureKubeSchedulerDeployment mocks base method. -func (m *MockEnsurer) EnsureKubeSchedulerDeployment(ctx context.Context, gctx context0.GardenContext, new, old *v1.Deployment) error { +func (m *MockEnsurer) EnsureKubeSchedulerDeployment(ctx context.Context, gctx context0.GardenContext, newDeployment, oldDeployment *v1.Deployment) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureKubeSchedulerDeployment", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureKubeSchedulerDeployment", ctx, gctx, newDeployment, oldDeployment) ret0, _ := ret[0].(error) return ret0 } // EnsureKubeSchedulerDeployment indicates an expected call of EnsureKubeSchedulerDeployment. -func (mr *MockEnsurerMockRecorder) EnsureKubeSchedulerDeployment(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureKubeSchedulerDeployment(ctx, gctx, newDeployment, oldDeployment any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeSchedulerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeSchedulerDeployment), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeSchedulerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeSchedulerDeployment), ctx, gctx, newDeployment, oldDeployment) } // EnsureKubeletCloudProviderConfig mocks base method. @@ -217,102 +217,102 @@ func (mr *MockEnsurerMockRecorder) EnsureKubeletCloudProviderConfig(ctx, gctx, k } // EnsureKubeletConfiguration mocks base method. -func (m *MockEnsurer) EnsureKubeletConfiguration(ctx context.Context, gctx context0.GardenContext, kubeletVersion *semver.Version, new, old *v1beta1.KubeletConfiguration) error { +func (m *MockEnsurer) EnsureKubeletConfiguration(ctx context.Context, gctx context0.GardenContext, kubeletVersion *semver.Version, newKubeletConfig, oldKubeletConfig *v1beta1.KubeletConfiguration) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureKubeletConfiguration", ctx, gctx, kubeletVersion, new, old) + ret := m.ctrl.Call(m, "EnsureKubeletConfiguration", ctx, gctx, kubeletVersion, newKubeletConfig, oldKubeletConfig) ret0, _ := ret[0].(error) return ret0 } // EnsureKubeletConfiguration indicates an expected call of EnsureKubeletConfiguration. -func (mr *MockEnsurerMockRecorder) EnsureKubeletConfiguration(ctx, gctx, kubeletVersion, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureKubeletConfiguration(ctx, gctx, kubeletVersion, newKubeletConfig, oldKubeletConfig any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeletConfiguration", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeletConfiguration), ctx, gctx, kubeletVersion, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeletConfiguration", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeletConfiguration), ctx, gctx, kubeletVersion, newKubeletConfig, oldKubeletConfig) } // EnsureKubeletServiceUnitOptions mocks base method. -func (m *MockEnsurer) EnsureKubeletServiceUnitOptions(ctx context.Context, gctx context0.GardenContext, kubeletVersion *semver.Version, new, old []*unit.UnitOption) ([]*unit.UnitOption, error) { +func (m *MockEnsurer) EnsureKubeletServiceUnitOptions(ctx context.Context, gctx context0.GardenContext, kubeletVersion *semver.Version, newUnitOptions, oldUnitOptions []*unit.UnitOption) ([]*unit.UnitOption, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureKubeletServiceUnitOptions", ctx, gctx, kubeletVersion, new, old) + ret := m.ctrl.Call(m, "EnsureKubeletServiceUnitOptions", ctx, gctx, kubeletVersion, newUnitOptions, oldUnitOptions) ret0, _ := ret[0].([]*unit.UnitOption) ret1, _ := ret[1].(error) return ret0, ret1 } // EnsureKubeletServiceUnitOptions indicates an expected call of EnsureKubeletServiceUnitOptions. -func (mr *MockEnsurerMockRecorder) EnsureKubeletServiceUnitOptions(ctx, gctx, kubeletVersion, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureKubeletServiceUnitOptions(ctx, gctx, kubeletVersion, newUnitOptions, oldUnitOptions any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeletServiceUnitOptions", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeletServiceUnitOptions), ctx, gctx, kubeletVersion, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubeletServiceUnitOptions", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubeletServiceUnitOptions), ctx, gctx, kubeletVersion, newUnitOptions, oldUnitOptions) } // EnsureKubernetesGeneralConfiguration mocks base method. -func (m *MockEnsurer) EnsureKubernetesGeneralConfiguration(ctx context.Context, gctx context0.GardenContext, new, old *string) error { +func (m *MockEnsurer) EnsureKubernetesGeneralConfiguration(ctx context.Context, gctx context0.GardenContext, newData, oldData *string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureKubernetesGeneralConfiguration", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureKubernetesGeneralConfiguration", ctx, gctx, newData, oldData) ret0, _ := ret[0].(error) return ret0 } // EnsureKubernetesGeneralConfiguration indicates an expected call of EnsureKubernetesGeneralConfiguration. -func (mr *MockEnsurerMockRecorder) EnsureKubernetesGeneralConfiguration(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureKubernetesGeneralConfiguration(ctx, gctx, newData, oldData any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubernetesGeneralConfiguration", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubernetesGeneralConfiguration), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureKubernetesGeneralConfiguration", reflect.TypeOf((*MockEnsurer)(nil).EnsureKubernetesGeneralConfiguration), ctx, gctx, newData, oldData) } // EnsureMachineControllerManagerDeployment mocks base method. -func (m *MockEnsurer) EnsureMachineControllerManagerDeployment(ctx context.Context, gctx context0.GardenContext, new, old *v1.Deployment) error { +func (m *MockEnsurer) EnsureMachineControllerManagerDeployment(ctx context.Context, gctx context0.GardenContext, newDeployment, oldDeployment *v1.Deployment) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureMachineControllerManagerDeployment", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureMachineControllerManagerDeployment", ctx, gctx, newDeployment, oldDeployment) ret0, _ := ret[0].(error) return ret0 } // EnsureMachineControllerManagerDeployment indicates an expected call of EnsureMachineControllerManagerDeployment. -func (mr *MockEnsurerMockRecorder) EnsureMachineControllerManagerDeployment(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureMachineControllerManagerDeployment(ctx, gctx, newDeployment, oldDeployment any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureMachineControllerManagerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureMachineControllerManagerDeployment), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureMachineControllerManagerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureMachineControllerManagerDeployment), ctx, gctx, newDeployment, oldDeployment) } // EnsureMachineControllerManagerVPA mocks base method. -func (m *MockEnsurer) EnsureMachineControllerManagerVPA(ctx context.Context, gctx context0.GardenContext, new, old *v10.VerticalPodAutoscaler) error { +func (m *MockEnsurer) EnsureMachineControllerManagerVPA(ctx context.Context, gctx context0.GardenContext, newVPA, oldVPA *v10.VerticalPodAutoscaler) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureMachineControllerManagerVPA", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureMachineControllerManagerVPA", ctx, gctx, newVPA, oldVPA) ret0, _ := ret[0].(error) return ret0 } // EnsureMachineControllerManagerVPA indicates an expected call of EnsureMachineControllerManagerVPA. -func (mr *MockEnsurerMockRecorder) EnsureMachineControllerManagerVPA(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureMachineControllerManagerVPA(ctx, gctx, newVPA, oldVPA any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureMachineControllerManagerVPA", reflect.TypeOf((*MockEnsurer)(nil).EnsureMachineControllerManagerVPA), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureMachineControllerManagerVPA", reflect.TypeOf((*MockEnsurer)(nil).EnsureMachineControllerManagerVPA), ctx, gctx, newVPA, oldVPA) } // EnsureVPNSeedServerDeployment mocks base method. -func (m *MockEnsurer) EnsureVPNSeedServerDeployment(ctx context.Context, gctx context0.GardenContext, new, old *v1.Deployment) error { +func (m *MockEnsurer) EnsureVPNSeedServerDeployment(ctx context.Context, gctx context0.GardenContext, newDeployment, oldDeployment *v1.Deployment) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureVPNSeedServerDeployment", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureVPNSeedServerDeployment", ctx, gctx, newDeployment, oldDeployment) ret0, _ := ret[0].(error) return ret0 } // EnsureVPNSeedServerDeployment indicates an expected call of EnsureVPNSeedServerDeployment. -func (mr *MockEnsurerMockRecorder) EnsureVPNSeedServerDeployment(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureVPNSeedServerDeployment(ctx, gctx, newDeployment, oldDeployment any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureVPNSeedServerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureVPNSeedServerDeployment), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureVPNSeedServerDeployment", reflect.TypeOf((*MockEnsurer)(nil).EnsureVPNSeedServerDeployment), ctx, gctx, newDeployment, oldDeployment) } // EnsureVPNSeedServerStatefulSet mocks base method. -func (m *MockEnsurer) EnsureVPNSeedServerStatefulSet(ctx context.Context, gctx context0.GardenContext, new, old *v1.StatefulSet) error { +func (m *MockEnsurer) EnsureVPNSeedServerStatefulSet(ctx context.Context, gctx context0.GardenContext, newStatefulSet, oldStatefulSet *v1.StatefulSet) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "EnsureVPNSeedServerStatefulSet", ctx, gctx, new, old) + ret := m.ctrl.Call(m, "EnsureVPNSeedServerStatefulSet", ctx, gctx, newStatefulSet, oldStatefulSet) ret0, _ := ret[0].(error) return ret0 } // EnsureVPNSeedServerStatefulSet indicates an expected call of EnsureVPNSeedServerStatefulSet. -func (mr *MockEnsurerMockRecorder) EnsureVPNSeedServerStatefulSet(ctx, gctx, new, old any) *gomock.Call { +func (mr *MockEnsurerMockRecorder) EnsureVPNSeedServerStatefulSet(ctx, gctx, newStatefulSet, oldStatefulSet any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureVPNSeedServerStatefulSet", reflect.TypeOf((*MockEnsurer)(nil).EnsureVPNSeedServerStatefulSet), ctx, gctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureVPNSeedServerStatefulSet", reflect.TypeOf((*MockEnsurer)(nil).EnsureVPNSeedServerStatefulSet), ctx, gctx, newStatefulSet, oldStatefulSet) } // ShouldProvisionKubeletCloudProviderConfig mocks base method. diff --git a/extensions/pkg/webhook/controlplane/genericmutator/mutator.go b/extensions/pkg/webhook/controlplane/genericmutator/mutator.go index 53e845cbe2e..b6a1fc29ab8 100644 --- a/extensions/pkg/webhook/controlplane/genericmutator/mutator.go +++ b/extensions/pkg/webhook/controlplane/genericmutator/mutator.go @@ -36,62 +36,62 @@ import ( // are mutated accordingly. type Ensurer interface { // EnsureKubeAPIServerDeployment ensures that the kube-apiserver deployment conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureKubeAPIServerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *appsv1.Deployment) error + // "oldDeployment" might be "nil" and must always be checked. + EnsureKubeAPIServerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newDeployment, oldDeployment *appsv1.Deployment) error // EnsureKubeControllerManagerDeployment ensures that the kube-controller-manager deployment conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureKubeControllerManagerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *appsv1.Deployment) error + // "oldDeployment" might be "nil" and must always be checked. + EnsureKubeControllerManagerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newDeployment, oldDeployment *appsv1.Deployment) error // EnsureKubeSchedulerDeployment ensures that the kube-scheduler deployment conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureKubeSchedulerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *appsv1.Deployment) error + // "oldDeployment" might be "nil" and must always be checked. + EnsureKubeSchedulerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newDeployment, oldDeployment *appsv1.Deployment) error // EnsureClusterAutoscalerDeployment ensures that the cluster-autoscaler deployment conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureClusterAutoscalerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *appsv1.Deployment) error + // "oldDeployment" might be "nil" and must always be checked. + EnsureClusterAutoscalerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newDeployment, oldDeployment *appsv1.Deployment) error // EnsureMachineControllerManagerDeployment ensures that the machine-controller-manager deployment conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureMachineControllerManagerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *appsv1.Deployment) error + // "oldDeployment" might be "nil" and must always be checked. + EnsureMachineControllerManagerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newDeployment, oldDeployment *appsv1.Deployment) error // EnsureMachineControllerManagerVPA ensures that the machine-controller-manager VPA settings conform to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureMachineControllerManagerVPA(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *vpaautoscalingv1.VerticalPodAutoscaler) error + // "oldVPA" might be "nil" and must always be checked. + EnsureMachineControllerManagerVPA(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newVPA, oldVPA *vpaautoscalingv1.VerticalPodAutoscaler) error // EnsureETCD ensures that the etcds conform to the respective provider requirements. - // "old" might be "nil" and must always be checked. - EnsureETCD(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *druidcorev1alpha1.Etcd) error + // "oldEtcd" might be "nil" and must always be checked. + EnsureETCD(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newEtcd, oldEtcd *druidcorev1alpha1.Etcd) error // EnsureVPNSeedServerDeployment ensures that the vpn-seed-server deployment conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureVPNSeedServerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *appsv1.Deployment) error + // "oldDeployment" might be "nil" and must always be checked. + EnsureVPNSeedServerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newDeployment, oldDeployment *appsv1.Deployment) error // EnsureVPNSeedServerStatefulSet ensures that the vpn-seed-server deployment conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureVPNSeedServerStatefulSet(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *appsv1.StatefulSet) error + // "oldStatefulSet" might be "nil" and must always be checked. + EnsureVPNSeedServerStatefulSet(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newStatefulSet, oldStatefulSet *appsv1.StatefulSet) error // EnsureKubeletServiceUnitOptions ensures that the kubelet.service unit options conform to the provider requirements. - EnsureKubeletServiceUnitOptions(ctx context.Context, gctx extensionscontextwebhook.GardenContext, kubeletVersion *semver.Version, new, old []*unit.UnitOption) ([]*unit.UnitOption, error) + EnsureKubeletServiceUnitOptions(ctx context.Context, gctx extensionscontextwebhook.GardenContext, kubeletVersion *semver.Version, newUnitOptions, oldUnitOptions []*unit.UnitOption) ([]*unit.UnitOption, error) // EnsureKubeletConfiguration ensures that the kubelet configuration conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureKubeletConfiguration(ctx context.Context, gctx extensionscontextwebhook.GardenContext, kubeletVersion *semver.Version, new, old *kubeletconfigv1beta1.KubeletConfiguration) error + // "oldKubeletConfig" might be "nil" and must always be checked. + EnsureKubeletConfiguration(ctx context.Context, gctx extensionscontextwebhook.GardenContext, kubeletVersion *semver.Version, newKubeletConfig, oldKubeletConfig *kubeletconfigv1beta1.KubeletConfiguration) error // ShouldProvisionKubeletCloudProviderConfig returns true if the cloud provider config file should be added to the kubelet configuration. ShouldProvisionKubeletCloudProviderConfig(ctx context.Context, gctx extensionscontextwebhook.GardenContext, kubeletVersion *semver.Version) bool // EnsureKubeletCloudProviderConfig ensures that the cloud provider config file content conforms to the provider requirements. EnsureKubeletCloudProviderConfig(ctx context.Context, gctx extensionscontextwebhook.GardenContext, kubeletVersion *semver.Version, configContent *string, namespace string) error // EnsureKubernetesGeneralConfiguration ensures that the kubernetes general configuration conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureKubernetesGeneralConfiguration(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *string) error + // "oldData" might be "nil" and must always be checked. + EnsureKubernetesGeneralConfiguration(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newData, oldData *string) error // EnsureAdditionalUnits ensures additional systemd units - // "old" might be "nil" and must always be checked. - EnsureAdditionalUnits(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *[]extensionsv1alpha1.Unit) error + // "oldUnits" might be "nil" and must always be checked. + EnsureAdditionalUnits(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newUnits, oldUnits *[]extensionsv1alpha1.Unit) error // EnsureAdditionalFiles ensures additional systemd files - // "old" might be "nil" and must always be checked. - EnsureAdditionalFiles(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *[]extensionsv1alpha1.File) error + // "oldFiles" might be "nil" and must always be checked. + EnsureAdditionalFiles(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newFiles, oldFiles *[]extensionsv1alpha1.File) error // EnsureAdditionalProvisionUnits ensures additional systemd units for the 'provision' OSC - // "old" might be "nil" and must always be checked. - EnsureAdditionalProvisionUnits(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *[]extensionsv1alpha1.Unit) error + // "oldUnits" might be "nil" and must always be checked. + EnsureAdditionalProvisionUnits(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newUnits, oldUnits *[]extensionsv1alpha1.Unit) error // EnsureAdditionalProvisionFiles ensures additional systemd files for the 'provision' OSC - // "old" might be "nil" and must always be checked. - EnsureAdditionalProvisionFiles(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *[]extensionsv1alpha1.File) error + // "oldFiles" might be "nil" and must always be checked. + EnsureAdditionalProvisionFiles(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newFiles, oldFiles *[]extensionsv1alpha1.File) error // EnsureCRIConfig ensures the CRI config. - // "old" might be "nil" and must always be checked. - EnsureCRIConfig(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *extensionsv1alpha1.CRIConfig) error + // "oldCRIConfig" might be "nil" and must always be checked. + EnsureCRIConfig(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newCRIConfig, oldCRIConfig *extensionsv1alpha1.CRIConfig) error // EnsureGardenerResourceManagerDeployment ensures that the Resource Manager deployment conforms to the provider requirements. - // "old" might be "nil" and must always be checked. - EnsureGardenerResourceManagerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, new, old *appsv1.Deployment) error + // "oldDeployment" might be "nil" and must always be checked. + EnsureGardenerResourceManagerDeployment(ctx context.Context, gctx extensionscontextwebhook.GardenContext, newDeployment, oldDeployment *appsv1.Deployment) error } // NewMutator creates a new controlplane mutator. @@ -123,19 +123,19 @@ type mutator struct { } // Mutate validates and if needed mutates the given object. -func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { +func (m *mutator) Mutate(ctx context.Context, newObj, oldObj client.Object) error { // If the object does have a deletion timestamp then we don't want to mutate anything. - if new.GetDeletionTimestamp() != nil { + if newObj.GetDeletionTimestamp() != nil { return nil } - gctx := extensionscontextwebhook.NewGardenContext(m.client, new) + gctx := extensionscontextwebhook.NewGardenContext(m.client, newObj) - switch x := new.(type) { + switch x := newObj.(type) { case *appsv1.Deployment: var oldDep *appsv1.Deployment - if old != nil { + if oldObj != nil { var ok bool - oldDep, ok = old.(*appsv1.Deployment) + oldDep, ok = oldObj.(*appsv1.Deployment) if !ok { return errors.New("could not cast old object to appsv1.Deployment") } @@ -166,9 +166,9 @@ func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { } case *appsv1.StatefulSet: var oldSet *appsv1.StatefulSet - if old != nil { + if oldObj != nil { var ok bool - oldSet, ok = old.(*appsv1.StatefulSet) + oldSet, ok = oldObj.(*appsv1.StatefulSet) if !ok { return errors.New("could not cast old object to appsv1.StatefulSet") } @@ -181,9 +181,9 @@ func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { case *vpaautoscalingv1.VerticalPodAutoscaler: var oldVPA *vpaautoscalingv1.VerticalPodAutoscaler - if old != nil { + if oldObj != nil { var ok bool - oldVPA, ok = old.(*vpaautoscalingv1.VerticalPodAutoscaler) + oldVPA, ok = oldObj.(*vpaautoscalingv1.VerticalPodAutoscaler) if !ok { return errors.New("could not cast old object to vpaautoscalingv1.VerticalPodAutoscaler") } @@ -198,9 +198,9 @@ func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { switch x.Name { case v1beta1constants.ETCDMain, operatorv1alpha1.VirtualGardenETCDMain, v1beta1constants.ETCDEvents, operatorv1alpha1.VirtualGardenETCDEvents: var oldEtcd *druidcorev1alpha1.Etcd - if old != nil { + if oldObj != nil { var ok bool - oldEtcd, ok = old.(*druidcorev1alpha1.Etcd) + oldEtcd, ok = oldObj.(*druidcorev1alpha1.Etcd) if !ok { return errors.New("could not cast old object to druidcorev1alpha1.Etcd") } @@ -211,9 +211,9 @@ func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { } case *extensionsv1alpha1.OperatingSystemConfig: var oldOSC *extensionsv1alpha1.OperatingSystemConfig - if old != nil { + if oldObj != nil { var ok bool - oldOSC, ok = old.(*extensionsv1alpha1.OperatingSystemConfig) + oldOSC, ok = oldObj.(*extensionsv1alpha1.OperatingSystemConfig) if !ok { return errors.New("could not cast old object to extensionsv1alpha1.OperatingSystemConfig") } diff --git a/extensions/pkg/webhook/controlplane/genericmutator/mutator_test.go b/extensions/pkg/webhook/controlplane/genericmutator/mutator_test.go index 15f6cdbf6ab..383d37b5865 100644 --- a/extensions/pkg/webhook/controlplane/genericmutator/mutator_test.go +++ b/extensions/pkg/webhook/controlplane/genericmutator/mutator_test.go @@ -136,8 +136,8 @@ var _ = Describe("Mutator", func() { newObj = nil }) - DescribeTable("Should ignore", func(new, old client.Object) { - err := mutator.Mutate(context.Background(), new, old) + DescribeTable("Should ignore", func(newObj, oldObj client.Object) { + err := mutator.Mutate(context.Background(), newObj, oldObj) Expect(err).To(Not(HaveOccurred())) }, Entry( diff --git a/extensions/pkg/webhook/controlplane/genericmutator/noopensurer.go b/extensions/pkg/webhook/controlplane/genericmutator/noopensurer.go index 2e36a464c9b..fe29702c1b3 100644 --- a/extensions/pkg/webhook/controlplane/genericmutator/noopensurer.go +++ b/extensions/pkg/webhook/controlplane/genericmutator/noopensurer.go @@ -69,8 +69,8 @@ func (e *NoopEnsurer) EnsureVPNSeedServerStatefulSet(_ context.Context, _ extens } // EnsureKubeletServiceUnitOptions ensures that the kubelet.service unit options conform to the provider requirements. -func (e *NoopEnsurer) EnsureKubeletServiceUnitOptions(_ context.Context, _ extensionscontextwebhook.GardenContext, _ *semver.Version, new, _ []*unit.UnitOption) ([]*unit.UnitOption, error) { - return new, nil +func (e *NoopEnsurer) EnsureKubeletServiceUnitOptions(_ context.Context, _ extensionscontextwebhook.GardenContext, _ *semver.Version, newUnitOptions, _ []*unit.UnitOption) ([]*unit.UnitOption, error) { + return newUnitOptions, nil } // EnsureKubeletConfiguration ensures that the kubelet configuration conforms to the provider requirements. diff --git a/extensions/pkg/webhook/mock/mocks.go b/extensions/pkg/webhook/mock/mocks.go index c8553420bc3..8956d52ca92 100644 --- a/extensions/pkg/webhook/mock/mocks.go +++ b/extensions/pkg/webhook/mock/mocks.go @@ -42,15 +42,15 @@ func (m *MockMutator) EXPECT() *MockMutatorMockRecorder { } // Mutate mocks base method. -func (m *MockMutator) Mutate(ctx context.Context, new, old client.Object) error { +func (m *MockMutator) Mutate(ctx context.Context, newObj, oldObj client.Object) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Mutate", ctx, new, old) + ret := m.ctrl.Call(m, "Mutate", ctx, newObj, oldObj) ret0, _ := ret[0].(error) return ret0 } // Mutate indicates an expected call of Mutate. -func (mr *MockMutatorMockRecorder) Mutate(ctx, new, old any) *gomock.Call { +func (mr *MockMutatorMockRecorder) Mutate(ctx, newObj, oldObj any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Mutate", reflect.TypeOf((*MockMutator)(nil).Mutate), ctx, new, old) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Mutate", reflect.TypeOf((*MockMutator)(nil).Mutate), ctx, newObj, oldObj) } diff --git a/extensions/pkg/webhook/network/mutator.go b/extensions/pkg/webhook/network/mutator.go index eb5de1e90d6..afaa30998de 100644 --- a/extensions/pkg/webhook/network/mutator.go +++ b/extensions/pkg/webhook/network/mutator.go @@ -18,7 +18,7 @@ import ( ) // MutateFn is a function that validates and if needed mutates the given extensionsv1alpha1.Network. -type MutateFn func(new, old *extensionsv1alpha1.Network) error +type MutateFn func(newNetwork, oldNetwork *extensionsv1alpha1.Network) error // NewMutator creates a new network mutator. func NewMutator(mgr manager.Manager, logger logr.Logger, mutateFn MutateFn) webhook.Mutator { @@ -36,24 +36,24 @@ type mutator struct { } // Mutate validates and if needed mutates the given object. -func (m *mutator) Mutate(_ context.Context, new, old client.Object) error { +func (m *mutator) Mutate(_ context.Context, newObj, oldObj client.Object) error { var ( newNetwork, oldNetwork *extensionsv1alpha1.Network ok bool ) // If the object does have a deletion timestamp then we don't want to mutate anything. - if new.GetDeletionTimestamp() != nil { + if newObj.GetDeletionTimestamp() != nil { return nil } - newNetwork, ok = new.(*extensionsv1alpha1.Network) + newNetwork, ok = newObj.(*extensionsv1alpha1.Network) if !ok { return fmt.Errorf("could not mutate, object is not of type %q", "Network") } - if old != nil { - oldNetwork, ok = old.(*extensionsv1alpha1.Network) + if oldObj != nil { + oldNetwork, ok = oldObj.(*extensionsv1alpha1.Network) if !ok { return errors.New("could not cast old object to extensionsv1alpha1.Network") } diff --git a/extensions/pkg/webhook/registration_test.go b/extensions/pkg/webhook/registration_test.go index 740d03b5ec2..a00483dac2a 100644 --- a/extensions/pkg/webhook/registration_test.go +++ b/extensions/pkg/webhook/registration_test.go @@ -62,9 +62,9 @@ var _ = Describe("Registration", func() { configs.MutatingWebhookConfig = &admissionregistrationv1.MutatingWebhookConfiguration{} configs.ValidatingWebhookConfig = &admissionregistrationv1.ValidatingWebhookConfiguration{} - copy := configs.DeepCopy() - Expect(copy.MutatingWebhookConfig).To(Not(ShareSameReferenceAs(configs.MutatingWebhookConfig))) - Expect(copy.ValidatingWebhookConfig).To(Not(ShareSameReferenceAs(configs.ValidatingWebhookConfig))) + copied := configs.DeepCopy() + Expect(copied.MutatingWebhookConfig).To(Not(ShareSameReferenceAs(configs.MutatingWebhookConfig))) + Expect(copied.ValidatingWebhookConfig).To(Not(ShareSameReferenceAs(configs.ValidatingWebhookConfig))) }) }) diff --git a/extensions/pkg/webhook/webhook.go b/extensions/pkg/webhook/webhook.go index ca0742d9ab4..f536f83dca8 100644 --- a/extensions/pkg/webhook/webhook.go +++ b/extensions/pkg/webhook/webhook.go @@ -65,14 +65,14 @@ type Webhook struct { // Validator validates objects. type Validator interface { - Validate(ctx context.Context, new, old client.Object) error + Validate(ctx context.Context, newObj, oldObj client.Object) error } // Mutator validates and if needed mutates objects. type Mutator interface { // Mutate validates and if needed mutates the given object. // "old" is optional, and it must always be checked for nil. - Mutate(ctx context.Context, new, old client.Object) error + Mutate(ctx context.Context, newObj, oldObj client.Object) error } // Type contains information about the Kubernetes object types and subresources the webhook acts upon. diff --git a/pkg/api/authentication/validation/validation.go b/pkg/api/authentication/validation/validation.go index a6fd9a02ae7..85f91c6cd66 100644 --- a/pkg/api/authentication/validation/validation.go +++ b/pkg/api/authentication/validation/validation.go @@ -20,8 +20,8 @@ func ValidateKubeconfigRequest(req *authentication.KubeconfigRequest) field.Erro allErrs := field.ErrorList{} specPath := field.NewPath("spec") - const min = 10 * time.Minute - if req.Spec.ExpirationSeconds < int64(min.Seconds()) { + const minExpirationDuration = 10 * time.Minute + if req.Spec.ExpirationSeconds < int64(minExpirationDuration.Seconds()) { allErrs = append(allErrs, field.Invalid(specPath.Child("expirationSeconds"), req.Spec.ExpirationSeconds, "may not specify a duration less than 10 minutes")) } if req.Spec.ExpirationSeconds > math.MaxUint32 { diff --git a/pkg/api/core/helper/cloudprofile.go b/pkg/api/core/helper/cloudprofile.go index 3be5374a844..5efb43e34c6 100644 --- a/pkg/api/core/helper/cloudprofile.go +++ b/pkg/api/core/helper/cloudprofile.go @@ -211,14 +211,14 @@ func ToExpirableVersions(versions []core.MachineImageVersion) []core.ExpirableVe // GetRemovedVersions finds versions that have been removed in the old compared to the new version slice. // returns a map associating the version with its index in the old version slice. -func GetRemovedVersions(old, new []core.ExpirableVersion) map[string]int { - return getVersionDiff(old, new) +func GetRemovedVersions(oldVersions, newVersions []core.ExpirableVersion) map[string]int { + return getVersionDiff(oldVersions, newVersions) } -// GetAddedVersions finds versions that have been added in the new compared to the new version slice. +// GetAddedVersions finds versions that have been added in the new compared to the old version slice. // returns a map associating the version with its index in the old version slice. -func GetAddedVersions(old, new []core.ExpirableVersion) map[string]int { - return getVersionDiff(new, old) +func GetAddedVersions(oldVersions, newVersions []core.ExpirableVersion) map[string]int { + return getVersionDiff(newVersions, oldVersions) } // getVersionDiff gets versions that are in v1 but not in v2. @@ -248,7 +248,7 @@ type MachineImageDiff struct { } // GetMachineImageDiff returns the removed and added machine images and versions from the diff of two slices. -func GetMachineImageDiff(old, new []core.MachineImage) MachineImageDiff { +func GetMachineImageDiff(oldImages, newImages []core.MachineImage) MachineImageDiff { diff := MachineImageDiff{ RemovedImages: sets.Set[string]{}, RemovedVersions: map[string]sets.Set[string]{}, @@ -257,13 +257,13 @@ func GetMachineImageDiff(old, new []core.MachineImage) MachineImageDiff { AddedVersions: map[string]sets.Set[string]{}, } - oldImages := utils.CreateMapFromSlice(old, func(image core.MachineImage) string { return image.Name }) - newImages := utils.CreateMapFromSlice(new, func(image core.MachineImage) string { return image.Name }) + oldImageMap := utils.CreateMapFromSlice(oldImages, func(image core.MachineImage) string { return image.Name }) + newImageMap := utils.CreateMapFromSlice(newImages, func(image core.MachineImage) string { return image.Name }) - for imageName, oldImage := range oldImages { + for imageName, oldImage := range oldImageMap { oldImageVersions := utils.CreateMapFromSlice(oldImage.Versions, func(version core.MachineImageVersion) string { return version.Version }) oldImageVersionsSet := sets.KeySet(oldImageVersions) - newImage, exists := newImages[imageName] + newImage, exists := newImageMap[imageName] if !exists { // Completely removed images. diff.RemovedImages.Insert(imageName) @@ -306,8 +306,8 @@ func GetMachineImageDiff(old, new []core.MachineImage) MachineImageDiff { } } - for imageName, newImage := range newImages { - if _, exists := oldImages[imageName]; !exists { + for imageName, newImage := range newImageMap { + if _, exists := oldImageMap[imageName]; !exists { // Completely new image. newImageVersions := utils.CreateMapFromSlice(newImage.Versions, func(version core.MachineImageVersion) string { return version.Version }) newImageVersionsSet := sets.KeySet(newImageVersions) diff --git a/pkg/api/core/v1beta1/helper/condition_builder.go b/pkg/api/core/v1beta1/helper/condition_builder.go index aea0d064a5b..0f1c4a23af4 100644 --- a/pkg/api/core/v1beta1/helper/condition_builder.go +++ b/pkg/api/core/v1beta1/helper/condition_builder.go @@ -22,7 +22,7 @@ type ConditionBuilder interface { WithMessage(message string) ConditionBuilder WithCodes(codes ...gardencorev1beta1.ErrorCode) ConditionBuilder WithClock(clock clock.Clock) ConditionBuilder - Build() (new gardencorev1beta1.Condition, updated bool) + Build() (newCondition gardencorev1beta1.Condition, updated bool) } // defaultConditionBuilder build a Condition. diff --git a/pkg/api/core/validation/cloudprofile.go b/pkg/api/core/validation/cloudprofile.go index 1627ac8441c..852eeab0796 100644 --- a/pkg/api/core/validation/cloudprofile.go +++ b/pkg/api/core/validation/cloudprofile.go @@ -61,18 +61,18 @@ func ValidateCloudProfileStatusUpdate(_, _ *core.CloudProfileStatus) field.Error } // ValidateCloudProfileSpecUpdate validates the spec update of a CloudProfile -func ValidateCloudProfileSpecUpdate(new, old *core.CloudProfileSpec, fldPath *field.Path) field.ErrorList { +func ValidateCloudProfileSpecUpdate(newSpec, oldSpec *core.CloudProfileSpec, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, validateCloudProfileLimitsUpdate(new.Limits, old.Limits, fldPath.Child("limits"))...) - allErrs = append(allErrs, ValidateCloudProfileExpirableVersionsUpdate(new.Kubernetes.Versions, old.Kubernetes.Versions, fldPath.Child("kubernetes").Child("versions"))...) + allErrs = append(allErrs, validateCloudProfileLimitsUpdate(newSpec.Limits, oldSpec.Limits, fldPath.Child("limits"))...) + allErrs = append(allErrs, ValidateCloudProfileExpirableVersionsUpdate(newSpec.Kubernetes.Versions, oldSpec.Kubernetes.Versions, fldPath.Child("kubernetes").Child("versions"))...) oldMachineImageVersions := map[string]core.MachineImage{} - for _, version := range old.MachineImages { + for _, version := range oldSpec.MachineImages { oldMachineImageVersions[version.Name] = version } - for i, newMachineImage := range new.MachineImages { + for i, newMachineImage := range newSpec.MachineImages { oldMachineImage, ok := oldMachineImageVersions[newMachineImage.Name] if !ok { continue @@ -96,16 +96,16 @@ func ValidateCloudProfileSpecUpdate(new, old *core.CloudProfileSpec, fldPath *fi } // ValidateCloudProfileExpirableVersionsUpdate validates the expirable versions update of a CloudProfile expirable version -func ValidateCloudProfileExpirableVersionsUpdate(new, old []core.ExpirableVersion, fldPath *field.Path) field.ErrorList { +func ValidateCloudProfileExpirableVersionsUpdate(newVersions, oldVersions []core.ExpirableVersion, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - oldVersions := map[string]core.ExpirableVersion{} - for _, version := range old { - oldVersions[version.Version] = version + oldVersionsMap := map[string]core.ExpirableVersion{} + for _, version := range oldVersions { + oldVersionsMap[version.Version] = version } - for i, newVersion := range new { - oldVersion, ok := oldVersions[newVersion.Version] + for i, newVersion := range newVersions { + oldVersion, ok := oldVersionsMap[newVersion.Version] if !ok { continue } diff --git a/pkg/api/core/validation/controllerdeployment.go b/pkg/api/core/validation/controllerdeployment.go index 34f310bff9d..944064f7f55 100644 --- a/pkg/api/core/validation/controllerdeployment.go +++ b/pkg/api/core/validation/controllerdeployment.go @@ -56,8 +56,8 @@ func ValidateControllerDeployment(controllerDeployment *core.ControllerDeploymen } // ValidateControllerDeploymentUpdate validates a ControllerDeployment object before an update. -func ValidateControllerDeploymentUpdate(new, _ *core.ControllerDeployment) field.ErrorList { - return ValidateControllerDeployment(new) +func ValidateControllerDeploymentUpdate(newControllerDeployment, _ *core.ControllerDeployment) field.ErrorList { + return ValidateControllerDeployment(newControllerDeployment) } // ValidateHelmControllerDeployment validates Helm controller deployment configs. diff --git a/pkg/api/core/validation/controllerinstallation.go b/pkg/api/core/validation/controllerinstallation.go index 6c319af759b..95baa770cc0 100644 --- a/pkg/api/core/validation/controllerinstallation.go +++ b/pkg/api/core/validation/controllerinstallation.go @@ -27,12 +27,12 @@ func ValidateControllerInstallation(controllerInstallation *core.ControllerInsta } // ValidateControllerInstallationUpdate validates a ControllerInstallation object before an update. -func ValidateControllerInstallationUpdate(new, old *core.ControllerInstallation) field.ErrorList { +func ValidateControllerInstallationUpdate(newControllerInstallation, oldControllerInstallation *core.ControllerInstallation) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateControllerInstallationSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateControllerInstallation(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newControllerInstallation.ObjectMeta, &oldControllerInstallation.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateControllerInstallationSpecUpdate(&newControllerInstallation.Spec, &oldControllerInstallation.Spec, newControllerInstallation.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateControllerInstallation(newControllerInstallation)...) return allErrs } @@ -69,25 +69,25 @@ func ValidateControllerInstallationSpec(spec *core.ControllerInstallationSpec, f } // ValidateControllerInstallationSpecUpdate validates the spec of a ControllerInstallation object before an update. -func ValidateControllerInstallationSpecUpdate(new, old *core.ControllerInstallationSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateControllerInstallationSpecUpdate(newSpec, oldSpec *core.ControllerInstallationSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update controller installation spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.RegistrationRef.Name, old.RegistrationRef.Name, fldPath.Child("registrationRef", "name"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.RegistrationRef.Name, oldSpec.RegistrationRef.Name, fldPath.Child("registrationRef", "name"))...) - if old.SeedRef != nil && new.SeedRef != nil { - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.SeedRef.Name, old.SeedRef.Name, fldPath.Child("seedRef", "name"))...) + if oldSpec.SeedRef != nil && newSpec.SeedRef != nil { + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.SeedRef.Name, oldSpec.SeedRef.Name, fldPath.Child("seedRef", "name"))...) } - if old.ShootRef == nil || new.ShootRef == nil { - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.ShootRef, old.ShootRef, fldPath.Child("shootRef"))...) - } else if new.ShootRef != nil { - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.ShootRef.Name, old.ShootRef.Name, fldPath.Child("shootRef", "name"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.ShootRef.Namespace, old.ShootRef.Namespace, fldPath.Child("shootRef", "namespace"))...) + if oldSpec.ShootRef == nil || newSpec.ShootRef == nil { + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.ShootRef, oldSpec.ShootRef, fldPath.Child("shootRef"))...) + } else if newSpec.ShootRef != nil { + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.ShootRef.Name, oldSpec.ShootRef.Name, fldPath.Child("shootRef", "name"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.ShootRef.Namespace, oldSpec.ShootRef.Namespace, fldPath.Child("shootRef", "namespace"))...) } return allErrs diff --git a/pkg/api/core/validation/controllerregistration.go b/pkg/api/core/validation/controllerregistration.go index dc00498cc84..9f46482ecc0 100644 --- a/pkg/api/core/validation/controllerregistration.go +++ b/pkg/api/core/validation/controllerregistration.go @@ -189,39 +189,39 @@ func ValidateControllerResources(resources []core.ControllerResource, clusterTyp } // ValidateControllerRegistrationUpdate validates a ControllerRegistration object before an update. -func ValidateControllerRegistrationUpdate(new, old *core.ControllerRegistration) field.ErrorList { +func ValidateControllerRegistrationUpdate(newControllerRegistration, oldControllerRegistration *core.ControllerRegistration) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateControllerRegistrationSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateControllerRegistration(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newControllerRegistration.ObjectMeta, &oldControllerRegistration.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateControllerRegistrationSpecUpdate(&newControllerRegistration.Spec, &oldControllerRegistration.Spec, newControllerRegistration.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateControllerRegistration(newControllerRegistration)...) return allErrs } // ValidateControllerRegistrationSpecUpdate validates a ControllerRegistration spec before an update. -func ValidateControllerRegistrationSpecUpdate(new, old *core.ControllerRegistrationSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateControllerRegistrationSpecUpdate(newSpec, oldSpec *core.ControllerRegistrationSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update controller registration spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, ValidateControllerResourcesUpdate(new.Resources, old.Resources, fldPath.Child("resources"))...) + allErrs = append(allErrs, ValidateControllerResourcesUpdate(newSpec.Resources, oldSpec.Resources, fldPath.Child("resources"))...) return allErrs } // ValidateControllerResourcesUpdate validates the update of ControllerResource objects. -func ValidateControllerResourcesUpdate(new, old []core.ControllerResource, fldPath *field.Path) field.ErrorList { +func ValidateControllerResourcesUpdate(newResources, oldResources []core.ControllerResource, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - kindTypeToPrimary := make(map[string]*bool, len(old)) - for _, resource := range old { + kindTypeToPrimary := make(map[string]*bool, len(oldResources)) + for _, resource := range oldResources { kindTypeToPrimary[gardenerutils.ExtensionsID(resource.Kind, resource.Type)] = resource.Primary } - for i, resource := range new { + for i, resource := range newResources { if primary, ok := kindTypeToPrimary[gardenerutils.ExtensionsID(resource.Kind, resource.Type)]; ok { allErrs = append(allErrs, apivalidation.ValidateImmutableField(resource.Primary, primary, fldPath.Index(i).Child("primary"))...) } diff --git a/pkg/api/core/validation/exposureclass.go b/pkg/api/core/validation/exposureclass.go index 872310c6929..cb969e51680 100644 --- a/pkg/api/core/validation/exposureclass.go +++ b/pkg/api/core/validation/exposureclass.go @@ -43,10 +43,10 @@ func ValidateExposureClass(exposureClass *core.ExposureClass) field.ErrorList { } // ValidateExposureClassUpdate validates a ExposureClass object before an update. -func ValidateExposureClassUpdate(new, old *core.ExposureClass) field.ErrorList { +func ValidateExposureClassUpdate(newExposureClass, oldExposureClass *core.ExposureClass) field.ErrorList { var allErrs = field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateImmutableField(old.Handler, new.Handler, field.NewPath("handler"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(old.Scheduling, new.Scheduling, field.NewPath("scheduling"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(oldExposureClass.Handler, newExposureClass.Handler, field.NewPath("handler"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(oldExposureClass.Scheduling, newExposureClass.Scheduling, field.NewPath("scheduling"))...) return allErrs } diff --git a/pkg/api/core/validation/project_test.go b/pkg/api/core/validation/project_test.go index b4f3d58ec63..827f7e24d99 100644 --- a/pkg/api/core/validation/project_test.go +++ b/pkg/api/core/validation/project_test.go @@ -625,10 +625,10 @@ var _ = Describe("Project Validation Tests", func() { }) DescribeTable("namespace immutability", - func(old, new *string, matcher gomegatypes.GomegaMatcher) { - project.Spec.Namespace = old + func(oldNamespace, newNamespace *string, matcher gomegatypes.GomegaMatcher) { + project.Spec.Namespace = oldNamespace newProject := prepareProjectForUpdate(project) - newProject.Spec.Namespace = new + newProject.Spec.Namespace = newNamespace errList := ValidateProjectUpdate(newProject, project) diff --git a/pkg/api/core/validation/shoot.go b/pkg/api/core/validation/shoot.go index cc3f94c690a..17582f5f036 100644 --- a/pkg/api/core/validation/shoot.go +++ b/pkg/api/core/validation/shoot.go @@ -840,22 +840,22 @@ func validateKubeControllerManagerUpdate(newConfig, oldConfig *core.KubeControll return allErrs } -func validateDNSUpdate(new, old *core.DNS, seedGotAssigned bool, fldPath *field.Path) field.ErrorList { +func validateDNSUpdate(newDNS, oldDNS *core.DNS, seedGotAssigned bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if old != nil && new == nil { - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new, old, fldPath)...) + if oldDNS != nil && newDNS == nil { + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newDNS, oldDNS, fldPath)...) } - if new != nil && old != nil { - if old.Domain != nil && new.Domain != old.Domain { - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Domain, old.Domain, fldPath.Child("domain"))...) + if newDNS != nil && oldDNS != nil { + if oldDNS.Domain != nil && newDNS.Domain != oldDNS.Domain { + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newDNS.Domain, oldDNS.Domain, fldPath.Child("domain"))...) } if seedGotAssigned { var ( - primaryOld = helper.FindPrimaryDNSProvider(old.Providers) - primaryNew = helper.FindPrimaryDNSProvider(new.Providers) + primaryOld = helper.FindPrimaryDNSProvider(oldDNS.Providers) + primaryNew = helper.FindPrimaryDNSProvider(newDNS.Providers) ) if primaryOld != nil && primaryNew == nil { @@ -876,18 +876,18 @@ func validateDNSUpdate(new, old *core.DNS, seedGotAssigned bool, fldPath *field. } // ValidateKubernetesVersionUpdate ensures that new version is newer than old version and does not skip minor versions when not allowed -func ValidateKubernetesVersionUpdate(new, old string, skipMinorVersionAllowed bool, fldPath *field.Path) field.ErrorList { +func ValidateKubernetesVersionUpdate(newVersion, oldVersion string, skipMinorVersionAllowed bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if len(new) == 0 { - allErrs = append(allErrs, field.Invalid(fldPath, new, "cannot validate kubernetes version upgrade because it is unset")) + if len(newVersion) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath, newVersion, "cannot validate kubernetes version upgrade because it is unset")) return allErrs } // Forbid Kubernetes version downgrade - downgrade, err := versionutils.CompareVersions(new, "<", old) + downgrade, err := versionutils.CompareVersions(newVersion, "<", oldVersion) if err != nil { - allErrs = append(allErrs, field.Invalid(fldPath, new, err.Error())) + allErrs = append(allErrs, field.Invalid(fldPath, newVersion, err.Error())) } if downgrade { allErrs = append(allErrs, field.Forbidden(fldPath, "kubernetes version downgrade is not supported")) @@ -895,15 +895,15 @@ func ValidateKubernetesVersionUpdate(new, old string, skipMinorVersionAllowed bo if !skipMinorVersionAllowed { // Forbid Kubernetes version upgrade which skips a minor version - oldVersion, err := semver.NewVersion(old) + oldSemVer, err := semver.NewVersion(oldVersion) if err != nil { - allErrs = append(allErrs, field.Invalid(fldPath, old, err.Error())) + allErrs = append(allErrs, field.Invalid(fldPath, oldVersion, err.Error())) } - nextMinorVersion := oldVersion.IncMinor().IncMinor() + nextMinorVersion := oldSemVer.IncMinor().IncMinor() - skippingMinorVersion, err := versionutils.CompareVersions(new, ">=", nextMinorVersion.String()) + skippingMinorVersion, err := versionutils.CompareVersions(newVersion, ">=", nextMinorVersion.String()) if err != nil { - allErrs = append(allErrs, field.Invalid(fldPath, new, err.Error())) + allErrs = append(allErrs, field.Invalid(fldPath, newVersion, err.Error())) } if skippingMinorVersion { allErrs = append(allErrs, field.Forbidden(fldPath, "kubernetes version upgrade cannot skip a minor version")) @@ -914,21 +914,21 @@ func ValidateKubernetesVersionUpdate(new, old string, skipMinorVersionAllowed bo } // validateMachineImageVersionInPlaceUpdate ensures that the new machine image version is newer than old version in case the strategy is in-place update -func validateMachineImageVersionInPlaceUpdate(new, old *core.ShootMachineImage, fldPath *field.Path) field.ErrorList { +func validateMachineImageVersionInPlaceUpdate(newMachineImage, oldMachineImage *core.ShootMachineImage, fldPath *field.Path) field.ErrorList { var ( allErrs = field.ErrorList{} newVersion, oldVersion string ) - if new != nil { - newVersion = new.Version + if newMachineImage != nil { + newVersion = newMachineImage.Version } - if old != nil { - oldVersion = old.Version + if oldMachineImage != nil { + oldVersion = oldMachineImage.Version } if len(newVersion) == 0 { - allErrs = append(allErrs, field.Invalid(fldPath, new, "cannot validate machine image version upgrade because it is unset")) + allErrs = append(allErrs, field.Invalid(fldPath, newMachineImage, "cannot validate machine image version upgrade because it is unset")) return allErrs } @@ -1738,36 +1738,36 @@ func validatePercentile(percentile float64, fldPath *field.Path) field.ErrorList return allErrs } -func validateHibernationUpdate(new, old *core.Shoot) field.ErrorList { +func validateHibernationUpdate(newShoot, oldShoot *core.Shoot) field.ErrorList { var ( allErrs = field.ErrorList{} fldPath = field.NewPath("spec", "hibernation", "enabled") - hibernationEnabledInOld = old.Spec.Hibernation != nil && ptr.Deref(old.Spec.Hibernation.Enabled, false) - hibernationEnabledInNew = new.Spec.Hibernation != nil && ptr.Deref(new.Spec.Hibernation.Enabled, false) + hibernationEnabledInOld = oldShoot.Spec.Hibernation != nil && ptr.Deref(oldShoot.Spec.Hibernation.Enabled, false) + hibernationEnabledInNew = newShoot.Spec.Hibernation != nil && ptr.Deref(newShoot.Spec.Hibernation.Enabled, false) encryptedResourcesInOldSpec = sets.New[schema.GroupResource]() encryptedResourcesInStatus = sets.New[schema.GroupResource]() ) - if old.Spec.Kubernetes.KubeAPIServer != nil && old.Spec.Kubernetes.KubeAPIServer.EncryptionConfig != nil { - for _, r := range old.Spec.Kubernetes.KubeAPIServer.EncryptionConfig.Resources { + if oldShoot.Spec.Kubernetes.KubeAPIServer != nil && oldShoot.Spec.Kubernetes.KubeAPIServer.EncryptionConfig != nil { + for _, r := range oldShoot.Spec.Kubernetes.KubeAPIServer.EncryptionConfig.Resources { encryptedResourcesInOldSpec.Insert(schema.ParseGroupResource(r)) } } - if old.Status.Credentials != nil && old.Status.Credentials.EncryptionAtRest != nil { - for _, er := range old.Status.Credentials.EncryptionAtRest.Resources { + if oldShoot.Status.Credentials != nil && oldShoot.Status.Credentials.EncryptionAtRest != nil { + for _, er := range oldShoot.Status.Credentials.EncryptionAtRest.Resources { encryptedResourcesInStatus.Insert(schema.ParseGroupResource(er)) } } if !hibernationEnabledInOld && hibernationEnabledInNew { - if new.Status.Credentials != nil && new.Status.Credentials.Rotation != nil && new.Status.Credentials.Rotation.ETCDEncryptionKey != nil { - if etcdEncryptionKeyRotation := new.Status.Credentials.Rotation.ETCDEncryptionKey; etcdEncryptionKeyRotation.Phase == core.RotationPreparing || etcdEncryptionKeyRotation.Phase == core.RotationCompleting { + if newShoot.Status.Credentials != nil && newShoot.Status.Credentials.Rotation != nil && newShoot.Status.Credentials.Rotation.ETCDEncryptionKey != nil { + if etcdEncryptionKeyRotation := newShoot.Status.Credentials.Rotation.ETCDEncryptionKey; etcdEncryptionKeyRotation.Phase == core.RotationPreparing || etcdEncryptionKeyRotation.Phase == core.RotationCompleting { allErrs = append(allErrs, field.Forbidden(fldPath, fmt.Sprintf("shoot cannot be hibernated when .status.credentials.rotation.etcdEncryptionKey.phase is %q", string(etcdEncryptionKeyRotation.Phase)))) } } - if new.Status.Credentials != nil && new.Status.Credentials.Rotation != nil && new.Status.Credentials.Rotation.ServiceAccountKey != nil { - if serviceAccountKeyRotation := new.Status.Credentials.Rotation.ServiceAccountKey; sets.New(core.RotationPreparing, core.RotationPreparingWithoutWorkersRollout, core.RotationCompleting).Has(serviceAccountKeyRotation.Phase) { + if newShoot.Status.Credentials != nil && newShoot.Status.Credentials.Rotation != nil && newShoot.Status.Credentials.Rotation.ServiceAccountKey != nil { + if serviceAccountKeyRotation := newShoot.Status.Credentials.Rotation.ServiceAccountKey; sets.New(core.RotationPreparing, core.RotationPreparingWithoutWorkersRollout, core.RotationCompleting).Has(serviceAccountKeyRotation.Phase) { allErrs = append(allErrs, field.Forbidden(fldPath, fmt.Sprintf("shoot cannot be hibernated when .status.credentials.rotation.serviceAccountKey.phase is %q", string(serviceAccountKeyRotation.Phase)))) } } diff --git a/pkg/api/extensions/validation/backupbucket.go b/pkg/api/extensions/validation/backupbucket.go index 8a9a6501964..cf520121547 100644 --- a/pkg/api/extensions/validation/backupbucket.go +++ b/pkg/api/extensions/validation/backupbucket.go @@ -26,12 +26,12 @@ func ValidateBackupBucket(bb *extensionsv1alpha1.BackupBucket) field.ErrorList { } // ValidateBackupBucketUpdate validates a BackupBucket object before an update. -func ValidateBackupBucketUpdate(new, old *extensionsv1alpha1.BackupBucket) field.ErrorList { +func ValidateBackupBucketUpdate(newBackupBucket, oldBackupBucket *extensionsv1alpha1.BackupBucket) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateBackupBucketSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateBackupBucket(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newBackupBucket.ObjectMeta, &oldBackupBucket.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateBackupBucketSpecUpdate(&newBackupBucket.Spec, &oldBackupBucket.Spec, newBackupBucket.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateBackupBucket(newBackupBucket)...) return allErrs } @@ -56,16 +56,16 @@ func ValidateBackupBucketSpec(spec *extensionsv1alpha1.BackupBucketSpec, fldPath } // ValidateBackupBucketSpecUpdate validates the spec of a BackupBucket object before an update. -func ValidateBackupBucketSpecUpdate(new, old *extensionsv1alpha1.BackupBucketSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateBackupBucketSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.BackupBucketSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update backup bucket spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Region, old.Region, fldPath.Child("region"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Region, oldSpec.Region, fldPath.Child("region"))...) return allErrs } diff --git a/pkg/api/extensions/validation/backupentry.go b/pkg/api/extensions/validation/backupentry.go index 7661fa62b3b..fa5f7a80445 100644 --- a/pkg/api/extensions/validation/backupentry.go +++ b/pkg/api/extensions/validation/backupentry.go @@ -26,12 +26,12 @@ func ValidateBackupEntry(be *extensionsv1alpha1.BackupEntry) field.ErrorList { } // ValidateBackupEntryUpdate validates a BackupEntry object before an update. -func ValidateBackupEntryUpdate(new, old *extensionsv1alpha1.BackupEntry) field.ErrorList { +func ValidateBackupEntryUpdate(newBackupEntry, oldBackupEntry *extensionsv1alpha1.BackupEntry) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateBackupEntrySpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateBackupEntry(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newBackupEntry.ObjectMeta, &oldBackupEntry.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateBackupEntrySpecUpdate(&newBackupEntry.Spec, &oldBackupEntry.Spec, newBackupEntry.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateBackupEntry(newBackupEntry)...) return allErrs } @@ -60,15 +60,15 @@ func ValidateBackupEntrySpec(spec *extensionsv1alpha1.BackupEntrySpec, fldPath * } // ValidateBackupEntrySpecUpdate validates the spec of a BackupEntry object before an update. -func ValidateBackupEntrySpecUpdate(new, old *extensionsv1alpha1.BackupEntrySpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateBackupEntrySpecUpdate(newSpec, oldSpec *extensionsv1alpha1.BackupEntrySpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update backup entry spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) return allErrs } diff --git a/pkg/api/extensions/validation/bastion.go b/pkg/api/extensions/validation/bastion.go index fa1d4176e9b..e14685ba7a7 100644 --- a/pkg/api/extensions/validation/bastion.go +++ b/pkg/api/extensions/validation/bastion.go @@ -26,12 +26,12 @@ func ValidateBastion(bastion *extensionsv1alpha1.Bastion) field.ErrorList { } // ValidateBastionUpdate validates a Bastion object before an update. -func ValidateBastionUpdate(new, old *extensionsv1alpha1.Bastion) field.ErrorList { +func ValidateBastionUpdate(newBastion, oldBastion *extensionsv1alpha1.Bastion) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateBastionSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateBastion(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newBastion.ObjectMeta, &oldBastion.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateBastionSpecUpdate(&newBastion.Spec, &oldBastion.Spec, newBastion.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateBastion(newBastion)...) return allErrs } @@ -56,16 +56,16 @@ func ValidateBastionSpec(spec *extensionsv1alpha1.BastionSpec, fldPath *field.Pa } // ValidateBastionSpecUpdate validates the spec of a Bastion object before an update. -func ValidateBastionSpecUpdate(new, old *extensionsv1alpha1.BastionSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateBastionSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.BastionSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update bastion spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.UserData, old.UserData, fldPath.Child("userData"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.UserData, oldSpec.UserData, fldPath.Child("userData"))...) return allErrs } diff --git a/pkg/api/extensions/validation/containerruntime.go b/pkg/api/extensions/validation/containerruntime.go index bd1e16ae09f..4755d19db85 100644 --- a/pkg/api/extensions/validation/containerruntime.go +++ b/pkg/api/extensions/validation/containerruntime.go @@ -26,12 +26,12 @@ func ValidateContainerRuntime(cr *extensionsv1alpha1.ContainerRuntime) field.Err } // ValidateContainerRuntimeUpdate validates a ContainerRuntime object before an update. -func ValidateContainerRuntimeUpdate(new, old *extensionsv1alpha1.ContainerRuntime) field.ErrorList { +func ValidateContainerRuntimeUpdate(newContainerRuntime, oldContainerRuntime *extensionsv1alpha1.ContainerRuntime) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateContainerRuntimeSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateContainerRuntime(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newContainerRuntime.ObjectMeta, &oldContainerRuntime.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateContainerRuntimeSpecUpdate(&newContainerRuntime.Spec, &oldContainerRuntime.Spec, newContainerRuntime.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateContainerRuntime(newContainerRuntime)...) return allErrs } @@ -56,16 +56,16 @@ func ValidateContainerRuntimeSpec(spec *extensionsv1alpha1.ContainerRuntimeSpec, } // ValidateContainerRuntimeSpecUpdate validates the spec of a ContainerRuntime object before an update. -func ValidateContainerRuntimeSpecUpdate(new, old *extensionsv1alpha1.ContainerRuntimeSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateContainerRuntimeSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.ContainerRuntimeSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update container runtime spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.WorkerPool.Name, old.WorkerPool.Name, fldPath.Child("workerPool", "name"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.WorkerPool.Name, oldSpec.WorkerPool.Name, fldPath.Child("workerPool", "name"))...) return allErrs } diff --git a/pkg/api/extensions/validation/controlplane.go b/pkg/api/extensions/validation/controlplane.go index c21a3e2e5d4..9f5eda4ee9c 100644 --- a/pkg/api/extensions/validation/controlplane.go +++ b/pkg/api/extensions/validation/controlplane.go @@ -26,12 +26,12 @@ func ValidateControlPlane(cp *extensionsv1alpha1.ControlPlane) field.ErrorList { } // ValidateControlPlaneUpdate validates a ControlPlane object before an update. -func ValidateControlPlaneUpdate(new, old *extensionsv1alpha1.ControlPlane) field.ErrorList { +func ValidateControlPlaneUpdate(newControlPlane, oldControlPlane *extensionsv1alpha1.ControlPlane) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateControlPlaneSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateControlPlane(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newControlPlane.ObjectMeta, &oldControlPlane.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateControlPlaneSpecUpdate(&newControlPlane.Spec, &oldControlPlane.Spec, newControlPlane.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateControlPlane(newControlPlane)...) return allErrs } @@ -56,16 +56,16 @@ func ValidateControlPlaneSpec(spec *extensionsv1alpha1.ControlPlaneSpec, fldPath } // ValidateControlPlaneSpecUpdate validates the spec of a ControlPlane object before an update. -func ValidateControlPlaneSpecUpdate(new, old *extensionsv1alpha1.ControlPlaneSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateControlPlaneSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.ControlPlaneSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update control plane spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Region, old.Region, fldPath.Child("region"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Region, oldSpec.Region, fldPath.Child("region"))...) return allErrs } diff --git a/pkg/api/extensions/validation/dnsrecord.go b/pkg/api/extensions/validation/dnsrecord.go index aa90371b75a..5223d8eeb33 100644 --- a/pkg/api/extensions/validation/dnsrecord.go +++ b/pkg/api/extensions/validation/dnsrecord.go @@ -30,12 +30,12 @@ func ValidateDNSRecord(dns *extensionsv1alpha1.DNSRecord) field.ErrorList { } // ValidateDNSRecordUpdate validates a DNSRecord object before an update. -func ValidateDNSRecordUpdate(new, old *extensionsv1alpha1.DNSRecord) field.ErrorList { +func ValidateDNSRecordUpdate(newDNSRecord, oldDNSRecord *extensionsv1alpha1.DNSRecord) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateDNSRecordSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateDNSRecord(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newDNSRecord.ObjectMeta, &oldDNSRecord.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateDNSRecordSpecUpdate(&newDNSRecord.Spec, &oldDNSRecord.Spec, newDNSRecord.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateDNSRecord(newDNSRecord)...) return allErrs } @@ -97,17 +97,17 @@ func ValidateDNSRecordSpec(spec *extensionsv1alpha1.DNSRecordSpec, fldPath *fiel } // ValidateDNSRecordSpecUpdate validates the spec of a DNSRecord object before an update. -func ValidateDNSRecordSpecUpdate(new, old *extensionsv1alpha1.DNSRecordSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateDNSRecordSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.DNSRecordSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update dns record spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Name, old.Name, fldPath.Child("name"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.RecordType, old.RecordType, fldPath.Child("recordType"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Name, oldSpec.Name, fldPath.Child("name"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.RecordType, oldSpec.RecordType, fldPath.Child("recordType"))...) return allErrs } diff --git a/pkg/api/extensions/validation/extension.go b/pkg/api/extensions/validation/extension.go index b6385d7e07c..72d6c8ba35c 100644 --- a/pkg/api/extensions/validation/extension.go +++ b/pkg/api/extensions/validation/extension.go @@ -26,12 +26,12 @@ func ValidateExtension(ext *extensionsv1alpha1.Extension) field.ErrorList { } // ValidateExtensionUpdate validates a Extension object before an update. -func ValidateExtensionUpdate(new, old *extensionsv1alpha1.Extension) field.ErrorList { +func ValidateExtensionUpdate(newExtension, oldExtension *extensionsv1alpha1.Extension) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateExtensionSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateExtension(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newExtension.ObjectMeta, &oldExtension.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateExtensionSpecUpdate(&newExtension.Spec, &oldExtension.Spec, newExtension.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateExtension(newExtension)...) return allErrs } @@ -48,15 +48,15 @@ func ValidateExtensionSpec(spec *extensionsv1alpha1.ExtensionSpec, fldPath *fiel } // ValidateExtensionSpecUpdate validates the spec of a Extension object before an update. -func ValidateExtensionSpecUpdate(new, old *extensionsv1alpha1.ExtensionSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateExtensionSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.ExtensionSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update extension spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) return allErrs } diff --git a/pkg/api/extensions/validation/infrastructure.go b/pkg/api/extensions/validation/infrastructure.go index 659bc862011..7e48576e738 100644 --- a/pkg/api/extensions/validation/infrastructure.go +++ b/pkg/api/extensions/validation/infrastructure.go @@ -26,12 +26,12 @@ func ValidateInfrastructure(infra *extensionsv1alpha1.Infrastructure) field.Erro } // ValidateInfrastructureUpdate validates an Infrastructure object before an update. -func ValidateInfrastructureUpdate(new, old *extensionsv1alpha1.Infrastructure) field.ErrorList { +func ValidateInfrastructureUpdate(newInfrastructure, oldInfrastructure *extensionsv1alpha1.Infrastructure) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateInfrastructureSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateInfrastructure(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newInfrastructure.ObjectMeta, &oldInfrastructure.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateInfrastructureSpecUpdate(&newInfrastructure.Spec, &oldInfrastructure.Spec, newInfrastructure.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateInfrastructure(newInfrastructure)...) return allErrs } @@ -56,16 +56,16 @@ func ValidateInfrastructureSpec(spec *extensionsv1alpha1.InfrastructureSpec, fld } // ValidateInfrastructureSpecUpdate validates the spec of an Infrastructure object before an update. -func ValidateInfrastructureSpecUpdate(new, old *extensionsv1alpha1.InfrastructureSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateInfrastructureSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.InfrastructureSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update infrastructure spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Region, old.Region, fldPath.Child("region"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Region, oldSpec.Region, fldPath.Child("region"))...) return allErrs } diff --git a/pkg/api/extensions/validation/network.go b/pkg/api/extensions/validation/network.go index 68485aa32d3..291918c3ac8 100644 --- a/pkg/api/extensions/validation/network.go +++ b/pkg/api/extensions/validation/network.go @@ -29,12 +29,12 @@ func ValidateNetwork(network *extensionsv1alpha1.Network) field.ErrorList { } // ValidateNetworkUpdate validates a Network object before an update. -func ValidateNetworkUpdate(new, old *extensionsv1alpha1.Network) field.ErrorList { +func ValidateNetworkUpdate(newNetwork, oldNetwork *extensionsv1alpha1.Network) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateNetworkSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateNetwork(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newNetwork.ObjectMeta, &oldNetwork.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateNetworkSpecUpdate(&newNetwork.Spec, &oldNetwork.Spec, newNetwork.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateNetwork(newNetwork)...) return allErrs } @@ -82,18 +82,18 @@ func ValidateNetworkSpec(spec *extensionsv1alpha1.NetworkSpec, fldPath *field.Pa } // ValidateNetworkSpecUpdate validates the spec of a Network object before an update. -func ValidateNetworkSpecUpdate(new, old *extensionsv1alpha1.NetworkSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateNetworkSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.NetworkSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update network spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, ValidateIPFamiliesUpdate(new.IPFamilies, old.IPFamilies, fldPath.Child("ipFamilies"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.PodCIDR, old.PodCIDR, fldPath.Child("podCIDR"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.ServiceCIDR, old.ServiceCIDR, fldPath.Child("serviceCIDR"))...) + allErrs = append(allErrs, ValidateIPFamiliesUpdate(newSpec.IPFamilies, oldSpec.IPFamilies, fldPath.Child("ipFamilies"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.PodCIDR, oldSpec.PodCIDR, fldPath.Child("podCIDR"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.ServiceCIDR, oldSpec.ServiceCIDR, fldPath.Child("serviceCIDR"))...) return allErrs } diff --git a/pkg/api/extensions/validation/operatingsystemconfig.go b/pkg/api/extensions/validation/operatingsystemconfig.go index a1370dcc1ee..55e16f324eb 100644 --- a/pkg/api/extensions/validation/operatingsystemconfig.go +++ b/pkg/api/extensions/validation/operatingsystemconfig.go @@ -41,12 +41,12 @@ func ValidateOperatingSystemConfig(osc *extensionsv1alpha1.OperatingSystemConfig } // ValidateOperatingSystemConfigUpdate validates a OperatingSystemConfig object before an update. -func ValidateOperatingSystemConfigUpdate(new, old *extensionsv1alpha1.OperatingSystemConfig) field.ErrorList { +func ValidateOperatingSystemConfigUpdate(newOperatingSystemConfig, oldOperatingSystemConfig *extensionsv1alpha1.OperatingSystemConfig) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateOperatingSystemConfigSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateOperatingSystemConfig(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newOperatingSystemConfig.ObjectMeta, &oldOperatingSystemConfig.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateOperatingSystemConfigSpecUpdate(&newOperatingSystemConfig.Spec, &oldOperatingSystemConfig.Spec, newOperatingSystemConfig.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateOperatingSystemConfig(newOperatingSystemConfig)...) return allErrs } @@ -384,16 +384,16 @@ func ValidateFiles(files []extensionsv1alpha1.File, fldPath *field.Path) field.E } // ValidateOperatingSystemConfigSpecUpdate validates the spec of a OperatingSystemConfig object before an update. -func ValidateOperatingSystemConfigSpecUpdate(new, old *extensionsv1alpha1.OperatingSystemConfigSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateOperatingSystemConfigSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.OperatingSystemConfigSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update operatingsystemconfig spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Purpose, old.Purpose, fldPath.Child("purpose"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Purpose, oldSpec.Purpose, fldPath.Child("purpose"))...) return allErrs } diff --git a/pkg/api/extensions/validation/selfhostedshootexposure.go b/pkg/api/extensions/validation/selfhostedshootexposure.go index c216e4d5cb8..8897a2e4fb2 100644 --- a/pkg/api/extensions/validation/selfhostedshootexposure.go +++ b/pkg/api/extensions/validation/selfhostedshootexposure.go @@ -30,12 +30,12 @@ func ValidateSelfHostedShootExposure(exposure *extensionsv1alpha1.SelfHostedShoo } // ValidateSelfHostedShootExposureUpdate validates a SelfHostedShootExposure object before an update. -func ValidateSelfHostedShootExposureUpdate(new, old *extensionsv1alpha1.SelfHostedShootExposure) field.ErrorList { +func ValidateSelfHostedShootExposureUpdate(newSelfHostedShootExposure, oldSelfHostedShootExposure *extensionsv1alpha1.SelfHostedShootExposure) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateSelfHostedShootExposureSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateSelfHostedShootExposure(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newSelfHostedShootExposure.ObjectMeta, &oldSelfHostedShootExposure.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateSelfHostedShootExposureSpecUpdate(&newSelfHostedShootExposure.Spec, &oldSelfHostedShootExposure.Spec, newSelfHostedShootExposure.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateSelfHostedShootExposure(newSelfHostedShootExposure)...) return allErrs } @@ -103,15 +103,15 @@ func ValidateSelfHostedShootExposureSpec(spec *extensionsv1alpha1.SelfHostedShoo } // ValidateSelfHostedShootExposureSpecUpdate validates the spec of an SelfHostedShootExposure object before an update. -func ValidateSelfHostedShootExposureSpecUpdate(new, old *extensionsv1alpha1.SelfHostedShootExposureSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateSelfHostedShootExposureSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.SelfHostedShootExposureSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update SelfHostedShootExposure spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) return allErrs } diff --git a/pkg/api/extensions/validation/worker.go b/pkg/api/extensions/validation/worker.go index 1dc7994c3fe..458cd33d095 100644 --- a/pkg/api/extensions/validation/worker.go +++ b/pkg/api/extensions/validation/worker.go @@ -29,12 +29,12 @@ func ValidateWorker(worker *extensionsv1alpha1.Worker) field.ErrorList { } // ValidateWorkerUpdate validates a Worker object before an update. -func ValidateWorkerUpdate(new, old *extensionsv1alpha1.Worker) field.ErrorList { +func ValidateWorkerUpdate(newWorker, oldWorker *extensionsv1alpha1.Worker) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, ValidateWorkerSpecUpdate(&new.Spec, &old.Spec, new.DeletionTimestamp != nil, field.NewPath("spec"))...) - allErrs = append(allErrs, ValidateWorker(new)...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&newWorker.ObjectMeta, &oldWorker.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateWorkerSpecUpdate(&newWorker.Spec, &oldWorker.Spec, newWorker.DeletionTimestamp != nil, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateWorker(newWorker)...) return allErrs } @@ -105,16 +105,16 @@ func validateArchitecture(arch *string, fldPath *field.Path) field.ErrorList { } // ValidateWorkerSpecUpdate validates the spec of a Worker object before an update. -func ValidateWorkerSpecUpdate(new, old *extensionsv1alpha1.WorkerSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { +func ValidateWorkerSpecUpdate(newSpec, oldSpec *extensionsv1alpha1.WorkerSpec, deletionTimestampSet bool, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if deletionTimestampSet && !apiequality.Semantic.DeepEqual(new, old) { - diff := deep.Equal(new, old) + if deletionTimestampSet && !apiequality.Semantic.DeepEqual(newSpec, oldSpec) { + diff := deep.Equal(newSpec, oldSpec) return field.ErrorList{field.Forbidden(fldPath, fmt.Sprintf("cannot update worker spec if deletion timestamp is set. Requested changes: %s", strings.Join(diff, ",")))} } - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Type, old.Type, fldPath.Child("type"))...) - allErrs = append(allErrs, apivalidation.ValidateImmutableField(new.Region, old.Region, fldPath.Child("region"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Type, oldSpec.Type, fldPath.Child("type"))...) + allErrs = append(allErrs, apivalidation.ValidateImmutableField(newSpec.Region, oldSpec.Region, fldPath.Child("region"))...) return allErrs } diff --git a/pkg/api/seedmanagement/validation/managedseedset.go b/pkg/api/seedmanagement/validation/managedseedset.go index e43a99d685f..047752d704d 100644 --- a/pkg/api/seedmanagement/validation/managedseedset.go +++ b/pkg/api/seedmanagement/validation/managedseedset.go @@ -299,14 +299,14 @@ func validatePendingReplica(pendingReplica *seedmanagement.PendingReplica, name return allErrs } -func isDecremented(new, old *int32) bool { - if new == nil && old != nil { +func isDecremented(newCount, oldCount *int32) bool { + if newCount == nil && oldCount != nil { return true } - if new == nil || old == nil { + if newCount == nil || oldCount == nil { return false } - return *new < *old + return *newCount < *oldCount } // parentNameAndOrdinalRegex is a regular expression that extracts the parent name and ordinal from a replica name. diff --git a/pkg/apis/core/types_cloudprofile.go b/pkg/apis/core/types_cloudprofile.go index ef7ca760233..990f20d5235 100644 --- a/pkg/apis/core/types_cloudprofile.go +++ b/pkg/apis/core/types_cloudprofile.go @@ -328,8 +328,8 @@ var order = map[VersionClassification]int{ } // Compare compares two VersionClassification objects to determine their order. -func (c1 VersionClassification) Compare(c2 VersionClassification) int { - return order[c1] - order[c2] +func (v VersionClassification) Compare(other VersionClassification) int { + return order[v] - order[other] } const ( diff --git a/pkg/component/autoscaling/pvcautoscaler/assets/doc.go b/pkg/component/autoscaling/pvcautoscaler/assets/doc.go index 3560df204bb..c1542ef6488 100644 --- a/pkg/component/autoscaling/pvcautoscaler/assets/doc.go +++ b/pkg/component/autoscaling/pvcautoscaler/assets/doc.go @@ -7,5 +7,5 @@ package assets import ( - _ "github.com/gardener/pvc-autoscaler/api/autoscaling/v1alpha1" + _ "github.com/gardener/pvc-autoscaler/api/autoscaling/v1alpha1" // Import to register the types for CRD generation. ) diff --git a/pkg/component/autoscaling/vpa/templates/doc.go b/pkg/component/autoscaling/vpa/templates/doc.go index 65954e911ac..83d03f946ed 100644 --- a/pkg/component/autoscaling/vpa/templates/doc.go +++ b/pkg/component/autoscaling/vpa/templates/doc.go @@ -7,5 +7,5 @@ package templates import ( - _ "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1beta2" + _ "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1beta2" // Import to register the types for CRD generation. ) diff --git a/pkg/component/extensions/dnsrecord/dnsrecord.go b/pkg/component/extensions/dnsrecord/dnsrecord.go index 1baa6612b33..69cb50863d7 100644 --- a/pkg/component/extensions/dnsrecord/dnsrecord.go +++ b/pkg/component/extensions/dnsrecord/dnsrecord.go @@ -368,8 +368,8 @@ func (d *dnsRecord) isTimestampInvalidOrAfterLastUpdateTime() bool { return false } -func (d *dnsRecord) recordTypeChanged(old, new extensionsv1alpha1.DNSRecordType) bool { - return old != new +func (d *dnsRecord) recordTypeChanged(oldType, newType extensionsv1alpha1.DNSRecordType) bool { + return oldType != newType } func newDNSRecord(values *Values) *extensionsv1alpha1.DNSRecord { diff --git a/pkg/component/gardener/dashboard/terminal/assets/doc.go b/pkg/component/gardener/dashboard/terminal/assets/doc.go index e25d0a94624..c28260b64e8 100644 --- a/pkg/component/gardener/dashboard/terminal/assets/doc.go +++ b/pkg/component/gardener/dashboard/terminal/assets/doc.go @@ -7,5 +7,5 @@ package assets import ( - _ "github.com/gardener/terminal-controller-manager/api/v1alpha1" // required for generating CRDs + _ "github.com/gardener/terminal-controller-manager/api/v1alpha1" // Import to register the types for CRD generation. ) diff --git a/pkg/component/networking/istio/istio_test.go b/pkg/component/networking/istio/istio_test.go index a7c54c42443..d0a41640d01 100644 --- a/pkg/component/networking/istio/istio_test.go +++ b/pkg/component/networking/istio/istio_test.go @@ -131,17 +131,17 @@ var _ = Describe("istiod", func() { return string(data) } - istioIngressAutoscaler = func(min *int, max *int) string { + istioIngressAutoscaler = func(minCount *int, maxCount *int) string { data, _ := os.ReadFile("./test_charts/ingress_autoscaler.yaml") - str := strings.ReplaceAll(string(data), "", strconv.Itoa(ptr.Deref(min, 2))) - str = strings.ReplaceAll(str, "", strconv.Itoa(ptr.Deref(max, 9))) + str := strings.ReplaceAll(string(data), "", strconv.Itoa(ptr.Deref(minCount, 2))) + str = strings.ReplaceAll(str, "", strconv.Itoa(ptr.Deref(maxCount, 9))) return str } - istioIngressAutoscalerTLSTerminationHPA = func(min *int, max *int) string { + istioIngressAutoscalerTLSTerminationHPA = func(minCount *int, maxCount *int) string { data, _ := os.ReadFile("./test_charts/ingress_autoscaler_tls_termination_hpa.yaml") - str := strings.ReplaceAll(string(data), "", strconv.Itoa(ptr.Deref(min, 2))) - str = strings.ReplaceAll(str, "", strconv.Itoa(ptr.Deref(max, 9))) + str := strings.ReplaceAll(string(data), "", strconv.Itoa(ptr.Deref(minCount, 2))) + str = strings.ReplaceAll(str, "", strconv.Itoa(ptr.Deref(maxCount, 9))) return str } diff --git a/pkg/component/shared/victorialogs.go b/pkg/component/shared/victorialogs.go index 1c9906abc70..f2e3d5f6163 100644 --- a/pkg/component/shared/victorialogs.go +++ b/pkg/component/shared/victorialogs.go @@ -5,7 +5,7 @@ package shared import ( - _ "crypto/sha256" + _ "crypto/sha256" // registers SHA-256 with crypto.RegisterHash so github.com/opencontainers/go-digest can parse sha256 digests in SplitImageRef "fmt" "github.com/distribution/reference" diff --git a/pkg/controllermanager/controller/controllerregistration/controllerinstallation/add.go b/pkg/controllermanager/controller/controllerregistration/controllerinstallation/add.go index 503b3725fc1..210b4e40131 100644 --- a/pkg/controllermanager/controller/controllerregistration/controllerinstallation/add.go +++ b/pkg/controllermanager/controller/controllerregistration/controllerinstallation/add.go @@ -196,19 +196,19 @@ func ShootPredicate(kind Kind) predicate.Predicate { } } -func shootNetworkingTypeHasChanged(old, new *gardencorev1beta1.Networking) bool { - if old == nil && new == nil { +func shootNetworkingTypeHasChanged(oldNetworking, newNetworking *gardencorev1beta1.Networking) bool { + if oldNetworking == nil && newNetworking == nil { return false } - if old == nil && new != nil { - // if new is non-nil then return true if new has a type set - return new.Type != nil + if oldNetworking == nil && newNetworking != nil { + // if newNetworking is non-nil then return true if newNetworking has a type set + return newNetworking.Type != nil } - if old != nil && new == nil { - // if old was non-nil and had a type set, return true - return old.Type != nil + if oldNetworking != nil && newNetworking == nil { + // if oldNetworking was non-nil and had a type set, return true + return oldNetworking.Type != nil } - return !ptr.Equal(old.Type, new.Type) + return !ptr.Equal(oldNetworking.Type, newNetworking.Type) } // ResourceReferenceObjectPredicate returns true for objects in garden namespace labeled with diff --git a/pkg/controllermanager/controller/shoot/maintenance/reconciler.go b/pkg/controllermanager/controller/shoot/maintenance/reconciler.go index 2113a22bd9d..a01bfabb3d8 100644 --- a/pkg/controllermanager/controller/shoot/maintenance/reconciler.go +++ b/pkg/controllermanager/controller/shoot/maintenance/reconciler.go @@ -725,7 +725,7 @@ func determineKubernetesVersion(kubernetesVersion string, profile *gardencorev1b return version, nil } -func shouldKubernetesVersionBeUpdated(kubernetesVersion string, autoUpdate bool, profile *gardencorev1beta1.CloudProfile) (shouldBeUpdated bool, reason string, isExpired bool, error error) { +func shouldKubernetesVersionBeUpdated(kubernetesVersion string, autoUpdate bool, profile *gardencorev1beta1.CloudProfile) (shouldBeUpdated bool, reason string, isExpired bool, err error) { versionExistsInCloudProfile, version, err := v1beta1helper.KubernetesVersionExistsInCloudProfile(profile, kubernetesVersion) if err != nil { return false, "", false, err diff --git a/pkg/gardenlet/bootstrap/certificate/certificate_util.go b/pkg/gardenlet/bootstrap/certificate/certificate_util.go index b88ccf4f649..d6d532f09e4 100644 --- a/pkg/gardenlet/bootstrap/certificate/certificate_util.go +++ b/pkg/gardenlet/bootstrap/certificate/certificate_util.go @@ -47,11 +47,11 @@ func nextRotationDeadline(certificate tls.Certificate, validityConfig *gardenlet // try to rotate certificates at the same time for the rest of the lifetime func jitteryDuration(totalDuration float64, minPercentage, maxPercentage *int32) time.Duration { var ( - min = ptr.Deref(minPercentage, 70) - max = ptr.Deref(maxPercentage, 90) + minPercentageValue = ptr.Deref(minPercentage, 70) + maxPercentageValue = ptr.Deref(maxPercentage, 90) - minFactor = 1 - float64(min)/100 - maxFactor = float64(max-min) / 100 + minFactor = 1 - float64(minPercentageValue)/100 + maxFactor = float64(maxPercentageValue-minPercentageValue) / 100 ) return wait.Jitter(time.Duration(totalDuration), maxFactor) - time.Duration(totalDuration*minFactor) diff --git a/pkg/gardenlet/controller/shoot/care/add_test.go b/pkg/gardenlet/controller/shoot/care/add_test.go index 20df281b6f7..6a1343d2667 100644 --- a/pkg/gardenlet/controller/shoot/care/add_test.go +++ b/pkg/gardenlet/controller/shoot/care/add_test.go @@ -58,8 +58,8 @@ var _ = Describe("Add", func() { }) It("should enqueue the object for Create events according to the calculated duration", func() { - DeferCleanup(test.WithVar(&RandomDurationWithMetaDuration, func(max *metav1.Duration) time.Duration { - return max.Duration + DeferCleanup(test.WithVar(&RandomDurationWithMetaDuration, func(maxDuration *metav1.Duration) time.Duration { + return maxDuration.Duration })) hdlr.Create(ctx, event.CreateEvent{Object: shoot}, queue) diff --git a/pkg/nodeagent/controller/operatingsystemconfig/add.go b/pkg/nodeagent/controller/operatingsystemconfig/add.go index 3338120eb5e..b414ee1dff2 100644 --- a/pkg/nodeagent/controller/operatingsystemconfig/add.go +++ b/pkg/nodeagent/controller/operatingsystemconfig/add.go @@ -283,16 +283,16 @@ func (r *Reconciler) NodeReadyForInPlaceUpdate() predicate.Predicate { return nodeHasInPlaceUpdateConditionWithReasonReadyForUpdate(node.Status.Conditions) }, UpdateFunc: func(e event.UpdateEvent) bool { - old, ok := e.ObjectOld.(*corev1.Node) + oldNode, ok := e.ObjectOld.(*corev1.Node) if !ok { return false } - new, ok := e.ObjectNew.(*corev1.Node) + newNode, ok := e.ObjectNew.(*corev1.Node) if !ok { return false } - return !nodeHasInPlaceUpdateConditionWithReasonReadyForUpdate(old.Status.Conditions) && nodeHasInPlaceUpdateConditionWithReasonReadyForUpdate(new.Status.Conditions) + return !nodeHasInPlaceUpdateConditionWithReasonReadyForUpdate(oldNode.Status.Conditions) && nodeHasInPlaceUpdateConditionWithReasonReadyForUpdate(newNode.Status.Conditions) }, DeleteFunc: func(_ event.DeleteEvent) bool { return false diff --git a/pkg/provider-local/admission/validator/namespacedcloudprofile.go b/pkg/provider-local/admission/validator/namespacedcloudprofile.go index 781a562da85..12c9220dfa1 100644 --- a/pkg/provider-local/admission/validator/namespacedcloudprofile.go +++ b/pkg/provider-local/admission/validator/namespacedcloudprofile.go @@ -42,10 +42,10 @@ type namespacedCloudProfileValidator struct { } // Validate validates the given NamespacedCloudProfile objects. -func (p *namespacedCloudProfileValidator) Validate(ctx context.Context, new, _ client.Object) error { - cloudProfile, ok := new.(*core.NamespacedCloudProfile) +func (p *namespacedCloudProfileValidator) Validate(ctx context.Context, newNamespacedCloudProfile, _ client.Object) error { + cloudProfile, ok := newNamespacedCloudProfile.(*core.NamespacedCloudProfile) if !ok { - return fmt.Errorf("wrong object type %T", new) + return fmt.Errorf("wrong object type %T", newNamespacedCloudProfile) } if cloudProfile.DeletionTimestamp != nil { diff --git a/pkg/provider-local/webhook/shoot/mutator.go b/pkg/provider-local/webhook/shoot/mutator.go index 14fa351b6d2..fe719fc06a1 100644 --- a/pkg/provider-local/webhook/shoot/mutator.go +++ b/pkg/provider-local/webhook/shoot/mutator.go @@ -32,8 +32,8 @@ func NewMutator() extensionswebhook.Mutator { } } -func (m *mutator) Mutate(ctx context.Context, new, _ client.Object) error { - acc, err := meta.Accessor(new) +func (m *mutator) Mutate(ctx context.Context, newObj, _ client.Object) error { + acc, err := meta.Accessor(newObj) if err != nil { return fmt.Errorf("could not create accessor during webhook: %w", err) } @@ -43,7 +43,7 @@ func (m *mutator) Mutate(ctx context.Context, new, _ client.Object) error { return nil } - switch x := new.(type) { + switch x := newObj.(type) { case *corev1.ConfigMap: switch { case strings.HasPrefix(x.Name, kubeproxy.ConfigNamePrefix): diff --git a/pkg/resourcemanager/predicate/condition_status_test.go b/pkg/resourcemanager/predicate/condition_status_test.go index 652a6a48c17..2e921f63a27 100644 --- a/pkg/resourcemanager/predicate/condition_status_test.go +++ b/pkg/resourcemanager/predicate/condition_status_test.go @@ -103,13 +103,13 @@ var _ = Describe("#ConditionStatusChanged", func() { }) DescribeTable("DefaultConditionChange", - func(old, new *gardencorev1beta1.Condition, matcher types.GomegaMatcher) { + func(oldCondition, newCondition *gardencorev1beta1.Condition, matcher types.GomegaMatcher) { managedResourceNew := managedResource.DeepCopy() - if old != nil { - managedResource.Status.Conditions = []gardencorev1beta1.Condition{*old} + if oldCondition != nil { + managedResource.Status.Conditions = []gardencorev1beta1.Condition{*oldCondition} } - if new != nil { - managedResourceNew.Status.Conditions = []gardencorev1beta1.Condition{*new} + if newCondition != nil { + managedResourceNew.Status.Conditions = []gardencorev1beta1.Condition{*newCondition} } updateEvent.ObjectOld = managedResource updateEvent.ObjectNew = managedResourceNew @@ -139,13 +139,13 @@ var _ = Describe("#ConditionStatusChanged", func() { ) DescribeTable("ConditionChangedToUnhealthy", - func(old, new *gardencorev1beta1.Condition, matcher types.GomegaMatcher) { + func(oldCondition, newCondition *gardencorev1beta1.Condition, matcher types.GomegaMatcher) { managedResourceNew := managedResource.DeepCopy() - if old != nil { - managedResource.Status.Conditions = []gardencorev1beta1.Condition{*old} + if oldCondition != nil { + managedResource.Status.Conditions = []gardencorev1beta1.Condition{*oldCondition} } - if new != nil { - managedResourceNew.Status.Conditions = []gardencorev1beta1.Condition{*new} + if newCondition != nil { + managedResourceNew.Status.Conditions = []gardencorev1beta1.Condition{*newCondition} } updateEvent.ObjectNew = managedResourceNew diff --git a/pkg/scheduler/controller/shoot/reconciler.go b/pkg/scheduler/controller/shoot/reconciler.go index b5ab5f91c26..d88a3379349 100644 --- a/pkg/scheduler/controller/shoot/reconciler.go +++ b/pkg/scheduler/controller/shoot/reconciler.go @@ -482,14 +482,14 @@ func filterCandidates(shoot *gardencorev1beta1.Shoot, shootList []*gardencorev1b func getSeedWithLeastShootsDeployed(seedList []gardencorev1beta1.Seed, shootList []*gardencorev1beta1.Shoot) (*gardencorev1beta1.Seed, error) { var ( bestCandidate gardencorev1beta1.Seed - min *int + minCount *int seedUsage = v1beta1helper.CalculateSeedUsage(shootList) ) for _, seed := range seedList { - if numberOfManagedShoots := seedUsage[seed.Name]; min == nil || numberOfManagedShoots < *min { + if numberOfManagedShoots := seedUsage[seed.Name]; minCount == nil || numberOfManagedShoots < *minCount { bestCandidate = seed - min = &numberOfManagedShoots + minCount = &numberOfManagedShoots } } diff --git a/pkg/utils/flow/taskfn_test.go b/pkg/utils/flow/taskfn_test.go index cee3fac91e2..a680d0b0663 100644 --- a/pkg/utils/flow/taskfn_test.go +++ b/pkg/utils/flow/taskfn_test.go @@ -212,7 +212,7 @@ var _ = Describe("task functions", func() { Eventually(func(g Gomega) { tasks := 0 activeTasks.Range(func(_, _ any) bool { - tasks += 1 + tasks++ return true }) g.Expect(tasks).To(Equal(0)) diff --git a/pkg/utils/kubernetes/client/client.go b/pkg/utils/kubernetes/client/client.go index 0580c7fc70d..d7373771cfc 100644 --- a/pkg/utils/kubernetes/client/client.go +++ b/pkg/utils/kubernetes/client/client.go @@ -332,7 +332,7 @@ func ensureCollectionGone(ctx context.Context, c client.Client, log logr.Logger, if err := meta.EachListItem(list, func(object runtime.Object) error { for _, ignore := range ignoreFns { if ignore(log, object.(client.Object)) { - ignoredObjects += 1 + ignoredObjects++ return nil } } diff --git a/pkg/utils/random.go b/pkg/utils/random.go index 1eeed80202a..12afb40bfae 100644 --- a/pkg/utils/random.go +++ b/pkg/utils/random.go @@ -25,10 +25,10 @@ func GenerateRandomString(n int) (string, error) { // The set of allowed characters can be specified. Returns error if there was a problem during the random generation. func GenerateRandomStringFromCharset(n int, allowedCharacters string) (string, error) { output := make([]byte, n) - max := new(big.Int).SetInt64(int64(len(allowedCharacters))) + maxVal := new(big.Int).SetInt64(int64(len(allowedCharacters))) for i := range output { - randomCharacter, err := cryptorand.Int(cryptorand.Reader, max) + randomCharacter, err := cryptorand.Int(cryptorand.Reader, maxVal) if err != nil { return "", err } @@ -37,20 +37,20 @@ func GenerateRandomStringFromCharset(n int, allowedCharacters string) (string, e return string(output), nil } -// RandomDuration takes a time.Duration and computes a non-negative pseudo-random duration in [0,max). -// It returns 0ns if max is <= 0ns. -func RandomDuration(max time.Duration) time.Duration { - if max.Nanoseconds() <= 0 { +// RandomDuration takes a time.Duration and computes a non-negative pseudo-random duration in [0,maxDuration). +// It returns 0ns if maxDuration is <= 0ns. +func RandomDuration(maxDuration time.Duration) time.Duration { + if maxDuration.Nanoseconds() <= 0 { return time.Duration(0) } - return time.Duration(mathrand.N(max.Nanoseconds())) // #nosec: G404 -- No cryptographic context. + return time.Duration(mathrand.N(maxDuration.Nanoseconds())) // #nosec: G404 -- No cryptographic context. } -// RandomDurationWithMetaDuration takes a *metav1.Duration and computes a non-negative pseudo-random duration in [0,max). -// It returns 0ns if max is nil or <= 0ns. -func RandomDurationWithMetaDuration(max *metav1.Duration) time.Duration { - if max == nil { +// RandomDurationWithMetaDuration takes a *metav1.Duration and computes a non-negative pseudo-random duration in [0,maxDuration). +// It returns 0ns if maxDuration is nil or <= 0ns. +func RandomDurationWithMetaDuration(maxDuration *metav1.Duration) time.Duration { + if maxDuration == nil { return time.Duration(0) } - return RandomDuration(max.Duration) + return RandomDuration(maxDuration.Duration) } diff --git a/pkg/utils/test/matchers/managedresource_test.go b/pkg/utils/test/matchers/managedresource_test.go index 1253decd6ec..d7a208209fa 100644 --- a/pkg/utils/test/matchers/managedresource_test.go +++ b/pkg/utils/test/matchers/managedresource_test.go @@ -157,7 +157,7 @@ var _ = Describe("ManagedResource Object Matcher", func() { ExpectWithOffset(1, managedResource).To(matcher(configMap, deployment, secret)) deploymentModified := deployment.DeepCopy() - deploymentModified.Spec.MinReadySeconds += 1 + deploymentModified.Spec.MinReadySeconds++ ExpectWithOffset(1, managedResource).NotTo(matcher(deploymentModified)) }) }) diff --git a/pkg/utils/validation/validation.go b/pkg/utils/validation/validation.go index e14ed4f410e..4a0ea472be6 100644 --- a/pkg/utils/validation/validation.go +++ b/pkg/utils/validation/validation.go @@ -13,24 +13,24 @@ import ( ) // ShouldEnforceImmutability compares the given slices and returns if a immutability should be enforced. -// It mainly checks if the order of the same elements in `new` and `old` is the same, i.e. only an addition -// of elements to `new` is allowed. -func ShouldEnforceImmutability(new, old []string) bool { - sizeDelta := len(new) - len(old) +// It mainly checks if the order of the same elements in `newValues` and `oldValues` is the same, i.e. only an addition +// of elements to `newValues` is allowed. +func ShouldEnforceImmutability(newValues, oldValues []string) bool { + sizeDelta := len(newValues) - len(oldValues) if sizeDelta > 0 { - newA := new[:len(new)-sizeDelta] - if equal(newA, old) { + newA := newValues[:len(newValues)-sizeDelta] + if equal(newA, oldValues) { return false } - return ShouldEnforceImmutability(newA, old) + return ShouldEnforceImmutability(newA, oldValues) } return sizeDelta < 0 || sizeDelta == 0 } -func equal(new, old []string) bool { - for i := range new { - if new[i] != old[i] { +func equal(newValues, oldValues []string) bool { + for i := range newValues { + if newValues[i] != oldValues[i] { return false } } @@ -50,9 +50,8 @@ func ValidateFreeFormText(text string, fldPath *field.Path) field.ErrorList { for _, r := range text { if unicode.IsLetter(r) || unicode.IsDigit(r) || unicode.IsSpace(r) || strings.ContainsRune(allowedSpecialCharacters, r) { continue - } else { - invalidCharacters = append(invalidCharacters, r) } + invalidCharacters = append(invalidCharacters, r) } if len(invalidCharacters) > 0 { diff --git a/pkg/utils/version/version.go b/pkg/utils/version/version.go index b1337f7f197..a1c7b499b48 100644 --- a/pkg/utils/version/version.go +++ b/pkg/utils/version/version.go @@ -121,15 +121,15 @@ func (r *VersionRange) SupportedVersionRange() string { } // CheckIfMinorVersionUpdate checks if the new version is a minor version update to the old version. -func CheckIfMinorVersionUpdate(old, new string) (bool, error) { - oldVersion, err := semver.NewVersion(Normalize(old)) +func CheckIfMinorVersionUpdate(oldVersion, newVersion string) (bool, error) { + oldSemVer, err := semver.NewVersion(Normalize(oldVersion)) if err != nil { - return false, fmt.Errorf("failed to parse old version %s: %w", old, err) + return false, fmt.Errorf("failed to parse old version %s: %w", oldVersion, err) } - newVersion, err := semver.NewVersion(Normalize(new)) + newSemVer, err := semver.NewVersion(Normalize(newVersion)) if err != nil { - return false, fmt.Errorf("failed to parse new version %s: %w", new, err) + return false, fmt.Errorf("failed to parse new version %s: %w", newVersion, err) } - return oldVersion.Minor() != newVersion.Minor(), nil + return oldSemVer.Minor() != newSemVer.Minor(), nil } diff --git a/plugin/pkg/global/finalizerremoval/admission.go b/plugin/pkg/global/finalizerremoval/admission.go index f70d894b9da..b1a5b12fbf0 100644 --- a/plugin/pkg/global/finalizerremoval/admission.go +++ b/plugin/pkg/global/finalizerremoval/admission.go @@ -183,11 +183,11 @@ func shootDeletionSucceeded(shoot *core.Shoot) bool { lastOperation.Progress == 100 } -func isFinalizerRemoved(old, new metav1.Object, finalizerName string) bool { +func isFinalizerRemoved(oldObj, newObj metav1.Object, finalizerName string) bool { var ( - oldFinalizers = sets.New(old.GetFinalizers()...) - newFinalizer = sets.New(new.GetFinalizers()...) + oldFinalizers = sets.New(oldObj.GetFinalizers()...) + newFinalizers = sets.New(newObj.GetFinalizers()...) ) - return oldFinalizers.Has(finalizerName) && !newFinalizer.Has(finalizerName) + return oldFinalizers.Has(finalizerName) && !newFinalizers.Has(finalizerName) } diff --git a/plugin/pkg/global/resourcereferencemanager/admission.go b/plugin/pkg/global/resourcereferencemanager/admission.go index ab02d5cc04d..2e11c1249bb 100644 --- a/plugin/pkg/global/resourcereferencemanager/admission.go +++ b/plugin/pkg/global/resourcereferencemanager/admission.go @@ -1554,11 +1554,11 @@ func isGardenadmUser(userInfo user.Info) bool { } // getRemovedMachineCapabilities returns the removed capabilities and their removed values. -func getRemovedMachineCapabilities(old, new []core.CapabilityDefinition) []core.CapabilityDefinition { +func getRemovedMachineCapabilities(oldCapabilities, newCapabilities []core.CapabilityDefinition) []core.CapabilityDefinition { var ( removedCapabilities []core.CapabilityDefinition - oldCapabilitiesMap = utils.CreateMapFromSlice(old, func(capability core.CapabilityDefinition) string { return capability.Name }) - newCapabilitiesMap = utils.CreateMapFromSlice(new, func(capability core.CapabilityDefinition) string { return capability.Name }) + oldCapabilitiesMap = utils.CreateMapFromSlice(oldCapabilities, func(capability core.CapabilityDefinition) string { return capability.Name }) + newCapabilitiesMap = utils.CreateMapFromSlice(newCapabilities, func(capability core.CapabilityDefinition) string { return capability.Name }) ) for capabilityName, oldCapability := range oldCapabilitiesMap { diff --git a/plugin/pkg/shoot/quotavalidator/admission.go b/plugin/pkg/shoot/quotavalidator/admission.go index 2e94b15a96e..532c38a314f 100644 --- a/plugin/pkg/shoot/quotavalidator/admission.go +++ b/plugin/pkg/shoot/quotavalidator/admission.go @@ -514,25 +514,25 @@ func getShootWorkerResources(shoot *core.Shoot, cloudProfile *gardencorev1beta1. return workers } -func lifetimeVerificationNeeded(new, old core.Shoot) bool { - oldLifetime, ok := old.Annotations[v1beta1constants.ShootExpirationTimestamp] +func lifetimeVerificationNeeded(newShoot, oldShoot core.Shoot) bool { + oldLifetime, ok := oldShoot.Annotations[v1beta1constants.ShootExpirationTimestamp] if !ok { - oldLifetime = old.CreationTimestamp.String() + oldLifetime = oldShoot.CreationTimestamp.String() } - newLifetime := new.Annotations[v1beta1constants.ShootExpirationTimestamp] + newLifetime := newShoot.Annotations[v1beta1constants.ShootExpirationTimestamp] return oldLifetime != newLifetime } -func quotaVerificationNeeded(new, old core.Shoot) bool { - if !helper.NginxIngressEnabled(old.Spec.Addons) && helper.NginxIngressEnabled(new.Spec.Addons) { +func quotaVerificationNeeded(newShoot, oldShoot core.Shoot) bool { + if !helper.NginxIngressEnabled(oldShoot.Spec.Addons) && helper.NginxIngressEnabled(newShoot.Spec.Addons) { return true } // Check for diffs on workers - for _, worker := range new.Spec.Provider.Workers { + for _, worker := range newShoot.Spec.Provider.Workers { oldHasWorker := false - for _, oldWorker := range old.Spec.Provider.Workers { + for _, oldWorker := range oldShoot.Spec.Provider.Workers { if worker.Name == oldWorker.Name { oldHasWorker = true diff --git a/test/integration/extensions/webhook/cloudprovider/ensurer.go b/test/integration/extensions/webhook/cloudprovider/ensurer.go index d687be08a1a..1628d8ddb5f 100644 --- a/test/integration/extensions/webhook/cloudprovider/ensurer.go +++ b/test/integration/extensions/webhook/cloudprovider/ensurer.go @@ -28,10 +28,10 @@ type ensurer struct { // EnsureCloudProviderSecret is implemented on extension side which mutates the cloudprovider secret. contain // For testing purpose we are mutating the cloudprovider secret's data to check whether this // function is called in webhook. -func (e *ensurer) EnsureCloudProviderSecret(_ context.Context, _ extensionscontextwebhook.GardenContext, new, _ *corev1.Secret) error { - e.logger.Info("Mutate cloudprovider secret", "namespace", new.Namespace, "name", new.Name) - new.Data["clientID"] = []byte(`foo`) - new.Data["clientSecret"] = []byte(`bar`) +func (e *ensurer) EnsureCloudProviderSecret(_ context.Context, _ extensionscontextwebhook.GardenContext, newSecret, _ *corev1.Secret) error { + e.logger.Info("Mutate cloudprovider secret", "namespace", newSecret.Namespace, "name", newSecret.Name) + newSecret.Data["clientID"] = []byte(`foo`) + newSecret.Data["clientSecret"] = []byte(`bar`) return nil } diff --git a/test/integration/resourcemanager/health/crds/doc.go b/test/integration/resourcemanager/health/crds/doc.go index 43c16700243..298f01fd37c 100644 --- a/test/integration/resourcemanager/health/crds/doc.go +++ b/test/integration/resourcemanager/health/crds/doc.go @@ -6,5 +6,5 @@ package crds import ( - _ "github.com/gardener/cert-management/pkg/apis/cert/v1alpha1" + _ "github.com/gardener/cert-management/pkg/apis/cert/v1alpha1" // Import to register the types for CRD generation. ) diff --git a/test/testmachinery/shoots/operations/worker.go b/test/testmachinery/shoots/operations/worker.go index b7c0f8cb3a4..088fdfc698c 100644 --- a/test/testmachinery/shoots/operations/worker.go +++ b/test/testmachinery/shoots/operations/worker.go @@ -49,30 +49,30 @@ var _ = ginkgo.Describe("Shoot worker operation testing", func() { ginkgo.Skip("no workers defined") } var ( - min = shoot.Spec.Provider.Workers[0].Minimum + 1 - max = shoot.Spec.Provider.Workers[0].Maximum + minWorkers = shoot.Spec.Provider.Workers[0].Minimum + 1 + maxWorkers = shoot.Spec.Provider.Workers[0].Maximum ) - if shoot.Spec.Provider.Workers[0].Maximum < min { - max = min + if shoot.Spec.Provider.Workers[0].Maximum < minWorkers { + maxWorkers = minWorkers } - ginkgo.By(fmt.Sprintf("updating shoot worker to min of %d machines", min)) + ginkgo.By(fmt.Sprintf("updating shoot worker to min of %d machines", minWorkers)) err := f.UpdateShoot(ctx, func(shoot *gardencorev1beta1.Shoot) error { - shoot.Spec.Provider.Workers[0].Minimum = min - shoot.Spec.Provider.Workers[0].Maximum = max + shoot.Spec.Provider.Workers[0].Minimum = minWorkers + shoot.Spec.Provider.Workers[0].Maximum = maxWorkers return nil }) framework.ExpectNoError(err) ginkgo.By("Scale down worker") - min = shoot.Spec.Provider.Workers[0].Minimum - 1 - max = shoot.Spec.Provider.Workers[0].Maximum - 1 + minWorkers = shoot.Spec.Provider.Workers[0].Minimum - 1 + maxWorkers = shoot.Spec.Provider.Workers[0].Maximum - 1 - ginkgo.By(fmt.Sprintf("updating shoot worker to min of %d machines", min)) + ginkgo.By(fmt.Sprintf("updating shoot worker to min of %d machines", minWorkers)) err = f.UpdateShoot(ctx, func(shoot *gardencorev1beta1.Shoot) error { - shoot.Spec.Provider.Workers[0].Minimum = min - shoot.Spec.Provider.Workers[0].Maximum = max + shoot.Spec.Provider.Workers[0].Minimum = minWorkers + shoot.Spec.Provider.Workers[0].Maximum = maxWorkers return nil }) framework.ExpectNoError(err)