diff options
author | Matthew Heon <matthew.heon@gmail.com> | 2018-06-21 10:35:35 -0400 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-06-22 19:26:46 +0000 |
commit | d2f981fd0babda31c89ac031dabc671d76b8f25a (patch) | |
tree | 22fb150f7983e3cc97e33878e6b34e49620bbe40 /cmd/podman/refresh.go | |
parent | 334345671759d521ee6fbe7f6e1e7392ee312ab4 (diff) | |
download | podman-d2f981fd0babda31c89ac031dabc671d76b8f25a.tar.gz podman-d2f981fd0babda31c89ac031dabc671d76b8f25a.tar.bz2 podman-d2f981fd0babda31c89ac031dabc671d76b8f25a.zip |
Add podman refresh command
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
Closes: #981
Approved by: baude
Diffstat (limited to 'cmd/podman/refresh.go')
-rw-r--r-- | cmd/podman/refresh.go | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/cmd/podman/refresh.go b/cmd/podman/refresh.go new file mode 100644 index 000000000..8a1cee717 --- /dev/null +++ b/cmd/podman/refresh.go @@ -0,0 +1,60 @@ +package main + +import ( + "fmt" + "os" + + "github.com/pkg/errors" + "github.com/projectatomic/libpod/cmd/podman/libpodruntime" + "github.com/urfave/cli" +) + +var ( + refreshFlags = []cli.Flag{} + + refreshDescription = "The refresh command resets the state of all containers to handle database changes after a Podman upgrade. All running containers will be restarted." + + refreshCommand = cli.Command{ + Name: "refresh", + Usage: "Refresh container state", + Description: refreshDescription, + Flags: refreshFlags, + Action: refreshCmd, + UseShortOptionHandling: true, + } +) + +func refreshCmd(c *cli.Context) error { + if len(c.Args()) > 0 { + return errors.Errorf("refresh does not accept any arguments") + } + + if err := validateFlags(c, refreshFlags); err != nil { + return err + } + + runtime, err := libpodruntime.GetRuntime(c) + if err != nil { + return errors.Wrapf(err, "error creating libpod runtime") + } + defer runtime.Shutdown(false) + + allCtrs, err := runtime.GetAllContainers() + if err != nil { + return err + } + + ctx := getContext() + + var lastError error + for _, ctr := range allCtrs { + if err := ctr.Refresh(ctx); err != nil { + if lastError != nil { + fmt.Fprintln(os.Stderr, lastError) + } + lastError = errors.Wrapf(err, "error refreshing container %s state", ctr.ID()) + } + } + + return lastError +} |