summaryrefslogtreecommitdiff
path: root/libpod
diff options
context:
space:
mode:
Diffstat (limited to 'libpod')
-rw-r--r--libpod/container_api.go20
-rw-r--r--libpod/pod.go1
-rw-r--r--libpod/pod_api.go12
3 files changed, 33 insertions, 0 deletions
diff --git a/libpod/container_api.go b/libpod/container_api.go
index dabbe27dc..aa932e0b8 100644
--- a/libpod/container_api.go
+++ b/libpod/container_api.go
@@ -624,6 +624,26 @@ func (c *Container) WaitWithInterval(waitTimeout time.Duration) (int32, error) {
}
}
+func (c *Container) WaitForConditionWithInterval(waitTimeout time.Duration, condition define.ContainerStatus) (int32, error) {
+ if !c.valid {
+ return -1, define.ErrCtrRemoved
+ }
+ if condition == define.ContainerStateStopped || condition == define.ContainerStateExited {
+ return c.WaitWithInterval(waitTimeout)
+ }
+ for {
+ state, err := c.State()
+ if err != nil {
+ return -1, err
+ }
+ if state == condition {
+ break
+ }
+ time.Sleep(waitTimeout)
+ }
+ return -1, nil
+}
+
// Cleanup unmounts all mount points in container and cleans up container storage
// It also cleans up the network stack
func (c *Container) Cleanup(ctx context.Context) error {
diff --git a/libpod/pod.go b/libpod/pod.go
index 1b4c06c9d..4cdeb1033 100644
--- a/libpod/pod.go
+++ b/libpod/pod.go
@@ -88,6 +88,7 @@ type PodInspect struct {
type PodInspectState struct {
CgroupPath string `json:"cgroupPath"`
InfraContainerID string `json:"infraContainerID"`
+ Status string `json:"status"`
}
// PodContainerInfo keeps information on a container in a pod
diff --git a/libpod/pod_api.go b/libpod/pod_api.go
index cb04f7411..200732652 100644
--- a/libpod/pod_api.go
+++ b/libpod/pod_api.go
@@ -407,7 +407,10 @@ func (p *Pod) Status() (map[string]define.ContainerStatus, error) {
if err != nil {
return nil, err
}
+ return containerStatusFromContainers(allCtrs)
+}
+func containerStatusFromContainers(allCtrs []*Container) (map[string]define.ContainerStatus, error) {
// We need to lock all the containers
for _, ctr := range allCtrs {
ctr.lock.Lock()
@@ -443,6 +446,14 @@ func (p *Pod) Inspect() (*PodInspect, error) {
if err != nil {
return &PodInspect{}, err
}
+ ctrStatuses, err := containerStatusFromContainers(containers)
+ if err != nil {
+ return nil, err
+ }
+ status, err := CreatePodStatusResults(ctrStatuses)
+ if err != nil {
+ return nil, err
+ }
for _, c := range containers {
containerStatus := "unknown"
// Ignoring possible errors here because we don't want this to be
@@ -468,6 +479,7 @@ func (p *Pod) Inspect() (*PodInspect, error) {
State: &PodInspectState{
CgroupPath: p.state.CgroupPath,
InfraContainerID: infraContainerID,
+ Status: status,
},
Containers: podContainers,
}