summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaircommander <pehunt@redhat.com>2018-07-19 14:58:48 -0400
committerhaircommander <pehunt@redhat.com>2018-07-20 08:44:44 -0400
commit17f257140eaecbe39f679d27df85573eb15a7d51 (patch)
tree0cffee6b81f006b89ca01c08148e17711acf532b
parentba1871dac033783ab0329c9b3c9113a34a90992f (diff)
downloadpodman-17f257140eaecbe39f679d27df85573eb15a7d51.tar.gz
podman-17f257140eaecbe39f679d27df85573eb15a7d51.tar.bz2
podman-17f257140eaecbe39f679d27df85573eb15a7d51.zip
Added pod start and stop
As well as added tests, man pages, and completions. Also reformatted and refactored a couple of other small things in the other pod commands. Signed-off-by: haircommander <pehunt@redhat.com>
-rw-r--r--cmd/podman/pod.go2
-rw-r--r--cmd/podman/pod_rm.go56
-rw-r--r--cmd/podman/pod_start.go100
-rw-r--r--cmd/podman/pod_stop.go100
-rw-r--r--cmd/podman/utils.go18
-rw-r--r--commands.md4
-rw-r--r--completions/bash/podman45
-rw-r--r--docs/podman-pod-rm.1.md2
-rw-r--r--docs/podman-pod-start.1.md38
-rw-r--r--docs/podman-pod-stop.1.md47
-rw-r--r--docs/podman-pod.1.md2
-rw-r--r--test/e2e/pod_start_test.go140
-rw-r--r--test/e2e/pod_stop_test.go141
13 files changed, 661 insertions, 34 deletions
diff --git a/cmd/podman/pod.go b/cmd/podman/pod.go
index 6cf2920a5..e19fea01b 100644
--- a/cmd/podman/pod.go
+++ b/cmd/podman/pod.go
@@ -20,6 +20,8 @@ var (
podCreateCommand,
podPsCommand,
podRmCommand,
+ podStartCommand,
+ podStopCommand,
},
}
)
diff --git a/cmd/podman/pod_rm.go b/cmd/podman/pod_rm.go
index 8cc46761e..8b4c09cfe 100644
--- a/cmd/podman/pod_rm.go
+++ b/cmd/podman/pod_rm.go
@@ -2,24 +2,24 @@ package main
import (
"fmt"
- "os"
"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 (
podRmFlags = []cli.Flag{
cli.BoolFlag{
- Name: "force, f",
- Usage: "Force removal of a running pod by first stopping all containers, then removing all containers in the pod. The default is false",
- },
- cli.BoolFlag{
Name: "all, a",
Usage: "Remove all pods",
},
+ cli.BoolFlag{
+ Name: "force, f",
+ Usage: "Force removal of a running pod by first stopping all containers, then removing all containers in the pod. The default is false",
+ },
LatestFlag,
}
podRmDescription = "Remove one or more pods"
@@ -38,15 +38,9 @@ var (
// saveCmd saves the image to either docker-archive or oci
func podRmCmd(c *cli.Context) error {
- ctx := getContext()
- if err := validateFlags(c, rmFlags); err != nil {
+ if err := checkMutuallyExclusiveFlags(c); err != nil {
return err
}
-
- if c.Bool("latest") && c.Bool("all") {
- return errors.Errorf("--all and --latest cannot be used together")
- }
-
runtime, err := libpodruntime.GetRuntime(c)
if err != nil {
return errors.Wrapf(err, "could not get runtime")
@@ -54,45 +48,43 @@ func podRmCmd(c *cli.Context) error {
defer runtime.Shutdown(false)
args := c.Args()
-
- if len(args) == 0 && !c.Bool("all") && !c.Bool("latest") {
- return errors.Errorf("specify one or more pods to remove")
- }
-
+ ctx := getContext()
var delPods []*libpod.Pod
var lastError error
- if c.IsSet("all") {
+ if c.Bool("all") {
delPods, err = runtime.GetAllPods()
if err != nil {
return errors.Wrapf(err, "unable to get pod list")
}
- } else if c.IsSet("latest") {
+ }
+
+ if c.Bool("latest") {
delPod, err := runtime.GetLatestPod()
if err != nil {
return errors.Wrapf(err, "unable to get latest pod")
}
delPods = append(delPods, delPod)
- } else {
- for _, i := range args {
- pod, err := runtime.LookupPod(i)
- if err != nil {
- fmt.Fprintln(os.Stderr, err)
- if lastError != nil {
- fmt.Fprintln(os.Stderr, lastError)
- }
- lastError = errors.Wrapf(err, "unable to find pods %s", i)
- continue
+ }
+
+ for _, i := range args {
+ pod, err := runtime.LookupPod(i)
+ if err != nil {
+ logrus.Errorf("%q", lastError)
+ if lastError != nil {
+ logrus.Errorf("%q", lastError)
}
- delPods = append(delPods, pod)
+ lastError = errors.Wrapf(err, "unable to find pods %s", i)
+ continue
}
+ delPods = append(delPods, pod)
}
- force := c.IsSet("force")
+ force := c.Bool("force")
for _, pod := range delPods {
err = runtime.RemovePod(ctx, pod, force, force)
if err != nil {
if lastError != nil {
- fmt.Fprintln(os.Stderr, lastError)
+ logrus.Errorf("%q", lastError)
}
lastError = errors.Wrapf(err, "failed to delete pod %v", pod.ID())
} else {
diff --git a/cmd/podman/pod_start.go b/cmd/podman/pod_start.go
new file mode 100644
index 000000000..1e82bc0ee
--- /dev/null
+++ b/cmd/podman/pod_start.go
@@ -0,0 +1,100 @@
+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 (
+ podStartFlags = []cli.Flag{
+ cli.BoolFlag{
+ Name: "all, a",
+ Usage: "start all running pods",
+ },
+ LatestFlag,
+ }
+ podStartDescription = `
+ podman pod start
+
+ Starts one or more pods. The pod name or ID can be used.
+`
+
+ podStartCommand = cli.Command{
+ Name: "start",
+ Usage: "Start one or more pods",
+ Description: podStartDescription,
+ Flags: podStartFlags,
+ Action: podStartCmd,
+ ArgsUsage: "POD-NAME [POD-NAME ...]",
+ UseShortOptionHandling: true,
+ }
+)
+
+func podStartCmd(c *cli.Context) error {
+ if err := checkMutuallyExclusiveFlags(c); err != nil {
+ return err
+ }
+
+ runtime, err := libpodruntime.GetRuntime(c)
+ if err != nil {
+ return errors.Wrapf(err, "error creating libpod 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.Start(ctx)
+ if err != nil {
+ if lastError != nil {
+ logrus.Errorf("%q", lastError)
+ }
+ lastError = errors.Wrapf(err, "unable to start pod %q", pod.ID())
+ continue
+ } else if ctr_errs != nil {
+ for ctr, err := range ctr_errs {
+ if lastError != nil {
+ logrus.Errorf("%q", lastError)
+ }
+ lastError = errors.Wrapf(err, "unable to start container %q on pod %q", ctr, pod.ID())
+ }
+ continue
+ }
+ fmt.Println(pod.ID())
+ }
+
+ return lastError
+}
diff --git a/cmd/podman/pod_stop.go b/cmd/podman/pod_stop.go
new file mode 100644
index 000000000..0dcbdaad6
--- /dev/null
+++ b/cmd/podman/pod_stop.go
@@ -0,0 +1,100 @@
+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 (
+ podStopFlags = []cli.Flag{
+ cli.BoolFlag{
+ Name: "all, a",
+ Usage: "stop all running pods",
+ },
+ LatestFlag,
+ }
+ podStopDescription = `
+ podman pod stop
+
+ Stops one or more running pods. The pod name or ID can be used.
+`
+
+ podStopCommand = cli.Command{
+ Name: "stop",
+ Usage: "Stop one or more pods",
+ Description: podStopDescription,
+ Flags: podStopFlags,
+ Action: podStopCmd,
+ ArgsUsage: "POD-NAME [POD-NAME ...]",
+ }
+)
+
+func podStopCmd(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)
+ }
+
+ for _, pod := range pods {
+ // set cleanup to true to clean mounts and namespaces
+ ctr_errs, err := pod.Stop(true)
+ if err != nil {
+ if lastError != nil {
+ logrus.Errorf("%q", lastError)
+ }
+ lastError = errors.Wrapf(err, "unable to stop pod %q", pod.ID())
+ continue
+ } else if ctr_errs != nil {
+ for ctr, err := range ctr_errs {
+ if lastError != nil {
+ logrus.Errorf("%q", lastError)
+ }
+ lastError = errors.Wrapf(err, "unable to stop container %q on pod %q", ctr, pod.ID())
+ }
+ continue
+ }
+ fmt.Println(pod.ID())
+ }
+ return lastError
+}
diff --git a/cmd/podman/utils.go b/cmd/podman/utils.go
index 21bc1ae74..9d9e760d6 100644
--- a/cmd/podman/utils.go
+++ b/cmd/podman/utils.go
@@ -11,6 +11,7 @@ import (
"github.com/pkg/errors"
"github.com/projectatomic/libpod/libpod"
"github.com/sirupsen/logrus"
+ "github.com/urfave/cli"
"golang.org/x/crypto/ssh/terminal"
"k8s.io/client-go/tools/remotecommand"
)
@@ -156,3 +157,20 @@ func (f *RawTtyFormatter) Format(entry *logrus.Entry) ([]byte, error) {
return bytes, err
}
+
+func checkMutuallyExclusiveFlags(c *cli.Context) error {
+ argLen := len(c.Args())
+ if (c.Bool("all") || c.Bool("latest")) && argLen > 0 {
+ return errors.Errorf("no arguments are needed with --all or --latest")
+ }
+ if c.Bool("all") && c.Bool("latest") {
+ return errors.Errorf("--all and --latest cannot be used together")
+ }
+ if argLen < 1 && !c.Bool("all") && !c.Bool("latest") {
+ return errors.Errorf("you must provide at least one pod name or id")
+ }
+ if err := validateFlags(c, startFlags); err != nil {
+ return err
+ }
+ return nil
+}
diff --git a/commands.md b/commands.md
index 35f04e558..f15ff1c3d 100644
--- a/commands.md
+++ b/commands.md
@@ -32,7 +32,9 @@
| [podman-pod(1)](/docs/podman-pod.1.md) | Simple management tool for groups of containers, called pods ||
| [podman-pod-create(1)](/docs/podman-pod-create.1.md) | Create a new pod ||
| [podman-pod-ps(1)](/docs/podman-pod-ps.1.md) | List the pods on the system ||
-| [podman-pod-rm(1)](/docs/podman-pod-rm.1.md) | Remove on or more pods ||
+| [podman-pod-rm(1)](/docs/podman-pod-rm.1.md) | Remove one or more pods ||
+| [podman-pod-start(1)](/docs/podman-pod-start.1.md) | Start one or more pods ||
+| [podman-pod-stop(1)](/docs/podman-pod-stop.1.md) | Stop one or more pods ||
| [podman-port(1)](/docs/podman-port.1.md) | List port mappings for running containers |[![...](/docs/play.png)]()|
| [podman-ps(1)](/docs/podman-ps.1.md) | Prints out information about containers |[![...](/docs/play.png)](https://asciinema.org/a/bbT41kac6CwZ5giESmZLIaTLR)|
| [podman-pull(1)](/docs/podman-pull.1.md) | Pull an image from a registry |[![...](/docs/play.png)](https://asciinema.org/a/lr4zfoynHJOUNu1KaXa1dwG2X)|
diff --git a/completions/bash/podman b/completions/bash/podman
index 424370904..11203e52d 100644
--- a/completions/bash/podman
+++ b/completions/bash/podman
@@ -2144,6 +2144,49 @@ _podman_pod_rm() {
esac
}
+_podman_pod_start() {
+ local options_with_args="
+ "
+
+ local boolean_options="
+ all
+ a
+ latest
+ l
+ "
+ _complete_ "$options_with_args" "$boolean_options"
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
+ ;;
+ *)
+ __podman_complete_pod_names
+ ;;
+ esac
+}
+
+_podman_pod_stop() {
+ local options_with_args="
+ "
+
+ local boolean_options="
+ all
+ a
+ cleanup
+ latest
+ l
+ "
+ _complete_ "$options_with_args" "$boolean_options"
+ case "$cur" in
+ -*)
+ COMPREPLY=($(compgen -W "$boolean_options $options_with_args" -- "$cur"))
+ ;;
+ *)
+ __podman_complete_pod_names
+ ;;
+ esac
+}
+
_podman_pod() {
local boolean_options="
--help
@@ -2153,6 +2196,8 @@ _podman_pod() {
create
ps
rm
+ start
+ stop
"
local aliases="
list
diff --git a/docs/podman-pod-rm.1.md b/docs/podman-pod-rm.1.md
index 3b571ee9a..834e0d0bb 100644
--- a/docs/podman-pod-rm.1.md
+++ b/docs/podman-pod-rm.1.md
@@ -17,7 +17,7 @@ Remove all pods. Can be used in conjunction with \-f as well.
**--latest, -l**
-Instead of providing the pod name or ID, use the last created pod.
+Instead of providing the pod name or ID, remove the last created pod.
**--force, f**
diff --git a/docs/podman-pod-start.1.md b/docs/podman-pod-start.1.md
new file mode 100644
index 000000000..5d30db012
--- /dev/null
+++ b/docs/podman-pod-start.1.md
@@ -0,0 +1,38 @@
+% podman-pod-start "1"
+
+## NAME
+podman\-pod\-start - Start one or more pods
+
+## SYNOPSIS
+**podman pod start** [*options*] *pod* ...
+
+## DESCRIPTION
+Start containers in one or more pods. You may use pod IDs or names as input. The pod must have a container attached
+to be started.
+
+## OPTIONS
+
+**--all, -a**
+
+Starts all pods
+
+**--latest, -l**
+
+Instead of providing the pod name or ID, start the last created pod.
+
+## EXAMPLE
+
+podman pod start mywebserverpod
+
+podman pod start 860a4b23 5421ab4
+
+podman pod start --latest
+
+podman pod start --all
+
+
+## SEE ALSO
+podman-pod(1), podman-pod-stop(1), podman-start(1)
+
+## HISTORY
+July 2018, Adapted from podman start man page by Peter Hunt <pehunt@redhat.com>
diff --git a/docs/podman-pod-stop.1.md b/docs/podman-pod-stop.1.md
new file mode 100644
index 000000000..05e88041f
--- /dev/null
+++ b/docs/podman-pod-stop.1.md
@@ -0,0 +1,47 @@
+% podman-pod-stop "1"
+
+## NAME
+podman\-pod\-stop - Stop one or more pods
+
+## SYNOPSIS
+**podman pod stop** [*options*] *pod* ...
+
+## DESCRIPTION
+Stop containers in one or more pods. You may use pod IDs or names as input.
+
+## OPTIONS
+
+**--all, -a**
+
+Stops all pods
+
+**--latest, -l**
+
+Instead of providing the pod name or ID, stop the last created pod.
+
+## EXAMPLE
+
+podman pod stop mywebserverpod
+cc8f0bea67b1a1a11aec1ecd38102a1be4b145577f21fc843c7c83b77fc28907
+
+podman pod stop 490eb 3557fb
+490eb241aaf704d4dd2629904410fe4aa31965d9310a735f8755267f4ded1de5
+3557fbea6ad61569de0506fe037479bd9896603c31d3069a6677f23833916fab
+
+3557fbea6ad61569de0506fe037479bd9896603c31d3069a6677f23833916fab
+
+podman pod stop --latest
+3557fbea6ad61569de0506fe037479bd9896603c31d3069a6677f23833916fab
+
+podman pod stop --all
+19456b4cd557eaf9629825113a552681a6013f8c8cad258e36ab825ef536e818
+3557fbea6ad61569de0506fe037479bd9896603c31d3069a6677f23833916fab
+490eb241aaf704d4dd2629904410fe4aa31965d9310a735f8755267f4ded1de5
+70c358daecf71ef9be8f62404f926080ca0133277ef7ce4f6aa2d5af6bb2d3e9
+cc8f0bea67b1a1a11aec1ecd38102a1be4b145577f21fc843c7c83b77fc28907
+
+## SEE ALSO
+podman-pod(1), podman-pod-start(1), podman-stop(1)
+
+## HISTORY
+July 2018, Originally compiled by Peter Hunt <pehunt@redhat.com>
diff --git a/docs/podman-pod.1.md b/docs/podman-pod.1.md
index 511a5841f..9aee75e81 100644
--- a/docs/podman-pod.1.md
+++ b/docs/podman-pod.1.md
@@ -16,6 +16,8 @@ podman pod is a set of subcommands that manage pods, or groups of containers.
| [podman-pod-create(1)](podman-pod-create.1.md) | Create a new pod. |
| [podman-pod-ps(1)](podman-pod-ps.1.md) | Prints out information about pods. |
| [podman-pod-rm(1)](podman-pod-rm.1.md) | Remove one or more pods. |
+| [podman-pod-start(1)](podman-pod-start.1.md) | Start one or more pods. |
+| [podman-pod-stop(1)](podman-pod-stop.1.md) | Stop one or more pods. |
## HISTORY
July 2018, Originally compiled by Peter Hunt <pehunt@redhat.com>
diff --git a/test/e2e/pod_start_test.go b/test/e2e/pod_start_test.go
new file mode 100644
index 000000000..682aedd72
--- /dev/null
+++ b/test/e2e/pod_start_test.go
@@ -0,0 +1,140 @@
+package integration
+
+import (
+ "os"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Podman pod start", func() {
+ var (
+ tempdir string
+ err error
+ podmanTest PodmanTest
+ )
+
+ BeforeEach(func() {
+ tempdir, err = CreateTempDirInTempDir()
+ if err != nil {
+ os.Exit(1)
+ }
+ podmanTest = PodmanCreate(tempdir)
+ podmanTest.RestoreAllArtifacts()
+ })
+
+ AfterEach(func() {
+ podmanTest.CleanupPod()
+ })
+
+ It("podman pod start bogus pod", func() {
+ session := podmanTest.Podman([]string{"pod", "start", "123"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(125))
+ })
+
+ It("podman pod start single empty pod", func() {
+ session := podmanTest.Podman([]string{"pod", "create"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ cid := session.OutputToString()
+
+ session = podmanTest.Podman([]string{"pod", "start", cid})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(125))
+ })
+
+ It("podman pod start single pod by name", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "ls"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "start", "foobar99"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ })
+
+ It("podman pod start multiple pods", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+ cid1 := session.OutputToString()
+
+ session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
+ session2.WaitWithDefaultTimeout()
+ cid2 := session2.OutputToString()
+
+ session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "start", cid1, cid2})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
+ })
+
+ It("podman pod start all pods", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+
+ session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
+ session2.WaitWithDefaultTimeout()
+
+ session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "start", "--all"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(2))
+ })
+
+ It("podman pod start latest pod", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+
+ session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
+ session2.WaitWithDefaultTimeout()
+
+ session = podmanTest.Podman([]string{"create", "--pod", "foobar100", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "start", "--latest"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
+ })
+
+ It("podman pod start multiple pods with bogus", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+ cid1 := session.OutputToString()
+
+ session = podmanTest.Podman([]string{"create", "--pod", "foobar99", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "start", cid1, "doesnotexist"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(125))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
+ })
+})
diff --git a/test/e2e/pod_stop_test.go b/test/e2e/pod_stop_test.go
new file mode 100644
index 000000000..c954f584d
--- /dev/null
+++ b/test/e2e/pod_stop_test.go
@@ -0,0 +1,141 @@
+package integration
+
+import (
+ "os"
+
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+)
+
+var _ = Describe("Podman pod stop", func() {
+ var (
+ tempdir string
+ err error
+ podmanTest PodmanTest
+ )
+
+ BeforeEach(func() {
+ tempdir, err = CreateTempDirInTempDir()
+ if err != nil {
+ os.Exit(1)
+ }
+ podmanTest = PodmanCreate(tempdir)
+ podmanTest.RestoreAllArtifacts()
+ })
+
+ AfterEach(func() {
+ podmanTest.CleanupPod()
+ })
+
+ It("podman pod stop bogus pod", func() {
+ session := podmanTest.Podman([]string{"pod", "stop", "123"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(125))
+ })
+
+ It("podman pod stop single empty pod", func() {
+ session := podmanTest.Podman([]string{"pod", "create"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ cid := session.OutputToString()
+
+ session = podmanTest.Podman([]string{"pod", "stop", cid})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ })
+
+ It("podman pod stop single pod by name", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.RunTopContainerInPod("", "foobar99")
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "stop", "foobar99"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
+ })
+
+ It("podman pod stop multiple pods", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+ cid1 := session.OutputToString()
+
+ session = podmanTest.RunTopContainerInPod("", "foobar99")
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
+ session2.WaitWithDefaultTimeout()
+ cid2 := session2.OutputToString()
+
+ session = podmanTest.RunTopContainerInPod("", "foobar100")
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "stop", cid1, cid2})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
+ })
+
+ It("podman pod stop all pods", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+
+ session = podmanTest.RunTopContainerInPod("", "foobar99")
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
+ session2.WaitWithDefaultTimeout()
+
+ session = podmanTest.RunTopContainerInPod("", "foobar100")
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "stop", "--all"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
+ })
+
+ It("podman pod stop latest pod", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+
+ session = podmanTest.RunTopContainerInPod("", "foobar99")
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session2 := podmanTest.Podman([]string{"pod", "create", "--name", "foobar100"})
+ session2.WaitWithDefaultTimeout()
+
+ session = podmanTest.RunTopContainerInPod("", "foobar100")
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "stop", "--latest"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(1))
+ })
+
+ It("podman pod stop multiple pods with bogus", func() {
+ session := podmanTest.Podman([]string{"pod", "create", "--name", "foobar99"})
+ session.WaitWithDefaultTimeout()
+ cid1 := session.OutputToString()
+
+ session = podmanTest.RunTopContainerInPod("", "foobar99")
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ session = podmanTest.Podman([]string{"pod", "stop", cid1, "doesnotexist"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(125))
+ Expect(podmanTest.NumberOfContainersRunning()).To(Equal(0))
+ })
+})