plugin/defs.go
4f0d95fa
 package plugin // import "github.com/docker/docker/plugin"
fefea805
 
 import (
 	"sync"
 
 	"github.com/docker/docker/pkg/plugins"
 	"github.com/docker/docker/plugin/v2"
f23c00d8
 	"github.com/opencontainers/runtime-spec/specs-go"
fefea805
 )
 
 // Store manages the plugin inventory in memory and on-disk
 type Store struct {
 	sync.RWMutex
426e610e
 	plugins  map[string]*v2.Plugin
 	specOpts map[string][]SpecOpt
fefea805
 	/* handlers are necessary for transition path of legacy plugins
 	 * to the new model. Legacy plugins use Handle() for registering an
 	 * activation callback.*/
5e9c78ae
 	handlers map[string][]func(string, *plugins.Client)
fefea805
 }
 
 // NewStore creates a Store.
38de272b
 func NewStore() *Store {
fefea805
 	return &Store{
 		plugins:  make(map[string]*v2.Plugin),
426e610e
 		specOpts: make(map[string][]SpecOpt),
5e9c78ae
 		handlers: make(map[string][]func(string, *plugins.Client)),
fefea805
 	}
 }
72c3bcf2
 
426e610e
 // SpecOpt is used for subsystems that need to modify the runtime spec of a plugin
 type SpecOpt func(*specs.Spec)
 
72c3bcf2
 // CreateOpt is used to configure specific plugin details when created
 type CreateOpt func(p *v2.Plugin)
 
 // WithSwarmService is a CreateOpt that flags the passed in a plugin as a plugin
 // managed by swarm
 func WithSwarmService(id string) CreateOpt {
 	return func(p *v2.Plugin) {
 		p.SwarmServiceID = id
 	}
 }
426e610e
 
 // WithSpecMounts is a SpecOpt which appends the provided mounts to the runtime spec
 func WithSpecMounts(mounts []specs.Mount) SpecOpt {
 	return func(s *specs.Spec) {
 		s.Mounts = append(s.Mounts, mounts...)
 	}
 }