mirror of
https://github.com/containers/podman.git
synced 2025-06-19 00:06:43 +08:00
Vendor in latest containers/storage
This allows us to modify the containers mount option on a per/container basis Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
@ -12,7 +12,7 @@ github.com/containerd/continuity master
|
|||||||
github.com/containernetworking/cni v0.7.0-alpha1
|
github.com/containernetworking/cni v0.7.0-alpha1
|
||||||
github.com/containernetworking/plugins 1562a1e60ed101aacc5e08ed9dbeba8e9f3d4ec1
|
github.com/containernetworking/plugins 1562a1e60ed101aacc5e08ed9dbeba8e9f3d4ec1
|
||||||
github.com/containers/image bd10b1b53b2976f215b3f2f848fb8e7cad779aeb
|
github.com/containers/image bd10b1b53b2976f215b3f2f848fb8e7cad779aeb
|
||||||
github.com/containers/storage 3161726d1db0d0d4e86a9667dd476f09b997f497
|
github.com/containers/storage 9d3838cd434d32042f9bdf1f9f4a2bf2d6ea8dc5
|
||||||
github.com/containers/psgo 5dde6da0bc8831b35243a847625bcf18183bd1ee
|
github.com/containers/psgo 5dde6da0bc8831b35243a847625bcf18183bd1ee
|
||||||
github.com/coreos/go-systemd v14
|
github.com/coreos/go-systemd v14
|
||||||
github.com/cri-o/ocicni 2d2983e40c242322a56c22a903785e7f83eb378c
|
github.com/cri-o/ocicni 2d2983e40c242322a56c22a903785e7f83eb378c
|
||||||
|
10
vendor/github.com/containers/storage/containers.go
generated
vendored
10
vendor/github.com/containers/storage/containers.go
generated
vendored
@ -147,6 +147,13 @@ func (c *Container) ProcessLabel() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Container) MountOpts() []string {
|
||||||
|
if mountOpts, ok := c.Flags["MountOpts"].([]string); ok {
|
||||||
|
return mountOpts
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (r *containerStore) Containers() ([]Container, error) {
|
func (r *containerStore) Containers() ([]Container, error) {
|
||||||
containers := make([]Container, len(r.containers))
|
containers := make([]Container, len(r.containers))
|
||||||
for i := range r.containers {
|
for i := range r.containers {
|
||||||
@ -293,6 +300,9 @@ func (r *containerStore) Create(id string, names []string, image, layer, metadat
|
|||||||
if _, idInUse := r.byid[id]; idInUse {
|
if _, idInUse := r.byid[id]; idInUse {
|
||||||
return nil, ErrDuplicateID
|
return nil, ErrDuplicateID
|
||||||
}
|
}
|
||||||
|
if options.MountOpts != nil {
|
||||||
|
options.Flags["MountOpts"] = append([]string{}, options.MountOpts...)
|
||||||
|
}
|
||||||
names = dedupeNames(names)
|
names = dedupeNames(names)
|
||||||
for _, name := range names {
|
for _, name := range names {
|
||||||
if _, nameInUse := r.byname[name]; nameInUse {
|
if _, nameInUse := r.byname[name]; nameInUse {
|
||||||
|
1
vendor/github.com/containers/storage/containers_ffjson.go
generated
vendored
1
vendor/github.com/containers/storage/containers_ffjson.go
generated
vendored
@ -1,6 +1,5 @@
|
|||||||
// Code generated by ffjson <https://github.com/pquerna/ffjson>. DO NOT EDIT.
|
// Code generated by ffjson <https://github.com/pquerna/ffjson>. DO NOT EDIT.
|
||||||
// source: containers.go
|
// source: containers.go
|
||||||
//
|
|
||||||
|
|
||||||
package storage
|
package storage
|
||||||
|
|
||||||
|
22
vendor/github.com/containers/storage/drivers/aufs/aufs.go
generated
vendored
22
vendor/github.com/containers/storage/drivers/aufs/aufs.go
generated
vendored
@ -441,7 +441,7 @@ func (a *Driver) Get(id string, options graphdriver.MountOpts) (string, error) {
|
|||||||
// If a dir does not have a parent ( no layers )do not try to mount
|
// If a dir does not have a parent ( no layers )do not try to mount
|
||||||
// just return the diff path to the data
|
// just return the diff path to the data
|
||||||
if len(parents) > 0 {
|
if len(parents) > 0 {
|
||||||
if err := a.mount(id, m, options.MountLabel, parents); err != nil {
|
if err := a.mount(id, m, parents, options); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -585,7 +585,7 @@ func (a *Driver) getParentLayerPaths(id string) ([]string, error) {
|
|||||||
return layers, nil
|
return layers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Driver) mount(id string, target string, mountLabel string, layers []string) error {
|
func (a *Driver) mount(id string, target string, layers []string, options graphdriver.MountOpts) error {
|
||||||
a.Lock()
|
a.Lock()
|
||||||
defer a.Unlock()
|
defer a.Unlock()
|
||||||
|
|
||||||
@ -596,7 +596,7 @@ func (a *Driver) mount(id string, target string, mountLabel string, layers []str
|
|||||||
|
|
||||||
rw := a.getDiffPath(id)
|
rw := a.getDiffPath(id)
|
||||||
|
|
||||||
if err := a.aufsMount(layers, rw, target, mountLabel); err != nil {
|
if err := a.aufsMount(layers, rw, target, options); err != nil {
|
||||||
return fmt.Errorf("error creating aufs mount to %s: %v", target, err)
|
return fmt.Errorf("error creating aufs mount to %s: %v", target, err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -643,7 +643,7 @@ func (a *Driver) Cleanup() error {
|
|||||||
return mountpk.Unmount(a.root)
|
return mountpk.Unmount(a.root)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Driver) aufsMount(ro []string, rw, target, mountLabel string) (err error) {
|
func (a *Driver) aufsMount(ro []string, rw, target string, options graphdriver.MountOpts) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Unmount(target)
|
Unmount(target)
|
||||||
@ -657,7 +657,7 @@ func (a *Driver) aufsMount(ro []string, rw, target, mountLabel string) (err erro
|
|||||||
if useDirperm() {
|
if useDirperm() {
|
||||||
offset += len(",dirperm1")
|
offset += len(",dirperm1")
|
||||||
}
|
}
|
||||||
b := make([]byte, unix.Getpagesize()-len(mountLabel)-offset) // room for xino & mountLabel
|
b := make([]byte, unix.Getpagesize()-len(options.MountLabel)-offset) // room for xino & mountLabel
|
||||||
bp := copy(b, fmt.Sprintf("br:%s=rw", rw))
|
bp := copy(b, fmt.Sprintf("br:%s=rw", rw))
|
||||||
|
|
||||||
index := 0
|
index := 0
|
||||||
@ -670,21 +670,25 @@ func (a *Driver) aufsMount(ro []string, rw, target, mountLabel string) (err erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
opts := "dio,xino=/dev/shm/aufs.xino"
|
opts := "dio,xino=/dev/shm/aufs.xino"
|
||||||
if a.mountOptions != "" {
|
mountOptions := a.mountOptions
|
||||||
opts += fmt.Sprintf(",%s", a.mountOptions)
|
if len(options.Options) > 0 {
|
||||||
|
mountOptions = strings.Join(options.Options, ",")
|
||||||
|
}
|
||||||
|
if mountOptions != "" {
|
||||||
|
opts += fmt.Sprintf(",%s", mountOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
if useDirperm() {
|
if useDirperm() {
|
||||||
opts += ",dirperm1"
|
opts += ",dirperm1"
|
||||||
}
|
}
|
||||||
data := label.FormatMountLabel(fmt.Sprintf("%s,%s", string(b[:bp]), opts), mountLabel)
|
data := label.FormatMountLabel(fmt.Sprintf("%s,%s", string(b[:bp]), opts), options.MountLabel)
|
||||||
if err = mount("none", target, "aufs", 0, data); err != nil {
|
if err = mount("none", target, "aufs", 0, data); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for ; index < len(ro); index++ {
|
for ; index < len(ro); index++ {
|
||||||
layer := fmt.Sprintf(":%s=ro+wh", ro[index])
|
layer := fmt.Sprintf(":%s=ro+wh", ro[index])
|
||||||
data := label.FormatMountLabel(fmt.Sprintf("append%s", layer), mountLabel)
|
data := label.FormatMountLabel(fmt.Sprintf("append%s", layer), options.MountLabel)
|
||||||
if err = mount("none", target, "aufs", unix.MS_REMOUNT, data); err != nil {
|
if err = mount("none", target, "aufs", unix.MS_REMOUNT, data); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
3
vendor/github.com/containers/storage/drivers/btrfs/btrfs.go
generated
vendored
3
vendor/github.com/containers/storage/drivers/btrfs/btrfs.go
generated
vendored
@ -640,6 +640,9 @@ func (d *Driver) Get(id string, options graphdriver.MountOpts) (string, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
if len(options.Options) > 0 {
|
||||||
|
return "", fmt.Errorf("btrfs driver does not support mount options")
|
||||||
|
}
|
||||||
|
|
||||||
if !st.IsDir() {
|
if !st.IsDir() {
|
||||||
return "", fmt.Errorf("%s: not a directory", dir)
|
return "", fmt.Errorf("%s: not a directory", dir)
|
||||||
|
15
vendor/github.com/containers/storage/drivers/devmapper/deviceset.go
generated
vendored
15
vendor/github.com/containers/storage/drivers/devmapper/deviceset.go
generated
vendored
@ -2364,7 +2364,7 @@ func (devices *DeviceSet) xfsSetNospaceRetries(info *devInfo) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MountDevice mounts the device if not already mounted.
|
// MountDevice mounts the device if not already mounted.
|
||||||
func (devices *DeviceSet) MountDevice(hash, path, mountLabel string) error {
|
func (devices *DeviceSet) MountDevice(hash, path string, moptions graphdriver.MountOpts) error {
|
||||||
info, err := devices.lookupDeviceWithLock(hash)
|
info, err := devices.lookupDeviceWithLock(hash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -2396,8 +2396,17 @@ func (devices *DeviceSet) MountDevice(hash, path, mountLabel string) error {
|
|||||||
options = joinMountOptions(options, "nouuid")
|
options = joinMountOptions(options, "nouuid")
|
||||||
}
|
}
|
||||||
|
|
||||||
options = joinMountOptions(options, devices.mountOptions)
|
mountOptions := devices.mountOptions
|
||||||
options = joinMountOptions(options, label.FormatMountLabel("", mountLabel))
|
if len(moptions.Options) > 0 {
|
||||||
|
addNouuid := strings.Contains("nouuid", mountOptions)
|
||||||
|
mountOptions = strings.Join(moptions.Options, ",")
|
||||||
|
if addNouuid {
|
||||||
|
mountOptions = fmt.Sprintf("nouuid,", mountOptions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
options = joinMountOptions(options, mountOptions)
|
||||||
|
options = joinMountOptions(options, label.FormatMountLabel("", moptions.MountLabel))
|
||||||
|
|
||||||
if err := mount.Mount(info.DevName(), path, fstype, options); err != nil {
|
if err := mount.Mount(info.DevName(), path, fstype, options); err != nil {
|
||||||
return fmt.Errorf("devmapper: Error mounting '%s' on '%s': %s\n%v", info.DevName(), path, err, string(dmesg.Dmesg(256)))
|
return fmt.Errorf("devmapper: Error mounting '%s' on '%s': %s\n%v", info.DevName(), path, err, string(dmesg.Dmesg(256)))
|
||||||
|
5
vendor/github.com/containers/storage/drivers/devmapper/driver.go
generated
vendored
5
vendor/github.com/containers/storage/drivers/devmapper/driver.go
generated
vendored
@ -9,8 +9,6 @@ import (
|
|||||||
"path"
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
|
|
||||||
"github.com/containers/storage/drivers"
|
"github.com/containers/storage/drivers"
|
||||||
"github.com/containers/storage/pkg/devicemapper"
|
"github.com/containers/storage/pkg/devicemapper"
|
||||||
"github.com/containers/storage/pkg/idtools"
|
"github.com/containers/storage/pkg/idtools"
|
||||||
@ -18,6 +16,7 @@ import (
|
|||||||
"github.com/containers/storage/pkg/mount"
|
"github.com/containers/storage/pkg/mount"
|
||||||
"github.com/containers/storage/pkg/system"
|
"github.com/containers/storage/pkg/system"
|
||||||
units "github.com/docker/go-units"
|
units "github.com/docker/go-units"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -189,7 +188,7 @@ func (d *Driver) Get(id string, options graphdriver.MountOpts) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Mount the device
|
// Mount the device
|
||||||
if err := d.DeviceSet.MountDevice(id, mp, options.MountLabel); err != nil {
|
if err := d.DeviceSet.MountDevice(id, mp, options); err != nil {
|
||||||
d.ctr.Decrement(mp)
|
d.ctr.Decrement(mp)
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
1
vendor/github.com/containers/storage/drivers/driver.go
generated
vendored
1
vendor/github.com/containers/storage/drivers/driver.go
generated
vendored
@ -49,6 +49,7 @@ type MountOpts struct {
|
|||||||
// UidMaps & GidMaps are the User Namespace mappings to be assigned to content in the mount point
|
// UidMaps & GidMaps are the User Namespace mappings to be assigned to content in the mount point
|
||||||
UidMaps []idtools.IDMap
|
UidMaps []idtools.IDMap
|
||||||
GidMaps []idtools.IDMap
|
GidMaps []idtools.IDMap
|
||||||
|
Options []string
|
||||||
}
|
}
|
||||||
|
|
||||||
// InitFunc initializes the storage driver.
|
// InitFunc initializes the storage driver.
|
||||||
|
4
vendor/github.com/containers/storage/drivers/overlay/overlay.go
generated
vendored
4
vendor/github.com/containers/storage/drivers/overlay/overlay.go
generated
vendored
@ -743,7 +743,9 @@ func (d *Driver) get(id string, disableShifting bool, options graphdriver.MountO
|
|||||||
|
|
||||||
workDir := path.Join(dir, "work")
|
workDir := path.Join(dir, "work")
|
||||||
opts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", strings.Join(absLowers, ":"), diffDir, workDir)
|
opts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", strings.Join(absLowers, ":"), diffDir, workDir)
|
||||||
if d.options.mountOptions != "" {
|
if len(options.Options) > 0 {
|
||||||
|
opts = fmt.Sprintf("%s,%s", strings.Join(options.Options, ","), opts)
|
||||||
|
} else if d.options.mountOptions != "" {
|
||||||
opts = fmt.Sprintf("%s,%s", d.options.mountOptions, opts)
|
opts = fmt.Sprintf("%s,%s", d.options.mountOptions, opts)
|
||||||
}
|
}
|
||||||
mountData := label.FormatMountLabel(opts, options.MountLabel)
|
mountData := label.FormatMountLabel(opts, options.MountLabel)
|
||||||
|
3
vendor/github.com/containers/storage/drivers/vfs/driver.go
generated
vendored
3
vendor/github.com/containers/storage/drivers/vfs/driver.go
generated
vendored
@ -181,6 +181,9 @@ func (d *Driver) Remove(id string) error {
|
|||||||
// Get returns the directory for the given id.
|
// Get returns the directory for the given id.
|
||||||
func (d *Driver) Get(id string, options graphdriver.MountOpts) (_ string, retErr error) {
|
func (d *Driver) Get(id string, options graphdriver.MountOpts) (_ string, retErr error) {
|
||||||
dir := d.dir(id)
|
dir := d.dir(id)
|
||||||
|
if len(options.Options) > 0 {
|
||||||
|
return "", fmt.Errorf("vfs driver does not support mount options")
|
||||||
|
}
|
||||||
if st, err := os.Stat(dir); err != nil {
|
if st, err := os.Stat(dir); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
} else if !st.IsDir() {
|
} else if !st.IsDir() {
|
||||||
|
3
vendor/github.com/containers/storage/drivers/windows/windows.go
generated
vendored
3
vendor/github.com/containers/storage/drivers/windows/windows.go
generated
vendored
@ -367,6 +367,9 @@ func (d *Driver) Get(id string, options graphdriver.MountOpts) (string, error) {
|
|||||||
logrus.Debugf("WindowsGraphDriver Get() id %s mountLabel %s", id, options.MountLabel)
|
logrus.Debugf("WindowsGraphDriver Get() id %s mountLabel %s", id, options.MountLabel)
|
||||||
var dir string
|
var dir string
|
||||||
|
|
||||||
|
if len(options.Options) > 0 {
|
||||||
|
return "", fmt.Errorf("windows driver does not support mount options")
|
||||||
|
}
|
||||||
rID, err := d.resolveID(id)
|
rID, err := d.resolveID(id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
|
7
vendor/github.com/containers/storage/drivers/zfs/zfs.go
generated
vendored
7
vendor/github.com/containers/storage/drivers/zfs/zfs.go
generated
vendored
@ -366,8 +366,13 @@ func (d *Driver) Get(id string, options graphdriver.MountOpts) (string, error) {
|
|||||||
return mountpoint, nil
|
return mountpoint, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mountOptions := d.options.mountOptions
|
||||||
|
if len(options.Options) > 0 {
|
||||||
|
mountOptions = strings.Join(options.Options, ",")
|
||||||
|
}
|
||||||
|
|
||||||
filesystem := d.zfsPath(id)
|
filesystem := d.zfsPath(id)
|
||||||
opts := label.FormatMountLabel(d.options.mountOptions, options.MountLabel)
|
opts := label.FormatMountLabel(mountOptions, options.MountLabel)
|
||||||
logrus.Debugf(`[zfs] mount("%s", "%s", "%s")`, filesystem, mountpoint, opts)
|
logrus.Debugf(`[zfs] mount("%s", "%s", "%s")`, filesystem, mountpoint, opts)
|
||||||
|
|
||||||
rootUID, rootGID, err := idtools.GetRootUIDGID(d.uidMaps, d.gidMaps)
|
rootUID, rootGID, err := idtools.GetRootUIDGID(d.uidMaps, d.gidMaps)
|
||||||
|
2
vendor/github.com/containers/storage/layers_ffjson.go
generated
vendored
2
vendor/github.com/containers/storage/layers_ffjson.go
generated
vendored
@ -1,5 +1,5 @@
|
|||||||
// Code generated by ffjson <https://github.com/pquerna/ffjson>. DO NOT EDIT.
|
// Code generated by ffjson <https://github.com/pquerna/ffjson>. DO NOT EDIT.
|
||||||
// source: ./layers.go
|
// source: layers.go
|
||||||
|
|
||||||
package storage
|
package storage
|
||||||
|
|
||||||
|
97
vendor/github.com/containers/storage/pkg/archive/example_changes.go
generated
vendored
Normal file
97
vendor/github.com/containers/storage/pkg/archive/example_changes.go
generated
vendored
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
// +build ignore
|
||||||
|
|
||||||
|
// Simple tool to create an archive stream from an old and new directory
|
||||||
|
//
|
||||||
|
// By default it will stream the comparison of two temporary directories with junk files
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
|
|
||||||
|
"github.com/containers/storage/pkg/archive"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
flDebug = flag.Bool("D", false, "debugging output")
|
||||||
|
flNewDir = flag.String("newdir", "", "")
|
||||||
|
flOldDir = flag.String("olddir", "", "")
|
||||||
|
log = logrus.New()
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flag.Usage = func() {
|
||||||
|
fmt.Println("Produce a tar from comparing two directory paths. By default a demo tar is created of around 200 files (including hardlinks)")
|
||||||
|
fmt.Printf("%s [OPTIONS]\n", os.Args[0])
|
||||||
|
flag.PrintDefaults()
|
||||||
|
}
|
||||||
|
flag.Parse()
|
||||||
|
log.Out = os.Stderr
|
||||||
|
if (len(os.Getenv("DEBUG")) > 0) || *flDebug {
|
||||||
|
logrus.SetLevel(logrus.DebugLevel)
|
||||||
|
}
|
||||||
|
var newDir, oldDir string
|
||||||
|
|
||||||
|
if len(*flNewDir) == 0 {
|
||||||
|
var err error
|
||||||
|
newDir, err = ioutil.TempDir("", "storage-test-newDir")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(newDir)
|
||||||
|
if _, err := prepareUntarSourceDirectory(100, newDir, true); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
newDir = *flNewDir
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(*flOldDir) == 0 {
|
||||||
|
oldDir, err := ioutil.TempDir("", "storage-test-oldDir")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(oldDir)
|
||||||
|
} else {
|
||||||
|
oldDir = *flOldDir
|
||||||
|
}
|
||||||
|
|
||||||
|
changes, err := archive.ChangesDirs(newDir, oldDir)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
a, err := archive.ExportChanges(newDir, changes)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer a.Close()
|
||||||
|
|
||||||
|
i, err := io.Copy(os.Stdout, a)
|
||||||
|
if err != nil && err != io.EOF {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
fmt.Fprintf(os.Stderr, "wrote archive of %d bytes", i)
|
||||||
|
}
|
||||||
|
|
||||||
|
func prepareUntarSourceDirectory(numberOfFiles int, targetPath string, makeLinks bool) (int, error) {
|
||||||
|
fileData := []byte("fooo")
|
||||||
|
for n := 0; n < numberOfFiles; n++ {
|
||||||
|
fileName := fmt.Sprintf("file-%d", n)
|
||||||
|
if err := ioutil.WriteFile(path.Join(targetPath, fileName), fileData, 0700); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if makeLinks {
|
||||||
|
if err := os.Link(path.Join(targetPath, fileName), path.Join(targetPath, fileName+"-link")); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
totalSize := numberOfFiles * len(fileData)
|
||||||
|
return totalSize, nil
|
||||||
|
}
|
4
vendor/github.com/containers/storage/pkg/idtools/parser.go
generated
vendored
4
vendor/github.com/containers/storage/pkg/idtools/parser.go
generated
vendored
@ -30,8 +30,8 @@ func parseTriple(spec []string) (container, host, size uint32, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ParseIDMap parses idmap triples from string.
|
// ParseIDMap parses idmap triples from string.
|
||||||
func ParseIDMap(idMapSpec, mapSetting string) (idmap []IDMap, err error) {
|
func ParseIDMap(mapSpec []string, mapSetting string) (idmap []IDMap, err error) {
|
||||||
if len(idMapSpec) > 0 {
|
for _, idMapSpec := range mapSpec {
|
||||||
idSpec := strings.Fields(strings.Map(nonDigitsToWhitespace, idMapSpec))
|
idSpec := strings.Fields(strings.Map(nonDigitsToWhitespace, idMapSpec))
|
||||||
if len(idSpec)%3 != 0 {
|
if len(idSpec)%3 != 0 {
|
||||||
return nil, fmt.Errorf("error initializing ID mappings: %s setting is malformed", mapSetting)
|
return nil, fmt.Errorf("error initializing ID mappings: %s setting is malformed", mapSetting)
|
||||||
|
60
vendor/github.com/containers/storage/store.go
generated
vendored
60
vendor/github.com/containers/storage/store.go
generated
vendored
@ -21,6 +21,7 @@ import (
|
|||||||
"github.com/containers/storage/pkg/directory"
|
"github.com/containers/storage/pkg/directory"
|
||||||
"github.com/containers/storage/pkg/idtools"
|
"github.com/containers/storage/pkg/idtools"
|
||||||
"github.com/containers/storage/pkg/ioutils"
|
"github.com/containers/storage/pkg/ioutils"
|
||||||
|
"github.com/containers/storage/pkg/parsers"
|
||||||
"github.com/containers/storage/pkg/stringid"
|
"github.com/containers/storage/pkg/stringid"
|
||||||
"github.com/containers/storage/pkg/stringutils"
|
"github.com/containers/storage/pkg/stringutils"
|
||||||
digest "github.com/opencontainers/go-digest"
|
digest "github.com/opencontainers/go-digest"
|
||||||
@ -501,6 +502,7 @@ type ContainerOptions struct {
|
|||||||
IDMappingOptions
|
IDMappingOptions
|
||||||
LabelOpts []string
|
LabelOpts []string
|
||||||
Flags map[string]interface{}
|
Flags map[string]interface{}
|
||||||
|
MountOpts []string
|
||||||
}
|
}
|
||||||
|
|
||||||
type store struct {
|
type store struct {
|
||||||
@ -2144,21 +2146,20 @@ func (s *store) DeleteContainer(id string) error {
|
|||||||
if err = rlstore.Delete(container.LayerID); err != nil {
|
if err = rlstore.Delete(container.LayerID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err = rcstore.Delete(id); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
middleDir := s.graphDriverName + "-containers"
|
|
||||||
gcpath := filepath.Join(s.GraphRoot(), middleDir, container.ID)
|
|
||||||
if err = os.RemoveAll(gcpath); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
rcpath := filepath.Join(s.RunRoot(), middleDir, container.ID)
|
|
||||||
if err = os.RemoveAll(rcpath); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
return ErrNotALayer
|
if err = rcstore.Delete(id); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
middleDir := s.graphDriverName + "-containers"
|
||||||
|
gcpath := filepath.Join(s.GraphRoot(), middleDir, container.ID)
|
||||||
|
if err = os.RemoveAll(gcpath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
rcpath := filepath.Join(s.RunRoot(), middleDir, container.ID)
|
||||||
|
if err = os.RemoveAll(rcpath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ErrNotAContainer
|
return ErrNotAContainer
|
||||||
@ -2279,10 +2280,14 @@ func (s *store) Version() ([][2]string, error) {
|
|||||||
|
|
||||||
func (s *store) Mount(id, mountLabel string) (string, error) {
|
func (s *store) Mount(id, mountLabel string) (string, error) {
|
||||||
container, err := s.Container(id)
|
container, err := s.Container(id)
|
||||||
var uidMap, gidMap []idtools.IDMap
|
var (
|
||||||
|
uidMap, gidMap []idtools.IDMap
|
||||||
|
mountOpts []string
|
||||||
|
)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
uidMap, gidMap = container.UIDMap, container.GIDMap
|
uidMap, gidMap = container.UIDMap, container.GIDMap
|
||||||
id = container.LayerID
|
id = container.LayerID
|
||||||
|
mountOpts = container.MountOpts()
|
||||||
}
|
}
|
||||||
rlstore, err := s.LayerStore()
|
rlstore, err := s.LayerStore()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2298,6 +2303,7 @@ func (s *store) Mount(id, mountLabel string) (string, error) {
|
|||||||
MountLabel: mountLabel,
|
MountLabel: mountLabel,
|
||||||
UidMaps: uidMap,
|
UidMaps: uidMap,
|
||||||
GidMaps: gidMap,
|
GidMaps: gidMap,
|
||||||
|
Options: mountOpts,
|
||||||
}
|
}
|
||||||
return rlstore.Mount(id, options)
|
return rlstore.Mount(id, options)
|
||||||
}
|
}
|
||||||
@ -3203,13 +3209,13 @@ func ReloadConfigurationFile(configFile string, storeOptions *StoreOptions) {
|
|||||||
storeOptions.GIDMap = mappings.GIDs()
|
storeOptions.GIDMap = mappings.GIDs()
|
||||||
}
|
}
|
||||||
|
|
||||||
uidmap, err := idtools.ParseIDMap(config.Storage.Options.RemapUIDs, "remap-uids")
|
uidmap, err := idtools.ParseIDMap([]string{config.Storage.Options.RemapUIDs}, "remap-uids")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Print(err)
|
fmt.Print(err)
|
||||||
} else {
|
} else {
|
||||||
storeOptions.UIDMap = append(storeOptions.UIDMap, uidmap...)
|
storeOptions.UIDMap = append(storeOptions.UIDMap, uidmap...)
|
||||||
}
|
}
|
||||||
gidmap, err := idtools.ParseIDMap(config.Storage.Options.RemapGIDs, "remap-gids")
|
gidmap, err := idtools.ParseIDMap([]string{config.Storage.Options.RemapGIDs}, "remap-gids")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Print(err)
|
fmt.Print(err)
|
||||||
} else {
|
} else {
|
||||||
@ -3233,3 +3239,23 @@ func init() {
|
|||||||
|
|
||||||
ReloadConfigurationFile(defaultConfigFile, &DefaultStoreOptions)
|
ReloadConfigurationFile(defaultConfigFile, &DefaultStoreOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetDefaultMountOptions() ([]string, error) {
|
||||||
|
mountOpts := []string{
|
||||||
|
".mountopt",
|
||||||
|
fmt.Sprintf("%s.mountopt", DefaultStoreOptions.GraphDriverName),
|
||||||
|
}
|
||||||
|
for _, option := range DefaultStoreOptions.GraphDriverOptions {
|
||||||
|
key, val, err := parsers.ParseKeyValueOpt(option)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
key = strings.ToLower(key)
|
||||||
|
for _, m := range mountOpts {
|
||||||
|
if m == key {
|
||||||
|
return strings.Split(val, ","), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user