correct stats err with non-running containers

when doing stats -a|--all, if you have non-running containers, we should
not error on not being able to get information like PID, etc on them.

Signed-off-by: baude <bbaude@redhat.com>
This commit is contained in:
baude
2018-10-22 10:46:41 -05:00
parent 5b2478ed87
commit 6362158615
2 changed files with 7 additions and 19 deletions

View File

@ -84,8 +84,7 @@ func statsCmd(c *cli.Context) error {
if ctr > 1 { if ctr > 1 {
return errors.Errorf("--all, --latest and containers cannot be used together") return errors.Errorf("--all, --latest and containers cannot be used together")
} else if ctr == 0 { } else if ctr == 0 {
// If user didn't specify, imply --all return errors.Errorf("you must specify --all, --latest, or at least one container")
all = true
} }
runtime, err := libpodruntime.GetRuntime(c) runtime, err := libpodruntime.GetRuntime(c)
@ -126,6 +125,10 @@ func statsCmd(c *cli.Context) error {
for _, ctr := range ctrs { for _, ctr := range ctrs {
initialStats, err := ctr.GetContainerStats(&libpod.ContainerStats{}) initialStats, err := ctr.GetContainerStats(&libpod.ContainerStats{})
if err != nil { if err != nil {
// when doing "all", dont worry about containers that are not running
if c.Bool("all") && errors.Cause(err) == libpod.ErrCtrRemoved || errors.Cause(err) == libpod.ErrNoSuchCtr || errors.Cause(err) == libpod.ErrCtrStateInvalid {
continue
}
return err return err
} }
containerStats[ctr.ID()] = initialStats containerStats[ctr.ID()] = initialStats

View File

@ -31,12 +31,6 @@ var _ = Describe("Podman stats", func() {
GinkgoWriter.Write([]byte(timedResult)) GinkgoWriter.Write([]byte(timedResult))
}) })
It("podman stats should run with no containers", func() {
session := podmanTest.Podman([]string{"stats", "--no-stream"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
})
It("podman stats with bogus container", func() { It("podman stats with bogus container", func() {
session := podmanTest.Podman([]string{"stats", "--no-stream", "123"}) session := podmanTest.Podman([]string{"stats", "--no-stream", "123"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
@ -53,15 +47,6 @@ var _ = Describe("Podman stats", func() {
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
}) })
It("podman stats on a running container no id", func() {
session := podmanTest.RunTopContainer("")
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"stats", "--no-stream"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
})
It("podman stats on all containers", func() { It("podman stats on all containers", func() {
session := podmanTest.RunTopContainer("") session := podmanTest.RunTopContainer("")
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
@ -75,7 +60,7 @@ var _ = Describe("Podman stats", func() {
session := podmanTest.RunTopContainer("") session := podmanTest.RunTopContainer("")
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"stats", "--no-stream", "--format", "\"{{.Container}}\""}) session = podmanTest.Podman([]string{"stats", "--all", "--no-stream", "--format", "\"{{.Container}}\""})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
}) })
@ -84,7 +69,7 @@ var _ = Describe("Podman stats", func() {
session := podmanTest.RunTopContainer("") session := podmanTest.RunTopContainer("")
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"stats", "--no-stream", "--format", "json"}) session = podmanTest.Podman([]string{"stats", "--all", "--no-stream", "--format", "json"})
session.WaitWithDefaultTimeout() session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0)) Expect(session.ExitCode()).To(Equal(0))
Expect(session.IsJSONOutputValid()).To(BeTrue()) Expect(session.IsJSONOutputValid()).To(BeTrue())