From c34e4541774e2b7ff08017e123c0ef0836a66be4 Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Thu, 3 May 2018 17:12:00 -0400 Subject: Optionally init() during container restart This allows us to restart containers that have never been started without error. This makes RestartWithTimeout work with running, stopped, and created containers. Signed-off-by: Matthew Heon Closes: #719 Approved by: rhatdan --- libpod/container_api.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'libpod/container_api.go') diff --git a/libpod/container_api.go b/libpod/container_api.go index f0742d9f1..0ddccfe8e 100644 --- a/libpod/container_api.go +++ b/libpod/container_api.go @@ -726,7 +726,7 @@ func (c *Container) RestartWithTimeout(ctx context.Context, timeout uint) error return errors.Wrapf(ErrCtrStateInvalid, "some dependencies of container %s are not started: %s", c.ID(), depString) } if c.state.State == ContainerStateUnknown || c.state.State == ContainerStatePaused { - return errors.Errorf("unable to restart a container in a paused or unknown state") + return errors.Wrapf(ErrCtrStateInvalid, "unable to restart a container in a paused or unknown state") } if c.state.State == ContainerStateRunning { @@ -737,7 +737,6 @@ func (c *Container) RestartWithTimeout(ctx context.Context, timeout uint) error if err := c.prepare(); err != nil { return err } - defer func() { if err != nil { if err2 := c.cleanup(); err2 != nil { @@ -751,6 +750,12 @@ func (c *Container) RestartWithTimeout(ctx context.Context, timeout uint) error if err := c.reinit(ctx); err != nil { return err } + } else if c.state.State == ContainerStateConfigured { + // Initialize the container if it has never been initialized + if err := c.init(ctx); err != nil { + return err + } } + return c.start() } -- cgit v1.2.3-54-g00ecf