23d20c9db5
If a packager wants to be able to support addititional arguments on his hook this will allow them to setup the configuration with these arguments. For example this would allow a hook developer to add support for a --debug flag to change the level of debugging in his hook. In order to complete this task, I had to vendor in the latest github.com://opencontainers/runtime-tools, which caused me to have to fix a Mount and Capability interface calls Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
188 lines
11 KiB
Go
188 lines
11 KiB
Go
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)
|
|
}
|