summaryrefslogtreecommitdiff
path: root/cmd/kpod/export.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/kpod/export.go')
-rw-r--r--cmd/kpod/export.go62
1 files changed, 13 insertions, 49 deletions
diff --git a/cmd/kpod/export.go b/cmd/kpod/export.go
index 94f05ce10..aaa4b2803 100644
--- a/cmd/kpod/export.go
+++ b/cmd/kpod/export.go
@@ -1,13 +1,8 @@
package main
import (
- "io"
"os"
- "fmt"
-
- "github.com/containers/storage"
- "github.com/containers/storage/pkg/archive"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
@@ -40,25 +35,22 @@ var (
// exportCmd saves a container to a tarball on disk
func exportCmd(c *cli.Context) error {
- args := c.Args()
- if len(args) == 0 {
- return errors.Errorf("container id must be specified")
- }
- if len(args) > 1 {
- return errors.Errorf("too many arguments given, need 1 at most.")
- }
- container := args[0]
if err := validateFlags(c, exportFlags); err != nil {
return err
}
- config, err := getConfig(c)
+ runtime, err := getRuntime(c)
if err != nil {
- return errors.Wrapf(err, "could not get config")
+ return errors.Wrapf(err, "could not get runtime")
}
- store, err := getStore(config)
- if err != nil {
- return err
+ defer runtime.Shutdown(false)
+
+ args := c.Args()
+ if len(args) == 0 {
+ return errors.Errorf("container id must be specified")
+ }
+ if len(args) > 1 {
+ return errors.Errorf("too many arguments given, need 1 at most.")
}
output := c.String("output")
@@ -69,38 +61,10 @@ func exportCmd(c *cli.Context) error {
}
}
- opts := exportOptions{
- output: output,
- container: container,
- }
-
- return exportContainer(store, opts)
-}
-
-// exportContainer exports the contents of a container and saves it as
-// a tarball on disk
-func exportContainer(store storage.Store, opts exportOptions) error {
- mountPoint, err := store.Mount(opts.container, "")
- if err != nil {
- return errors.Wrapf(err, "error finding container %q", opts.container)
- }
- defer func() {
- if err := store.Unmount(opts.container); err != nil {
- fmt.Printf("error unmounting container %q: %v\n", opts.container, err)
- }
- }()
-
- input, err := archive.Tar(mountPoint, archive.Uncompressed)
- if err != nil {
- return errors.Wrapf(err, "error reading container directory %q", opts.container)
- }
-
- outFile, err := os.Create(opts.output)
+ ctr, err := runtime.LookupContainer(args[0])
if err != nil {
- return errors.Wrapf(err, "error creating file %q", opts.output)
+ return errors.Wrapf(err, "error looking up container %q", args[0])
}
- defer outFile.Close()
- _, err = io.Copy(outFile, input)
- return err
+ return ctr.Export(output)
}