Skip to content

Commit bedda68

Browse files
committed
Add tests, nil checks
1 parent 1eac035 commit bedda68

File tree

3 files changed

+74
-5
lines changed

3 files changed

+74
-5
lines changed

controlplane/kubeadm/controllers/upgrade.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ func (r *KubeadmControlPlaneReconciler) upgradeControlPlane(
4848
}
4949

5050
parsedVersion, err := semver.ParseTolerant(kcp.Spec.Version)
51-
parsedImageRepository := kcp.Spec.KubeadmConfigSpec.ClusterConfiguration.ImageRepository
5251
if err != nil {
5352
return ctrl.Result{}, errors.Wrapf(err, "failed to parse kubernetes version %q", kcp.Spec.Version)
5453
}
@@ -65,8 +64,11 @@ func (r *KubeadmControlPlaneReconciler) upgradeControlPlane(
6564
return ctrl.Result{}, errors.Wrap(err, "failed to update the kubernetes version in the kubeadm config map")
6665
}
6766

68-
if err := workloadCluster.UpdateImageRepositoryInKubeadmConfigMap(ctx, parsedImageRepository); err != nil {
69-
return ctrl.Result{}, errors.Wrap(err, "failed to update the kubernetes version in the kubeadm config map")
67+
if kcp.Spec.KubeadmConfigSpec.ClusterConfiguration != nil {
68+
imageRepository := kcp.Spec.KubeadmConfigSpec.ClusterConfiguration.ImageRepository
69+
if err := workloadCluster.UpdateImageRepositoryInKubeadmConfigMap(ctx, imageRepository); err != nil {
70+
return ctrl.Result{}, errors.Wrap(err, "failed to update the image repository in the kubeadm config map")
71+
}
7072
}
7173

7274
if kcp.Spec.KubeadmConfigSpec.ClusterConfiguration != nil && kcp.Spec.KubeadmConfigSpec.ClusterConfiguration.Etcd.Local != nil {

controlplane/kubeadm/internal/kubeadm_config_map.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,11 @@ func (k *kubeadmConfig) UpdateKubernetesVersion(version string) error {
9090
return nil
9191
}
9292

93-
// UpdateImageRepository changes the kubernetes version found in the kubeadm config map
93+
// UpdateImageRepository changes the image repository found in the kubeadm config map
9494
func (k *kubeadmConfig) UpdateImageRepository(imageRepository string) error {
95+
if imageRepository == "" {
96+
return nil
97+
}
9598
data, ok := k.ConfigMap.Data[clusterConfigurationKey]
9699
if !ok {
97100
return errors.Errorf("unable to find %q key in kubeadm ConfigMap", clusterConfigurationKey)
@@ -101,7 +104,7 @@ func (k *kubeadmConfig) UpdateImageRepository(imageRepository string) error {
101104
return errors.Wrapf(err, "unable to decode kubeadm ConfigMap's %q to Unstructured object", clusterConfigurationKey)
102105
}
103106
if err := unstructured.SetNestedField(configuration.UnstructuredContent(), imageRepository, configImageRepositoryKey); err != nil {
104-
return errors.Wrapf(err, "unable to update %q on kubeadm ConfigMap's %q", configVersionKey, clusterConfigurationKey)
107+
return errors.Wrapf(err, "unable to update %q on kubeadm ConfigMap's %q", imageRepository, clusterConfigurationKey)
105108
}
106109
updated, err := yaml.Marshal(configuration)
107110
if err != nil {

controlplane/kubeadm/internal/kubeadm_config_map_test.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,3 +307,67 @@ scheduler: {}`,
307307
})
308308
}
309309
}
310+
311+
func TestUpdateImageRepository(t *testing.T) {
312+
313+
tests := []struct {
314+
name string
315+
clusterConfigurationValue string
316+
imageRepository string
317+
expected string
318+
expectErr error
319+
}{
320+
{
321+
name: "it should set the values, if they were empty",
322+
clusterConfigurationValue: `
323+
apiVersion: kubeadm.k8s.io/v1beta2
324+
kind: ClusterConfiguration
325+
imageRepository: k8s.gcr.io
326+
`,
327+
imageRepository: "example.com/k8s",
328+
expected: "example.com/k8s",
329+
},
330+
{
331+
name: "it shouldn't write empty strings",
332+
clusterConfigurationValue: `
333+
apiVersion: kubeadm.k8s.io/v1beta2
334+
kind: ClusterConfiguration
335+
imageRepository: k8s.gcr.io
336+
`,
337+
imageRepository: "",
338+
expected: "k8s.gcr.io",
339+
},
340+
{
341+
name: "it should error if it's not a valid k8s object",
342+
clusterConfigurationValue: `
343+
imageRepository: "cool"
344+
`,
345+
imageRepository: "example.com/k8s",
346+
expectErr: errors.New("Object 'Kind' is missing"),
347+
},
348+
}
349+
350+
for _, test := range tests {
351+
t.Run(test.name, func(t *testing.T) {
352+
g := NewWithT(t)
353+
354+
kconfig := &kubeadmConfig{
355+
ConfigMap: &corev1.ConfigMap{
356+
Data: map[string]string{
357+
clusterConfigurationKey: test.clusterConfigurationValue,
358+
},
359+
},
360+
}
361+
362+
err := kconfig.UpdateImageRepository(test.imageRepository)
363+
if test.expectErr == nil {
364+
g.Expect(err).ToNot(HaveOccurred())
365+
} else {
366+
g.Expect(err).To(HaveOccurred())
367+
g.Expect(err.Error()).To(ContainSubstring(test.expectErr.Error()))
368+
}
369+
370+
g.Expect(kconfig.ConfigMap.Data[clusterConfigurationKey]).To(ContainSubstring(test.expected))
371+
})
372+
}
373+
}

0 commit comments

Comments
 (0)