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...)
}
} |