code: func (p *nfsProvisioner) Provision(options controller.VolumeOptions) (*v1.PersistentVolume, error) {
  	volume, err := p.createVolume(options)
  	if err != nil {
  		return nil, err
  	}
  
  	annotations := make(map[string]string)
  	annotations[annCreatedBy] = createdBy
  	annotations[annExportBlock] = volume.exportBlock
  	annotations[annExportID] = strconv.FormatUint(uint64(volume.exportID), 10)
  	annotations[annProjectBlock] = volume.projectBlock
  	annotations[annProjectID] = strconv.FormatUint(uint64(volume.projectID), 10)
  	if volume.supGroup != 0 {
  		annotations[VolumeGidAnnotationKey] = strconv.FormatUint(volume.supGroup, 10)
  	}
  	// Only use legacy mount options annotation if StorageClass.MountOptions is empty
  	if volume.mountOptions != "" && options.MountOptions == nil {
  		annotations[MountOptionAnnotation] = volume.mountOptions
  	}
  	annotations[annProvisionerID] = string(p.identity)
  
  	pv := &v1.PersistentVolume{
  		ObjectMeta: metav1.ObjectMeta{
  			Name:        options.PVName,
  			Labels:      map[string]string{},
  			Annotations: annotations,
  		},
  		Spec: v1.PersistentVolumeSpec{
  			PersistentVolumeReclaimPolicy: options.PersistentVolumeReclaimPolicy,
  			AccessModes:                   options.PVC.Spec.AccessModes,
  			Capacity: v1.ResourceList{
  				v1.ResourceName(v1.ResourceStorage): options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)],
  			},
  			PersistentVolumeSource: v1.PersistentVolumeSource{
  				NFS: &v1.NFSVolumeSource{
  					Server:   volume.server,
  					Path:     volume.path,
  					ReadOnly: false,
  				},
  			},
  			MountOptions: options.MountOptions,
  		},
  	}
  
  	return pv, nil
  }
docs: // Provision creates a volume i.e. the storage asset and returns a PV object for
  // the volume.