From 0b2c9c2acc38f51f871fd5a06aca205127a06d1d Mon Sep 17 00:00:00 2001
From: Matthew Heon <matthew.heon@pm.me>
Date: Mon, 29 Apr 2019 10:37:50 -0400
Subject: Add basic structure of podman init command

As part of this, rework the number of workers used by various
Podman tasks to match original behavior - need an explicit
fallthrough in the switch statement for that block to work as
expected.

Also, trivial change to Podman cleanup to work on initialized
containers - we need to reset to a different state after cleaning
up the OCI runtime.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
---
 libpod/container_api.go      |  2 +-
 libpod/container_internal.go | 16 +++++++++++-----
 2 files changed, 12 insertions(+), 6 deletions(-)

(limited to 'libpod')

diff --git a/libpod/container_api.go b/libpod/container_api.go
index 465b23831..5bfd869b3 100644
--- a/libpod/container_api.go
+++ b/libpod/container_api.go
@@ -40,7 +40,7 @@ func (c *Container) Init(ctx context.Context) (err error) {
 	if !(c.state.State == ContainerStateConfigured ||
 		c.state.State == ContainerStateStopped ||
 		c.state.State == ContainerStateExited) {
-		return errors.Wrapf(ErrCtrExists, "container %s has already been created in runtime", c.ID())
+		return errors.Wrapf(ErrCtrStateInvalid, "container %s has already been created in runtime", c.ID())
 	}
 
 	// don't recursively start
diff --git a/libpod/container_internal.go b/libpod/container_internal.go
index 927b71b2b..d0fbc10fe 100644
--- a/libpod/container_internal.go
+++ b/libpod/container_internal.go
@@ -811,8 +811,9 @@ func (c *Container) cleanupRuntime(ctx context.Context) error {
 	span.SetTag("struct", "container")
 	defer span.Finish()
 
-	// If the container is not ContainerStateStopped, do nothing
-	if c.state.State != ContainerStateStopped {
+	// If the container is not ContainerStateStopped or
+	// ContainerStateCreated, do nothing.
+	if c.state.State != ContainerStateStopped && c.state.State != ContainerStateCreated {
 		return nil
 	}
 
@@ -825,9 +826,14 @@ func (c *Container) cleanupRuntime(ctx context.Context) error {
 		return err
 	}
 
-	// Our state is now Exited, as we've removed ourself from
-	// the runtime.
-	c.state.State = ContainerStateExited
+	// If we were Stopped, we are now Exited, as we've removed ourself
+	// from the runtime.
+	// If we were Created, we are now Configured.
+	if c.state.State == ContainerStateStopped {
+		c.state.State = ContainerStateExited
+	} else if c.state.State == ContainerStateCreated {
+		c.state.State = ContainerStateConfigured
+	}
 
 	if c.valid {
 		if err := c.save(); err != nil {
-- 
cgit v1.2.3-54-g00ecf