Skip to content

Commit cb05ce9

Browse files
authored
⚠️ Improve Cluster CRD Go type (#12489)
* Improve Cluster type * Fix e2e tests
1 parent 7241308 commit cb05ce9

File tree

76 files changed

+1914
-2013
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+1914
-2013
lines changed

.golangci-kal.yml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ linters:
4343
lintersConfig:
4444
conditions:
4545
isFirstField: Warn # Require conditions to be the first field in the status struct.
46-
usePatchStrategy: Forbid # Require conditions to be the first field in the status struct.
46+
usePatchStrategy: Forbid # Forbid patchStrategy markers on the Conditions field.
4747
useProtobuf: Forbid # We don't use protobuf, so protobuf tags are not required.
4848
optionalfields:
4949
pointers:
@@ -171,11 +171,15 @@ linters:
171171
linters:
172172
- kubeapilinter
173173
- path: "api/core/v1beta2/cluster_types.go"
174-
text: "optionalfields: field (ControlPlaneEndpoint|ControlPlane|Metadata) is optional and should (be a pointer|have the omitempty tag)"
174+
text: "optionalfields: field (ClusterNetwork|Services|Pods|ControlPlaneEndpoint|ControlPlane|Workers|Metadata|Variables|Strategy) is optional and should (be a pointer|have the omitempty tag)"
175175
linters:
176176
- kubeapilinter
177177
- path: "api/core/v1beta2/clusterclass_types.go"
178-
text: "optionalfields: field (Workers|Metadata|ControlPlane|Infrastructure|DeprecatedV1Beta1Metadata) is optional and should (be a pointer|have the omitempty tag)"
178+
text: "optionalfields: field (Workers|Metadata|ControlPlane|Strategy|Infrastructure|DeprecatedV1Beta1Metadata) is optional and should (be a pointer|have the omitempty tag)"
179+
linters:
180+
- kubeapilinter
181+
- path: "api/core/v1beta2/machinedeployment_types.go"
182+
text: "optionalfields: field (Strategy|RollingUpdate|Remediation) is optional and should (be a pointer|have the omitempty tag)"
179183
linters:
180184
- kubeapilinter
181185
- path: "api/ipam/v1beta2/ipaddressclaim_types.go"
@@ -184,7 +188,7 @@ linters:
184188
- kubeapilinter
185189
# KAL does not handle enum markers on enum types yet: https://github.com/kubernetes-sigs/kube-api-linter/issues/113
186190
- path: ".*"
187-
text: "optionalfields: field (Format|Encoding|Type|DeletePolicy|FailurePolicy) is optional and (should be a pointer|has a valid zero value)"
191+
text: "optionalfields: field (Polarity|Format|Encoding|Type|DeletePolicy|FailurePolicy) is optional and (should be a pointer|has a valid zero value)"
188192
linters:
189193
- kubeapilinter
190194

api/controlplane/kubeadm/v1beta2/kubeadm_control_plane_types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,7 @@ type KubeadmControlPlaneMachineTemplate struct {
498498
// +optional
499499
// +listType=map
500500
// +listMapKey=conditionType
501+
// +kubebuilder:validation:MinItems=1
501502
// +kubebuilder:validation:MaxItems=32
502503
ReadinessGates []clusterv1.MachineReadinessGate `json:"readinessGates,omitempty"`
503504

api/core/v1beta1/conversion.go

Lines changed: 245 additions & 15 deletions
Large diffs are not rendered by default.

api/core/v1beta1/conversion_test.go

Lines changed: 75 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -195,13 +195,15 @@ func spokeCluster(in *Cluster, c randfill.Continue) {
195195

196196
dropEmptyStringsCluster(in)
197197

198-
if in.Spec.Topology != nil && in.Spec.Topology.Workers != nil {
199-
for _, md := range in.Spec.Topology.Workers.MachineDeployments {
200-
if md.Strategy != nil && md.Strategy.RollingUpdate != nil &&
201-
md.Strategy.RollingUpdate.DeletePolicy != nil && *md.Strategy.RollingUpdate.DeletePolicy == "" {
202-
// &"" Is not a valid value for DeletePolicy as the enum validation enforces an enum value if DeletePolicy is set.
203-
md.Strategy.RollingUpdate.DeletePolicy = nil
204-
}
198+
if in.Spec.ClusterNetwork != nil {
199+
if in.Spec.ClusterNetwork.Services != nil && reflect.DeepEqual(in.Spec.ClusterNetwork.Services, &NetworkRanges{}) {
200+
in.Spec.ClusterNetwork.Services = nil
201+
}
202+
if in.Spec.ClusterNetwork.Pods != nil && reflect.DeepEqual(in.Spec.ClusterNetwork.Pods, &NetworkRanges{}) {
203+
in.Spec.ClusterNetwork.Pods = nil
204+
}
205+
if reflect.DeepEqual(in.Spec.ClusterNetwork, &ClusterNetwork{}) {
206+
in.Spec.ClusterNetwork = nil
205207
}
206208
}
207209
}
@@ -211,6 +213,10 @@ func spokeClusterTopology(in *Topology, c randfill.Continue) {
211213

212214
// RolloutAfter was unused and has been removed in v1beta2.
213215
in.RolloutAfter = nil
216+
217+
if in.Workers != nil && reflect.DeepEqual(in.Workers, &WorkersTopology{}) {
218+
in.Workers = nil
219+
}
214220
}
215221

216222
func spokeClusterStatus(in *ClusterStatus, c randfill.Continue) {
@@ -326,14 +332,6 @@ func spokeClusterClass(in *ClusterClass, c randfill.Continue) {
326332
in.Namespace = "foo"
327333

328334
dropEmptyStringsClusterClass(in)
329-
330-
for _, md := range in.Spec.Workers.MachineDeployments {
331-
if md.Strategy != nil && md.Strategy.RollingUpdate != nil &&
332-
md.Strategy.RollingUpdate.DeletePolicy != nil && *md.Strategy.RollingUpdate.DeletePolicy == "" {
333-
// &"" Is not a valid value for DeletePolicy as the enum validation enforces an enum value if DeletePolicy is set.
334-
md.Strategy.RollingUpdate.DeletePolicy = nil
335-
}
336-
}
337335
}
338336

339337
func spokeClusterClassStatus(in *ClusterClassStatus, c randfill.Continue) {
@@ -589,12 +587,6 @@ func spokeMachineDeployment(in *MachineDeployment, c randfill.Continue) {
589587
fillMachineSpec(&in.Spec.Template.Spec, c, in.Namespace)
590588

591589
dropEmptyStringsMachineSpec(&in.Spec.Template.Spec)
592-
593-
if in.Spec.Strategy != nil && in.Spec.Strategy.RollingUpdate != nil &&
594-
in.Spec.Strategy.RollingUpdate.DeletePolicy != nil && *in.Spec.Strategy.RollingUpdate.DeletePolicy == "" {
595-
// &"" Is not a valid value for DeletePolicy as the enum validation enforces an enum value if DeletePolicy is set.
596-
in.Spec.Strategy.RollingUpdate.DeletePolicy = nil
597-
}
598590
}
599591

600592
func spokeMachineDeploymentSpec(in *MachineDeploymentSpec, c randfill.Continue) {
@@ -605,6 +597,24 @@ func spokeMachineDeploymentSpec(in *MachineDeploymentSpec, c randfill.Continue)
605597

606598
// Drop RevisionHistoryLimit as we intentionally don't preserve it.
607599
in.RevisionHistoryLimit = nil
600+
601+
if in.Strategy != nil {
602+
if in.Strategy.RollingUpdate != nil {
603+
if in.Strategy.RollingUpdate.DeletePolicy != nil && *in.Strategy.RollingUpdate.DeletePolicy == "" {
604+
// &"" Is not a valid value for DeletePolicy as the enum validation enforces an enum value if DeletePolicy is set.
605+
in.Strategy.RollingUpdate.DeletePolicy = nil
606+
}
607+
if reflect.DeepEqual(in.Strategy.RollingUpdate, &MachineRollingUpdateDeployment{}) {
608+
in.Strategy.RollingUpdate = nil
609+
}
610+
}
611+
if in.Strategy.Remediation != nil && reflect.DeepEqual(in.Strategy.Remediation, &RemediationStrategy{}) {
612+
in.Strategy.Remediation = nil
613+
}
614+
if reflect.DeepEqual(in.Strategy, &MachineDeploymentStrategy{}) {
615+
in.Strategy = nil
616+
}
617+
}
608618
}
609619

610620
func spokeMachineDeploymentStatus(in *MachineDeploymentStatus, c randfill.Continue) {
@@ -726,6 +736,10 @@ func spokeControlPlaneTopology(in *ControlPlaneTopology, c randfill.Continue) {
726736
if in.NodeDeletionTimeout != nil {
727737
in.NodeDeletionTimeout = ptr.To[metav1.Duration](metav1.Duration{Duration: time.Duration(c.Int31()) * time.Second})
728738
}
739+
740+
if in.Variables != nil && reflect.DeepEqual(in.Variables, &ControlPlaneVariables{}) {
741+
in.Variables = nil
742+
}
729743
}
730744

731745
func spokeMachineDeploymentTopology(in *MachineDeploymentTopology, c randfill.Continue) {
@@ -740,6 +754,26 @@ func spokeMachineDeploymentTopology(in *MachineDeploymentTopology, c randfill.Co
740754
if in.NodeDeletionTimeout != nil {
741755
in.NodeDeletionTimeout = ptr.To[metav1.Duration](metav1.Duration{Duration: time.Duration(c.Int31()) * time.Second})
742756
}
757+
if in.Variables != nil && reflect.DeepEqual(in.Variables, &MachineDeploymentVariables{}) {
758+
in.Variables = nil
759+
}
760+
if in.Strategy != nil {
761+
if in.Strategy.RollingUpdate != nil {
762+
if in.Strategy.RollingUpdate.DeletePolicy != nil && *in.Strategy.RollingUpdate.DeletePolicy == "" {
763+
// &"" Is not a valid value for DeletePolicy as the enum validation enforces an enum value if DeletePolicy is set.
764+
in.Strategy.RollingUpdate.DeletePolicy = nil
765+
}
766+
if reflect.DeepEqual(in.Strategy.RollingUpdate, &MachineRollingUpdateDeployment{}) {
767+
in.Strategy.RollingUpdate = nil
768+
}
769+
}
770+
if in.Strategy.Remediation != nil && reflect.DeepEqual(in.Strategy.Remediation, &RemediationStrategy{}) {
771+
in.Strategy.Remediation = nil
772+
}
773+
if reflect.DeepEqual(in.Strategy, &MachineDeploymentStrategy{}) {
774+
in.Strategy = nil
775+
}
776+
}
743777
}
744778

745779
func spokeMachinePoolTopology(in *MachinePoolTopology, c randfill.Continue) {
@@ -754,6 +788,9 @@ func spokeMachinePoolTopology(in *MachinePoolTopology, c randfill.Continue) {
754788
if in.NodeDeletionTimeout != nil {
755789
in.NodeDeletionTimeout = ptr.To[metav1.Duration](metav1.Duration{Duration: time.Duration(c.Int31()) * time.Second})
756790
}
791+
if in.Variables != nil && reflect.DeepEqual(in.Variables, &MachinePoolVariables{}) {
792+
in.Variables = nil
793+
}
757794
}
758795

759796
func spokeMachineHealthCheckClass(in *MachineHealthCheckClass, c randfill.Continue) {
@@ -790,6 +827,23 @@ func spokeMachineDeploymentClass(in *MachineDeploymentClass, c randfill.Continue
790827
if in.NodeDeletionTimeout != nil {
791828
in.NodeDeletionTimeout = ptr.To[metav1.Duration](metav1.Duration{Duration: time.Duration(c.Int31()) * time.Second})
792829
}
830+
if in.Strategy != nil {
831+
if in.Strategy.RollingUpdate != nil {
832+
if in.Strategy.RollingUpdate.DeletePolicy != nil && *in.Strategy.RollingUpdate.DeletePolicy == "" {
833+
// &"" Is not a valid value for DeletePolicy as the enum validation enforces an enum value if DeletePolicy is set.
834+
in.Strategy.RollingUpdate.DeletePolicy = nil
835+
}
836+
if reflect.DeepEqual(in.Strategy.RollingUpdate, &MachineRollingUpdateDeployment{}) {
837+
in.Strategy.RollingUpdate = nil
838+
}
839+
}
840+
if in.Strategy.Remediation != nil && reflect.DeepEqual(in.Strategy.Remediation, &RemediationStrategy{}) {
841+
in.Strategy.Remediation = nil
842+
}
843+
if reflect.DeepEqual(in.Strategy, &MachineDeploymentStrategy{}) {
844+
in.Strategy = nil
845+
}
846+
}
793847
}
794848

795849
func spokeMachinePoolClass(in *MachinePoolClass, c randfill.Continue) {

0 commit comments

Comments
 (0)