code: func TranslateCSIPVToInTree(pv *v1.PersistentVolume) (*v1.PersistentVolume, error) {
  	if pv == nil || pv.Spec.CSI == nil {
  		return nil, errors.New("CSI persistent volume was nil")
  	}
  	copiedPV := pv.DeepCopy()
  	for driverName, curPlugin := range inTreePlugins {
  		if copiedPV.Spec.CSI.Driver == driverName {
  			return curPlugin.TranslateCSIPVToInTree(copiedPV)
  		}
  	}
  	return nil, fmt.Errorf("could not find in-tree plugin translation logic for %s", copiedPV.Spec.CSI.Driver)
  }
docs: // TranslateCSIPVToInTree takes a PV with a CSI PersistentVolume Source and will translate
  // it to a in-tree Persistent Volume Source for the specific in-tree volume specified
  // by the `Driver` field in the CSI Source. The input PV object will not be modified.