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
}