mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
3e3d3c8086
For `--mount type=tmpfs,target=/foo,readonly`, the `readonly` flag was just ignored. Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
// +build linux
|
|
|
|
package volume
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
mounttypes "github.com/docker/docker/api/types/mount"
|
|
)
|
|
|
|
// ConvertTmpfsOptions converts *mounttypes.TmpfsOptions to the raw option string
|
|
// for mount(2).
|
|
// The logic is copy-pasted from daemon/cluster/executer/container.getMountMask.
|
|
// It will be deduplicated when we migrated the cluster to the new mount scheme.
|
|
func ConvertTmpfsOptions(opt *mounttypes.TmpfsOptions, readOnly bool) (string, error) {
|
|
var rawOpts []string
|
|
if readOnly {
|
|
rawOpts = append(rawOpts, "ro")
|
|
}
|
|
|
|
if opt != nil && opt.Mode != 0 {
|
|
rawOpts = append(rawOpts, fmt.Sprintf("mode=%o", opt.Mode))
|
|
}
|
|
|
|
if opt != nil && opt.SizeBytes != 0 {
|
|
// calculate suffix here, making this linux specific, but that is
|
|
// okay, since API is that way anyways.
|
|
|
|
// we do this by finding the suffix that divides evenly into the
|
|
// value, returing the value itself, with no suffix, if it fails.
|
|
//
|
|
// For the most part, we don't enforce any semantic to this values.
|
|
// The operating system will usually align this and enforce minimum
|
|
// and maximums.
|
|
var (
|
|
size = opt.SizeBytes
|
|
suffix string
|
|
)
|
|
for _, r := range []struct {
|
|
suffix string
|
|
divisor int64
|
|
}{
|
|
{"g", 1 << 30},
|
|
{"m", 1 << 20},
|
|
{"k", 1 << 10},
|
|
} {
|
|
if size%r.divisor == 0 {
|
|
size = size / r.divisor
|
|
suffix = r.suffix
|
|
break
|
|
}
|
|
}
|
|
|
|
rawOpts = append(rawOpts, fmt.Sprintf("size=%d%s", size, suffix))
|
|
}
|
|
return strings.Join(rawOpts, ","), nil
|
|
}
|