| package mount |
| |
| import ( |
| "os" |
| ) |
| |
| // Type represents the type of a mount. |
| type Type string |
| |
| // Type constants |
| const ( |
| // TypeBind is the type for mounting host dir |
| TypeBind Type = "bind" |
| // TypeVolume is the type for remote storage volumes |
| TypeVolume Type = "volume" |
| // TypeTmpfs is the type for mounting tmpfs |
| TypeTmpfs Type = "tmpfs" |
| ) |
| |
| // Mount represents a mount (volume). |
| type Mount struct { |
| Type Type `json:",omitempty"` |
| // Source specifies the name of the mount. Depending on mount type, this |
| // may be a volume name or a host path, or even ignored. |
| // Source is not supported for tmpfs (must be an empty value) |
| Source string `json:",omitempty"` |
| Target string `json:",omitempty"` |
| ReadOnly bool `json:",omitempty"` |
| |
| BindOptions *BindOptions `json:",omitempty"` |
| VolumeOptions *VolumeOptions `json:",omitempty"` |
| TmpfsOptions *TmpfsOptions `json:",omitempty"` |
| } |
| |
| // Propagation represents the propagation of a mount. |
| type Propagation string |
| |
| const ( |
| // PropagationRPrivate RPRIVATE |
| PropagationRPrivate Propagation = "rprivate" |
| // PropagationPrivate PRIVATE |
| PropagationPrivate Propagation = "private" |
| // PropagationRShared RSHARED |
| PropagationRShared Propagation = "rshared" |
| // PropagationShared SHARED |
| PropagationShared Propagation = "shared" |
| // PropagationRSlave RSLAVE |
| PropagationRSlave Propagation = "rslave" |
| // PropagationSlave SLAVE |
| PropagationSlave Propagation = "slave" |
| ) |
| |
| // Propagations is the list of all valid mount propagations |
| var Propagations = []Propagation{ |
| PropagationRPrivate, |
| PropagationPrivate, |
| PropagationRShared, |
| PropagationShared, |
| PropagationRSlave, |
| PropagationSlave, |
| } |
| |
| // BindOptions defines options specific to mounts of type "bind". |
| type BindOptions struct { |
| Propagation Propagation `json:",omitempty"` |
| } |
| |
| // VolumeOptions represents the options for a mount of type volume. |
| type VolumeOptions struct { |
| NoCopy bool `json:",omitempty"` |
| Labels map[string]string `json:",omitempty"` |
| DriverConfig *Driver `json:",omitempty"` |
| } |
| |
| // Driver represents a volume driver. |
| type Driver struct { |
| Name string `json:",omitempty"` |
| Options map[string]string `json:",omitempty"` |
| } |
| |
| // TmpfsOptions defines options specific to mounts of type "tmpfs". |
| type TmpfsOptions struct { |
| // Size sets the size of the tmpfs, in bytes. |
| // |
| // This will be converted to an operating system specific value |
| // depending on the host. For example, on linux, it will be convered to |
| // use a 'k', 'm' or 'g' syntax. BSD, though not widely supported with |
| // docker, uses a straight byte value. |
| // |
| // Percentages are not supported. |
| SizeBytes int64 `json:",omitempty"` |
| // Mode of the tmpfs upon creation |
| Mode os.FileMode `json:",omitempty"` |
| |
| // TODO(stevvooe): There are several more tmpfs flags, specified in the |
| // daemon, that are accepted. Only the most basic are added for now. |
| // |
| // From docker/docker/pkg/mount/flags.go: |
| // |
| // var validFlags = map[string]bool{ |
| // "": true, |
| // "size": true, X |
| // "mode": true, X |
| // "uid": true, |
| // "gid": true, |
| // "nr_inodes": true, |
| // "nr_blocks": true, |
| // "mpol": true, |
| // } |
| // |
| // Some of these may be straightforward to add, but others, such as |
| // uid/gid have implications in a clustered system. |
| } |