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

View file

@ -4,6 +4,7 @@ import (
"fmt"
"os"
"os/signal"
"strings"
"syscall"
"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")
go func() {
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()
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:
// TODO: should we forward signals to the processes if they are still running?
// i.e. machine reboot
server.GracefulStop()
server.Stop()
return nil
}
}

View file

@ -14,6 +14,7 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/grpclog"
"github.com/crosbymichael/console"
"github.com/docker/containerd/api/shim"
"github.com/urfave/cli"
)
@ -31,6 +32,10 @@ var fifoFlags = []cli.Flag{
Name: "stderr",
Usage: "specify the path to the stderr fifo",
},
cli.BoolFlag{
Name: "tty,t",
Usage: "enable tty support",
},
}
var shimCommand = cli.Command{
@ -40,6 +45,7 @@ var shimCommand = cli.Command{
shimCreateCommand,
shimStartCommand,
shimDeleteCommand,
shimEventsCommand,
},
Action: func(context *cli.Context) error {
cmd := exec.Command("containerd-shim", "--debug")
@ -80,23 +86,43 @@ var shimCreateCommand = cli.Command{
if err != nil {
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 {
return err
}
r, err := service.Create(gocontext.Background(), &shim.CreateRequest{
ID: id,
Bundle: context.String("bundle"),
Runtime: context.String("runtime"),
Stdin: context.String("stdin"),
Stdout: context.String("stdout"),
Stderr: context.String("stderr"),
ID: id,
Bundle: context.String("bundle"),
Runtime: context.String("runtime"),
Stdin: context.String("stdin"),
Stdout: context.String("stdout"),
Stderr: context.String("stderr"),
Terminal: tty,
})
if err != nil {
return err
}
fmt.Printf("container created with id %s and pid %d\n", id, r.Pid)
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()
}
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) {
bindSocket := "shim.sock"

View file

@ -7,6 +7,7 @@ import (
"path/filepath"
"sync"
"github.com/crosbymichael/console"
runc "github.com/crosbymichael/go-runc"
apishim "github.com/docker/containerd/api/shim"
specs "github.com/opencontainers/runtime-spec/specs-go"
@ -16,7 +17,7 @@ type execProcess struct {
sync.WaitGroup
id string
console *runc.Console
console console.Console
io runc.IO
status 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 {
return nil, err
}
defer os.Remove(socket.Path())
} else {
// TODO: get uid/gid
if io, err = runc.NewPipeIO(0, 0); err != nil {
@ -108,10 +110,12 @@ func (e *execProcess) Status() int {
func (e *execProcess) Exited(status int) {
e.status = status
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 {
return nil
}

View file

@ -7,6 +7,7 @@ import (
"sync"
"syscall"
"github.com/crosbymichael/console"
runc "github.com/crosbymichael/go-runc"
apishim "github.com/docker/containerd/api/shim"
)
@ -16,7 +17,7 @@ type initProcess struct {
id string
bundle string
console *runc.Console
console console.Console
io runc.IO
runc *runc.Runc
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 {
return nil, err
}
defer os.Remove(socket.Path())
} else {
// TODO: get uid/gid
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.Wait()
err := p.runc.Delete(context, p.id)
p.io.Close()
if p.io != nil {
p.io.Close()
}
return err
}
func (p *initProcess) Resize(ws runc.WinSize) error {
func (p *initProcess) Resize(ws console.WinSize) error {
if p.console == nil {
return nil
}

View file

@ -7,11 +7,12 @@ import (
"sync"
"syscall"
"github.com/crosbymichael/console"
runc "github.com/crosbymichael/go-runc"
"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)
if err != nil {
return err

View file

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

View file

@ -4,7 +4,7 @@ import (
"fmt"
"sync"
runc "github.com/crosbymichael/go-runc"
"github.com/crosbymichael/console"
apishim "github.com/docker/containerd/api/shim"
"github.com/docker/containerd/utils"
google_protobuf "github.com/golang/protobuf/ptypes/empty"
@ -17,7 +17,7 @@ var emptyResponse = &google_protobuf.Empty{}
func NewService() *Service {
return &Service{
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.id = r.ID
s.mu.Unlock()
s.events <- &apishim.Event{
Type: apishim.EventType_CREATED,
ID: r.ID,
Pid: uint32(pid),
}
return &apishim.CreateResponse{
Pid: uint32(pid),
}, 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 {
return nil, err
}
s.events <- &apishim.Event{
Type: apishim.EventType_STARTED,
ID: s.id,
Pid: uint32(s.initProcess.Pid()),
}
return emptyResponse, nil
}
@ -73,13 +83,21 @@ func (s *Service) Exec(ctx context.Context, r *apishim.ExecRequest) (*apishim.Ex
}
pid := process.Pid()
s.processes[pid] = process
s.events <- &apishim.Event{
Type: apishim.EventType_EXEC_ADDED,
ID: s.id,
Pid: uint32(pid),
}
return &apishim.ExecResponse{
Pid: uint32(pid),
}, nil
}
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),
Height: uint16(r.Height),
}