@@ -17,10 +17,16 @@ limitations under the License.
17
17
package v1alpha3
18
18
19
19
import (
20
+ "maps"
21
+ "slices"
22
+ "sort"
23
+
20
24
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21
25
apiconversion "k8s.io/apimachinery/pkg/conversion"
26
+ "k8s.io/utils/ptr"
22
27
"sigs.k8s.io/controller-runtime/pkg/conversion"
23
28
29
+ clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
24
30
clusterv1alpha3 "sigs.k8s.io/cluster-api/internal/api/core/v1alpha3"
25
31
infrav1 "sigs.k8s.io/cluster-api/test/infrastructure/docker/api/v1beta2"
26
32
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
@@ -33,15 +39,6 @@ func (src *DockerCluster) ConvertTo(dstRaw conversion.Hub) error {
33
39
return err
34
40
}
35
41
36
- // Reset conditions from autogenerated conversions
37
- // NOTE: v1alpha3 conditions should not be automatically be converted into v1beta2 conditions.
38
- dst .Status .Conditions = nil
39
- if src .Status .Conditions != nil {
40
- dst .Status .Deprecated = & infrav1.DockerClusterDeprecatedStatus {}
41
- dst .Status .Deprecated .V1Beta1 = & infrav1.DockerClusterV1Beta1DeprecatedStatus {}
42
- clusterv1alpha3 .Convert_v1alpha3_Conditions_To_v1beta2_Deprecated_V1Beta1_Conditions (& src .Status .Conditions , & dst .Status .Deprecated .V1Beta1 .Conditions )
43
- }
44
-
45
42
// Manually restore data.
46
43
restored := & infrav1.DockerCluster {}
47
44
if ok , err := utilconversion .UnmarshalData (src , restored ); err != nil || ! ok {
@@ -61,6 +58,7 @@ func (src *DockerCluster) ConvertTo(dstRaw conversion.Hub) error {
61
58
}
62
59
63
60
dst .Status .Conditions = restored .Status .Conditions
61
+ dst .Status .Initialization = restored .Status .Initialization
64
62
65
63
return nil
66
64
}
@@ -72,13 +70,6 @@ func (dst *DockerCluster) ConvertFrom(srcRaw conversion.Hub) error {
72
70
return err
73
71
}
74
72
75
- // Reset conditions from autogenerated conversions
76
- // NOTE: v1beta2 conditions should not be automatically be converted into v1alpha3 conditions.
77
- dst .Status .Conditions = nil
78
- if src .Status .Deprecated != nil && src .Status .Deprecated .V1Beta1 != nil && src .Status .Deprecated .V1Beta1 .Conditions != nil {
79
- clusterv1alpha3 .Convert_v1beta2_Deprecated_V1Beta1_Conditions_To_v1alpha3_Conditions (& src .Status .Deprecated .V1Beta1 .Conditions , & dst .Status .Conditions )
80
- }
81
-
82
73
// Preserve Hub data on down-conversion except for metadata
83
74
if err := utilconversion .MarshalData (src , dst ); err != nil {
84
75
return err
@@ -94,16 +85,6 @@ func (src *DockerMachine) ConvertTo(dstRaw conversion.Hub) error {
94
85
return err
95
86
}
96
87
97
- // Reset conditions from autogenerated conversions
98
- // NOTE: v1alpha3 conditions should not be automatically be converted into v1beta2 conditions.
99
- dst .Status .Conditions = nil
100
-
101
- if src .Status .Conditions != nil {
102
- dst .Status .Deprecated = & infrav1.DockerMachineDeprecatedStatus {}
103
- dst .Status .Deprecated .V1Beta1 = & infrav1.DockerMachineV1Beta1DeprecatedStatus {}
104
- clusterv1alpha3 .Convert_v1alpha3_Conditions_To_v1beta2_Deprecated_V1Beta1_Conditions (& src .Status .Conditions , & dst .Status .Deprecated .V1Beta1 .Conditions )
105
- }
106
-
107
88
// Manually restore data.
108
89
restored := & infrav1.DockerMachine {}
109
90
if ok , err := utilconversion .UnmarshalData (src , restored ); err != nil || ! ok {
@@ -115,6 +96,7 @@ func (src *DockerMachine) ConvertTo(dstRaw conversion.Hub) error {
115
96
}
116
97
117
98
dst .Status .Conditions = restored .Status .Conditions
99
+ dst .Status .Initialization = restored .Status .Initialization
118
100
119
101
return nil
120
102
}
@@ -126,13 +108,6 @@ func (dst *DockerMachine) ConvertFrom(srcRaw conversion.Hub) error {
126
108
return err
127
109
}
128
110
129
- // Reset conditions from autogenerated conversions
130
- // NOTE: v1beta2 conditions should not be automatically be converted into v1alpha3 conditions.
131
- dst .Status .Conditions = nil
132
- if src .Status .Deprecated != nil && src .Status .Deprecated .V1Beta1 != nil && src .Status .Deprecated .V1Beta1 .Conditions != nil {
133
- clusterv1alpha3 .Convert_v1beta2_Deprecated_V1Beta1_Conditions_To_v1alpha3_Conditions (& src .Status .Deprecated .V1Beta1 .Conditions , & dst .Status .Conditions )
134
- }
135
-
136
111
if err := utilconversion .MarshalData (src , dst ); err != nil {
137
112
return err
138
113
}
@@ -177,7 +152,22 @@ func (dst *DockerMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
177
152
// Convert_v1beta2_DockerClusterSpec_To_v1alpha3_DockerClusterSpec is an autogenerated conversion function.
178
153
func Convert_v1beta2_DockerClusterSpec_To_v1alpha3_DockerClusterSpec (in * infrav1.DockerClusterSpec , out * DockerClusterSpec , s apiconversion.Scope ) error {
179
154
// DockerClusterSpec.LoadBalancer was added in v1alpha4, so automatic conversion is not possible
180
- return autoConvert_v1beta2_DockerClusterSpec_To_v1alpha3_DockerClusterSpec (in , out , s )
155
+ if err := autoConvert_v1beta2_DockerClusterSpec_To_v1alpha3_DockerClusterSpec (in , out , s ); err != nil {
156
+ return err
157
+ }
158
+
159
+ // Move FailureDomains
160
+ if in .FailureDomains != nil {
161
+ out .FailureDomains = clusterv1alpha3.FailureDomains {}
162
+ for _ , fd := range in .FailureDomains {
163
+ out .FailureDomains [fd .Name ] = clusterv1alpha3.FailureDomainSpec {
164
+ ControlPlane : fd .ControlPlane ,
165
+ Attributes : fd .Attributes ,
166
+ }
167
+ }
168
+ }
169
+
170
+ return nil
181
171
}
182
172
183
173
func Convert_v1beta2_DockerMachineTemplateResource_To_v1alpha3_DockerMachineTemplateResource (in * infrav1.DockerMachineTemplateResource , out * DockerMachineTemplateResource , s apiconversion.Scope ) error {
@@ -192,11 +182,52 @@ func Convert_v1beta2_DockerMachineSpec_To_v1alpha3_DockerMachineSpec(in *infrav1
192
182
}
193
183
194
184
func Convert_v1beta2_DockerClusterStatus_To_v1alpha3_DockerClusterStatus (in * infrav1.DockerClusterStatus , out * DockerClusterStatus , s apiconversion.Scope ) error {
195
- return autoConvert_v1beta2_DockerClusterStatus_To_v1alpha3_DockerClusterStatus (in , out , s )
185
+ if err := autoConvert_v1beta2_DockerClusterStatus_To_v1alpha3_DockerClusterStatus (in , out , s ); err != nil {
186
+ return err
187
+ }
188
+
189
+ // Reset conditions from autogenerated conversions
190
+ // NOTE: v1beta2 conditions should not be automatically be converted into v1alpha3 conditions.
191
+ out .Conditions = nil
192
+ if in .Deprecated != nil && in .Deprecated .V1Beta1 != nil && in .Deprecated .V1Beta1 .Conditions != nil {
193
+ clusterv1alpha3 .Convert_v1beta2_Deprecated_V1Beta1_Conditions_To_v1alpha3_Conditions (& in .Deprecated .V1Beta1 .Conditions , & out .Conditions )
194
+ }
195
+
196
+ if in .Initialization != nil && in .Initialization .Provisioned != nil {
197
+ out .Ready = * in .Initialization .Provisioned
198
+ }
199
+
200
+ // Move FailureDomains
201
+ if in .FailureDomains != nil {
202
+ out .FailureDomains = clusterv1alpha3.FailureDomains {}
203
+ for _ , fd := range in .FailureDomains {
204
+ out .FailureDomains [fd .Name ] = clusterv1alpha3.FailureDomainSpec {
205
+ ControlPlane : fd .ControlPlane ,
206
+ Attributes : fd .Attributes ,
207
+ }
208
+ }
209
+ }
210
+
211
+ return nil
196
212
}
197
213
198
214
func Convert_v1beta2_DockerMachineStatus_To_v1alpha3_DockerMachineStatus (in * infrav1.DockerMachineStatus , out * DockerMachineStatus , s apiconversion.Scope ) error {
199
- return autoConvert_v1beta2_DockerMachineStatus_To_v1alpha3_DockerMachineStatus (in , out , s )
215
+ if err := autoConvert_v1beta2_DockerMachineStatus_To_v1alpha3_DockerMachineStatus (in , out , s ); err != nil {
216
+ return err
217
+ }
218
+
219
+ // Reset conditions from autogenerated conversions
220
+ // NOTE: v1beta2 conditions should not be automatically be converted into v1alpha3 conditions.
221
+ out .Conditions = nil
222
+ if in .Deprecated != nil && in .Deprecated .V1Beta1 != nil && in .Deprecated .V1Beta1 .Conditions != nil {
223
+ clusterv1alpha3 .Convert_v1beta2_Deprecated_V1Beta1_Conditions_To_v1alpha3_Conditions (& in .Deprecated .V1Beta1 .Conditions , & out .Conditions )
224
+ }
225
+
226
+ if in .Initialization != nil && in .Initialization .Provisioned != nil {
227
+ out .Ready = * in .Initialization .Provisioned
228
+ }
229
+
230
+ return nil
200
231
}
201
232
202
233
// Implement local conversion func because conversion-gen is not aware of conversion func in other packages (see https://github.com/kubernetes/code-generator/issues/94)
@@ -208,3 +239,93 @@ func Convert_v1alpha3_Condition_To_v1_Condition(in *clusterv1alpha3.Condition, o
208
239
func Convert_v1_Condition_To_v1alpha3_Condition (in * metav1.Condition , out * clusterv1alpha3.Condition , s apiconversion.Scope ) error {
209
240
return clusterv1alpha3 .Convert_v1_Condition_To_v1alpha3_Condition (in , out , s )
210
241
}
242
+
243
+ func Convert_v1alpha3_DockerMachineStatus_To_v1beta2_DockerMachineStatus (in * DockerMachineStatus , out * infrav1.DockerMachineStatus , s apiconversion.Scope ) error {
244
+ if err := autoConvert_v1alpha3_DockerMachineStatus_To_v1beta2_DockerMachineStatus (in , out , s ); err != nil {
245
+ return err
246
+ }
247
+
248
+ // Reset conditions from autogenerated conversions
249
+ // NOTE: v1alpha3 conditions should not be automatically be converted into v1beta2 conditions.
250
+ out .Conditions = nil
251
+
252
+ if in .Conditions != nil {
253
+ out .Deprecated = & infrav1.DockerMachineDeprecatedStatus {}
254
+ out .Deprecated .V1Beta1 = & infrav1.DockerMachineV1Beta1DeprecatedStatus {}
255
+ clusterv1alpha3 .Convert_v1alpha3_Conditions_To_v1beta2_Deprecated_V1Beta1_Conditions (& in .Conditions , & out .Deprecated .V1Beta1 .Conditions )
256
+ }
257
+
258
+ if out .Initialization == nil {
259
+ out .Initialization = & infrav1.DockerMachineInitializationStatus {}
260
+ }
261
+
262
+ if in .Ready {
263
+ out .Initialization .Provisioned = ptr .To (in .Ready )
264
+ }
265
+
266
+ return nil
267
+ }
268
+
269
+ func Convert_v1alpha3_DockerClusterStatus_To_v1beta2_DockerClusterStatus (in * DockerClusterStatus , out * infrav1.DockerClusterStatus , s apiconversion.Scope ) error {
270
+ // NOTE: custom conversion func is required because status.conditions has been added in v1beta2.
271
+ if err := autoConvert_v1alpha3_DockerClusterStatus_To_v1beta2_DockerClusterStatus (in , out , s ); err != nil {
272
+ return err
273
+ }
274
+
275
+ // Reset conditions from autogenerated conversions
276
+ // NOTE: v1alpha3 conditions should not be automatically be converted into v1beta2 conditions.
277
+ out .Conditions = nil
278
+ if in .Conditions != nil {
279
+ out .Deprecated = & infrav1.DockerClusterDeprecatedStatus {}
280
+ out .Deprecated .V1Beta1 = & infrav1.DockerClusterV1Beta1DeprecatedStatus {}
281
+ clusterv1alpha3 .Convert_v1alpha3_Conditions_To_v1beta2_Deprecated_V1Beta1_Conditions (& in .Conditions , & out .Deprecated .V1Beta1 .Conditions )
282
+ }
283
+
284
+ if out .Initialization == nil {
285
+ out .Initialization = & infrav1.DockerClusterInitializationStatus {}
286
+ }
287
+
288
+ if in .Ready {
289
+ out .Initialization .Provisioned = ptr .To (in .Ready )
290
+ }
291
+
292
+ // Move FailureDomains
293
+ if in .FailureDomains != nil {
294
+ out .FailureDomains = []clusterv1.FailureDomain {}
295
+ domainNames := slices .Collect (maps .Keys (in .FailureDomains ))
296
+ sort .Strings (domainNames )
297
+ for _ , name := range domainNames {
298
+ domain := in .FailureDomains [name ]
299
+ out .FailureDomains = append (out .FailureDomains , clusterv1.FailureDomain {
300
+ Name : name ,
301
+ ControlPlane : domain .ControlPlane ,
302
+ Attributes : domain .Attributes ,
303
+ })
304
+ }
305
+ }
306
+
307
+ return nil
308
+ }
309
+
310
+ func Convert_v1alpha3_DockerClusterSpec_To_v1beta2_DockerClusterSpec (in * DockerClusterSpec , out * infrav1.DockerClusterSpec , s apiconversion.Scope ) error {
311
+ if err := autoConvert_v1alpha3_DockerClusterSpec_To_v1beta2_DockerClusterSpec (in , out , s ); err != nil {
312
+ return err
313
+ }
314
+
315
+ // Move FailureDomains
316
+ if in .FailureDomains != nil {
317
+ out .FailureDomains = []clusterv1.FailureDomain {}
318
+ domainNames := slices .Collect (maps .Keys (in .FailureDomains ))
319
+ sort .Strings (domainNames )
320
+ for _ , name := range domainNames {
321
+ domain := in .FailureDomains [name ]
322
+ out .FailureDomains = append (out .FailureDomains , clusterv1.FailureDomain {
323
+ Name : name ,
324
+ ControlPlane : domain .ControlPlane ,
325
+ Attributes : domain .Attributes ,
326
+ })
327
+ }
328
+ }
329
+
330
+ return nil
331
+ }
0 commit comments