summaryrefslogtreecommitdiff
path: root/libpod/pod_api.go
diff options
context:
space:
mode:
authorhaircommander <pehunt@redhat.com>2018-08-14 13:03:05 -0400
committerAtomic Bot <atomic-devel@projectatomic.io>2018-08-16 20:31:50 +0000
commit67f79eaf73af86432a7948a49f121c7830cba82e (patch)
treea28f7c6874d07734de265eb862c2042c83890303 /libpod/pod_api.go
parent37e3f47ef3ecc6f36fca65f47914139c636f34ac (diff)
downloadpodman-67f79eaf73af86432a7948a49f121c7830cba82e.tar.gz
podman-67f79eaf73af86432a7948a49f121c7830cba82e.tar.bz2
podman-67f79eaf73af86432a7948a49f121c7830cba82e.zip
Moved getPodStatus to pod API to be used in varlink
Signed-off-by: haircommander <pehunt@redhat.com> Closes: #1275 Approved by: mheon
Diffstat (limited to 'libpod/pod_api.go')
-rw-r--r--libpod/pod_api.go61
1 files changed, 59 insertions, 2 deletions
diff --git a/libpod/pod_api.go b/libpod/pod_api.go
index d1e19063c..4d404587f 100644
--- a/libpod/pod_api.go
+++ b/libpod/pod_api.go
@@ -8,6 +8,15 @@ import (
"github.com/ulule/deepcopier"
)
+const (
+ stopped = "Stopped"
+ running = "Running"
+ paused = "Paused"
+ exited = "Exited"
+ errored = "Error"
+ created = "Created"
+)
+
// Start starts all containers within a pod
// It combines the effects of Init() and Start() on a container
// If a container has already been initialized it will be started,
@@ -362,9 +371,9 @@ func (p *Pod) Kill(signal uint) (map[string]error, error) {
return nil, nil
}
-// Status gets the status of all containers in the pod
+// ContainerStatus gets the status of all containers in the pod
// Returns a map of Container ID to Container Status
-func (p *Pod) Status() (map[string]ContainerStatus, error) {
+func (p *Pod) ContainerStatus() (map[string]ContainerStatus, error) {
p.lock.Lock()
defer p.lock.Unlock()
@@ -396,6 +405,54 @@ func (p *Pod) Status() (map[string]ContainerStatus, error) {
return status, nil
}
+// Status determines the status of the pod based on the
+// statuses of the containers in the pod.
+// Returns a string representation of the pod status
+func (p *Pod) Status() (string, error) {
+ ctrStatuses, err := p.ContainerStatus()
+ if err != nil {
+ return errored, err
+ }
+ ctrNum := len(ctrStatuses)
+ if ctrNum == 0 {
+ return created, nil
+ }
+ statuses := map[string]int{
+ stopped: 0,
+ running: 0,
+ paused: 0,
+ created: 0,
+ errored: 0,
+ }
+ for _, ctrStatus := range ctrStatuses {
+ switch ctrStatus {
+ case ContainerStateStopped:
+ statuses[stopped]++
+ case ContainerStateRunning:
+ statuses[running]++
+ case ContainerStatePaused:
+ statuses[paused]++
+ case ContainerStateCreated, ContainerStateConfigured:
+ statuses[created]++
+ default:
+ statuses[errored]++
+ }
+ }
+
+ if statuses[running] > 0 {
+ return running, nil
+ } else if statuses[paused] == ctrNum {
+ return paused, nil
+ } else if statuses[stopped] == ctrNum {
+ return exited, nil
+ } else if statuses[stopped] > 0 {
+ return stopped, nil
+ } else if statuses[errored] > 0 {
+ return errored, nil
+ }
+ return created, nil
+}
+
// Inspect returns a PodInspect struct to describe the pod
func (p *Pod) Inspect() (*PodInspect, error) {
var (