func()

in pkg/csi/controller.go [226:253]


func (r *reconciler) updatePdVolumeType(ctx context.Context, node string, info *volumeTypeInfo) error {
	if info.VolumeType != pdVolumeType {
		return nil
	}

	if info.Size.IsZero() {
		return fmt.Errorf("no size given for PD cache on node %s", node)
	}

	var pvc corev1.PersistentVolumeClaim
	needCreate := false
	err := r.Get(ctx, types.NamespacedName{Namespace: r.namespace, Name: node}, &pvc)
	if apierrors.IsNotFound(err) {
		needCreate = true
		pvc.SetName(node)
		pvc.SetNamespace(r.namespace)
		pvc.Spec.StorageClassName = ptr.To(r.pdStorageClass)
		pvc.Spec.VolumeMode = ptr.To(corev1.PersistentVolumeBlock)
		pvc.Spec.AccessModes = []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}
		pvc.Spec.Resources.Requests = map[corev1.ResourceName]resource.Quantity{
			corev1.ResourceStorage: info.Size,
		}
	} else if err == nil && pvc.Status.Phase == corev1.ClaimBound {
		info.Disk = pvc.Spec.VolumeName
	}

	return r.updatePVCForLifecycle(ctx, &pvc, needCreate)
}