Merge pull request #966 from baude/exit_code

BUGFIX: Invalid return codes in kpod
This commit is contained in:
Daniel J Walsh 2017-10-05 08:29:12 -04:00 committed by GitHub
commit 06e8fb9fdf
4 changed files with 38 additions and 4 deletions

View file

@ -23,7 +23,7 @@ const (
cniBinDir = "/opt/cni/bin/"
cgroupManager = oci.CgroupfsCgroupsManager
lockPath = "/run/crio.lock"
containerExitsDir = "/var/run/kpod/exits"
containerExitsDir = oci.ContainerExitsDir
)
// Config represents the entire set of configuration values that can be set for

View file

@ -3,6 +3,7 @@ package libkpod
import (
"encoding/json"
"os"
"time"
"k8s.io/apimachinery/pkg/fields"
pb "k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime"
@ -22,7 +23,7 @@ type ContainerData struct {
LogPath string
Labels fields.Set
Annotations fields.Set
State *oci.ContainerState
State *ContainerState
Metadata *pb.ContainerMetadata
BundlePath string
StopSignal string
@ -49,6 +50,17 @@ type driverData struct {
Data map[string]string
}
// ContainerState represents the status of a container.
type ContainerState struct {
specs.State
Created time.Time `json:"created"`
Started time.Time `json:"started,omitempty"`
Finished time.Time `json:"finished,omitempty"`
ExitCode int32 `json:"exitCode"`
OOMKilled bool `json:"oomKilled,omitempty"`
Error string `json:"error,omitempty"`
}
// GetContainerData gets the ContainerData for a container with the given name in the given store.
// If size is set to true, it will also determine the size of the container
func (c *ContainerServer) GetContainerData(name string, size bool) (*ContainerData, error) {
@ -110,7 +122,7 @@ func (c *ContainerServer) GetContainerData(name string, size bool) (*ContainerDa
LogPath: ctr.LogPath(),
Labels: ctr.Labels(),
Annotations: ctr.Annotations(),
State: ctr.State(),
State: c.State(ctr),
Metadata: ctr.Metadata(),
BundlePath: ctr.BundlePath(),
StopSignal: ctr.GetStopSignal(),
@ -176,3 +188,23 @@ func getBlankSpec() specs.Spec {
Windows: &specs.Windows{},
}
}
// State copies the crio container state to ContainerState type for kpod
func (c *ContainerServer) State(ctr *oci.Container) *ContainerState {
crioState := ctr.State()
specState := specs.State{
Version: crioState.Version,
ID: crioState.ID,
Status: crioState.Status,
Pid: crioState.Pid,
Bundle: crioState.Bundle,
Annotations: crioState.Annotations,
}
cState := &ContainerState{
Started: crioState.Started,
Created: crioState.Created,
Finished: crioState.Finished,
}
cState.State = specState
return cState
}

View file

@ -37,6 +37,8 @@ const (
CgroupfsCgroupsManager = "cgroupfs"
// SystemdCgroupsManager represents systemd native cgroup manager
SystemdCgroupsManager = "systemd"
// ContainerExitsDir is the location of container exit dirs
ContainerExitsDir = "/var/run/crio/exits"
)
// New creates a new Runtime with options provided

View file

@ -184,7 +184,7 @@ func New(config *Config) (*Server, error) {
return nil, err
}
config.ContainerExitsDir = "/var/run/crio/exits"
config.ContainerExitsDir = oci.ContainerExitsDir
// This is used to monitor container exits using inotify
if err := os.MkdirAll(config.ContainerExitsDir, 0755); err != nil {