@@ -17,10 +17,16 @@ limitations under the License.
1717package v1alpha3
1818
1919import (
20+ "maps"
21+ "slices"
22+ "sort"
23+
2024 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2125 apiconversion "k8s.io/apimachinery/pkg/conversion"
26+ "k8s.io/utils/ptr"
2227 "sigs.k8s.io/controller-runtime/pkg/conversion"
2328
29+ clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
2430 clusterv1alpha3 "sigs.k8s.io/cluster-api/internal/api/core/v1alpha3"
2531 infrav1 "sigs.k8s.io/cluster-api/test/infrastructure/docker/api/v1beta2"
2632 utilconversion "sigs.k8s.io/cluster-api/util/conversion"
@@ -33,15 +39,6 @@ func (src *DockerCluster) ConvertTo(dstRaw conversion.Hub) error {
3339 return err
3440 }
3541
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-
4542 // Manually restore data.
4643 restored := & infrav1.DockerCluster {}
4744 if ok , err := utilconversion .UnmarshalData (src , restored ); err != nil || ! ok {
@@ -61,6 +58,7 @@ func (src *DockerCluster) ConvertTo(dstRaw conversion.Hub) error {
6158 }
6259
6360 dst .Status .Conditions = restored .Status .Conditions
61+ dst .Status .Initialization = restored .Status .Initialization
6462
6563 return nil
6664}
@@ -72,13 +70,6 @@ func (dst *DockerCluster) ConvertFrom(srcRaw conversion.Hub) error {
7270 return err
7371 }
7472
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-
8273 // Preserve Hub data on down-conversion except for metadata
8374 if err := utilconversion .MarshalData (src , dst ); err != nil {
8475 return err
@@ -94,16 +85,6 @@ func (src *DockerMachine) ConvertTo(dstRaw conversion.Hub) error {
9485 return err
9586 }
9687
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-
10788 // Manually restore data.
10889 restored := & infrav1.DockerMachine {}
10990 if ok , err := utilconversion .UnmarshalData (src , restored ); err != nil || ! ok {
@@ -115,6 +96,7 @@ func (src *DockerMachine) ConvertTo(dstRaw conversion.Hub) error {
11596 }
11697
11798 dst .Status .Conditions = restored .Status .Conditions
99+ dst .Status .Initialization = restored .Status .Initialization
118100
119101 return nil
120102}
@@ -126,13 +108,6 @@ func (dst *DockerMachine) ConvertFrom(srcRaw conversion.Hub) error {
126108 return err
127109 }
128110
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-
136111 if err := utilconversion .MarshalData (src , dst ); err != nil {
137112 return err
138113 }
@@ -177,7 +152,22 @@ func (dst *DockerMachineTemplate) ConvertFrom(srcRaw conversion.Hub) error {
177152// Convert_v1beta2_DockerClusterSpec_To_v1alpha3_DockerClusterSpec is an autogenerated conversion function.
178153func Convert_v1beta2_DockerClusterSpec_To_v1alpha3_DockerClusterSpec (in * infrav1.DockerClusterSpec , out * DockerClusterSpec , s apiconversion.Scope ) error {
179154 // 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
181171}
182172
183173func 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
192182}
193183
194184func 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
196212}
197213
198214func 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
200231}
201232
202233// 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
208239func Convert_v1_Condition_To_v1alpha3_Condition (in * metav1.Condition , out * clusterv1alpha3.Condition , s apiconversion.Scope ) error {
209240 return clusterv1alpha3 .Convert_v1_Condition_To_v1alpha3_Condition (in , out , s )
210241}
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