code: func (r *hostPathProvisioner) Provision(selectedNode *v1.Node, allowedTopologies []v1.TopologySelectorTerm) (*v1.PersistentVolume, error) {
  	if util.CheckPersistentVolumeClaimModeBlock(r.options.PVC) {
  		return nil, fmt.Errorf("%s does not support block volume provisioning", r.plugin.GetPluginName())
  	}
  
  	fullpath := fmt.Sprintf("/tmp/hostpath_pv/%s", uuid.NewUUID())
  
  	capacity := r.options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)]
  	pv := &v1.PersistentVolume{
  		ObjectMeta: metav1.ObjectMeta{
  			Name: r.options.PVName,
  			Annotations: map[string]string{
  				util.VolumeDynamicallyCreatedByKey: "hostpath-dynamic-provisioner",
  			},
  		},
  		Spec: v1.PersistentVolumeSpec{
  			PersistentVolumeReclaimPolicy: r.options.PersistentVolumeReclaimPolicy,
  			AccessModes:                   r.options.PVC.Spec.AccessModes,
  			Capacity: v1.ResourceList{
  				v1.ResourceName(v1.ResourceStorage): capacity,
  			},
  			PersistentVolumeSource: v1.PersistentVolumeSource{
  				HostPath: &v1.HostPathVolumeSource{
  					Path: fullpath,
  				},
  			},
  		},
  	}
  	if len(r.options.PVC.Spec.AccessModes) == 0 {
  		pv.Spec.AccessModes = r.plugin.GetAccessModes()
  	}
  
  	return pv, os.MkdirAll(pv.Spec.HostPath.Path, 0750)
  }
docs: // Create for hostPath simply creates a local /tmp/hostpath_pv/%s directory as a new PersistentVolume.
  // This Provisioner is meant for development and testing only and WILL NOT WORK in a multi-node cluster.