// InitPlugins initializes each plugin. All plugins must have unique names. // This must be called exactly once before any New* methods are called on any // plugins. func (pm *VolumePluginMgr) InitPlugins(plugins []VolumePlugin, host VolumeHost) error { pm.mutex.Lock() defer pm.mutex.Unlock() if pm.plugins == nil { pm.plugins = map[string]VolumePlugin{} } allErrs := []error{} for _, plugin := range plugins { name := plugin.Name() if !util.IsQualifiedName(name) { allErrs = append(allErrs, fmt.Errorf("volume plugin has invalid name: %#v", plugin)) continue } if _, found := pm.plugins[name]; found { allErrs = append(allErrs, fmt.Errorf("volume plugin %q was registered more than once", name)) continue } plugin.Init(host) pm.plugins[name] = plugin glog.V(1).Infof("Loaded volume plugin %q", name) } return errors.NewAggregate(allErrs) }
// InitNetworkPlugin inits the plugin that matches networkPluginName. Plugins must have unique names. func InitNetworkPlugin(plugins []NetworkPlugin, networkPluginName string, host Host) (NetworkPlugin, error) { if networkPluginName == "" { // default to the no_op plugin plug := &noopNetworkPlugin{} return plug, nil } pluginMap := map[string]NetworkPlugin{} allErrs := []error{} for _, plugin := range plugins { name := plugin.Name() if !util.IsQualifiedName(name) { allErrs = append(allErrs, fmt.Errorf("network plugin has invalid name: %#v", plugin)) continue } if _, found := pluginMap[name]; found { allErrs = append(allErrs, fmt.Errorf("network plugin %q was registered more than once", name)) continue } pluginMap[name] = plugin } chosenPlugin := pluginMap[networkPluginName] if chosenPlugin != nil { err := chosenPlugin.Init(host) if err != nil { allErrs = append(allErrs, fmt.Errorf("Network plugin %q failed init: %v", networkPluginName, err)) } else { glog.V(1).Infof("Loaded network plugin %q", networkPluginName) } } else { allErrs = append(allErrs, fmt.Errorf("Network plugin %q not found.", networkPluginName)) } return chosenPlugin, errors.NewAggregate(allErrs) }
func validateLabelKey(k string) error { if !util.IsQualifiedName(k) { return fielderrors.NewFieldInvalid("label key", k, qualifiedNameErrorMsg) } return nil }