5
import "github.com/containers/podman/v5/libpod/define"
7
// GetPodStatus determines the status of the pod based on the
8
// statuses of the containers in the pod.
9
// Returns a string representation of the pod status
10
func (p *Pod) GetPodStatus() (string, error) {
11
ctrStatuses, err := p.Status()
13
return define.PodStateErrored, err
15
return createPodStatusResults(ctrStatuses)
18
func createPodStatusResults(ctrStatuses map[string]define.ContainerStatus) (string, error) {
19
ctrNum := len(ctrStatuses)
21
return define.PodStateCreated, nil
23
statuses := map[string]int{
24
define.PodStateStopped: 0,
25
define.PodStateRunning: 0,
26
define.PodStatePaused: 0,
27
define.PodStateCreated: 0,
28
define.PodStateErrored: 0,
30
for _, ctrStatus := range ctrStatuses {
32
case define.ContainerStateExited:
34
case define.ContainerStateStopped:
35
statuses[define.PodStateStopped]++
36
case define.ContainerStateRunning:
37
statuses[define.PodStateRunning]++
38
case define.ContainerStatePaused:
39
statuses[define.PodStatePaused]++
40
case define.ContainerStateCreated, define.ContainerStateConfigured:
41
statuses[define.PodStateCreated]++
43
statuses[define.PodStateErrored]++
48
case statuses[define.PodStateRunning] == ctrNum:
49
return define.PodStateRunning, nil
50
case statuses[define.PodStateRunning] > 0:
51
return define.PodStateDegraded, nil
52
case statuses[define.PodStatePaused] == ctrNum:
53
return define.PodStatePaused, nil
54
case statuses[define.PodStateStopped] == ctrNum:
55
return define.PodStateExited, nil
56
case statuses[define.PodStateStopped] > 0:
57
return define.PodStateStopped, nil
58
case statuses[define.PodStateErrored] > 0:
59
return define.PodStateErrored, nil
61
return define.PodStateCreated, nil