podman

Форк
0
/
healthchecks.go 
147 строк · 5.5 Кб
1
package define
2

3
import (
4
	"fmt"
5
	"strings"
6

7
	"github.com/containers/image/v5/manifest"
8
)
9

10
const (
11
	// HealthCheckHealthy describes a healthy container
12
	HealthCheckHealthy string = "healthy"
13
	// HealthCheckUnhealthy describes an unhealthy container
14
	HealthCheckUnhealthy string = "unhealthy"
15
	// HealthCheckStarting describes the time between when the container starts
16
	// and the start-period (time allowed for the container to start and application
17
	// to be running) expires.
18
	HealthCheckStarting string = "starting"
19
)
20

21
// HealthCheckStatus represents the current state of a container
22
type HealthCheckStatus int
23

24
const (
25
	// HealthCheckSuccess means the health worked
26
	HealthCheckSuccess HealthCheckStatus = iota
27
	// HealthCheckFailure means the health ran and failed
28
	HealthCheckFailure HealthCheckStatus = iota
29
	// HealthCheckContainerStopped means the health check cannot
30
	// be run because the container is stopped
31
	HealthCheckContainerStopped HealthCheckStatus = iota
32
	// HealthCheckContainerNotFound means the container could
33
	// not be found in local store
34
	HealthCheckContainerNotFound HealthCheckStatus = iota
35
	// HealthCheckNotDefined means the container has no health
36
	// check defined in it
37
	HealthCheckNotDefined HealthCheckStatus = iota
38
	// HealthCheckInternalError means some something failed obtaining or running
39
	// a given health check
40
	HealthCheckInternalError HealthCheckStatus = iota
41
	// HealthCheckDefined means the healthcheck was found on the container
42
	HealthCheckDefined HealthCheckStatus = iota
43
	// HealthCheckStartup means the healthcheck was unhealthy, but is still
44
	// either within the startup HC or the startup period of the healthcheck
45
	HealthCheckStartup HealthCheckStatus = iota
46
)
47

48
// Healthcheck defaults.  These are used both in the cli as well in
49
// libpod and were moved from cmd/podman/common
50
const (
51
	// DefaultHealthCheckInterval default value
52
	DefaultHealthCheckInterval = "30s"
53
	// DefaultHealthCheckRetries default value
54
	DefaultHealthCheckRetries uint = 3
55
	// DefaultHealthCheckStartPeriod default value
56
	DefaultHealthCheckStartPeriod = "0s"
57
	// DefaultHealthCheckTimeout default value
58
	DefaultHealthCheckTimeout = "30s"
59
)
60

61
// HealthConfig.Test options
62
const (
63
	// HealthConfigTestNone disables healthcheck
64
	HealthConfigTestNone = "NONE"
65
	// HealthConfigTestCmd execs arguments directly
66
	HealthConfigTestCmd = "CMD"
67
	// HealthConfigTestCmdShell runs commands with the system's default shell
68
	HealthConfigTestCmdShell = "CMD-SHELL"
69
)
70

71
// HealthCheckOnFailureAction defines how Podman reacts when a container's health
72
// status turns unhealthy.
73
type HealthCheckOnFailureAction int
74

75
// Healthcheck on-failure actions.
76
const (
77
	// HealthCheckOnFailureActionNonce instructs Podman to not react on an unhealthy status.
78
	HealthCheckOnFailureActionNone = iota // Must be first iota for backwards compatibility
79
	// HealthCheckOnFailureActionInvalid denotes an invalid on-failure policy.
80
	HealthCheckOnFailureActionInvalid = iota
81
	// HealthCheckOnFailureActionNonce instructs Podman to kill the container on an unhealthy status.
82
	HealthCheckOnFailureActionKill = iota
83
	// HealthCheckOnFailureActionNonce instructs Podman to restart the container on an unhealthy status.
84
	HealthCheckOnFailureActionRestart = iota
85
	// HealthCheckOnFailureActionNonce instructs Podman to stop the container on an unhealthy status.
86
	HealthCheckOnFailureActionStop = iota
87
)
88

89
// String representations for on-failure actions.
90
const (
91
	strHealthCheckOnFailureActionNone    = "none"
92
	strHealthCheckOnFailureActionInvalid = "invalid"
93
	strHealthCheckOnFailureActionKill    = "kill"
94
	strHealthCheckOnFailureActionRestart = "restart"
95
	strHealthCheckOnFailureActionStop    = "stop"
96
)
97

98
// SupportedHealthCheckOnFailureActions lists all supported healthcheck restart policies.
99
var SupportedHealthCheckOnFailureActions = []string{
100
	strHealthCheckOnFailureActionNone,
101
	strHealthCheckOnFailureActionKill,
102
	strHealthCheckOnFailureActionRestart,
103
	strHealthCheckOnFailureActionStop,
104
}
105

106
// String returns the string representation of the HealthCheckOnFailureAction.
107
func (h HealthCheckOnFailureAction) String() string {
108
	switch h {
109
	case HealthCheckOnFailureActionNone:
110
		return strHealthCheckOnFailureActionNone
111
	case HealthCheckOnFailureActionKill:
112
		return strHealthCheckOnFailureActionKill
113
	case HealthCheckOnFailureActionRestart:
114
		return strHealthCheckOnFailureActionRestart
115
	case HealthCheckOnFailureActionStop:
116
		return strHealthCheckOnFailureActionStop
117
	default:
118
		return strHealthCheckOnFailureActionInvalid
119
	}
120
}
121

122
// ParseHealthCheckOnFailureAction parses the specified string into a HealthCheckOnFailureAction.
123
// An error is returned for an invalid input.
124
func ParseHealthCheckOnFailureAction(s string) (HealthCheckOnFailureAction, error) {
125
	switch s {
126
	case "", strHealthCheckOnFailureActionNone:
127
		return HealthCheckOnFailureActionNone, nil
128
	case strHealthCheckOnFailureActionKill:
129
		return HealthCheckOnFailureActionKill, nil
130
	case strHealthCheckOnFailureActionRestart:
131
		return HealthCheckOnFailureActionRestart, nil
132
	case strHealthCheckOnFailureActionStop:
133
		return HealthCheckOnFailureActionStop, nil
134
	default:
135
		err := fmt.Errorf("invalid on-failure action %q for health check: supported actions are %s", s, strings.Join(SupportedHealthCheckOnFailureActions, ","))
136
		return HealthCheckOnFailureActionInvalid, err
137
	}
138
}
139

140
// StartupHealthCheck is the configuration of a startup healthcheck.
141
type StartupHealthCheck struct {
142
	manifest.Schema2HealthConfig
143
	// Successes are the number of successes required to mark the startup HC
144
	// as passed.
145
	// If set to 0, a single success will mark the HC as passed.
146
	Successes int `json:",omitempty"`
147
}
148

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

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

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

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