From 7fa6feedacc54bf6d5c9213edca8cf35253ded92 Mon Sep 17 00:00:00 2001 From: Stefan Bueringer Date: Mon, 19 May 2025 18:35:03 +0200 Subject: [PATCH] Rename MHC unhealthyConditions to unhealthyNodeConditions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stefan Büringer buringerst@vmware.com --- api/v1beta1/conversion.go | 64 ++++++ api/v1beta1/zz_generated.conversion.go | 206 ++++++++++-------- api/v1beta2/clusterclass_types.go | 4 +- api/v1beta2/machinehealthcheck_types.go | 14 +- api/v1beta2/zz_generated.deepcopy.go | 20 +- api/v1beta2/zz_generated.openapi.go | 30 +-- .../cluster.x-k8s.io_clusterclasses.yaml | 12 +- .../crd/bases/cluster.x-k8s.io_clusters.yaml | 12 +- .../cluster.x-k8s.io_machinehealthchecks.yaml | 8 +- .../healthchecking.md | 10 +- .../cluster-class/write-clusterclass.md | 4 +- docs/book/src/tasks/using-kustomize.md | 4 +- exp/topology/desiredstate/desired_state.go | 14 +- .../desiredstate/desired_state_test.go | 18 +- exp/topology/scope/blueprint_test.go | 20 +- internal/apis/core/v1alpha3/conversion.go | 30 ++- .../core/v1alpha3/zz_generated.conversion.go | 53 +---- internal/apis/core/v1alpha4/conversion.go | 32 +++ .../core/v1alpha4/zz_generated.conversion.go | 68 +----- .../machinehealthcheck_controller_test.go | 4 +- .../machinehealthcheck_targets.go | 2 +- .../machinehealthcheck_targets_test.go | 16 +- .../topology/cluster/current_state_test.go | 4 +- .../topology/cluster/reconcile_state_test.go | 12 +- internal/webhooks/cluster_test.go | 10 +- internal/webhooks/clusterclass.go | 10 +- internal/webhooks/clusterclass_test.go | 16 +- internal/webhooks/machinehealthcheck_test.go | 44 ++-- test/e2e/kcp_remediations.go | 2 +- test/framework/machinehealthcheck_helpers.go | 18 +- util/collections/machine_filters.go | 2 +- util/test/builder/builders.go | 28 +-- util/test/builder/zz_generated.deepcopy.go | 6 +- 33 files changed, 434 insertions(+), 363 deletions(-) diff --git a/api/v1beta1/conversion.go b/api/v1beta1/conversion.go index 1ce2c5a2585e..6d8818470243 100644 --- a/api/v1beta1/conversion.go +++ b/api/v1beta1/conversion.go @@ -132,6 +132,38 @@ func Convert_v1beta1_ClusterClassSpec_To_v1beta2_ClusterClassSpec(in *ClusterCla return nil } +func Convert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass(in *MachineHealthCheckClass, out *clusterv1.MachineHealthCheckClass, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass(in, out, s); err != nil { + return err + } + + for _, c := range in.UnhealthyConditions { + out.UnhealthyNodeConditions = append(out.UnhealthyNodeConditions, clusterv1.UnhealthyNodeCondition{ + Type: c.Type, + Status: c.Status, + Timeout: c.Timeout, + }) + } + + return nil +} + +func Convert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass(in *clusterv1.MachineHealthCheckClass, out *MachineHealthCheckClass, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass(in, out, s); err != nil { + return err + } + + for _, c := range in.UnhealthyNodeConditions { + out.UnhealthyConditions = append(out.UnhealthyConditions, UnhealthyCondition{ + Type: c.Type, + Status: c.Status, + Timeout: c.Timeout, + }) + } + + return nil +} + func Convert_v1beta1_LocalObjectTemplate_To_v1beta2_InfrastructureClass(in *LocalObjectTemplate, out *clusterv1.InfrastructureClass, s apimachineryconversion.Scope) error { if in == nil { return nil @@ -403,6 +435,38 @@ func Convert_v1beta1_MachineDeploymentStatus_To_v1beta2_MachineDeploymentStatus( return nil } +func Convert_v1beta1_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in *MachineHealthCheckSpec, out *clusterv1.MachineHealthCheckSpec, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta1_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in, out, s); err != nil { + return err + } + + for _, c := range in.UnhealthyConditions { + out.UnhealthyNodeConditions = append(out.UnhealthyNodeConditions, clusterv1.UnhealthyNodeCondition{ + Type: c.Type, + Status: c.Status, + Timeout: c.Timeout, + }) + } + + return nil +} + +func Convert_v1beta2_MachineHealthCheckSpec_To_v1beta1_MachineHealthCheckSpec(in *clusterv1.MachineHealthCheckSpec, out *MachineHealthCheckSpec, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta2_MachineHealthCheckSpec_To_v1beta1_MachineHealthCheckSpec(in, out, s); err != nil { + return err + } + + for _, c := range in.UnhealthyNodeConditions { + out.UnhealthyConditions = append(out.UnhealthyConditions, UnhealthyCondition{ + Type: c.Type, + Status: c.Status, + Timeout: c.Timeout, + }) + } + + return nil +} + func Convert_v1beta2_MachineHealthCheckStatus_To_v1beta1_MachineHealthCheckStatus(in *clusterv1.MachineHealthCheckStatus, out *MachineHealthCheckStatus, s apimachineryconversion.Scope) error { if err := autoConvert_v1beta2_MachineHealthCheckStatus_To_v1beta1_MachineHealthCheckStatus(in, out, s); err != nil { return err diff --git a/api/v1beta1/zz_generated.conversion.go b/api/v1beta1/zz_generated.conversion.go index dce320f1ad9f..1bf25db88c0a 100644 --- a/api/v1beta1/zz_generated.conversion.go +++ b/api/v1beta1/zz_generated.conversion.go @@ -495,16 +495,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*MachineHealthCheckClass)(nil), (*v1beta2.MachineHealthCheckClass)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass(a.(*MachineHealthCheckClass), b.(*v1beta2.MachineHealthCheckClass), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.MachineHealthCheckClass)(nil), (*MachineHealthCheckClass)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass(a.(*v1beta2.MachineHealthCheckClass), b.(*MachineHealthCheckClass), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*MachineHealthCheckList)(nil), (*v1beta2.MachineHealthCheckList)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_MachineHealthCheckList_To_v1beta2_MachineHealthCheckList(a.(*MachineHealthCheckList), b.(*v1beta2.MachineHealthCheckList), scope) }); err != nil { @@ -515,16 +505,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*MachineHealthCheckSpec)(nil), (*v1beta2.MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(a.(*MachineHealthCheckSpec), b.(*v1beta2.MachineHealthCheckSpec), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.MachineHealthCheckSpec)(nil), (*MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_MachineHealthCheckSpec_To_v1beta1_MachineHealthCheckSpec(a.(*v1beta2.MachineHealthCheckSpec), b.(*MachineHealthCheckSpec), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*MachineHealthCheckTopology)(nil), (*v1beta2.MachineHealthCheckTopology)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_MachineHealthCheckTopology_To_v1beta2_MachineHealthCheckTopology(a.(*MachineHealthCheckTopology), b.(*v1beta2.MachineHealthCheckTopology), scope) }); err != nil { @@ -755,16 +735,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*UnhealthyCondition)(nil), (*v1beta2.UnhealthyCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_UnhealthyCondition_To_v1beta2_UnhealthyCondition(a.(*UnhealthyCondition), b.(*v1beta2.UnhealthyCondition), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.UnhealthyCondition)(nil), (*UnhealthyCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_UnhealthyCondition_To_v1beta1_UnhealthyCondition(a.(*v1beta2.UnhealthyCondition), b.(*UnhealthyCondition), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*ValidationRule)(nil), (*v1beta2.ValidationRule)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_ValidationRule_To_v1beta2_ValidationRule(a.(*ValidationRule), b.(*v1beta2.ValidationRule), scope) }); err != nil { @@ -865,6 +835,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*MachineHealthCheckClass)(nil), (*v1beta2.MachineHealthCheckClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass(a.(*MachineHealthCheckClass), b.(*v1beta2.MachineHealthCheckClass), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*MachineHealthCheckSpec)(nil), (*v1beta2.MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(a.(*MachineHealthCheckSpec), b.(*v1beta2.MachineHealthCheckSpec), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*MachineHealthCheckStatus)(nil), (*v1beta2.MachineHealthCheckStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_MachineHealthCheckStatus_To_v1beta2_MachineHealthCheckStatus(a.(*MachineHealthCheckStatus), b.(*v1beta2.MachineHealthCheckStatus), scope) }); err != nil { @@ -910,6 +890,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.MachineHealthCheckClass)(nil), (*MachineHealthCheckClass)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass(a.(*v1beta2.MachineHealthCheckClass), b.(*MachineHealthCheckClass), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v1beta2.MachineHealthCheckSpec)(nil), (*MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_MachineHealthCheckSpec_To_v1beta1_MachineHealthCheckSpec(a.(*v1beta2.MachineHealthCheckSpec), b.(*MachineHealthCheckSpec), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta2.MachineHealthCheckStatus)(nil), (*MachineHealthCheckStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_MachineHealthCheckStatus_To_v1beta1_MachineHealthCheckStatus(a.(*v1beta2.MachineHealthCheckStatus), b.(*MachineHealthCheckStatus), scope) }); err != nil { @@ -1565,7 +1555,15 @@ func autoConvert_v1beta1_ControlPlaneClass_To_v1beta2_ControlPlaneClass(in *Cont return err } out.MachineInfrastructure = (*v1beta2.LocalObjectTemplate)(unsafe.Pointer(in.MachineInfrastructure)) - out.MachineHealthCheck = (*v1beta2.MachineHealthCheckClass)(unsafe.Pointer(in.MachineHealthCheck)) + if in.MachineHealthCheck != nil { + in, out := &in.MachineHealthCheck, &out.MachineHealthCheck + *out = new(v1beta2.MachineHealthCheckClass) + if err := Convert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass(*in, *out, s); err != nil { + return err + } + } else { + out.MachineHealthCheck = nil + } out.NamingStrategy = (*v1beta2.ControlPlaneClassNamingStrategy)(unsafe.Pointer(in.NamingStrategy)) out.NodeDrainTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDrainTimeout)) out.NodeVolumeDetachTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeVolumeDetachTimeout)) @@ -1587,7 +1585,15 @@ func autoConvert_v1beta2_ControlPlaneClass_To_v1beta1_ControlPlaneClass(in *v1be return err } out.MachineInfrastructure = (*LocalObjectTemplate)(unsafe.Pointer(in.MachineInfrastructure)) - out.MachineHealthCheck = (*MachineHealthCheckClass)(unsafe.Pointer(in.MachineHealthCheck)) + if in.MachineHealthCheck != nil { + in, out := &in.MachineHealthCheck, &out.MachineHealthCheck + *out = new(MachineHealthCheckClass) + if err := Convert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass(*in, *out, s); err != nil { + return err + } + } else { + out.MachineHealthCheck = nil + } out.NamingStrategy = (*ControlPlaneClassNamingStrategy)(unsafe.Pointer(in.NamingStrategy)) out.NodeDrainTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDrainTimeout)) out.NodeVolumeDetachTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeVolumeDetachTimeout)) @@ -1626,7 +1632,15 @@ func autoConvert_v1beta1_ControlPlaneTopology_To_v1beta2_ControlPlaneTopology(in return err } out.Replicas = (*int32)(unsafe.Pointer(in.Replicas)) - out.MachineHealthCheck = (*v1beta2.MachineHealthCheckTopology)(unsafe.Pointer(in.MachineHealthCheck)) + if in.MachineHealthCheck != nil { + in, out := &in.MachineHealthCheck, &out.MachineHealthCheck + *out = new(v1beta2.MachineHealthCheckTopology) + if err := Convert_v1beta1_MachineHealthCheckTopology_To_v1beta2_MachineHealthCheckTopology(*in, *out, s); err != nil { + return err + } + } else { + out.MachineHealthCheck = nil + } out.NodeDrainTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDrainTimeout)) out.NodeVolumeDetachTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeVolumeDetachTimeout)) out.NodeDeletionTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDeletionTimeout)) @@ -1653,7 +1667,15 @@ func autoConvert_v1beta2_ControlPlaneTopology_To_v1beta1_ControlPlaneTopology(in return err } out.Replicas = (*int32)(unsafe.Pointer(in.Replicas)) - out.MachineHealthCheck = (*MachineHealthCheckTopology)(unsafe.Pointer(in.MachineHealthCheck)) + if in.MachineHealthCheck != nil { + in, out := &in.MachineHealthCheck, &out.MachineHealthCheck + *out = new(MachineHealthCheckTopology) + if err := Convert_v1beta2_MachineHealthCheckTopology_To_v1beta1_MachineHealthCheckTopology(*in, *out, s); err != nil { + return err + } + } else { + out.MachineHealthCheck = nil + } out.NodeDrainTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDrainTimeout)) out.NodeVolumeDetachTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeVolumeDetachTimeout)) out.NodeDeletionTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDeletionTimeout)) @@ -2022,7 +2044,15 @@ func autoConvert_v1beta1_MachineDeploymentClass_To_v1beta2_MachineDeploymentClas if err := Convert_v1beta1_MachineDeploymentClassTemplate_To_v1beta2_MachineDeploymentClassTemplate(&in.Template, &out.Template, s); err != nil { return err } - out.MachineHealthCheck = (*v1beta2.MachineHealthCheckClass)(unsafe.Pointer(in.MachineHealthCheck)) + if in.MachineHealthCheck != nil { + in, out := &in.MachineHealthCheck, &out.MachineHealthCheck + *out = new(v1beta2.MachineHealthCheckClass) + if err := Convert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass(*in, *out, s); err != nil { + return err + } + } else { + out.MachineHealthCheck = nil + } out.FailureDomain = (*string)(unsafe.Pointer(in.FailureDomain)) out.NamingStrategy = (*v1beta2.MachineDeploymentClassNamingStrategy)(unsafe.Pointer(in.NamingStrategy)) out.NodeDrainTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDrainTimeout)) @@ -2044,7 +2074,15 @@ func autoConvert_v1beta2_MachineDeploymentClass_To_v1beta1_MachineDeploymentClas if err := Convert_v1beta2_MachineDeploymentClassTemplate_To_v1beta1_MachineDeploymentClassTemplate(&in.Template, &out.Template, s); err != nil { return err } - out.MachineHealthCheck = (*MachineHealthCheckClass)(unsafe.Pointer(in.MachineHealthCheck)) + if in.MachineHealthCheck != nil { + in, out := &in.MachineHealthCheck, &out.MachineHealthCheck + *out = new(MachineHealthCheckClass) + if err := Convert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass(*in, *out, s); err != nil { + return err + } + } else { + out.MachineHealthCheck = nil + } out.FailureDomain = (*string)(unsafe.Pointer(in.FailureDomain)) out.NamingStrategy = (*MachineDeploymentClassNamingStrategy)(unsafe.Pointer(in.NamingStrategy)) out.NodeDrainTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDrainTimeout)) @@ -2290,7 +2328,15 @@ func autoConvert_v1beta1_MachineDeploymentTopology_To_v1beta2_MachineDeploymentT out.Name = in.Name out.FailureDomain = (*string)(unsafe.Pointer(in.FailureDomain)) out.Replicas = (*int32)(unsafe.Pointer(in.Replicas)) - out.MachineHealthCheck = (*v1beta2.MachineHealthCheckTopology)(unsafe.Pointer(in.MachineHealthCheck)) + if in.MachineHealthCheck != nil { + in, out := &in.MachineHealthCheck, &out.MachineHealthCheck + *out = new(v1beta2.MachineHealthCheckTopology) + if err := Convert_v1beta1_MachineHealthCheckTopology_To_v1beta2_MachineHealthCheckTopology(*in, *out, s); err != nil { + return err + } + } else { + out.MachineHealthCheck = nil + } out.NodeDrainTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDrainTimeout)) out.NodeVolumeDetachTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeVolumeDetachTimeout)) out.NodeDeletionTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDeletionTimeout)) @@ -2322,7 +2368,15 @@ func autoConvert_v1beta2_MachineDeploymentTopology_To_v1beta1_MachineDeploymentT out.Name = in.Name out.FailureDomain = (*string)(unsafe.Pointer(in.FailureDomain)) out.Replicas = (*int32)(unsafe.Pointer(in.Replicas)) - out.MachineHealthCheck = (*MachineHealthCheckTopology)(unsafe.Pointer(in.MachineHealthCheck)) + if in.MachineHealthCheck != nil { + in, out := &in.MachineHealthCheck, &out.MachineHealthCheck + *out = new(MachineHealthCheckTopology) + if err := Convert_v1beta2_MachineHealthCheckTopology_To_v1beta1_MachineHealthCheckTopology(*in, *out, s); err != nil { + return err + } + } else { + out.MachineHealthCheck = nil + } out.NodeDrainTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDrainTimeout)) out.NodeVolumeDetachTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeVolumeDetachTimeout)) out.NodeDeletionTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeDeletionTimeout)) @@ -2561,7 +2615,7 @@ func Convert_v1beta2_MachineHealthCheck_To_v1beta1_MachineHealthCheck(in *v1beta } func autoConvert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass(in *MachineHealthCheckClass, out *v1beta2.MachineHealthCheckClass, s conversion.Scope) error { - out.UnhealthyConditions = *(*[]v1beta2.UnhealthyCondition)(unsafe.Pointer(&in.UnhealthyConditions)) + // WARNING: in.UnhealthyConditions requires manual conversion: does not exist in peer-type out.MaxUnhealthy = (*intstr.IntOrString)(unsafe.Pointer(in.MaxUnhealthy)) out.UnhealthyRange = (*string)(unsafe.Pointer(in.UnhealthyRange)) out.NodeStartupTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeStartupTimeout)) @@ -2569,13 +2623,8 @@ func autoConvert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckCl return nil } -// Convert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass is an autogenerated conversion function. -func Convert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass(in *MachineHealthCheckClass, out *v1beta2.MachineHealthCheckClass, s conversion.Scope) error { - return autoConvert_v1beta1_MachineHealthCheckClass_To_v1beta2_MachineHealthCheckClass(in, out, s) -} - func autoConvert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass(in *v1beta2.MachineHealthCheckClass, out *MachineHealthCheckClass, s conversion.Scope) error { - out.UnhealthyConditions = *(*[]UnhealthyCondition)(unsafe.Pointer(&in.UnhealthyConditions)) + // WARNING: in.UnhealthyNodeConditions requires manual conversion: does not exist in peer-type out.MaxUnhealthy = (*intstr.IntOrString)(unsafe.Pointer(in.MaxUnhealthy)) out.UnhealthyRange = (*string)(unsafe.Pointer(in.UnhealthyRange)) out.NodeStartupTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeStartupTimeout)) @@ -2583,11 +2632,6 @@ func autoConvert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckCl return nil } -// Convert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass is an autogenerated conversion function. -func Convert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass(in *v1beta2.MachineHealthCheckClass, out *MachineHealthCheckClass, s conversion.Scope) error { - return autoConvert_v1beta2_MachineHealthCheckClass_To_v1beta1_MachineHealthCheckClass(in, out, s) -} - func autoConvert_v1beta1_MachineHealthCheckList_To_v1beta2_MachineHealthCheckList(in *MachineHealthCheckList, out *v1beta2.MachineHealthCheckList, s conversion.Scope) error { out.ListMeta = in.ListMeta if in.Items != nil { @@ -2633,7 +2677,7 @@ func Convert_v1beta2_MachineHealthCheckList_To_v1beta1_MachineHealthCheckList(in func autoConvert_v1beta1_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in *MachineHealthCheckSpec, out *v1beta2.MachineHealthCheckSpec, s conversion.Scope) error { out.ClusterName = in.ClusterName out.Selector = in.Selector - out.UnhealthyConditions = *(*[]v1beta2.UnhealthyCondition)(unsafe.Pointer(&in.UnhealthyConditions)) + // WARNING: in.UnhealthyConditions requires manual conversion: does not exist in peer-type out.MaxUnhealthy = (*intstr.IntOrString)(unsafe.Pointer(in.MaxUnhealthy)) out.UnhealthyRange = (*string)(unsafe.Pointer(in.UnhealthyRange)) out.NodeStartupTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeStartupTimeout)) @@ -2641,15 +2685,10 @@ func autoConvert_v1beta1_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpe return nil } -// Convert_v1beta1_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec is an autogenerated conversion function. -func Convert_v1beta1_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in *MachineHealthCheckSpec, out *v1beta2.MachineHealthCheckSpec, s conversion.Scope) error { - return autoConvert_v1beta1_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in, out, s) -} - func autoConvert_v1beta2_MachineHealthCheckSpec_To_v1beta1_MachineHealthCheckSpec(in *v1beta2.MachineHealthCheckSpec, out *MachineHealthCheckSpec, s conversion.Scope) error { out.ClusterName = in.ClusterName out.Selector = in.Selector - out.UnhealthyConditions = *(*[]UnhealthyCondition)(unsafe.Pointer(&in.UnhealthyConditions)) + // WARNING: in.UnhealthyNodeConditions requires manual conversion: does not exist in peer-type out.MaxUnhealthy = (*intstr.IntOrString)(unsafe.Pointer(in.MaxUnhealthy)) out.UnhealthyRange = (*string)(unsafe.Pointer(in.UnhealthyRange)) out.NodeStartupTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeStartupTimeout)) @@ -2657,11 +2696,6 @@ func autoConvert_v1beta2_MachineHealthCheckSpec_To_v1beta1_MachineHealthCheckSpe return nil } -// Convert_v1beta2_MachineHealthCheckSpec_To_v1beta1_MachineHealthCheckSpec is an autogenerated conversion function. -func Convert_v1beta2_MachineHealthCheckSpec_To_v1beta1_MachineHealthCheckSpec(in *v1beta2.MachineHealthCheckSpec, out *MachineHealthCheckSpec, s conversion.Scope) error { - return autoConvert_v1beta2_MachineHealthCheckSpec_To_v1beta1_MachineHealthCheckSpec(in, out, s) -} - func autoConvert_v1beta1_MachineHealthCheckStatus_To_v1beta2_MachineHealthCheckStatus(in *MachineHealthCheckStatus, out *v1beta2.MachineHealthCheckStatus, s conversion.Scope) error { out.ExpectedMachines = in.ExpectedMachines out.CurrentHealthy = in.CurrentHealthy @@ -3562,30 +3596,6 @@ func autoConvert_v1beta2_Topology_To_v1beta1_Topology(in *v1beta2.Topology, out return nil } -func autoConvert_v1beta1_UnhealthyCondition_To_v1beta2_UnhealthyCondition(in *UnhealthyCondition, out *v1beta2.UnhealthyCondition, s conversion.Scope) error { - out.Type = corev1.NodeConditionType(in.Type) - out.Status = corev1.ConditionStatus(in.Status) - out.Timeout = in.Timeout - return nil -} - -// Convert_v1beta1_UnhealthyCondition_To_v1beta2_UnhealthyCondition is an autogenerated conversion function. -func Convert_v1beta1_UnhealthyCondition_To_v1beta2_UnhealthyCondition(in *UnhealthyCondition, out *v1beta2.UnhealthyCondition, s conversion.Scope) error { - return autoConvert_v1beta1_UnhealthyCondition_To_v1beta2_UnhealthyCondition(in, out, s) -} - -func autoConvert_v1beta2_UnhealthyCondition_To_v1beta1_UnhealthyCondition(in *v1beta2.UnhealthyCondition, out *UnhealthyCondition, s conversion.Scope) error { - out.Type = corev1.NodeConditionType(in.Type) - out.Status = corev1.ConditionStatus(in.Status) - out.Timeout = in.Timeout - return nil -} - -// Convert_v1beta2_UnhealthyCondition_To_v1beta1_UnhealthyCondition is an autogenerated conversion function. -func Convert_v1beta2_UnhealthyCondition_To_v1beta1_UnhealthyCondition(in *v1beta2.UnhealthyCondition, out *UnhealthyCondition, s conversion.Scope) error { - return autoConvert_v1beta2_UnhealthyCondition_To_v1beta1_UnhealthyCondition(in, out, s) -} - func autoConvert_v1beta1_ValidationRule_To_v1beta2_ValidationRule(in *ValidationRule, out *v1beta2.ValidationRule, s conversion.Scope) error { out.Rule = in.Rule out.Message = in.Message @@ -3661,7 +3671,17 @@ func Convert_v1beta2_VariableSchemaMetadata_To_v1beta1_VariableSchemaMetadata(in } func autoConvert_v1beta1_WorkersClass_To_v1beta2_WorkersClass(in *WorkersClass, out *v1beta2.WorkersClass, s conversion.Scope) error { - out.MachineDeployments = *(*[]v1beta2.MachineDeploymentClass)(unsafe.Pointer(&in.MachineDeployments)) + if in.MachineDeployments != nil { + in, out := &in.MachineDeployments, &out.MachineDeployments + *out = make([]v1beta2.MachineDeploymentClass, len(*in)) + for i := range *in { + if err := Convert_v1beta1_MachineDeploymentClass_To_v1beta2_MachineDeploymentClass(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.MachineDeployments = nil + } out.MachinePools = *(*[]v1beta2.MachinePoolClass)(unsafe.Pointer(&in.MachinePools)) return nil } @@ -3672,7 +3692,17 @@ func Convert_v1beta1_WorkersClass_To_v1beta2_WorkersClass(in *WorkersClass, out } func autoConvert_v1beta2_WorkersClass_To_v1beta1_WorkersClass(in *v1beta2.WorkersClass, out *WorkersClass, s conversion.Scope) error { - out.MachineDeployments = *(*[]MachineDeploymentClass)(unsafe.Pointer(&in.MachineDeployments)) + if in.MachineDeployments != nil { + in, out := &in.MachineDeployments, &out.MachineDeployments + *out = make([]MachineDeploymentClass, len(*in)) + for i := range *in { + if err := Convert_v1beta2_MachineDeploymentClass_To_v1beta1_MachineDeploymentClass(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.MachineDeployments = nil + } out.MachinePools = *(*[]MachinePoolClass)(unsafe.Pointer(&in.MachinePools)) return nil } diff --git a/api/v1beta2/clusterclass_types.go b/api/v1beta2/clusterclass_types.go index 84dab8bba096..5630ef21b7aa 100644 --- a/api/v1beta2/clusterclass_types.go +++ b/api/v1beta2/clusterclass_types.go @@ -376,13 +376,13 @@ type MachineDeploymentClassNamingStrategy struct { // MachineHealthCheckClass defines a MachineHealthCheck for a group of Machines. type MachineHealthCheckClass struct { - // unhealthyConditions contains a list of the conditions that determine + // unhealthyNodeConditions contains a list of conditions that determine // whether a node is considered unhealthy. The conditions are combined in a // logical OR, i.e. if any of the conditions is met, the node is unhealthy. // // +optional // +kubebuilder:validation:MaxItems=100 - UnhealthyConditions []UnhealthyCondition `json:"unhealthyConditions,omitempty"` + UnhealthyNodeConditions []UnhealthyNodeCondition `json:"unhealthyNodeConditions,omitempty"` // maxUnhealthy specifies the maximum number of unhealthy machines allowed. // Any further remediation is only allowed if at most "maxUnhealthy" machines selected by diff --git a/api/v1beta2/machinehealthcheck_types.go b/api/v1beta2/machinehealthcheck_types.go index d638c878d8f2..606075cc0749 100644 --- a/api/v1beta2/machinehealthcheck_types.go +++ b/api/v1beta2/machinehealthcheck_types.go @@ -61,13 +61,13 @@ type MachineHealthCheckSpec struct { // +required Selector metav1.LabelSelector `json:"selector"` - // unhealthyConditions contains a list of the conditions that determine - // whether a node is considered unhealthy. The conditions are combined in a + // unhealthyNodeConditions contains a list of conditions that determine + // whether a node is considered unhealthy. The conditions are combined in a // logical OR, i.e. if any of the conditions is met, the node is unhealthy. // // +optional // +kubebuilder:validation:MaxItems=100 - UnhealthyConditions []UnhealthyCondition `json:"unhealthyConditions,omitempty"` + UnhealthyNodeConditions []UnhealthyNodeCondition `json:"unhealthyNodeConditions,omitempty"` // maxUnhealthy specifies the maximum number of unhealthy machines allowed. // Any further remediation is only allowed if at most "maxUnhealthy" machines selected by @@ -120,12 +120,12 @@ type MachineHealthCheckSpec struct { // ANCHOR_END: MachineHealthCHeckSpec -// ANCHOR: UnhealthyCondition +// ANCHOR: UnhealthyNodeCondition -// UnhealthyCondition represents a Node condition type and value with a timeout +// UnhealthyNodeCondition represents a Node condition type and value with a timeout // specified as a duration. When the named condition has been in the given // status for at least the timeout value, a node is considered unhealthy. -type UnhealthyCondition struct { +type UnhealthyNodeCondition struct { // type of Node condition // +kubebuilder:validation:Type=string // +kubebuilder:validation:MinLength=1 @@ -146,7 +146,7 @@ type UnhealthyCondition struct { Timeout metav1.Duration `json:"timeout"` } -// ANCHOR_END: UnhealthyCondition +// ANCHOR_END: UnhealthyNodeCondition // ANCHOR: MachineHealthCheckStatus diff --git a/api/v1beta2/zz_generated.deepcopy.go b/api/v1beta2/zz_generated.deepcopy.go index aa546ce4a7ee..a0b6f7bf5327 100644 --- a/api/v1beta2/zz_generated.deepcopy.go +++ b/api/v1beta2/zz_generated.deepcopy.go @@ -1891,9 +1891,9 @@ func (in *MachineHealthCheck) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MachineHealthCheckClass) DeepCopyInto(out *MachineHealthCheckClass) { *out = *in - if in.UnhealthyConditions != nil { - in, out := &in.UnhealthyConditions, &out.UnhealthyConditions - *out = make([]UnhealthyCondition, len(*in)) + if in.UnhealthyNodeConditions != nil { + in, out := &in.UnhealthyNodeConditions, &out.UnhealthyNodeConditions + *out = make([]UnhealthyNodeCondition, len(*in)) copy(*out, *in) } if in.MaxUnhealthy != nil { @@ -1984,9 +1984,9 @@ func (in *MachineHealthCheckList) DeepCopyObject() runtime.Object { func (in *MachineHealthCheckSpec) DeepCopyInto(out *MachineHealthCheckSpec) { *out = *in in.Selector.DeepCopyInto(&out.Selector) - if in.UnhealthyConditions != nil { - in, out := &in.UnhealthyConditions, &out.UnhealthyConditions - *out = make([]UnhealthyCondition, len(*in)) + if in.UnhealthyNodeConditions != nil { + in, out := &in.UnhealthyNodeConditions, &out.UnhealthyNodeConditions + *out = make([]UnhealthyNodeCondition, len(*in)) copy(*out, *in) } if in.MaxUnhealthy != nil { @@ -2908,17 +2908,17 @@ func (in *Topology) DeepCopy() *Topology { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *UnhealthyCondition) DeepCopyInto(out *UnhealthyCondition) { +func (in *UnhealthyNodeCondition) DeepCopyInto(out *UnhealthyNodeCondition) { *out = *in out.Timeout = in.Timeout } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UnhealthyCondition. -func (in *UnhealthyCondition) DeepCopy() *UnhealthyCondition { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UnhealthyNodeCondition. +func (in *UnhealthyNodeCondition) DeepCopy() *UnhealthyNodeCondition { if in == nil { return nil } - out := new(UnhealthyCondition) + out := new(UnhealthyNodeCondition) in.DeepCopyInto(out) return out } diff --git a/api/v1beta2/zz_generated.openapi.go b/api/v1beta2/zz_generated.openapi.go index 1a36d21cf045..3cd71fade0e7 100644 --- a/api/v1beta2/zz_generated.openapi.go +++ b/api/v1beta2/zz_generated.openapi.go @@ -125,7 +125,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "sigs.k8s.io/cluster-api/api/v1beta2.PatchSelectorMatchMachinePoolClass": schema_sigsk8sio_cluster_api_api_v1beta2_PatchSelectorMatchMachinePoolClass(ref), "sigs.k8s.io/cluster-api/api/v1beta2.RemediationStrategy": schema_sigsk8sio_cluster_api_api_v1beta2_RemediationStrategy(ref), "sigs.k8s.io/cluster-api/api/v1beta2.Topology": schema_sigsk8sio_cluster_api_api_v1beta2_Topology(ref), - "sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyCondition": schema_sigsk8sio_cluster_api_api_v1beta2_UnhealthyCondition(ref), + "sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyNodeCondition": schema_sigsk8sio_cluster_api_api_v1beta2_UnhealthyNodeCondition(ref), "sigs.k8s.io/cluster-api/api/v1beta2.ValidationRule": schema_sigsk8sio_cluster_api_api_v1beta2_ValidationRule(ref), "sigs.k8s.io/cluster-api/api/v1beta2.VariableSchema": schema_sigsk8sio_cluster_api_api_v1beta2_VariableSchema(ref), "sigs.k8s.io/cluster-api/api/v1beta2.VariableSchemaMetadata": schema_sigsk8sio_cluster_api_api_v1beta2_VariableSchemaMetadata(ref), @@ -3199,15 +3199,15 @@ func schema_sigsk8sio_cluster_api_api_v1beta2_MachineHealthCheckClass(ref common Description: "MachineHealthCheckClass defines a MachineHealthCheck for a group of Machines.", Type: []string{"object"}, Properties: map[string]spec.Schema{ - "unhealthyConditions": { + "unhealthyNodeConditions": { SchemaProps: spec.SchemaProps{ - Description: "unhealthyConditions contains a list of the conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy.", + Description: "unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ SchemaProps: spec.SchemaProps{ Default: map[string]interface{}{}, - Ref: ref("sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyCondition"), + Ref: ref("sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyNodeCondition"), }, }, }, @@ -3242,7 +3242,7 @@ func schema_sigsk8sio_cluster_api_api_v1beta2_MachineHealthCheckClass(ref common }, }, Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/util/intstr.IntOrString", "sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyCondition"}, + "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/util/intstr.IntOrString", "sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyNodeCondition"}, } } @@ -3340,15 +3340,15 @@ func schema_sigsk8sio_cluster_api_api_v1beta2_MachineHealthCheckSpec(ref common. Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), }, }, - "unhealthyConditions": { + "unhealthyNodeConditions": { SchemaProps: spec.SchemaProps{ - Description: "unhealthyConditions contains a list of the conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy.", + Description: "unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ SchemaProps: spec.SchemaProps{ Default: map[string]interface{}{}, - Ref: ref("sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyCondition"), + Ref: ref("sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyNodeCondition"), }, }, }, @@ -3384,7 +3384,7 @@ func schema_sigsk8sio_cluster_api_api_v1beta2_MachineHealthCheckSpec(ref common. }, }, Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector", "k8s.io/apimachinery/pkg/util/intstr.IntOrString", "sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyCondition"}, + "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector", "k8s.io/apimachinery/pkg/util/intstr.IntOrString", "sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyNodeCondition"}, } } @@ -3491,15 +3491,15 @@ func schema_sigsk8sio_cluster_api_api_v1beta2_MachineHealthCheckTopology(ref com Format: "", }, }, - "unhealthyConditions": { + "unhealthyNodeConditions": { SchemaProps: spec.SchemaProps{ - Description: "unhealthyConditions contains a list of the conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy.", + Description: "unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy.", Type: []string{"array"}, Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ SchemaProps: spec.SchemaProps{ Default: map[string]interface{}{}, - Ref: ref("sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyCondition"), + Ref: ref("sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyNodeCondition"), }, }, }, @@ -3534,7 +3534,7 @@ func schema_sigsk8sio_cluster_api_api_v1beta2_MachineHealthCheckTopology(ref com }, }, Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/util/intstr.IntOrString", "sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyCondition"}, + "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/util/intstr.IntOrString", "sigs.k8s.io/cluster-api/api/v1beta2.UnhealthyNodeCondition"}, } } @@ -4951,11 +4951,11 @@ func schema_sigsk8sio_cluster_api_api_v1beta2_Topology(ref common.ReferenceCallb } } -func schema_sigsk8sio_cluster_api_api_v1beta2_UnhealthyCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { +func schema_sigsk8sio_cluster_api_api_v1beta2_UnhealthyNodeCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ - Description: "UnhealthyCondition represents a Node condition type and value with a timeout specified as a duration. When the named condition has been in the given status for at least the timeout value, a node is considered unhealthy.", + Description: "UnhealthyNodeCondition represents a Node condition type and value with a timeout specified as a duration. When the named condition has been in the given status for at least the timeout value, a node is considered unhealthy.", Type: []string{"object"}, Properties: map[string]spec.Schema{ "type": { diff --git a/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml b/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml index 90ebd14b350d..29d106244d7c 100644 --- a/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml +++ b/config/crd/bases/cluster.x-k8s.io_clusterclasses.yaml @@ -2969,14 +2969,14 @@ spec: type: string type: object x-kubernetes-map-type: atomic - unhealthyConditions: + unhealthyNodeConditions: description: |- - unhealthyConditions contains a list of the conditions that determine + unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy. items: description: |- - UnhealthyCondition represents a Node condition type and value with a timeout + UnhealthyNodeCondition represents a Node condition type and value with a timeout specified as a duration. When the named condition has been in the given status for at least the timeout value, a node is considered unhealthy. properties: @@ -4031,14 +4031,14 @@ spec: type: string type: object x-kubernetes-map-type: atomic - unhealthyConditions: + unhealthyNodeConditions: description: |- - unhealthyConditions contains a list of the conditions that determine + unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy. items: description: |- - UnhealthyCondition represents a Node condition type and value with a timeout + UnhealthyNodeCondition represents a Node condition type and value with a timeout specified as a duration. When the named condition has been in the given status for at least the timeout value, a node is considered unhealthy. properties: diff --git a/config/crd/bases/cluster.x-k8s.io_clusters.yaml b/config/crd/bases/cluster.x-k8s.io_clusters.yaml index b2abe5384663..4bcb18ca98ee 100644 --- a/config/crd/bases/cluster.x-k8s.io_clusters.yaml +++ b/config/crd/bases/cluster.x-k8s.io_clusters.yaml @@ -2510,14 +2510,14 @@ spec: type: string type: object x-kubernetes-map-type: atomic - unhealthyConditions: + unhealthyNodeConditions: description: |- - unhealthyConditions contains a list of the conditions that determine + unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy. items: description: |- - UnhealthyCondition represents a Node condition type and value with a timeout + UnhealthyNodeCondition represents a Node condition type and value with a timeout specified as a duration. When the named condition has been in the given status for at least the timeout value, a node is considered unhealthy. properties: @@ -2855,14 +2855,14 @@ spec: type: string type: object x-kubernetes-map-type: atomic - unhealthyConditions: + unhealthyNodeConditions: description: |- - unhealthyConditions contains a list of the conditions that determine + unhealthyNodeConditions contains a list of conditions that determine whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy. items: description: |- - UnhealthyCondition represents a Node condition type and value with a timeout + UnhealthyNodeCondition represents a Node condition type and value with a timeout specified as a duration. When the named condition has been in the given status for at least the timeout value, a node is considered unhealthy. properties: diff --git a/config/crd/bases/cluster.x-k8s.io_machinehealthchecks.yaml b/config/crd/bases/cluster.x-k8s.io_machinehealthchecks.yaml index c6eebdb88311..6bc676892684 100644 --- a/config/crd/bases/cluster.x-k8s.io_machinehealthchecks.yaml +++ b/config/crd/bases/cluster.x-k8s.io_machinehealthchecks.yaml @@ -1163,14 +1163,14 @@ spec: type: object type: object x-kubernetes-map-type: atomic - unhealthyConditions: + unhealthyNodeConditions: description: |- - unhealthyConditions contains a list of the conditions that determine - whether a node is considered unhealthy. The conditions are combined in a + unhealthyNodeConditions contains a list of conditions that determine + whether a node is considered unhealthy. The conditions are combined in a logical OR, i.e. if any of the conditions is met, the node is unhealthy. items: description: |- - UnhealthyCondition represents a Node condition type and value with a timeout + UnhealthyNodeCondition represents a Node condition type and value with a timeout specified as a duration. When the named condition has been in the given status for at least the timeout value, a node is considered unhealthy. properties: diff --git a/docs/book/src/tasks/automated-machine-management/healthchecking.md b/docs/book/src/tasks/automated-machine-management/healthchecking.md index fe03b19f795c..124acd65bf9b 100644 --- a/docs/book/src/tasks/automated-machine-management/healthchecking.md +++ b/docs/book/src/tasks/automated-machine-management/healthchecking.md @@ -28,7 +28,7 @@ By default, the action of remediating a Machine should trigger a new Machine to Use the following example as a basis for creating a MachineHealthCheck for worker nodes: ```yaml -apiVersion: cluster.x-k8s.io/v1beta1 +apiVersion: cluster.x-k8s.io/v1beta2 kind: MachineHealthCheck metadata: name: capi-quickstart-node-unhealthy-5m @@ -51,7 +51,7 @@ spec: matchLabels: nodepool: nodepool-0 # Conditions to check on Nodes for matched Machines, if any condition is matched for the duration of its timeout, the Machine is considered unhealthy - unhealthyConditions: + unhealthyNodeConditions: - type: Ready status: Unknown timeout: 300s @@ -64,7 +64,7 @@ Use this example as the basis for defining a MachineHealthCheck for control plan the KubeadmControlPlane: ```yaml -apiVersion: cluster.x-k8s.io/v1beta1 +apiVersion: cluster.x-k8s.io/v1beta2 kind: MachineHealthCheck metadata: name: capi-quickstart-kcp-unhealthy-5m @@ -74,7 +74,7 @@ spec: selector: matchLabels: cluster.x-k8s.io/control-plane: "" - unhealthyConditions: + unhealthyNodeConditions: - type: Ready status: Unknown timeout: 300s @@ -106,7 +106,7 @@ KubeadmControlPlane allows to control how remediation happen by defining an opti this feature can be used for preventing unnecessary load on infrastructure provider e.g. in case of quota problems,or for allowing the infrastructure provider to stabilize in case of temporary problems. ```yaml -apiVersion: cluster.x-k8s.io/v1beta1 +apiVersion: cluster.x-k8s.io/v1beta2 kind: KubeadmControlPlane metadata: name: my-control-plane diff --git a/docs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.md b/docs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.md index 73dae926630a..1baf0e732847 100644 --- a/docs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.md +++ b/docs/book/src/tasks/experimental-features/cluster-class/write-clusterclass.md @@ -204,7 +204,7 @@ spec: machineHealthCheck: maxUnhealthy: 33% nodeStartupTimeout: 15m - unhealthyConditions: + unhealthyNodeConditions: - type: Ready status: Unknown timeout: 300s @@ -218,7 +218,7 @@ spec: machineHealthCheck: unhealthyRange: "[0-2]" nodeStartupTimeout: 10m - unhealthyConditions: + unhealthyNodeConditions: - type: Ready status: Unknown timeout: 300s diff --git a/docs/book/src/tasks/using-kustomize.md b/docs/book/src/tasks/using-kustomize.md index 4f6ac76cfb9b..bce36a89b681 100644 --- a/docs/book/src/tasks/using-kustomize.md +++ b/docs/book/src/tasks/using-kustomize.md @@ -78,7 +78,7 @@ resources: The content of the `workload-mhc.yaml` file would be the definition of a standard MHC: ```yaml -apiVersion: cluster.x-k8s.io/v1alpha3 +apiVersion: cluster.x-k8s.io/v1beta2 kind: MachineHealthCheck metadata: name: md-0-mhc @@ -89,7 +89,7 @@ spec: selector: matchLabels: cluster.x-k8s.io/deployment-name: md-0 - unhealthyConditions: + unhealthyNodeConditions: - type: Ready status: Unknown timeout: 300s diff --git a/exp/topology/desiredstate/desired_state.go b/exp/topology/desiredstate/desired_state.go index 4f0168f14ca5..8d505447c81c 100644 --- a/exp/topology/desiredstate/desired_state.go +++ b/exp/topology/desiredstate/desired_state.go @@ -1425,13 +1425,13 @@ func computeMachineHealthCheck(ctx context.Context, healthCheckTarget client.Obj }, }, Spec: clusterv1.MachineHealthCheckSpec{ - ClusterName: cluster.Name, - Selector: *selector, - UnhealthyConditions: check.UnhealthyConditions, - MaxUnhealthy: check.MaxUnhealthy, - UnhealthyRange: check.UnhealthyRange, - NodeStartupTimeout: check.NodeStartupTimeout, - RemediationTemplate: check.RemediationTemplate, + ClusterName: cluster.Name, + Selector: *selector, + UnhealthyNodeConditions: check.UnhealthyNodeConditions, + MaxUnhealthy: check.MaxUnhealthy, + UnhealthyRange: check.UnhealthyRange, + NodeStartupTimeout: check.NodeStartupTimeout, + RemediationTemplate: check.RemediationTemplate, }, } diff --git a/exp/topology/desiredstate/desired_state_test.go b/exp/topology/desiredstate/desired_state_test.go index 3b1fc5d1d3ae..48f09cba408d 100644 --- a/exp/topology/desiredstate/desired_state_test.go +++ b/exp/topology/desiredstate/desired_state_test.go @@ -1420,7 +1420,7 @@ func TestComputeMachineDeployment(t *testing.T) { labels := map[string]string{"fizzLabel": "buzz", "fooLabel": "bar"} annotations := map[string]string{"fizzAnnotation": "buzz", "fooAnnotation": "bar"} - unhealthyConditions := []clusterv1.UnhealthyCondition{ + unhealthyNodeConditions := []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -1452,8 +1452,8 @@ func TestComputeMachineDeployment(t *testing.T) { WithInfrastructureTemplate(workerInfrastructureMachineTemplate). WithBootstrapTemplate(workerBootstrapTemplate). WithMachineHealthCheckClass(&clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: unhealthyConditions, - NodeStartupTimeout: nodeTimeoutDuration, + UnhealthyNodeConditions: unhealthyNodeConditions, + NodeStartupTimeout: nodeTimeoutDuration, }). WithReadinessGates(clusterClassReadinessGates). WithFailureDomain(&clusterClassFailureDomain). @@ -1493,7 +1493,7 @@ func TestComputeMachineDeployment(t *testing.T) { BootstrapTemplate: workerBootstrapTemplate, InfrastructureMachineTemplate: workerInfrastructureMachineTemplate, MachineHealthCheck: &clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: unhealthyConditions, + UnhealthyNodeConditions: unhealthyNodeConditions, NodeStartupTimeout: &metav1.Duration{ Duration: time.Duration(1), }, @@ -1653,7 +1653,7 @@ func TestComputeMachineDeployment(t *testing.T) { BootstrapTemplate: workerBootstrapTemplate, InfrastructureMachineTemplate: workerInfrastructureMachineTemplate, MachineHealthCheck: &clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: unhealthyConditions, + UnhealthyNodeConditions: unhealthyNodeConditions, NodeStartupTimeout: &metav1.Duration{ Duration: time.Duration(1), }, @@ -1913,8 +1913,8 @@ func TestComputeMachineDeployment(t *testing.T) { // Check that the NodeStartupTime is set as expected. g.Expect(actual.MachineHealthCheck.Spec.NodeStartupTimeout).To(Equal(nodeTimeoutDuration)) - // Check that UnhealthyConditions are set as expected. - g.Expect(actual.MachineHealthCheck.Spec.UnhealthyConditions).To(BeComparableTo(unhealthyConditions)) + // Check that UnhealthyNodeConditions are set as expected. + g.Expect(actual.MachineHealthCheck.Spec.UnhealthyNodeConditions).To(BeComparableTo(unhealthyNodeConditions)) }) } @@ -3045,7 +3045,7 @@ func TestMergeMap(t *testing.T) { func Test_computeMachineHealthCheck(t *testing.T) { maxUnhealthyValue := intstr.FromString("100%") mhcSpec := &clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -3090,7 +3090,7 @@ func Test_computeMachineHealthCheck(t *testing.T) { }}, // MaxUnhealthy is added by defaulting values using MachineHealthCheck.Default() MaxUnhealthy: &maxUnhealthyValue, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, diff --git a/exp/topology/scope/blueprint_test.go b/exp/topology/scope/blueprint_test.go index cc4027ac405a..f4f381b3654a 100644 --- a/exp/topology/scope/blueprint_test.go +++ b/exp/topology/scope/blueprint_test.go @@ -112,7 +112,7 @@ func TestIsControlPlaneMachineHealthCheckEnabled(t *testing.T) { WithClass("cluster-class"). WithControlPlaneMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -136,7 +136,7 @@ func TestIsControlPlaneMachineHealthCheckEnabled(t *testing.T) { WithControlPlaneMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ Enable: ptr.To(false), MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -160,7 +160,7 @@ func TestIsControlPlaneMachineHealthCheckEnabled(t *testing.T) { WithControlPlaneMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ Enable: ptr.To(true), MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -185,7 +185,7 @@ func TestIsControlPlaneMachineHealthCheckEnabled(t *testing.T) { func TestControlPlaneMachineHealthCheckClass(t *testing.T) { mhcInClusterClass := &clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -196,7 +196,7 @@ func TestControlPlaneMachineHealthCheckClass(t *testing.T) { percent50 := intstr.FromString("50%") mhcInClusterTopology := &clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -325,7 +325,7 @@ func TestIsMachineDeploymentMachineHealthCheckEnabled(t *testing.T) { Class: "worker-class", MachineHealthCheck: &clusterv1.MachineHealthCheckTopology{ MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -349,7 +349,7 @@ func TestIsMachineDeploymentMachineHealthCheckEnabled(t *testing.T) { MachineHealthCheck: &clusterv1.MachineHealthCheckTopology{ Enable: ptr.To(false), MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -373,7 +373,7 @@ func TestIsMachineDeploymentMachineHealthCheckEnabled(t *testing.T) { MachineHealthCheck: &clusterv1.MachineHealthCheckTopology{ Enable: ptr.To(true), MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -397,7 +397,7 @@ func TestIsMachineDeploymentMachineHealthCheckEnabled(t *testing.T) { func TestMachineDeploymentMachineHealthCheckClass(t *testing.T) { mhcInClusterClass := &clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -408,7 +408,7 @@ func TestMachineDeploymentMachineHealthCheckClass(t *testing.T) { percent50 := intstr.FromString("50%") mhcInClusterTopology := &clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, diff --git a/internal/apis/core/v1alpha3/conversion.go b/internal/apis/core/v1alpha3/conversion.go index 0d65f3c032f9..9eb0c881eaf1 100644 --- a/internal/apis/core/v1alpha3/conversion.go +++ b/internal/apis/core/v1alpha3/conversion.go @@ -452,8 +452,36 @@ func Convert_v1beta2_MachineRollingUpdateDeployment_To_v1alpha3_MachineRollingUp return autoConvert_v1beta2_MachineRollingUpdateDeployment_To_v1alpha3_MachineRollingUpdateDeployment(in, out, s) } +func Convert_v1alpha3_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in *MachineHealthCheckSpec, out *clusterv1.MachineHealthCheckSpec, s apimachineryconversion.Scope) error { + if err := autoConvert_v1alpha3_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in, out, s); err != nil { + return err + } + + for _, c := range in.UnhealthyConditions { + out.UnhealthyNodeConditions = append(out.UnhealthyNodeConditions, clusterv1.UnhealthyNodeCondition{ + Type: c.Type, + Status: c.Status, + Timeout: c.Timeout, + }) + } + + return nil +} + func Convert_v1beta2_MachineHealthCheckSpec_To_v1alpha3_MachineHealthCheckSpec(in *clusterv1.MachineHealthCheckSpec, out *MachineHealthCheckSpec, s apimachineryconversion.Scope) error { - return autoConvert_v1beta2_MachineHealthCheckSpec_To_v1alpha3_MachineHealthCheckSpec(in, out, s) + if err := autoConvert_v1beta2_MachineHealthCheckSpec_To_v1alpha3_MachineHealthCheckSpec(in, out, s); err != nil { + return err + } + + for _, c := range in.UnhealthyNodeConditions { + out.UnhealthyConditions = append(out.UnhealthyConditions, UnhealthyCondition{ + Type: c.Type, + Status: c.Status, + Timeout: c.Timeout, + }) + } + + return nil } func Convert_v1beta2_MachineHealthCheckStatus_To_v1alpha3_MachineHealthCheckStatus(in *clusterv1.MachineHealthCheckStatus, out *MachineHealthCheckStatus, s apimachineryconversion.Scope) error { diff --git a/internal/apis/core/v1alpha3/zz_generated.conversion.go b/internal/apis/core/v1alpha3/zz_generated.conversion.go index 9287308569d4..336081a76641 100644 --- a/internal/apis/core/v1alpha3/zz_generated.conversion.go +++ b/internal/apis/core/v1alpha3/zz_generated.conversion.go @@ -179,11 +179,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*MachineHealthCheckSpec)(nil), (*v1beta2.MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(a.(*MachineHealthCheckSpec), b.(*v1beta2.MachineHealthCheckSpec), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*MachineHealthCheckStatus)(nil), (*v1beta2.MachineHealthCheckStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha3_MachineHealthCheckStatus_To_v1beta2_MachineHealthCheckStatus(a.(*MachineHealthCheckStatus), b.(*v1beta2.MachineHealthCheckStatus), scope) }); err != nil { @@ -259,16 +254,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*UnhealthyCondition)(nil), (*v1beta2.UnhealthyCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_UnhealthyCondition_To_v1beta2_UnhealthyCondition(a.(*UnhealthyCondition), b.(*v1beta2.UnhealthyCondition), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.UnhealthyCondition)(nil), (*UnhealthyCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_UnhealthyCondition_To_v1alpha3_UnhealthyCondition(a.(*v1beta2.UnhealthyCondition), b.(*UnhealthyCondition), scope) - }); err != nil { - return err - } if err := s.AddConversionFunc((*v1.Condition)(nil), (*Condition)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_Condition_To_v1alpha3_Condition(a.(*v1.Condition), b.(*Condition), scope) }); err != nil { @@ -294,6 +279,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*MachineHealthCheckSpec)(nil), (*v1beta2.MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha3_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(a.(*MachineHealthCheckSpec), b.(*v1beta2.MachineHealthCheckSpec), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*MachineSetStatus)(nil), (*v1beta2.MachineSetStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha3_MachineSetStatus_To_v1beta2_MachineSetStatus(a.(*MachineSetStatus), b.(*v1beta2.MachineSetStatus), scope) }); err != nil { @@ -963,22 +953,17 @@ func Convert_v1beta2_MachineHealthCheckList_To_v1alpha3_MachineHealthCheckList(i func autoConvert_v1alpha3_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in *MachineHealthCheckSpec, out *v1beta2.MachineHealthCheckSpec, s conversion.Scope) error { out.ClusterName = in.ClusterName out.Selector = in.Selector - out.UnhealthyConditions = *(*[]v1beta2.UnhealthyCondition)(unsafe.Pointer(&in.UnhealthyConditions)) + // WARNING: in.UnhealthyConditions requires manual conversion: does not exist in peer-type out.MaxUnhealthy = (*intstr.IntOrString)(unsafe.Pointer(in.MaxUnhealthy)) out.NodeStartupTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeStartupTimeout)) out.RemediationTemplate = (*corev1.ObjectReference)(unsafe.Pointer(in.RemediationTemplate)) return nil } -// Convert_v1alpha3_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec is an autogenerated conversion function. -func Convert_v1alpha3_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in *MachineHealthCheckSpec, out *v1beta2.MachineHealthCheckSpec, s conversion.Scope) error { - return autoConvert_v1alpha3_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in, out, s) -} - func autoConvert_v1beta2_MachineHealthCheckSpec_To_v1alpha3_MachineHealthCheckSpec(in *v1beta2.MachineHealthCheckSpec, out *MachineHealthCheckSpec, s conversion.Scope) error { out.ClusterName = in.ClusterName out.Selector = in.Selector - out.UnhealthyConditions = *(*[]UnhealthyCondition)(unsafe.Pointer(&in.UnhealthyConditions)) + // WARNING: in.UnhealthyNodeConditions requires manual conversion: does not exist in peer-type out.MaxUnhealthy = (*intstr.IntOrString)(unsafe.Pointer(in.MaxUnhealthy)) // WARNING: in.UnhealthyRange requires manual conversion: does not exist in peer-type out.NodeStartupTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeStartupTimeout)) @@ -1382,27 +1367,3 @@ func autoConvert_v1beta2_ObjectMeta_To_v1alpha3_ObjectMeta(in *v1beta2.ObjectMet func Convert_v1beta2_ObjectMeta_To_v1alpha3_ObjectMeta(in *v1beta2.ObjectMeta, out *ObjectMeta, s conversion.Scope) error { return autoConvert_v1beta2_ObjectMeta_To_v1alpha3_ObjectMeta(in, out, s) } - -func autoConvert_v1alpha3_UnhealthyCondition_To_v1beta2_UnhealthyCondition(in *UnhealthyCondition, out *v1beta2.UnhealthyCondition, s conversion.Scope) error { - out.Type = corev1.NodeConditionType(in.Type) - out.Status = corev1.ConditionStatus(in.Status) - out.Timeout = in.Timeout - return nil -} - -// Convert_v1alpha3_UnhealthyCondition_To_v1beta2_UnhealthyCondition is an autogenerated conversion function. -func Convert_v1alpha3_UnhealthyCondition_To_v1beta2_UnhealthyCondition(in *UnhealthyCondition, out *v1beta2.UnhealthyCondition, s conversion.Scope) error { - return autoConvert_v1alpha3_UnhealthyCondition_To_v1beta2_UnhealthyCondition(in, out, s) -} - -func autoConvert_v1beta2_UnhealthyCondition_To_v1alpha3_UnhealthyCondition(in *v1beta2.UnhealthyCondition, out *UnhealthyCondition, s conversion.Scope) error { - out.Type = corev1.NodeConditionType(in.Type) - out.Status = corev1.ConditionStatus(in.Status) - out.Timeout = in.Timeout - return nil -} - -// Convert_v1beta2_UnhealthyCondition_To_v1alpha3_UnhealthyCondition is an autogenerated conversion function. -func Convert_v1beta2_UnhealthyCondition_To_v1alpha3_UnhealthyCondition(in *v1beta2.UnhealthyCondition, out *UnhealthyCondition, s conversion.Scope) error { - return autoConvert_v1beta2_UnhealthyCondition_To_v1alpha3_UnhealthyCondition(in, out, s) -} diff --git a/internal/apis/core/v1alpha4/conversion.go b/internal/apis/core/v1alpha4/conversion.go index 6250597e85ef..06ffa214e136 100644 --- a/internal/apis/core/v1alpha4/conversion.go +++ b/internal/apis/core/v1alpha4/conversion.go @@ -634,6 +634,38 @@ func Convert_v1beta2_MachineSetStatus_To_v1alpha4_MachineSetStatus(in *clusterv1 return autoConvert_v1beta2_MachineSetStatus_To_v1alpha4_MachineSetStatus(in, out, s) } +func Convert_v1alpha4_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in *MachineHealthCheckSpec, out *clusterv1.MachineHealthCheckSpec, s apimachineryconversion.Scope) error { + if err := autoConvert_v1alpha4_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in, out, s); err != nil { + return err + } + + for _, c := range in.UnhealthyConditions { + out.UnhealthyNodeConditions = append(out.UnhealthyNodeConditions, clusterv1.UnhealthyNodeCondition{ + Type: c.Type, + Status: c.Status, + Timeout: c.Timeout, + }) + } + + return nil +} + +func Convert_v1beta2_MachineHealthCheckSpec_To_v1alpha4_MachineHealthCheckSpec(in *clusterv1.MachineHealthCheckSpec, out *MachineHealthCheckSpec, s apimachineryconversion.Scope) error { + if err := autoConvert_v1beta2_MachineHealthCheckSpec_To_v1alpha4_MachineHealthCheckSpec(in, out, s); err != nil { + return err + } + + for _, c := range in.UnhealthyNodeConditions { + out.UnhealthyConditions = append(out.UnhealthyConditions, UnhealthyCondition{ + Type: c.Type, + Status: c.Status, + Timeout: c.Timeout, + }) + } + + return nil +} + func Convert_v1beta2_MachineHealthCheckStatus_To_v1alpha4_MachineHealthCheckStatus(in *clusterv1.MachineHealthCheckStatus, out *MachineHealthCheckStatus, s apimachineryconversion.Scope) error { // V1Beta2 was added in v1beta1. return autoConvert_v1beta2_MachineHealthCheckStatus_To_v1alpha4_MachineHealthCheckStatus(in, out, s) diff --git a/internal/apis/core/v1alpha4/zz_generated.conversion.go b/internal/apis/core/v1alpha4/zz_generated.conversion.go index 0c3beee43da0..32c5de68bfea 100644 --- a/internal/apis/core/v1alpha4/zz_generated.conversion.go +++ b/internal/apis/core/v1alpha4/zz_generated.conversion.go @@ -244,16 +244,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*MachineHealthCheckSpec)(nil), (*v1beta2.MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(a.(*MachineHealthCheckSpec), b.(*v1beta2.MachineHealthCheckSpec), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.MachineHealthCheckSpec)(nil), (*MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_MachineHealthCheckSpec_To_v1alpha4_MachineHealthCheckSpec(a.(*v1beta2.MachineHealthCheckSpec), b.(*MachineHealthCheckSpec), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*MachineHealthCheckStatus)(nil), (*v1beta2.MachineHealthCheckStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha4_MachineHealthCheckStatus_To_v1beta2_MachineHealthCheckStatus(a.(*MachineHealthCheckStatus), b.(*v1beta2.MachineHealthCheckStatus), scope) }); err != nil { @@ -339,16 +329,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*UnhealthyCondition)(nil), (*v1beta2.UnhealthyCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha4_UnhealthyCondition_To_v1beta2_UnhealthyCondition(a.(*UnhealthyCondition), b.(*v1beta2.UnhealthyCondition), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1beta2.UnhealthyCondition)(nil), (*UnhealthyCondition)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_UnhealthyCondition_To_v1alpha4_UnhealthyCondition(a.(*v1beta2.UnhealthyCondition), b.(*UnhealthyCondition), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*WorkersClass)(nil), (*v1beta2.WorkersClass)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha4_WorkersClass_To_v1beta2_WorkersClass(a.(*WorkersClass), b.(*v1beta2.WorkersClass), scope) }); err != nil { @@ -384,6 +364,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*MachineHealthCheckSpec)(nil), (*v1beta2.MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha4_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(a.(*MachineHealthCheckSpec), b.(*v1beta2.MachineHealthCheckSpec), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*MachineSetStatus)(nil), (*v1beta2.MachineSetStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha4_MachineSetStatus_To_v1beta2_MachineSetStatus(a.(*MachineSetStatus), b.(*v1beta2.MachineSetStatus), scope) }); err != nil { @@ -459,6 +444,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*v1beta2.MachineHealthCheckSpec)(nil), (*MachineHealthCheckSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_MachineHealthCheckSpec_To_v1alpha4_MachineHealthCheckSpec(a.(*v1beta2.MachineHealthCheckSpec), b.(*MachineHealthCheckSpec), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1beta2.MachineHealthCheckStatus)(nil), (*MachineHealthCheckStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_MachineHealthCheckStatus_To_v1alpha4_MachineHealthCheckStatus(a.(*v1beta2.MachineHealthCheckStatus), b.(*MachineHealthCheckStatus), scope) }); err != nil { @@ -1396,7 +1386,7 @@ func Convert_v1beta2_MachineHealthCheckList_To_v1alpha4_MachineHealthCheckList(i func autoConvert_v1alpha4_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in *MachineHealthCheckSpec, out *v1beta2.MachineHealthCheckSpec, s conversion.Scope) error { out.ClusterName = in.ClusterName out.Selector = in.Selector - out.UnhealthyConditions = *(*[]v1beta2.UnhealthyCondition)(unsafe.Pointer(&in.UnhealthyConditions)) + // WARNING: in.UnhealthyConditions requires manual conversion: does not exist in peer-type out.MaxUnhealthy = (*intstr.IntOrString)(unsafe.Pointer(in.MaxUnhealthy)) out.UnhealthyRange = (*string)(unsafe.Pointer(in.UnhealthyRange)) out.NodeStartupTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeStartupTimeout)) @@ -1404,15 +1394,10 @@ func autoConvert_v1alpha4_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSp return nil } -// Convert_v1alpha4_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec is an autogenerated conversion function. -func Convert_v1alpha4_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in *MachineHealthCheckSpec, out *v1beta2.MachineHealthCheckSpec, s conversion.Scope) error { - return autoConvert_v1alpha4_MachineHealthCheckSpec_To_v1beta2_MachineHealthCheckSpec(in, out, s) -} - func autoConvert_v1beta2_MachineHealthCheckSpec_To_v1alpha4_MachineHealthCheckSpec(in *v1beta2.MachineHealthCheckSpec, out *MachineHealthCheckSpec, s conversion.Scope) error { out.ClusterName = in.ClusterName out.Selector = in.Selector - out.UnhealthyConditions = *(*[]UnhealthyCondition)(unsafe.Pointer(&in.UnhealthyConditions)) + // WARNING: in.UnhealthyNodeConditions requires manual conversion: does not exist in peer-type out.MaxUnhealthy = (*intstr.IntOrString)(unsafe.Pointer(in.MaxUnhealthy)) out.UnhealthyRange = (*string)(unsafe.Pointer(in.UnhealthyRange)) out.NodeStartupTimeout = (*v1.Duration)(unsafe.Pointer(in.NodeStartupTimeout)) @@ -1420,11 +1405,6 @@ func autoConvert_v1beta2_MachineHealthCheckSpec_To_v1alpha4_MachineHealthCheckSp return nil } -// Convert_v1beta2_MachineHealthCheckSpec_To_v1alpha4_MachineHealthCheckSpec is an autogenerated conversion function. -func Convert_v1beta2_MachineHealthCheckSpec_To_v1alpha4_MachineHealthCheckSpec(in *v1beta2.MachineHealthCheckSpec, out *MachineHealthCheckSpec, s conversion.Scope) error { - return autoConvert_v1beta2_MachineHealthCheckSpec_To_v1alpha4_MachineHealthCheckSpec(in, out, s) -} - func autoConvert_v1alpha4_MachineHealthCheckStatus_To_v1beta2_MachineHealthCheckStatus(in *MachineHealthCheckStatus, out *v1beta2.MachineHealthCheckStatus, s conversion.Scope) error { out.ExpectedMachines = in.ExpectedMachines out.CurrentHealthy = in.CurrentHealthy @@ -1890,30 +1870,6 @@ func autoConvert_v1beta2_Topology_To_v1alpha4_Topology(in *v1beta2.Topology, out return nil } -func autoConvert_v1alpha4_UnhealthyCondition_To_v1beta2_UnhealthyCondition(in *UnhealthyCondition, out *v1beta2.UnhealthyCondition, s conversion.Scope) error { - out.Type = corev1.NodeConditionType(in.Type) - out.Status = corev1.ConditionStatus(in.Status) - out.Timeout = in.Timeout - return nil -} - -// Convert_v1alpha4_UnhealthyCondition_To_v1beta2_UnhealthyCondition is an autogenerated conversion function. -func Convert_v1alpha4_UnhealthyCondition_To_v1beta2_UnhealthyCondition(in *UnhealthyCondition, out *v1beta2.UnhealthyCondition, s conversion.Scope) error { - return autoConvert_v1alpha4_UnhealthyCondition_To_v1beta2_UnhealthyCondition(in, out, s) -} - -func autoConvert_v1beta2_UnhealthyCondition_To_v1alpha4_UnhealthyCondition(in *v1beta2.UnhealthyCondition, out *UnhealthyCondition, s conversion.Scope) error { - out.Type = corev1.NodeConditionType(in.Type) - out.Status = corev1.ConditionStatus(in.Status) - out.Timeout = in.Timeout - return nil -} - -// Convert_v1beta2_UnhealthyCondition_To_v1alpha4_UnhealthyCondition is an autogenerated conversion function. -func Convert_v1beta2_UnhealthyCondition_To_v1alpha4_UnhealthyCondition(in *v1beta2.UnhealthyCondition, out *UnhealthyCondition, s conversion.Scope) error { - return autoConvert_v1beta2_UnhealthyCondition_To_v1alpha4_UnhealthyCondition(in, out, s) -} - func autoConvert_v1alpha4_WorkersClass_To_v1beta2_WorkersClass(in *WorkersClass, out *v1beta2.WorkersClass, s conversion.Scope) error { if in.MachineDeployments != nil { in, out := &in.MachineDeployments, &out.MachineDeployments diff --git a/internal/controllers/machinehealthcheck/machinehealthcheck_controller_test.go b/internal/controllers/machinehealthcheck/machinehealthcheck_controller_test.go index a31273e858aa..095893ff422e 100644 --- a/internal/controllers/machinehealthcheck/machinehealthcheck_controller_test.go +++ b/internal/controllers/machinehealthcheck/machinehealthcheck_controller_test.go @@ -1156,7 +1156,7 @@ func TestMachineHealthCheck_Reconcile(t *testing.T) { cluster := createCluster(g, ns.Name) mhc := newMachineHealthCheck(cluster.Namespace, cluster.Name) - mhc.Spec.UnhealthyConditions = nil + mhc.Spec.UnhealthyNodeConditions = nil g.Expect(env.Create(ctx, mhc)).To(Succeed()) defer func(do ...client.Object) { @@ -2752,7 +2752,7 @@ func newMachineHealthCheck(namespace, clusterName string) *clusterv1.MachineHeal }, MaxUnhealthy: &maxUnhealthy, NodeStartupTimeout: &metav1.Duration{Duration: 1 * time.Millisecond}, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, diff --git a/internal/controllers/machinehealthcheck/machinehealthcheck_targets.go b/internal/controllers/machinehealthcheck/machinehealthcheck_targets.go index 3b62d5172627..b7f6f5e32f7f 100644 --- a/internal/controllers/machinehealthcheck/machinehealthcheck_targets.go +++ b/internal/controllers/machinehealthcheck/machinehealthcheck_targets.go @@ -181,7 +181,7 @@ func (t *healthCheckTarget) needsRemediation(logger logr.Logger, timeoutForMachi } // check conditions - for _, c := range t.MHC.Spec.UnhealthyConditions { + for _, c := range t.MHC.Spec.UnhealthyNodeConditions { nodeCondition := getNodeCondition(t.Node, c.Type) // Skip when current node condition is different from the one reported diff --git a/internal/controllers/machinehealthcheck/machinehealthcheck_targets_test.go b/internal/controllers/machinehealthcheck/machinehealthcheck_targets_test.go index 513b68b0f2ff..810f6478a028 100644 --- a/internal/controllers/machinehealthcheck/machinehealthcheck_targets_test.go +++ b/internal/controllers/machinehealthcheck/machinehealthcheck_targets_test.go @@ -62,7 +62,7 @@ func TestGetTargetsFromMHC(t *testing.T) { Selector: metav1.LabelSelector{ MatchLabels: mhcSelector, }, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -211,7 +211,7 @@ func TestHealthCheckTargets(t *testing.T) { timeoutForMachineToHaveNode := 10 * time.Minute disabledTimeoutForMachineToHaveNode := time.Duration(0) - timeoutForUnhealthyConditions := 5 * time.Minute + timeoutForUnhealthyNodeConditions := 5 * time.Minute // Create a test MHC testMHC := &clusterv1.MachineHealthCheck{ @@ -224,16 +224,16 @@ func TestHealthCheckTargets(t *testing.T) { MatchLabels: mhcSelector, }, ClusterName: clusterName, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, - Timeout: metav1.Duration{Duration: timeoutForUnhealthyConditions}, + Timeout: metav1.Duration{Duration: timeoutForUnhealthyNodeConditions}, }, { Type: corev1.NodeReady, Status: corev1.ConditionFalse, - Timeout: metav1.Duration{Duration: timeoutForUnhealthyConditions}, + Timeout: metav1.Duration{Duration: timeoutForUnhealthyNodeConditions}, }, }, }, @@ -301,7 +301,7 @@ func TestHealthCheckTargets(t *testing.T) { }, } // Target for when the Node has been seen, but has now gone - // using MHC without unhealthyConditions + // using MHC without unhealthyNodeConditions nodeGoneAwayEmptyConditions := healthCheckTarget{ Cluster: cluster, MHC: testMHCEmptyConditions, @@ -364,8 +364,8 @@ func TestHealthCheckTargets(t *testing.T) { Node: testNodeUnknown400, nodeMissing: false, } - nodeUnknown400Condition := newFailedHealthCheckV1Beta1Condition(clusterv1.UnhealthyNodeConditionV1Beta1Reason, "Condition Ready on node is reporting status Unknown for more than %s", timeoutForUnhealthyConditions) - nodeUnknown400V1Beta2Condition := newFailedHealthCheckCondition(clusterv1.MachineHealthCheckUnhealthyNodeReason, "Health check failed: Condition Ready on Node is reporting status Unknown for more than %s", timeoutForUnhealthyConditions) + nodeUnknown400Condition := newFailedHealthCheckV1Beta1Condition(clusterv1.UnhealthyNodeConditionV1Beta1Reason, "Condition Ready on node is reporting status Unknown for more than %s", timeoutForUnhealthyNodeConditions) + nodeUnknown400V1Beta2Condition := newFailedHealthCheckCondition(clusterv1.MachineHealthCheckUnhealthyNodeReason, "Health check failed: Condition Ready on Node is reporting status Unknown for more than %s", timeoutForUnhealthyNodeConditions) // Target for when a node is healthy testNodeHealthy := newTestNode("node1") diff --git a/internal/controllers/topology/cluster/current_state_test.go b/internal/controllers/topology/cluster/current_state_test.go index 508dea7b4b14..26d63e024694 100644 --- a/internal/controllers/topology/cluster/current_state_test.go +++ b/internal/controllers/topology/cluster/current_state_test.go @@ -135,7 +135,7 @@ func TestGetCurrentState(t *testing.T) { // MachineHealthChecks for the MachineDeployment and the ControlPlane. machineHealthCheckForMachineDeployment := builder.MachineHealthCheck(machineDeployment.Namespace, machineDeployment.Name). WithSelector(*selectors.ForMachineDeploymentMHC(machineDeployment)). - WithUnhealthyConditions([]clusterv1.UnhealthyCondition{ + WithUnhealthyNodeConditions([]clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -152,7 +152,7 @@ func TestGetCurrentState(t *testing.T) { machineHealthCheckForControlPlane := builder.MachineHealthCheck(controlPlane.GetNamespace(), controlPlane.GetName()). WithSelector(*selectors.ForControlPlaneMHC()). - WithUnhealthyConditions([]clusterv1.UnhealthyCondition{ + WithUnhealthyNodeConditions([]clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, diff --git a/internal/controllers/topology/cluster/reconcile_state_test.go b/internal/controllers/topology/cluster/reconcile_state_test.go index ac8397bce6b9..24ef9ab17f09 100644 --- a/internal/controllers/topology/cluster/reconcile_state_test.go +++ b/internal/controllers/topology/cluster/reconcile_state_test.go @@ -1733,7 +1733,7 @@ func TestReconcileControlPlaneMachineHealthCheck(t *testing.T) { infrastructureMachineTemplate := builder.TestInfrastructureMachineTemplate(metav1.NamespaceDefault, "infra1").Build() mhcClass := &clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -1758,7 +1758,7 @@ func TestReconcileControlPlaneMachineHealthCheck(t *testing.T) { mhcBuilder := builder.MachineHealthCheck(metav1.NamespaceDefault, "cp1"). WithSelector(*selectors.ForControlPlaneMHC()). - WithUnhealthyConditions(mhcClass.UnhealthyConditions). + WithUnhealthyNodeConditions(mhcClass.UnhealthyNodeConditions). WithClusterName("cluster1") tests := []struct { @@ -3309,7 +3309,7 @@ func TestReconcileMachineDeploymentMachineHealthCheck(t *testing.T) { maxUnhealthy := intstr.Parse("45%") mhcBuilder := builder.MachineHealthCheck(metav1.NamespaceDefault, "md-1"). WithSelector(*selectors.ForMachineDeploymentMHC(md)). - WithUnhealthyConditions([]clusterv1.UnhealthyCondition{ + WithUnhealthyNodeConditions([]clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -3713,7 +3713,7 @@ func TestReconciler_reconcileMachineHealthCheck(t *testing.T) { cp := builder.ControlPlane(metav1.NamespaceDefault, "cp1").Build() mhcBuilder := builder.MachineHealthCheck(metav1.NamespaceDefault, "cp1"). WithSelector(*selectors.ForControlPlaneMHC()). - WithUnhealthyConditions([]clusterv1.UnhealthyCondition{ + WithUnhealthyNodeConditions([]clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -3738,14 +3738,14 @@ func TestReconciler_reconcileMachineHealthCheck(t *testing.T) { name: "Update a MachineHealthCheck with changes", current: mhcBuilder.DeepCopy().Build(), // update the unhealthy conditions in the MachineHealthCheck - desired: mhcBuilder.DeepCopy().WithUnhealthyConditions([]clusterv1.UnhealthyCondition{ + desired: mhcBuilder.DeepCopy().WithUnhealthyNodeConditions([]clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, Timeout: metav1.Duration{Duration: 1000 * time.Minute}, }, }).Build(), - want: mhcBuilder.DeepCopy().WithUnhealthyConditions([]clusterv1.UnhealthyCondition{ + want: mhcBuilder.DeepCopy().WithUnhealthyNodeConditions([]clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, diff --git a/internal/webhooks/cluster_test.go b/internal/webhooks/cluster_test.go index d538b6a80e8d..1a84490701c1 100644 --- a/internal/webhooks/cluster_test.go +++ b/internal/webhooks/cluster_test.go @@ -2255,7 +2255,7 @@ func TestClusterTopologyValidationWithClient(t *testing.T) { WithControlPlaneReplicas(3). WithControlPlaneMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{}, + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{}, }, }). Build()). @@ -2276,7 +2276,7 @@ func TestClusterTopologyValidationWithClient(t *testing.T) { WithControlPlaneReplicas(3). WithControlPlaneMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -2321,7 +2321,7 @@ func TestClusterTopologyValidationWithClient(t *testing.T) { WithControlPlaneMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ Enable: ptr.To(true), MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -2376,7 +2376,7 @@ func TestClusterTopologyValidationWithClient(t *testing.T) { WithClass("worker-class"). WithMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{}, + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{}, }, }). Build(), @@ -2433,7 +2433,7 @@ func TestClusterTopologyValidationWithClient(t *testing.T) { WithMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ Enable: ptr.To(true), MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, diff --git a/internal/webhooks/clusterclass.go b/internal/webhooks/clusterclass.go index fc66972c0eb9..6404c4db8ef1 100644 --- a/internal/webhooks/clusterclass.go +++ b/internal/webhooks/clusterclass.go @@ -523,11 +523,11 @@ func validateMachineHealthCheckClass(fldPath *field.Path, namepace string, m *cl Namespace: namepace, }, Spec: clusterv1.MachineHealthCheckSpec{ - NodeStartupTimeout: m.NodeStartupTimeout, - MaxUnhealthy: m.MaxUnhealthy, - UnhealthyConditions: m.UnhealthyConditions, - UnhealthyRange: m.UnhealthyRange, - RemediationTemplate: m.RemediationTemplate, + NodeStartupTimeout: m.NodeStartupTimeout, + MaxUnhealthy: m.MaxUnhealthy, + UnhealthyNodeConditions: m.UnhealthyNodeConditions, + UnhealthyRange: m.UnhealthyRange, + RemediationTemplate: m.RemediationTemplate, }} return (&MachineHealthCheck{}).validateCommonFields(&mhc, fldPath) diff --git a/internal/webhooks/clusterclass_test.go b/internal/webhooks/clusterclass_test.go index c6fdc02a08f4..44d657a1ddcb 100644 --- a/internal/webhooks/clusterclass_test.go +++ b/internal/webhooks/clusterclass_test.go @@ -893,7 +893,7 @@ func TestClusterClassValidation(t *testing.T) { builder.InfrastructureMachineTemplate(metav1.NamespaceDefault, "cpInfra1"). Build()). WithControlPlaneMachineHealthCheck(&clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -924,7 +924,7 @@ func TestClusterClassValidation(t *testing.T) { expectErr: true, }, { - name: "create does not fail if ControlPlane MachineHealthCheck does not define UnhealthyConditions", + name: "create does not fail if ControlPlane MachineHealthCheck does not define UnhealthyNodeConditions", in: builder.ClusterClass(metav1.NamespaceDefault, "class1"). WithInfrastructureClusterTemplate( builder.InfrastructureClusterTemplate(metav1.NamespaceDefault, "infra1").Build()). @@ -957,7 +957,7 @@ func TestClusterClassValidation(t *testing.T) { WithBootstrapTemplate( builder.BootstrapTemplate(metav1.NamespaceDefault, "bootstrap1").Build()). WithMachineHealthCheckClass(&clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -986,7 +986,7 @@ func TestClusterClassValidation(t *testing.T) { WithBootstrapTemplate( builder.BootstrapTemplate(metav1.NamespaceDefault, "bootstrap1").Build()). WithMachineHealthCheckClass(&clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -1003,7 +1003,7 @@ func TestClusterClassValidation(t *testing.T) { expectErr: true, }, { - name: "create does not fail if MachineDeployment MachineHealthCheck does not define UnhealthyConditions", + name: "create does not fail if MachineDeployment MachineHealthCheck does not define UnhealthyNodeConditions", in: builder.ClusterClass(metav1.NamespaceDefault, "class1"). WithInfrastructureClusterTemplate( builder.InfrastructureClusterTemplate(metav1.NamespaceDefault, "infra1").Build()). @@ -2302,7 +2302,7 @@ func TestClusterClassValidationWithClusterAwareChecks(t *testing.T) { builder.ControlPlaneTemplate(metav1.NamespaceDefault, "cp1"). Build()). WithControlPlaneMachineHealthCheck(&clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -2355,7 +2355,7 @@ func TestClusterClassValidationWithClusterAwareChecks(t *testing.T) { WithControlPlaneMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ Enable: ptr.To(true), MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, @@ -2488,7 +2488,7 @@ func TestClusterClassValidationWithClusterAwareChecks(t *testing.T) { WithMachineHealthCheck(&clusterv1.MachineHealthCheckTopology{ Enable: ptr.To(true), MachineHealthCheckClass: clusterv1.MachineHealthCheckClass{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionUnknown, diff --git a/internal/webhooks/machinehealthcheck_test.go b/internal/webhooks/machinehealthcheck_test.go index bac2958f3dcf..d6e0e0ce9f99 100644 --- a/internal/webhooks/machinehealthcheck_test.go +++ b/internal/webhooks/machinehealthcheck_test.go @@ -40,7 +40,7 @@ func TestMachineHealthCheckDefault(t *testing.T) { MatchLabels: map[string]string{"foo": "bar"}, }, RemediationTemplate: &corev1.ObjectReference{}, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -86,7 +86,7 @@ func TestMachineHealthCheckLabelSelectorAsSelectorValidation(t *testing.T) { Selector: metav1.LabelSelector{ MatchLabels: tt.selectors, }, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -148,7 +148,7 @@ func TestMachineHealthCheckClusterNameImmutable(t *testing.T) { "test": "test", }, }, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -164,7 +164,7 @@ func TestMachineHealthCheckClusterNameImmutable(t *testing.T) { "test": "test", }, }, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -184,15 +184,15 @@ func TestMachineHealthCheckClusterNameImmutable(t *testing.T) { } } -func TestMachineHealthCheckUnhealthyConditions(t *testing.T) { +func TestMachineHealthCheckUnhealthyNodeConditions(t *testing.T) { tests := []struct { - name string - unhealthyConditions []clusterv1.UnhealthyCondition - expectErr bool + name string + unhealthyNodeConditions []clusterv1.UnhealthyNodeCondition + expectErr bool }{ { - name: "pass with correctly defined unhealthyConditions", - unhealthyConditions: []clusterv1.UnhealthyCondition{ + name: "pass with correctly defined unhealthyNodeConditions", + unhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -201,14 +201,14 @@ func TestMachineHealthCheckUnhealthyConditions(t *testing.T) { expectErr: false, }, { - name: "do not fail if the UnhealthyCondition array is nil", - unhealthyConditions: nil, - expectErr: false, + name: "do not fail if the UnhealthyNodeCondition array is nil", + unhealthyNodeConditions: nil, + expectErr: false, }, { - name: "do not fail if the UnhealthyCondition array is nil", - unhealthyConditions: []clusterv1.UnhealthyCondition{}, - expectErr: false, + name: "do not fail if the UnhealthyNodeCondition array is nil", + unhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{}, + expectErr: false, }, } @@ -222,7 +222,7 @@ func TestMachineHealthCheckUnhealthyConditions(t *testing.T) { "test": "test", }, }, - UnhealthyConditions: tt.unhealthyConditions, + UnhealthyNodeConditions: tt.unhealthyNodeConditions, }, } webhook := &MachineHealthCheck{} @@ -301,7 +301,7 @@ func TestMachineHealthCheckNodeStartupTimeout(t *testing.T) { "test": "test", }, }, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -369,7 +369,7 @@ func TestMachineHealthCheckMaxUnhealthy(t *testing.T) { "test": "test", }, }, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -401,7 +401,7 @@ func TestMachineHealthCheckSelectorValidation(t *testing.T) { g := NewWithT(t) mhc := &clusterv1.MachineHealthCheck{ Spec: clusterv1.MachineHealthCheckSpec{ - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -427,7 +427,7 @@ func TestMachineHealthCheckClusterNameSelectorValidation(t *testing.T) { "baz": "qux", }, }, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, @@ -455,7 +455,7 @@ func TestMachineHealthCheckRemediationTemplateNamespaceValidation(t *testing.T) Spec: clusterv1.MachineHealthCheckSpec{ Selector: metav1.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, RemediationTemplate: &corev1.ObjectReference{Namespace: "foo"}, - UnhealthyConditions: []clusterv1.UnhealthyCondition{ + UnhealthyNodeConditions: []clusterv1.UnhealthyNodeCondition{ { Type: corev1.NodeReady, Status: corev1.ConditionFalse, diff --git a/test/e2e/kcp_remediations.go b/test/e2e/kcp_remediations.go index d0babaecfe4d..de4c8a354656 100644 --- a/test/e2e/kcp_remediations.go +++ b/test/e2e/kcp_remediations.go @@ -75,7 +75,7 @@ type KCPRemediationSpecInput struct { // NOTE: In order for this to work communications from workload cluster to management cluster must be enabled. // - An MHC targeting control plane machines with the mhc-test=fail labels and // nodeStartupTimeout: 30s - // unhealthyConditions: + // unhealthyNodeConditions: // - type: e2e.remediation.condition // status: "False" // timeout: 10s diff --git a/test/framework/machinehealthcheck_helpers.go b/test/framework/machinehealthcheck_helpers.go index a17473fe8daf..43e52f5a013f 100644 --- a/test/framework/machinehealthcheck_helpers.go +++ b/test/framework/machinehealthcheck_helpers.go @@ -56,7 +56,7 @@ func DiscoverMachineHealthChecksAndWaitForRemediation(ctx context.Context, input Expect(machineHealthChecks).NotTo(BeEmpty()) for _, mhc := range machineHealthChecks { - Expect(mhc.Spec.UnhealthyConditions).NotTo(BeEmpty()) + Expect(mhc.Spec.UnhealthyNodeConditions).NotTo(BeEmpty()) fmt.Fprintln(GinkgoWriter, "Ensuring there is at least 1 Machine that MachineHealthCheck is matching") machines := GetMachinesByMachineHealthCheck(ctx, GetMachinesByMachineHealthCheckInput{ @@ -69,8 +69,8 @@ func DiscoverMachineHealthChecksAndWaitForRemediation(ctx context.Context, input fmt.Fprintln(GinkgoWriter, "Patching MachineHealthCheck unhealthy condition to one of the nodes") unhealthyNodeCondition := corev1.NodeCondition{ - Type: mhc.Spec.UnhealthyConditions[0].Type, - Status: mhc.Spec.UnhealthyConditions[0].Status, + Type: mhc.Spec.UnhealthyNodeConditions[0].Type, + Status: mhc.Spec.UnhealthyNodeConditions[0].Status, LastTransitionTime: metav1.Time{Time: time.Now()}, } PatchNodeCondition(ctx, PatchNodeConditionInput{ @@ -145,7 +145,7 @@ func WaitForMachineHealthCheckToRemediateUnhealthyNodeCondition(ctx context.Cont }) // Wait for all the machines to exist. // NOTE: this is required given that this helper is called after a remediation - // and we want to make sure all the machine are back in place before testing for unhealthyCondition being fixed. + // and we want to make sure all the machine are back in place before testing for unhealthyNodeConditions being fixed. if len(machines) < input.MachinesCount { return false } @@ -160,7 +160,7 @@ func WaitForMachineHealthCheckToRemediateUnhealthyNodeCondition(ctx context.Cont if err != nil { return false } - if hasMatchingUnhealthyConditions(input.MachineHealthCheck, node.Status.Conditions) { + if hasMatchingUnhealthyNodeConditions(input.MachineHealthCheck, node.Status.Conditions) { return false } } @@ -168,11 +168,11 @@ func WaitForMachineHealthCheckToRemediateUnhealthyNodeCondition(ctx context.Cont }, intervals...).Should(BeTrue()) } -// hasMatchingUnhealthyConditions returns true if any node condition matches with machine health check unhealthy conditions. -func hasMatchingUnhealthyConditions(machineHealthCheck *clusterv1.MachineHealthCheck, nodeConditions []corev1.NodeCondition) bool { - for _, unhealthyCondition := range machineHealthCheck.Spec.UnhealthyConditions { +// hasMatchingUnhealthyNodeConditions returns true if any node condition matches with machine health check unhealthy conditions. +func hasMatchingUnhealthyNodeConditions(machineHealthCheck *clusterv1.MachineHealthCheck, nodeConditions []corev1.NodeCondition) bool { + for _, unhealthyNodeCondition := range machineHealthCheck.Spec.UnhealthyNodeConditions { for _, nodeCondition := range nodeConditions { - if nodeCondition.Type == unhealthyCondition.Type && nodeCondition.Status == unhealthyCondition.Status { + if nodeCondition.Type == unhealthyNodeCondition.Type && nodeCondition.Status == unhealthyNodeCondition.Status { return true } } diff --git a/util/collections/machine_filters.go b/util/collections/machine_filters.go index 4e6ee603acdd..0e0409225a72 100644 --- a/util/collections/machine_filters.go +++ b/util/collections/machine_filters.go @@ -170,7 +170,7 @@ func IsUnhealthy(machine *clusterv1.Machine) bool { // HasUnhealthyControlPlaneComponents returns a filter to find all unhealthy control plane machines that // have any of the following control plane component conditions set to False: // APIServerPodHealthy, ControllerManagerPodHealthy, SchedulerPodHealthy, EtcdPodHealthy & EtcdMemberHealthy (if using managed etcd). -// It is different from the HasUnhealthyCondition func which checks MachineHealthCheck conditions. +// It is different from the IsUnhealthyAndOwnerRemediated and IsUnhealthy funcs which check MachineHealthCheck conditions. func HasUnhealthyControlPlaneComponents(isEtcdManaged bool) Func { controlPlaneMachineHealthConditions := []string{ controlplanev1.KubeadmControlPlaneMachineAPIServerPodHealthyCondition, diff --git a/util/test/builder/builders.go b/util/test/builder/builders.go index 43bc735b1183..aa44a45c0133 100644 --- a/util/test/builder/builders.go +++ b/util/test/builder/builders.go @@ -2048,13 +2048,13 @@ func setStatusFields(obj *unstructured.Unstructured, fields map[string]interface // MachineHealthCheckBuilder holds fields for creating a MachineHealthCheck. type MachineHealthCheckBuilder struct { - name string - namespace string - ownerRefs []metav1.OwnerReference - selector metav1.LabelSelector - clusterName string - conditions []clusterv1.UnhealthyCondition - maxUnhealthy *intstr.IntOrString + name string + namespace string + ownerRefs []metav1.OwnerReference + selector metav1.LabelSelector + clusterName string + unhealthyNodeConditions []clusterv1.UnhealthyNodeCondition + maxUnhealthy *intstr.IntOrString } // MachineHealthCheck returns a MachineHealthCheckBuilder with the given name and namespace. @@ -2077,9 +2077,9 @@ func (m *MachineHealthCheckBuilder) WithClusterName(clusterName string) *Machine return m } -// WithUnhealthyConditions adds the spec used to build the parameters of the MachineHealthCheck. -func (m *MachineHealthCheckBuilder) WithUnhealthyConditions(conditions []clusterv1.UnhealthyCondition) *MachineHealthCheckBuilder { - m.conditions = conditions +// WithUnhealthyNodeConditions adds the spec used to build the parameters of the MachineHealthCheck. +func (m *MachineHealthCheckBuilder) WithUnhealthyNodeConditions(conditions []clusterv1.UnhealthyNodeCondition) *MachineHealthCheckBuilder { + m.unhealthyNodeConditions = conditions return m } @@ -2109,10 +2109,10 @@ func (m *MachineHealthCheckBuilder) Build() *clusterv1.MachineHealthCheck { OwnerReferences: m.ownerRefs, }, Spec: clusterv1.MachineHealthCheckSpec{ - ClusterName: m.clusterName, - Selector: m.selector, - UnhealthyConditions: m.conditions, - MaxUnhealthy: m.maxUnhealthy, + ClusterName: m.clusterName, + Selector: m.selector, + UnhealthyNodeConditions: m.unhealthyNodeConditions, + MaxUnhealthy: m.maxUnhealthy, }, } if m.clusterName != "" { diff --git a/util/test/builder/zz_generated.deepcopy.go b/util/test/builder/zz_generated.deepcopy.go index 6887c54d235b..1b441716bb30 100644 --- a/util/test/builder/zz_generated.deepcopy.go +++ b/util/test/builder/zz_generated.deepcopy.go @@ -624,9 +624,9 @@ func (in *MachineHealthCheckBuilder) DeepCopyInto(out *MachineHealthCheckBuilder } } in.selector.DeepCopyInto(&out.selector) - if in.conditions != nil { - in, out := &in.conditions, &out.conditions - *out = make([]v1beta2.UnhealthyCondition, len(*in)) + if in.unhealthyNodeConditions != nil { + in, out := &in.unhealthyNodeConditions, &out.unhealthyNodeConditions + *out = make([]v1beta2.UnhealthyNodeCondition, len(*in)) copy(*out, *in) } if in.maxUnhealthy != nil {