mirror of
https://github.com/containers/podman.git
synced 2025-07-03 01:08:02 +08:00
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>
This commit is contained in:
@ -20,6 +20,8 @@ var (
|
||||
podCreateCommand,
|
||||
podPsCommand,
|
||||
podRmCommand,
|
||||
podStartCommand,
|
||||
podStopCommand,
|
||||
},
|
||||
}
|
||||
)
|
||||
|
@ -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
|
||||
}
|
||||
delPods = append(delPods, pod)
|
||||
}
|
||||
}
|
||||
force := c.IsSet("force")
|
||||
|
||||
for _, i := range args {
|
||||
pod, err := runtime.LookupPod(i)
|
||||
if err != nil {
|
||||
logrus.Errorf("%q", lastError)
|
||||
if lastError != nil {
|
||||
logrus.Errorf("%q", lastError)
|
||||
}
|
||||
lastError = errors.Wrapf(err, "unable to find pods %s", i)
|
||||
continue
|
||||
}
|
||||
delPods = append(delPods, pod)
|
||||
}
|
||||
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 {
|
||||
|
100
cmd/podman/pod_start.go
Normal file
100
cmd/podman/pod_start.go
Normal file
@ -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
|
||||
}
|
100
cmd/podman/pod_stop.go
Normal file
100
cmd/podman/pod_stop.go
Normal file
@ -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
|
||||
}
|
@ -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
|
||||
}
|
||||
|
@ -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 |[]()|
|
||||
| [podman-ps(1)](/docs/podman-ps.1.md) | Prints out information about containers |[](https://asciinema.org/a/bbT41kac6CwZ5giESmZLIaTLR)|
|
||||
| [podman-pull(1)](/docs/podman-pull.1.md) | Pull an image from a registry |[](https://asciinema.org/a/lr4zfoynHJOUNu1KaXa1dwG2X)|
|
||||
|
@ -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
|
||||
|
@ -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**
|
||||
|
||||
|
38
docs/podman-pod-start.1.md
Normal file
38
docs/podman-pod-start.1.md
Normal file
@ -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>
|
47
docs/podman-pod-stop.1.md
Normal file
47
docs/podman-pod-stop.1.md
Normal file
@ -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>
|
@ -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>
|
||||
|
140
test/e2e/pod_start_test.go
Normal file
140
test/e2e/pod_start_test.go
Normal file
@ -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))
|
||||
})
|
||||
})
|
141
test/e2e/pod_stop_test.go
Normal file
141
test/e2e/pod_stop_test.go
Normal file
@ -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))
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user