Skip to content

Commit 91731fb

Browse files
authored
⚠️ Align CAPD conversion to conversion of other providers (#12481)
* align CAPD conversion to conversion of other providers Signed-off-by: sivchari <[email protected]> * fix review findings Signed-off-by: sivchari <[email protected]> * fix review findings Signed-off-by: sivchari <[email protected]> --------- Signed-off-by: sivchari <[email protected]>
1 parent ea14c4d commit 91731fb

File tree

3 files changed

+198
-157
lines changed

3 files changed

+198
-157
lines changed

test/infrastructure/docker/api/v1alpha3/conversion.go

Lines changed: 70 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package v1alpha3
1818

1919
import (
2020
"maps"
21+
"reflect"
2122
"slices"
2223
"sort"
2324

@@ -41,26 +42,45 @@ func (src *DockerCluster) ConvertTo(dstRaw conversion.Hub) error {
4142

4243
// Manually restore data.
4344
restored := &infrav1.DockerCluster{}
44-
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
45+
ok, err := utilconversion.UnmarshalData(src, restored)
46+
if err != nil {
4547
return err
4648
}
4749

48-
if restored.Spec.LoadBalancer.ImageRepository != "" {
49-
dst.Spec.LoadBalancer.ImageRepository = restored.Spec.LoadBalancer.ImageRepository
50+
// Recover intent for bool values converted to *bool.
51+
initialization := infrav1.DockerClusterInitializationStatus{}
52+
restoredDockerClusterProvisioned := restored.Status.Initialization.Provisioned
53+
clusterv1.Convert_bool_To_Pointer_bool(src.Status.Ready, ok, restoredDockerClusterProvisioned, &initialization.Provisioned)
54+
if !reflect.DeepEqual(initialization, infrav1.DockerClusterInitializationStatus{}) {
55+
dst.Status.Initialization = initialization
5056
}
5157

52-
if restored.Spec.LoadBalancer.ImageTag != "" {
53-
dst.Spec.LoadBalancer.ImageTag = restored.Spec.LoadBalancer.ImageTag
58+
if ok {
59+
RestoreDockerClusterSpec(&restored.Spec, &dst.Spec)
60+
RestoreDockerClusterStatus(&restored.Status, &dst.Status)
5461
}
5562

56-
if restored.Spec.LoadBalancer.CustomHAProxyConfigTemplateRef != nil {
57-
dst.Spec.LoadBalancer.CustomHAProxyConfigTemplateRef = restored.Spec.LoadBalancer.CustomHAProxyConfigTemplateRef
63+
return nil
64+
}
65+
66+
func RestoreDockerClusterSpec(restored *infrav1.DockerClusterSpec, dst *infrav1.DockerClusterSpec) {
67+
// Restore fields added in v1beta2.
68+
if restored.LoadBalancer.ImageRepository != "" {
69+
dst.LoadBalancer.ImageRepository = restored.LoadBalancer.ImageRepository
5870
}
5971

60-
dst.Status.Conditions = restored.Status.Conditions
61-
dst.Status.Initialization = restored.Status.Initialization
72+
if restored.LoadBalancer.ImageTag != "" {
73+
dst.LoadBalancer.ImageTag = restored.LoadBalancer.ImageTag
74+
}
6275

63-
return nil
76+
if restored.LoadBalancer.CustomHAProxyConfigTemplateRef != nil {
77+
dst.LoadBalancer.CustomHAProxyConfigTemplateRef = restored.LoadBalancer.CustomHAProxyConfigTemplateRef
78+
}
79+
}
80+
81+
func RestoreDockerClusterStatus(restored *infrav1.DockerClusterStatus, dst *infrav1.DockerClusterStatus) {
82+
// Restore fields added in v1beta2.
83+
dst.Conditions = restored.Conditions
6484
}
6585

6686
func (dst *DockerCluster) ConvertFrom(srcRaw conversion.Hub) error {
@@ -70,12 +90,7 @@ func (dst *DockerCluster) ConvertFrom(srcRaw conversion.Hub) error {
7090
return err
7191
}
7292

73-
// Preserve Hub data on down-conversion except for metadata
74-
if err := utilconversion.MarshalData(src, dst); err != nil {
75-
return err
76-
}
77-
78-
return nil
93+
return utilconversion.MarshalData(src, dst)
7994
}
8095

8196
func (src *DockerMachine) ConvertTo(dstRaw conversion.Hub) error {
@@ -87,20 +102,39 @@ func (src *DockerMachine) ConvertTo(dstRaw conversion.Hub) error {
87102

88103
// Manually restore data.
89104
restored := &infrav1.DockerMachine{}
90-
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
105+
ok, err := utilconversion.UnmarshalData(src, restored)
106+
if err != nil {
91107
return err
92108
}
93109

94-
if restored.Spec.BootstrapTimeout != nil {
95-
dst.Spec.BootstrapTimeout = restored.Spec.BootstrapTimeout
110+
// Recover intent for bool values converted to *bool.
111+
initialization := infrav1.DockerMachineInitializationStatus{}
112+
restoredDockerMachineProvisioned := restored.Status.Initialization.Provisioned
113+
clusterv1.Convert_bool_To_Pointer_bool(src.Status.Ready, ok, restoredDockerMachineProvisioned, &initialization.Provisioned)
114+
if !reflect.DeepEqual(initialization, infrav1.DockerMachineInitializationStatus{}) {
115+
dst.Status.Initialization = initialization
96116
}
97117

98-
dst.Status.Conditions = restored.Status.Conditions
99-
dst.Status.Initialization = restored.Status.Initialization
118+
if ok {
119+
RestoreDockerMachineSpec(&restored.Spec, &dst.Spec)
120+
RestoreDockerMachineStatus(&restored.Status, &dst.Status)
121+
}
100122

101123
return nil
102124
}
103125

126+
func RestoreDockerMachineSpec(restored *infrav1.DockerMachineSpec, dst *infrav1.DockerMachineSpec) {
127+
// Restore fields added in v1beta2.
128+
if restored.BootstrapTimeout != nil {
129+
dst.BootstrapTimeout = restored.BootstrapTimeout
130+
}
131+
}
132+
133+
func RestoreDockerMachineStatus(restored *infrav1.DockerMachineStatus, dst *infrav1.DockerMachineStatus) {
134+
// Restore fields added in v1beta2.
135+
dst.Conditions = restored.Conditions
136+
}
137+
104138
func (dst *DockerMachine) ConvertFrom(srcRaw conversion.Hub) error {
105139
src := srcRaw.(*infrav1.DockerMachine)
106140

@@ -112,11 +146,7 @@ func (dst *DockerMachine) ConvertFrom(srcRaw conversion.Hub) error {
112146
dst.Spec.ProviderID = nil
113147
}
114148

115-
if err := utilconversion.MarshalData(src, dst); err != nil {
116-
return err
117-
}
118-
119-
return nil
149+
return utilconversion.MarshalData(src, dst)
120150
}
121151

122152
func (src *DockerMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
@@ -128,16 +158,24 @@ func (src *DockerMachineTemplate) ConvertTo(dstRaw conversion.Hub) error {
128158

129159
// Manually restore data.
130160
restored := &infrav1.DockerMachineTemplate{}
131-
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
161+
ok, err := utilconversion.UnmarshalData(src, restored)
162+
if err != nil {
132163
return err
133164
}
134165

135-
dst.Spec.Template.ObjectMeta = restored.Spec.Template.ObjectMeta
136-
dst.Spec.Template.Spec.BootstrapTimeout = restored.Spec.Template.Spec.BootstrapTimeout
166+
if ok {
167+
RestoreDockerMachineTemplateSpec(&restored.Spec, &dst.Spec)
168+
}
137169

138170
return nil
139171
}
140172

173+
func RestoreDockerMachineTemplateSpec(restored *infrav1.DockerMachineTemplateSpec, dst *infrav1.DockerMachineTemplateSpec) {
174+
// Restore fields added in v1beta2.
175+
dst.Template.ObjectMeta = restored.Template.ObjectMeta
176+
dst.Template.Spec.BootstrapTimeout = restored.Template.Spec.BootstrapTimeout
177+
}
178+
141179
func (dst *DockerMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
142180
src := srcRaw.(*infrav1.DockerMachineTemplate)
143181

@@ -149,12 +187,7 @@ func (dst *DockerMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
149187
dst.Spec.Template.Spec.ProviderID = nil
150188
}
151189

152-
// Preserve Hub data on down-conversion except for metadata
153-
if err := utilconversion.MarshalData(src, dst); err != nil {
154-
return err
155-
}
156-
157-
return nil
190+
return utilconversion.MarshalData(src, dst)
158191
}
159192

160193
// Convert_v1beta2_DockerClusterSpec_To_v1alpha3_DockerClusterSpec is an autogenerated conversion function.
@@ -201,9 +234,7 @@ func Convert_v1beta2_DockerClusterStatus_To_v1alpha3_DockerClusterStatus(in *inf
201234
clusterv1alpha3.Convert_v1beta2_Deprecated_V1Beta1_Conditions_To_v1alpha3_Conditions(&in.Deprecated.V1Beta1.Conditions, &out.Conditions)
202235
}
203236

204-
if in.Initialization.Provisioned != nil {
205-
out.Ready = *in.Initialization.Provisioned
206-
}
237+
out.Ready = ptr.Deref(in.Initialization.Provisioned, false)
207238

208239
// Move FailureDomains
209240
if in.FailureDomains != nil {
@@ -231,9 +262,7 @@ func Convert_v1beta2_DockerMachineStatus_To_v1alpha3_DockerMachineStatus(in *inf
231262
clusterv1alpha3.Convert_v1beta2_Deprecated_V1Beta1_Conditions_To_v1alpha3_Conditions(&in.Deprecated.V1Beta1.Conditions, &out.Conditions)
232263
}
233264

234-
if in.Initialization.Provisioned != nil {
235-
out.Ready = *in.Initialization.Provisioned
236-
}
265+
out.Ready = ptr.Deref(in.Initialization.Provisioned, false)
237266

238267
return nil
239268
}
@@ -263,10 +292,6 @@ func Convert_v1alpha3_DockerMachineStatus_To_v1beta2_DockerMachineStatus(in *Doc
263292
clusterv1alpha3.Convert_v1alpha3_Conditions_To_v1beta2_Deprecated_V1Beta1_Conditions(&in.Conditions, &out.Deprecated.V1Beta1.Conditions)
264293
}
265294

266-
if in.Ready {
267-
out.Initialization.Provisioned = ptr.To(in.Ready)
268-
}
269-
270295
return nil
271296
}
272297

@@ -285,10 +310,6 @@ func Convert_v1alpha3_DockerClusterStatus_To_v1beta2_DockerClusterStatus(in *Doc
285310
clusterv1alpha3.Convert_v1alpha3_Conditions_To_v1beta2_Deprecated_V1Beta1_Conditions(&in.Conditions, &out.Deprecated.V1Beta1.Conditions)
286311
}
287312

288-
if in.Ready {
289-
out.Initialization.Provisioned = ptr.To(in.Ready)
290-
}
291-
292313
// Move FailureDomains
293314
if in.FailureDomains != nil {
294315
out.FailureDomains = []clusterv1.FailureDomain{}

0 commit comments

Comments
 (0)