Skip to content

Commit 4519da9

Browse files
committed
Improve method signatures of conversion functions
It was possible to create a HashedFieldRestorer without a RestoreField, which resulted in a crash in the conversion function. Additionally, it was not easy to understand from the existing documentation that the function was required and what its behaviour needed to be. This change updates the method signatures of the conversion functions to ensure initialisation of required fields, which turns this error into a compile error. It additionally improves the documentation.
1 parent b77e0ca commit 4519da9

File tree

3 files changed

+163
-118
lines changed

3 files changed

+163
-118
lines changed

api/v1alpha6/conversion.go

Lines changed: 62 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -103,51 +103,50 @@ func restorev1alpha6ClusterSpec(previous *OpenStackClusterSpec, dst *OpenStackCl
103103
var _ ctrlconversion.Convertible = &OpenStackCluster{}
104104

105105
var v1alpha6OpenStackClusterRestorer = conversion.RestorerFor[*OpenStackCluster]{
106-
"spec": conversion.HashedFieldRestorer[*OpenStackCluster, OpenStackClusterSpec]{
107-
GetField: func(c *OpenStackCluster) *OpenStackClusterSpec {
106+
"spec": conversion.HashedFieldRestorer(
107+
func(c *OpenStackCluster) *OpenStackClusterSpec {
108108
return &c.Spec
109109
},
110-
RestoreField: restorev1alpha6ClusterSpec,
111-
},
112-
"status": conversion.HashedFieldRestorer[*OpenStackCluster, OpenStackClusterStatus]{
113-
GetField: func(c *OpenStackCluster) *OpenStackClusterStatus {
110+
restorev1alpha6ClusterSpec,
111+
),
112+
"status": conversion.HashedFieldRestorer(
113+
func(c *OpenStackCluster) *OpenStackClusterStatus {
114114
return &c.Status
115115
},
116-
RestoreField: restorev1alpha6ClusterStatus,
117-
},
116+
restorev1alpha6ClusterStatus,
117+
),
118118
}
119119

120120
var v1alpha8OpenStackClusterRestorer = conversion.RestorerFor[*infrav1.OpenStackCluster]{
121-
"router": conversion.UnconditionalFieldRestorer[*infrav1.OpenStackCluster, *infrav1.RouterFilter]{
122-
GetField: func(c *infrav1.OpenStackCluster) **infrav1.RouterFilter {
121+
"router": conversion.UnconditionalFieldRestorer(
122+
func(c *infrav1.OpenStackCluster) **infrav1.RouterFilter {
123123
return &c.Spec.Router
124124
},
125-
},
126-
"networkMtu": conversion.UnconditionalFieldRestorer[*infrav1.OpenStackCluster, int]{
127-
GetField: func(c *infrav1.OpenStackCluster) *int {
125+
),
126+
"networkMtu": conversion.UnconditionalFieldRestorer(
127+
func(c *infrav1.OpenStackCluster) *int {
128128
return &c.Spec.NetworkMTU
129129
},
130-
},
131-
"bastion": conversion.HashedFieldRestorer[*infrav1.OpenStackCluster, *infrav1.Bastion]{
132-
GetField: func(c *infrav1.OpenStackCluster) **infrav1.Bastion {
130+
),
131+
"bastion": conversion.HashedFieldRestorer(
132+
func(c *infrav1.OpenStackCluster) **infrav1.Bastion {
133133
return &c.Spec.Bastion
134134
},
135-
RestoreField: restorev1alpha8Bastion,
136-
},
137-
"status": conversion.HashedFieldRestorer[*infrav1.OpenStackCluster, infrav1.OpenStackClusterStatus]{
138-
GetField: func(c *infrav1.OpenStackCluster) *infrav1.OpenStackClusterStatus {
135+
restorev1alpha8Bastion,
136+
),
137+
"status": conversion.HashedFieldRestorer(
138+
func(c *infrav1.OpenStackCluster) *infrav1.OpenStackClusterStatus {
139139
return &c.Status
140140
},
141-
RestoreField: restorev1alpha8ClusterStatus,
142-
},
141+
restorev1alpha8ClusterStatus,
142+
),
143143
}
144144

145145
func (r *OpenStackCluster) ConvertTo(dstRaw ctrlconversion.Hub) error {
146146
dst := dstRaw.(*infrav1.OpenStackCluster)
147147

148-
compare := &OpenStackCluster{}
149148
return conversion.ConvertAndRestore(
150-
r, dst, compare,
149+
r, dst,
151150
Convert_v1alpha6_OpenStackCluster_To_v1alpha8_OpenStackCluster, Convert_v1alpha8_OpenStackCluster_To_v1alpha6_OpenStackCluster,
152151
v1alpha6OpenStackClusterRestorer, v1alpha8OpenStackClusterRestorer,
153152
)
@@ -156,9 +155,8 @@ func (r *OpenStackCluster) ConvertTo(dstRaw ctrlconversion.Hub) error {
156155
func (r *OpenStackCluster) ConvertFrom(srcRaw ctrlconversion.Hub) error {
157156
src := srcRaw.(*infrav1.OpenStackCluster)
158157

159-
compare := &infrav1.OpenStackCluster{}
160158
return conversion.ConvertAndRestore(
161-
src, r, compare,
159+
src, r,
162160
Convert_v1alpha8_OpenStackCluster_To_v1alpha6_OpenStackCluster, Convert_v1alpha6_OpenStackCluster_To_v1alpha8_OpenStackCluster,
163161
v1alpha8OpenStackClusterRestorer, v1alpha6OpenStackClusterRestorer,
164162
)
@@ -181,39 +179,38 @@ func (r *OpenStackClusterList) ConvertFrom(srcRaw ctrlconversion.Hub) error {
181179
var _ ctrlconversion.Convertible = &OpenStackClusterTemplate{}
182180

183181
var v1alpha6OpenStackClusterTemplateRestorer = conversion.RestorerFor[*OpenStackClusterTemplate]{
184-
"spec": conversion.HashedFieldRestorer[*OpenStackClusterTemplate, OpenStackClusterSpec]{
185-
GetField: func(c *OpenStackClusterTemplate) *OpenStackClusterSpec {
182+
"spec": conversion.HashedFieldRestorer(
183+
func(c *OpenStackClusterTemplate) *OpenStackClusterSpec {
186184
return &c.Spec.Template.Spec
187185
},
188-
RestoreField: restorev1alpha6ClusterSpec,
189-
},
186+
restorev1alpha6ClusterSpec,
187+
),
190188
}
191189

192190
var v1alpha8OpenStackClusterTemplateRestorer = conversion.RestorerFor[*infrav1.OpenStackClusterTemplate]{
193-
"router": conversion.UnconditionalFieldRestorer[*infrav1.OpenStackClusterTemplate, *infrav1.RouterFilter]{
194-
GetField: func(c *infrav1.OpenStackClusterTemplate) **infrav1.RouterFilter {
191+
"router": conversion.UnconditionalFieldRestorer(
192+
func(c *infrav1.OpenStackClusterTemplate) **infrav1.RouterFilter {
195193
return &c.Spec.Template.Spec.Router
196194
},
197-
},
198-
"networkMtu": conversion.UnconditionalFieldRestorer[*infrav1.OpenStackClusterTemplate, int]{
199-
GetField: func(c *infrav1.OpenStackClusterTemplate) *int {
195+
),
196+
"networkMtu": conversion.UnconditionalFieldRestorer(
197+
func(c *infrav1.OpenStackClusterTemplate) *int {
200198
return &c.Spec.Template.Spec.NetworkMTU
201199
},
202-
},
203-
"bastion": conversion.HashedFieldRestorer[*infrav1.OpenStackClusterTemplate, *infrav1.Bastion]{
204-
GetField: func(c *infrav1.OpenStackClusterTemplate) **infrav1.Bastion {
200+
),
201+
"bastion": conversion.HashedFieldRestorer(
202+
func(c *infrav1.OpenStackClusterTemplate) **infrav1.Bastion {
205203
return &c.Spec.Template.Spec.Bastion
206204
},
207-
RestoreField: restorev1alpha8Bastion,
208-
},
205+
restorev1alpha8Bastion,
206+
),
209207
}
210208

211209
func (r *OpenStackClusterTemplate) ConvertTo(dstRaw ctrlconversion.Hub) error {
212210
dst := dstRaw.(*infrav1.OpenStackClusterTemplate)
213211

214-
compare := &OpenStackClusterTemplate{}
215212
return conversion.ConvertAndRestore(
216-
r, dst, compare,
213+
r, dst,
217214
Convert_v1alpha6_OpenStackClusterTemplate_To_v1alpha8_OpenStackClusterTemplate, Convert_v1alpha8_OpenStackClusterTemplate_To_v1alpha6_OpenStackClusterTemplate,
218215
v1alpha6OpenStackClusterTemplateRestorer, v1alpha8OpenStackClusterTemplateRestorer,
219216
)
@@ -222,9 +219,8 @@ func (r *OpenStackClusterTemplate) ConvertTo(dstRaw ctrlconversion.Hub) error {
222219
func (r *OpenStackClusterTemplate) ConvertFrom(srcRaw ctrlconversion.Hub) error {
223220
src := srcRaw.(*infrav1.OpenStackClusterTemplate)
224221

225-
compare := &infrav1.OpenStackClusterTemplate{}
226222
return conversion.ConvertAndRestore(
227-
src, r, compare,
223+
src, r,
228224
Convert_v1alpha8_OpenStackClusterTemplate_To_v1alpha6_OpenStackClusterTemplate, Convert_v1alpha6_OpenStackClusterTemplate_To_v1alpha8_OpenStackClusterTemplate,
229225
v1alpha8OpenStackClusterTemplateRestorer, v1alpha6OpenStackClusterTemplateRestorer,
230226
)
@@ -233,11 +229,12 @@ func (r *OpenStackClusterTemplate) ConvertFrom(srcRaw ctrlconversion.Hub) error
233229
var _ ctrlconversion.Convertible = &OpenStackMachine{}
234230

235231
var v1alpha6OpenStackMachineRestorer = conversion.RestorerFor[*OpenStackMachine]{
236-
"spec": conversion.HashedFieldRestorer[*OpenStackMachine, OpenStackMachineSpec]{
237-
GetField: func(c *OpenStackMachine) *OpenStackMachineSpec {
232+
"spec": conversion.HashedFieldRestorer(
233+
func(c *OpenStackMachine) *OpenStackMachineSpec {
238234
return &c.Spec
239235
},
240-
FilterField: func(s *OpenStackMachineSpec) *OpenStackMachineSpec {
236+
restorev1alpha6MachineSpec,
237+
conversion.HashedFilterField[*OpenStackMachine, OpenStackMachineSpec](func(s *OpenStackMachineSpec) *OpenStackMachineSpec {
241238
// Despite being spec fields, ProviderID and InstanceID
242239
// are both set by the machine controller. If these are
243240
// the only changes to the spec, we still want to
@@ -249,26 +246,24 @@ var v1alpha6OpenStackMachineRestorer = conversion.RestorerFor[*OpenStackMachine]
249246
return &f
250247
}
251248
return s
252-
},
253-
RestoreField: restorev1alpha6MachineSpec,
254-
},
249+
}),
250+
),
255251
}
256252

257253
var v1alpha8OpenStackMachineRestorer = conversion.RestorerFor[*infrav1.OpenStackMachine]{
258-
"spec": conversion.HashedFieldRestorer[*infrav1.OpenStackMachine, infrav1.OpenStackMachineSpec]{
259-
GetField: func(c *infrav1.OpenStackMachine) *infrav1.OpenStackMachineSpec {
254+
"spec": conversion.HashedFieldRestorer(
255+
func(c *infrav1.OpenStackMachine) *infrav1.OpenStackMachineSpec {
260256
return &c.Spec
261257
},
262-
RestoreField: restorev1alpha8MachineSpec,
263-
},
258+
restorev1alpha8MachineSpec,
259+
),
264260
}
265261

266262
func (r *OpenStackMachine) ConvertTo(dstRaw ctrlconversion.Hub) error {
267263
dst := dstRaw.(*infrav1.OpenStackMachine)
268264

269-
compare := &OpenStackMachine{}
270265
return conversion.ConvertAndRestore(
271-
r, dst, compare,
266+
r, dst,
272267
Convert_v1alpha6_OpenStackMachine_To_v1alpha8_OpenStackMachine, Convert_v1alpha8_OpenStackMachine_To_v1alpha6_OpenStackMachine,
273268
v1alpha6OpenStackMachineRestorer, v1alpha8OpenStackMachineRestorer,
274269
)
@@ -277,9 +272,8 @@ func (r *OpenStackMachine) ConvertTo(dstRaw ctrlconversion.Hub) error {
277272
func (r *OpenStackMachine) ConvertFrom(srcRaw ctrlconversion.Hub) error {
278273
src := srcRaw.(*infrav1.OpenStackMachine)
279274

280-
compare := &infrav1.OpenStackMachine{}
281275
return conversion.ConvertAndRestore(
282-
src, r, compare,
276+
src, r,
283277
Convert_v1alpha8_OpenStackMachine_To_v1alpha6_OpenStackMachine, Convert_v1alpha6_OpenStackMachine_To_v1alpha8_OpenStackMachine,
284278
v1alpha8OpenStackMachineRestorer, v1alpha6OpenStackMachineRestorer,
285279
)
@@ -300,29 +294,28 @@ func (r *OpenStackMachineList) ConvertFrom(srcRaw ctrlconversion.Hub) error {
300294
var _ ctrlconversion.Convertible = &OpenStackMachineTemplate{}
301295

302296
var v1alpha6OpenStackMachineTemplateRestorer = conversion.RestorerFor[*OpenStackMachineTemplate]{
303-
"spec": conversion.HashedFieldRestorer[*OpenStackMachineTemplate, OpenStackMachineSpec]{
304-
GetField: func(c *OpenStackMachineTemplate) *OpenStackMachineSpec {
297+
"spec": conversion.HashedFieldRestorer(
298+
func(c *OpenStackMachineTemplate) *OpenStackMachineSpec {
305299
return &c.Spec.Template.Spec
306300
},
307-
RestoreField: restorev1alpha6MachineSpec,
308-
},
301+
restorev1alpha6MachineSpec,
302+
),
309303
}
310304

311305
var v1alpha8OpenStackMachineTemplateRestorer = conversion.RestorerFor[*infrav1.OpenStackMachineTemplate]{
312-
"spec": conversion.HashedFieldRestorer[*infrav1.OpenStackMachineTemplate, infrav1.OpenStackMachineSpec]{
313-
GetField: func(c *infrav1.OpenStackMachineTemplate) *infrav1.OpenStackMachineSpec {
306+
"spec": conversion.HashedFieldRestorer(
307+
func(c *infrav1.OpenStackMachineTemplate) *infrav1.OpenStackMachineSpec {
314308
return &c.Spec.Template.Spec
315309
},
316-
RestoreField: restorev1alpha8MachineSpec,
317-
},
310+
restorev1alpha8MachineSpec,
311+
),
318312
}
319313

320314
func (r *OpenStackMachineTemplate) ConvertTo(dstRaw ctrlconversion.Hub) error {
321315
dst := dstRaw.(*infrav1.OpenStackMachineTemplate)
322316

323-
compare := &OpenStackMachineTemplate{}
324317
return conversion.ConvertAndRestore(
325-
r, dst, compare,
318+
r, dst,
326319
Convert_v1alpha6_OpenStackMachineTemplate_To_v1alpha8_OpenStackMachineTemplate, Convert_v1alpha8_OpenStackMachineTemplate_To_v1alpha6_OpenStackMachineTemplate,
327320
v1alpha6OpenStackMachineTemplateRestorer, v1alpha8OpenStackMachineTemplateRestorer,
328321
)
@@ -331,9 +324,8 @@ func (r *OpenStackMachineTemplate) ConvertTo(dstRaw ctrlconversion.Hub) error {
331324
func (r *OpenStackMachineTemplate) ConvertFrom(srcRaw ctrlconversion.Hub) error {
332325
src := srcRaw.(*infrav1.OpenStackMachineTemplate)
333326

334-
compare := &infrav1.OpenStackMachineTemplate{}
335327
return conversion.ConvertAndRestore(
336-
src, r, compare,
328+
src, r,
337329
Convert_v1alpha8_OpenStackMachineTemplate_To_v1alpha6_OpenStackMachineTemplate, Convert_v1alpha6_OpenStackMachineTemplate_To_v1alpha8_OpenStackMachineTemplate,
338330
v1alpha8OpenStackMachineTemplateRestorer, v1alpha6OpenStackMachineTemplateRestorer,
339331
)

api/v1alpha7/conversion.go

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,8 @@ var v1alpha8OpenStackClusterRestorer = conversion.RestorerFor[*infrav1.OpenStack
3232
func (r *OpenStackCluster) ConvertTo(dstRaw ctrlconversion.Hub) error {
3333
dst := dstRaw.(*infrav1.OpenStackCluster)
3434

35-
compare := &OpenStackCluster{}
3635
return conversion.ConvertAndRestore(
37-
r, dst, compare,
36+
r, dst,
3837
Convert_v1alpha7_OpenStackCluster_To_v1alpha8_OpenStackCluster, Convert_v1alpha8_OpenStackCluster_To_v1alpha7_OpenStackCluster,
3938
v1alpha7OpenStackClusterRestorer, v1alpha8OpenStackClusterRestorer,
4039
)
@@ -43,9 +42,8 @@ func (r *OpenStackCluster) ConvertTo(dstRaw ctrlconversion.Hub) error {
4342
func (r *OpenStackCluster) ConvertFrom(srcRaw ctrlconversion.Hub) error {
4443
src := srcRaw.(*infrav1.OpenStackCluster)
4544

46-
compare := &infrav1.OpenStackCluster{}
4745
return conversion.ConvertAndRestore(
48-
src, r, compare,
46+
src, r,
4947
Convert_v1alpha8_OpenStackCluster_To_v1alpha7_OpenStackCluster, Convert_v1alpha7_OpenStackCluster_To_v1alpha8_OpenStackCluster,
5048
v1alpha8OpenStackClusterRestorer, v1alpha7OpenStackClusterRestorer,
5149
)
@@ -74,9 +72,8 @@ var v1alpha8OpenStackClusterTemplateRestorer = conversion.RestorerFor[*infrav1.O
7472
func (r *OpenStackClusterTemplate) ConvertTo(dstRaw ctrlconversion.Hub) error {
7573
dst := dstRaw.(*infrav1.OpenStackClusterTemplate)
7674

77-
compare := &OpenStackClusterTemplate{}
7875
return conversion.ConvertAndRestore(
79-
r, dst, compare,
76+
r, dst,
8077
Convert_v1alpha7_OpenStackClusterTemplate_To_v1alpha8_OpenStackClusterTemplate, Convert_v1alpha8_OpenStackClusterTemplate_To_v1alpha7_OpenStackClusterTemplate,
8178
v1alpha7OpenStackClusterTemplateRestorer, v1alpha8OpenStackClusterTemplateRestorer,
8279
)
@@ -85,9 +82,8 @@ func (r *OpenStackClusterTemplate) ConvertTo(dstRaw ctrlconversion.Hub) error {
8582
func (r *OpenStackClusterTemplate) ConvertFrom(srcRaw ctrlconversion.Hub) error {
8683
src := srcRaw.(*infrav1.OpenStackClusterTemplate)
8784

88-
compare := &infrav1.OpenStackClusterTemplate{}
8985
return conversion.ConvertAndRestore(
90-
src, r, compare,
86+
src, r,
9187
Convert_v1alpha8_OpenStackClusterTemplate_To_v1alpha7_OpenStackClusterTemplate, Convert_v1alpha7_OpenStackClusterTemplate_To_v1alpha8_OpenStackClusterTemplate,
9288
v1alpha8OpenStackClusterTemplateRestorer, v1alpha7OpenStackClusterTemplateRestorer,
9389
)
@@ -102,9 +98,8 @@ var v1alpha8OpenStackMachineRestorer = conversion.RestorerFor[*infrav1.OpenStack
10298
func (r *OpenStackMachine) ConvertTo(dstRaw ctrlconversion.Hub) error {
10399
dst := dstRaw.(*infrav1.OpenStackMachine)
104100

105-
compare := &OpenStackMachine{}
106101
return conversion.ConvertAndRestore(
107-
r, dst, compare,
102+
r, dst,
108103
Convert_v1alpha7_OpenStackMachine_To_v1alpha8_OpenStackMachine, Convert_v1alpha8_OpenStackMachine_To_v1alpha7_OpenStackMachine,
109104
v1alpha7OpenStackMachineRestorer, v1alpha8OpenStackMachineRestorer,
110105
)
@@ -113,9 +108,8 @@ func (r *OpenStackMachine) ConvertTo(dstRaw ctrlconversion.Hub) error {
113108
func (r *OpenStackMachine) ConvertFrom(srcRaw ctrlconversion.Hub) error {
114109
src := srcRaw.(*infrav1.OpenStackMachine)
115110

116-
compare := &infrav1.OpenStackMachine{}
117111
return conversion.ConvertAndRestore(
118-
src, r, compare,
112+
src, r,
119113
Convert_v1alpha8_OpenStackMachine_To_v1alpha7_OpenStackMachine, Convert_v1alpha7_OpenStackMachine_To_v1alpha8_OpenStackMachine,
120114
v1alpha8OpenStackMachineRestorer, v1alpha7OpenStackMachineRestorer,
121115
)
@@ -142,9 +136,8 @@ var v1alpha8OpenStackMachineTemplateRestorer = conversion.RestorerFor[*infrav1.O
142136
func (r *OpenStackMachineTemplate) ConvertTo(dstRaw ctrlconversion.Hub) error {
143137
dst := dstRaw.(*infrav1.OpenStackMachineTemplate)
144138

145-
compare := &OpenStackMachineTemplate{}
146139
return conversion.ConvertAndRestore(
147-
r, dst, compare,
140+
r, dst,
148141
Convert_v1alpha7_OpenStackMachineTemplate_To_v1alpha8_OpenStackMachineTemplate, Convert_v1alpha8_OpenStackMachineTemplate_To_v1alpha7_OpenStackMachineTemplate,
149142
v1alpha7OpenStackMachineTemplateRestorer, v1alpha8OpenStackMachineTemplateRestorer,
150143
)
@@ -153,9 +146,8 @@ func (r *OpenStackMachineTemplate) ConvertTo(dstRaw ctrlconversion.Hub) error {
153146
func (r *OpenStackMachineTemplate) ConvertFrom(srcRaw ctrlconversion.Hub) error {
154147
src := srcRaw.(*infrav1.OpenStackMachineTemplate)
155148

156-
compare := &infrav1.OpenStackMachineTemplate{}
157149
return conversion.ConvertAndRestore(
158-
src, r, compare,
150+
src, r,
159151
Convert_v1alpha8_OpenStackMachineTemplate_To_v1alpha7_OpenStackMachineTemplate, Convert_v1alpha7_OpenStackMachineTemplate_To_v1alpha8_OpenStackMachineTemplate,
160152
v1alpha8OpenStackMachineTemplateRestorer, v1alpha7OpenStackMachineTemplateRestorer,
161153
)

0 commit comments

Comments
 (0)