mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 19:13:34 +00:00
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package api
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/docker/docker/api/types/mount"
|
|
)
|
|
|
|
const (
|
|
// VolumeTypeBind is the type for mounting a host path.
|
|
VolumeTypeBind = "bind"
|
|
// VolumeTypeVolume is the type for mounting a managed volume.
|
|
VolumeTypeVolume = "volume"
|
|
// VolumeTypeTmpfs is the type for mounting a temporary file system stored in the host memory.
|
|
VolumeTypeTmpfs = "tmpfs"
|
|
|
|
// SELinuxShared share the volume content.
|
|
SELinuxShared = "z"
|
|
// SELinuxUnshared label content as private unshared.
|
|
SELinuxUnshared = "Z"
|
|
)
|
|
|
|
type VolumeSpec struct {
|
|
Type string
|
|
Source string
|
|
Target string
|
|
ReadOnly bool
|
|
Bind *VolumeBind
|
|
// TODO: add options for tmpfs.
|
|
}
|
|
|
|
type VolumeBind struct {
|
|
CreateHostPath bool
|
|
Propagation mount.Propagation
|
|
SELinux string
|
|
}
|
|
|
|
func (v *VolumeSpec) Validate() error {
|
|
switch v.Type {
|
|
case VolumeTypeBind, VolumeTypeVolume:
|
|
default:
|
|
return fmt.Errorf("invalid volume type: '%s'", v.Type)
|
|
}
|
|
|
|
if !strings.HasPrefix(v.Target, "/") {
|
|
return fmt.Errorf("invalid volume target: '%s', must be an absolute path in the container", v.Target)
|
|
}
|
|
|
|
return nil
|
|
}
|