Add TerminationMessagePolicy

parent 0ce0c759
...@@ -1257,6 +1257,19 @@ const ( ...@@ -1257,6 +1257,19 @@ const (
PullIfNotPresent PullPolicy = "IfNotPresent" PullIfNotPresent PullPolicy = "IfNotPresent"
) )
// TerminationMessagePolicy describes how termination messages are retrieved from a container.
type TerminationMessagePolicy string
const (
// TerminationMessageReadFile is the default behavior and will set the container status message to
// the contents of the container's terminationMessagePath when the container exits.
TerminationMessageReadFile TerminationMessagePolicy = "File"
// TerminationMessageFallbackToLogsOnError will read the most recent contents of the container logs
// for the container status message when the container exits with an error and the
// terminationMessagePath has no contents.
TerminationMessageFallbackToLogsOnError TerminationMessagePolicy = "FallbackToLogsOnError"
)
// Capability represent POSIX capabilities type // Capability represent POSIX capabilities type
type Capability string type Capability string
...@@ -1332,6 +1345,8 @@ type Container struct { ...@@ -1332,6 +1345,8 @@ type Container struct {
// Required. // Required.
// +optional // +optional
TerminationMessagePath string TerminationMessagePath string
// +optional
TerminationMessagePolicy TerminationMessagePolicy
// Required: Policy for pulling images for this container // Required: Policy for pulling images for this container
ImagePullPolicy PullPolicy ImagePullPolicy PullPolicy
// Optional: SecurityContext defines the security options the container should be run with. // Optional: SecurityContext defines the security options the container should be run with.
......
...@@ -121,6 +121,9 @@ func SetDefaults_Container(obj *Container) { ...@@ -121,6 +121,9 @@ func SetDefaults_Container(obj *Container) {
if obj.TerminationMessagePath == "" { if obj.TerminationMessagePath == "" {
obj.TerminationMessagePath = TerminationMessagePathDefault obj.TerminationMessagePath = TerminationMessagePathDefault
} }
if obj.TerminationMessagePolicy == "" {
obj.TerminationMessagePolicy = TerminationMessageReadFile
}
} }
func SetDefaults_ServiceSpec(obj *ServiceSpec) { func SetDefaults_ServiceSpec(obj *ServiceSpec) {
if obj.SessionAffinity == "" { if obj.SessionAffinity == "" {
......
...@@ -1367,6 +1367,19 @@ const ( ...@@ -1367,6 +1367,19 @@ const (
PullIfNotPresent PullPolicy = "IfNotPresent" PullIfNotPresent PullPolicy = "IfNotPresent"
) )
// TerminationMessagePolicy describes how termination messages are retrieved from a container.
type TerminationMessagePolicy string
const (
// TerminationMessageReadFile is the default behavior and will set the container status message to
// the contents of the container's terminationMessagePath when the container exits.
TerminationMessageReadFile TerminationMessagePolicy = "File"
// TerminationMessageFallbackToLogsOnError will read the most recent contents of the container logs
// for the container status message when the container exits with an error and the
// terminationMessagePath has no contents.
TerminationMessageFallbackToLogsOnError TerminationMessagePolicy = "FallbackToLogsOnError"
)
// Capability represent POSIX capabilities type // Capability represent POSIX capabilities type
type Capability string type Capability string
...@@ -1484,10 +1497,21 @@ type Container struct { ...@@ -1484,10 +1497,21 @@ type Container struct {
// Optional: Path at which the file to which the container's termination message // Optional: Path at which the file to which the container's termination message
// will be written is mounted into the container's filesystem. // will be written is mounted into the container's filesystem.
// Message written is intended to be brief final status, such as an assertion failure message. // Message written is intended to be brief final status, such as an assertion failure message.
// Will be truncated by the node if greater than 4096 bytes. The total message length across
// all containers will be limited to 12kb.
// Defaults to /dev/termination-log. // Defaults to /dev/termination-log.
// Cannot be updated. // Cannot be updated.
// +optional // +optional
TerminationMessagePath string `json:"terminationMessagePath,omitempty" protobuf:"bytes,13,opt,name=terminationMessagePath"` TerminationMessagePath string `json:"terminationMessagePath,omitempty" protobuf:"bytes,13,opt,name=terminationMessagePath"`
// Indicate how the termination message should be populated. File will use the contents of
// terminationMessagePath to populate the container status message on both success and failure.
// FallbackToLogsOnError will use the last chunk of container log output if the termination
// message file is empty and the container exited with an error.
// The log output is limited to 2048 bytes or 80 lines, whichever is smaller.
// Defaults to File.
// Cannot be updated.
// +optional
TerminationMessagePolicy TerminationMessagePolicy `json:"terminationMessagePolicy,omitempty" protobuf:"bytes,20,opt,name=terminationMessagePolicy,casttype=TerminationMessagePolicy"`
// Image pull policy. // Image pull policy.
// One of Always, Never, IfNotPresent. // One of Always, Never, IfNotPresent.
// Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise.
......
...@@ -1597,6 +1597,14 @@ func validateContainers(containers []api.Container, volumes sets.String, fldPath ...@@ -1597,6 +1597,14 @@ func validateContainers(containers []api.Container, volumes sets.String, fldPath
allErrs = append(allErrs, field.Invalid(idxPath.Child("livenessProbe", "successThreshold"), ctr.LivenessProbe.SuccessThreshold, "must be 1")) allErrs = append(allErrs, field.Invalid(idxPath.Child("livenessProbe", "successThreshold"), ctr.LivenessProbe.SuccessThreshold, "must be 1"))
} }
switch ctr.TerminationMessagePolicy {
case api.TerminationMessageReadFile, api.TerminationMessageFallbackToLogsOnError:
case "":
allErrs = append(allErrs, field.Required(idxPath.Child("terminationMessagePolicy"), "must be 'File' or 'FallbackToLogsOnError'"))
default:
allErrs = append(allErrs, field.Invalid(idxPath.Child("terminationMessagePolicy"), ctr.TerminationMessagePolicy, "must be 'File' or 'FallbackToLogsOnError'"))
}
allErrs = append(allErrs, validateProbe(ctr.ReadinessProbe, idxPath.Child("readinessProbe"))...) allErrs = append(allErrs, validateProbe(ctr.ReadinessProbe, idxPath.Child("readinessProbe"))...)
allErrs = append(allErrs, validateContainerPorts(ctr.Ports, idxPath.Child("ports"))...) allErrs = append(allErrs, validateContainerPorts(ctr.Ports, idxPath.Child("ports"))...)
allErrs = append(allErrs, validateEnv(ctr.Env, idxPath.Child("env"))...) allErrs = append(allErrs, validateEnv(ctr.Env, idxPath.Child("env"))...)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment