Skip to content

Commit ce4c050

Browse files
⚠️ Drop unnecessary fields from remediationTemplate references (#12368)
* Drop unnecessary fields from remediationTemplate references # Conflicts: # api/core/v1beta1/conversion.go # api/core/v1beta1/zz_generated.conversion.go * Address feedback * More comments
1 parent 4f97101 commit ce4c050

24 files changed

+559
-385
lines changed

api/core/v1beta1/conversion.go

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,23 @@ func (src *Cluster) ConvertTo(dstRaw conversion.Hub) error {
3737

3838
func (dst *Cluster) ConvertFrom(srcRaw conversion.Hub) error {
3939
src := srcRaw.(*clusterv1.Cluster)
40+
if err := Convert_v1beta2_Cluster_To_v1beta1_Cluster(src, dst, nil); err != nil {
41+
return err
42+
}
4043

41-
return Convert_v1beta2_Cluster_To_v1beta1_Cluster(src, dst, nil)
44+
if dst.Spec.Topology != nil {
45+
if dst.Spec.Topology.ControlPlane.MachineHealthCheck != nil && dst.Spec.Topology.ControlPlane.MachineHealthCheck.RemediationTemplate != nil {
46+
dst.Spec.Topology.ControlPlane.MachineHealthCheck.RemediationTemplate.Namespace = dst.Namespace
47+
}
48+
if dst.Spec.Topology.Workers != nil {
49+
for _, md := range dst.Spec.Topology.Workers.MachineDeployments {
50+
if md.MachineHealthCheck != nil && md.MachineHealthCheck.RemediationTemplate != nil {
51+
md.MachineHealthCheck.RemediationTemplate.Namespace = dst.Namespace
52+
}
53+
}
54+
}
55+
}
56+
return nil
4257
}
4358

4459
func (src *ClusterClass) ConvertTo(dstRaw conversion.Hub) error {
@@ -49,8 +64,19 @@ func (src *ClusterClass) ConvertTo(dstRaw conversion.Hub) error {
4964

5065
func (dst *ClusterClass) ConvertFrom(srcRaw conversion.Hub) error {
5166
src := srcRaw.(*clusterv1.ClusterClass)
67+
if err := Convert_v1beta2_ClusterClass_To_v1beta1_ClusterClass(src, dst, nil); err != nil {
68+
return err
69+
}
5270

53-
return Convert_v1beta2_ClusterClass_To_v1beta1_ClusterClass(src, dst, nil)
71+
if dst.Spec.ControlPlane.MachineHealthCheck != nil && dst.Spec.ControlPlane.MachineHealthCheck.RemediationTemplate != nil {
72+
dst.Spec.ControlPlane.MachineHealthCheck.RemediationTemplate.Namespace = dst.Namespace
73+
}
74+
for _, md := range dst.Spec.Workers.MachineDeployments {
75+
if md.MachineHealthCheck != nil && md.MachineHealthCheck.RemediationTemplate != nil {
76+
md.MachineHealthCheck.RemediationTemplate.Namespace = dst.Namespace
77+
}
78+
}
79+
return nil
5480
}
5581

5682
func (src *Machine) ConvertTo(dstRaw conversion.Hub) error {
@@ -140,8 +166,14 @@ func (src *MachineHealthCheck) ConvertTo(dstRaw conversion.Hub) error {
140166

141167
func (dst *MachineHealthCheck) ConvertFrom(srcRaw conversion.Hub) error {
142168
src := srcRaw.(*clusterv1.MachineHealthCheck)
169+
if err := Convert_v1beta2_MachineHealthCheck_To_v1beta1_MachineHealthCheck(src, dst, nil); err != nil {
170+
return err
171+
}
143172

144-
return Convert_v1beta2_MachineHealthCheck_To_v1beta1_MachineHealthCheck(src, dst, nil)
173+
if dst.Spec.RemediationTemplate != nil {
174+
dst.Spec.RemediationTemplate.Namespace = src.Namespace
175+
}
176+
return nil
145177
}
146178

147179
func (src *MachinePool) ConvertTo(dstRaw conversion.Hub) error {
@@ -1140,6 +1172,20 @@ func Convert_v1beta2_ExternalPatchDefinition_To_v1beta1_ExternalPatchDefinition(
11401172
return nil
11411173
}
11421174

1175+
func Convert_v1_ObjectReference_To_v1beta2_MachineHealthCheckRemediationTemplateReference(in *corev1.ObjectReference, out *clusterv1.MachineHealthCheckRemediationTemplateReference, _ apimachineryconversion.Scope) error {
1176+
out.Name = in.Name
1177+
out.Kind = in.Kind
1178+
out.APIVersion = in.APIVersion
1179+
return nil
1180+
}
1181+
1182+
func Convert_v1beta2_MachineHealthCheckRemediationTemplateReference_To_v1_ObjectReference(in *clusterv1.MachineHealthCheckRemediationTemplateReference, out *corev1.ObjectReference, _ apimachineryconversion.Scope) error {
1183+
out.Name = in.Name
1184+
out.Kind = in.Kind
1185+
out.APIVersion = in.APIVersion
1186+
return nil
1187+
}
1188+
11431189
func Convert_v1_ObjectReference_To_v1beta2_MachineNodeReference(in *corev1.ObjectReference, out *clusterv1.MachineNodeReference, _ apimachineryconversion.Scope) error {
11441190
out.Name = in.Name
11451191
return nil

api/core/v1beta1/conversion_test.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"k8s.io/apimachinery/pkg/api/apitesting/fuzzer"
3030
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3131
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
32+
"k8s.io/apimachinery/pkg/types"
3233
"k8s.io/utils/ptr"
3334
"sigs.k8s.io/randfill"
3435

@@ -79,7 +80,9 @@ func TestFuzzyConversion(t *testing.T) {
7980
func ClusterFuzzFuncs(_ runtimeserializer.CodecFactory) []interface{} {
8081
return []interface{}{
8182
hubClusterStatus,
83+
spokeCluster,
8284
spokeClusterTopology,
85+
spokeObjectReference,
8386
spokeClusterStatus,
8487
spokeClusterVariable,
8588
spokeControlPlaneTopology,
@@ -107,6 +110,12 @@ func hubClusterStatus(in *clusterv1.ClusterStatus, c randfill.Continue) {
107110
}
108111
}
109112

113+
func spokeCluster(in *Cluster, c randfill.Continue) {
114+
c.FillNoCustom(in)
115+
116+
in.Namespace = "foo"
117+
}
118+
110119
func spokeClusterTopology(in *Topology, c randfill.Continue) {
111120
c.FillNoCustom(in)
112121

@@ -136,6 +145,7 @@ func ClusterClassFuncs(_ runtimeserializer.CodecFactory) []interface{} {
136145
hubClusterClassStatus,
137146
hubJSONSchemaProps,
138147
spokeClusterClass,
148+
spokeObjectReference,
139149
spokeClusterClassStatus,
140150
spokeJSONSchemaProps,
141151
spokeControlPlaneClass,
@@ -414,8 +424,10 @@ func spokeMachineDeploymentStatus(in *MachineDeploymentStatus, c randfill.Contin
414424
func MachineHealthCheckFuzzFuncs(_ runtimeserializer.CodecFactory) []interface{} {
415425
return []interface{}{
416426
hubMachineHealthCheckStatus,
417-
spokeMachineHealthCheckStatus,
427+
spokeMachineHealthCheck,
418428
spokeMachineHealthCheckSpec,
429+
spokeObjectReference,
430+
spokeMachineHealthCheckStatus,
419431
spokeUnhealthyCondition,
420432
}
421433
}
@@ -430,6 +442,12 @@ func hubMachineHealthCheckStatus(in *clusterv1.MachineHealthCheckStatus, c randf
430442
}
431443
}
432444

445+
func spokeMachineHealthCheck(in *MachineHealthCheck, c randfill.Continue) {
446+
c.FillNoCustom(in)
447+
448+
in.Namespace = "foo"
449+
}
450+
433451
func spokeMachineHealthCheckStatus(in *MachineHealthCheckStatus, c randfill.Continue) {
434452
c.FillNoCustom(in)
435453
// Drop empty structs with only omit empty fields.
@@ -440,6 +458,19 @@ func spokeMachineHealthCheckStatus(in *MachineHealthCheckStatus, c randfill.Cont
440458
}
441459
}
442460

461+
func spokeObjectReference(in *corev1.ObjectReference, c randfill.Continue) {
462+
c.FillNoCustom(in)
463+
464+
if in == nil {
465+
return
466+
}
467+
468+
in.Namespace = "foo"
469+
in.UID = types.UID("")
470+
in.ResourceVersion = ""
471+
in.FieldPath = ""
472+
}
473+
443474
func MachinePoolFuzzFuncs(_ runtimeserializer.CodecFactory) []interface{} {
444475
return []interface{}{
445476
hubMachinePoolStatus,

api/core/v1beta1/zz_generated.conversion.go

Lines changed: 46 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/core/v1beta2/clusterclass_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ type MachineHealthCheckClass struct {
433433
// creates a new object from the template referenced and hands off remediation of the machine to
434434
// a controller that lives outside of Cluster API.
435435
// +optional
436-
RemediationTemplate *corev1.ObjectReference `json:"remediationTemplate,omitempty"`
436+
RemediationTemplate *MachineHealthCheckRemediationTemplateReference `json:"remediationTemplate,omitempty"`
437437
}
438438

439439
// MachinePoolClass serves as a template to define a pool of worker nodes of the cluster

api/core/v1beta2/machinehealthcheck_types.go

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package v1beta2
1919
import (
2020
corev1 "k8s.io/api/core/v1"
2121
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22+
"k8s.io/apimachinery/pkg/runtime/schema"
2223
"k8s.io/apimachinery/pkg/util/intstr"
2324
)
2425

@@ -114,7 +115,53 @@ type MachineHealthCheckSpec struct {
114115
// creates a new object from the template referenced and hands off remediation of the machine to
115116
// a controller that lives outside of Cluster API.
116117
// +optional
117-
RemediationTemplate *corev1.ObjectReference `json:"remediationTemplate,omitempty"`
118+
RemediationTemplate *MachineHealthCheckRemediationTemplateReference `json:"remediationTemplate,omitempty"`
119+
}
120+
121+
// MachineHealthCheckRemediationTemplateReference is a reference to a remediation template.
122+
type MachineHealthCheckRemediationTemplateReference struct {
123+
// kind of the remediation template.
124+
// kind must consist of alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character.
125+
// +required
126+
// +kubebuilder:validation:MinLength=1
127+
// +kubebuilder:validation:MaxLength=63
128+
// +kubebuilder:validation:Pattern=`^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$`
129+
Kind string `json:"kind"`
130+
131+
// name of the remediation template.
132+
// name must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character.
133+
// +required
134+
// +kubebuilder:validation:MinLength=1
135+
// +kubebuilder:validation:MaxLength=253
136+
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`
137+
Name string `json:"name"`
138+
139+
// apiVersion of the remediation template.
140+
// apiVersion must be fully qualified domain name followed by / and a version.
141+
// NOTE: This field must be kept in sync with the APIVersion of the remediation template.
142+
// +required
143+
// +kubebuilder:validation:MinLength=1
144+
// +kubebuilder:validation:MaxLength=317
145+
// +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*\/[a-z]([-a-z0-9]*[a-z0-9])?$`
146+
APIVersion string `json:"apiVersion"`
147+
}
148+
149+
// ToObjectReference returns an object reference for the MachineHealthCheckRemediationTemplateReference in a given namespace.
150+
func (r *MachineHealthCheckRemediationTemplateReference) ToObjectReference(namespace string) *corev1.ObjectReference {
151+
if r == nil {
152+
return nil
153+
}
154+
return &corev1.ObjectReference{
155+
APIVersion: r.APIVersion,
156+
Kind: r.Kind,
157+
Namespace: namespace,
158+
Name: r.Name,
159+
}
160+
}
161+
162+
// GroupVersionKind gets the GroupVersionKind for a MachineHealthCheckRemediationTemplateReference.
163+
func (r *MachineHealthCheckRemediationTemplateReference) GroupVersionKind() schema.GroupVersionKind {
164+
return schema.FromAPIVersionAndKind(r.APIVersion, r.Kind)
118165
}
119166

120167
// ANCHOR_END: MachineHealthCHeckSpec

api/core/v1beta2/zz_generated.deepcopy.go

Lines changed: 17 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)