| // +build experimental |
| |
| package graphdriver |
| |
| import ( |
| "fmt" |
| "io" |
| |
| "github.com/docker/docker/pkg/plugins" |
| ) |
| |
| 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) (Driver, error) { |
| pl, err := plugins.Get(name, "GraphDriver") |
| 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) |
| } |