podman

Форк
0
/
pod_status.go 
63 строки · 1.8 Кб
1
//go:build !remote
2

3
package libpod
4

5
import "github.com/containers/podman/v5/libpod/define"
6

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()
12
	if err != nil {
13
		return define.PodStateErrored, err
14
	}
15
	return createPodStatusResults(ctrStatuses)
16
}
17

18
func createPodStatusResults(ctrStatuses map[string]define.ContainerStatus) (string, error) {
19
	ctrNum := len(ctrStatuses)
20
	if ctrNum == 0 {
21
		return define.PodStateCreated, nil
22
	}
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,
29
	}
30
	for _, ctrStatus := range ctrStatuses {
31
		switch ctrStatus {
32
		case define.ContainerStateExited:
33
			fallthrough
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]++
42
		default:
43
			statuses[define.PodStateErrored]++
44
		}
45
	}
46

47
	switch {
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
60
	default:
61
		return define.PodStateCreated, nil
62
	}
63
}
64

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.