func()

in pkg/webhook/client.go [34:65]


func (si *SidecarInjector) GetPreprovisionCSIVolume(csiDriver string, pvc *corev1.PersistentVolumeClaim) (*corev1.PersistentVolume, bool, error) {
	if csiDriver == "" {
		return nil, false, errors.New("csiDriver is empty, cannot verify storage type")
	}

	if pvc == nil {
		return nil, false, errors.New("pvc is nil, cannot get pv")
	}

	// We return a nil error because this volume is still valid.
	// A pvc can have this field missing when requesting a dynamically provisioned volume and said PV it is not yet bound.
	if pvc.Spec.VolumeName == "" {
		return nil, false, nil
	}

	// GetPV returns an error if pvc.Spec.VolumeName is not empty and the associated PV object is not found in the API server.
	pv, err := si.GetPV(pvc.Spec.VolumeName)
	if err != nil {
		return nil, false, err // no additional context needed for error.
	}

	if pv == nil {
		return nil, false, errors.New("pv is nil, cannot get storage type")
	}

	// Returns false when PV - PVC pair was created for a different csi driver or different storage type.
	if pv.Spec.CSI != nil && pv.Spec.CSI.Driver == csiDriver {
		return pv, true, nil
	}

	return pv, false, nil
}