diff --git a/cmd/podman/kube/play.go b/cmd/podman/kube/play.go index 93e8ed4d39..663c89de21 100644 --- a/cmd/podman/kube/play.go +++ b/cmd/podman/kube/play.go @@ -346,34 +346,26 @@ func playKube(cmd *cobra.Command, args []string) error { } func readerFromArg(fileName string) (*bytes.Reader, error) { - errURL := parse.ValidURL(fileName) - if fileName == "-" { // Read from stdin - data, err := io.ReadAll(os.Stdin) - if err != nil { - return nil, err - } - return bytes.NewReader(data), nil - } - if errURL == nil { + var reader io.Reader + switch { + case fileName == "-": // Read from stdin + reader = os.Stdin + case parse.ValidURL(fileName) == nil: response, err := http.Get(fileName) if err != nil { return nil, err } defer response.Body.Close() - - data, err := io.ReadAll(response.Body) + reader = response.Body + default: + f, err := os.Open(fileName) if err != nil { return nil, err } - return bytes.NewReader(data), nil + defer f.Close() + reader = f } - f, err := os.Open(fileName) - if err != nil { - return nil, err - } - defer f.Close() - - data, err := io.ReadAll(f) + data, err := io.ReadAll(reader) if err != nil { return nil, err } diff --git a/libpod/container_internal.go b/libpod/container_internal.go index 3cc3c735a2..9be8b9397e 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -1848,9 +1848,10 @@ func (c *Container) cleanupStorage() error { if c.valid { if err := c.save(); err != nil { if cleanupErr != nil { - logrus.Errorf("Unmounting container %s: %v", c.ID(), cleanupErr) + logrus.Errorf("Unmounting container %s: %v", c.ID(), err) + } else { + cleanupErr = err } - cleanupErr = err } } } @@ -1861,29 +1862,38 @@ func (c *Container) cleanupStorage() error { if err := overlay.Unmount(overlayBasePath); err != nil { if cleanupErr != nil { logrus.Errorf("Failed to clean up overlay mounts for %s: %v", c.ID(), err) + } else { + cleanupErr = fmt.Errorf("failed to clean up overlay mounts for %s: %w", c.ID(), err) } - cleanupErr = err } } if c.config.RootfsMapping != nil { - if err := unix.Unmount(c.config.Rootfs, 0); err != nil { - logrus.Errorf("Unmounting idmapped rootfs for container %s after mount error: %v", c.ID(), err) + if err := unix.Unmount(c.config.Rootfs, 0); err != nil && err != unix.EINVAL { + if cleanupErr != nil { + logrus.Errorf("Unmounting idmapped rootfs for container %s after mount error: %v", c.ID(), err) + } else { + cleanupErr = fmt.Errorf("unmounting idmapped rootfs for container %s after mount error: %w", c.ID(), err) + } } } for _, containerMount := range c.config.Mounts { if err := c.unmountSHM(containerMount); err != nil { if cleanupErr != nil { - logrus.Errorf("Unmounting container %s: %v", c.ID(), cleanupErr) + logrus.Errorf("Unmounting container %s: %v", c.ID(), err) + } else { + cleanupErr = fmt.Errorf("unmounting container %s: %w", c.ID(), err) } - cleanupErr = err } } if err := c.cleanupOverlayMounts(); err != nil { // If the container can't remove content report the error - logrus.Errorf("Failed to clean up overlay mounts for %s: %v", c.ID(), err) - cleanupErr = err + if cleanupErr != nil { + logrus.Errorf("Failed to clean up overlay mounts for %s: %v", c.ID(), err) + } else { + cleanupErr = fmt.Errorf("failed to clean up overlay mounts for %s: %w", c.ID(), err) + } } if c.config.Rootfs != "" { @@ -1901,8 +1911,9 @@ func (c *Container) cleanupStorage() error { } else { if cleanupErr != nil { logrus.Errorf("Cleaning up container %s storage: %v", c.ID(), cleanupErr) + } else { + cleanupErr = fmt.Errorf("cleaning up container %s storage: %w", c.ID(), cleanupErr) } - cleanupErr = err } } @@ -1911,9 +1922,10 @@ func (c *Container) cleanupStorage() error { vol, err := c.runtime.state.Volume(v.Name) if err != nil { if cleanupErr != nil { - logrus.Errorf("Unmounting container %s: %v", c.ID(), cleanupErr) + logrus.Errorf("Retrieving named volume %s for container %s: %v", v.Name, c.ID(), err) + } else { + cleanupErr = fmt.Errorf("retrieving named volume %s for container %s: %w", v.Name, c.ID(), err) } - cleanupErr = fmt.Errorf("retrieving named volume %s for container %s: %w", v.Name, c.ID(), err) // We need to try and unmount every volume, so continue // if they fail. @@ -1924,9 +1936,10 @@ func (c *Container) cleanupStorage() error { vol.lock.Lock() if err := vol.unmount(false); err != nil { if cleanupErr != nil { - logrus.Errorf("Unmounting container %s: %v", c.ID(), cleanupErr) + logrus.Errorf("Unmounting volume %s for container %s: %v", vol.Name(), c.ID(), err) + } else { + cleanupErr = fmt.Errorf("unmounting volume %s for container %s: %w", vol.Name(), c.ID(), err) } - cleanupErr = fmt.Errorf("unmounting volume %s for container %s: %w", vol.Name(), c.ID(), err) } vol.lock.Unlock() } diff --git a/test/system/251-system-service.bats b/test/system/251-system-service.bats index 7a772e2ef4..4ad2cd0311 100644 --- a/test/system/251-system-service.bats +++ b/test/system/251-system-service.bats @@ -15,7 +15,7 @@ function teardown() { basic_teardown } -@test "podman systerm service returns error" { +@test "podman system service returns error" { skip_if_remote "podman system service unavailable over remote" run_podman 125 system service localhost:9292 is "$output" "Error: API Service endpoint scheme \"localhost\" is not supported. Try tcp://localhost:9292 or unix:/localhost:9292" diff --git a/test/system/700-play.bats b/test/system/700-play.bats index 9e5f3bd99f..3c7a1eaeee 100644 --- a/test/system/700-play.bats +++ b/test/system/700-play.bats @@ -480,8 +480,7 @@ _EOF is "$output" ".*Error: inspecting object: no such object: \"test_pod-test\"" run_podman pod rm -a -f - run_podman rm -a -f - run_podman rm -f -t0 myyaml + run_podman rm -a -f -t0 } @test "podman play with init container" {