mirror of
https://github.com/containers/podman.git
synced 2026-02-05 06:45:31 +01:00
Refactor volume import to support the remote client
As with `volume export`, this was coded up exclusively in cmd/ instead of in libpod. Move it into Libpod, add a REST endpoint, add bindings, and now everything talks using the ContainerEngine wiring. Also similar to `volume export` this also makes things work much better with volumes that require mounting - we can now guarantee they're actually mounted, instead of just hoping. Includes some refactoring of `volume export` as well, to simplify its implementation and ensure both Import and Export work with readers/writers, as opposed to just files. Fixes #26409 Signed-off-by: Matt Heon <mheon@redhat.com>
This commit is contained in:
@@ -50,22 +50,6 @@ func ExecCmdWithStdStreams(stdin io.Reader, stdout, stderr io.Writer, env []stri
|
||||
return nil
|
||||
}
|
||||
|
||||
// UntarToFileSystem untars an os.file of a tarball to a destination in the filesystem
|
||||
func UntarToFileSystem(dest string, tarball *os.File, options *archive.TarOptions) error {
|
||||
logrus.Debugf("untarring %s", tarball.Name())
|
||||
return archive.Untar(tarball, dest, options)
|
||||
}
|
||||
|
||||
// Creates a new tar file and writes bytes from io.ReadCloser
|
||||
func CreateTarFromSrc(source string, dest string) error {
|
||||
file, err := os.Create(dest)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not create tarball file '%s': %w", dest, err)
|
||||
}
|
||||
defer file.Close()
|
||||
return TarChrootToFilesystem(source, file)
|
||||
}
|
||||
|
||||
// TarToFilesystem creates a tarball from source and writes to an os.file
|
||||
// provided
|
||||
func TarToFilesystem(source string, tarball *os.File) error {
|
||||
@@ -88,22 +72,6 @@ func Tar(source string) (io.ReadCloser, error) {
|
||||
return archive.Tar(source, archive.Uncompressed)
|
||||
}
|
||||
|
||||
// TarChrootToFilesystem creates a tarball from source and writes to an os.file
|
||||
// provided while chrooted to the source.
|
||||
func TarChrootToFilesystem(source string, tarball *os.File) error {
|
||||
tb, err := TarWithChroot(source)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer tb.Close()
|
||||
_, err = io.Copy(tarball, tb)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
logrus.Debugf("wrote tarball file %s", tarball.Name())
|
||||
return nil
|
||||
}
|
||||
|
||||
// TarWithChroot creates a tarball from source and returns a readcloser of it
|
||||
// while chrooted to the source.
|
||||
func TarWithChroot(source string) (io.ReadCloser, error) {
|
||||
|
||||
Reference in New Issue
Block a user