summaryrefslogtreecommitdiff
path: root/vendor/github.com/opencontainers/runtime-tools/specerror/config.go
blob: 8a73f47fc41700d262bdbb7a71fb6c78ca453967 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
package specerror

import (
	"fmt"

	rfc2119 "github.com/opencontainers/runtime-tools/error"
)

// define error codes
const (
	// SpecVersionInSemVer represents "`ociVersion` (string, REQUIRED) MUST be in SemVer v2.0.0 format and specifies the version of the Open Container Initiative Runtime Specification with which the bundle complies."
	SpecVersionInSemVer Code = 0xb001 + iota
	// RootOnWindowsRequired represents "On Windows, for Windows Server Containers, this field is REQUIRED."
	RootOnWindowsRequired
	// RootOnHyperVNotSet represents "For Hyper-V Containers, this field MUST NOT be set."
	RootOnHyperVNotSet
	// RootOnNonHyperVRequired represents "On all other platforms, this field is REQUIRED."
	RootOnNonHyperVRequired
	// RootPathOnWindowsGUID represents "On Windows, `path` MUST be a volume GUID path."
	RootPathOnWindowsGUID
	// RootPathOnPosixConvention represents "The value SHOULD be the conventional `rootfs`."
	RootPathOnPosixConvention
	// RootPathExist represents "A directory MUST exist at the path declared by the field."
	RootPathExist
	// RootReadonlyImplement represents "`readonly` (bool, OPTIONAL) If true then the root filesystem MUST be read-only inside the container, defaults to false."
	RootReadonlyImplement
	// RootReadonlyOnWindowsFalse represents "* On Windows, this field MUST be omitted or false."
	RootReadonlyOnWindowsFalse
	// MountsInOrder represents "The runtime MUST mount entries in the listed order."
	MountsInOrder
	// MountsDestAbs represents "Destination of mount point: path inside container. This value MUST be an absolute path."
	MountsDestAbs
	// MountsDestOnWindowsNotNested represents "Windows: one mount destination MUST NOT be nested within another mount (e.g., c:\\foo and c:\\foo\\bar)."
	MountsDestOnWindowsNotNested
	// MountsOptionsOnWindowsROSupport represents "Windows: runtimes MUST support `ro`, mounting the filesystem read-only when `ro` is given."
	MountsOptionsOnWindowsROSupport
	// ProcRequiredAtStart represents "This property is REQUIRED when `start` is called."
	ProcRequiredAtStart
	// ProcConsoleSizeIgnore represents "Runtimes MUST ignore `consoleSize` if `terminal` is `false` or unset."
	ProcConsoleSizeIgnore
	// ProcCwdAbs represents "cwd (string, REQUIRED) is the working directory that will be set for the executable. This value MUST be an absolute path."
	ProcCwdAbs
	// ProcArgsOneEntryRequired represents "This specification extends the IEEE standard in that at least one entry is REQUIRED, and that entry is used with the same semantics as `execvp`'s *file*."
	ProcArgsOneEntryRequired
	// PosixProcRlimitsTypeGenError represents "The runtime MUST generate an error for any values which cannot be mapped to a relevant kernel interface."
	PosixProcRlimitsTypeGenError
	// PosixProcRlimitsTypeGet represents "For each entry in `rlimits`, a `getrlimit(3)` on `type` MUST succeed."
	PosixProcRlimitsTypeGet
	// PosixProcRlimitsTypeValueError represents "valid values are defined in the ... man page"
	PosixProcRlimitsTypeValueError
	// PosixProcRlimitsSoftMatchCur represents "`rlim.rlim_cur` MUST match the configured value."
	PosixProcRlimitsSoftMatchCur
	// PosixProcRlimitsHardMatchMax represents "`rlim.rlim_max` MUST match the configured value."
	PosixProcRlimitsHardMatchMax
	// PosixProcRlimitsErrorOnDup represents "If `rlimits` contains duplicated entries with same `type`, the runtime MUST generate an error."
	PosixProcRlimitsErrorOnDup
	// LinuxProcCapError represents "Any value which cannot be mapped to a relevant kernel interface MUST cause an error."
	LinuxProcCapError
	// LinuxProcOomScoreAdjSet represents "If `oomScoreAdj` is set, the runtime MUST set `oom_score_adj` to the given value."
	LinuxProcOomScoreAdjSet
	// LinuxProcOomScoreAdjNotSet represents "If `oomScoreAdj` is not set, the runtime MUST NOT change the value of `oom_score_adj`."
	LinuxProcOomScoreAdjNotSet
	// PlatformSpecConfOnWindowsSet represents "This MUST be set if the target platform of this spec is `windows`."
	PlatformSpecConfOnWindowsSet
	// PosixHooksPathAbs represents "This specification extends the IEEE standard in that `path` MUST be absolute."
	PosixHooksPathAbs
	// PosixHooksTimeoutPositive represents "If set, `timeout` MUST be greater than zero."
	PosixHooksTimeoutPositive
	// PosixHooksCalledInOrder represents "Hooks MUST be called in the listed order."
	PosixHooksCalledInOrder
	// PosixHooksStateToStdin represents "The state of the container MUST be passed to hooks over stdin so that they may do work appropriate to the current state of the container."
	PosixHooksStateToStdin
	// PrestartTiming represents "The pre-start hooks MUST be called after the `start` operation is called but before the user-specified program command is executed."
	PrestartTiming
	// PoststartTiming represents "The post-start hooks MUST be called after the user-specified process is executed but before the `start` operation returns."
	PoststartTiming
	// PoststopTiming represents "The post-stop hooks MUST be called after the container is deleted but before the `delete` operation returns."
	PoststopTiming
	// AnnotationsKeyValueMap represents "Annotations MUST be a key-value map."
	AnnotationsKeyValueMap
	// AnnotationsKeyString represents "Keys MUST be strings."
	AnnotationsKeyString
	// AnnotationsKeyRequired represents "Keys MUST NOT be an empty string."
	AnnotationsKeyRequired
	// AnnotationsKeyReversedDomain represents "Keys SHOULD be named using a reverse domain notation - e.g. `com.example.myKey`."
	AnnotationsKeyReversedDomain
	// AnnotationsKeyReservedNS represents "Keys using the `org.opencontainers` namespace are reserved and MUST NOT be used by subsequent specifications."
	AnnotationsKeyReservedNS
	// AnnotationsKeyIgnoreUnknown represents "Implementations that are reading/processing this configuration file MUST NOT generate an error if they encounter an unknown annotation key."
	AnnotationsKeyIgnoreUnknown
	// AnnotationsValueString represents "Values MUST be strings."
	AnnotationsValueString
	// ExtensibilityIgnoreUnknownProp represents "Runtimes that are reading or processing this configuration file MUST NOT generate an error if they encounter an unknown property."
	ExtensibilityIgnoreUnknownProp
	// ValidValues represents "Runtimes that are reading or processing this configuration file MUST generate an error when invalid or unsupported values are encountered."
	ValidValues
)

var (
	specificationVersionRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#specification-version"), nil
	}
	rootRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#root"), nil
	}
	mountsRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#mounts"), nil
	}
	processRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#process"), nil
	}
	posixProcessRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#posix-process"), nil
	}
	linuxProcessRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#linux-process"), nil
	}
	platformSpecificConfigurationRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#platform-specific-configuration"), nil
	}
	posixPlatformHooksRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#posix-platform-hooks"), nil
	}
	prestartRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#prestart"), nil
	}
	poststartRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#poststart"), nil
	}
	poststopRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#poststop"), nil
	}
	annotationsRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#annotations"), nil
	}
	extensibilityRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#extensibility"), nil
	}
	validValuesRef = func(version string) (reference string, err error) {
		return fmt.Sprintf(referenceTemplate, version, "config.md#valid-values"), nil
	}
)

func init() {
	register(SpecVersionInSemVer, rfc2119.Must, specificationVersionRef)
	register(RootOnWindowsRequired, rfc2119.Required, rootRef)
	register(RootOnHyperVNotSet, rfc2119.Must, rootRef)
	register(RootOnNonHyperVRequired, rfc2119.Required, rootRef)
	register(RootPathOnWindowsGUID, rfc2119.Must, rootRef)
	register(RootPathOnPosixConvention, rfc2119.Should, rootRef)
	register(RootPathExist, rfc2119.Must, rootRef)
	register(RootReadonlyImplement, rfc2119.Must, rootRef)
	register(RootReadonlyOnWindowsFalse, rfc2119.Must, rootRef)
	register(MountsInOrder, rfc2119.Must, mountsRef)
	register(MountsDestAbs, rfc2119.Must, mountsRef)
	register(MountsDestOnWindowsNotNested, rfc2119.Must, mountsRef)
	register(MountsOptionsOnWindowsROSupport, rfc2119.Must, mountsRef)
	register(ProcRequiredAtStart, rfc2119.Required, processRef)
	register(ProcConsoleSizeIgnore, rfc2119.Must, processRef)
	register(ProcCwdAbs, rfc2119.Must, processRef)
	register(ProcArgsOneEntryRequired, rfc2119.Required, processRef)
	register(PosixProcRlimitsTypeGenError, rfc2119.Must, posixProcessRef)
	register(PosixProcRlimitsTypeGet, rfc2119.Must, posixProcessRef)
	register(PosixProcRlimitsTypeValueError, rfc2119.Should, posixProcessRef)
	register(PosixProcRlimitsSoftMatchCur, rfc2119.Must, posixProcessRef)
	register(PosixProcRlimitsHardMatchMax, rfc2119.Must, posixProcessRef)
	register(PosixProcRlimitsErrorOnDup, rfc2119.Must, posixProcessRef)
	register(LinuxProcCapError, rfc2119.Must, linuxProcessRef)
	register(LinuxProcOomScoreAdjSet, rfc2119.Must, linuxProcessRef)
	register(LinuxProcOomScoreAdjNotSet, rfc2119.Must, linuxProcessRef)
	register(PlatformSpecConfOnWindowsSet, rfc2119.Must, platformSpecificConfigurationRef)
	register(PosixHooksPathAbs, rfc2119.Must, posixPlatformHooksRef)
	register(PosixHooksTimeoutPositive, rfc2119.Must, posixPlatformHooksRef)
	register(PosixHooksCalledInOrder, rfc2119.Must, posixPlatformHooksRef)
	register(PosixHooksStateToStdin, rfc2119.Must, posixPlatformHooksRef)
	register(PrestartTiming, rfc2119.Must, prestartRef)
	register(PoststartTiming, rfc2119.Must, poststartRef)
	register(PoststopTiming, rfc2119.Must, poststopRef)
	register(AnnotationsKeyValueMap, rfc2119.Must, annotationsRef)
	register(AnnotationsKeyString, rfc2119.Must, annotationsRef)
	register(AnnotationsKeyRequired, rfc2119.Must, annotationsRef)
	register(AnnotationsKeyReversedDomain, rfc2119.Should, annotationsRef)
	register(AnnotationsKeyReservedNS, rfc2119.Must, annotationsRef)
	register(AnnotationsKeyIgnoreUnknown, rfc2119.Must, annotationsRef)
	register(AnnotationsValueString, rfc2119.Must, annotationsRef)
	register(ExtensibilityIgnoreUnknownProp, rfc2119.Must, extensibilityRef)
	register(ValidValues, rfc2119.Must, validValuesRef)
}