Skip to content

Commit e4c46dd

Browse files
authored
Merge pull request #2013 from vincepri/conversion-improvements
🏃Improve conversion webhook: add tests, fix preserve logic, remove inline nolint
2 parents f26760d + d2eb510 commit e4c46dd

File tree

4 files changed

+136
-35
lines changed

4 files changed

+136
-35
lines changed

.golangci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ run:
2424
skip-files:
2525
- "zz_generated.*\\.go$"
2626
- crd_manifests.go
27+
- ".*conversion.*\\.go$"
2728
skip-dirs:
2829
- third_party

api/v1alpha2/conversion.go

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828

2929
func (src *Cluster) ConvertTo(dstRaw conversion.Hub) error {
3030
dst := dstRaw.(*v1alpha3.Cluster)
31-
3231
if err := Convert_v1alpha2_Cluster_To_v1alpha3_Cluster(src, dst, nil); err != nil {
3332
return err
3433
}
@@ -43,10 +42,8 @@ func (src *Cluster) ConvertTo(dstRaw conversion.Hub) error {
4342
return nil
4443
}
4544

46-
// nolint
4745
func (dst *Cluster) ConvertFrom(srcRaw conversion.Hub) error {
4846
src := srcRaw.(*v1alpha3.Cluster)
49-
5047
if err := Convert_v1alpha3_Cluster_To_v1alpha2_Cluster(src, dst, nil); err != nil {
5148
return err
5249
}
@@ -70,7 +67,6 @@ func (src *ClusterList) ConvertTo(dstRaw conversion.Hub) error {
7067
return Convert_v1alpha2_ClusterList_To_v1alpha3_ClusterList(src, dst, nil)
7168
}
7269

73-
// nolint
7470
func (dst *ClusterList) ConvertFrom(srcRaw conversion.Hub) error {
7571
src := srcRaw.(*v1alpha3.ClusterList)
7672

@@ -79,30 +75,44 @@ func (dst *ClusterList) ConvertFrom(srcRaw conversion.Hub) error {
7975

8076
func (src *Machine) ConvertTo(dstRaw conversion.Hub) error {
8177
dst := dstRaw.(*v1alpha3.Machine)
78+
if err := Convert_v1alpha2_Machine_To_v1alpha3_Machine(src, dst, nil); err != nil {
79+
return err
80+
}
81+
82+
// Manually convert ClusterName from label, if any.
83+
if name, ok := src.Labels[MachineClusterLabelName]; ok {
84+
dst.Spec.ClusterName = name
85+
}
8286

8387
// Manually restore data.
8488
restored := &v1alpha3.Machine{}
85-
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil {
89+
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
8690
return err
87-
} else if ok {
88-
if restored.Spec.Bootstrap.DataSecretName != nil {
89-
dst.Spec.Bootstrap.DataSecretName = restored.Spec.Bootstrap.DataSecretName
90-
}
9191
}
9292

93-
return Convert_v1alpha2_Machine_To_v1alpha3_Machine(src, dst, nil)
93+
if restored.Spec.Bootstrap.DataSecretName != nil {
94+
dst.Spec.Bootstrap.DataSecretName = restored.Spec.Bootstrap.DataSecretName
95+
}
96+
97+
if restored.Spec.ClusterName != "" {
98+
dst.Spec.ClusterName = restored.Spec.ClusterName
99+
}
100+
101+
return nil
94102
}
95103

96-
// nolint
97104
func (dst *Machine) ConvertFrom(srcRaw conversion.Hub) error {
98105
src := srcRaw.(*v1alpha3.Machine)
106+
if err := Convert_v1alpha3_Machine_To_v1alpha2_Machine(src, dst, nil); err != nil {
107+
return err
108+
}
99109

100110
// Preserve Hub data on down-conversion.
101111
if err := utilconversion.MarshalData(src, dst); err != nil {
102112
return err
103113
}
104114

105-
return Convert_v1alpha3_Machine_To_v1alpha2_Machine(src, dst, nil)
115+
return nil
106116
}
107117

108118
func (src *MachineList) ConvertTo(dstRaw conversion.Hub) error {
@@ -111,7 +121,6 @@ func (src *MachineList) ConvertTo(dstRaw conversion.Hub) error {
111121
return Convert_v1alpha2_MachineList_To_v1alpha3_MachineList(src, dst, nil)
112122
}
113123

114-
// nolint
115124
func (dst *MachineList) ConvertFrom(srcRaw conversion.Hub) error {
116125
src := srcRaw.(*v1alpha3.MachineList)
117126

@@ -124,7 +133,6 @@ func (src *MachineSet) ConvertTo(dstRaw conversion.Hub) error {
124133
return Convert_v1alpha2_MachineSet_To_v1alpha3_MachineSet(src, dst, nil)
125134
}
126135

127-
// nolint
128136
func (dst *MachineSet) ConvertFrom(srcRaw conversion.Hub) error {
129137
src := srcRaw.(*v1alpha3.MachineSet)
130138

@@ -137,7 +145,6 @@ func (src *MachineSetList) ConvertTo(dstRaw conversion.Hub) error {
137145
return Convert_v1alpha2_MachineSetList_To_v1alpha3_MachineSetList(src, dst, nil)
138146
}
139147

140-
// nolint
141148
func (dst *MachineSetList) ConvertFrom(srcRaw conversion.Hub) error {
142149
src := srcRaw.(*v1alpha3.MachineSetList)
143150

@@ -150,7 +157,6 @@ func (src *MachineDeployment) ConvertTo(dstRaw conversion.Hub) error {
150157
return Convert_v1alpha2_MachineDeployment_To_v1alpha3_MachineDeployment(src, dst, nil)
151158
}
152159

153-
// nolint
154160
func (dst *MachineDeployment) ConvertFrom(srcRaw conversion.Hub) error {
155161
src := srcRaw.(*v1alpha3.MachineDeployment)
156162

@@ -163,7 +169,6 @@ func (src *MachineDeploymentList) ConvertTo(dstRaw conversion.Hub) error {
163169
return Convert_v1alpha2_MachineDeploymentList_To_v1alpha3_MachineDeploymentList(src, dst, nil)
164170
}
165171

166-
// nolint
167172
func (dst *MachineDeploymentList) ConvertFrom(srcRaw conversion.Hub) error {
168173
src := srcRaw.(*v1alpha3.MachineDeploymentList)
169174

@@ -284,7 +289,7 @@ func Convert_v1alpha3_MachineSetSpec_To_v1alpha2_MachineSetSpec(in *v1alpha3.Mac
284289
}
285290

286291
func Convert_v1alpha3_MachineSpec_To_v1alpha2_MachineSpec(in *v1alpha3.MachineSpec, out *MachineSpec, s apiconversion.Scope) error {
287-
return errors.New("cannot recover removed MachineSpec Cluster Name")
292+
return autoConvert_v1alpha3_MachineSpec_To_v1alpha2_MachineSpec(in, out, s)
288293
}
289294

290295
func Convert_v1alpha3_Bootstrap_To_v1alpha2_Bootstrap(in *v1alpha3.Bootstrap, out *Bootstrap, s apiconversion.Scope) error {

api/v1alpha2/conversion_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
Copyright 2019 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package v1alpha2
18+
19+
import (
20+
"testing"
21+
22+
. "github.com/onsi/gomega"
23+
"k8s.io/utils/pointer"
24+
"sigs.k8s.io/cluster-api/api/v1alpha3"
25+
utilconversion "sigs.k8s.io/cluster-api/util/conversion"
26+
)
27+
28+
func TestConvertCluster(t *testing.T) {
29+
g := NewWithT(t)
30+
31+
t.Run("to hub", func(t *testing.T) {
32+
t.Run("should convert the first value in Status.APIEndpoints to Spec.ControlPlaneEndpoint", func(t *testing.T) {
33+
src := &Cluster{
34+
Status: ClusterStatus{
35+
APIEndpoints: []APIEndpoint{
36+
{
37+
Host: "example.com",
38+
Port: 6443,
39+
},
40+
},
41+
},
42+
}
43+
dst := &v1alpha3.Cluster{}
44+
45+
g.Expect(src.ConvertTo(dst)).To(Succeed())
46+
g.Expect(dst.Spec.ControlPlaneEndpoint.Host).To(Equal("example.com"))
47+
g.Expect(dst.Spec.ControlPlaneEndpoint.Port).To(BeEquivalentTo(6443))
48+
})
49+
})
50+
51+
t.Run("from hub", func(t *testing.T) {
52+
t.Run("should convert Spec.ControlPlaneEndpoint to Status.APIEndpoints[0]", func(t *testing.T) {
53+
src := &v1alpha3.Cluster{
54+
Spec: v1alpha3.ClusterSpec{
55+
ControlPlaneEndpoint: v1alpha3.APIEndpoint{
56+
Host: "example.com",
57+
Port: 6443,
58+
},
59+
},
60+
}
61+
dst := &Cluster{}
62+
63+
g.Expect(dst.ConvertFrom(src)).To(Succeed())
64+
g.Expect(dst.Status.APIEndpoints[0].Host).To(Equal("example.com"))
65+
g.Expect(dst.Status.APIEndpoints[0].Port).To(BeEquivalentTo(6443))
66+
})
67+
})
68+
}
69+
70+
func TestConvertMachine(t *testing.T) {
71+
g := NewWithT(t)
72+
73+
t.Run("from hub", func(t *testing.T) {
74+
t.Run("preserves Spec.Bootstrap.DataSecretName", func(t *testing.T) {
75+
src := &v1alpha3.Machine{
76+
Spec: v1alpha3.MachineSpec{
77+
Bootstrap: v1alpha3.Bootstrap{
78+
DataSecretName: pointer.StringPtr("secret-data"),
79+
},
80+
},
81+
}
82+
dst := &Machine{}
83+
84+
g.Expect(dst.ConvertFrom(src)).To(Succeed())
85+
g.Expect(dst.GetAnnotations()[utilconversion.DataAnnotation]).To(ContainSubstring("secret-data"))
86+
})
87+
})
88+
89+
}

bootstrap/kubeadm/api/v1alpha2/conversion.go

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,72 +24,78 @@ import (
2424
)
2525

2626
// ConvertTo converts this KubeadmConfig to the Hub version (v1alpha3).
27-
func (src *KubeadmConfig) ConvertTo(dstRaw conversion.Hub) error { // nolint
27+
func (src *KubeadmConfig) ConvertTo(dstRaw conversion.Hub) error {
2828
dst := dstRaw.(*kubeadmbootstrapv1alpha3.KubeadmConfig)
29+
if err := Convert_v1alpha2_KubeadmConfig_To_v1alpha3_KubeadmConfig(src, dst, nil); err != nil {
30+
return err
31+
}
2932

3033
// Manually restore data.
3134
restored := &kubeadmbootstrapv1alpha3.KubeadmConfig{}
32-
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil {
35+
if ok, err := utilconversion.UnmarshalData(src, restored); err != nil || !ok {
3336
return err
34-
} else if ok {
35-
if restored.Status.DataSecretName != nil {
36-
dst.Status.DataSecretName = restored.Status.DataSecretName
37-
}
3837
}
3938

40-
return Convert_v1alpha2_KubeadmConfig_To_v1alpha3_KubeadmConfig(src, dst, nil)
39+
if restored.Status.DataSecretName != nil {
40+
dst.Status.DataSecretName = restored.Status.DataSecretName
41+
}
42+
43+
return nil
4144
}
4245

4346
// ConvertFrom converts from the KubeadmConfig Hub version (v1alpha3) to this version.
44-
func (dst *KubeadmConfig) ConvertFrom(srcRaw conversion.Hub) error { // nolint
47+
func (dst *KubeadmConfig) ConvertFrom(srcRaw conversion.Hub) error {
4548
src := srcRaw.(*kubeadmbootstrapv1alpha3.KubeadmConfig)
49+
if err := Convert_v1alpha3_KubeadmConfig_To_v1alpha2_KubeadmConfig(src, dst, nil); err != nil {
50+
return nil
51+
}
4652

4753
// Preserve Hub data on down-conversion.
4854
if err := utilconversion.MarshalData(src, dst); err != nil {
4955
return err
5056
}
5157

52-
return Convert_v1alpha3_KubeadmConfig_To_v1alpha2_KubeadmConfig(src, dst, nil)
58+
return nil
5359
}
5460

5561
// ConvertTo converts this KubeadmConfigList to the Hub version (v1alpha3).
56-
func (src *KubeadmConfigList) ConvertTo(dstRaw conversion.Hub) error { // nolint
62+
func (src *KubeadmConfigList) ConvertTo(dstRaw conversion.Hub) error {
5763
dst := dstRaw.(*kubeadmbootstrapv1alpha3.KubeadmConfigList)
5864
return Convert_v1alpha2_KubeadmConfigList_To_v1alpha3_KubeadmConfigList(src, dst, nil)
5965
}
6066

6167
// ConvertFrom converts from the KubeadmConfigList Hub version (v1alpha3) to this version.
62-
func (dst *KubeadmConfigList) ConvertFrom(srcRaw conversion.Hub) error { // nolint
68+
func (dst *KubeadmConfigList) ConvertFrom(srcRaw conversion.Hub) error {
6369
src := srcRaw.(*kubeadmbootstrapv1alpha3.KubeadmConfigList)
6470
return Convert_v1alpha3_KubeadmConfigList_To_v1alpha2_KubeadmConfigList(src, dst, nil)
6571
}
6672

6773
// ConvertTo converts this KubeadmConfigTemplate to the Hub version (v1alpha3).
68-
func (src *KubeadmConfigTemplate) ConvertTo(dstRaw conversion.Hub) error { // nolint
74+
func (src *KubeadmConfigTemplate) ConvertTo(dstRaw conversion.Hub) error {
6975
dst := dstRaw.(*kubeadmbootstrapv1alpha3.KubeadmConfigTemplate)
7076
return Convert_v1alpha2_KubeadmConfigTemplate_To_v1alpha3_KubeadmConfigTemplate(src, dst, nil)
7177
}
7278

7379
// ConvertFrom converts from the KubeadmConfigTemplate Hub version (v1alpha3) to this version.
74-
func (dst *KubeadmConfigTemplate) ConvertFrom(srcRaw conversion.Hub) error { // nolint
80+
func (dst *KubeadmConfigTemplate) ConvertFrom(srcRaw conversion.Hub) error {
7581
src := srcRaw.(*kubeadmbootstrapv1alpha3.KubeadmConfigTemplate)
7682
return Convert_v1alpha3_KubeadmConfigTemplate_To_v1alpha2_KubeadmConfigTemplate(src, dst, nil)
7783
}
7884

7985
// ConvertTo converts this KubeadmConfigTemplateList to the Hub version (v1alpha3).
80-
func (src *KubeadmConfigTemplateList) ConvertTo(dstRaw conversion.Hub) error { // nolint
86+
func (src *KubeadmConfigTemplateList) ConvertTo(dstRaw conversion.Hub) error {
8187
dst := dstRaw.(*kubeadmbootstrapv1alpha3.KubeadmConfigTemplateList)
8288
return Convert_v1alpha2_KubeadmConfigTemplateList_To_v1alpha3_KubeadmConfigTemplateList(src, dst, nil)
8389
}
8490

8591
// ConvertFrom converts from the KubeadmConfigTemplateList Hub version (v1alpha3) to this version.
86-
func (dst *KubeadmConfigTemplateList) ConvertFrom(srcRaw conversion.Hub) error { // nolint
92+
func (dst *KubeadmConfigTemplateList) ConvertFrom(srcRaw conversion.Hub) error {
8793
src := srcRaw.(*kubeadmbootstrapv1alpha3.KubeadmConfigTemplateList)
8894
return Convert_v1alpha3_KubeadmConfigTemplateList_To_v1alpha2_KubeadmConfigTemplateList(src, dst, nil)
8995
}
9096

9197
// Convert_v1alpha2_KubeadmConfigStatus_To_v1alpha3_KubeadmConfigStatus converts this KubeadmConfigStatus to the Hub version (v1alpha3).
92-
func Convert_v1alpha2_KubeadmConfigStatus_To_v1alpha3_KubeadmConfigStatus(in *KubeadmConfigStatus, out *kubeadmbootstrapv1alpha3.KubeadmConfigStatus, s apiconversion.Scope) error { // nolint
98+
func Convert_v1alpha2_KubeadmConfigStatus_To_v1alpha3_KubeadmConfigStatus(in *KubeadmConfigStatus, out *kubeadmbootstrapv1alpha3.KubeadmConfigStatus, s apiconversion.Scope) error {
9399
if err := autoConvert_v1alpha2_KubeadmConfigStatus_To_v1alpha3_KubeadmConfigStatus(in, out, s); err != nil {
94100
return err
95101
}
@@ -102,7 +108,7 @@ func Convert_v1alpha2_KubeadmConfigStatus_To_v1alpha3_KubeadmConfigStatus(in *Ku
102108
}
103109

104110
// Convert_v1alpha3_KubeadmConfigStatus_To_v1alpha2_KubeadmConfigStatus converts from the Hub version (v1alpha3) of the KubeadmConfigStatus to this version.
105-
func Convert_v1alpha3_KubeadmConfigStatus_To_v1alpha2_KubeadmConfigStatus(in *kubeadmbootstrapv1alpha3.KubeadmConfigStatus, out *KubeadmConfigStatus, s apiconversion.Scope) error { // nolint
111+
func Convert_v1alpha3_KubeadmConfigStatus_To_v1alpha2_KubeadmConfigStatus(in *kubeadmbootstrapv1alpha3.KubeadmConfigStatus, out *KubeadmConfigStatus, s apiconversion.Scope) error {
106112
if err := autoConvert_v1alpha3_KubeadmConfigStatus_To_v1alpha2_KubeadmConfigStatus(in, out, s); err != nil {
107113
return err
108114
}

0 commit comments

Comments
 (0)