123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- package types
- import (
- "encoding/json"
- "fmt"
- )
- // PluginInstallOptions holds parameters to install a plugin.
- type PluginInstallOptions struct {
- Disabled bool
- AcceptAllPermissions bool
- RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry
- PrivilegeFunc RequestPrivilegeFunc
- AcceptPermissionsFunc func(PluginPrivileges) (bool, error)
- }
- // PluginConfig represents the values of settings potentially modifiable by a user
- type PluginConfig struct {
- Mounts []PluginMount
- Env []string
- Args []string
- Devices []PluginDevice
- }
- // Plugin represents a Docker plugin for the remote API
- type Plugin struct {
- ID string `json:"Id,omitempty"`
- Name string
- Tag string
- // Enabled is true when the plugin is running, is false when the plugin is not running, only installed.
- Enabled bool
- Config PluginConfig
- Manifest PluginManifest
- }
- // PluginsListResponse contains the response for the remote API
- type PluginsListResponse []*Plugin
- const (
- authzDriver = "AuthzDriver"
- graphDriver = "GraphDriver"
- ipamDriver = "IpamDriver"
- networkDriver = "NetworkDriver"
- volumeDriver = "VolumeDriver"
- )
- // PluginInterfaceType represents a type that a plugin implements.
- type PluginInterfaceType struct {
- Prefix string // This is always "docker"
- Capability string // Capability should be validated against the above list.
- Version string // Plugin API version. Depends on the capability
- }
- // UnmarshalJSON implements json.Unmarshaler for PluginInterfaceType
- func (t *PluginInterfaceType) UnmarshalJSON(p []byte) error {
- versionIndex := len(p)
- prefixIndex := 0
- if len(p) < 2 || p[0] != '"' || p[len(p)-1] != '"' {
- return fmt.Errorf("%q is not a plugin interface type", p)
- }
- p = p[1 : len(p)-1]
- loop:
- for i, b := range p {
- switch b {
- case '.':
- prefixIndex = i
- case '/':
- versionIndex = i
- break loop
- }
- }
- t.Prefix = string(p[:prefixIndex])
- t.Capability = string(p[prefixIndex+1 : versionIndex])
- if versionIndex < len(p) {
- t.Version = string(p[versionIndex+1:])
- }
- return nil
- }
- // MarshalJSON implements json.Marshaler for PluginInterfaceType
- func (t *PluginInterfaceType) MarshalJSON() ([]byte, error) {
- return json.Marshal(t.String())
- }
- // String implements fmt.Stringer for PluginInterfaceType
- func (t PluginInterfaceType) String() string {
- return fmt.Sprintf("%s.%s/%s", t.Prefix, t.Capability, t.Version)
- }
- // PluginInterface describes the interface between Docker and plugin
- type PluginInterface struct {
- Types []PluginInterfaceType
- Socket string
- }
- // PluginSetting is to be embedded in other structs, if they are supposed to be
- // modifiable by the user.
- type PluginSetting struct {
- Name string
- Description string
- Settable []string
- }
- // PluginNetwork represents the network configuration for a plugin
- type PluginNetwork struct {
- Type string
- }
- // PluginMount represents the mount configuration for a plugin
- type PluginMount struct {
- PluginSetting
- Source *string
- Destination string
- Type string
- Options []string
- }
- // PluginEnv represents an environment variable for a plugin
- type PluginEnv struct {
- PluginSetting
- Value *string
- }
- // PluginArgs represents the command line arguments for a plugin
- type PluginArgs struct {
- PluginSetting
- Value []string
- }
- // PluginDevice represents a device for a plugin
- type PluginDevice struct {
- PluginSetting
- Path *string
- }
- // PluginUser represents the user for the plugin's process
- type PluginUser struct {
- UID uint32 `json:"Uid,omitempty"`
- GID uint32 `json:"Gid,omitempty"`
- }
- // PluginManifest represents the manifest of a plugin
- type PluginManifest struct {
- ManifestVersion string
- Description string
- Documentation string
- Interface PluginInterface
- Entrypoint []string
- Workdir string
- User PluginUser `json:",omitempty"`
- Network PluginNetwork
- Capabilities []string
- Mounts []PluginMount
- Devices []PluginDevice
- Env []PluginEnv
- Args PluginArgs
- }
- // PluginPrivilege describes a permission the user has to accept
- // upon installing a plugin.
- type PluginPrivilege struct {
- Name string
- Description string
- Value []string
- }
- // PluginPrivileges is a list of PluginPrivilege
- type PluginPrivileges []PluginPrivilege
|