code: func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) {
  	pm.mutex.Lock()
  	defer pm.mutex.Unlock()
  
  	if spec == nil {
  		return nil, fmt.Errorf("Could not find plugin because volume spec is nil")
  	}
  
  	matchedPluginNames := []string{}
  	matches := []VolumePlugin{}
  	for k, v := range pm.plugins {
  		if v.CanSupport(spec) {
  			matchedPluginNames = append(matchedPluginNames, k)
  			matches = append(matches, v)
  		}
  	}
  
  	pm.refreshProbedPlugins()
  	for _, plugin := range pm.probedPlugins {
  		if plugin.CanSupport(spec) {
  			matchedPluginNames = append(matchedPluginNames, plugin.GetPluginName())
  			matches = append(matches, plugin)
  		}
  	}
  
  	if len(matches) == 0 {
  		return nil, fmt.Errorf("no volume plugin matched")
  	}
  	if len(matches) > 1 {
  		return nil, fmt.Errorf("multiple volume plugins matched: %s", strings.Join(matchedPluginNames, ","))
  	}
  	return matches[0], nil
  }
docs: // FindPluginBySpec looks for a plugin that can support a given volume
  // specification.  If no plugins can support or more than one plugin can
  // support it, return error.