Working tty and io support in shim

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby 2017-01-26 11:29:19 -08:00
parent 8e5e9ae70e
commit b59bd59d8a
9 changed files with 171 additions and 79 deletions

View file

@ -57,17 +57,26 @@ const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
type EventType int32 type EventType int32
const ( const (
EventType_EXIT EventType = 0 EventType_EXIT EventType = 0
EventType_OOM EventType = 1 EventType_OOM EventType = 1
EventType_CREATED EventType = 2
EventType_STARTED EventType = 3
EventType_EXEC_ADDED EventType = 4
) )
var EventType_name = map[int32]string{ var EventType_name = map[int32]string{
0: "EXIT", 0: "EXIT",
1: "OOM", 1: "OOM",
2: "CREATED",
3: "STARTED",
4: "EXEC_ADDED",
} }
var EventType_value = map[string]int32{ var EventType_value = map[string]int32{
"EXIT": 0, "EXIT": 0,
"OOM": 1, "OOM": 1,
"CREATED": 2,
"STARTED": 3,
"EXEC_ADDED": 4,
} }
func (x EventType) String() string { func (x EventType) String() string {
@ -3244,58 +3253,60 @@ var (
func init() { proto.RegisterFile("shim.proto", fileDescriptorShim) } func init() { proto.RegisterFile("shim.proto", fileDescriptorShim) }
var fileDescriptorShim = []byte{ var fileDescriptorShim = []byte{
// 835 bytes of a gzipped FileDescriptorProto // 868 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x54, 0xcf, 0x6f, 0xe3, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x54, 0x4d, 0x6f, 0xeb, 0x44,
0x14, 0xae, 0x63, 0xe7, 0x47, 0x5f, 0x7e, 0xb4, 0x8c, 0x56, 0xd5, 0x6c, 0x00, 0x37, 0x98, 0x03, 0x14, 0xad, 0x63, 0xe7, 0xa3, 0x37, 0x1f, 0x0d, 0xa3, 0xa7, 0x6a, 0x5e, 0x80, 0x34, 0x98, 0x05,
0x61, 0x85, 0x52, 0x5a, 0xb8, 0x72, 0x60, 0x69, 0x05, 0x95, 0x16, 0x1a, 0xb9, 0x8b, 0xc4, 0x2d, 0xe1, 0x09, 0xa5, 0xb4, 0xb0, 0x65, 0xd1, 0xd7, 0x58, 0xbc, 0x4a, 0x0f, 0x1a, 0x4d, 0x8a, 0xf4,
0x72, 0xea, 0x57, 0x67, 0x24, 0xc7, 0x63, 0x66, 0xc6, 0x69, 0x73, 0xe3, 0xc2, 0xdf, 0xc5, 0x81, 0x76, 0x91, 0x53, 0x4f, 0x9d, 0x91, 0x1c, 0x8f, 0x99, 0x19, 0xa7, 0xcd, 0x8e, 0x0d, 0xbf, 0x8b,
0xcb, 0x1e, 0x39, 0x21, 0x4e, 0x88, 0xe6, 0x2f, 0xe0, 0x4f, 0x40, 0x33, 0xb6, 0x93, 0xa6, 0xeb, 0x05, 0x9b, 0xb7, 0x64, 0x85, 0x58, 0x21, 0x9a, 0x5f, 0xc0, 0x4f, 0x40, 0x33, 0x76, 0x92, 0x7e,
0xb0, 0xb7, 0xf7, 0xbe, 0x79, 0x7e, 0xf3, 0xde, 0xe7, 0x6f, 0x3e, 0x00, 0x39, 0x63, 0xf3, 0x51, 0x38, 0xbc, 0xdd, 0xbd, 0xc7, 0xd7, 0x77, 0xee, 0x3d, 0x73, 0xe6, 0x00, 0xc8, 0x19, 0x9b, 0x0f,
0x2a, 0xb8, 0xe2, 0x84, 0xdc, 0xf0, 0x44, 0x05, 0x2c, 0x41, 0x11, 0x8e, 0x0c, 0xbc, 0x38, 0xed, 0x12, 0xc1, 0x15, 0x47, 0xe8, 0x9a, 0xc7, 0xca, 0x67, 0x31, 0x15, 0xc1, 0xc0, 0xc0, 0x8b, 0x93,
0xbf, 0x1f, 0x71, 0x1e, 0xc5, 0x78, 0x62, 0x2a, 0xa6, 0xd9, 0xed, 0x09, 0xce, 0x53, 0xb5, 0xcc, 0xce, 0xc7, 0x21, 0xe7, 0x61, 0x44, 0x8f, 0x4d, 0xc5, 0x34, 0xbd, 0x39, 0xa6, 0xf3, 0x44, 0x2d,
0x3f, 0xe8, 0x3f, 0x8b, 0x78, 0xc4, 0x4d, 0x78, 0xa2, 0xa3, 0x1c, 0xf5, 0xfe, 0xb4, 0xa0, 0xfb, 0xb3, 0x1f, 0x3a, 0x2f, 0x42, 0x1e, 0x72, 0x13, 0x1e, 0xeb, 0x28, 0x43, 0xdd, 0x3f, 0x2d, 0x68,
0x8d, 0xc0, 0x40, 0xa1, 0x8f, 0x3f, 0x67, 0x28, 0x15, 0x39, 0x82, 0x1a, 0x0b, 0xa9, 0x35, 0xb0, 0x9e, 0x0b, 0xea, 0x2b, 0x4a, 0xe8, 0xcf, 0x29, 0x95, 0x0a, 0x1d, 0x42, 0x89, 0x05, 0xd8, 0xea,
0x86, 0xfb, 0x2f, 0x1b, 0xab, 0xbf, 0x8f, 0x6b, 0x97, 0xe7, 0x7e, 0x8d, 0x85, 0xe4, 0x08, 0x1a, 0x59, 0xfd, 0xfd, 0xd7, 0x95, 0xd5, 0xdf, 0x47, 0xa5, 0x8b, 0x21, 0x29, 0xb1, 0x00, 0x1d, 0x42,
0xd3, 0x2c, 0x09, 0x63, 0xa4, 0x35, 0x7d, 0xe6, 0x17, 0x19, 0xa1, 0xd0, 0x14, 0x59, 0xa2, 0xd8, 0x65, 0x9a, 0xc6, 0x41, 0x44, 0x71, 0x49, 0x7f, 0x23, 0x79, 0x86, 0x30, 0x54, 0x45, 0x1a, 0x2b,
0x1c, 0xa9, 0x6d, 0x0e, 0xca, 0x94, 0x3c, 0x87, 0x56, 0xc2, 0x27, 0x29, 0x5b, 0x70, 0x45, 0x9d, 0x36, 0xa7, 0xd8, 0x36, 0x1f, 0xd6, 0x29, 0x7a, 0x09, 0xb5, 0x98, 0x4f, 0x12, 0xb6, 0xe0, 0x0a,
0x81, 0x35, 0x6c, 0xf9, 0xcd, 0x84, 0x8f, 0x75, 0x4a, 0xfa, 0xd0, 0x52, 0x28, 0xe6, 0x2c, 0x09, 0x3b, 0x3d, 0xab, 0x5f, 0x23, 0xd5, 0x98, 0x8f, 0x74, 0x8a, 0x3a, 0x50, 0x53, 0x54, 0xcc, 0x59,
0x62, 0x5a, 0x37, 0x47, 0xeb, 0x9c, 0x3c, 0x83, 0xba, 0x54, 0x21, 0x4b, 0x68, 0xc3, 0xb4, 0xcb, 0xec, 0x47, 0xb8, 0x6c, 0x3e, 0x6d, 0x72, 0xf4, 0x02, 0xca, 0x52, 0x05, 0x2c, 0xc6, 0x15, 0xd3,
0x13, 0x7d, 0xbd, 0x54, 0x21, 0xcf, 0x14, 0x6d, 0xe6, 0xd7, 0xe7, 0x59, 0x81, 0xa3, 0x10, 0xb4, 0x2e, 0x4b, 0xf4, 0xf1, 0x52, 0x05, 0x3c, 0x55, 0xb8, 0x9a, 0x1d, 0x9f, 0x65, 0x39, 0x4e, 0x85,
0xb5, 0xc6, 0x51, 0x08, 0xcf, 0x83, 0x5e, 0xb9, 0x97, 0x4c, 0x79, 0x22, 0x91, 0x1c, 0x82, 0x9d, 0xc0, 0xb5, 0x0d, 0x4e, 0x85, 0x70, 0x5d, 0x68, 0xad, 0xf7, 0x92, 0x09, 0x8f, 0x25, 0x45, 0x6d,
0x16, 0x9b, 0x75, 0x7d, 0x1d, 0x7a, 0x3d, 0xe8, 0x5c, 0xab, 0x40, 0xa8, 0x62, 0x75, 0xef, 0x00, 0xb0, 0x93, 0x7c, 0xb3, 0x26, 0xd1, 0xa1, 0xdb, 0x82, 0xc6, 0x58, 0xf9, 0x42, 0xe5, 0xab, 0xbb,
0xba, 0xe7, 0x18, 0xe3, 0x9a, 0x0b, 0xef, 0x14, 0x7a, 0x25, 0x50, 0x34, 0x39, 0x86, 0x36, 0xde, 0x07, 0xd0, 0x1c, 0xd2, 0x88, 0x6e, 0xb8, 0x70, 0x4f, 0xa0, 0xb5, 0x06, 0xf2, 0x26, 0x47, 0x50,
0x33, 0x35, 0x91, 0x2a, 0x50, 0x99, 0x2c, 0x9a, 0x81, 0x86, 0xae, 0x0d, 0xe2, 0xfd, 0x6e, 0x43, 0xa7, 0x77, 0x4c, 0x4d, 0xa4, 0xf2, 0x55, 0x2a, 0xf3, 0x66, 0xa0, 0xa1, 0xb1, 0x41, 0xdc, 0xdf,
0xfb, 0xe2, 0x1e, 0x6f, 0xde, 0x45, 0xe7, 0x63, 0x06, 0x6a, 0xbb, 0x18, 0xb0, 0xab, 0x19, 0x70, 0x6d, 0xa8, 0x7b, 0x77, 0xf4, 0xfa, 0x43, 0x74, 0x3e, 0x64, 0xa0, 0xb4, 0x8b, 0x01, 0xbb, 0x98,
0x76, 0x30, 0x50, 0x7f, 0xcc, 0x00, 0xf9, 0x0c, 0x9c, 0x4c, 0xa2, 0x30, 0x34, 0xb6, 0xcf, 0xe8, 0x01, 0x67, 0x07, 0x03, 0xe5, 0x87, 0x0c, 0xa0, 0xaf, 0xc0, 0x49, 0x25, 0x15, 0x86, 0xc6, 0xfa,
0xe8, 0x6d, 0xc1, 0x8c, 0x7e, 0x94, 0x28, 0x7c, 0x53, 0x45, 0x08, 0x38, 0x81, 0x88, 0x24, 0x6d, 0x29, 0x1e, 0x3c, 0x17, 0xcc, 0xe0, 0x27, 0x49, 0x05, 0x31, 0x55, 0x08, 0x81, 0xe3, 0x8b, 0x50,
0x0e, 0xec, 0xe1, 0xbe, 0x6f, 0x62, 0xcd, 0x18, 0x26, 0x0b, 0xda, 0x32, 0x90, 0x0e, 0x35, 0x72, 0xe2, 0x6a, 0xcf, 0xee, 0xef, 0x13, 0x13, 0x6b, 0xc6, 0x68, 0xbc, 0xc0, 0x35, 0x03, 0xe9, 0x50,
0x73, 0x17, 0xd2, 0x7d, 0x73, 0x91, 0x0e, 0x89, 0x07, 0x9d, 0x9b, 0x20, 0x0d, 0xa6, 0x2c, 0x66, 0x23, 0xd7, 0xb7, 0x01, 0xde, 0x37, 0x07, 0xe9, 0x10, 0xb9, 0xd0, 0xb8, 0xf6, 0x13, 0x7f, 0xca,
0x8a, 0xa1, 0xa4, 0x60, 0x8a, 0xb7, 0x30, 0xf2, 0x25, 0x34, 0x45, 0xcc, 0xe6, 0x4c, 0x49, 0xda, 0x22, 0xa6, 0x18, 0x95, 0x18, 0x4c, 0xf1, 0x23, 0x0c, 0x7d, 0x0b, 0x55, 0x11, 0xb1, 0x39, 0x53,
0x1e, 0xd8, 0xc3, 0xf6, 0x59, 0xbf, 0x6a, 0x18, 0xdf, 0x94, 0xf8, 0x65, 0x29, 0x79, 0x01, 0xef, 0x12, 0xd7, 0x7b, 0x76, 0xbf, 0x7e, 0xda, 0x29, 0x1a, 0x86, 0x98, 0x12, 0xb2, 0x2e, 0x45, 0xaf,
0x25, 0x7c, 0x92, 0xe0, 0xdd, 0x24, 0x15, 0x6c, 0xc1, 0x62, 0x8c, 0x50, 0xd2, 0x8e, 0xa1, 0xea, 0xe0, 0xa3, 0x98, 0x4f, 0x62, 0x7a, 0x3b, 0x49, 0x04, 0x5b, 0xb0, 0x88, 0x86, 0x54, 0xe2, 0x86,
0x20, 0xe1, 0x3f, 0xe0, 0xdd, 0x78, 0x0d, 0x93, 0x4f, 0xe1, 0x30, 0x48, 0xd3, 0x40, 0xcc, 0xb9, 0xa1, 0xea, 0x20, 0xe6, 0x3f, 0xd2, 0xdb, 0xd1, 0x06, 0x46, 0x5f, 0x42, 0xdb, 0x4f, 0x12, 0x5f,
0x98, 0xa4, 0x82, 0xdf, 0xb2, 0x18, 0x69, 0xd7, 0x0c, 0x79, 0x50, 0xe2, 0xe3, 0x1c, 0x26, 0x1f, 0xcc, 0xb9, 0x98, 0x24, 0x82, 0xdf, 0xb0, 0x88, 0xe2, 0xa6, 0x19, 0xf2, 0x60, 0x8d, 0x8f, 0x32,
0x43, 0x57, 0x62, 0xcc, 0x92, 0xec, 0x7e, 0x12, 0x07, 0x53, 0x8c, 0x69, 0xcf, 0xd4, 0x75, 0x0a, 0x18, 0x7d, 0x0e, 0x4d, 0x49, 0x23, 0x16, 0xa7, 0x77, 0x93, 0xc8, 0x9f, 0xd2, 0x08, 0xb7, 0x4c,
0xf0, 0x95, 0xc6, 0xbc, 0x6b, 0x70, 0x34, 0x37, 0x7a, 0xdf, 0x6c, 0xa3, 0x99, 0x8c, 0x85, 0x1a, 0x5d, 0x23, 0x07, 0xdf, 0x6a, 0xcc, 0x1d, 0x83, 0xa3, 0xb9, 0xd1, 0xfb, 0xa6, 0x5b, 0xcd, 0xa4,
0x89, 0x58, 0x68, 0x7e, 0x59, 0xd7, 0xd7, 0x21, 0xf9, 0x04, 0x0e, 0x82, 0x30, 0x64, 0x8a, 0xf1, 0x2c, 0xd0, 0x48, 0xc8, 0x02, 0x73, 0x65, 0x4d, 0xa2, 0x43, 0xf4, 0x05, 0x1c, 0xf8, 0x41, 0xc0,
0x24, 0x88, 0x27, 0x11, 0x0b, 0x25, 0xb5, 0x07, 0xf6, 0xb0, 0xeb, 0xf7, 0x36, 0xf0, 0xb7, 0x2c, 0x14, 0xe3, 0xb1, 0x1f, 0x4d, 0x42, 0x16, 0x48, 0x6c, 0xf7, 0xec, 0x7e, 0x93, 0xb4, 0xb6, 0xf0,
0x94, 0xde, 0x39, 0x34, 0xf2, 0x1d, 0x35, 0xd9, 0x6a, 0x99, 0x62, 0x2e, 0x0b, 0xdf, 0xc4, 0x1a, 0xf7, 0x2c, 0x90, 0xee, 0x10, 0x2a, 0xd9, 0x8e, 0x9a, 0x6c, 0xb5, 0x4c, 0x68, 0x26, 0x0b, 0x62,
0x9b, 0x05, 0x22, 0xef, 0xec, 0xf8, 0x26, 0xd6, 0x98, 0xe4, 0xb7, 0xca, 0xe8, 0xc0, 0xf1, 0x4d, 0x62, 0x8d, 0xcd, 0x7c, 0x91, 0x75, 0x76, 0x88, 0x89, 0x35, 0x26, 0xf9, 0x8d, 0x32, 0x3a, 0x70,
0xec, 0x0d, 0xa0, 0x93, 0xeb, 0x6b, 0xa7, 0xac, 0x5f, 0x01, 0x8c, 0xd5, 0xb2, 0x14, 0xe0, 0x5b, 0x88, 0x89, 0xdd, 0x1e, 0x34, 0x32, 0x7d, 0xed, 0x94, 0xf5, 0x5b, 0x80, 0x91, 0x5a, 0xae, 0x05,
0xe7, 0x5a, 0x5e, 0x77, 0x2c, 0x54, 0xb3, 0x62, 0x89, 0x3c, 0xd1, 0x32, 0x9a, 0x21, 0x8b, 0x66, 0xf8, 0xec, 0xbb, 0x96, 0xd7, 0x2d, 0x0b, 0xd4, 0x2c, 0x5f, 0x22, 0x4b, 0xb4, 0x8c, 0x66, 0x94,
0xf9, 0x6d, 0x5d, 0xbf, 0xc8, 0xf4, 0xa3, 0xb8, 0x58, 0x60, 0xa2, 0x64, 0xf9, 0x28, 0x7e, 0xb5, 0x85, 0xb3, 0xec, 0xb4, 0x26, 0xc9, 0x33, 0xfd, 0x28, 0xbc, 0x05, 0x8d, 0x95, 0x5c, 0x3f, 0x8a,
0xa0, 0x6e, 0x90, 0x9d, 0xda, 0x3e, 0x2d, 0xd6, 0xd3, 0xfd, 0x7b, 0x67, 0x1f, 0x56, 0xfd, 0x6c, 0x5f, 0x2d, 0x28, 0x1b, 0x64, 0xa7, 0xb6, 0x4f, 0xf2, 0xf5, 0x74, 0xff, 0xd6, 0xe9, 0xa7, 0x45,
0xd3, 0xe0, 0xf5, 0x32, 0xc5, 0x62, 0xfb, 0x62, 0x4a, 0x7b, 0x33, 0xe5, 0x93, 0x97, 0xe6, 0x3c, 0x97, 0x6d, 0x1a, 0x5c, 0x2d, 0x13, 0x9a, 0x6f, 0x9f, 0x4f, 0x69, 0x6f, 0xa7, 0x7c, 0xf2, 0xd2,
0x7d, 0x69, 0x2f, 0x5c, 0xd8, 0x5f, 0x77, 0x21, 0x2d, 0x70, 0x2e, 0x7e, 0xba, 0x7c, 0x7d, 0xb8, 0x9c, 0xa7, 0x2f, 0xed, 0xd5, 0x1b, 0xd8, 0xdf, 0x74, 0x41, 0x35, 0x70, 0xbc, 0x77, 0x17, 0x57,
0x47, 0x9a, 0x60, 0x5f, 0x5d, 0x7d, 0x7f, 0x68, 0x9d, 0xfd, 0x66, 0x83, 0x73, 0x3d, 0x63, 0x73, 0xed, 0x3d, 0x54, 0x05, 0xfb, 0xf2, 0xf2, 0x87, 0xb6, 0x85, 0xea, 0x50, 0x3d, 0x27, 0xde, 0xd9,
0x72, 0x05, 0x8d, 0xdc, 0x0a, 0xc8, 0x47, 0x55, 0xa3, 0x6c, 0xd9, 0x5f, 0xdf, 0xfb, 0xbf, 0x92, 0x95, 0x37, 0x6c, 0x97, 0x74, 0x32, 0xbe, 0x3a, 0x23, 0x3a, 0xb1, 0x51, 0x0b, 0xc0, 0x7b, 0xe7,
0x82, 0xf2, 0xaf, 0xa1, 0x6e, 0x7c, 0x83, 0x0c, 0xaa, 0x8a, 0x1f, 0x5b, 0x4a, 0xff, 0x68, 0x94, 0x9d, 0x4f, 0xce, 0x86, 0x43, 0x6f, 0xd8, 0x76, 0x4e, 0x7f, 0xb3, 0xc1, 0x19, 0xcf, 0xd8, 0x1c,
0x7b, 0xf2, 0xa8, 0xf4, 0xe4, 0xd1, 0x85, 0xf6, 0x64, 0x3d, 0x53, 0xee, 0x2c, 0xd5, 0x33, 0x6d, 0x5d, 0x42, 0x25, 0x33, 0x0d, 0xf4, 0x59, 0xd1, 0xd0, 0x8f, 0x8c, 0xb2, 0xe3, 0xfe, 0x5f, 0x49,
0xd9, 0x50, 0xf5, 0x4c, 0x4f, 0x8c, 0xe9, 0x12, 0x1c, 0x2d, 0x0b, 0x72, 0x5c, 0xc9, 0xf6, 0xc6, 0x7e, 0x39, 0x67, 0x50, 0x36, 0x0e, 0x83, 0x7a, 0x45, 0xc5, 0x0f, 0xcd, 0xa7, 0x73, 0x38, 0xc8,
0x90, 0xfa, 0x83, 0xdd, 0x05, 0x45, 0xab, 0xaf, 0xc0, 0x1e, 0xab, 0x25, 0x71, 0xab, 0x0a, 0x37, 0xdc, 0x7b, 0xb0, 0x76, 0xef, 0x81, 0xa7, 0xdd, 0x5b, 0xcf, 0x94, 0x79, 0x50, 0xf1, 0x4c, 0x8f,
0xc2, 0xda, 0xb9, 0xda, 0x77, 0xd0, 0xc8, 0x05, 0x53, 0xbd, 0xda, 0x96, 0x98, 0xfa, 0xcf, 0x77, 0x0c, 0xab, 0x78, 0xa6, 0x27, 0x16, 0x76, 0x01, 0x8e, 0x16, 0x10, 0x3a, 0x2a, 0xbc, 0x97, 0xad,
0x96, 0x7c, 0x6e, 0xbd, 0xfc, 0xe0, 0xcd, 0x83, 0xbb, 0xf7, 0xd7, 0x83, 0xbb, 0xf7, 0xef, 0x83, 0x75, 0x75, 0x7a, 0xbb, 0x0b, 0xf2, 0x56, 0xdf, 0x81, 0x3d, 0x52, 0x4b, 0xd4, 0x2d, 0x2a, 0xdc,
0x6b, 0xfd, 0xb2, 0x72, 0xad, 0x37, 0x2b, 0xd7, 0xfa, 0x63, 0xe5, 0x5a, 0xff, 0xac, 0x5c, 0x6b, 0x4a, 0x70, 0xe7, 0x6a, 0x6f, 0xa0, 0x92, 0x49, 0xab, 0x78, 0xb5, 0x47, 0xb2, 0xeb, 0xbc, 0xdc,
0xda, 0x30, 0xf7, 0x7e, 0xf1, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8e, 0xcb, 0x80, 0x34, 0x16, 0x59, 0xf2, 0xb5, 0xf5, 0xfa, 0x93, 0xf7, 0xf7, 0xdd, 0xbd, 0xbf, 0xee, 0xbb, 0x7b, 0xff, 0xde,
0x07, 0x00, 0x00, 0x77, 0xad, 0x5f, 0x56, 0x5d, 0xeb, 0xfd, 0xaa, 0x6b, 0xfd, 0xb1, 0xea, 0x5a, 0xff, 0xac, 0xba,
0xd6, 0xb4, 0x62, 0xce, 0xfd, 0xe6, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0x7a, 0x4f, 0x1d,
0x40, 0x07, 0x00, 0x00,
} }

View file

@ -84,6 +84,9 @@ message EventsRequest {
enum EventType { enum EventType {
EXIT = 0; EXIT = 0;
OOM = 1; OOM = 1;
CREATED = 2;
STARTED = 3;
EXEC_ADDED = 4;
} }
message Event { message Event {

View file

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"os" "os"
"os/signal" "os/signal"
"strings"
"syscall" "syscall"
"google.golang.org/grpc" "google.golang.org/grpc"
@ -90,7 +91,8 @@ func serve(server *grpc.Server, path string) error {
logrus.WithField("socket", path).Debug("serving api on unix socket") logrus.WithField("socket", path).Debug("serving api on unix socket")
go func() { go func() {
defer l.Close() defer l.Close()
if err := server.Serve(l); err != nil { if err := server.Serve(l); err != nil &&
!strings.Contains(err.Error(), "use of closed network connection") {
l.Close() l.Close()
logrus.WithError(err).Fatal("containerd-shim: GRPC server failure") logrus.WithError(err).Fatal("containerd-shim: GRPC server failure")
} }
@ -119,7 +121,7 @@ func handleSignals(signals chan os.Signal, server *grpc.Server, service *shim.Se
case syscall.SIGTERM, syscall.SIGINT: case syscall.SIGTERM, syscall.SIGINT:
// TODO: should we forward signals to the processes if they are still running? // TODO: should we forward signals to the processes if they are still running?
// i.e. machine reboot // i.e. machine reboot
server.GracefulStop() server.Stop()
return nil return nil
} }
} }

View file

@ -14,6 +14,7 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/grpclog" "google.golang.org/grpc/grpclog"
"github.com/crosbymichael/console"
"github.com/docker/containerd/api/shim" "github.com/docker/containerd/api/shim"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
@ -31,6 +32,10 @@ var fifoFlags = []cli.Flag{
Name: "stderr", Name: "stderr",
Usage: "specify the path to the stderr fifo", Usage: "specify the path to the stderr fifo",
}, },
cli.BoolFlag{
Name: "tty,t",
Usage: "enable tty support",
},
} }
var shimCommand = cli.Command{ var shimCommand = cli.Command{
@ -40,6 +45,7 @@ var shimCommand = cli.Command{
shimCreateCommand, shimCreateCommand,
shimStartCommand, shimStartCommand,
shimDeleteCommand, shimDeleteCommand,
shimEventsCommand,
}, },
Action: func(context *cli.Context) error { Action: func(context *cli.Context) error {
cmd := exec.Command("containerd-shim", "--debug") cmd := exec.Command("containerd-shim", "--debug")
@ -80,23 +86,43 @@ var shimCreateCommand = cli.Command{
if err != nil { if err != nil {
return err return err
} }
wg, err := prepareStdio(context.String("stdin"), context.String("stdout"), context.String("stderr"), false) tty := context.Bool("tty")
wg, err := prepareStdio(context.String("stdin"), context.String("stdout"), context.String("stderr"), tty)
if err != nil { if err != nil {
return err return err
} }
r, err := service.Create(gocontext.Background(), &shim.CreateRequest{ r, err := service.Create(gocontext.Background(), &shim.CreateRequest{
ID: id, ID: id,
Bundle: context.String("bundle"), Bundle: context.String("bundle"),
Runtime: context.String("runtime"), Runtime: context.String("runtime"),
Stdin: context.String("stdin"), Stdin: context.String("stdin"),
Stdout: context.String("stdout"), Stdout: context.String("stdout"),
Stderr: context.String("stderr"), Stderr: context.String("stderr"),
Terminal: tty,
}) })
if err != nil { if err != nil {
return err return err
} }
fmt.Printf("container created with id %s and pid %d\n", id, r.Pid) fmt.Printf("container created with id %s and pid %d\n", id, r.Pid)
if context.Bool("attach") { if context.Bool("attach") {
if tty {
current := console.Current()
defer current.Reset()
if err := current.SetRaw(); err != nil {
return err
}
size, err := current.Size()
if err != nil {
return err
}
if _, err := service.Pty(gocontext.Background(), &shim.PtyRequest{
Pid: r.Pid,
Width: uint32(size.Width),
Height: uint32(size.Height),
}); err != nil {
return err
}
}
wg.Wait() wg.Wait()
} }
return nil return nil
@ -133,6 +159,29 @@ var shimDeleteCommand = cli.Command{
}, },
} }
var shimEventsCommand = cli.Command{
Name: "events",
Usage: "get events for a shim",
Action: func(context *cli.Context) error {
service, err := getShimService()
if err != nil {
return err
}
events, err := service.Events(gocontext.Background(), &shim.EventsRequest{})
if err != nil {
return err
}
for {
e, err := events.Recv()
if err != nil {
return err
}
fmt.Printf("type=%s id=%s pid=%d status=%d\n", e.Type, e.ID, e.Pid, e.ExitStatus)
}
return nil
},
}
func getShimService() (shim.ShimClient, error) { func getShimService() (shim.ShimClient, error) {
bindSocket := "shim.sock" bindSocket := "shim.sock"

View file

@ -7,6 +7,7 @@ import (
"path/filepath" "path/filepath"
"sync" "sync"
"github.com/crosbymichael/console"
runc "github.com/crosbymichael/go-runc" runc "github.com/crosbymichael/go-runc"
apishim "github.com/docker/containerd/api/shim" apishim "github.com/docker/containerd/api/shim"
specs "github.com/opencontainers/runtime-spec/specs-go" specs "github.com/opencontainers/runtime-spec/specs-go"
@ -16,7 +17,7 @@ type execProcess struct {
sync.WaitGroup sync.WaitGroup
id string id string
console *runc.Console console console.Console
io runc.IO io runc.IO
status int status int
pid int pid int
@ -42,6 +43,7 @@ func newExecProcess(context context.Context, r *apishim.ExecRequest, parent *ini
if socket, err = runc.NewConsoleSocket(filepath.Join(cwd, "pty.sock")); err != nil { if socket, err = runc.NewConsoleSocket(filepath.Join(cwd, "pty.sock")); err != nil {
return nil, err return nil, err
} }
defer os.Remove(socket.Path())
} else { } else {
// TODO: get uid/gid // TODO: get uid/gid
if io, err = runc.NewPipeIO(0, 0); err != nil { if io, err = runc.NewPipeIO(0, 0); err != nil {
@ -108,10 +110,12 @@ func (e *execProcess) Status() int {
func (e *execProcess) Exited(status int) { func (e *execProcess) Exited(status int) {
e.status = status e.status = status
e.Wait() e.Wait()
e.io.Close() if e.io != nil {
e.io.Close()
}
} }
func (e *execProcess) Resize(ws runc.WinSize) error { func (e *execProcess) Resize(ws console.WinSize) error {
if e.console == nil { if e.console == nil {
return nil return nil
} }

View file

@ -7,6 +7,7 @@ import (
"sync" "sync"
"syscall" "syscall"
"github.com/crosbymichael/console"
runc "github.com/crosbymichael/go-runc" runc "github.com/crosbymichael/go-runc"
apishim "github.com/docker/containerd/api/shim" apishim "github.com/docker/containerd/api/shim"
) )
@ -16,7 +17,7 @@ type initProcess struct {
id string id string
bundle string bundle string
console *runc.Console console console.Console
io runc.IO io runc.IO
runc *runc.Runc runc *runc.Runc
status int status int
@ -47,6 +48,7 @@ func newInitProcess(context context.Context, r *apishim.CreateRequest) (*initPro
if socket, err = runc.NewConsoleSocket(filepath.Join(cwd, "pty.sock")); err != nil { if socket, err = runc.NewConsoleSocket(filepath.Join(cwd, "pty.sock")); err != nil {
return nil, err return nil, err
} }
defer os.Remove(socket.Path())
} else { } else {
// TODO: get uid/gid // TODO: get uid/gid
if io, err = runc.NewPipeIO(0, 0); err != nil { if io, err = runc.NewPipeIO(0, 0); err != nil {
@ -105,11 +107,13 @@ func (p *initProcess) Delete(context context.Context) error {
p.killAll(context) p.killAll(context)
p.Wait() p.Wait()
err := p.runc.Delete(context, p.id) err := p.runc.Delete(context, p.id)
p.io.Close() if p.io != nil {
p.io.Close()
}
return err return err
} }
func (p *initProcess) Resize(ws runc.WinSize) error { func (p *initProcess) Resize(ws console.WinSize) error {
if p.console == nil { if p.console == nil {
return nil return nil
} }

View file

@ -7,11 +7,12 @@ import (
"sync" "sync"
"syscall" "syscall"
"github.com/crosbymichael/console"
runc "github.com/crosbymichael/go-runc" runc "github.com/crosbymichael/go-runc"
"github.com/tonistiigi/fifo" "github.com/tonistiigi/fifo"
) )
func copyConsole(ctx context.Context, console *runc.Console, stdin, stdout, stderr string, wg *sync.WaitGroup) error { func copyConsole(ctx context.Context, console console.Console, stdin, stdout, stderr string, wg *sync.WaitGroup) error {
in, err := fifo.OpenFifo(ctx, stdin, syscall.O_RDONLY, 0) in, err := fifo.OpenFifo(ctx, stdin, syscall.O_RDONLY, 0)
if err != nil { if err != nil {
return err return err

View file

@ -1,12 +1,12 @@
package shim package shim
import runc "github.com/crosbymichael/go-runc" import "github.com/crosbymichael/console"
type process interface { type process interface {
// Pid returns the pid for the process // Pid returns the pid for the process
Pid() int Pid() int
// Resize resizes the process console // Resize resizes the process console
Resize(ws runc.WinSize) error Resize(ws console.WinSize) error
// Exited sets the exit status for the process // Exited sets the exit status for the process
Exited(status int) Exited(status int)
// Status returns the exit status // Status returns the exit status

View file

@ -4,7 +4,7 @@ import (
"fmt" "fmt"
"sync" "sync"
runc "github.com/crosbymichael/go-runc" "github.com/crosbymichael/console"
apishim "github.com/docker/containerd/api/shim" apishim "github.com/docker/containerd/api/shim"
"github.com/docker/containerd/utils" "github.com/docker/containerd/utils"
google_protobuf "github.com/golang/protobuf/ptypes/empty" google_protobuf "github.com/golang/protobuf/ptypes/empty"
@ -17,7 +17,7 @@ var emptyResponse = &google_protobuf.Empty{}
func NewService() *Service { func NewService() *Service {
return &Service{ return &Service{
processes: make(map[int]process), processes: make(map[int]process),
events: make(chan *apishim.Event, 2048), events: make(chan *apishim.Event, 4096),
} }
} }
@ -40,6 +40,11 @@ func (s *Service) Create(ctx context.Context, r *apishim.CreateRequest) (*apishi
s.processes[pid] = process s.processes[pid] = process
s.id = r.ID s.id = r.ID
s.mu.Unlock() s.mu.Unlock()
s.events <- &apishim.Event{
Type: apishim.EventType_CREATED,
ID: r.ID,
Pid: uint32(pid),
}
return &apishim.CreateResponse{ return &apishim.CreateResponse{
Pid: uint32(pid), Pid: uint32(pid),
}, nil }, nil
@ -49,6 +54,11 @@ func (s *Service) Start(ctx context.Context, r *apishim.StartRequest) (*google_p
if err := s.initProcess.Start(ctx); err != nil { if err := s.initProcess.Start(ctx); err != nil {
return nil, err return nil, err
} }
s.events <- &apishim.Event{
Type: apishim.EventType_STARTED,
ID: s.id,
Pid: uint32(s.initProcess.Pid()),
}
return emptyResponse, nil return emptyResponse, nil
} }
@ -73,13 +83,21 @@ func (s *Service) Exec(ctx context.Context, r *apishim.ExecRequest) (*apishim.Ex
} }
pid := process.Pid() pid := process.Pid()
s.processes[pid] = process s.processes[pid] = process
s.events <- &apishim.Event{
Type: apishim.EventType_EXEC_ADDED,
ID: s.id,
Pid: uint32(pid),
}
return &apishim.ExecResponse{ return &apishim.ExecResponse{
Pid: uint32(pid), Pid: uint32(pid),
}, nil }, nil
} }
func (s *Service) Pty(ctx context.Context, r *apishim.PtyRequest) (*google_protobuf.Empty, error) { func (s *Service) Pty(ctx context.Context, r *apishim.PtyRequest) (*google_protobuf.Empty, error) {
ws := runc.WinSize{ if r.Pid == 0 {
return nil, fmt.Errorf("pid not provided in request")
}
ws := console.WinSize{
Width: uint16(r.Width), Width: uint16(r.Width),
Height: uint16(r.Height), Height: uint16(r.Height),
} }