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> Upstream-commit: fefea805e930a67fb6327f8e59415932861358cb Component: engine
32 lines
806 B
Go
32 lines
806 B
Go
package store
|
|
|
|
import (
|
|
"path/filepath"
|
|
"sync"
|
|
|
|
"github.com/docker/docker/pkg/plugins"
|
|
"github.com/docker/docker/plugin/v2"
|
|
)
|
|
|
|
// Store manages the plugin inventory in memory and on-disk
|
|
type Store struct {
|
|
sync.RWMutex
|
|
plugins map[string]*v2.Plugin
|
|
/* handlers are necessary for transition path of legacy plugins
|
|
* to the new model. Legacy plugins use Handle() for registering an
|
|
* activation callback.*/
|
|
handlers map[string]func(string, *plugins.Client)
|
|
nameToID map[string]string
|
|
plugindb string
|
|
}
|
|
|
|
// NewStore creates a Store.
|
|
func NewStore(libRoot string) *Store {
|
|
return &Store{
|
|
plugins: make(map[string]*v2.Plugin),
|
|
handlers: make(map[string]func(string, *plugins.Client)),
|
|
nameToID: make(map[string]string),
|
|
plugindb: filepath.Join(libRoot, "plugins", "plugins.json"),
|
|
}
|
|
}
|