Procházet zdrojové kódy

Allow to call back when a plugin is loaded.

Signed-off-by: Madhu Venugopal <madhu@docker.com>
Madhu Venugopal před 10 roky
rodič
revize
ba3bcf0537
2 změnil soubory, kde provedl 16 přidání a 2 odebrání
  1. 1 1
      pkg/plugins/client.go
  2. 15 1
      pkg/plugins/plugins.go

+ 1 - 1
pkg/plugins/client.go

@@ -15,7 +15,7 @@ import (
 
 const (
 	versionMimetype = "appplication/vnd.docker.plugins.v1+json"
-	defaultTimeOut  = 120
+	defaultTimeOut  = 30
 )
 
 func NewClient(addr string) *Client {

+ 15 - 1
pkg/plugins/plugins.go

@@ -16,7 +16,10 @@ type plugins struct {
 	plugins map[string]*Plugin
 }
 
-var storage = plugins{plugins: make(map[string]*Plugin)}
+var (
+	storage          = plugins{plugins: make(map[string]*Plugin)}
+	extpointHandlers = make(map[string]func(string, *Client))
+)
 
 type Manifest struct {
 	Implements []string
@@ -39,6 +42,13 @@ func (p *Plugin) activate() error {
 
 	logrus.Debugf("%s's manifest: %v", p.Name, m)
 	p.Manifest = m
+	for _, iface := range m.Implements {
+		handler, handled := extpointHandlers[iface]
+		if !handled {
+			continue
+		}
+		handler(p.Name, p.Client)
+	}
 	return nil
 }
 
@@ -84,3 +94,7 @@ func Get(name, imp string) (*Plugin, error) {
 	}
 	return nil, ErrNotImplements
 }
+
+func Handle(iface string, fn func(string, *Client)) {
+	extpointHandlers[iface] = fn
+}