Skip to content

Commit 033a048

Browse files
authored
Promote CAPI v1beta2 conditions in CAPIBM v1beta3 api's (kubernetes-sigs#2623)
1 parent 33ade3d commit 033a048

23 files changed

+1506
-1208
lines changed

.golangci.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,10 @@ linters:
211211
- linters:
212212
- staticcheck
213213
text: 'SA1019: endpoints.(FetchRCEndpoint|FetchPVSEndpoint) is deprecated: Use FetchEndpoints instead.'
214+
# v1Beta2 deprecated fields
215+
- linters:
216+
- staticcheck
217+
text: 'SA1019: .*\.Deprecated\.V1Beta2.* is deprecated'
214218
paths:
215219
- zz_generated.*\.go$
216220
- third_party$

api/powervs/v1beta2/conversion.go

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,192 @@ limitations under the License.
1717
package v1beta2
1818

1919
import (
20+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21+
apimachineryconversion "k8s.io/apimachinery/pkg/conversion"
22+
2023
"sigs.k8s.io/controller-runtime/pkg/conversion"
2124

25+
clusterv1beta1 "sigs.k8s.io/cluster-api/api/core/v1beta1" //nolint:staticcheck
26+
2227
infrav1 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/powervs/v1beta3"
2328
)
2429

30+
func Convert_v1beta2_IBMPowerVSClusterStatus_To_v1beta3_IBMPowerVSClusterStatus(in *IBMPowerVSClusterStatus, out *infrav1.IBMPowerVSClusterStatus, s apimachineryconversion.Scope) error {
31+
if err := autoConvert_v1beta2_IBMPowerVSClusterStatus_To_v1beta3_IBMPowerVSClusterStatus(in, out, s); err != nil {
32+
return err
33+
}
34+
35+
// Reset conditions from autogenerated conversions
36+
// NOTE: v1beta2 conditions should not be automatically be converted into v1beta3 conditions.
37+
out.Conditions = nil
38+
39+
// Retrieve new conditions (v1beta2) from the v1beta2 field.
40+
if in.V1Beta2 != nil {
41+
out.Conditions = in.V1Beta2.Conditions
42+
}
43+
44+
// Move legacy conditions (v1beta2) to the deprecated field.
45+
if in.Conditions == nil {
46+
return nil
47+
}
48+
49+
if out.Deprecated == nil {
50+
out.Deprecated = &infrav1.IBMPowerVSClusterDeprecatedStatus{}
51+
}
52+
if out.Deprecated.V1Beta2 == nil {
53+
out.Deprecated.V1Beta2 = &infrav1.IBMPowerVSClusterV1Beta2DeprecatedStatus{}
54+
}
55+
if in.Conditions != nil {
56+
clusterv1beta1.Convert_v1beta1_Conditions_To_v1beta2_Deprecated_V1Beta1_Conditions(&in.Conditions, &out.Deprecated.V1Beta2.Conditions)
57+
}
58+
return nil
59+
}
60+
61+
func Convert_v1beta3_IBMPowerVSClusterStatus_To_v1beta2_IBMPowerVSClusterStatus(in *infrav1.IBMPowerVSClusterStatus, out *IBMPowerVSClusterStatus, s apimachineryconversion.Scope) error {
62+
if err := autoConvert_v1beta3_IBMPowerVSClusterStatus_To_v1beta2_IBMPowerVSClusterStatus(in, out, s); err != nil {
63+
return err
64+
}
65+
66+
// Reset conditions from autogenerated conversions
67+
// NOTE: v1beta2 conditions should not automatically be converted into legacy conditions (v1beta1).
68+
out.Conditions = nil
69+
70+
// Retrieve legacy conditions (v1beta2) from the deprecated field.
71+
if in.Deprecated != nil && in.Deprecated.V1Beta2 != nil {
72+
if in.Deprecated.V1Beta2.Conditions != nil {
73+
clusterv1beta1.Convert_v1beta2_Deprecated_V1Beta1_Conditions_To_v1beta1_Conditions(&in.Deprecated.V1Beta2.Conditions, &out.Conditions)
74+
}
75+
}
76+
77+
// Move new conditions (v1beta2) to the v1beta2 field.
78+
if in.Conditions == nil {
79+
return nil
80+
}
81+
out.V1Beta2 = &IBMPowerVSClusterV1Beta2Status{}
82+
out.V1Beta2.Conditions = in.Conditions
83+
return nil
84+
}
85+
86+
func Convert_v1beta2_IBMPowerVSMachineStatus_To_v1beta3_IBMPowerVSMachineStatus(in *IBMPowerVSMachineStatus, out *infrav1.IBMPowerVSMachineStatus, s apimachineryconversion.Scope) error {
87+
if err := autoConvert_v1beta2_IBMPowerVSMachineStatus_To_v1beta3_IBMPowerVSMachineStatus(in, out, s); err != nil {
88+
return err
89+
}
90+
91+
// Reset conditions from autogenerated conversions
92+
// NOTE: v1beta2 conditions should not be automatically be converted into v1beta3 conditions.
93+
out.Conditions = nil
94+
95+
// Retrieve new conditions (v1beta2) from the v1beta2 field.
96+
if in.V1Beta2 != nil {
97+
out.Conditions = in.V1Beta2.Conditions
98+
}
99+
100+
// Move legacy conditions (v1beta2) to the deprecated field.
101+
if in.Conditions == nil {
102+
return nil
103+
}
104+
105+
if out.Deprecated == nil {
106+
out.Deprecated = &infrav1.IBMPowerVSMachineDeprecatedStatus{}
107+
}
108+
if out.Deprecated.V1Beta2 == nil {
109+
out.Deprecated.V1Beta2 = &infrav1.IBMPowerVSMachineV1Beta2DeprecatedStatus{}
110+
}
111+
if in.Conditions != nil {
112+
clusterv1beta1.Convert_v1beta1_Conditions_To_v1beta2_Deprecated_V1Beta1_Conditions(&in.Conditions, &out.Deprecated.V1Beta2.Conditions)
113+
}
114+
return nil
115+
}
116+
117+
func Convert_v1beta3_IBMPowerVSMachineStatus_To_v1beta2_IBMPowerVSMachineStatus(in *infrav1.IBMPowerVSMachineStatus, out *IBMPowerVSMachineStatus, s apimachineryconversion.Scope) error {
118+
if err := autoConvert_v1beta3_IBMPowerVSMachineStatus_To_v1beta2_IBMPowerVSMachineStatus(in, out, s); err != nil {
119+
return err
120+
}
121+
122+
// Reset conditions from autogenerated conversions
123+
// NOTE: v1beta2 conditions should not automatically be converted into legacy conditions (v1beta1).
124+
out.Conditions = nil
125+
126+
// Retrieve legacy conditions (v1beta2) from the deprecated field.
127+
if in.Deprecated != nil && in.Deprecated.V1Beta2 != nil {
128+
if in.Deprecated.V1Beta2.Conditions != nil {
129+
clusterv1beta1.Convert_v1beta2_Deprecated_V1Beta1_Conditions_To_v1beta1_Conditions(&in.Deprecated.V1Beta2.Conditions, &out.Conditions)
130+
}
131+
}
132+
133+
// Move new conditions (v1beta2) to the v1beta2 field.
134+
if in.Conditions == nil {
135+
return nil
136+
}
137+
out.V1Beta2 = &IBMPowerVSMachineV1Beta2Status{}
138+
out.V1Beta2.Conditions = in.Conditions
139+
return nil
140+
}
141+
142+
func Convert_v1beta2_IBMPowerVSImageStatus_To_v1beta3_IBMPowerVSImageStatus(in *IBMPowerVSImageStatus, out *infrav1.IBMPowerVSImageStatus, s apimachineryconversion.Scope) error {
143+
if err := autoConvert_v1beta2_IBMPowerVSImageStatus_To_v1beta3_IBMPowerVSImageStatus(in, out, s); err != nil {
144+
return err
145+
}
146+
147+
// Reset conditions from autogenerated conversions
148+
// NOTE: v1beta2 conditions should not be automatically be converted into v1beta3 conditions.
149+
out.Conditions = nil
150+
151+
// Retrieve new conditions (v1beta2) from the v1beta2 field.
152+
if in.V1Beta2 != nil {
153+
out.Conditions = in.V1Beta2.Conditions
154+
}
155+
156+
// Move legacy conditions (v1beta2) to the deprecated field.
157+
if in.Conditions == nil {
158+
return nil
159+
}
160+
161+
if out.Deprecated == nil {
162+
out.Deprecated = &infrav1.IBMPowerVSImageDeprecatedStatus{}
163+
}
164+
if out.Deprecated.V1Beta2 == nil {
165+
out.Deprecated.V1Beta2 = &infrav1.IBMPowerVSImageV1Beta2DeprecatedStatus{}
166+
}
167+
if in.Conditions != nil {
168+
clusterv1beta1.Convert_v1beta1_Conditions_To_v1beta2_Deprecated_V1Beta1_Conditions(&in.Conditions, &out.Deprecated.V1Beta2.Conditions)
169+
}
170+
return nil
171+
}
172+
173+
func Convert_v1beta3_IBMPowerVSImageStatus_To_v1beta2_IBMPowerVSImageStatus(in *infrav1.IBMPowerVSImageStatus, out *IBMPowerVSImageStatus, s apimachineryconversion.Scope) error {
174+
if err := autoConvert_v1beta3_IBMPowerVSImageStatus_To_v1beta2_IBMPowerVSImageStatus(in, out, s); err != nil {
175+
return err
176+
}
177+
178+
// Reset conditions from autogenerated conversions
179+
// NOTE: v1beta2 conditions should not automatically be converted into legacy conditions (v1beta1).
180+
out.Conditions = nil
181+
182+
// Retrieve legacy conditions (v1beta2) from the deprecated field.
183+
if in.Deprecated != nil && in.Deprecated.V1Beta2 != nil {
184+
if in.Deprecated.V1Beta2.Conditions != nil {
185+
clusterv1beta1.Convert_v1beta2_Deprecated_V1Beta1_Conditions_To_v1beta1_Conditions(&in.Deprecated.V1Beta2.Conditions, &out.Conditions)
186+
}
187+
}
188+
189+
// Move new conditions (v1beta2) to the v1beta2 field.
190+
if in.Conditions == nil {
191+
return nil
192+
}
193+
out.V1Beta2 = &IBMPowerVSImageV1Beta2Status{}
194+
out.V1Beta2.Conditions = in.Conditions
195+
return nil
196+
}
197+
198+
func Convert_v1_Condition_To_v1beta1_Condition(in *metav1.Condition, out *clusterv1beta1.Condition, s apimachineryconversion.Scope) error {
199+
return clusterv1beta1.Convert_v1_Condition_To_v1beta1_Condition(in, out, s)
200+
}
201+
202+
func Convert_v1beta1_Condition_To_v1_Condition(in *clusterv1beta1.Condition, out *metav1.Condition, s apimachineryconversion.Scope) error {
203+
return clusterv1beta1.Convert_v1beta1_Condition_To_v1_Condition(in, out, s)
204+
}
205+
25206
func (src *IBMPowerVSCluster) ConvertTo(dstRaw conversion.Hub) error {
26207
dst := dstRaw.(*infrav1.IBMPowerVSCluster)
27208

api/powervs/v1beta2/conversion_test.go

Lines changed: 87 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@ limitations under the License.
1717
package v1beta2
1818

1919
import (
20+
"reflect"
21+
"sigs.k8s.io/randfill"
2022
"testing"
2123

2224
"k8s.io/apimachinery/pkg/api/apitesting/fuzzer"
2325
"k8s.io/apimachinery/pkg/runtime"
26+
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
2427

2528
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
2629

@@ -39,7 +42,7 @@ func TestFuzzyConversion(t *testing.T) {
3942
Scheme: scheme,
4043
Hub: &infrav1.IBMPowerVSCluster{},
4144
Spoke: &IBMPowerVSCluster{},
42-
FuzzerFuncs: []fuzzer.FuzzerFuncs{},
45+
FuzzerFuncs: []fuzzer.FuzzerFuncs{IBMPowerVSClusterFuzzFuncs},
4346
}))
4447
t.Run("for IBMPowerVSClusterTemplate", utilconversion.FuzzTestFunc(utilconversion.FuzzTestFuncInput{
4548
Scheme: scheme,
@@ -51,7 +54,7 @@ func TestFuzzyConversion(t *testing.T) {
5154
Scheme: scheme,
5255
Hub: &infrav1.IBMPowerVSMachine{},
5356
Spoke: &IBMPowerVSMachine{},
54-
FuzzerFuncs: []fuzzer.FuzzerFuncs{},
57+
FuzzerFuncs: []fuzzer.FuzzerFuncs{IBMPowerVSMachineFuzzFuncs},
5558
}))
5659
t.Run("for IBMPowerVSMachineTemplate", utilconversion.FuzzTestFunc(utilconversion.FuzzTestFuncInput{
5760
Scheme: scheme,
@@ -63,6 +66,87 @@ func TestFuzzyConversion(t *testing.T) {
6366
Scheme: scheme,
6467
Hub: &infrav1.IBMPowerVSImage{},
6568
Spoke: &IBMPowerVSImage{},
66-
FuzzerFuncs: []fuzzer.FuzzerFuncs{},
69+
FuzzerFuncs: []fuzzer.FuzzerFuncs{IBMPowerVSImageFuzzFuncs},
6770
}))
6871
}
72+
73+
func IBMPowerVSClusterFuzzFuncs(_ runtimeserializer.CodecFactory) []interface{} {
74+
return []interface{}{
75+
hubIBMPowerVSClusterStatus,
76+
spokeIBMPowerVSClusterStatus,
77+
}
78+
}
79+
80+
func hubIBMPowerVSClusterStatus(in *infrav1.IBMPowerVSClusterStatus, c randfill.Continue) {
81+
c.FillNoCustom(in)
82+
// Drop empty structs with only omit empty fields.
83+
if in.Deprecated != nil {
84+
if in.Deprecated.V1Beta2 == nil || reflect.DeepEqual(in.Deprecated.V1Beta2, &infrav1.IBMPowerVSClusterV1Beta2DeprecatedStatus{}) {
85+
in.Deprecated = nil
86+
}
87+
}
88+
}
89+
90+
func spokeIBMPowerVSClusterStatus(in *IBMPowerVSClusterStatus, c randfill.Continue) {
91+
c.FillNoCustom(in)
92+
// Drop empty structs with only omit empty fields.
93+
if in.V1Beta2 != nil {
94+
if reflect.DeepEqual(in.V1Beta2, &IBMPowerVSClusterV1Beta2Status{}) {
95+
in.V1Beta2 = nil
96+
}
97+
}
98+
}
99+
100+
func IBMPowerVSMachineFuzzFuncs(_ runtimeserializer.CodecFactory) []interface{} {
101+
return []interface{}{
102+
hubIBMPowerVSMachineStatus,
103+
spokeIBMPowerVSMachineStatus,
104+
}
105+
}
106+
107+
func hubIBMPowerVSMachineStatus(in *infrav1.IBMPowerVSMachineStatus, c randfill.Continue) {
108+
c.FillNoCustom(in)
109+
// Drop empty structs with only omit empty fields.
110+
if in.Deprecated != nil {
111+
if in.Deprecated.V1Beta2 == nil || reflect.DeepEqual(in.Deprecated.V1Beta2, &infrav1.IBMPowerVSMachineV1Beta2DeprecatedStatus{}) {
112+
in.Deprecated = nil
113+
}
114+
}
115+
}
116+
117+
func spokeIBMPowerVSMachineStatus(in *IBMPowerVSMachineStatus, c randfill.Continue) {
118+
c.FillNoCustom(in)
119+
// Drop empty structs with only omit empty fields.
120+
if in.V1Beta2 != nil {
121+
if reflect.DeepEqual(in.V1Beta2, &IBMPowerVSMachineV1Beta2Status{}) {
122+
in.V1Beta2 = nil
123+
}
124+
}
125+
}
126+
127+
func IBMPowerVSImageFuzzFuncs(_ runtimeserializer.CodecFactory) []interface{} {
128+
return []interface{}{
129+
hubIBMPowerVSImageStatus,
130+
spokeIBMPowerVSImageStatus,
131+
}
132+
}
133+
134+
func hubIBMPowerVSImageStatus(in *infrav1.IBMPowerVSImageStatus, c randfill.Continue) {
135+
c.FillNoCustom(in)
136+
// Drop empty structs with only omit empty fields.
137+
if in.Deprecated != nil {
138+
if in.Deprecated.V1Beta2 == nil || reflect.DeepEqual(in.Deprecated.V1Beta2, &infrav1.IBMPowerVSImageV1Beta2DeprecatedStatus{}) {
139+
in.Deprecated = nil
140+
}
141+
}
142+
}
143+
144+
func spokeIBMPowerVSImageStatus(in *IBMPowerVSImageStatus, c randfill.Continue) {
145+
c.FillNoCustom(in)
146+
// Drop empty structs with only omit empty fields.
147+
if in.V1Beta2 != nil {
148+
if reflect.DeepEqual(in.V1Beta2, &IBMPowerVSImageV1Beta2Status{}) {
149+
in.V1Beta2 = nil
150+
}
151+
}
152+
}

0 commit comments

Comments
 (0)