diff --git a/pkg/api/conversion.go b/pkg/api/conversion.go index a43bd8f0554..ebdce3d5180 100644 --- a/pkg/api/conversion.go +++ b/pkg/api/conversion.go @@ -34,6 +34,14 @@ func init() { out.Spec.RestartPolicy = in.RestartPolicy out.Name = in.ID out.UID = in.UUID + // TODO(dchen1107): Move this conversion to pkg/api/v1beta[123]/conversion.go + // along with fixing #1502 + for i := range out.Spec.Containers { + ctr := &out.Spec.Containers[i] + if len(ctr.TerminationMessagePath) == 0 { + ctr.TerminationMessagePath = TerminationMessagePathDefault + } + } return nil }, func(in *BoundPod, out *ContainerManifest, s conversion.Scope) error { @@ -43,6 +51,12 @@ func init() { out.Version = "v1beta2" out.ID = in.Name out.UUID = in.UID + for i := range out.Containers { + ctr := &out.Containers[i] + if len(ctr.TerminationMessagePath) == 0 { + ctr.TerminationMessagePath = TerminationMessagePathDefault + } + } return nil }, func(in *ContainerManifestList, out *BoundPods, s conversion.Scope) error { diff --git a/pkg/api/types.go b/pkg/api/types.go index c73677a695c..10ab6221d96 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -121,6 +121,8 @@ const ( NamespaceDefault string = "default" // NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces NamespaceAll string = "" + // TerminationMessagePathDefault means the default path to capture the application termination message running in a container + TerminationMessagePathDefault string = "/dev/termination-log" ) // Volume represents a named volume in a pod that may be accessed by any containers in the pod. @@ -301,6 +303,8 @@ type Container struct { VolumeMounts []VolumeMount `json:"volumeMounts,omitempty" yaml:"volumeMounts,omitempty"` LivenessProbe *LivenessProbe `json:"livenessProbe,omitempty" yaml:"livenessProbe,omitempty"` Lifecycle *Lifecycle `json:"lifecycle,omitempty" yaml:"lifecycle,omitempty"` + // Optional: Defaults to /dev/termination-log + TerminationMessagePath string `json:"terminationMessagePath,omitempty" yaml:"terminationMessagePath,omitempty"` // Optional: Default to false. Privileged bool `json:"privileged,omitempty" yaml:"privileged,omitempty"` // Optional: Policy for pulling images for this container diff --git a/pkg/api/v1beta1/types.go b/pkg/api/v1beta1/types.go index cc521dc23b5..2ae145f5b8f 100644 --- a/pkg/api/v1beta1/types.go +++ b/pkg/api/v1beta1/types.go @@ -256,6 +256,8 @@ type Container struct { VolumeMounts []VolumeMount `yaml:"volumeMounts,omitempty" json:"volumeMounts,omitempty"` LivenessProbe *LivenessProbe `yaml:"livenessProbe,omitempty" json:"livenessProbe,omitempty"` Lifecycle *Lifecycle `yaml:"lifecycle,omitempty" json:"lifecycle,omitempty"` + // Optional: Defaults to /dev/termination-log + TerminationMessagePath string `yaml:"terminationMessagePath,omitempty" json:"terminationMessagePath,omitempty"` // Optional: Default to false. Privileged bool `json:"privileged,omitempty" yaml:"privileged,omitempty"` // Optional: Policy for pulling images for this container diff --git a/pkg/api/v1beta2/types.go b/pkg/api/v1beta2/types.go index ffb1b7728e8..f58ae83b46b 100644 --- a/pkg/api/v1beta2/types.go +++ b/pkg/api/v1beta2/types.go @@ -222,6 +222,8 @@ type Container struct { VolumeMounts []VolumeMount `yaml:"volumeMounts,omitempty" json:"volumeMounts,omitempty"` LivenessProbe *LivenessProbe `yaml:"livenessProbe,omitempty" json:"livenessProbe,omitempty"` Lifecycle *Lifecycle `yaml:"lifecycle,omitempty" json:"lifecycle,omitempty"` + // Optional: Defaults to /dev/termination-log + TerminationMessagePath string `yaml:"terminationMessagePath,omitempty" json:"terminationMessagePath,omitempty"` // Optional: Default to false. Privileged bool `json:"privileged,omitempty" yaml:"privileged,omitempty"` // Optional: Policy for pulling images for this container diff --git a/pkg/api/v1beta3/types.go b/pkg/api/v1beta3/types.go index 6ce8e5ca1f1..eedd95a1fb2 100644 --- a/pkg/api/v1beta3/types.go +++ b/pkg/api/v1beta3/types.go @@ -334,6 +334,8 @@ type Container struct { VolumeMounts []VolumeMount `json:"volumeMounts,omitempty" yaml:"volumeMounts,omitempty"` LivenessProbe *LivenessProbe `json:"livenessProbe,omitempty" yaml:"livenessProbe,omitempty"` Lifecycle *Lifecycle `json:"lifecycle,omitempty" yaml:"lifecycle,omitempty"` + // Optional: Defaults to /dev/termination-log + TerminationMessagePath string `json:"terminationMessagePath,omitempty" yaml:"terminationMessagePath,omitempty"` // Optional: Default to false. Privileged bool `json:"privileged,omitempty" yaml:"privileged,omitempty"` // Optional: Policy for pulling images for this container diff --git a/pkg/kubelet/config/file_test.go b/pkg/kubelet/config/file_test.go index f34073a69e2..bf6d6584955 100644 --- a/pkg/kubelet/config/file_test.go +++ b/pkg/kubelet/config/file_test.go @@ -40,6 +40,7 @@ func ExampleManifestAndPod(id string) (api.ContainerManifest, api.BoundPod) { { Name: "c" + id, Image: "foo", + TerminationMessagePath: "/somepath", }, }, Volumes: []api.Volume{ @@ -62,6 +63,7 @@ func ExampleManifestAndPod(id string) (api.ContainerManifest, api.BoundPod) { { Name: "c" + id, Image: "foo", + TerminationMessagePath: "/somepath", }, }, Volumes: []api.Volume{ @@ -124,7 +126,7 @@ func TestReadFromFile(t *testing.T) { Namespace: "default", }, Spec: api.PodSpec{ - Containers: []api.Container{{Image: "test/image"}}, + Containers: []api.Container{{Image: "test/image", TerminationMessagePath: "/dev/termination-log"}}, }, }) if !reflect.DeepEqual(expected, update) { diff --git a/pkg/kubelet/config/http_test.go b/pkg/kubelet/config/http_test.go index 7071f53dcc3..525d2020af9 100644 --- a/pkg/kubelet/config/http_test.go +++ b/pkg/kubelet/config/http_test.go @@ -146,14 +146,24 @@ func TestExtractFromHTTP(t *testing.T) { Name: "1", Namespace: "default", }, - Spec: api.PodSpec{Containers: []api.Container{{Name: "1", Image: "foo"}}}, + Spec: api.PodSpec{ + Containers: []api.Container{{ + Name: "1", + Image: "foo", + TerminationMessagePath: "/dev/termination-log"}}, + }, }, api.BoundPod{ ObjectMeta: api.ObjectMeta{ Name: "bar", Namespace: "default", }, - Spec: api.PodSpec{Containers: []api.Container{{Name: "1", Image: "foo"}}}, + Spec: api.PodSpec{ + Containers: []api.Container{{ + Name: "1", + Image: "foo", + TerminationMessagePath: "/dev/termination-log"}}, + }, }), }, {