| package volume // import "github.com/docker/docker/volume" | |
| import ( | |
| "context" | |
| "time" | |
| ) | |
| // DefaultDriverName is the driver name used for the driver | |
| // implemented in the local package. | |
| const DefaultDriverName = "local" | |
| // Scopes define if a volume has is cluster-wide (global) or local only. | |
| // Scopes are returned by the volume driver when it is queried for capabilities and then set on a volume | |
| const ( | |
| LocalScope = "local" | |
| GlobalScope = "global" | |
| ) | |
| // Driver is for creating and removing volumes. | |
| type Driver interface { | |
| // Name returns the name of the volume driver. | |
| Name() string | |
| // Create makes a new volume with the given name. | |
| Create(name string, opts map[string]string) (Volume, error) | |
| // Remove deletes the volume. | |
| Remove(vol Volume) (err error) | |
| // List lists all the volumes the driver has | |
| List() ([]Volume, error) | |
| // Get retrieves the volume with the requested name | |
| Get(name string) (Volume, error) | |
| // Scope returns the scope of the driver (e.g. `global` or `local`). | |
| // Scope determines how the driver is handled at a cluster level | |
| Scope() string | |
| } | |
| // Capability defines a set of capabilities that a driver is able to handle. | |
| type Capability struct { | |
| // Scope is the scope of the driver, `global` or `local` | |
| // A `global` scope indicates that the driver manages volumes across the cluster | |
| // A `local` scope indicates that the driver only manages volumes resources local to the host | |
| // Scope is declared by the driver | |
| Scope string | |
| } | |
| // Volume is a place to store data. It is backed by a specific driver, and can be mounted. | |
| type Volume interface { | |
| // Name returns the name of the volume | |
| Name() string | |
| // DriverName returns the name of the driver which owns this volume. | |
| DriverName() string | |
| // Path returns the absolute path to the volume. | |
| Path() string | |
| // Mount mounts the volume and returns the absolute path to | |
| // where it can be consumed. | |
| Mount(id string) (string, error) | |
| // Unmount unmounts the volume when it is no longer in use. | |
| Unmount(id string) error | |
| // CreatedAt returns Volume Creation time | |
| CreatedAt() (time.Time, error) | |
| // Status returns low-level status information about a volume | |
| Status() map[string]interface{} | |
| } | |
| // LiveRestorer is an optional interface that can be implemented by a volume driver | |
| // It is used to restore any resources that are necessary for a volume to be used by a live-restored container | |
| type LiveRestorer interface { | |
| // LiveRestoreVolume allows a volume driver which implements this interface to restore any necessary resources (such as reference counting) | |
| // This is called only after the daemon is restarted with live-restored containers | |
| // It is called once per live-restored container. | |
| LiveRestoreVolume(_ context.Context, ref string) error | |
| } | |
| // DetailedVolume wraps a Volume with user-defined labels, options, and cluster scope (e.g., `local` or `global`) | |
| type DetailedVolume interface { | |
| Labels() map[string]string | |
| Options() map[string]string | |
| Scope() string | |
| Volume | |
| } |