aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2019-03-12 16:12:09 -0400
committerMatthew Heon <matthew.heon@pm.me>2019-03-13 10:18:51 -0400
commit3b5805d521b8fa8a948efe74133ad1148a4c180d (patch)
treec5bfc0a0e48019e4dacda504532e1c6e00b60711
parent8b3f759800ebd6e53e0a807728ede633aa9bdb36 (diff)
downloadpodman-3b5805d521b8fa8a948efe74133ad1148a4c180d.tar.gz
podman-3b5805d521b8fa8a948efe74133ad1148a4c180d.tar.bz2
podman-3b5805d521b8fa8a948efe74133ad1148a4c180d.zip
Add event on container death
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
-rw-r--r--libpod/container_api.go2
-rw-r--r--libpod/container_internal.go5
-rw-r--r--libpod/events.go13
-rw-r--r--libpod/events/events.go2
-rw-r--r--libpod/oci.go2
5 files changed, 21 insertions, 3 deletions
diff --git a/libpod/container_api.go b/libpod/container_api.go
index 3698a15ec..8db12c14a 100644
--- a/libpod/container_api.go
+++ b/libpod/container_api.go
@@ -89,7 +89,6 @@ func (c *Container) Start(ctx context.Context, recursive bool) (err error) {
}
// Start the container
- defer c.newContainerEvent(events.Start)
return c.start()
}
@@ -127,7 +126,6 @@ func (c *Container) StartAndAttach(ctx context.Context, streams *AttachStreams,
}
close(attachChan)
}()
- c.newContainerEvent(events.Start)
c.newContainerEvent(events.Attach)
return attachChan, nil
}
diff --git a/libpod/container_internal.go b/libpod/container_internal.go
index 330745314..bea7acd69 100644
--- a/libpod/container_internal.go
+++ b/libpod/container_internal.go
@@ -211,6 +211,9 @@ func (c *Container) handleExitFile(exitFile string, fi os.FileInfo) error {
c.state.Exited = true
+ // Write an event for the container's death
+ c.newContainerExitedEvent(c.state.ExitCode)
+
return nil
}
@@ -948,6 +951,8 @@ func (c *Container) start() error {
c.state.State = ContainerStateRunning
+ defer c.newContainerEvent(events.Start)
+
return c.save()
}
diff --git a/libpod/events.go b/libpod/events.go
index 9806c117b..879aeb6c5 100644
--- a/libpod/events.go
+++ b/libpod/events.go
@@ -19,6 +19,19 @@ func (c *Container) newContainerEvent(status events.Status) {
}
}
+// newContainerExitedEvent creates a new event for a container's death
+func (c *Container) newContainerExitedEvent(exitCode int32) {
+ e := events.NewEvent(events.Exited)
+ e.ID = c.ID()
+ e.Name = c.Name()
+ e.Image = c.config.RootfsImageName
+ e.Type = events.Container
+ e.ContainerExitCode = int(exitCode)
+ if err := e.Write(c.runtime.config.EventsLogFilePath); err != nil {
+ logrus.Errorf("unable to write event to %s", c.runtime.config.EventsLogFilePath)
+ }
+}
+
// newPodEvent creates a new event for a libpod pod
func (p *Pod) newPodEvent(status events.Status) {
e := events.NewEvent(status)
diff --git a/libpod/events/events.go b/libpod/events/events.go
index 186790500..48bbbb00e 100644
--- a/libpod/events/events.go
+++ b/libpod/events/events.go
@@ -60,6 +60,8 @@ const (
Create Status = "create"
// Exec ...
Exec Status = "exec"
+ // Exited indicates that a container's process died
+ Exited Status = "died"
// Export ...
Export Status = "export"
// History ...
diff --git a/libpod/oci.go b/libpod/oci.go
index c3b5f9af2..30360d289 100644
--- a/libpod/oci.go
+++ b/libpod/oci.go
@@ -477,7 +477,7 @@ func (r *OCIRuntime) updateContainerStatus(ctr *Container, useRunc bool) error {
// If not using runc, we don't need to do most of this.
if !useRunc {
// If the container's not running, nothing to do.
- if ctr.state.State != ContainerStateRunning {
+ if ctr.state.State != ContainerStateRunning && ctr.state.State != ContainerStatePaused {
return nil
}