github.com/AbhinandanKurakure/podman/v3@v3.4.10/libpod/pod_status.go (about) 1 package libpod 2 3 import "github.com/containers/podman/v3/libpod/define" 4 5 // GetPodStatus determines the status of the pod based on the 6 // statuses of the containers in the pod. 7 // Returns a string representation of the pod status 8 func (p *Pod) GetPodStatus() (string, error) { 9 ctrStatuses, err := p.Status() 10 if err != nil { 11 return define.PodStateErrored, err 12 } 13 return createPodStatusResults(ctrStatuses) 14 } 15 16 func createPodStatusResults(ctrStatuses map[string]define.ContainerStatus) (string, error) { 17 ctrNum := len(ctrStatuses) 18 if ctrNum == 0 { 19 return define.PodStateCreated, nil 20 } 21 statuses := map[string]int{ 22 define.PodStateStopped: 0, 23 define.PodStateRunning: 0, 24 define.PodStatePaused: 0, 25 define.PodStateCreated: 0, 26 define.PodStateErrored: 0, 27 } 28 for _, ctrStatus := range ctrStatuses { 29 switch ctrStatus { 30 case define.ContainerStateExited: 31 fallthrough 32 case define.ContainerStateStopped: 33 statuses[define.PodStateStopped]++ 34 case define.ContainerStateRunning: 35 statuses[define.PodStateRunning]++ 36 case define.ContainerStatePaused: 37 statuses[define.PodStatePaused]++ 38 case define.ContainerStateCreated, define.ContainerStateConfigured: 39 statuses[define.PodStateCreated]++ 40 default: 41 statuses[define.PodStateErrored]++ 42 } 43 } 44 45 switch { 46 case statuses[define.PodStateRunning] == ctrNum: 47 return define.PodStateRunning, nil 48 case statuses[define.PodStateRunning] > 0: 49 return define.PodStateDegraded, nil 50 case statuses[define.PodStatePaused] == ctrNum: 51 return define.PodStatePaused, nil 52 case statuses[define.PodStateStopped] == ctrNum: 53 return define.PodStateExited, nil 54 case statuses[define.PodStateStopped] > 0: 55 return define.PodStateStopped, nil 56 case statuses[define.PodStateErrored] > 0: 57 return define.PodStateErrored, nil 58 default: 59 return define.PodStateCreated, nil 60 } 61 }