diff options
author | haircommander <pehunt@redhat.com> | 2018-07-23 16:02:46 -0400 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-07-25 17:54:27 +0000 |
commit | 8ce0e0b2460220fccbb31fced940604b55d8a195 (patch) | |
tree | 87af55c87040d4f61424f19e19e778051e184a41 /cmd | |
parent | 7789284cbe8f5068d66c90c257b9784505d4a027 (diff) | |
download | podman-8ce0e0b2460220fccbb31fced940604b55d8a195.tar.gz podman-8ce0e0b2460220fccbb31fced940604b55d8a195.tar.bz2 podman-8ce0e0b2460220fccbb31fced940604b55d8a195.zip |
Added pod restart
With tests, man page and completions.
Signed-off-by: haircommander <pehunt@redhat.com>
Closes: #1152
Approved by: rhatdan
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/podman/pod.go | 1 | ||||
-rw-r--r-- | cmd/podman/pod_restart.go | 98 |
2 files changed, 99 insertions, 0 deletions
diff --git a/cmd/podman/pod.go b/cmd/podman/pod.go index e19fea01b..664af4252 100644 --- a/cmd/podman/pod.go +++ b/cmd/podman/pod.go @@ -19,6 +19,7 @@ var ( Subcommands: []cli.Command{ podCreateCommand, podPsCommand, + podRestartCommand, podRmCommand, podStartCommand, podStopCommand, diff --git a/cmd/podman/pod_restart.go b/cmd/podman/pod_restart.go new file mode 100644 index 000000000..cd0081c8c --- /dev/null +++ b/cmd/podman/pod_restart.go @@ -0,0 +1,98 @@ +package main + +import ( + "fmt" + + "github.com/pkg/errors" + "github.com/projectatomic/libpod/cmd/podman/libpodruntime" + "github.com/projectatomic/libpod/libpod" + "github.com/sirupsen/logrus" + "github.com/urfave/cli" +) + +var ( + podRestartFlags = []cli.Flag{ + cli.BoolFlag{ + Name: "all, a", + Usage: "restart all pods", + }, + LatestFlag, + } + podRestartDescription = `Restarts one or more pods. The pod ID or name can be used.` + + podRestartCommand = cli.Command{ + Name: "restart", + Usage: "Restart one or more pods", + Description: podRestartDescription, + Flags: podRestartFlags, + Action: podRestartCmd, + ArgsUsage: "POD-NAME|POD-ID [POD-NAME|POD-ID ...]", + UseShortOptionHandling: true, + } +) + +func podRestartCmd(c *cli.Context) error { + if err := checkMutuallyExclusiveFlags(c); err != nil { + return err + } + + runtime, err := libpodruntime.GetRuntime(c) + if err != nil { + return errors.Wrapf(err, "could not get runtime") + } + defer runtime.Shutdown(false) + + args := c.Args() + var pods []*libpod.Pod + var lastError error + + if c.Bool("all") { + pods, err = runtime.Pods() + if err != nil { + return errors.Wrapf(err, "unable to get running pods") + } + } + + if c.Bool("latest") { + pod, err := runtime.GetLatestPod() + if err != nil { + return errors.Wrapf(err, "unable to get latest pod") + } + pods = append(pods, pod) + } + + for _, i := range args { + pod, err := runtime.LookupPod(i) + if err != nil { + if lastError != nil { + logrus.Errorf("%q", lastError) + } + lastError = errors.Wrapf(err, "unable to find pod %s", i) + continue + } + pods = append(pods, pod) + } + + ctx := getContext() + for _, pod := range pods { + ctr_errs, err := pod.Restart(ctx) + if ctr_errs != nil { + for ctr, err := range ctr_errs { + if lastError != nil { + logrus.Errorf("%q", lastError) + } + lastError = errors.Wrapf(err, "unable to restart container %q on pod %q", ctr, pod.ID()) + } + continue + } + if err != nil { + if lastError != nil { + logrus.Errorf("%q", lastError) + } + lastError = errors.Wrapf(err, "unable to restart pod %q", pod.ID()) + continue + } + fmt.Println(pod.ID()) + } + return lastError +} |