diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-11-05 14:39:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-05 14:39:16 +0100 |
commit | ab1d3a58d4b98bc948d7344fc27c680ca326086f (patch) | |
tree | 138b0ccdb5c25dab84a367e711ba29bdbd58fd3c /libpod | |
parent | cdc50e9d195f8081d3a5dc69cc65ddd3f050497c (diff) | |
parent | 6ca705bf1af6fd516b14ab043dc922e55eeaf832 (diff) | |
download | podman-ab1d3a58d4b98bc948d7344fc27c680ca326086f.tar.gz podman-ab1d3a58d4b98bc948d7344fc27c680ca326086f.tar.bz2 podman-ab1d3a58d4b98bc948d7344fc27c680ca326086f.zip |
Merge pull request #8185 from rhatdan/mount
Add support for mounting external containers
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/runtime_ctr.go | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/libpod/runtime_ctr.go b/libpod/runtime_ctr.go index de73a9ff3..c84268889 100644 --- a/libpod/runtime_ctr.go +++ b/libpod/runtime_ctr.go @@ -918,6 +918,56 @@ func (r *Runtime) PruneContainers(filterFuncs []ContainerFilter) (map[string]int return prunedContainers, pruneErrors, nil } +// MountStorageContainer mounts the storage container's root filesystem +func (r *Runtime) MountStorageContainer(id string) (string, error) { + if _, err := r.GetContainer(id); err == nil { + return "", errors.Wrapf(define.ErrCtrExists, "ctr %s is a libpod container", id) + } + container, err := r.store.Container(id) + if err != nil { + return "", err + } + mountPoint, err := r.store.Mount(container.ID, "") + if err != nil { + return "", errors.Wrapf(err, "error mounting storage for container %s", id) + } + return mountPoint, nil +} + +// UnmountStorageContainer unmounts the storage container's root filesystem +func (r *Runtime) UnmountStorageContainer(id string, force bool) (bool, error) { + if _, err := r.GetContainer(id); err == nil { + return false, errors.Wrapf(define.ErrCtrExists, "ctr %s is a libpod container", id) + } + container, err := r.store.Container(id) + if err != nil { + return false, err + } + return r.store.Unmount(container.ID, force) +} + +// MountedStorageContainer returns whether a storage container is mounted +// along with the mount path +func (r *Runtime) IsStorageContainerMounted(id string) (bool, string, error) { + var path string + if _, err := r.GetContainer(id); err == nil { + return false, "", errors.Wrapf(define.ErrCtrExists, "ctr %s is a libpod container", id) + } + + mountCnt, err := r.storageService.MountedContainerImage(id) + if err != nil { + return false, "", err + } + mounted := mountCnt > 0 + if mounted { + path, err = r.storageService.GetMountpoint(id) + if err != nil { + return false, "", err + } + } + return mounted, path, nil +} + // StorageContainers returns a list of containers from containers/storage that // are not currently known to Podman. func (r *Runtime) StorageContainers() ([]storage.Container, error) { |