Skip to content

Commit 56c66a0

Browse files
authored
⚠️ Add MinReadySeconds to Machine and remove it from MachineDeployment, MachineSet, MachinePool. (#12153)
* Add MinReadySeconds to Machine and remove it from MachineDeployment, MachineSet and MachinePool Signed-off-by: sivchari <[email protected]> * utils/test/builder: move MinReadySeconds to Template.Spec Signed-off-by: sivchari <[email protected]> * internal/webhooks: move MinReadySeconds to Template.Spec Signed-off-by: sivchari <[email protected]> * internal/controllers: use MinReadySeconds of Template.Spec Signed-off-by: sivchari <[email protected]> * exp: use MinReadySeconds of .Spec.Template Signed-off-by: sivchari <[email protected]> * re-generate Signed-off-by: sivchari <[email protected]> * fix: missing build failure Signed-off-by: sivchari <[email protected]> * add functions to convert Signed-off-by: sivchari <[email protected]> * add task to run only TestFuzzyConversion Signed-off-by: sivchari <[email protected]> * delete MinReadySeconds since it is not part of v1beta1 Signed-off-by: sivchari <[email protected]> * re-generate Signed-off-by: sivchari <[email protected]> * fix: build failure Signed-off-by: sivchari <[email protected]> * add conversion func from old to new API Signed-off-by: sivchari <[email protected]> * make MinReadySeconds pointer type Signed-off-by: sivchari <[email protected]> * fix e2e test Signed-off-by: sivchari <[email protected]> * fix ginkgo grammar Signed-off-by: sivchari <[email protected]> * fix webhook Signed-off-by: sivchari <[email protected]> * remove +default=0 Signed-off-by: sivchari <[email protected]> * fix review points Signed-off-by: sivchari <[email protected]> * fix: conversion Signed-off-by: sivchari <[email protected]> * simplify conversion Signed-off-by: sivchari <[email protected]> * delete defaulting Signed-off-by: sivchari <[email protected]> * handle minReadySeconds and improve coverage Signed-off-by: sivchari <[email protected]> * revert conversion func Signed-off-by: sivchari <[email protected]> * modify comment Signed-off-by: sivchari <[email protected]> * propagate minreadyseconds and add property for test Signed-off-by: sivchari <[email protected]> --------- Signed-off-by: sivchari <[email protected]>
1 parent 266d4fb commit 56c66a0

Some content is hidden

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

46 files changed

+294
-239
lines changed

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,10 @@ test: $(SETUP_ENVTEST) ## Run unit and integration tests with race detector
921921
# To achieve that, all files with fuzz tests have the "!race" build tag, to still run fuzz tests
922922
# we have an additional `go test` run that focuses on "TestFuzzyConversion".
923923
KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -race ./... $(TEST_ARGS)
924+
$(MAKE) test-conversions TEST_ARGS="$(TEST_ARGS)"
925+
926+
.PHONY: test-conversions
927+
test-conversions: $(SETUP_ENVTEST) ## Run conversions test
924928
KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -run "^TestFuzzyConversion$$" ./... $(TEST_ARGS)
925929

926930
.PHONY: test-verbose

api/v1beta1/conversion.go

Lines changed: 59 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ import (
2121

2222
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2323
apimachineryconversion "k8s.io/apimachinery/pkg/conversion"
24+
"k8s.io/utils/ptr"
2425
"sigs.k8s.io/controller-runtime/pkg/conversion"
2526

2627
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta2"
28+
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
2729
)
2830

2931
func (src *Cluster) ConvertTo(dstRaw conversion.Hub) error {
@@ -53,37 +55,80 @@ func (dst *ClusterClass) ConvertFrom(srcRaw conversion.Hub) error {
5355
func (src *Machine) ConvertTo(dstRaw conversion.Hub) error {
5456
dst := dstRaw.(*clusterv1.Machine)
5557

56-
return Convert_v1beta1_Machine_To_v1beta2_Machine(src, dst, nil)
58+
if err := Convert_v1beta1_Machine_To_v1beta2_Machine(src, dst, nil); err != nil {
59+
return err
60+
}
61+
62+
restored := &clusterv1.Machine{}
63+
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
64+
return err
65+
}
66+
67+
dst.Spec.MinReadySeconds = restored.Spec.MinReadySeconds
68+
69+
return nil
5770
}
5871

5972
func (dst *Machine) ConvertFrom(srcRaw conversion.Hub) error {
6073
src := srcRaw.(*clusterv1.Machine)
6174

62-
return Convert_v1beta2_Machine_To_v1beta1_Machine(src, dst, nil)
75+
if err := Convert_v1beta2_Machine_To_v1beta1_Machine(src, dst, nil); err != nil {
76+
return err
77+
}
78+
79+
return utilconversion.MarshalData(src, dst)
6380
}
6481

6582
func (src *MachineSet) ConvertTo(dstRaw conversion.Hub) error {
6683
dst := dstRaw.(*clusterv1.MachineSet)
6784

68-
return Convert_v1beta1_MachineSet_To_v1beta2_MachineSet(src, dst, nil)
85+
if err := Convert_v1beta1_MachineSet_To_v1beta2_MachineSet(src, dst, nil); err != nil {
86+
return err
87+
}
88+
89+
if src.Spec.MinReadySeconds == 0 {
90+
dst.Spec.Template.Spec.MinReadySeconds = nil
91+
} else {
92+
dst.Spec.Template.Spec.MinReadySeconds = &src.Spec.MinReadySeconds
93+
}
94+
95+
return nil
6996
}
7097

7198
func (dst *MachineSet) ConvertFrom(srcRaw conversion.Hub) error {
7299
src := srcRaw.(*clusterv1.MachineSet)
73100

74-
return Convert_v1beta2_MachineSet_To_v1beta1_MachineSet(src, dst, nil)
101+
if err := Convert_v1beta2_MachineSet_To_v1beta1_MachineSet(src, dst, nil); err != nil {
102+
return err
103+
}
104+
105+
dst.Spec.MinReadySeconds = ptr.Deref(src.Spec.Template.Spec.MinReadySeconds, 0)
106+
107+
return nil
75108
}
76109

77110
func (src *MachineDeployment) ConvertTo(dstRaw conversion.Hub) error {
78111
dst := dstRaw.(*clusterv1.MachineDeployment)
79112

80-
return Convert_v1beta1_MachineDeployment_To_v1beta2_MachineDeployment(src, dst, nil)
113+
if err := Convert_v1beta1_MachineDeployment_To_v1beta2_MachineDeployment(src, dst, nil); err != nil {
114+
return err
115+
}
116+
117+
dst.Spec.Template.Spec.MinReadySeconds = src.Spec.MinReadySeconds
118+
119+
return nil
81120
}
82121

83122
func (dst *MachineDeployment) ConvertFrom(srcRaw conversion.Hub) error {
84123
src := srcRaw.(*clusterv1.MachineDeployment)
85124

86-
return Convert_v1beta2_MachineDeployment_To_v1beta1_MachineDeployment(src, dst, nil)
125+
if err := Convert_v1beta2_MachineDeployment_To_v1beta1_MachineDeployment(src, dst, nil); err != nil {
126+
return err
127+
}
128+
129+
dst.Spec.MinReadySeconds = src.Spec.Template.Spec.MinReadySeconds
130+
131+
return nil
87132
}
88133

89134
func (src *MachineHealthCheck) ConvertTo(dstRaw conversion.Hub) error {
@@ -710,3 +755,11 @@ func Convert_v1beta1_ClusterVariable_To_v1beta2_ClusterVariable(in *ClusterVaria
710755
// because it was already not possible to set it anymore with v1beta1.
711756
return autoConvert_v1beta1_ClusterVariable_To_v1beta2_ClusterVariable(in, out, s)
712757
}
758+
759+
func Convert_v1beta1_MachineSetSpec_To_v1beta2_MachineSetSpec(in *MachineSetSpec, out *clusterv1.MachineSetSpec, s apimachineryconversion.Scope) error {
760+
return autoConvert_v1beta1_MachineSetSpec_To_v1beta2_MachineSetSpec(in, out, s)
761+
}
762+
763+
func Convert_v1beta2_MachineSpec_To_v1beta1_MachineSpec(in *clusterv1.MachineSpec, out *MachineSpec, s apimachineryconversion.Scope) error {
764+
return autoConvert_v1beta2_MachineSpec_To_v1beta1_MachineSpec(in, out, s)
765+
}

api/v1beta1/machine_types.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -424,14 +424,6 @@ type MachineSpec struct {
424424
// +kubebuilder:validation:MaxLength=256
425425
FailureDomain *string `json:"failureDomain,omitempty"`
426426

427-
// The minimum number of seconds for which a Machine should be ready before considering it available.
428-
// Defaults to 0 (Machine will be considered available as soon as the Machine is ready)
429-
// NOTE: this field will be considered only for computing v1beta2 conditions.
430-
// +optional
431-
// TODO: This field will be added in the v1beta2 API, and act as a replacement of existing MinReadySeconds in
432-
// MachineDeployment, MachineSet and MachinePool
433-
// MinReadySeconds int32 `json:"minReadySeconds,omitempty"`
434-
435427
// readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
436428
//
437429
// This field can be used e.g. by Cluster API control plane providers to extend the semantic of the

api/v1beta1/zz_generated.conversion.go

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

api/v1beta2/machine_types.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -424,13 +424,10 @@ type MachineSpec struct {
424424
// +kubebuilder:validation:MaxLength=256
425425
FailureDomain *string `json:"failureDomain,omitempty"`
426426

427-
// The minimum number of seconds for which a Machine should be ready before considering it available.
427+
// minReadySeconds is the minimum number of seconds for which a Machine should be ready before considering it available.
428428
// Defaults to 0 (Machine will be considered available as soon as the Machine is ready)
429-
// NOTE: this field will be considered only for computing v1beta2 conditions.
430429
// +optional
431-
// TODO: This field will be added in the v1beta2 API, and act as a replacement of existing MinReadySeconds in
432-
// MachineDeployment, MachineSet and MachinePool
433-
// MinReadySeconds int32 `json:"minReadySeconds,omitempty"`
430+
MinReadySeconds *int32 `json:"minReadySeconds,omitempty"`
434431

435432
// readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
436433
//

api/v1beta2/machinedeployment_types.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -295,11 +295,6 @@ type MachineDeploymentSpec struct {
295295
// +optional
296296
MachineNamingStrategy *MachineNamingStrategy `json:"machineNamingStrategy,omitempty"`
297297

298-
// minReadySeconds is the minimum number of seconds for which a Node for a newly created machine should be ready before considering the replica available.
299-
// Defaults to 0 (machine will be considered available as soon as the Node is ready)
300-
// +optional
301-
MinReadySeconds *int32 `json:"minReadySeconds,omitempty"`
302-
303298
// revisionHistoryLimit is the number of old MachineSets to retain to allow rollback.
304299
// This is a pointer to distinguish between explicit zero and not specified.
305300
// Defaults to 1.

api/v1beta2/machineset_types.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,6 @@ type MachineSetSpec struct {
6565
// +optional
6666
Replicas *int32 `json:"replicas,omitempty"`
6767

68-
// minReadySeconds is the minimum number of seconds for which a Node for a newly created machine should be ready before considering the replica available.
69-
// Defaults to 0 (machine will be considered available as soon as the Node is ready)
70-
// +optional
71-
MinReadySeconds int32 `json:"minReadySeconds,omitempty"`
72-
7368
// deletePolicy defines the policy used to identify nodes to delete when downscaling.
7469
// Defaults to "Random". Valid values are "Random, "Newest", "Oldest"
7570
// +kubebuilder:validation:Enum=Random;Newest;Oldest

api/v1beta2/zz_generated.deepcopy.go

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

api/v1beta2/zz_generated.openapi.go

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

config/crd/bases/cluster.x-k8s.io_machinedeployments.yaml

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

0 commit comments

Comments
 (0)