code: func (p *flexProvisioner) Provision(options controller.VolumeOptions) (*v1.PersistentVolume, error) {
  	err := p.createVolume(options)
  	if err != nil {
  		return nil, err
  	}
  
  	annotations := make(map[string]string)
  	annotations[annCreatedBy] = createdBy
  
  	annotations[annProvisionerID] = string(p.identity)
  	/*
  		The flex script for flexDriver=<vendor>/<driver> is in
  		/usr/libexec/kubernetes/kubelet-plugins/volume/exec/<vendor>~<driver>/<driver>
  	*/
  	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{
  				FlexVolume: &v1.FlexPersistentVolumeSource{
  					Driver:   p.flexDriver,
  					Options:  map[string]string{},
  					ReadOnly: false,
  				},
  			},
  		},
  	}
  
  	return pv, nil
  }
docs: // Provision creates a volume i.e. the storage asset and returns a PV object for
  // the volume.