From 2e7b33516059cc72271b4c4b831677bb32715090 Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Mon, 7 Jul 2025 11:53:44 +0200 Subject: [PATCH] Rename LastRemediationStatus.Timestamp to LastRemediationStatus.Time in KCP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- .../kubeadm/v1beta1/conversion.go | 16 ++++++ .../v1beta1/zz_generated.conversion.go | 54 ++++++++++--------- .../v1beta2/kubeadm_control_plane_types.go | 4 +- .../kubeadm/v1beta2/zz_generated.deepcopy.go | 2 +- ...cluster.x-k8s.io_kubeadmcontrolplanes.yaml | 8 +-- .../internal/controllers/remediation.go | 4 +- .../internal/controllers/status_test.go | 4 +- 7 files changed, 57 insertions(+), 35 deletions(-) diff --git a/api/controlplane/kubeadm/v1beta1/conversion.go b/api/controlplane/kubeadm/v1beta1/conversion.go index a68201699239..868b691518f8 100644 --- a/api/controlplane/kubeadm/v1beta1/conversion.go +++ b/api/controlplane/kubeadm/v1beta1/conversion.go @@ -352,6 +352,22 @@ func Convert_v1beta2_ContractVersionedObjectReference_To_v1_ObjectReference(_ *c return nil } +func Convert_v1beta1_LastRemediationStatus_To_v1beta2_LastRemediationStatus(in *LastRemediationStatus, out *controlplanev1.LastRemediationStatus, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta1_LastRemediationStatus_To_v1beta2_LastRemediationStatus(in, out, s); err != nil { + return err + } + out.Time = in.Timestamp + return nil +} + +func Convert_v1beta2_LastRemediationStatus_To_v1beta1_LastRemediationStatus(in *controlplanev1.LastRemediationStatus, out *LastRemediationStatus, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta2_LastRemediationStatus_To_v1beta1_LastRemediationStatus(in, out, s); err != nil { + return err + } + out.Timestamp = in.Time + return nil +} + func convertToContractVersionedObjectReference(ref *corev1.ObjectReference) (*clusterv1.ContractVersionedObjectReference, error) { var apiGroup string if ref.APIVersion != "" { diff --git a/api/controlplane/kubeadm/v1beta1/zz_generated.conversion.go b/api/controlplane/kubeadm/v1beta1/zz_generated.conversion.go index 05344e2f8827..088dd7205456 100644 --- a/api/controlplane/kubeadm/v1beta1/zz_generated.conversion.go +++ b/api/controlplane/kubeadm/v1beta1/zz_generated.conversion.go @@ -123,16 +123,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*LastRemediationStatus)(nil), (*v1beta2.LastRemediationStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_LastRemediationStatus_To_v1beta2_LastRemediationStatus(a.(*LastRemediationStatus), b.(*v1beta2.LastRemediationStatus), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.LastRemediationStatus)(nil), (*LastRemediationStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_LastRemediationStatus_To_v1beta1_LastRemediationStatus(a.(*v1beta2.LastRemediationStatus), b.(*LastRemediationStatus), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*MachineNamingStrategy)(nil), (*v1beta2.MachineNamingStrategy)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_MachineNamingStrategy_To_v1beta2_MachineNamingStrategy(a.(*MachineNamingStrategy), b.(*v1beta2.MachineNamingStrategy), scope) }); err != nil { @@ -208,6 +198,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*LastRemediationStatus)(nil), (*v1beta2.LastRemediationStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_LastRemediationStatus_To_v1beta2_LastRemediationStatus(a.(*LastRemediationStatus), b.(*v1beta2.LastRemediationStatus), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*corev1beta1.ObjectMeta)(nil), (*corev1beta2.ObjectMeta)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_ObjectMeta_To_v1beta2_ObjectMeta(a.(*corev1beta1.ObjectMeta), b.(*corev1beta2.ObjectMeta), scope) }); err != nil { @@ -243,6 +238,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.LastRemediationStatus)(nil), (*LastRemediationStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_LastRemediationStatus_To_v1beta1_LastRemediationStatus(a.(*v1beta2.LastRemediationStatus), b.(*LastRemediationStatus), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*corev1beta2.ObjectMeta)(nil), (*corev1beta1.ObjectMeta)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_ObjectMeta_To_v1beta1_ObjectMeta(a.(*corev1beta2.ObjectMeta), b.(*corev1beta1.ObjectMeta), scope) }); err != nil { @@ -447,7 +447,15 @@ func autoConvert_v1beta1_KubeadmControlPlaneStatus_To_v1beta2_KubeadmControlPlan } else { out.Conditions = nil } - out.LastRemediation = (*v1beta2.LastRemediationStatus)(unsafe.Pointer(in.LastRemediation)) + if in.LastRemediation != nil { + in, out := &in.LastRemediation, &out.LastRemediation + *out = new(v1beta2.LastRemediationStatus) + if err := Convert_v1beta1_LastRemediationStatus_To_v1beta2_LastRemediationStatus(*in, *out, s); err != nil { + return err + } + } else { + out.LastRemediation = nil + } // WARNING: in.V1Beta2 requires manual conversion: does not exist in peer-type return nil } @@ -478,7 +486,15 @@ func autoConvert_v1beta2_KubeadmControlPlaneStatus_To_v1beta1_KubeadmControlPlan return err } out.ObservedGeneration = in.ObservedGeneration - out.LastRemediation = (*LastRemediationStatus)(unsafe.Pointer(in.LastRemediation)) + if in.LastRemediation != nil { + in, out := &in.LastRemediation, &out.LastRemediation + *out = new(LastRemediationStatus) + if err := Convert_v1beta2_LastRemediationStatus_To_v1beta1_LastRemediationStatus(*in, *out, s); err != nil { + return err + } + } else { + out.LastRemediation = nil + } // WARNING: in.Deprecated requires manual conversion: does not exist in peer-type return nil } @@ -695,28 +711,18 @@ func Convert_v1beta2_KubeadmControlPlaneTemplateSpec_To_v1beta1_KubeadmControlPl func autoConvert_v1beta1_LastRemediationStatus_To_v1beta2_LastRemediationStatus(in *LastRemediationStatus, out *v1beta2.LastRemediationStatus, s conversion.Scope) error { out.Machine = in.Machine - out.Timestamp = in.Timestamp + // WARNING: in.Timestamp requires manual conversion: does not exist in peer-type out.RetryCount = in.RetryCount return nil } -// Convert_v1beta1_LastRemediationStatus_To_v1beta2_LastRemediationStatus is an autogenerated conversion function. -func Convert_v1beta1_LastRemediationStatus_To_v1beta2_LastRemediationStatus(in *LastRemediationStatus, out *v1beta2.LastRemediationStatus, s conversion.Scope) error { - return autoConvert_v1beta1_LastRemediationStatus_To_v1beta2_LastRemediationStatus(in, out, s) -} - func autoConvert_v1beta2_LastRemediationStatus_To_v1beta1_LastRemediationStatus(in *v1beta2.LastRemediationStatus, out *LastRemediationStatus, s conversion.Scope) error { out.Machine = in.Machine - out.Timestamp = in.Timestamp + // WARNING: in.Time requires manual conversion: does not exist in peer-type out.RetryCount = in.RetryCount return nil } -// Convert_v1beta2_LastRemediationStatus_To_v1beta1_LastRemediationStatus is an autogenerated conversion function. -func Convert_v1beta2_LastRemediationStatus_To_v1beta1_LastRemediationStatus(in *v1beta2.LastRemediationStatus, out *LastRemediationStatus, s conversion.Scope) error { - return autoConvert_v1beta2_LastRemediationStatus_To_v1beta1_LastRemediationStatus(in, out, s) -} - func autoConvert_v1beta1_MachineNamingStrategy_To_v1beta2_MachineNamingStrategy(in *MachineNamingStrategy, out *v1beta2.MachineNamingStrategy, s conversion.Scope) error { out.Template = in.Template return nil diff --git a/api/controlplane/kubeadm/v1beta2/kubeadm_control_plane_types.go b/api/controlplane/kubeadm/v1beta2/kubeadm_control_plane_types.go index 6aef3141385a..d6b3ea03a989 100644 --- a/api/controlplane/kubeadm/v1beta2/kubeadm_control_plane_types.go +++ b/api/controlplane/kubeadm/v1beta2/kubeadm_control_plane_types.go @@ -772,9 +772,9 @@ type LastRemediationStatus struct { // +kubebuilder:validation:MaxLength=253 Machine string `json:"machine"` - // timestamp is when last remediation happened. It is represented in RFC3339 form and is in UTC. + // time is when last remediation happened. It is represented in RFC3339 form and is in UTC. // +required - Timestamp metav1.Time `json:"timestamp"` + Time metav1.Time `json:"time"` // retryCount used to keep track of remediation retry for the last remediated machine. // A retry happens when a machine that was created as a replacement for an unhealthy machine also fails. diff --git a/api/controlplane/kubeadm/v1beta2/zz_generated.deepcopy.go b/api/controlplane/kubeadm/v1beta2/zz_generated.deepcopy.go index f15cb3eb9a34..d9bad3799979 100644 --- a/api/controlplane/kubeadm/v1beta2/zz_generated.deepcopy.go +++ b/api/controlplane/kubeadm/v1beta2/zz_generated.deepcopy.go @@ -463,7 +463,7 @@ func (in *KubeadmControlPlaneV1Beta1DeprecatedStatus) DeepCopy() *KubeadmControl // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LastRemediationStatus) DeepCopyInto(out *LastRemediationStatus) { *out = *in - in.Timestamp.DeepCopyInto(&out.Timestamp) + in.Time.DeepCopyInto(&out.Time) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LastRemediationStatus. diff --git a/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yaml b/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yaml index 33c860c5c264..962720ec159d 100644 --- a/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yaml +++ b/controlplane/kubeadm/config/crd/bases/controlplane.cluster.x-k8s.io_kubeadmcontrolplanes.yaml @@ -7615,15 +7615,15 @@ spec: A retry happens when a machine that was created as a replacement for an unhealthy machine also fails. format: int32 type: integer - timestamp: - description: timestamp is when last remediation happened. It is - represented in RFC3339 form and is in UTC. + time: + description: time is when last remediation happened. It is represented + in RFC3339 form and is in UTC. format: date-time type: string required: - machine - retryCount - - timestamp + - time type: object observedGeneration: description: observedGeneration is the latest generation observed diff --git a/controlplane/kubeadm/internal/controllers/remediation.go b/controlplane/kubeadm/internal/controllers/remediation.go index 1d9db6e0d38e..777ddf3a7c05 100644 --- a/controlplane/kubeadm/internal/controllers/remediation.go +++ b/controlplane/kubeadm/internal/controllers/remediation.go @@ -514,7 +514,7 @@ func (r *KubeadmControlPlaneReconciler) checkRetryLimits(log logr.Logger, machin // Once we get here we already know that there was a last remediation for the Machine. // If the current remediation is happening before minHealthyPeriod is expired, then KCP considers this // as a remediation for the same previously unhealthy machine. - // NOTE: If someone/something changes the RemediationForAnnotation on Machines (e.g. changes the Timestamp), + // NOTE: If someone/something changes the RemediationForAnnotation on Machines (e.g. changes the lastRemediation time), // this could potentially lead to executing more retries than expected, but this is considered acceptable in such a case. var retryForSameMachineInProgress bool if lastRemediationTime.Add(minHealthyPeriod).After(reconciliationTime) { @@ -700,7 +700,7 @@ func (r *RemediationData) Marshal() (string, error) { func (r *RemediationData) ToStatus() *controlplanev1.LastRemediationStatus { return &controlplanev1.LastRemediationStatus{ Machine: r.Machine, - Timestamp: r.Timestamp, + Time: r.Timestamp, RetryCount: int32(r.RetryCount), } } diff --git a/controlplane/kubeadm/internal/controllers/status_test.go b/controlplane/kubeadm/internal/controllers/status_test.go index 42f21aee5756..088a21bab911 100644 --- a/controlplane/kubeadm/internal/controllers/status_test.go +++ b/controlplane/kubeadm/internal/controllers/status_test.go @@ -2053,7 +2053,7 @@ func TestKubeadmControlPlaneReconciler_setLastRemediation(t *testing.T) { g.Expect(controlPlane.KCP.Status.LastRemediation).ToNot(BeNil()) g.Expect(controlPlane.KCP.Status.LastRemediation.Machine).To(Equal(r1.Machine)) - g.Expect(controlPlane.KCP.Status.LastRemediation.Timestamp.Time).To(BeTemporally("==", r1.Timestamp.Time), cmp.Diff(controlPlane.KCP.Status.LastRemediation.Timestamp.Time, r1.Timestamp.Time)) + g.Expect(controlPlane.KCP.Status.LastRemediation.Time.Time).To(BeTemporally("==", r1.Timestamp.Time), cmp.Diff(controlPlane.KCP.Status.LastRemediation.Time.Time, r1.Timestamp.Time)) g.Expect(controlPlane.KCP.Status.LastRemediation.RetryCount).To(Equal(int32(r1.RetryCount))) }) t.Run("Remediation completed, get data from past remediation", func(t *testing.T) { @@ -2085,7 +2085,7 @@ func TestKubeadmControlPlaneReconciler_setLastRemediation(t *testing.T) { g.Expect(controlPlane.KCP.Status.LastRemediation).ToNot(BeNil()) g.Expect(controlPlane.KCP.Status.LastRemediation.Machine).To(Equal(r2.Machine)) - g.Expect(controlPlane.KCP.Status.LastRemediation.Timestamp.Time).To(BeTemporally("==", r2.Timestamp.Time), cmp.Diff(controlPlane.KCP.Status.LastRemediation.Timestamp.Time, r2.Timestamp.Time)) + g.Expect(controlPlane.KCP.Status.LastRemediation.Time.Time).To(BeTemporally("==", r2.Timestamp.Time), cmp.Diff(controlPlane.KCP.Status.LastRemediation.Time.Time, r2.Timestamp.Time)) g.Expect(controlPlane.KCP.Status.LastRemediation.RetryCount).To(Equal(int32(r2.RetryCount))) }) }