Skip to content
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0fc0bae
Add MinReadySeconds to Machine and remove it from MachineDeployment, …
sivchari May 6, 2025
9d1ba6f
utils/test/builder: move MinReadySeconds to Template.Spec
sivchari May 6, 2025
4f245ee
internal/webhooks: move MinReadySeconds to Template.Spec
sivchari May 6, 2025
bc3d05c
internal/controllers: use MinReadySeconds of Template.Spec
sivchari May 6, 2025
23164df
exp: use MinReadySeconds of .Spec.Template
sivchari May 6, 2025
86f0b7b
re-generate
sivchari May 6, 2025
ba4f10f
fix: missing build failure
sivchari May 6, 2025
e42f39e
add functions to convert
sivchari May 6, 2025
32e3a60
add task to run only TestFuzzyConversion
sivchari May 7, 2025
b15dc3f
delete MinReadySeconds since it is not part of v1beta1
sivchari May 7, 2025
2bfc67a
re-generate
sivchari May 7, 2025
6171960
fix: build failure
sivchari May 7, 2025
b6f1095
add conversion func from old to new API
sivchari May 7, 2025
10338ec
make MinReadySeconds pointer type
sivchari May 7, 2025
ceab6e4
fix e2e test
sivchari May 7, 2025
5ec3018
fix ginkgo grammar
sivchari May 7, 2025
0092b32
fix webhook
sivchari May 7, 2025
5c28969
remove +default=0
sivchari May 15, 2025
649807a
fix review points
sivchari May 15, 2025
dce0b2f
fix: conversion
sivchari May 16, 2025
a56580f
simplify conversion
sivchari May 20, 2025
83456b0
delete defaulting
sivchari May 20, 2025
522e627
handle minReadySeconds and improve coverage
sivchari May 20, 2025
54d0d66
revert conversion func
sivchari May 21, 2025
060fdab
modify comment
sivchari May 21, 2025
aaabcdc
propagate minreadyseconds and add property for test
sivchari May 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -921,6 +921,10 @@ test: $(SETUP_ENVTEST) ## Run unit and integration tests with race detector
# To achieve that, all files with fuzz tests have the "!race" build tag, to still run fuzz tests
# we have an additional `go test` run that focuses on "TestFuzzyConversion".
KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -race ./... $(TEST_ARGS)
$(MAKE) test-conversions TEST_ARGS="$(TEST_ARGS)"

.PHONY: test-conversions
test-conversions: $(SETUP_ENVTEST) ## Run conversions test
KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -run "^TestFuzzyConversion$$" ./... $(TEST_ARGS)

.PHONY: test-verbose
Expand Down
65 changes: 59 additions & 6 deletions api/v1beta1/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@ import (

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
apimachineryconversion "k8s.io/apimachinery/pkg/conversion"
"k8s.io/utils/ptr"
"sigs.k8s.io/controller-runtime/pkg/conversion"

clusterv1 "sigs.k8s.io/cluster-api/api/v1beta2"
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
)

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

return Convert_v1beta1_Machine_To_v1beta2_Machine(src, dst, nil)
if err := Convert_v1beta1_Machine_To_v1beta2_Machine(src, dst, nil); err != nil {
return err
}

restored := &clusterv1.Machine{}
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
return err
}

dst.Spec.MinReadySeconds = restored.Spec.MinReadySeconds

return nil
}

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

return Convert_v1beta2_Machine_To_v1beta1_Machine(src, dst, nil)
if err := Convert_v1beta2_Machine_To_v1beta1_Machine(src, dst, nil); err != nil {
return err
}

return utilconversion.MarshalData(src, dst)
}

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

return Convert_v1beta1_MachineSet_To_v1beta2_MachineSet(src, dst, nil)
if err := Convert_v1beta1_MachineSet_To_v1beta2_MachineSet(src, dst, nil); err != nil {
return err
}

if src.Spec.MinReadySeconds == 0 {
dst.Spec.Template.Spec.MinReadySeconds = nil
} else {
dst.Spec.Template.Spec.MinReadySeconds = &src.Spec.MinReadySeconds
}

return nil
}

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

return Convert_v1beta2_MachineSet_To_v1beta1_MachineSet(src, dst, nil)
if err := Convert_v1beta2_MachineSet_To_v1beta1_MachineSet(src, dst, nil); err != nil {
return err
}

dst.Spec.MinReadySeconds = ptr.Deref(src.Spec.Template.Spec.MinReadySeconds, 0)

return nil
}

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

return Convert_v1beta1_MachineDeployment_To_v1beta2_MachineDeployment(src, dst, nil)
if err := Convert_v1beta1_MachineDeployment_To_v1beta2_MachineDeployment(src, dst, nil); err != nil {
return err
}

dst.Spec.Template.Spec.MinReadySeconds = src.Spec.MinReadySeconds

return nil
}

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

return Convert_v1beta2_MachineDeployment_To_v1beta1_MachineDeployment(src, dst, nil)
if err := Convert_v1beta2_MachineDeployment_To_v1beta1_MachineDeployment(src, dst, nil); err != nil {
return err
}

dst.Spec.MinReadySeconds = src.Spec.Template.Spec.MinReadySeconds

return nil
}

func (src *MachineHealthCheck) ConvertTo(dstRaw conversion.Hub) error {
Expand Down Expand Up @@ -710,3 +755,11 @@ func Convert_v1beta1_ClusterVariable_To_v1beta2_ClusterVariable(in *ClusterVaria
// because it was already not possible to set it anymore with v1beta1.
return autoConvert_v1beta1_ClusterVariable_To_v1beta2_ClusterVariable(in, out, s)
}

func Convert_v1beta1_MachineSetSpec_To_v1beta2_MachineSetSpec(in *MachineSetSpec, out *clusterv1.MachineSetSpec, s apimachineryconversion.Scope) error {
return autoConvert_v1beta1_MachineSetSpec_To_v1beta2_MachineSetSpec(in, out, s)
}

func Convert_v1beta2_MachineSpec_To_v1beta1_MachineSpec(in *clusterv1.MachineSpec, out *MachineSpec, s apimachineryconversion.Scope) error {
return autoConvert_v1beta2_MachineSpec_To_v1beta1_MachineSpec(in, out, s)
}
8 changes: 0 additions & 8 deletions api/v1beta1/machine_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -424,14 +424,6 @@ type MachineSpec struct {
// +kubebuilder:validation:MaxLength=256
FailureDomain *string `json:"failureDomain,omitempty"`

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

// readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
//
// This field can be used e.g. by Cluster API control plane providers to extend the semantic of the
Expand Down
37 changes: 13 additions & 24 deletions api/v1beta1/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 2 additions & 5 deletions api/v1beta2/machine_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -424,13 +424,10 @@ type MachineSpec struct {
// +kubebuilder:validation:MaxLength=256
FailureDomain *string `json:"failureDomain,omitempty"`

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

// readinessGates specifies additional conditions to include when evaluating Machine Ready condition.
//
Expand Down
5 changes: 0 additions & 5 deletions api/v1beta2/machinedeployment_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,11 +295,6 @@ type MachineDeploymentSpec struct {
// +optional
MachineNamingStrategy *MachineNamingStrategy `json:"machineNamingStrategy,omitempty"`

// minReadySeconds is the minimum number of seconds for which a Node for a newly created machine should be ready before considering the replica available.
// Defaults to 0 (machine will be considered available as soon as the Node is ready)
// +optional
MinReadySeconds *int32 `json:"minReadySeconds,omitempty"`

// revisionHistoryLimit is the number of old MachineSets to retain to allow rollback.
// This is a pointer to distinguish between explicit zero and not specified.
// Defaults to 1.
Expand Down
5 changes: 0 additions & 5 deletions api/v1beta2/machineset_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,6 @@ type MachineSetSpec struct {
// +optional
Replicas *int32 `json:"replicas,omitempty"`

// minReadySeconds is the minimum number of seconds for which a Node for a newly created machine should be ready before considering the replica available.
// Defaults to 0 (machine will be considered available as soon as the Node is ready)
// +optional
MinReadySeconds int32 `json:"minReadySeconds,omitempty"`

// deletePolicy defines the policy used to identify nodes to delete when downscaling.
// Defaults to "Random". Valid values are "Random, "Newest", "Oldest"
// +kubebuilder:validation:Enum=Random;Newest;Oldest
Expand Down
10 changes: 5 additions & 5 deletions api/v1beta2/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 7 additions & 14 deletions api/v1beta2/zz_generated.openapi.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions config/crd/bases/cluster.x-k8s.io_machinedeployments.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading