 4f2b443a27
			
		
	
	4f2b443a27
	
	
	
		
			
			This rewrites the Go imports after switching to the new github org. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package plugin
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"sync"
 | |
| 
 | |
| 	"github.com/containerd/containerd"
 | |
| 	"github.com/containerd/containerd/content"
 | |
| 	"github.com/containerd/containerd/snapshot"
 | |
| 
 | |
| 	"golang.org/x/net/context"
 | |
| 	"google.golang.org/grpc"
 | |
| )
 | |
| 
 | |
| type PluginType int
 | |
| 
 | |
| const (
 | |
| 	RuntimePlugin PluginType = iota + 1
 | |
| 	GRPCPlugin
 | |
| 	SnapshotPlugin
 | |
| 	ContainerMonitorPlugin
 | |
| )
 | |
| 
 | |
| type Registration struct {
 | |
| 	Type   PluginType
 | |
| 	Config interface{}
 | |
| 	Init   func(*InitContext) (interface{}, error)
 | |
| }
 | |
| 
 | |
| // TODO(@crosbymichael): how to we keep this struct from growing but support dependency injection for loaded plugins?
 | |
| type InitContext struct {
 | |
| 	Root        string
 | |
| 	State       string
 | |
| 	Runtimes    map[string]containerd.Runtime
 | |
| 	Store       *content.Store
 | |
| 	Snapshotter snapshot.Snapshotter
 | |
| 	Config      interface{}
 | |
| 	Context     context.Context
 | |
| 	Monitor     ContainerMonitor
 | |
| }
 | |
| 
 | |
| type Service interface {
 | |
| 	Register(*grpc.Server) error
 | |
| }
 | |
| 
 | |
| var register = struct {
 | |
| 	sync.Mutex
 | |
| 	r map[string]*Registration
 | |
| }{
 | |
| 	r: make(map[string]*Registration),
 | |
| }
 | |
| 
 | |
| // Load loads all plugins at the provided path into containerd
 | |
| func Load(path string) (err error) {
 | |
| 	defer func() {
 | |
| 		if v := recover(); v != nil {
 | |
| 			rerr, ok := v.(error)
 | |
| 			if !ok {
 | |
| 				rerr = fmt.Errorf("%s", v)
 | |
| 			}
 | |
| 			err = rerr
 | |
| 		}
 | |
| 	}()
 | |
| 	return loadPlugins(path)
 | |
| }
 | |
| 
 | |
| func Register(name string, r *Registration) error {
 | |
| 	register.Lock()
 | |
| 	defer register.Unlock()
 | |
| 	if _, ok := register.r[name]; ok {
 | |
| 		return fmt.Errorf("plugin already registered as %q", name)
 | |
| 	}
 | |
| 	register.r[name] = r
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func Registrations() map[string]*Registration {
 | |
| 	return register.r
 | |
| }
 |