2016-09-08 00:01:10 +00:00
|
|
|
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.*/
|
2016-10-15 05:40:28 +00:00
|
|
|
handlers map[string][]func(string, *plugins.Client)
|
2016-09-08 00:01:10 +00:00
|
|
|
nameToID map[string]string
|
|
|
|
plugindb string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewStore creates a Store.
|
|
|
|
func NewStore(libRoot string) *Store {
|
|
|
|
return &Store{
|
|
|
|
plugins: make(map[string]*v2.Plugin),
|
2016-10-15 05:40:28 +00:00
|
|
|
handlers: make(map[string][]func(string, *plugins.Client)),
|
2016-09-08 00:01:10 +00:00
|
|
|
nameToID: make(map[string]string),
|
|
|
|
plugindb: filepath.Join(libRoot, "plugins", "plugins.json"),
|
|
|
|
}
|
|
|
|
}
|