Skip to content

Commit

Permalink
Fix null pointer exception while listing storage classes (#13375)
Browse files Browse the repository at this point in the history
Signed-off-by: Waleed Malik <ahmedwaleedmalik@gmail.com>
Co-authored-by: Waleed Malik <ahmedwaleedmalik@gmail.com>
  • Loading branch information
kubermatic-bot and ahmedwaleedmalik committed May 2, 2024
1 parent 5dfeec6 commit 70ae810
Showing 1 changed file with 13 additions and 20 deletions.
33 changes: 13 additions & 20 deletions pkg/controller/seed-controller-manager/addon/addon_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -812,10 +812,8 @@ func (r *Reconciler) checkCSIAddonInUse(ctx context.Context, log *zap.SugaredLog
}

// Get CSI drivers created by the csi addon
if err := userClusterClient.List(ctx, csiDriverList, csiDriverListOption); apierrors.IsNotFound(err) {
return corev1.ConditionUnknown, ""
} else if err != nil {
return corev1.ConditionUnknown, fmt.Sprintf("failed to list csi drivers with %v label : %v", csiAddonStorageClassLabel, err)
if err := userClusterClient.List(ctx, csiDriverList, csiDriverListOption); err != nil {
return corev1.ConditionUnknown, fmt.Sprintf("failed to list csi drivers with %v label: %v", csiAddonStorageClassLabel, err)
}
// map to hold csi drivers to storage classes list
csiToSC := make(map[string][]string)
Expand All @@ -828,12 +826,12 @@ func (r *Reconciler) checkCSIAddonInUse(ctx context.Context, log *zap.SugaredLog
// get all the storage classes that are using the csi driver created by csi addon as provisioner
storageCLassList, err := r.storageClassesForProvisioner(ctx, cluster, csiDriverList.Items[i].Name)
if err != nil {
return corev1.ConditionUnknown, fmt.Sprintf("failed to get the list of storage classes using %v provisioner : %v", csiDriverList.Items[i].Name, err)
return corev1.ConditionUnknown, fmt.Sprintf("failed to get the list of storage classes using %v provisioner: %v", csiDriverList.Items[i].Name, err)
}
for j := 0; j < len(storageCLassList); j++ {
pvcList, err := r.pvcsForStorageClass(ctx, cluster, storageCLassList[j])
if err != nil {
return corev1.ConditionUnknown, fmt.Sprintf("failed to get the list of PVCs referring the %v storage class : %v", storageCLassList[j], err)
return corev1.ConditionUnknown, fmt.Sprintf("failed to get the list of PVCs referring the %v storage class: %v", storageCLassList[j], err)
}
if len(pvcList) > 0 {
csiToSC[csiDriverList.Items[i].Name] = append(csiToSC[csiDriverList.Items[i].Name], storageCLassList[j])
Expand Down Expand Up @@ -867,10 +865,8 @@ func (r *Reconciler) storageClassesForProvisioner(ctx context.Context, cluster *
return storageCLassesForProvisioner, fmt.Errorf("failed to get client for usercluster: %w", err)
}
storageCLassList := &storagev1.StorageClassList{}
if err := cl.List(ctx, storageCLassList); apierrors.IsNotFound(err) {
return storageCLassesForProvisioner, nil
} else if err != nil {
return storageCLassesForProvisioner, fmt.Errorf("failed to get storage classes using provisioner %v : %w", provisionerName, err)
if err := cl.List(ctx, storageCLassList); err != nil {
return storageCLassesForProvisioner, fmt.Errorf("failed to get storage classes using provisioner %v: %w", provisionerName, err)
}
for i := 0; i < len(storageCLassList.Items); i++ {
if storageCLassList.Items[i].Provisioner == provisionerName {
Expand All @@ -887,14 +883,13 @@ func (r *Reconciler) pvcsForStorageClass(ctx context.Context, cluster *kubermati
return pvcsForStorageClass, fmt.Errorf("failed to get client for usercluster: %w", err)
}
pvcList := &corev1.PersistentVolumeClaimList{}
if err := cl.List(ctx, pvcList); apierrors.IsNotFound(err) {
return pvcsForStorageClass, nil
} else if err != nil {
return pvcsForStorageClass, fmt.Errorf("failed to get the list of PVCs referring the %v storage class : %w", storageClassName, err)
if err := cl.List(ctx, pvcList); err != nil {
return pvcsForStorageClass, fmt.Errorf("failed to get the list of PVCs referring the %v storage class: %w", storageClassName, err)
}
for i := 0; i < len(pvcList.Items); i++ {
if *pvcList.Items[i].Spec.StorageClassName == storageClassName {
pvcsForStorageClass = append(pvcsForStorageClass, pvcList.Items[i].Name)

for _, item := range pvcList.Items {
if item.Spec.StorageClassName != nil && *item.Spec.StorageClassName == storageClassName {
pvcsForStorageClass = append(pvcsForStorageClass, item.Name)
}
}
return pvcsForStorageClass, nil
Expand All @@ -907,9 +902,7 @@ func (r *Reconciler) pvsForProvisioner(ctx context.Context, cluster *kubermaticv
return pvsForProvisioner, fmt.Errorf("failed to get client for usercluster: %w", err)
}
pvList := &corev1.PersistentVolumeList{}
if err := cl.List(ctx, pvList); apierrors.IsNotFound(err) {
return pvsForProvisioner, nil
} else if err != nil {
if err := cl.List(ctx, pvList); err != nil {
return pvsForProvisioner, fmt.Errorf("failed to get the list of PVs having %v as provisioner : %w", provisionerName, err)
}
for i := 0; i < len(pvList.Items); i++ {
Expand Down

0 comments on commit 70ae810

Please sign in to comment.