func (pm *Manager) enable(p *v2.Plugin, force bool) error { if p.IsEnabled() && !force { return fmt.Errorf("plugin %s is already enabled", p.Name()) } spec, err := p.InitSpec(oci.DefaultSpec(), pm.libRoot) if err != nil { return err } p.Lock() p.Restart = true p.ExitChan = make(chan bool) p.Unlock() if err := pm.containerdClient.Create(p.GetID(), "", "", specs.Spec(*spec), attachToLog(p.GetID())); err != nil { return err } p.PClient, err = plugins.NewClientWithTimeout("unix://"+filepath.Join(p.RuntimeSourcePath, p.GetSocket()), nil, p.TimeoutInSecs) if err != nil { p.Lock() p.Restart = false p.Unlock() shutdownPlugin(p, pm.containerdClient) return err } pm.pluginStore.SetState(p, true) pm.pluginStore.CallHandler(p) return nil }