mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
fefea805e9
As part of making graphdrivers support pluginv2, a PluginGetter interface was necessary for cleaner separation and avoiding import cycles. This commit creates a PluginGetter interface and makes pluginStore implement it. Then the pluginStore object is created in the daemon (rather than by the plugin manager) and passed to plugin init as well as to the different subsystems (eg. graphdrivers, volumedrivers). A side effect of this change was that some code was moved out of experimental. This is good, since plugin support will be stable soon. Signed-off-by: Anusha Ragunathan <anusha@docker.com>
32 lines
1 KiB
Go
32 lines
1 KiB
Go
// +build experimental
|
|
|
|
package graphdriver
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/docker/docker/plugin/getter"
|
|
)
|
|
|
|
type pluginClient interface {
|
|
// Call calls the specified method with the specified arguments for the plugin.
|
|
Call(string, interface{}, interface{}) error
|
|
// Stream calls the specified method with the specified arguments for the plugin and returns the response IO stream
|
|
Stream(string, interface{}) (io.ReadCloser, error)
|
|
// SendFile calls the specified method, and passes through the IO stream
|
|
SendFile(string, io.Reader, interface{}) error
|
|
}
|
|
|
|
func lookupPlugin(name, home string, opts []string, pluginGetter getter.PluginGetter) (Driver, error) {
|
|
pl, err := pluginGetter.Get(name, "GraphDriver", getter.LOOKUP)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Error looking up graphdriver plugin %s: %v", name, err)
|
|
}
|
|
return newPluginDriver(name, home, opts, pl.Client())
|
|
}
|
|
|
|
func newPluginDriver(name, home string, opts []string, c pluginClient) (Driver, error) {
|
|
proxy := &graphDriverProxy{name, c}
|
|
return proxy, proxy.Init(home, opts)
|
|
}
|