diff --git a/pkg/kubelet/api/v1alpha1/runtime/api.pb.go b/pkg/kubelet/api/v1alpha1/runtime/api.pb.go index ec3d90b5b9b..c15bc0463a2 100644 --- a/pkg/kubelet/api/v1alpha1/runtime/api.pb.go +++ b/pkg/kubelet/api/v1alpha1/runtime/api.pb.go @@ -2267,7 +2267,7 @@ type ExecRequest struct { ContainerId *string `protobuf:"bytes,1,opt,name=container_id,json=containerId" json:"container_id,omitempty"` // Command to execute. Cmd []string `protobuf:"bytes,2,rep,name=cmd" json:"cmd,omitempty"` - // Whether use tty. + // Whether to exec the command in a TTY. Tty *bool `protobuf:"varint,3,opt,name=tty" json:"tty,omitempty"` // Whether to stream stdin. Stdin *bool `protobuf:"varint,4,opt,name=stdin" json:"stdin,omitempty"` @@ -2329,7 +2329,10 @@ type AttachRequest struct { // ID of the container to which to attach. ContainerId *string `protobuf:"bytes,1,opt,name=container_id,json=containerId" json:"container_id,omitempty"` // Whether to stream stdin. - Stdin *bool `protobuf:"varint,2,opt,name=stdin" json:"stdin,omitempty"` + Stdin *bool `protobuf:"varint,2,opt,name=stdin" json:"stdin,omitempty"` + // Whether the process being attached is running in a TTY. + // This must match the TTY setting in the ContainerConfig. + Tty *bool `protobuf:"varint,3,opt,name=tty" json:"tty,omitempty"` XXX_unrecognized []byte `json:"-"` } @@ -2352,6 +2355,13 @@ func (m *AttachRequest) GetStdin() bool { return false } +func (m *AttachRequest) GetTty() bool { + if m != nil && m.Tty != nil { + return *m.Tty + } + return false +} + type AttachResponse struct { // Fully qualified URL of the attach streaming server. Url *string `protobuf:"bytes,1,opt,name=url" json:"url,omitempty"` @@ -3837,11 +3847,11 @@ var _ImageService_serviceDesc = grpc.ServiceDesc{ } var fileDescriptorApi = []byte{ - // 3365 bytes of a gzipped FileDescriptorProto + // 3369 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x3a, 0xdb, 0x72, 0x1b, 0xc7, 0xb1, 0x04, 0x40, 0x82, 0x40, 0x83, 0x00, 0xc1, 0x21, 0x45, 0x42, 0xa0, 0x25, 0x51, 0x6b, 0x49, - 0x96, 0x64, 0x5b, 0xc7, 0xe2, 0x39, 0xc7, 0x3a, 0x96, 0x2d, 0xd9, 0x30, 0x49, 0xfb, 0xd0, 0x92, - 0x20, 0x7a, 0x21, 0x39, 0x76, 0xf9, 0x61, 0xb3, 0xc2, 0x0e, 0xc1, 0x95, 0x80, 0xdd, 0xf5, 0xee, + 0x96, 0x64, 0x5b, 0xc7, 0xe2, 0x39, 0xc7, 0x3a, 0x96, 0x2d, 0xd9, 0x30, 0x49, 0xbb, 0x68, 0x49, + 0x10, 0xbd, 0x90, 0x7c, 0xec, 0xf8, 0x61, 0xb3, 0xc2, 0x0e, 0xc1, 0x95, 0x80, 0xdd, 0xf5, 0xee, 0x80, 0x16, 0xf3, 0x05, 0x79, 0x48, 0xaa, 0xf2, 0xea, 0xa7, 0xa4, 0x52, 0xa9, 0x72, 0x25, 0x79, 0x4b, 0x55, 0xaa, 0xf2, 0x0f, 0xa9, 0x7c, 0x40, 0x3e, 0x21, 0x7f, 0x91, 0x9a, 0xdb, 0xee, 0xcc, 0x5e, 0x28, 0x52, 0x76, 0xc5, 0x7a, 0xdb, 0xe9, 0xe9, 0xe9, 0xe9, 0xdb, 0xf4, 0x74, 0xf7, 0x2c, @@ -3987,66 +3997,66 @@ var fileDescriptorApi = []byte{ 0x4c, 0x89, 0x2f, 0x98, 0x62, 0x24, 0xe0, 0x38, 0x0c, 0x99, 0xd4, 0x1c, 0x8e, 0xc3, 0x50, 0x77, 0xdb, 0x8a, 0xee, 0xb6, 0xc6, 0x53, 0x68, 0xd0, 0x0d, 0x7e, 0x10, 0xfb, 0x22, 0x85, 0xad, 0x24, 0x29, 0x6c, 0x9c, 0x09, 0xcf, 0x2a, 0x99, 0xb0, 0xb1, 0x01, 0x0b, 0x7c, 0x2f, 0x21, 0x48, 0x1b, - 0x2a, 0xd3, 0x70, 0x2c, 0xed, 0x36, 0x0d, 0xc7, 0xc6, 0xff, 0x43, 0xb3, 0x47, 0x88, 0x3d, 0x3c, - 0x38, 0x05, 0x3f, 0xf1, 0x5e, 0x65, 0x75, 0x2f, 0x03, 0x5a, 0x92, 0x52, 0xe1, 0x6e, 0x7d, 0x40, - 0x7b, 0x7e, 0x48, 0x3e, 0xf1, 0xc3, 0x6f, 0xed, 0xd0, 0x39, 0x5d, 0xce, 0x8a, 0x60, 0x56, 0xfc, - 0x5f, 0x50, 0xb9, 0x3a, 0x67, 0xb2, 0x6f, 0xe3, 0x0d, 0x58, 0xd6, 0xe8, 0x15, 0x6e, 0x7c, 0x0b, - 0x1a, 0x2c, 0x2a, 0x88, 0xec, 0xe8, 0xaa, 0xda, 0x01, 0x3b, 0x2e, 0x74, 0xd0, 0xca, 0x97, 0x86, - 0x7d, 0x06, 0x8f, 0x63, 0xf4, 0x5b, 0xa9, 0x44, 0x62, 0x45, 0x5f, 0x9f, 0x4a, 0x22, 0xbe, 0x2b, - 0xc1, 0x1c, 0x83, 0x67, 0x82, 0xf4, 0x3a, 0xad, 0xf4, 0x03, 0xdf, 0x22, 0xf6, 0x28, 0xfe, 0x65, - 0x83, 0x02, 0x1e, 0xd9, 0xa3, 0x88, 0xfd, 0x71, 0x42, 0x27, 0x1d, 0x77, 0x84, 0x23, 0x22, 0xff, - 0xdb, 0x68, 0x50, 0xd8, 0x36, 0x07, 0x51, 0x95, 0x44, 0xee, 0x2f, 0x78, 0x86, 0x30, 0x6b, 0xb2, - 0x6f, 0xf9, 0xb0, 0xcc, 0x63, 0x2d, 0x7b, 0x58, 0xee, 0x42, 0x2d, 0xd5, 0xe3, 0x88, 0xc7, 0xc6, - 0x07, 0x80, 0x54, 0xf1, 0x84, 0xfe, 0xae, 0x40, 0x95, 0x49, 0x2f, 0x6f, 0xb3, 0x96, 0x2e, 0x9f, - 0x29, 0x66, 0x8d, 0xbb, 0x80, 0xb8, 0xc2, 0xb4, 0x1b, 0xec, 0xe4, 0xca, 0x7d, 0x1f, 0x96, 0xb5, - 0xf5, 0xf1, 0x93, 0xa1, 0x46, 0x20, 0xbd, 0xbb, 0x58, 0xfc, 0x8f, 0x12, 0x40, 0x6f, 0x4a, 0x0e, - 0x44, 0x6d, 0xaf, 0x4a, 0x59, 0xd2, 0xa5, 0xa4, 0x73, 0x81, 0x1d, 0x45, 0xdf, 0xfa, 0xa1, 0x4c, - 0xd1, 0xe2, 0x31, 0xab, 0xcb, 0xa7, 0xe4, 0x40, 0xf6, 0xee, 0xe8, 0x37, 0xba, 0x0c, 0x2d, 0xfe, - 0x53, 0x8d, 0x65, 0x3b, 0x4e, 0x88, 0xa3, 0x48, 0x34, 0xf1, 0x9a, 0x1c, 0xda, 0xe3, 0x40, 0x8a, - 0xe6, 0x3a, 0xd8, 0x23, 0x2e, 0x39, 0xb2, 0x88, 0xff, 0x0c, 0x7b, 0x22, 0xf9, 0x6a, 0x4a, 0xe8, - 0x23, 0x0a, 0xa4, 0x68, 0x21, 0x1e, 0xb9, 0x11, 0x09, 0x25, 0x9a, 0xec, 0x34, 0x09, 0x28, 0x43, - 0x33, 0xbe, 0x2f, 0x41, 0x7b, 0x6f, 0x3a, 0x1e, 0x73, 0x21, 0x4f, 0xab, 0x4b, 0xf4, 0x86, 0x90, - 0xa3, 0x9c, 0xea, 0xe4, 0x25, 0x2a, 0x12, 0xc2, 0xfd, 0xf0, 0x4a, 0x6e, 0x19, 0x96, 0x14, 0x46, - 0x45, 0x11, 0x72, 0x17, 0x10, 0xaf, 0x4f, 0x5e, 0x8e, 0x7f, 0xe3, 0x0c, 0x2c, 0x6b, 0xeb, 0x05, - 0xd9, 0xeb, 0xd0, 0x14, 0xef, 0x6f, 0xc2, 0xce, 0x67, 0xa1, 0x46, 0x83, 0xc5, 0xd0, 0x75, 0x64, - 0x5f, 0x76, 0x3e, 0xf0, 0x9d, 0x2d, 0xd7, 0x09, 0x8d, 0x3e, 0x34, 0x4d, 0x4e, 0x5e, 0xe0, 0xde, - 0x81, 0x96, 0x78, 0xad, 0xb3, 0xb4, 0xf7, 0xec, 0xa4, 0x89, 0xa8, 0xd1, 0x36, 0x9b, 0x9e, 0x3a, - 0x34, 0xbe, 0x86, 0xee, 0xe3, 0xc0, 0xa1, 0xd9, 0x8e, 0x4a, 0x55, 0x8a, 0x76, 0x07, 0xe4, 0x7f, - 0x5d, 0x45, 0xc4, 0xf5, 0x65, 0xcd, 0x50, 0x1d, 0x1a, 0xe7, 0x60, 0x3d, 0x97, 0xb8, 0x90, 0x3b, - 0x80, 0x76, 0x32, 0xe1, 0xb8, 0xb2, 0x1d, 0xcd, 0xda, 0xcc, 0x25, 0xa5, 0xcd, 0xbc, 0x1a, 0x5f, - 0xa1, 0x3c, 0x18, 0x8b, 0x91, 0x92, 0xd5, 0x54, 0x8a, 0xb2, 0x9a, 0x59, 0x2d, 0xab, 0x31, 0x3e, - 0x8b, 0xb5, 0x27, 0x52, 0xca, 0xf7, 0x58, 0x5e, 0xcb, 0xf7, 0x96, 0x91, 0xe0, 0x6c, 0x8e, 0x70, - 0x1c, 0xc3, 0x54, 0x90, 0x8d, 0x45, 0x68, 0x6a, 0x31, 0xc1, 0xf8, 0x08, 0x5a, 0xa9, 0x43, 0x7e, - 0x23, 0x75, 0xf7, 0x67, 0xd4, 0xa6, 0xdf, 0xfc, 0xd7, 0x5f, 0x83, 0x9a, 0xfc, 0xfd, 0x0c, 0xcd, - 0x43, 0xe5, 0xd1, 0xd6, 0x5e, 0x7b, 0x86, 0x7e, 0x3c, 0xde, 0xde, 0x6b, 0x97, 0xae, 0xdf, 0x86, - 0xc5, 0xd4, 0xcb, 0x12, 0x5a, 0x82, 0xe6, 0xa0, 0xd7, 0xdf, 0xfe, 0xf8, 0xe1, 0x97, 0x96, 0xb9, - 0xd3, 0xdb, 0xfe, 0xaa, 0x3d, 0x83, 0x56, 0xa0, 0x2d, 0x41, 0xfd, 0x87, 0x8f, 0x38, 0xb4, 0x74, - 0xfd, 0x19, 0xb4, 0xf4, 0xe4, 0x16, 0x9d, 0x81, 0xa5, 0xad, 0x87, 0xfd, 0x47, 0xbd, 0xdd, 0xfe, - 0x8e, 0x69, 0x6d, 0x99, 0x3b, 0xbd, 0x47, 0x3b, 0xdb, 0xed, 0x19, 0x1d, 0x6c, 0x3e, 0xee, 0xf7, - 0x77, 0xfb, 0x9f, 0xb6, 0x4b, 0x94, 0x6a, 0x02, 0xde, 0xf9, 0x72, 0x97, 0x22, 0x97, 0x75, 0xe4, - 0xc7, 0xfd, 0x7b, 0xfd, 0x87, 0x3f, 0xeb, 0xb7, 0x2b, 0x9b, 0x7f, 0x6a, 0x40, 0x4b, 0x0a, 0x88, - 0x43, 0xd6, 0x0f, 0xbd, 0x0b, 0xf3, 0xf2, 0xcf, 0xc0, 0x24, 0xdd, 0xd6, 0x7f, 0x63, 0xec, 0x76, - 0xb2, 0x13, 0xc2, 0x51, 0x66, 0xd0, 0x1e, 0x33, 0x9c, 0xf2, 0x8a, 0x77, 0x4e, 0x55, 0x65, 0xe6, - 0x99, 0xb0, 0x7b, 0xbe, 0x68, 0x3a, 0xa6, 0x38, 0xa0, 0xd6, 0x52, 0x7f, 0xa7, 0x40, 0xc9, 0x9a, - 0xdc, 0xdf, 0x34, 0xba, 0x17, 0x0a, 0xe7, 0x63, 0xa2, 0x5f, 0x41, 0x3b, 0xfd, 0x23, 0x05, 0x4a, - 0xfa, 0xda, 0x05, 0x3f, 0x69, 0x74, 0x2f, 0x1e, 0x83, 0xa1, 0x92, 0xce, 0xfc, 0x72, 0xb0, 0x51, - 0xfc, 0x68, 0x9c, 0x21, 0x5d, 0xf4, 0x12, 0xcd, 0x55, 0xa1, 0xbf, 0xbe, 0x21, 0xf5, 0xa1, 0x3f, - 0xe7, 0x15, 0x56, 0x51, 0x45, 0xfe, 0xb3, 0x9d, 0x31, 0x83, 0xbe, 0x80, 0xc5, 0x54, 0x2b, 0x0c, - 0x25, 0xab, 0xf2, 0x1b, 0x7b, 0xdd, 0x8d, 0x62, 0x04, 0xdd, 0x6e, 0x6a, 0xa3, 0x4b, 0xb3, 0x5b, - 0x4e, 0xf7, 0x4c, 0xb3, 0x5b, 0x6e, 0x87, 0x8c, 0xb9, 0x97, 0xd6, 0xce, 0x52, 0xdc, 0x2b, 0xaf, - 0x77, 0xd6, 0x3d, 0x5f, 0x34, 0xad, 0x8a, 0x9f, 0x6a, 0x65, 0x29, 0xe2, 0xe7, 0x77, 0xc8, 0xba, - 0x1b, 0xc5, 0x08, 0x69, 0x5b, 0x25, 0x25, 0x7a, 0xca, 0x56, 0x99, 0x8e, 0x50, 0xca, 0x56, 0xd9, - 0xda, 0x5e, 0xd8, 0x2a, 0x55, 0x6b, 0x5f, 0x28, 0x2c, 0x53, 0xb2, 0xb6, 0xca, 0xaf, 0x7c, 0x8c, - 0x19, 0xd4, 0x83, 0x9a, 0xac, 0x33, 0x50, 0x72, 0xba, 0x53, 0xc5, 0x4d, 0xf7, 0x6c, 0xce, 0x4c, - 0x4c, 0xe2, 0x7f, 0x61, 0x96, 0x42, 0xd1, 0x8a, 0x86, 0x24, 0x97, 0x9e, 0x49, 0x41, 0xe3, 0x65, - 0xef, 0x43, 0x95, 0x27, 0xea, 0x28, 0x89, 0xb9, 0x5a, 0x0d, 0xd0, 0x5d, 0xcb, 0xc0, 0xe3, 0xc5, - 0x9f, 0xf1, 0xbf, 0x85, 0x45, 0xc6, 0x8d, 0xd6, 0xb5, 0x7f, 0xf4, 0xf4, 0xbc, 0xbe, 0xfb, 0x5a, - 0xfe, 0x64, 0x4c, 0xeb, 0x09, 0x2c, 0xe7, 0x5c, 0x81, 0x28, 0x69, 0x0b, 0x15, 0xdf, 0xbe, 0xdd, - 0x4b, 0xc7, 0x23, 0xa9, 0xc2, 0x0a, 0xab, 0xad, 0xaa, 0xae, 0xae, 0x18, 0x6b, 0x2d, 0x03, 0x97, - 0x8b, 0x37, 0xff, 0x5a, 0x86, 0x05, 0x9e, 0xa8, 0x88, 0x50, 0xfd, 0x29, 0x40, 0x92, 0x2e, 0xa3, - 0xae, 0xe6, 0x3d, 0x5a, 0x89, 0xd0, 0x5d, 0xcf, 0x9d, 0x53, 0xd5, 0xa8, 0x64, 0xbe, 0x8a, 0x1a, - 0xb3, 0xf9, 0xb4, 0xa2, 0xc6, 0x9c, 0x64, 0xd9, 0x98, 0x41, 0xdb, 0x50, 0x8f, 0xd3, 0x31, 0xa4, - 0x64, 0x71, 0xa9, 0x5c, 0xb2, 0xdb, 0xcd, 0x9b, 0x52, 0x39, 0x52, 0xf2, 0x2f, 0x85, 0xa3, 0x6c, - 0x56, 0xa7, 0x70, 0x94, 0x97, 0xb2, 0xcd, 0xfc, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x6b, 0xf3, 0x7c, - 0x10, 0x9b, 0x2f, 0x00, 0x00, + 0x2a, 0xd3, 0x70, 0x2c, 0xed, 0x36, 0x0d, 0xc7, 0xc6, 0xcf, 0xa0, 0xd9, 0x23, 0xc4, 0x1e, 0x1e, + 0x9c, 0x82, 0x9f, 0x78, 0xaf, 0xb2, 0x9a, 0x75, 0x67, 0x78, 0x32, 0x0c, 0x68, 0x49, 0xda, 0x85, + 0xfb, 0xf7, 0x01, 0xed, 0xf9, 0x21, 0xf9, 0xc4, 0x0f, 0xbf, 0xb5, 0x43, 0xe7, 0x74, 0x59, 0x2c, + 0x82, 0x59, 0xf1, 0xc7, 0x41, 0xe5, 0xea, 0x9c, 0xc9, 0xbe, 0x8d, 0x37, 0x60, 0x59, 0xa3, 0x57, + 0xb8, 0xf1, 0x2d, 0x68, 0xb0, 0x38, 0x21, 0xf2, 0xa5, 0xab, 0x6a, 0x4f, 0xec, 0xb8, 0x60, 0x42, + 0x6b, 0x61, 0x7a, 0x11, 0x30, 0x78, 0x1c, 0xb5, 0xdf, 0x4a, 0xa5, 0x16, 0x2b, 0xfa, 0xfa, 0x54, + 0x5a, 0xf1, 0x5d, 0x09, 0xe6, 0x18, 0x3c, 0x13, 0xb6, 0xd7, 0x69, 0xed, 0x1f, 0xf8, 0x16, 0xb1, + 0x47, 0xf1, 0x4f, 0x1c, 0x14, 0xf0, 0xc8, 0x1e, 0x45, 0xec, 0x1f, 0x14, 0x3a, 0xe9, 0xb8, 0x23, + 0x1c, 0x11, 0xf9, 0x27, 0x47, 0x83, 0xc2, 0xb6, 0x39, 0x88, 0xaa, 0x24, 0x72, 0x7f, 0xc1, 0x73, + 0x86, 0x59, 0x93, 0x7d, 0xcb, 0xa7, 0x66, 0x1e, 0x7d, 0xd9, 0x53, 0x73, 0x17, 0x6a, 0xa9, 0xae, + 0x47, 0x3c, 0x36, 0x3e, 0x00, 0xa4, 0x8a, 0x27, 0xf4, 0x77, 0x05, 0xaa, 0x4c, 0x7a, 0x79, 0xbf, + 0xb5, 0x74, 0xf9, 0x4c, 0x31, 0x6b, 0xdc, 0x05, 0xc4, 0x15, 0xa6, 0xdd, 0x69, 0x27, 0x57, 0xee, + 0xfb, 0xb0, 0xac, 0xad, 0x8f, 0x1f, 0x11, 0x35, 0x02, 0xe9, 0xdd, 0xc5, 0xe2, 0x7f, 0x94, 0x00, + 0x7a, 0x53, 0x72, 0x20, 0xaa, 0x7d, 0x55, 0xca, 0x92, 0x2e, 0x25, 0x9d, 0x0b, 0xec, 0x28, 0xfa, + 0xd6, 0x0f, 0x65, 0xd2, 0x16, 0x8f, 0x59, 0xa5, 0x3e, 0x25, 0x07, 0xb2, 0x9b, 0x47, 0xbf, 0xd1, + 0x65, 0x68, 0xf1, 0xdf, 0x6c, 0x2c, 0xdb, 0x71, 0x42, 0x1c, 0x45, 0xa2, 0xad, 0xd7, 0xe4, 0xd0, + 0x1e, 0x07, 0x52, 0x34, 0xd7, 0xc1, 0x1e, 0x71, 0xc9, 0x91, 0x45, 0xfc, 0x67, 0xd8, 0x13, 0xe9, + 0x58, 0x53, 0x42, 0x1f, 0x51, 0x20, 0x45, 0x0b, 0xf1, 0xc8, 0x8d, 0x48, 0x28, 0xd1, 0x64, 0xef, + 0x49, 0x40, 0x19, 0x9a, 0xf1, 0x7d, 0x09, 0xda, 0x7b, 0xd3, 0xf1, 0x98, 0x0b, 0x79, 0x5a, 0x5d, + 0xa2, 0x37, 0x84, 0x1c, 0xe5, 0x54, 0x6f, 0x2f, 0x51, 0x91, 0x10, 0xee, 0x87, 0xd7, 0x76, 0xcb, + 0xb0, 0xa4, 0x30, 0x2a, 0xca, 0x92, 0xbb, 0x80, 0x78, 0xc5, 0xf2, 0x72, 0xfc, 0x1b, 0x67, 0x60, + 0x59, 0x5b, 0x2f, 0xc8, 0x5e, 0x87, 0xa6, 0x78, 0x91, 0x13, 0x76, 0x3e, 0x0b, 0x35, 0x1a, 0x2c, + 0x86, 0xae, 0x23, 0x3b, 0xb5, 0xf3, 0x81, 0xef, 0x6c, 0xb9, 0x4e, 0x68, 0xf4, 0xa1, 0x69, 0x72, + 0xf2, 0x02, 0xf7, 0x0e, 0xb4, 0xc4, 0xfb, 0x9d, 0xa5, 0xbd, 0x70, 0x27, 0x6d, 0x45, 0x8d, 0xb6, + 0xd9, 0xf4, 0xd4, 0xa1, 0xf1, 0x35, 0x74, 0x1f, 0x07, 0x0e, 0xcd, 0x7f, 0x54, 0xaa, 0x52, 0xb4, + 0x3b, 0x20, 0xff, 0xf4, 0x2a, 0x22, 0xae, 0x2f, 0x6b, 0x86, 0xea, 0xd0, 0x38, 0x07, 0xeb, 0xb9, + 0xc4, 0x85, 0xdc, 0x01, 0xb4, 0x93, 0x09, 0xc7, 0x95, 0x0d, 0x6a, 0xd6, 0x78, 0x2e, 0x29, 0x8d, + 0xe7, 0xd5, 0xf8, 0x52, 0xe5, 0xe1, 0x59, 0x8c, 0x94, 0x3c, 0xa7, 0x52, 0x94, 0xe7, 0xcc, 0x6a, + 0x79, 0x8e, 0xf1, 0x59, 0xac, 0x3d, 0x91, 0x64, 0xbe, 0xc7, 0x32, 0x5d, 0xbe, 0xb7, 0x8c, 0x04, + 0x67, 0x73, 0x84, 0xe3, 0x18, 0xa6, 0x82, 0x6c, 0x2c, 0x42, 0x53, 0x8b, 0x09, 0xc6, 0x47, 0xd0, + 0x4a, 0x1d, 0xf2, 0x1b, 0xa9, 0x6c, 0x20, 0xa3, 0x36, 0x3d, 0x17, 0xb8, 0xfe, 0x1a, 0xd4, 0xe4, + 0x0f, 0x69, 0x68, 0x1e, 0x2a, 0x8f, 0xb6, 0xf6, 0xda, 0x33, 0xf4, 0xe3, 0xf1, 0xf6, 0x5e, 0xbb, + 0x74, 0xfd, 0x36, 0x2c, 0xa6, 0xde, 0x9a, 0xd0, 0x12, 0x34, 0x07, 0xbd, 0xfe, 0xf6, 0xc7, 0x0f, + 0xbf, 0xb4, 0xcc, 0x9d, 0xde, 0xf6, 0x57, 0xed, 0x19, 0xb4, 0x02, 0x6d, 0x09, 0xea, 0x3f, 0x7c, + 0xc4, 0xa1, 0xa5, 0xeb, 0xcf, 0xa0, 0xa5, 0xa7, 0xbb, 0xe8, 0x0c, 0x2c, 0x6d, 0x3d, 0xec, 0x3f, + 0xea, 0xed, 0xf6, 0x77, 0x4c, 0x6b, 0xcb, 0xdc, 0xe9, 0x3d, 0xda, 0xd9, 0x6e, 0xcf, 0xe8, 0x60, + 0xf3, 0x71, 0xbf, 0xbf, 0xdb, 0xff, 0xb4, 0x5d, 0xa2, 0x54, 0x13, 0xf0, 0xce, 0x97, 0xbb, 0x14, + 0xb9, 0xac, 0x23, 0x3f, 0xee, 0xdf, 0xeb, 0x3f, 0xfc, 0xff, 0x7e, 0xbb, 0xb2, 0xf9, 0xa7, 0x06, + 0xb4, 0xa4, 0x80, 0x38, 0x64, 0x1d, 0xd2, 0xbb, 0x30, 0x2f, 0xff, 0x15, 0x4c, 0x12, 0x70, 0xfd, + 0xc7, 0xc6, 0x6e, 0x27, 0x3b, 0x21, 0x1c, 0x65, 0x06, 0xed, 0x31, 0xc3, 0x29, 0xef, 0x7a, 0xe7, + 0x54, 0x55, 0x66, 0x1e, 0x0e, 0xbb, 0xe7, 0x8b, 0xa6, 0x63, 0x8a, 0x03, 0x6a, 0x2d, 0xf5, 0x07, + 0x0b, 0x94, 0xac, 0xc9, 0xfd, 0x71, 0xa3, 0x7b, 0xa1, 0x70, 0x3e, 0x26, 0xfa, 0x15, 0xb4, 0xd3, + 0xbf, 0x56, 0xa0, 0xa4, 0xd3, 0x5d, 0xf0, 0xdb, 0x46, 0xf7, 0xe2, 0x31, 0x18, 0x2a, 0xe9, 0xcc, + 0x4f, 0x08, 0x1b, 0xc5, 0xcf, 0xc8, 0x19, 0xd2, 0x45, 0x6f, 0xd3, 0x5c, 0x15, 0xfa, 0x7b, 0x1c, + 0x52, 0x9f, 0xfe, 0x73, 0xde, 0x65, 0x15, 0x55, 0xe4, 0x3f, 0xe4, 0x19, 0x33, 0xe8, 0x0b, 0x58, + 0x4c, 0x35, 0xc7, 0x50, 0xb2, 0x2a, 0xbf, 0xd5, 0xd7, 0xdd, 0x28, 0x46, 0xd0, 0xed, 0xa6, 0xb6, + 0xbe, 0x34, 0xbb, 0xe5, 0xf4, 0xd3, 0x34, 0xbb, 0xe5, 0xf6, 0xcc, 0x98, 0x7b, 0x69, 0x0d, 0x2e, + 0xc5, 0xbd, 0xf2, 0xba, 0x69, 0xdd, 0xf3, 0x45, 0xd3, 0xaa, 0xf8, 0xa9, 0xe6, 0x96, 0x22, 0x7e, + 0x7e, 0xcf, 0xac, 0xbb, 0x51, 0x8c, 0x90, 0xb6, 0x55, 0x52, 0xb4, 0xa7, 0x6c, 0x95, 0xe9, 0x11, + 0xa5, 0x6c, 0x95, 0xad, 0xf6, 0x85, 0xad, 0x52, 0xd5, 0xf7, 0x85, 0xc2, 0xc2, 0x25, 0x6b, 0xab, + 0xfc, 0x5a, 0xc8, 0x98, 0x41, 0x3d, 0xa8, 0xc9, 0xca, 0x03, 0x25, 0xa7, 0x3b, 0x55, 0xee, 0x74, + 0xcf, 0xe6, 0xcc, 0xc4, 0x24, 0xfe, 0x17, 0x66, 0x29, 0x14, 0xad, 0x68, 0x48, 0x72, 0xe9, 0x99, + 0x14, 0x34, 0x5e, 0xf6, 0x3e, 0x54, 0x79, 0xa2, 0x8e, 0x92, 0x98, 0xab, 0x55, 0x05, 0xdd, 0xb5, + 0x0c, 0x3c, 0x5e, 0xfc, 0x19, 0xff, 0x7f, 0x58, 0x64, 0xdc, 0x68, 0x5d, 0xfb, 0x6b, 0x4f, 0xcf, + 0xeb, 0xbb, 0xaf, 0xe5, 0x4f, 0xc6, 0xb4, 0x9e, 0xc0, 0x72, 0xce, 0x15, 0x88, 0x92, 0x46, 0x51, + 0xf1, 0xed, 0xdb, 0xbd, 0x74, 0x3c, 0x92, 0x2a, 0xac, 0xb0, 0xda, 0xaa, 0xea, 0xea, 0x8a, 0xb1, + 0xd6, 0x32, 0x70, 0xb9, 0x78, 0xf3, 0xaf, 0x65, 0x58, 0xe0, 0x89, 0x8a, 0x08, 0xd5, 0x9f, 0x02, + 0x24, 0xe9, 0x32, 0xea, 0x6a, 0xde, 0xa3, 0x95, 0x08, 0xdd, 0xf5, 0xdc, 0x39, 0x55, 0x8d, 0x4a, + 0xe6, 0xab, 0xa8, 0x31, 0x9b, 0x4f, 0x2b, 0x6a, 0xcc, 0x49, 0x96, 0x8d, 0x19, 0xb4, 0x0d, 0xf5, + 0x38, 0x1d, 0x43, 0x4a, 0x16, 0x97, 0xca, 0x25, 0xbb, 0xdd, 0xbc, 0x29, 0x95, 0x23, 0x25, 0xff, + 0x52, 0x38, 0xca, 0x66, 0x75, 0x0a, 0x47, 0x79, 0x29, 0xdb, 0xcc, 0xbf, 0x03, 0x00, 0x00, 0xff, + 0xff, 0xd6, 0x53, 0x52, 0xb5, 0xad, 0x2f, 0x00, 0x00, } diff --git a/pkg/kubelet/api/v1alpha1/runtime/api.proto b/pkg/kubelet/api/v1alpha1/runtime/api.proto index 7df26e32ec6..a34b52d39e4 100644 --- a/pkg/kubelet/api/v1alpha1/runtime/api.proto +++ b/pkg/kubelet/api/v1alpha1/runtime/api.proto @@ -719,7 +719,7 @@ message ExecRequest { optional string container_id = 1; // Command to execute. repeated string cmd = 2; - // Whether use tty. + // Whether to exec the command in a TTY. optional bool tty = 3; // Whether to stream stdin. optional bool stdin = 4; @@ -735,6 +735,9 @@ message AttachRequest { optional string container_id = 1; // Whether to stream stdin. optional bool stdin = 2; + // Whether the process being attached is running in a TTY. + // This must match the TTY setting in the ContainerConfig. + optional bool tty = 3; } message AttachResponse { diff --git a/pkg/kubelet/container/helpers.go b/pkg/kubelet/container/helpers.go index 17eeaf41598..33a73c20432 100644 --- a/pkg/kubelet/container/helpers.go +++ b/pkg/kubelet/container/helpers.go @@ -246,3 +246,18 @@ func (r *containerCommandRunnerWrapper) RunInContainer(id ContainerID, cmd []str // error. return buffer.Bytes(), err } + +// GetContainerSpec gets the container spec by containerName. +func GetContainerSpec(pod *v1.Pod, containerName string) *v1.Container { + for i, c := range pod.Spec.Containers { + if containerName == c.Name { + return &pod.Spec.Containers[i] + } + } + for i, c := range pod.Spec.InitContainers { + if containerName == c.Name { + return &pod.Spec.InitContainers[i] + } + } + return nil +} diff --git a/pkg/kubelet/container/runtime.go b/pkg/kubelet/container/runtime.go index 225cf72277f..85dc81f15ff 100644 --- a/pkg/kubelet/container/runtime.go +++ b/pkg/kubelet/container/runtime.go @@ -140,7 +140,7 @@ type DirectStreamingRuntime interface { // the runtime server. type IndirectStreamingRuntime interface { GetExec(id ContainerID, cmd []string, stdin, stdout, stderr, tty bool) (*url.URL, error) - GetAttach(id ContainerID, stdin, stdout, stderr bool) (*url.URL, error) + GetAttach(id ContainerID, stdin, stdout, stderr, tty bool) (*url.URL, error) GetPortForward(podName, podNamespace string, podUID types.UID) (*url.URL, error) } diff --git a/pkg/kubelet/container/testing/fake_runtime.go b/pkg/kubelet/container/testing/fake_runtime.go index 3b996ea77ca..87fff6be757 100644 --- a/pkg/kubelet/container/testing/fake_runtime.go +++ b/pkg/kubelet/container/testing/fake_runtime.go @@ -78,12 +78,16 @@ type FakeDirectStreamingRuntime struct { } } +var _ DirectStreamingRuntime = &FakeDirectStreamingRuntime{} + const FakeHost = "localhost:12345" type FakeIndirectStreamingRuntime struct { *FakeRuntime } +var _ IndirectStreamingRuntime = &FakeIndirectStreamingRuntime{} + // FakeRuntime should implement Runtime. var _ Runtime = &FakeRuntime{} @@ -459,7 +463,7 @@ func (f *FakeIndirectStreamingRuntime) GetExec(id ContainerID, cmd []string, std return &url.URL{Host: FakeHost}, f.Err } -func (f *FakeIndirectStreamingRuntime) GetAttach(id ContainerID, stdin, stdout, stderr bool) (*url.URL, error) { +func (f *FakeIndirectStreamingRuntime) GetAttach(id ContainerID, stdin, stdout, stderr, tty bool) (*url.URL, error) { f.Lock() defer f.Unlock() diff --git a/pkg/kubelet/dockershim/docker_streaming.go b/pkg/kubelet/dockershim/docker_streaming.go index 3d51894b232..18a3d467568 100644 --- a/pkg/kubelet/dockershim/docker_streaming.go +++ b/pkg/kubelet/dockershim/docker_streaming.go @@ -51,13 +51,12 @@ func (r *streamingRuntime) exec(containerID string, cmd []string, in io.Reader, return r.execHandler.ExecInContainer(r.client, container, cmd, in, out, errw, tty, resize, timeout) } -func (r *streamingRuntime) Attach(containerID string, in io.Reader, out, errw io.WriteCloser, resize <-chan term.Size) error { - container, err := checkContainerStatus(r.client, containerID) +func (r *streamingRuntime) Attach(containerID string, in io.Reader, out, errw io.WriteCloser, tty bool, resize <-chan term.Size) error { + _, err := checkContainerStatus(r.client, containerID) if err != nil { return err } - tty := container.Config.Tty return dockertools.AttachContainer(r.client, containerID, in, out, errw, tty, resize) } @@ -99,12 +98,11 @@ func (ds *dockerService) Attach(req *runtimeapi.AttachRequest) (*runtimeapi.Atta if ds.streamingServer == nil { return nil, streaming.ErrorStreamingDisabled("attach") } - container, err := checkContainerStatus(ds.client, req.GetContainerId()) + _, err := checkContainerStatus(ds.client, req.GetContainerId()) if err != nil { return nil, err } - tty := container.Config.Tty - return ds.streamingServer.GetAttach(req, tty) + return ds.streamingServer.GetAttach(req) } // PortForward prepares a streaming endpoint to forward ports from a PodSandbox, and returns the address. diff --git a/pkg/kubelet/kubelet_pods.go b/pkg/kubelet/kubelet_pods.go index d8b1f17012e..9ee793fe2ae 100644 --- a/pkg/kubelet/kubelet_pods.go +++ b/pkg/kubelet/kubelet_pods.go @@ -1350,10 +1350,23 @@ func (kl *Kubelet) GetAttach(podFullName string, podUID types.UID, containerName return nil, err } if container == nil { - return nil, fmt.Errorf("container not found (%q)", containerName) + return nil, fmt.Errorf("container %s not found in pod %s", containerName, podFullName) } - return streamingRuntime.GetAttach(container.ID, streamOpts.Stdin, streamOpts.Stdout, streamOpts.Stderr) + // The TTY setting for attach must match the TTY setting in the initial container configuration, + // since whether the process is running in a TTY cannot be changed after it has started. We + // need the api.Pod to get the TTY status. + pod, found := kl.GetPodByFullName(podFullName) + if !found || pod.UID != podUID { + return nil, fmt.Errorf("pod %s not found", podFullName) + } + containerSpec := kubecontainer.GetContainerSpec(pod, containerName) + if containerSpec == nil { + return nil, fmt.Errorf("container %s not found in pod %s", containerName, podFullName) + } + tty := containerSpec.TTY + + return streamingRuntime.GetAttach(container.ID, streamOpts.Stdin, streamOpts.Stdout, streamOpts.Stderr, tty) default: return nil, fmt.Errorf("container runtime does not support attach") } diff --git a/pkg/kubelet/kuberuntime/helpers.go b/pkg/kubelet/kuberuntime/helpers.go index 1ee283d9206..abd1d844373 100644 --- a/pkg/kubelet/kuberuntime/helpers.go +++ b/pkg/kubelet/kuberuntime/helpers.go @@ -130,22 +130,6 @@ func (m *kubeGenericRuntimeManager) sandboxToKubeContainer(s *runtimeapi.PodSand }, nil } -// getContainerSpec gets the container spec by containerName. -func getContainerSpec(pod *v1.Pod, containerName string) *v1.Container { - for i, c := range pod.Spec.Containers { - if containerName == c.Name { - return &pod.Spec.Containers[i] - } - } - for i, c := range pod.Spec.InitContainers { - if containerName == c.Name { - return &pod.Spec.InitContainers[i] - } - } - - return nil -} - // getImageUser gets uid or user name that will run the command(s) from image. The function // guarantees that only one of them is set. func (m *kubeGenericRuntimeManager) getImageUser(image string) (*int64, *string, error) { diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container.go b/pkg/kubelet/kuberuntime/kuberuntime_container.go index d338b970636..c5ffec6548d 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container.go @@ -490,7 +490,7 @@ func (m *kubeGenericRuntimeManager) restoreSpecsFromContainerLabels(containerID func (m *kubeGenericRuntimeManager) killContainer(pod *v1.Pod, containerID kubecontainer.ContainerID, containerName string, reason string, gracePeriodOverride *int64) error { var containerSpec *v1.Container if pod != nil { - containerSpec = getContainerSpec(pod, containerName) + containerSpec = kubecontainer.GetContainerSpec(pod, containerName) } else { // Restore necessary information if one of the specs is nil. restoredPod, restoredContainer, err := m.restoreSpecsFromContainerLabels(containerID) @@ -684,10 +684,11 @@ func (m *kubeGenericRuntimeManager) GetExec(id kubecontainer.ContainerID, cmd [] } // GetAttach gets the endpoint the runtime will serve the attach request from. -func (m *kubeGenericRuntimeManager) GetAttach(id kubecontainer.ContainerID, stdin, stdout, stderr bool) (*url.URL, error) { +func (m *kubeGenericRuntimeManager) GetAttach(id kubecontainer.ContainerID, stdin, stdout, stderr, tty bool) (*url.URL, error) { req := &runtimeapi.AttachRequest{ ContainerId: &id.ID, Stdin: &stdin, + Tty: &tty, } resp, err := m.runtimeService.Attach(req) if err != nil { diff --git a/pkg/kubelet/server/streaming/server.go b/pkg/kubelet/server/streaming/server.go index 5161d133e0c..88c0bd9698b 100644 --- a/pkg/kubelet/server/streaming/server.go +++ b/pkg/kubelet/server/streaming/server.go @@ -42,7 +42,7 @@ type Server interface { // Get the serving URL for the requests. // Requests must not be nil. Responses may be nil iff an error is returned. GetExec(*runtimeapi.ExecRequest) (*runtimeapi.ExecResponse, error) - GetAttach(req *runtimeapi.AttachRequest, tty bool) (*runtimeapi.AttachResponse, error) + GetAttach(req *runtimeapi.AttachRequest) (*runtimeapi.AttachResponse, error) GetPortForward(*runtimeapi.PortForwardRequest) (*runtimeapi.PortForwardResponse, error) // Start the server. @@ -58,7 +58,7 @@ type Server interface { // The interface to execute the commands and provide the streams. type Runtime interface { Exec(containerID string, cmd []string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan term.Size) error - Attach(containerID string, in io.Reader, out, err io.WriteCloser, resize <-chan term.Size) error + Attach(containerID string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan term.Size) error PortForward(podSandboxID string, port int32, stream io.ReadWriteCloser) error } @@ -154,12 +154,12 @@ func (s *server) GetExec(req *runtimeapi.ExecRequest) (*runtimeapi.ExecResponse, }, nil } -func (s *server) GetAttach(req *runtimeapi.AttachRequest, tty bool) (*runtimeapi.AttachResponse, error) { +func (s *server) GetAttach(req *runtimeapi.AttachRequest) (*runtimeapi.AttachResponse, error) { url := s.buildURL("attach", req.GetContainerId(), streamOpts{ stdin: req.GetStdin(), stdout: true, - stderr: !tty, // For TTY connections, both stderr is combined with stdout. - tty: tty, + stderr: !req.GetTty(), // For TTY connections, both stderr is combined with stdout. + tty: req.GetTty(), }) return &runtimeapi.AttachResponse{ Url: &url, @@ -314,7 +314,7 @@ func (a *criAdapter) ExecInContainer(podName string, podUID types.UID, container } func (a *criAdapter) AttachContainer(podName string, podUID types.UID, container string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan term.Size) error { - return a.Attach(container, in, out, err, resize) + return a.Attach(container, in, out, err, tty, resize) } func (a *criAdapter) PortForward(podName string, podUID types.UID, port uint16, stream io.ReadWriteCloser) error { diff --git a/pkg/kubelet/server/streaming/server_test.go b/pkg/kubelet/server/streaming/server_test.go index 1bd4e3f609a..c76f458aabf 100644 --- a/pkg/kubelet/server/streaming/server_test.go +++ b/pkg/kubelet/server/streaming/server_test.go @@ -134,15 +134,16 @@ func TestGetAttach(t *testing.T) { request := &runtimeapi.AttachRequest{ ContainerId: &containerID, Stdin: &test.stdin, + Tty: &test.tty, } // Non-TLS - resp, err := server.GetAttach(request, test.tty) + resp, err := server.GetAttach(request) assert.NoError(t, err, "testcase=%+v", test) expectedURL := "http://" + testAddr + "/attach/" + testContainerID + test.expectedQuery assert.Equal(t, expectedURL, resp.GetUrl(), "testcase=%+v", test) // TLS - resp, err = tlsServer.GetAttach(request, test.tty) + resp, err = tlsServer.GetAttach(request) assert.NoError(t, err, "testcase=%+v", test) expectedURL = "https://" + testAddr + "/attach/" + testContainerID + test.expectedQuery assert.Equal(t, expectedURL, resp.GetUrl(), "testcase=%+v", test) @@ -299,7 +300,7 @@ func (f *fakeRuntime) Exec(containerID string, cmd []string, stdin io.Reader, st return nil } -func (f *fakeRuntime) Attach(containerID string, stdin io.Reader, stdout, stderr io.WriteCloser, resize <-chan term.Size) error { +func (f *fakeRuntime) Attach(containerID string, stdin io.Reader, stdout, stderr io.WriteCloser, tty bool, resize <-chan term.Size) error { assert.Equal(f.t, testContainerID, containerID) doServerStreams(f.t, "attach", stdin, stdout, stderr) return nil