0e5eaf8ee3
Before this change, volume management was relying on the fact that everything the plugin mounts is visible on the host within the plugin's rootfs. In practice this caused some issues with mount leaks, so we changed the behavior such that mounts are not visible on the plugin's rootfs, but available outside of it, which breaks volume management. To fix the issue, allow the plugin to scope the path correctly rather than assuming that everything is visible in `p.Rootfs`. In practice this is just scoping the `PropagatedMount` paths to the correct host path. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
37 lines
877 B
Go
37 lines
877 B
Go
package plugingetter
|
|
|
|
import (
|
|
"github.com/docker/docker/pkg/plugins"
|
|
)
|
|
|
|
const (
|
|
// Lookup doesn't update RefCount
|
|
Lookup = 0
|
|
// Acquire increments RefCount
|
|
Acquire = 1
|
|
// Release decrements RefCount
|
|
Release = -1
|
|
)
|
|
|
|
// CompatPlugin is an abstraction to handle both v2(new) and v1(legacy) plugins.
|
|
type CompatPlugin interface {
|
|
Client() *plugins.Client
|
|
Name() string
|
|
ScopedPath(string) string
|
|
IsV1() bool
|
|
}
|
|
|
|
// CountedPlugin is a plugin which is reference counted.
|
|
type CountedPlugin interface {
|
|
Acquire()
|
|
Release()
|
|
CompatPlugin
|
|
}
|
|
|
|
// PluginGetter is the interface implemented by Store
|
|
type PluginGetter interface {
|
|
Get(name, capability string, mode int) (CompatPlugin, error)
|
|
GetAllByCap(capability string) ([]CompatPlugin, error)
|
|
GetAllManagedPluginsByCap(capability string) []CompatPlugin
|
|
Handle(capability string, callback func(string, *plugins.Client))
|
|
}
|