code: func (pm *VolumePluginMgr) FindAttachablePluginBySpec(spec *Spec) (AttachableVolumePlugin, error) {
  	volumePlugin, err := pm.FindPluginBySpec(spec)
  	if err != nil {
  		return nil, err
  	}
  	if attachableVolumePlugin, ok := volumePlugin.(AttachableVolumePlugin); ok {
  		if canAttach, err := attachableVolumePlugin.CanAttach(spec); err != nil {
  			return nil, err
  		} else if canAttach {
  			return attachableVolumePlugin, nil
  		}
  	}
  	return nil, nil
  }
docs: // FindAttachablePluginBySpec fetches a persistent volume plugin by spec.
  // Unlike the other "FindPlugin" methods, this does not return error if no
  // plugin is found.  All volumes require a mounter and unmounter, but not
  // every volume will have an attacher/detacher.