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  }