Add Exec IDs

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby 2017-06-28 12:54:10 -07:00
parent e283b3802d
commit f93bfb6233
36 changed files with 1441 additions and 2055 deletions

View File

@ -65,9 +65,9 @@ var _ = math.Inf
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
type ContainerCreate struct {
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"`
Runtime *ContainerCreate_Runtime `protobuf:"bytes,3,opt,name=runtime" json:"runtime,omitempty"`
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"`
Runtime *ContainerCreate_Runtime `protobuf:"bytes,3,opt,name=runtime" json:"runtime,omitempty"`
}
func (m *ContainerCreate) Reset() { *m = ContainerCreate{} }
@ -86,10 +86,10 @@ func (*ContainerCreate_Runtime) Descriptor() ([]byte, []int) {
}
type ContainerUpdate struct {
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"`
Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
RootFS string `protobuf:"bytes,4,opt,name=rootfs,proto3" json:"rootfs,omitempty"`
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"`
Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
RootFS string `protobuf:"bytes,4,opt,name=rootfs,proto3" json:"rootfs,omitempty"`
}
func (m *ContainerUpdate) Reset() { *m = ContainerUpdate{} }
@ -97,7 +97,7 @@ func (*ContainerUpdate) ProtoMessage() {}
func (*ContainerUpdate) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{1} }
type ContainerDelete struct {
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
}
func (m *ContainerDelete) Reset() { *m = ContainerDelete{} }
@ -125,11 +125,11 @@ func (m *ContainerCreate) MarshalTo(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ContainerID) > 0 {
if len(m.ID) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintContainer(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
i = encodeVarintContainer(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
}
if len(m.Image) > 0 {
dAtA[i] = 0x12
@ -199,11 +199,11 @@ func (m *ContainerUpdate) MarshalTo(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ContainerID) > 0 {
if len(m.ID) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintContainer(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
i = encodeVarintContainer(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
}
if len(m.Image) > 0 {
dAtA[i] = 0x12
@ -252,11 +252,11 @@ func (m *ContainerDelete) MarshalTo(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ContainerID) > 0 {
if len(m.ID) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintContainer(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
i = encodeVarintContainer(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
}
return i, nil
}
@ -291,7 +291,7 @@ func encodeVarintContainer(dAtA []byte, offset int, v uint64) int {
func (m *ContainerCreate) Size() (n int) {
var l int
_ = l
l = len(m.ContainerID)
l = len(m.ID)
if l > 0 {
n += 1 + l + sovContainer(uint64(l))
}
@ -323,7 +323,7 @@ func (m *ContainerCreate_Runtime) Size() (n int) {
func (m *ContainerUpdate) Size() (n int) {
var l int
_ = l
l = len(m.ContainerID)
l = len(m.ID)
if l > 0 {
n += 1 + l + sovContainer(uint64(l))
}
@ -349,7 +349,7 @@ func (m *ContainerUpdate) Size() (n int) {
func (m *ContainerDelete) Size() (n int) {
var l int
_ = l
l = len(m.ContainerID)
l = len(m.ID)
if l > 0 {
n += 1 + l + sovContainer(uint64(l))
}
@ -374,7 +374,7 @@ func (this *ContainerCreate) String() string {
return "nil"
}
s := strings.Join([]string{`&ContainerCreate{`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`Image:` + fmt.Sprintf("%v", this.Image) + `,`,
`Runtime:` + strings.Replace(fmt.Sprintf("%v", this.Runtime), "ContainerCreate_Runtime", "ContainerCreate_Runtime", 1) + `,`,
`}`,
@ -407,7 +407,7 @@ func (this *ContainerUpdate) String() string {
}
mapStringForLabels += "}"
s := strings.Join([]string{`&ContainerUpdate{`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`Image:` + fmt.Sprintf("%v", this.Image) + `,`,
`Labels:` + mapStringForLabels + `,`,
`RootFS:` + fmt.Sprintf("%v", this.RootFS) + `,`,
@ -420,7 +420,7 @@ func (this *ContainerDelete) String() string {
return "nil"
}
s := strings.Join([]string{`&ContainerDelete{`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`}`,
}, "")
return s
@ -464,7 +464,7 @@ func (m *ContainerCreate) Unmarshal(dAtA []byte) error {
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -489,7 +489,7 @@ func (m *ContainerCreate) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ContainerID = string(dAtA[iNdEx:postIndex])
m.ID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
@ -717,7 +717,7 @@ func (m *ContainerUpdate) Unmarshal(dAtA []byte) error {
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -742,7 +742,7 @@ func (m *ContainerUpdate) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ContainerID = string(dAtA[iNdEx:postIndex])
m.ID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
@ -970,7 +970,7 @@ func (m *ContainerDelete) Unmarshal(dAtA []byte) error {
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -995,7 +995,7 @@ func (m *ContainerDelete) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ContainerID = string(dAtA[iNdEx:postIndex])
m.ID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@ -1128,31 +1128,31 @@ func init() {
}
var fileDescriptorContainer = []byte{
// 413 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0x4d, 0x8b, 0xd5, 0x30,
0x14, 0x9d, 0xbc, 0x8e, 0x7d, 0x98, 0x0a, 0x23, 0xe1, 0x2d, 0x6a, 0xc1, 0xce, 0xa3, 0xab, 0xb7,
0x4a, 0x99, 0x0a, 0xa2, 0x23, 0x08, 0xce, 0x87, 0x32, 0xa0, 0x20, 0x11, 0x41, 0xdc, 0x48, 0xfa,
0x9a, 0xa9, 0xc1, 0x36, 0x29, 0x6d, 0x5a, 0xe8, 0xce, 0x5f, 0xe0, 0xef, 0x9a, 0xa5, 0x4b, 0x57,
0x83, 0xd3, 0xdf, 0xe1, 0x42, 0x9a, 0xb4, 0x9d, 0xe2, 0x42, 0xe4, 0xe1, 0xee, 0xdc, 0xdc, 0x73,
0x6e, 0xce, 0xb9, 0x21, 0xf0, 0x55, 0xca, 0xd5, 0xe7, 0x3a, 0xc6, 0x5b, 0x99, 0x87, 0x5b, 0x29,
0x14, 0xe5, 0x82, 0x95, 0xc9, 0x1c, 0xd2, 0x82, 0x87, 0x15, 0x2b, 0x1b, 0xbe, 0x65, 0x55, 0xc8,
0x1a, 0x26, 0x54, 0x15, 0x36, 0x47, 0xb7, 0x0c, 0x5c, 0x94, 0x52, 0x49, 0xf4, 0xf0, 0x56, 0x82,
0x47, 0x3a, 0x36, 0x74, 0xdc, 0x1c, 0x79, 0xab, 0x54, 0xa6, 0x52, 0x33, 0xc3, 0x1e, 0x19, 0x91,
0xf7, 0x20, 0x95, 0x32, 0xcd, 0x58, 0xa8, 0xab, 0xb8, 0xbe, 0x0c, 0xa9, 0x68, 0x4d, 0x2b, 0xf8,
0x05, 0xe0, 0xc1, 0xe9, 0x38, 0xf2, 0xb4, 0x64, 0x54, 0x31, 0x14, 0xc1, 0x7b, 0xd3, 0x2d, 0x9f,
0x78, 0xe2, 0x82, 0x35, 0xd8, 0xdc, 0x3d, 0x39, 0xe8, 0xae, 0x0f, 0x9d, 0x89, 0x7a, 0x71, 0x46,
0x9c, 0x89, 0x74, 0x91, 0xa0, 0x15, 0xbc, 0xc3, 0x73, 0x9a, 0x32, 0x77, 0xd1, 0x93, 0x89, 0x29,
0xd0, 0x5b, 0xb8, 0x2c, 0x6b, 0xa1, 0x78, 0xce, 0x5c, 0x6b, 0x0d, 0x36, 0x4e, 0xf4, 0x18, 0xff,
0xd5, 0x3f, 0xfe, 0xc3, 0x0a, 0x26, 0x46, 0x4d, 0xc6, 0x31, 0xde, 0x1b, 0xb8, 0x1c, 0xce, 0x10,
0x82, 0xfb, 0x82, 0xe6, 0xcc, 0xd8, 0x23, 0x1a, 0x23, 0x0c, 0x97, 0xb2, 0x50, 0x5c, 0x8a, 0x4a,
0x1b, 0x71, 0xa2, 0x15, 0x36, 0xd9, 0xf1, 0x98, 0x1d, 0xbf, 0x10, 0x2d, 0x19, 0x49, 0xc1, 0xb7,
0xc5, 0x2c, 0xfe, 0xfb, 0x22, 0xf9, 0xbf, 0xf1, 0x09, 0xb4, 0x33, 0x1a, 0xb3, 0xac, 0x72, 0xad,
0xb5, 0xb5, 0x71, 0xa2, 0xe3, 0x7f, 0x4d, 0x6f, 0x9c, 0xe0, 0xd7, 0x5a, 0x7c, 0x2e, 0x54, 0xd9,
0x92, 0x61, 0x12, 0x0a, 0xa0, 0x5d, 0x4a, 0xa9, 0x2e, 0x2b, 0x77, 0x5f, 0xfb, 0x82, 0xdd, 0xf5,
0xa1, 0x4d, 0xa4, 0x54, 0x2f, 0xdf, 0x91, 0xa1, 0xe3, 0x3d, 0x85, 0xce, 0x4c, 0x8a, 0xee, 0x43,
0xeb, 0x0b, 0x6b, 0x87, 0x3d, 0xf5, 0xb0, 0xb7, 0xdb, 0xd0, 0xac, 0x9e, 0xec, 0xea, 0xe2, 0x78,
0xf1, 0x04, 0x04, 0xe7, 0xb3, 0x7d, 0x9c, 0xb1, 0x8c, 0xed, 0xb6, 0x8f, 0x93, 0x0f, 0x57, 0x37,
0xfe, 0xde, 0x8f, 0x1b, 0x7f, 0xef, 0x6b, 0xe7, 0x83, 0xab, 0xce, 0x07, 0xdf, 0x3b, 0x1f, 0xfc,
0xec, 0x7c, 0xf0, 0xf1, 0xf9, 0x8e, 0x3f, 0xe1, 0x99, 0x41, 0xb1, 0xad, 0x1f, 0xf2, 0xd1, 0xef,
0x00, 0x00, 0x00, 0xff, 0xff, 0x1a, 0x0b, 0xcd, 0x09, 0x52, 0x03, 0x00, 0x00,
// 401 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x52, 0x41, 0x8b, 0xd4, 0x30,
0x18, 0xdd, 0xb4, 0x6b, 0x07, 0xd3, 0x83, 0x12, 0x06, 0xa9, 0x05, 0xbb, 0x43, 0x4f, 0xe3, 0x25,
0x65, 0x47, 0x10, 0x5d, 0x41, 0x70, 0x77, 0x55, 0x04, 0x05, 0x89, 0x08, 0xe2, 0x2d, 0x9d, 0x66,
0x6a, 0xb0, 0x4d, 0x4a, 0x9b, 0x16, 0x7a, 0xf3, 0xe7, 0xcd, 0xd1, 0xa3, 0xa7, 0x61, 0xa6, 0x3f,
0xc1, 0x5f, 0x20, 0x4d, 0x5a, 0xa7, 0x08, 0x8a, 0x7a, 0x7b, 0x5f, 0xbe, 0xf7, 0xbe, 0xef, 0xbd,
0x24, 0xf0, 0x65, 0xca, 0xd5, 0xa7, 0x3a, 0xc6, 0x6b, 0x99, 0x47, 0x6b, 0x29, 0x14, 0xe5, 0x82,
0x95, 0xc9, 0x14, 0xd2, 0x82, 0x47, 0x15, 0x2b, 0x1b, 0xbe, 0x66, 0x55, 0xc4, 0x1a, 0x26, 0x54,
0x15, 0x35, 0xe7, 0x47, 0x06, 0x2e, 0x4a, 0xa9, 0x24, 0xba, 0x77, 0x94, 0xe0, 0x91, 0x8e, 0x0d,
0x1d, 0x37, 0xe7, 0xfe, 0x3c, 0x95, 0xa9, 0xd4, 0xcc, 0xa8, 0x47, 0x46, 0xe4, 0xdf, 0x4d, 0xa5,
0x4c, 0x33, 0x16, 0xe9, 0x2a, 0xae, 0x37, 0x11, 0x15, 0xad, 0x69, 0x85, 0x7b, 0x00, 0x6f, 0x5d,
0x8d, 0x23, 0xaf, 0x4a, 0x46, 0x15, 0x43, 0x77, 0xa0, 0xc5, 0x13, 0x0f, 0x2c, 0xc0, 0xf2, 0xe6,
0xa5, 0xd3, 0xed, 0xce, 0xac, 0x57, 0xd7, 0xc4, 0xe2, 0x09, 0x9a, 0xc3, 0x1b, 0x3c, 0xa7, 0x29,
0xf3, 0xac, 0xbe, 0x45, 0x4c, 0x81, 0xde, 0xc2, 0x59, 0x59, 0x0b, 0xc5, 0x73, 0xe6, 0xd9, 0x0b,
0xb0, 0x74, 0x57, 0x0f, 0xf1, 0x1f, 0x3d, 0xe2, 0x5f, 0xd6, 0x61, 0x62, 0xd4, 0x64, 0x1c, 0xe3,
0xbf, 0x81, 0xb3, 0xe1, 0x0c, 0x21, 0x78, 0x2a, 0x68, 0xce, 0x8c, 0x19, 0xa2, 0x31, 0xc2, 0x70,
0x26, 0x0b, 0xc5, 0xa5, 0xa8, 0xb4, 0x11, 0x77, 0x35, 0xc7, 0x26, 0x1f, 0x1e, 0xf3, 0xe1, 0x67,
0xa2, 0x25, 0x23, 0x29, 0xfc, 0x3e, 0x8d, 0xf8, 0xbe, 0x48, 0xfe, 0x3d, 0x22, 0x81, 0x4e, 0x46,
0x63, 0x96, 0x55, 0x9e, 0xbd, 0xb0, 0x97, 0xee, 0xea, 0xe2, 0x6f, 0x13, 0x9a, 0x6d, 0xf8, 0xb5,
0x16, 0x3f, 0x17, 0xaa, 0x6c, 0xc9, 0x30, 0x09, 0x85, 0xd0, 0x29, 0xa5, 0x54, 0x9b, 0xca, 0x3b,
0xd5, 0x2e, 0x60, 0xb7, 0x3b, 0x73, 0x88, 0x94, 0xea, 0xc5, 0x3b, 0x32, 0x74, 0xfc, 0xc7, 0xd0,
0x9d, 0x48, 0xd1, 0x6d, 0x68, 0x7f, 0x66, 0xed, 0x70, 0x17, 0x3d, 0xec, 0xed, 0x36, 0x34, 0xab,
0x7f, 0xda, 0xd5, 0xc5, 0x85, 0xf5, 0x08, 0x84, 0xf7, 0x27, 0x99, 0xaf, 0x59, 0xc6, 0x7e, 0x9f,
0xf9, 0xf2, 0xc3, 0xf6, 0x10, 0x9c, 0x7c, 0x3b, 0x04, 0x27, 0x5f, 0xba, 0x00, 0x6c, 0xbb, 0x00,
0x7c, 0xed, 0x02, 0xb0, 0xef, 0x02, 0xf0, 0xf1, 0xe9, 0x7f, 0xfe, 0xda, 0x27, 0x06, 0xc5, 0x8e,
0x7e, 0x90, 0x07, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x68, 0xeb, 0xf5, 0x3f, 0xfe, 0x02, 0x00,
0x00,
}

View File

@ -8,7 +8,7 @@ import "google/protobuf/any.proto";
option go_package = "github.com/containerd/containerd/api/services/events/v1;events";
message ContainerCreate {
string container_id = 1;
string id = 1;
string image = 2;
message Runtime {
string name = 1;
@ -18,12 +18,12 @@ message ContainerCreate {
}
message ContainerUpdate {
string container_id = 1;
string id = 1;
string image = 2;
map<string, string> labels = 3;
string rootfs = 4 [(gogoproto.customname) = "RootFS"];
}
message ContainerDelete {
string container_id = 1;
string id = 1;
}

View File

@ -82,11 +82,11 @@ func (*RuntimeMount) ProtoMessage() {}
func (*RuntimeMount) Descriptor() ([]byte, []int) { return fileDescriptorRuntime, []int{1} }
type RuntimeCreate struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Bundle string `protobuf:"bytes,2,opt,name=bundle,proto3" json:"bundle,omitempty"`
RootFS []*RuntimeMount `protobuf:"bytes,3,rep,name=rootfs" json:"rootfs,omitempty"`
IO *RuntimeIO `protobuf:"bytes,4,opt,name=io" json:"io,omitempty"`
Checkpoint string `protobuf:"bytes,5,opt,name=checkpoint,proto3" json:"checkpoint,omitempty"`
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Bundle string `protobuf:"bytes,2,opt,name=bundle,proto3" json:"bundle,omitempty"`
RootFS []*RuntimeMount `protobuf:"bytes,3,rep,name=rootfs" json:"rootfs,omitempty"`
IO *RuntimeIO `protobuf:"bytes,4,opt,name=io" json:"io,omitempty"`
Checkpoint string `protobuf:"bytes,5,opt,name=checkpoint,proto3" json:"checkpoint,omitempty"`
}
func (m *RuntimeCreate) Reset() { *m = RuntimeCreate{} }
@ -94,12 +94,13 @@ func (*RuntimeCreate) ProtoMessage() {}
func (*RuntimeCreate) Descriptor() ([]byte, []int) { return fileDescriptorRuntime, []int{2} }
type RuntimeEvent struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Type RuntimeEvent_EventType `protobuf:"varint,2,opt,name=type,proto3,enum=containerd.services.events.v1.RuntimeEvent_EventType" json:"type,omitempty"`
Pid uint32 `protobuf:"varint,3,opt,name=pid,proto3" json:"pid,omitempty"`
ExitStatus uint32 `protobuf:"varint,4,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"`
ExitedAt time.Time `protobuf:"bytes,5,opt,name=exited_at,json=exitedAt,stdtime" json:"exited_at"`
Timestamp time.Time `protobuf:"bytes,6,opt,name=timestamp,stdtime" json:"timestamp"`
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
ContainerID string `protobuf:"bytes,2,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Type RuntimeEvent_EventType `protobuf:"varint,3,opt,name=type,proto3,enum=containerd.services.events.v1.RuntimeEvent_EventType" json:"type,omitempty"`
Pid uint32 `protobuf:"varint,4,opt,name=pid,proto3" json:"pid,omitempty"`
ExitStatus uint32 `protobuf:"varint,5,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"`
ExitedAt time.Time `protobuf:"bytes,6,opt,name=exited_at,json=exitedAt,stdtime" json:"exited_at"`
Timestamp time.Time `protobuf:"bytes,7,opt,name=timestamp,stdtime" json:"timestamp"`
}
func (m *RuntimeEvent) Reset() { *m = RuntimeEvent{} }
@ -107,10 +108,10 @@ func (*RuntimeEvent) ProtoMessage() {}
func (*RuntimeEvent) Descriptor() ([]byte, []int) { return fileDescriptorRuntime, []int{3} }
type RuntimeDelete struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Runtime string `protobuf:"bytes,2,opt,name=runtime,proto3" json:"runtime,omitempty"`
ExitStatus uint32 `protobuf:"varint,3,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"`
ExitedAt time.Time `protobuf:"bytes,4,opt,name=exited_at,json=exitedAt,stdtime" json:"exited_at"`
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Runtime string `protobuf:"bytes,2,opt,name=runtime,proto3" json:"runtime,omitempty"`
ExitStatus uint32 `protobuf:"varint,3,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"`
ExitedAt time.Time `protobuf:"bytes,4,opt,name=exited_at,json=exitedAt,stdtime" json:"exited_at"`
}
func (m *RuntimeDelete) Reset() { *m = RuntimeDelete{} }
@ -231,11 +232,11 @@ func (m *RuntimeCreate) MarshalTo(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ID) > 0 {
if len(m.ContainerID) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintRuntime(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
i = encodeVarintRuntime(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
}
if len(m.Bundle) > 0 {
dAtA[i] = 0x12
@ -295,22 +296,28 @@ func (m *RuntimeEvent) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintRuntime(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
}
if len(m.ContainerID) > 0 {
dAtA[i] = 0x12
i++
i = encodeVarintRuntime(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
}
if m.Type != 0 {
dAtA[i] = 0x10
dAtA[i] = 0x18
i++
i = encodeVarintRuntime(dAtA, i, uint64(m.Type))
}
if m.Pid != 0 {
dAtA[i] = 0x18
dAtA[i] = 0x20
i++
i = encodeVarintRuntime(dAtA, i, uint64(m.Pid))
}
if m.ExitStatus != 0 {
dAtA[i] = 0x20
dAtA[i] = 0x28
i++
i = encodeVarintRuntime(dAtA, i, uint64(m.ExitStatus))
}
dAtA[i] = 0x2a
dAtA[i] = 0x32
i++
i = encodeVarintRuntime(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.ExitedAt)))
n2, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExitedAt, dAtA[i:])
@ -318,7 +325,7 @@ func (m *RuntimeEvent) MarshalTo(dAtA []byte) (int, error) {
return 0, err
}
i += n2
dAtA[i] = 0x32
dAtA[i] = 0x3a
i++
i = encodeVarintRuntime(dAtA, i, uint64(github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp)))
n3, err := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i:])
@ -344,11 +351,11 @@ func (m *RuntimeDelete) MarshalTo(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ID) > 0 {
if len(m.ContainerID) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintRuntime(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
i = encodeVarintRuntime(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
}
if len(m.Runtime) > 0 {
dAtA[i] = 0x12
@ -443,7 +450,7 @@ func (m *RuntimeMount) Size() (n int) {
func (m *RuntimeCreate) Size() (n int) {
var l int
_ = l
l = len(m.ID)
l = len(m.ContainerID)
if l > 0 {
n += 1 + l + sovRuntime(uint64(l))
}
@ -475,6 +482,10 @@ func (m *RuntimeEvent) Size() (n int) {
if l > 0 {
n += 1 + l + sovRuntime(uint64(l))
}
l = len(m.ContainerID)
if l > 0 {
n += 1 + l + sovRuntime(uint64(l))
}
if m.Type != 0 {
n += 1 + sovRuntime(uint64(m.Type))
}
@ -494,7 +505,7 @@ func (m *RuntimeEvent) Size() (n int) {
func (m *RuntimeDelete) Size() (n int) {
var l int
_ = l
l = len(m.ID)
l = len(m.ContainerID)
if l > 0 {
n += 1 + l + sovRuntime(uint64(l))
}
@ -553,7 +564,7 @@ func (this *RuntimeCreate) String() string {
return "nil"
}
s := strings.Join([]string{`&RuntimeCreate{`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`Bundle:` + fmt.Sprintf("%v", this.Bundle) + `,`,
`RootFS:` + strings.Replace(fmt.Sprintf("%v", this.RootFS), "RuntimeMount", "RuntimeMount", 1) + `,`,
`IO:` + strings.Replace(fmt.Sprintf("%v", this.IO), "RuntimeIO", "RuntimeIO", 1) + `,`,
@ -568,6 +579,7 @@ func (this *RuntimeEvent) String() string {
}
s := strings.Join([]string{`&RuntimeEvent{`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`Type:` + fmt.Sprintf("%v", this.Type) + `,`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`ExitStatus:` + fmt.Sprintf("%v", this.ExitStatus) + `,`,
@ -582,7 +594,7 @@ func (this *RuntimeDelete) String() string {
return "nil"
}
s := strings.Join([]string{`&RuntimeDelete{`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`Runtime:` + fmt.Sprintf("%v", this.Runtime) + `,`,
`ExitStatus:` + fmt.Sprintf("%v", this.ExitStatus) + `,`,
`ExitedAt:` + strings.Replace(strings.Replace(this.ExitedAt.String(), "Timestamp", "google_protobuf2.Timestamp", 1), `&`, ``, 1) + `,`,
@ -923,7 +935,7 @@ func (m *RuntimeCreate) Unmarshal(dAtA []byte) error {
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -948,7 +960,7 @@ func (m *RuntimeCreate) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ID = string(dAtA[iNdEx:postIndex])
m.ContainerID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
@ -1152,6 +1164,35 @@ func (m *RuntimeEvent) Unmarshal(dAtA []byte) error {
m.ID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowRuntime
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthRuntime
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ContainerID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType)
}
@ -1170,7 +1211,7 @@ func (m *RuntimeEvent) Unmarshal(dAtA []byte) error {
break
}
}
case 3:
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType)
}
@ -1189,7 +1230,7 @@ func (m *RuntimeEvent) Unmarshal(dAtA []byte) error {
break
}
}
case 4:
case 5:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field ExitStatus", wireType)
}
@ -1208,7 +1249,7 @@ func (m *RuntimeEvent) Unmarshal(dAtA []byte) error {
break
}
}
case 5:
case 6:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExitedAt", wireType)
}
@ -1238,7 +1279,7 @@ func (m *RuntimeEvent) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 6:
case 7:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType)
}
@ -1320,7 +1361,7 @@ func (m *RuntimeDelete) Unmarshal(dAtA []byte) error {
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -1345,7 +1386,7 @@ func (m *RuntimeDelete) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ID = string(dAtA[iNdEx:postIndex])
m.ContainerID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
@ -1556,44 +1597,45 @@ func init() {
}
var fileDescriptorRuntime = []byte{
// 610 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x6a, 0xdb, 0x4c,
0x10, 0xb6, 0x24, 0x5b, 0xb1, 0xc6, 0x7f, 0x82, 0x58, 0xc2, 0x8f, 0x30, 0x54, 0x0e, 0x3e, 0x19,
0x0a, 0x12, 0x71, 0xe9, 0xa9, 0x50, 0x6a, 0xc7, 0x2a, 0xf8, 0x10, 0xdc, 0xae, 0x55, 0x08, 0xbd,
0x04, 0xd9, 0xda, 0x38, 0x4b, 0x6d, 0xad, 0x58, 0xad, 0x4c, 0x73, 0xeb, 0x23, 0xf4, 0x25, 0xfa,
0x2e, 0x39, 0xf6, 0xd8, 0x53, 0xda, 0xf8, 0x11, 0xfa, 0x00, 0xa5, 0x68, 0x57, 0x56, 0x42, 0xa1,
0x26, 0xcd, 0xc5, 0xcc, 0x37, 0xcc, 0x7c, 0x33, 0xdf, 0xec, 0x67, 0x41, 0xb0, 0xa0, 0xe2, 0x32,
0x9f, 0x79, 0x73, 0xb6, 0xf2, 0xe7, 0x2c, 0x11, 0x11, 0x4d, 0x08, 0x8f, 0xef, 0x87, 0x51, 0x4a,
0xfd, 0x8c, 0xf0, 0x35, 0x9d, 0x93, 0xcc, 0x27, 0x6b, 0x92, 0x88, 0xcc, 0x5f, 0x1f, 0xfb, 0x3c,
0x4f, 0x04, 0x5d, 0x11, 0x2f, 0xe5, 0x4c, 0x30, 0xf4, 0xe4, 0xae, 0xc1, 0xdb, 0x16, 0x7b, 0xaa,
0xd8, 0x5b, 0x1f, 0xb7, 0x0f, 0x17, 0x6c, 0xc1, 0x64, 0xa5, 0x5f, 0x44, 0xaa, 0xa9, 0xdd, 0x59,
0x30, 0xb6, 0x58, 0x12, 0x5f, 0xa2, 0x59, 0x7e, 0xe1, 0x17, 0x84, 0x99, 0x88, 0x56, 0xa9, 0x2a,
0xe8, 0xae, 0xc0, 0xc2, 0x6a, 0xcc, 0x78, 0x82, 0x0e, 0xa1, 0x91, 0x89, 0x98, 0x26, 0x8e, 0x76,
0xa4, 0xf5, 0x2c, 0xac, 0x00, 0xfa, 0x1f, 0xcc, 0x4c, 0xc4, 0x2c, 0x17, 0x8e, 0x2e, 0xd3, 0x25,
0x2a, 0xf3, 0x84, 0x73, 0xc7, 0xa8, 0xf2, 0x84, 0x73, 0xd4, 0x86, 0xa6, 0x20, 0x7c, 0x45, 0x93,
0x68, 0xe9, 0xd4, 0x8f, 0xb4, 0x5e, 0x13, 0x57, 0xb8, 0x1b, 0xc2, 0x7f, 0xe5, 0xb8, 0x53, 0x96,
0x27, 0x02, 0x21, 0xa8, 0x8b, 0xab, 0x94, 0x94, 0x03, 0x65, 0x2c, 0x79, 0x59, 0xce, 0xe7, 0xa4,
0x9a, 0x27, 0x11, 0x72, 0x60, 0x8f, 0xa5, 0x82, 0xb2, 0x24, 0x73, 0x8c, 0x23, 0xa3, 0x67, 0xe1,
0x2d, 0xec, 0xfe, 0xd4, 0x60, 0xbf, 0xa4, 0x3d, 0xe1, 0x24, 0x12, 0x05, 0x87, 0x4e, 0x63, 0xc5,
0x3a, 0x34, 0x37, 0x37, 0x1d, 0x7d, 0x3c, 0xc2, 0x3a, 0x8d, 0x0b, 0xee, 0x59, 0x9e, 0xc4, 0xcb,
0x8a, 0x5b, 0x21, 0x34, 0x01, 0x93, 0x33, 0x26, 0x2e, 0x14, 0x75, 0xab, 0xff, 0xd4, 0xdb, 0x79,
0x6d, 0xef, 0xbe, 0x88, 0x21, 0x6c, 0x6e, 0x3a, 0x26, 0x66, 0x4c, 0xbc, 0x9e, 0xe2, 0x92, 0x06,
0xbd, 0x02, 0x9d, 0x32, 0x29, 0xbf, 0xd5, 0xef, 0x3d, 0x8c, 0x6c, 0x3c, 0x29, 0x57, 0x9d, 0x60,
0x9d, 0x32, 0xe4, 0x02, 0xcc, 0x2f, 0xc9, 0xfc, 0x43, 0xca, 0x68, 0x22, 0x9c, 0x86, 0x5c, 0xf7,
0x5e, 0xa6, 0xfb, 0x4b, 0xaf, 0x6e, 0x19, 0x14, 0x54, 0x7f, 0xd5, 0x3c, 0x2e, 0x6f, 0x5c, 0x28,
0x3e, 0xe8, 0x3f, 0x7f, 0xd8, 0x32, 0x92, 0xd2, 0x93, 0xbf, 0xe1, 0x55, 0x4a, 0xca, 0xa7, 0xb1,
0xc1, 0x48, 0x69, 0x2c, 0xdf, 0x7b, 0x1f, 0x17, 0x21, 0xea, 0x40, 0x8b, 0x7c, 0xa4, 0xe2, 0x3c,
0x13, 0x91, 0xc8, 0x33, 0x29, 0x78, 0x1f, 0x43, 0x91, 0x9a, 0xca, 0x0c, 0x1a, 0x80, 0x55, 0x20,
0x12, 0x9f, 0x47, 0x4a, 0x45, 0xab, 0xdf, 0xf6, 0x94, 0x2b, 0xbd, 0xad, 0x2b, 0xbd, 0x70, 0xeb,
0xca, 0x61, 0xf3, 0xfa, 0xa6, 0x53, 0xfb, 0xfc, 0xbd, 0xa3, 0xe1, 0xa6, 0x6a, 0x1b, 0x08, 0x34,
0x04, 0xab, 0xb2, 0xad, 0x63, 0xfe, 0x03, 0xc5, 0x5d, 0x5b, 0xf7, 0x2d, 0x58, 0x95, 0x18, 0xd4,
0x84, 0x7a, 0x70, 0x36, 0x0e, 0xed, 0x1a, 0xda, 0x03, 0x63, 0x32, 0x39, 0xb5, 0x35, 0x04, 0x60,
0x9e, 0xe0, 0x60, 0x10, 0x06, 0xb6, 0x8e, 0x2c, 0x68, 0x4c, 0xc3, 0x01, 0x0e, 0x6d, 0x03, 0x1d,
0x00, 0x04, 0x67, 0xc1, 0xc9, 0xf9, 0x60, 0x34, 0x0a, 0x46, 0x76, 0xbd, 0x28, 0x7b, 0x33, 0x78,
0x37, 0x0d, 0x46, 0x76, 0xa3, 0xfb, 0xe5, 0xce, 0x75, 0x23, 0xb2, 0x24, 0x3b, 0x5c, 0xe7, 0xc0,
0x5e, 0xf9, 0x5f, 0x2e, 0x6d, 0xb7, 0x85, 0x7f, 0x9e, 0xcf, 0xd8, 0x7d, 0xbe, 0xfa, 0x63, 0xce,
0x37, 0x3c, 0xbb, 0xbe, 0x75, 0x6b, 0xdf, 0x6e, 0xdd, 0xda, 0xa7, 0x8d, 0xab, 0x5d, 0x6f, 0x5c,
0xed, 0xeb, 0xc6, 0xd5, 0x7e, 0x6c, 0x5c, 0xed, 0xfd, 0xcb, 0x47, 0x7e, 0x99, 0x5e, 0xa8, 0x68,
0x66, 0xca, 0x0d, 0x9e, 0xfd, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xe1, 0x39, 0x80, 0x2a, 0xe2, 0x04,
0x00, 0x00,
// 639 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x4d, 0x6b, 0xdb, 0x4c,
0x10, 0xb6, 0x24, 0x7f, 0x8e, 0x93, 0xbc, 0x62, 0x09, 0x41, 0x18, 0x5e, 0x29, 0xf8, 0x64, 0x78,
0x41, 0x22, 0x7e, 0xe9, 0xa9, 0x50, 0x6a, 0x5b, 0x2a, 0xe8, 0x10, 0xdc, 0xae, 0x55, 0x08, 0xbd,
0x18, 0xd9, 0xda, 0x38, 0x4b, 0x6d, 0xad, 0x90, 0x56, 0xa6, 0xb9, 0xf5, 0x17, 0x94, 0xfe, 0x96,
0xfe, 0x83, 0xde, 0x72, 0xec, 0xb1, 0x27, 0xb7, 0xd1, 0x2f, 0x29, 0x5a, 0xc9, 0x4a, 0x68, 0x21,
0xa4, 0xb9, 0x98, 0x79, 0x86, 0x99, 0xe7, 0xd9, 0x79, 0x66, 0x2c, 0x70, 0x56, 0x94, 0x5f, 0xa5,
0x0b, 0x73, 0xc9, 0x36, 0xd6, 0x92, 0x85, 0xdc, 0xa7, 0x21, 0x89, 0x83, 0xfb, 0xa1, 0x1f, 0x51,
0x2b, 0x21, 0xf1, 0x96, 0x2e, 0x49, 0x62, 0x91, 0x2d, 0x09, 0x79, 0x62, 0x6d, 0xcf, 0xac, 0x38,
0x0d, 0x39, 0xdd, 0x10, 0x33, 0x8a, 0x19, 0x67, 0xe8, 0xdf, 0xbb, 0x06, 0x73, 0x5f, 0x6c, 0x16,
0xc5, 0xe6, 0xf6, 0xac, 0x77, 0xbc, 0x62, 0x2b, 0x26, 0x2a, 0xad, 0x3c, 0x2a, 0x9a, 0x7a, 0xc6,
0x8a, 0xb1, 0xd5, 0x9a, 0x58, 0x02, 0x2d, 0xd2, 0x4b, 0x2b, 0x27, 0x4c, 0xb8, 0xbf, 0x89, 0x8a,
0x82, 0xfe, 0x06, 0x3a, 0xb8, 0x90, 0x71, 0xa7, 0xe8, 0x18, 0x1a, 0x09, 0x0f, 0x68, 0xa8, 0x49,
0xa7, 0xd2, 0xa0, 0x83, 0x0b, 0x80, 0x4e, 0xa0, 0x99, 0xf0, 0x80, 0xa5, 0x5c, 0x93, 0x45, 0xba,
0x44, 0x65, 0x9e, 0xc4, 0xb1, 0xa6, 0x54, 0x79, 0x12, 0xc7, 0xa8, 0x07, 0x6d, 0x4e, 0xe2, 0x0d,
0x0d, 0xfd, 0xb5, 0x56, 0x3f, 0x95, 0x06, 0x6d, 0x5c, 0xe1, 0xbe, 0x07, 0x07, 0xa5, 0xdc, 0x39,
0x4b, 0x43, 0x8e, 0x10, 0xd4, 0xf9, 0x75, 0x44, 0x4a, 0x41, 0x11, 0x0b, 0x5e, 0x96, 0xc6, 0x4b,
0x52, 0xe9, 0x09, 0x84, 0x34, 0x68, 0xb1, 0x88, 0x53, 0x16, 0x26, 0x9a, 0x72, 0xaa, 0x0c, 0x3a,
0x78, 0x0f, 0xfb, 0x9f, 0x64, 0x38, 0x2c, 0x69, 0x27, 0x31, 0xf1, 0x39, 0x41, 0x43, 0x38, 0xa8,
0xec, 0x9a, 0xd3, 0xa0, 0xe0, 0x1f, 0xff, 0x93, 0xed, 0x8c, 0xee, 0x64, 0x9f, 0x77, 0x6d, 0xdc,
0xad, 0x8a, 0xdc, 0x20, 0xd7, 0x5d, 0xa4, 0x61, 0xb0, 0xae, 0x74, 0x0b, 0x84, 0xa6, 0xd0, 0x8c,
0x19, 0xe3, 0x97, 0x85, 0x6c, 0x77, 0xf8, 0x9f, 0xf9, 0xe0, 0x26, 0xcc, 0xfb, 0x03, 0x8e, 0x21,
0xdb, 0x19, 0x4d, 0xcc, 0x18, 0x7f, 0x35, 0xc3, 0x25, 0x0d, 0x7a, 0x09, 0x32, 0x65, 0xc2, 0x9a,
0xee, 0x70, 0xf0, 0x38, 0x32, 0x77, 0x3a, 0x6e, 0x66, 0x3b, 0x43, 0x76, 0xa7, 0x58, 0xa6, 0x0c,
0xe9, 0x00, 0xcb, 0x2b, 0xb2, 0x7c, 0x1f, 0x31, 0x1a, 0x72, 0xad, 0x21, 0x9e, 0x7b, 0x2f, 0xd3,
0xff, 0xa2, 0x54, 0x3e, 0x3b, 0x39, 0x15, 0x3a, 0x01, 0xb9, 0x72, 0xa1, 0x20, 0xb2, 0xb1, 0x4c,
0x83, 0x3f, 0x7c, 0x92, 0x1f, 0xe1, 0x93, 0x5b, 0xee, 0x2c, 0xdf, 0xfa, 0xd1, 0xf0, 0xd9, 0xe3,
0x06, 0x10, 0xcf, 0x30, 0xc5, 0xaf, 0x77, 0x1d, 0x91, 0x72, 0xd5, 0x2a, 0x28, 0x11, 0x0d, 0x84,
0x15, 0x87, 0x38, 0x0f, 0x91, 0x01, 0x5d, 0xf2, 0x81, 0xf2, 0x79, 0xc2, 0x7d, 0x9e, 0x26, 0x62,
0xb4, 0x43, 0x0c, 0x79, 0x6a, 0x26, 0x32, 0x68, 0x04, 0x9d, 0x1c, 0x91, 0x60, 0xee, 0x73, 0xad,
0x29, 0x3c, 0xec, 0x99, 0xc5, 0x95, 0x9b, 0xfb, 0x2b, 0x37, 0xbd, 0xfd, 0x95, 0x8f, 0xdb, 0x37,
0x3b, 0xa3, 0xf6, 0xf9, 0x87, 0x21, 0xe1, 0x76, 0xd1, 0x36, 0xe2, 0x68, 0x0c, 0x9d, 0xea, 0x6f,
0xa0, 0xb5, 0xfe, 0x82, 0xe2, 0xae, 0xad, 0xff, 0x06, 0x3a, 0xd5, 0x30, 0xa8, 0x0d, 0x75, 0xe7,
0xc2, 0xf5, 0xd4, 0x1a, 0x6a, 0x81, 0x32, 0x9d, 0x9e, 0xab, 0x12, 0x02, 0x68, 0x4e, 0xb0, 0x33,
0xf2, 0x1c, 0x55, 0x46, 0x1d, 0x68, 0xcc, 0xbc, 0x11, 0xf6, 0x54, 0x05, 0x1d, 0x01, 0x38, 0x17,
0xce, 0x64, 0x3e, 0xb2, 0x6d, 0xc7, 0x56, 0xeb, 0x79, 0xd9, 0xeb, 0xd1, 0xdb, 0x99, 0x63, 0xab,
0x8d, 0xfe, 0x57, 0xa9, 0xba, 0x62, 0x9b, 0xac, 0xc9, 0x13, 0xaf, 0x58, 0x83, 0x56, 0xf9, 0xdd,
0x28, 0xcf, 0x78, 0x0f, 0x7f, 0xb7, 0x56, 0x79, 0xd8, 0xda, 0xfa, 0x53, 0xac, 0x1d, 0x5f, 0xdc,
0xdc, 0xea, 0xb5, 0xef, 0xb7, 0x7a, 0xed, 0x63, 0xa6, 0x4b, 0x37, 0x99, 0x2e, 0x7d, 0xcb, 0x74,
0xe9, 0x67, 0xa6, 0x4b, 0xef, 0x5e, 0x3c, 0xf1, 0x2b, 0xf8, 0xbc, 0x88, 0x16, 0x4d, 0xf1, 0x82,
0xff, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x14, 0xb7, 0x09, 0x4e, 0x05, 0x00, 0x00,
}

View File

@ -21,7 +21,7 @@ message RuntimeMount {
}
message RuntimeCreate {
string id = 1;
string container_id = 1;
string bundle = 2;
repeated RuntimeMount rootfs = 3 [(gogoproto.customname) = "RootFS"];
RuntimeIO io = 4 [(gogoproto.customname) = "IO"];
@ -30,6 +30,7 @@ message RuntimeCreate {
message RuntimeEvent {
string id = 1;
string container_id = 2;
enum EventType {
EXIT = 0;
OOM = 1;
@ -38,15 +39,15 @@ message RuntimeEvent {
EXEC_ADDED = 4;
PAUSED = 5;
}
EventType type = 2;
uint32 pid = 3;
uint32 exit_status = 4;
google.protobuf.Timestamp exited_at = 5 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
google.protobuf.Timestamp timestamp = 6 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
EventType type = 3;
uint32 pid = 4;
uint32 exit_status = 5;
google.protobuf.Timestamp exited_at = 6 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
google.protobuf.Timestamp timestamp = 7 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
}
message RuntimeDelete {
string id = 1;
string container_id = 1;
string runtime = 2;
uint32 exit_status = 3;
google.protobuf.Timestamp exited_at = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];

View File

@ -73,12 +73,7 @@ var _ = time.Kitchen
const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package
type CreateTaskRequest struct {
// ContainerID specifies the container to use for creating this task.
//
// The spec from the provided container id will be used to create the
// task associated with this container. Only one task can be run at a time
// per container.
ContainerID string `protobuf:"bytes,2,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
// RootFS provides the pre-chroot mounts to perform in the shim before
// executing the container task.
//
@ -99,8 +94,8 @@ func (*CreateTaskRequest) ProtoMessage() {}
func (*CreateTaskRequest) Descriptor() ([]byte, []int) { return fileDescriptorTasks, []int{0} }
type CreateTaskResponse struct {
ContainerID string `protobuf:"bytes,2,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Pid uint32 `protobuf:"varint,3,opt,name=pid,proto3" json:"pid,omitempty"`
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"`
}
func (m *CreateTaskResponse) Reset() { *m = CreateTaskResponse{} }
@ -124,10 +119,10 @@ func (*DeleteTaskRequest) ProtoMessage() {}
func (*DeleteTaskRequest) Descriptor() ([]byte, []int) { return fileDescriptorTasks, []int{3} }
type DeleteResponse struct {
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"`
ExitStatus uint32 `protobuf:"varint,3,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"`
ExitedAt time.Time `protobuf:"bytes,4,opt,name=exited_at,json=exitedAt,stdtime" json:"exited_at"`
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"`
ExitStatus uint32 `protobuf:"varint,3,opt,name=exit_status,json=exitStatus,proto3" json:"exit_status,omitempty"`
ExitedAt time.Time `protobuf:"bytes,4,opt,name=exited_at,json=exitedAt,stdtime" json:"exited_at"`
}
func (m *DeleteResponse) Reset() { *m = DeleteResponse{} }
@ -136,7 +131,7 @@ func (*DeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorTasks
type DeleteProcessRequest struct {
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"`
ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
}
func (m *DeleteProcessRequest) Reset() { *m = DeleteProcessRequest{} }
@ -177,124 +172,16 @@ func (*ListTasksResponse) Descriptor() ([]byte, []int) { return fileDescriptorTa
type KillRequest struct {
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Signal uint32 `protobuf:"varint,2,opt,name=signal,proto3" json:"signal,omitempty"`
// Types that are valid to be assigned to PidOrAll:
// *KillRequest_All
// *KillRequest_Pid
PidOrAll isKillRequest_PidOrAll `protobuf_oneof:"pid_or_all"`
ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
Signal uint32 `protobuf:"varint,3,opt,name=signal,proto3" json:"signal,omitempty"`
All bool `protobuf:"varint,4,opt,name=all,proto3" json:"all,omitempty"`
}
func (m *KillRequest) Reset() { *m = KillRequest{} }
func (*KillRequest) ProtoMessage() {}
func (*KillRequest) Descriptor() ([]byte, []int) { return fileDescriptorTasks, []int{10} }
type isKillRequest_PidOrAll interface {
isKillRequest_PidOrAll()
MarshalTo([]byte) (int, error)
Size() int
}
type KillRequest_All struct {
All bool `protobuf:"varint,3,opt,name=all,proto3,oneof"`
}
type KillRequest_Pid struct {
Pid uint32 `protobuf:"varint,4,opt,name=pid,proto3,oneof"`
}
func (*KillRequest_All) isKillRequest_PidOrAll() {}
func (*KillRequest_Pid) isKillRequest_PidOrAll() {}
func (m *KillRequest) GetPidOrAll() isKillRequest_PidOrAll {
if m != nil {
return m.PidOrAll
}
return nil
}
func (m *KillRequest) GetAll() bool {
if x, ok := m.GetPidOrAll().(*KillRequest_All); ok {
return x.All
}
return false
}
func (m *KillRequest) GetPid() uint32 {
if x, ok := m.GetPidOrAll().(*KillRequest_Pid); ok {
return x.Pid
}
return 0
}
// XXX_OneofFuncs is for the internal use of the proto package.
func (*KillRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) {
return _KillRequest_OneofMarshaler, _KillRequest_OneofUnmarshaler, _KillRequest_OneofSizer, []interface{}{
(*KillRequest_All)(nil),
(*KillRequest_Pid)(nil),
}
}
func _KillRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error {
m := msg.(*KillRequest)
// pid_or_all
switch x := m.PidOrAll.(type) {
case *KillRequest_All:
t := uint64(0)
if x.All {
t = 1
}
_ = b.EncodeVarint(3<<3 | proto.WireVarint)
_ = b.EncodeVarint(t)
case *KillRequest_Pid:
_ = b.EncodeVarint(4<<3 | proto.WireVarint)
_ = b.EncodeVarint(uint64(x.Pid))
case nil:
default:
return fmt.Errorf("KillRequest.PidOrAll has unexpected type %T", x)
}
return nil
}
func _KillRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) {
m := msg.(*KillRequest)
switch tag {
case 3: // pid_or_all.all
if wire != proto.WireVarint {
return true, proto.ErrInternalBadWireType
}
x, err := b.DecodeVarint()
m.PidOrAll = &KillRequest_All{x != 0}
return true, err
case 4: // pid_or_all.pid
if wire != proto.WireVarint {
return true, proto.ErrInternalBadWireType
}
x, err := b.DecodeVarint()
m.PidOrAll = &KillRequest_Pid{uint32(x)}
return true, err
default:
return false, nil
}
}
func _KillRequest_OneofSizer(msg proto.Message) (n int) {
m := msg.(*KillRequest)
// pid_or_all
switch x := m.PidOrAll.(type) {
case *KillRequest_All:
n += proto.SizeVarint(3<<3 | proto.WireVarint)
n += 1
case *KillRequest_Pid:
n += proto.SizeVarint(4<<3 | proto.WireVarint)
n += proto.SizeVarint(uint64(x.Pid))
case nil:
default:
panic(fmt.Sprintf("proto: unexpected type %T in oneof", x))
}
return n
}
type ExecProcessRequest struct {
// ContainerID specifies the container in which to exec the process.
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Stdin string `protobuf:"bytes,2,opt,name=stdin,proto3" json:"stdin,omitempty"`
Stdout string `protobuf:"bytes,3,opt,name=stdout,proto3" json:"stdout,omitempty"`
@ -304,6 +191,8 @@ type ExecProcessRequest struct {
//
// For runc, this is a process spec, for example.
Spec *google_protobuf1.Any `protobuf:"bytes,6,opt,name=spec" json:"spec,omitempty"`
// id of the exec process
ExecID string `protobuf:"bytes,7,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
}
func (m *ExecProcessRequest) Reset() { *m = ExecProcessRequest{} }
@ -320,7 +209,7 @@ func (*ExecProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptor
type ResizePtyRequest struct {
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"`
ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
Width uint32 `protobuf:"varint,3,opt,name=width,proto3" json:"width,omitempty"`
Height uint32 `protobuf:"varint,4,opt,name=height,proto3" json:"height,omitempty"`
}
@ -331,7 +220,7 @@ func (*ResizePtyRequest) Descriptor() ([]byte, []int) { return fileDescriptorTas
type CloseIORequest struct {
ContainerID string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"`
Pid uint32 `protobuf:"varint,2,opt,name=pid,proto3" json:"pid,omitempty"`
ExecID string `protobuf:"bytes,2,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
Stdin bool `protobuf:"varint,3,opt,name=stdin,proto3" json:"stdin,omitempty"`
}
@ -981,7 +870,7 @@ func (m *CreateTaskRequest) MarshalTo(dAtA []byte) (int, error) {
var l int
_ = l
if len(m.ContainerID) > 0 {
dAtA[i] = 0x12
dAtA[i] = 0xa
i++
i = encodeVarintTasks(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
@ -1065,13 +954,13 @@ func (m *CreateTaskResponse) MarshalTo(dAtA []byte) (int, error) {
var l int
_ = l
if len(m.ContainerID) > 0 {
dAtA[i] = 0x12
dAtA[i] = 0xa
i++
i = encodeVarintTasks(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
}
if m.Pid != 0 {
dAtA[i] = 0x18
dAtA[i] = 0x10
i++
i = encodeVarintTasks(dAtA, i, uint64(m.Pid))
}
@ -1141,11 +1030,11 @@ func (m *DeleteResponse) MarshalTo(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.ContainerID) > 0 {
if len(m.ID) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintTasks(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
i = encodeVarintTasks(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
}
if m.Pid != 0 {
dAtA[i] = 0x10
@ -1189,10 +1078,11 @@ func (m *DeleteProcessRequest) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintTasks(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
}
if m.Pid != 0 {
dAtA[i] = 0x10
if len(m.ExecID) > 0 {
dAtA[i] = 0x12
i++
i = encodeVarintTasks(dAtA, i, uint64(m.Pid))
i = encodeVarintTasks(dAtA, i, uint64(len(m.ExecID)))
i += copy(dAtA[i:], m.ExecID)
}
return i, nil
}
@ -1324,40 +1214,30 @@ func (m *KillRequest) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintTasks(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
}
if len(m.ExecID) > 0 {
dAtA[i] = 0x12
i++
i = encodeVarintTasks(dAtA, i, uint64(len(m.ExecID)))
i += copy(dAtA[i:], m.ExecID)
}
if m.Signal != 0 {
dAtA[i] = 0x10
dAtA[i] = 0x18
i++
i = encodeVarintTasks(dAtA, i, uint64(m.Signal))
}
if m.PidOrAll != nil {
nn5, err := m.PidOrAll.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
if m.All {
dAtA[i] = 0x20
i++
if m.All {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i += nn5
i++
}
return i, nil
}
func (m *KillRequest_All) MarshalTo(dAtA []byte) (int, error) {
i := 0
dAtA[i] = 0x18
i++
if m.All {
dAtA[i] = 1
} else {
dAtA[i] = 0
}
i++
return i, nil
}
func (m *KillRequest_Pid) MarshalTo(dAtA []byte) (int, error) {
i := 0
dAtA[i] = 0x20
i++
i = encodeVarintTasks(dAtA, i, uint64(m.Pid))
return i, nil
}
func (m *ExecProcessRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@ -1411,11 +1291,17 @@ func (m *ExecProcessRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x32
i++
i = encodeVarintTasks(dAtA, i, uint64(m.Spec.Size()))
n6, err := m.Spec.MarshalTo(dAtA[i:])
n5, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n6
i += n5
}
if len(m.ExecID) > 0 {
dAtA[i] = 0x3a
i++
i = encodeVarintTasks(dAtA, i, uint64(len(m.ExecID)))
i += copy(dAtA[i:], m.ExecID)
}
return i, nil
}
@ -1464,10 +1350,11 @@ func (m *ResizePtyRequest) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintTasks(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
}
if m.Pid != 0 {
dAtA[i] = 0x10
if len(m.ExecID) > 0 {
dAtA[i] = 0x12
i++
i = encodeVarintTasks(dAtA, i, uint64(m.Pid))
i = encodeVarintTasks(dAtA, i, uint64(len(m.ExecID)))
i += copy(dAtA[i:], m.ExecID)
}
if m.Width != 0 {
dAtA[i] = 0x18
@ -1503,10 +1390,11 @@ func (m *CloseIORequest) MarshalTo(dAtA []byte) (int, error) {
i = encodeVarintTasks(dAtA, i, uint64(len(m.ContainerID)))
i += copy(dAtA[i:], m.ContainerID)
}
if m.Pid != 0 {
dAtA[i] = 0x10
if len(m.ExecID) > 0 {
dAtA[i] = 0x12
i++
i = encodeVarintTasks(dAtA, i, uint64(m.Pid))
i = encodeVarintTasks(dAtA, i, uint64(len(m.ExecID)))
i += copy(dAtA[i:], m.ExecID)
}
if m.Stdin {
dAtA[i] = 0x18
@ -1609,21 +1497,21 @@ func (m *ListPidsResponse) MarshalTo(dAtA []byte) (int, error) {
var l int
_ = l
if len(m.Pids) > 0 {
dAtA8 := make([]byte, len(m.Pids)*10)
var j7 int
dAtA7 := make([]byte, len(m.Pids)*10)
var j6 int
for _, num := range m.Pids {
for num >= 1<<7 {
dAtA8[j7] = uint8(uint64(num)&0x7f | 0x80)
dAtA7[j6] = uint8(uint64(num)&0x7f | 0x80)
num >>= 7
j7++
j6++
}
dAtA8[j7] = uint8(num)
j7++
dAtA7[j6] = uint8(num)
j6++
}
dAtA[i] = 0xa
i++
i = encodeVarintTasks(dAtA, i, uint64(j7))
i += copy(dAtA[i:], dAtA8[:j7])
i = encodeVarintTasks(dAtA, i, uint64(j6))
i += copy(dAtA[i:], dAtA7[:j6])
}
return i, nil
}
@ -1659,11 +1547,11 @@ func (m *CheckpointTaskRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintTasks(dAtA, i, uint64(m.Options.Size()))
n9, err := m.Options.MarshalTo(dAtA[i:])
n8, err := m.Options.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n9
i += n8
}
return i, nil
}
@ -1723,11 +1611,11 @@ func (m *UpdateTaskRequest) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintTasks(dAtA, i, uint64(m.Resources.Size()))
n10, err := m.Resources.MarshalTo(dAtA[i:])
n9, err := m.Resources.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n10
i += n9
}
return i, nil
}
@ -1834,7 +1722,7 @@ func (m *DeleteTaskRequest) Size() (n int) {
func (m *DeleteResponse) Size() (n int) {
var l int
_ = l
l = len(m.ContainerID)
l = len(m.ID)
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
@ -1856,8 +1744,9 @@ func (m *DeleteProcessRequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
if m.Pid != 0 {
n += 1 + sovTasks(uint64(m.Pid))
l = len(m.ExecID)
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
return n
}
@ -1911,27 +1800,19 @@ func (m *KillRequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
l = len(m.ExecID)
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
if m.Signal != 0 {
n += 1 + sovTasks(uint64(m.Signal))
}
if m.PidOrAll != nil {
n += m.PidOrAll.Size()
if m.All {
n += 2
}
return n
}
func (m *KillRequest_All) Size() (n int) {
var l int
_ = l
n += 2
return n
}
func (m *KillRequest_Pid) Size() (n int) {
var l int
_ = l
n += 1 + sovTasks(uint64(m.Pid))
return n
}
func (m *ExecProcessRequest) Size() (n int) {
var l int
_ = l
@ -1958,6 +1839,10 @@ func (m *ExecProcessRequest) Size() (n int) {
l = m.Spec.Size()
n += 1 + l + sovTasks(uint64(l))
}
l = len(m.ExecID)
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
return n
}
@ -1977,8 +1862,9 @@ func (m *ResizePtyRequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
if m.Pid != 0 {
n += 1 + sovTasks(uint64(m.Pid))
l = len(m.ExecID)
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
if m.Width != 0 {
n += 1 + sovTasks(uint64(m.Width))
@ -1996,8 +1882,9 @@ func (m *CloseIORequest) Size() (n int) {
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
if m.Pid != 0 {
n += 1 + sovTasks(uint64(m.Pid))
l = len(m.ExecID)
if l > 0 {
n += 1 + l + sovTasks(uint64(l))
}
if m.Stdin {
n += 2
@ -2158,7 +2045,7 @@ func (this *DeleteResponse) String() string {
return "nil"
}
s := strings.Join([]string{`&DeleteResponse{`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`ExitStatus:` + fmt.Sprintf("%v", this.ExitStatus) + `,`,
`ExitedAt:` + strings.Replace(strings.Replace(this.ExitedAt.String(), "Timestamp", "google_protobuf3.Timestamp", 1), `&`, ``, 1) + `,`,
@ -2172,7 +2059,7 @@ func (this *DeleteProcessRequest) String() string {
}
s := strings.Join([]string{`&DeleteProcessRequest{`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`ExecID:` + fmt.Sprintf("%v", this.ExecID) + `,`,
`}`,
}, "")
return s
@ -2223,32 +2110,13 @@ func (this *KillRequest) String() string {
}
s := strings.Join([]string{`&KillRequest{`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`ExecID:` + fmt.Sprintf("%v", this.ExecID) + `,`,
`Signal:` + fmt.Sprintf("%v", this.Signal) + `,`,
`PidOrAll:` + fmt.Sprintf("%v", this.PidOrAll) + `,`,
`}`,
}, "")
return s
}
func (this *KillRequest_All) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&KillRequest_All{`,
`All:` + fmt.Sprintf("%v", this.All) + `,`,
`}`,
}, "")
return s
}
func (this *KillRequest_Pid) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&KillRequest_Pid{`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`}`,
}, "")
return s
}
func (this *ExecProcessRequest) String() string {
if this == nil {
return "nil"
@ -2260,6 +2128,7 @@ func (this *ExecProcessRequest) String() string {
`Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`,
`Terminal:` + fmt.Sprintf("%v", this.Terminal) + `,`,
`Spec:` + strings.Replace(fmt.Sprintf("%v", this.Spec), "Any", "google_protobuf1.Any", 1) + `,`,
`ExecID:` + fmt.Sprintf("%v", this.ExecID) + `,`,
`}`,
}, "")
return s
@ -2280,7 +2149,7 @@ func (this *ResizePtyRequest) String() string {
}
s := strings.Join([]string{`&ResizePtyRequest{`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`ExecID:` + fmt.Sprintf("%v", this.ExecID) + `,`,
`Width:` + fmt.Sprintf("%v", this.Width) + `,`,
`Height:` + fmt.Sprintf("%v", this.Height) + `,`,
`}`,
@ -2293,7 +2162,7 @@ func (this *CloseIORequest) String() string {
}
s := strings.Join([]string{`&CloseIORequest{`,
`ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`,
`Pid:` + fmt.Sprintf("%v", this.Pid) + `,`,
`ExecID:` + fmt.Sprintf("%v", this.ExecID) + `,`,
`Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`,
`}`,
}, "")
@ -2409,7 +2278,7 @@ func (m *CreateTaskRequest) Unmarshal(dAtA []byte) error {
return fmt.Errorf("proto: CreateTaskRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 2:
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
}
@ -2692,7 +2561,7 @@ func (m *CreateTaskResponse) Unmarshal(dAtA []byte) error {
return fmt.Errorf("proto: CreateTaskResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 2:
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
}
@ -2721,7 +2590,7 @@ func (m *CreateTaskResponse) Unmarshal(dAtA []byte) error {
}
m.ContainerID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType)
}
@ -2950,7 +2819,7 @@ func (m *DeleteResponse) Unmarshal(dAtA []byte) error {
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -2975,7 +2844,7 @@ func (m *DeleteResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ContainerID = string(dAtA[iNdEx:postIndex])
m.ID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 0 {
@ -3125,10 +2994,10 @@ func (m *DeleteProcessRequest) Unmarshal(dAtA []byte) error {
m.ContainerID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType)
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExecID", wireType)
}
m.Pid = 0
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTasks
@ -3138,11 +3007,21 @@ func (m *DeleteProcessRequest) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
m.Pid |= (uint32(b) & 0x7F) << shift
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTasks
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ExecID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTasks(dAtA[iNdEx:])
@ -3545,6 +3424,35 @@ func (m *KillRequest) Unmarshal(dAtA []byte) error {
m.ContainerID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExecID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTasks
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTasks
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ExecID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Signal", wireType)
}
@ -3563,7 +3471,7 @@ func (m *KillRequest) Unmarshal(dAtA []byte) error {
break
}
}
case 3:
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field All", wireType)
}
@ -3582,28 +3490,7 @@ func (m *KillRequest) Unmarshal(dAtA []byte) error {
break
}
}
b := bool(v != 0)
m.PidOrAll = &KillRequest_All{b}
case 4:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType)
}
var v uint32
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTasks
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
v |= (uint32(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
m.PidOrAll = &KillRequest_Pid{v}
m.All = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipTasks(dAtA[iNdEx:])
@ -3823,6 +3710,35 @@ func (m *ExecProcessRequest) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 7:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExecID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTasks
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTasks
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ExecID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTasks(dAtA[iNdEx:])
@ -3972,10 +3888,10 @@ func (m *ResizePtyRequest) Unmarshal(dAtA []byte) error {
m.ContainerID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType)
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExecID", wireType)
}
m.Pid = 0
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTasks
@ -3985,11 +3901,21 @@ func (m *ResizePtyRequest) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
m.Pid |= (uint32(b) & 0x7F) << shift
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTasks
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ExecID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Width", wireType)
@ -4108,10 +4034,10 @@ func (m *CloseIORequest) Unmarshal(dAtA []byte) error {
m.ContainerID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Pid", wireType)
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExecID", wireType)
}
m.Pid = 0
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTasks
@ -4121,11 +4047,21 @@ func (m *CloseIORequest) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
m.Pid |= (uint32(b) & 0x7F) << shift
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTasks
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ExecID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 3:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType)
@ -4960,80 +4896,80 @@ func init() {
}
var fileDescriptorTasks = []byte{
// 1191 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdd, 0x6e, 0x1b, 0xc5,
0x17, 0xcf, 0xc6, 0x1f, 0x75, 0x8e, 0x9b, 0x36, 0x99, 0x7f, 0xfe, 0xc1, 0x5d, 0x2a, 0x3b, 0xda,
0x0b, 0x30, 0x15, 0xd9, 0x25, 0x2e, 0xe2, 0x82, 0x56, 0x88, 0x26, 0x0e, 0x21, 0x02, 0x94, 0x74,
0x53, 0x10, 0xaa, 0x90, 0xac, 0x8d, 0x77, 0xe2, 0x8c, 0xb2, 0xde, 0xd9, 0xee, 0x8c, 0xd3, 0x06,
0x6e, 0xb8, 0xe2, 0x16, 0xde, 0x82, 0x77, 0xe0, 0x09, 0x72, 0xc9, 0x05, 0x17, 0x08, 0xa1, 0x40,
0xf3, 0x24, 0x68, 0x3e, 0xbc, 0xd9, 0xd8, 0xb1, 0xd7, 0xa9, 0x73, 0x93, 0xcc, 0xcc, 0x9e, 0x73,
0xe6, 0x9c, 0xdf, 0xf9, 0xf8, 0x8d, 0x0c, 0xeb, 0x1d, 0xc2, 0x0f, 0x7b, 0xfb, 0x76, 0x9b, 0x76,
0x9d, 0x36, 0x0d, 0xb9, 0x47, 0x42, 0x1c, 0xfb, 0xe9, 0xa5, 0x17, 0x11, 0x87, 0xe1, 0xf8, 0x98,
0xb4, 0x31, 0x73, 0xb8, 0xc7, 0x8e, 0x98, 0x73, 0xbc, 0xa6, 0x16, 0x76, 0x14, 0x53, 0x4e, 0xd1,
0xfd, 0x0b, 0x69, 0xbb, 0x2f, 0x69, 0x2b, 0x81, 0xe3, 0x35, 0xf3, 0xed, 0x0e, 0xa5, 0x9d, 0x00,
0x3b, 0x52, 0x76, 0xbf, 0x77, 0xe0, 0xe0, 0x6e, 0xc4, 0x4f, 0x94, 0xaa, 0x79, 0x6f, 0xf0, 0xa3,
0x17, 0xf6, 0x3f, 0x2d, 0x75, 0x68, 0x87, 0xca, 0xa5, 0x23, 0x56, 0xfa, 0xf4, 0xa3, 0x89, 0xfc,
0xe5, 0x27, 0x11, 0x66, 0x4e, 0x97, 0xf6, 0x42, 0xae, 0xf5, 0x1e, 0x5d, 0x43, 0xcf, 0xc7, 0xac,
0x1d, 0x93, 0x88, 0xd3, 0x58, 0x2b, 0x7f, 0x7c, 0x0d, 0x65, 0x11, 0xb7, 0xfc, 0xa3, 0x75, 0x6b,
0x83, 0x11, 0x72, 0xd2, 0xc5, 0x8c, 0x7b, 0xdd, 0x48, 0x09, 0x58, 0xa7, 0xb3, 0xb0, 0xb8, 0x11,
0x63, 0x8f, 0xe3, 0x67, 0x1e, 0x3b, 0x72, 0xf1, 0x8b, 0x1e, 0x66, 0x1c, 0x35, 0xe0, 0x76, 0x62,
0xbe, 0x45, 0xfc, 0xca, 0xec, 0x8a, 0x51, 0x9f, 0x5b, 0xbf, 0x7b, 0x7e, 0x56, 0x2b, 0x6f, 0xf4,
0xcf, 0xb7, 0x9b, 0x6e, 0x39, 0x11, 0xda, 0xf6, 0x91, 0x03, 0xc5, 0x98, 0x52, 0x7e, 0xc0, 0x2a,
0xb9, 0x95, 0x5c, 0xbd, 0xdc, 0x78, 0xcb, 0x4e, 0x25, 0x46, 0x7a, 0x67, 0x7f, 0x25, 0x20, 0x71,
0xb5, 0x18, 0x5a, 0x82, 0x02, 0xe3, 0x3e, 0x09, 0x2b, 0x79, 0x61, 0xdd, 0x55, 0x1b, 0xb4, 0x0c,
0x45, 0xc6, 0x7d, 0xda, 0xe3, 0x95, 0x82, 0x3c, 0xd6, 0x3b, 0x7d, 0x8e, 0xe3, 0xb8, 0x52, 0x4c,
0xce, 0x71, 0x1c, 0x23, 0x13, 0x4a, 0x1c, 0xc7, 0x5d, 0x12, 0x7a, 0x41, 0xe5, 0xd6, 0x8a, 0x51,
0x2f, 0xb9, 0xc9, 0x1e, 0x3d, 0x06, 0x68, 0x1f, 0xe2, 0xf6, 0x51, 0x44, 0x49, 0xc8, 0x2b, 0xa5,
0x15, 0xa3, 0x5e, 0x6e, 0xdc, 0x1f, 0x76, 0xab, 0x99, 0x20, 0xee, 0xa6, 0xe4, 0x91, 0x0d, 0xb7,
0x68, 0xc4, 0x09, 0x0d, 0x59, 0x65, 0x4e, 0xaa, 0x2e, 0xd9, 0x0a, 0x4d, 0xbb, 0x8f, 0xa6, 0xfd,
0x24, 0x3c, 0x71, 0xfb, 0x42, 0xd6, 0x73, 0x40, 0x69, 0x24, 0x59, 0x44, 0x43, 0x86, 0xdf, 0x08,
0xca, 0x05, 0xc8, 0x45, 0xc4, 0xaf, 0xe4, 0x56, 0x8c, 0xfa, 0xbc, 0x2b, 0x96, 0xd6, 0x67, 0xb0,
0xb0, 0xc7, 0xbd, 0x98, 0x8f, 0x4b, 0x92, 0x91, 0x6d, 0xd9, 0xda, 0x82, 0xc5, 0x26, 0x0e, 0xf0,
0xf8, 0x6c, 0x4f, 0x62, 0xe8, 0x37, 0x03, 0xee, 0x28, 0x4b, 0x23, 0x23, 0x35, 0x26, 0x8f, 0x74,
0x36, 0x89, 0x14, 0xd5, 0xa0, 0x8c, 0x5f, 0x11, 0xde, 0x62, 0xdc, 0xe3, 0x3d, 0xa6, 0x31, 0x00,
0x71, 0xb4, 0x27, 0x4f, 0xd0, 0x13, 0x98, 0x13, 0x3b, 0xec, 0xb7, 0x3c, 0x2e, 0x4b, 0xa7, 0xdc,
0x30, 0x87, 0x12, 0xf3, 0xac, 0x5f, 0xe6, 0xeb, 0xa5, 0xd3, 0xb3, 0xda, 0xcc, 0x2f, 0xff, 0xd4,
0x0c, 0xb7, 0xa4, 0xd4, 0x9e, 0x70, 0xeb, 0x3b, 0x58, 0x52, 0xbe, 0xef, 0xc6, 0xb4, 0x8d, 0x19,
0x9b, 0x02, 0x88, 0xe1, 0x08, 0xac, 0x26, 0xdc, 0xd9, 0xc2, 0x53, 0x67, 0xea, 0x53, 0xb8, 0x9b,
0x58, 0xd1, 0x00, 0xaf, 0x42, 0x5e, 0xb4, 0xb6, 0x54, 0x2f, 0x37, 0xee, 0xa5, 0x0b, 0xf9, 0x78,
0x4d, 0xd7, 0xb2, 0x54, 0x90, 0x62, 0xd6, 0x03, 0x58, 0xf8, 0x92, 0x30, 0x69, 0x22, 0x89, 0x70,
0x19, 0x8a, 0x07, 0x24, 0xe0, 0x38, 0x56, 0x3e, 0xb8, 0x7a, 0x67, 0x35, 0x61, 0x31, 0x25, 0xab,
0xef, 0x73, 0xa0, 0x20, 0xe7, 0x68, 0xc5, 0x90, 0x0d, 0x3d, 0xe6, 0x42, 0x25, 0x67, 0xfd, 0x6c,
0x40, 0xf9, 0x0b, 0x12, 0x04, 0xd3, 0xe0, 0x29, 0xfa, 0x9c, 0x74, 0x44, 0x37, 0x2b, 0x48, 0xf5,
0x0e, 0x21, 0xc8, 0x79, 0x41, 0x20, 0xeb, 0xa1, 0xf4, 0xf9, 0x8c, 0x2b, 0x36, 0xe2, 0x4c, 0x60,
0x2f, 0x8a, 0x60, 0x5e, 0x9c, 0x45, 0xc4, 0x5f, 0xbf, 0x0d, 0x10, 0x11, 0xbf, 0x45, 0xe3, 0x96,
0x17, 0x04, 0xd6, 0x1f, 0x06, 0xa0, 0xcd, 0x57, 0xb8, 0x7d, 0x03, 0x89, 0x4e, 0xc6, 0xd5, 0xec,
0xd5, 0xe3, 0x2a, 0x37, 0x62, 0x5c, 0xe5, 0x47, 0x8e, 0xab, 0xc2, 0xc0, 0xb8, 0xaa, 0x43, 0x9e,
0x45, 0xb8, 0x2d, 0x07, 0xdc, 0xa8, 0x69, 0x23, 0x25, 0xac, 0x77, 0xe1, 0x7f, 0x97, 0xa2, 0xd2,
0x09, 0xd3, 0xb5, 0x68, 0x5c, 0xd4, 0xe2, 0x4f, 0x06, 0x2c, 0xb8, 0x98, 0x91, 0xef, 0xf1, 0x2e,
0x3f, 0xb9, 0xd1, 0x32, 0x17, 0x78, 0xbc, 0x24, 0x3e, 0x3f, 0xd4, 0x2d, 0xaa, 0x36, 0x22, 0xee,
0x43, 0x4c, 0x3a, 0x87, 0xaa, 0x35, 0xe7, 0x5d, 0xbd, 0xb3, 0x02, 0xb8, 0xb3, 0x11, 0x50, 0x86,
0xb7, 0x77, 0x6e, 0xdc, 0x0b, 0x95, 0x15, 0x59, 0x18, 0x3a, 0x2b, 0x62, 0x5c, 0xee, 0x7a, 0x3d,
0x86, 0x6f, 0x60, 0x5c, 0xba, 0x98, 0xf5, 0xba, 0x53, 0x1b, 0xda, 0x84, 0xbb, 0xa2, 0xbf, 0x76,
0x89, 0x3f, 0x4d, 0x0d, 0x5a, 0xef, 0xa8, 0x96, 0x56, 0x66, 0x74, 0xd2, 0x11, 0xe4, 0x23, 0xe2,
0xab, 0x26, 0x9d, 0x77, 0xe5, 0xda, 0xfa, 0xdb, 0x80, 0xff, 0x6f, 0x24, 0x4c, 0x36, 0xa5, 0xf3,
0xa8, 0x05, 0x8b, 0x91, 0x17, 0xe3, 0x90, 0xb7, 0x52, 0x6c, 0xaa, 0x78, 0xac, 0x21, 0xa6, 0xeb,
0x5f, 0x67, 0xb5, 0x07, 0xa9, 0x37, 0x0a, 0x8d, 0x70, 0x98, 0xa8, 0x33, 0xa7, 0x43, 0x57, 0x7d,
0xd2, 0xc1, 0x8c, 0xdb, 0x4d, 0xf9, 0xcf, 0x5d, 0x50, 0xc6, 0x36, 0xae, 0x64, 0xda, 0xdc, 0x24,
0x4c, 0xfb, 0x2d, 0x2c, 0x0f, 0x46, 0xa7, 0xc1, 0xf8, 0x04, 0xca, 0x17, 0xef, 0xa7, 0xfe, 0xe0,
0x1a, 0x4f, 0xf9, 0x69, 0x05, 0xeb, 0x07, 0x58, 0xfc, 0x3a, 0xf2, 0xbd, 0xa9, 0xf9, 0x11, 0x35,
0x60, 0x2e, 0xc6, 0x8c, 0xf6, 0xe2, 0x36, 0x66, 0x12, 0xab, 0x51, 0x41, 0x5d, 0x88, 0x35, 0x7e,
0x2d, 0x43, 0x41, 0x4e, 0x60, 0x74, 0x04, 0x45, 0xf5, 0x94, 0x40, 0x8e, 0x3d, 0xee, 0x79, 0x6b,
0x0f, 0x3d, 0xdd, 0xcc, 0x0f, 0x26, 0x57, 0xd0, 0x98, 0xed, 0x40, 0x41, 0xbe, 0x2d, 0x90, 0x3d,
0x5e, 0x75, 0xf0, 0x01, 0x62, 0x2e, 0x0f, 0x05, 0xb4, 0x29, 0x1e, 0xd7, 0xa8, 0x03, 0x45, 0x45,
0xaf, 0x59, 0xde, 0x0f, 0x3d, 0x45, 0xcc, 0xf7, 0x27, 0x51, 0x48, 0x3c, 0x7f, 0x01, 0xf3, 0x97,
0x78, 0x1c, 0x35, 0x26, 0x51, 0xbf, 0xcc, 0x05, 0xd7, 0xbc, 0x72, 0x1f, 0x72, 0x5b, 0x98, 0xa3,
0x0c, 0xa5, 0xcb, 0xfc, 0x6f, 0xae, 0x4e, 0x28, 0xad, 0xef, 0xe8, 0x40, 0x5e, 0x74, 0x79, 0x56,
0x3e, 0x06, 0xc9, 0xdd, 0x74, 0x26, 0x96, 0xd7, 0x17, 0x6d, 0x43, 0x5e, 0xd0, 0x35, 0x7a, 0x6f,
0xbc, 0x62, 0x8a, 0xd2, 0x47, 0xe6, 0xfc, 0x08, 0xf2, 0x82, 0x91, 0x50, 0x46, 0xf9, 0x0d, 0x73,
0xb1, 0xb9, 0x76, 0x0d, 0x0d, 0xed, 0xf7, 0x1e, 0xcc, 0x25, 0xa4, 0x96, 0x85, 0xd2, 0x20, 0xfb,
0x8d, 0x8c, 0x60, 0x07, 0x6e, 0x69, 0x86, 0xca, 0xca, 0xee, 0x65, 0x22, 0x1b, 0x63, 0xb0, 0x20,
0x49, 0x28, 0xcb, 0xc3, 0x41, 0xa6, 0x1a, 0x69, 0xf0, 0x29, 0x14, 0x15, 0x1b, 0x65, 0xf5, 0xd5,
0x10, 0x67, 0x8d, 0x34, 0x49, 0xa0, 0xd4, 0x27, 0x14, 0xb4, 0x9a, 0x5d, 0x3e, 0x29, 0xfe, 0x32,
0xed, 0x49, 0xc5, 0x75, 0xd2, 0x5e, 0x02, 0xa4, 0x46, 0xfe, 0xc3, 0x0c, 0x88, 0xaf, 0x22, 0x2f,
0xf3, 0xc3, 0xeb, 0x29, 0xe9, 0x8b, 0x9f, 0x42, 0x51, 0xcd, 0xf4, 0x2c, 0xd8, 0x86, 0x26, 0xff,
0x28, 0xd8, 0xd6, 0xbf, 0x39, 0x7d, 0x5d, 0x9d, 0xf9, 0xf3, 0x75, 0x75, 0xe6, 0xc7, 0xf3, 0xaa,
0x71, 0x7a, 0x5e, 0x35, 0x7e, 0x3f, 0xaf, 0x1a, 0xff, 0x9e, 0x57, 0x8d, 0xe7, 0x8f, 0xdf, 0xec,
0x17, 0x8d, 0x47, 0x72, 0xb1, 0x5f, 0x94, 0xf7, 0x3c, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x7e,
0x07, 0x52, 0x7c, 0x18, 0x11, 0x00, 0x00,
// 1200 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4d, 0x6f, 0x1b, 0xc5,
0x1b, 0xef, 0xfa, 0x65, 0x63, 0x3f, 0xfe, 0xa7, 0x49, 0xf6, 0x1f, 0x82, 0xbb, 0x54, 0x76, 0xb4,
0x48, 0x60, 0x2a, 0xb2, 0x4b, 0x5c, 0xc4, 0x81, 0x56, 0x88, 0x24, 0x0e, 0x91, 0x05, 0x28, 0xe9,
0xa6, 0x20, 0xd4, 0x8b, 0xb5, 0xf1, 0x4e, 0x9c, 0x51, 0xec, 0x9d, 0xed, 0xce, 0x38, 0x4d, 0xe0,
0x00, 0x1f, 0xa1, 0x57, 0x2e, 0x5c, 0xf9, 0x2a, 0x39, 0x72, 0x44, 0x08, 0x05, 0xea, 0x6f, 0xc1,
0x0d, 0xcd, 0x8b, 0x37, 0x1b, 0x3b, 0x7e, 0x49, 0x9d, 0x72, 0x49, 0x66, 0x66, 0x9f, 0xdf, 0x33,
0xcf, 0xdb, 0xfc, 0x9e, 0x47, 0x86, 0xcd, 0x16, 0x66, 0x47, 0xdd, 0x03, 0xbb, 0x49, 0x3a, 0x4e,
0x93, 0x04, 0xcc, 0xc3, 0x01, 0x8a, 0xfc, 0xe4, 0xd2, 0x0b, 0xb1, 0x43, 0x51, 0x74, 0x82, 0x9b,
0x88, 0x3a, 0xcc, 0xa3, 0xc7, 0xd4, 0x39, 0x59, 0x97, 0x0b, 0x3b, 0x8c, 0x08, 0x23, 0xc6, 0xfd,
0x4b, 0x69, 0xbb, 0x2f, 0x69, 0x4b, 0x81, 0x93, 0x75, 0xf3, 0x9d, 0x16, 0x21, 0xad, 0x36, 0x72,
0x84, 0xec, 0x41, 0xf7, 0xd0, 0x41, 0x9d, 0x90, 0x9d, 0x49, 0xa8, 0x79, 0x6f, 0xf0, 0xa3, 0x17,
0xf4, 0x3f, 0x2d, 0xb7, 0x48, 0x8b, 0x88, 0xa5, 0xc3, 0x57, 0xea, 0xf4, 0x93, 0xa9, 0xec, 0x65,
0x67, 0x21, 0xa2, 0x4e, 0x87, 0x74, 0x03, 0xa6, 0x70, 0x8f, 0x6e, 0x80, 0xf3, 0x11, 0x6d, 0x46,
0x38, 0x64, 0x24, 0x52, 0xe0, 0x4f, 0x6f, 0x00, 0xe6, 0x7e, 0x8b, 0x3f, 0x0a, 0x5b, 0x1e, 0xf4,
0x90, 0xe1, 0x0e, 0xa2, 0xcc, 0xeb, 0x84, 0x52, 0xc0, 0x3a, 0x4f, 0xc1, 0xd2, 0x56, 0x84, 0x3c,
0x86, 0x9e, 0x7a, 0xf4, 0xd8, 0x45, 0xcf, 0xbb, 0x88, 0x32, 0xa3, 0x0a, 0xff, 0x8b, 0xd5, 0x37,
0xb0, 0x5f, 0xd4, 0x56, 0xb5, 0x4a, 0x7e, 0x73, 0xa1, 0x77, 0x51, 0x2e, 0x6c, 0xf5, 0xcf, 0xeb,
0x35, 0xb7, 0x10, 0x0b, 0xd5, 0x7d, 0xc3, 0x01, 0x3d, 0x22, 0x84, 0x1d, 0xd2, 0x62, 0x7a, 0x35,
0x5d, 0x29, 0x54, 0xdf, 0xb6, 0x13, 0x89, 0x11, 0xd6, 0xd9, 0x5f, 0xf3, 0x90, 0xb8, 0x4a, 0xcc,
0x58, 0x86, 0x2c, 0x65, 0x3e, 0x0e, 0x8a, 0x19, 0xae, 0xdd, 0x95, 0x1b, 0x63, 0x05, 0x74, 0xca,
0x7c, 0xd2, 0x65, 0xc5, 0xac, 0x38, 0x56, 0x3b, 0x75, 0x8e, 0xa2, 0xa8, 0xa8, 0xc7, 0xe7, 0x28,
0x8a, 0x0c, 0x13, 0x72, 0x0c, 0x45, 0x1d, 0x1c, 0x78, 0xed, 0xe2, 0xdc, 0xaa, 0x56, 0xc9, 0xb9,
0xf1, 0xde, 0x78, 0x0c, 0xd0, 0x3c, 0x42, 0xcd, 0xe3, 0x90, 0xe0, 0x80, 0x15, 0x73, 0xab, 0x5a,
0xa5, 0x50, 0xbd, 0x3f, 0x6c, 0x56, 0x2d, 0x8e, 0xb8, 0x9b, 0x90, 0x37, 0x6c, 0x98, 0x23, 0x21,
0xc3, 0x24, 0xa0, 0xc5, 0xbc, 0x80, 0x2e, 0xdb, 0x32, 0x9a, 0x76, 0x3f, 0x9a, 0xf6, 0x46, 0x70,
0xe6, 0xf6, 0x85, 0xac, 0x67, 0x60, 0x24, 0x23, 0x49, 0x43, 0x12, 0x50, 0xf4, 0x5a, 0xa1, 0x5c,
0x84, 0x74, 0x88, 0xfd, 0x62, 0x6a, 0x55, 0xab, 0xcc, 0xbb, 0x7c, 0x69, 0x7d, 0x01, 0x8b, 0xfb,
0xcc, 0x8b, 0xd8, 0x8c, 0x49, 0xb2, 0x76, 0x60, 0xa9, 0x86, 0xda, 0x68, 0xe6, 0x6c, 0x5b, 0xbf,
0x68, 0x70, 0x57, 0x6a, 0x8a, 0x3d, 0x5d, 0x81, 0x54, 0x0c, 0xd6, 0x7b, 0x17, 0xe5, 0x54, 0xbd,
0xe6, 0xa6, 0xf0, 0x35, 0xde, 0x18, 0x65, 0x28, 0xa0, 0x53, 0xcc, 0x1a, 0x94, 0x79, 0xac, 0xcb,
0xeb, 0x85, 0x7f, 0x01, 0x7e, 0xb4, 0x2f, 0x4e, 0x8c, 0x0d, 0xc8, 0xf3, 0x1d, 0xf2, 0x1b, 0x1e,
0x13, 0xe5, 0x51, 0xa8, 0x9a, 0x43, 0xc1, 0x7f, 0xda, 0x2f, 0xe5, 0xcd, 0xdc, 0xf9, 0x45, 0xf9,
0xce, 0xcb, 0xbf, 0xca, 0x9a, 0x9b, 0x93, 0xb0, 0x0d, 0x66, 0x11, 0x58, 0x96, 0xf6, 0xed, 0x45,
0xa4, 0x89, 0x28, 0x9d, 0xa5, 0xb4, 0xdf, 0x85, 0x39, 0x74, 0x8a, 0x9a, 0x0d, 0xe5, 0x45, 0x7e,
0x13, 0x7a, 0x17, 0x65, 0x7d, 0xfb, 0x14, 0x35, 0xeb, 0x35, 0x57, 0xe7, 0x9f, 0xea, 0xbe, 0x55,
0x83, 0xbb, 0x3b, 0x68, 0xe6, 0x04, 0x7d, 0x0e, 0x0b, 0xb1, 0x16, 0x15, 0xd7, 0x35, 0xc8, 0xf0,
0x17, 0x2d, 0xe0, 0x85, 0xea, 0xbd, 0x64, 0xfd, 0x9e, 0xac, 0xab, 0x12, 0x16, 0x00, 0x21, 0x66,
0x3d, 0x80, 0xc5, 0xaf, 0x30, 0x15, 0x2a, 0x62, 0xa7, 0x57, 0x40, 0x3f, 0xc4, 0x6d, 0x86, 0x22,
0x69, 0x83, 0xab, 0x76, 0x56, 0x0d, 0x96, 0x12, 0xb2, 0xea, 0x3e, 0x07, 0xb2, 0x82, 0x3e, 0x8b,
0x9a, 0x78, 0xc7, 0x63, 0x2e, 0x94, 0x72, 0xd6, 0x4b, 0x0d, 0x0a, 0x5f, 0xe2, 0x76, 0xfb, 0x4d,
0x87, 0x58, 0x70, 0x00, 0x6e, 0xf1, 0x97, 0x2e, 0x4b, 0x46, 0xed, 0x78, 0x85, 0x79, 0xed, 0xb6,
0x28, 0x94, 0x9c, 0xcb, 0x97, 0xd6, 0x3f, 0x1a, 0x18, 0x1c, 0x7c, 0x0b, 0xc9, 0x8f, 0x69, 0x2a,
0x75, 0x3d, 0x4d, 0xa5, 0x47, 0xd0, 0x54, 0x66, 0x24, 0x4d, 0x65, 0x07, 0x68, 0xaa, 0x02, 0x19,
0x1a, 0xa2, 0xa6, 0x20, 0xb6, 0x51, 0x2c, 0x23, 0x24, 0x92, 0x51, 0x9a, 0x1b, 0x59, 0x88, 0xef,
0xc3, 0xff, 0xaf, 0xb8, 0xae, 0xd2, 0xaa, 0x9e, 0xa1, 0x76, 0x49, 0x2a, 0x3f, 0x6b, 0xb0, 0xe8,
0x22, 0x8a, 0xbf, 0x47, 0x7b, 0xec, 0xec, 0x8d, 0x27, 0x6f, 0x19, 0xb2, 0x2f, 0xb0, 0xcf, 0x8e,
0x54, 0xee, 0xe4, 0x86, 0xc7, 0xeb, 0x08, 0xe1, 0xd6, 0x91, 0x7c, 0xe6, 0xf3, 0xae, 0xda, 0x59,
0x3f, 0xc2, 0xdd, 0xad, 0x36, 0xa1, 0xa8, 0xbe, 0xfb, 0x5f, 0x18, 0x26, 0x13, 0x9c, 0x16, 0x79,
0x91, 0x1b, 0xce, 0xb8, 0x7b, 0x5e, 0x97, 0xa2, 0x5b, 0x60, 0x5c, 0x17, 0xd1, 0x6e, 0x67, 0x66,
0x45, 0xdb, 0xb0, 0xc0, 0xdf, 0xea, 0x1e, 0xf6, 0x67, 0x29, 0x67, 0xeb, 0x3d, 0x49, 0x0f, 0x52,
0x8d, 0x2a, 0x0d, 0x03, 0x32, 0x21, 0xf6, 0xe5, 0x83, 0x9f, 0x77, 0xc5, 0xda, 0xfa, 0x53, 0x83,
0xb7, 0xb6, 0xe2, 0x66, 0x38, 0xeb, 0x70, 0xd0, 0x80, 0xa5, 0xd0, 0x8b, 0x50, 0xc0, 0x1a, 0x89,
0x86, 0x2c, 0x53, 0x52, 0xe5, 0xe4, 0xfd, 0xc7, 0x45, 0xf9, 0x41, 0x62, 0xcc, 0x21, 0x21, 0x0a,
0x62, 0x38, 0x75, 0x5a, 0x64, 0xcd, 0xc7, 0x2d, 0x44, 0x99, 0x5d, 0x13, 0xff, 0xdc, 0x45, 0xa9,
0x6c, 0xeb, 0xda, 0x66, 0x9d, 0x9e, 0xa6, 0x59, 0x7f, 0x07, 0x2b, 0x83, 0xde, 0xa9, 0x60, 0x7c,
0x06, 0x85, 0xcb, 0x11, 0xac, 0x4f, 0x82, 0xe3, 0xa7, 0x86, 0x24, 0xc0, 0xfa, 0x01, 0x96, 0xbe,
0x09, 0xfd, 0x5b, 0x18, 0xa8, 0xaa, 0x90, 0x8f, 0x10, 0x25, 0xdd, 0xa8, 0x89, 0xa8, 0x88, 0xd5,
0x28, 0xa7, 0x2e, 0xc5, 0xaa, 0xbf, 0x16, 0x20, 0x2b, 0xd8, 0xdc, 0x38, 0x06, 0x5d, 0x4e, 0x23,
0x86, 0x63, 0x8f, 0x9b, 0x90, 0xed, 0xa1, 0xe9, 0xcf, 0xfc, 0x68, 0x7a, 0x80, 0x8a, 0xd9, 0x2e,
0x64, 0xc5, 0x78, 0x62, 0xd8, 0xe3, 0xa1, 0x83, 0x33, 0x8c, 0xb9, 0x32, 0xe4, 0xd0, 0x36, 0x9f,
0xcf, 0x8d, 0x16, 0xe8, 0xb2, 0x7b, 0x4f, 0xb2, 0x7e, 0x68, 0x9a, 0x31, 0x3f, 0x9c, 0x06, 0x10,
0x5b, 0xfe, 0x1c, 0xe6, 0xaf, 0x8c, 0x09, 0x46, 0x75, 0x1a, 0xf8, 0xd5, 0xb6, 0x72, 0xc3, 0x2b,
0x0f, 0x20, 0xbd, 0x83, 0x98, 0x31, 0x01, 0x74, 0x75, 0x96, 0x30, 0xd7, 0xa6, 0x94, 0x56, 0x77,
0xb4, 0x20, 0xc3, 0x5f, 0xf9, 0xa4, 0x7c, 0x0c, 0x0e, 0x0a, 0xa6, 0x33, 0xb5, 0xbc, 0xba, 0xa8,
0x0e, 0x19, 0xde, 0xfa, 0x8d, 0x0f, 0xc6, 0x03, 0x13, 0xe3, 0xc1, 0xc8, 0x9c, 0x1f, 0x43, 0x86,
0x33, 0xb3, 0x31, 0xa1, 0xfc, 0x86, 0xdb, 0xba, 0xb9, 0x7e, 0x03, 0x84, 0xb2, 0x7b, 0x1f, 0xf2,
0x71, 0xeb, 0x9b, 0x14, 0xa5, 0xc1, 0x1e, 0x39, 0xd2, 0x83, 0x5d, 0x98, 0x53, 0x4d, 0x6b, 0x52,
0x76, 0xaf, 0xf6, 0xb6, 0x31, 0x0a, 0xb3, 0xa2, 0x09, 0x4d, 0xb2, 0x70, 0xb0, 0x53, 0x8d, 0x54,
0xf8, 0x04, 0x74, 0xd9, 0x8d, 0x26, 0xbd, 0xab, 0xa1, 0x9e, 0x35, 0x52, 0x25, 0x86, 0x5c, 0xbf,
0xa1, 0x18, 0x6b, 0x93, 0xcb, 0x27, 0xd1, 0xbf, 0x4c, 0x7b, 0x5a, 0x71, 0x95, 0xb4, 0x17, 0x00,
0x09, 0xca, 0x7f, 0x38, 0x21, 0xc4, 0xd7, 0x35, 0x2f, 0xf3, 0xe3, 0x9b, 0x81, 0xd4, 0xc5, 0x4f,
0x40, 0x97, 0x9c, 0x3e, 0x29, 0x6c, 0x43, 0xcc, 0x3f, 0x2a, 0x6c, 0x9b, 0xdf, 0x9e, 0xbf, 0x2a,
0xdd, 0xf9, 0xfd, 0x55, 0xe9, 0xce, 0x4f, 0xbd, 0x92, 0x76, 0xde, 0x2b, 0x69, 0xbf, 0xf5, 0x4a,
0xda, 0xdf, 0xbd, 0x92, 0xf6, 0xec, 0xf1, 0xeb, 0xfd, 0x28, 0xf2, 0x48, 0x2c, 0x0e, 0x74, 0x71,
0xcf, 0xc3, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8f, 0xc3, 0x21, 0xef, 0x5b, 0x11, 0x00, 0x00,
}

View File

@ -49,14 +49,7 @@ service Tasks {
}
message CreateTaskRequest {
// NOTE: reserve field 1 for task id.
// ContainerID specifies the container to use for creating this task.
//
// The spec from the provided container id will be used to create the
// task associated with this container. Only one task can be run at a time
// per container.
string container_id = 2;
string container_id = 1;
// RootFS provides the pre-chroot mounts to perform in the shim before
// executing the container task.
@ -77,17 +70,8 @@ message CreateTaskRequest {
}
message CreateTaskResponse {
// TODO(stevvooe): We no longer have an id for a task since they are bound
// to a single container. Although, we should represent each new task with
// an ID so one can differentiate between each instance of a container
// running.
//
// Hence, we are leaving this here and reserving the field number in case
// we need to move in this direction.
// string id = 1;
string container_id = 2;
uint32 pid = 3;
string container_id = 1;
uint32 pid = 2;
}
message StartTaskRequest {
@ -99,7 +83,7 @@ message DeleteTaskRequest {
}
message DeleteResponse {
string container_id = 1;
string id = 1;
uint32 pid = 2;
uint32 exit_status = 3;
google.protobuf.Timestamp exited_at = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false];
@ -107,7 +91,7 @@ message DeleteResponse {
message DeleteProcessRequest {
string container_id = 1;
uint32 pid = 2;
string exec_id = 2;
}
message GetTaskRequest {
@ -128,26 +112,23 @@ message ListTasksResponse {
message KillRequest {
string container_id = 1;
uint32 signal = 2;
oneof pid_or_all {
bool all = 3;
uint32 pid = 4;
}
string exec_id = 2;
uint32 signal = 3;
bool all = 4;
}
message ExecProcessRequest {
// ContainerID specifies the container in which to exec the process.
string container_id = 1;
string stdin = 2;
string stdout = 3;
string stderr = 4;
bool terminal = 5;
// Spec for starting a process in the target container.
//
// For runc, this is a process spec, for example.
google.protobuf.Any spec = 6;
// id of the exec process
string exec_id = 7;
}
message ExecProcessResponse {
@ -156,14 +137,14 @@ message ExecProcessResponse {
message ResizePtyRequest {
string container_id = 1;
uint32 pid = 2;
string exec_id = 2;
uint32 width = 3;
uint32 height = 4;
}
message CloseIORequest {
string container_id = 1;
uint32 pid = 2;
string exec_id = 2;
bool stdin = 3;
}

File diff suppressed because it is too large Load Diff

View File

@ -17,33 +17,12 @@ enum Status {
}
message Task {
string id = 1; // TODO(stevvooe): For now, this is just the container id.
string container_id = 2;
uint32 pid = 3;
Status status = 4;
string id = 1;
uint32 pid = 2;
Status status = 3;
google.protobuf.Any spec = 4;
string stdin = 5;
string stdout = 6;
string stderr = 7;
bool terminal = 8;
}
message Process {
uint32 pid = 1;
repeated string args = 2;
repeated string env = 3;
User user = 4;
string cwd = 5;
bool terminal = 6;
uint32 exit_status = 7;
Status status = 8;
google.protobuf.Any runtime_data = 9;
string stdin = 10;
string stdout = 11;
string stderr = 12;
}
message User {
uint32 uid = 1;
uint32 gid = 2;
repeated uint32 additional_gids = 3;
}

View File

@ -71,7 +71,10 @@ func main() {
return err
}
server := grpc.NewServer()
sv, err := shim.NewService(path, context.GlobalString("namespace"))
sv, err := shim.NewService(
path,
context.GlobalString("namespace"),
)
if err != nil {
return err
}

View File

@ -63,7 +63,7 @@ func getEventOutput(env *eventsapi.Envelope) (string, error) {
}
switch e := v.(type) {
case *eventsapi.ContainerCreate:
out = fmt.Sprintf("id=%s image=%s runtime=%s", e.ContainerID, e.Image, e.Runtime)
out = fmt.Sprintf("id=%s image=%s runtime=%s", e.ID, e.Image, e.Runtime)
case *eventsapi.TaskCreate:
out = "id=" + e.ContainerID
case *eventsapi.TaskStart:
@ -71,9 +71,9 @@ func getEventOutput(env *eventsapi.Envelope) (string, error) {
case *eventsapi.TaskDelete:
out = fmt.Sprintf("id=%s pid=%d status=%d", e.ContainerID, e.Pid, e.ExitStatus)
case *eventsapi.ContainerUpdate:
out = "id=" + e.ContainerID
out = "id=" + e.ID
case *eventsapi.ContainerDelete:
out = "id=" + e.ContainerID
out = "id=" + e.ID
case *eventsapi.SnapshotPrepare:
out = fmt.Sprintf("key=%s parent=%s", e.Key, e.Parent)
case *eventsapi.SnapshotCommit:
@ -95,11 +95,11 @@ func getEventOutput(env *eventsapi.Envelope) (string, error) {
for _, m := range e.RootFS {
mounts = append(mounts, fmt.Sprintf("type=%s:src=%s", m.Type, m.Source))
}
out = fmt.Sprintf("id=%s bundle=%s rootfs=%s checkpoint=%s", e.ID, e.Bundle, strings.Join(mounts, ","), e.Checkpoint)
out = fmt.Sprintf("id=%s bundle=%s rootfs=%s checkpoint=%s", e.ContainerID, e.Bundle, strings.Join(mounts, ","), e.Checkpoint)
case *eventsapi.RuntimeEvent:
out = fmt.Sprintf("id=%s type=%s pid=%d status=%d exited=%s", e.ID, e.Type, e.Pid, e.ExitStatus, e.ExitedAt)
out = fmt.Sprintf("id=%s container_id=%s type=%s pid=%d status=%d exited=%s", e.ID, e.ContainerID, e.Type, e.Pid, e.ExitStatus, e.ExitedAt)
case *eventsapi.RuntimeDelete:
out = fmt.Sprintf("id=%s runtime=%s status=%d exited=%s", e.ID, e.Runtime, e.ExitStatus, e.ExitedAt)
out = fmt.Sprintf("id=%s runtime=%s status=%d exited=%s", e.ContainerID, e.Runtime, e.ExitStatus, e.ExitedAt)
default:
out = env.Event.TypeUrl
}

View File

@ -22,6 +22,10 @@ var execCommand = cli.Command{
Name: "tty,t",
Usage: "allocate a TTY for the container",
},
cli.StringFlag{
Name: "exec-id",
Usage: "exec specific id for the process",
},
},
Action: func(context *cli.Context) error {
var (
@ -60,7 +64,7 @@ var execCommand = cli.Command{
if tty {
io = containerd.StdioTerminal
}
process, err := task.Exec(ctx, pspec, io)
process, err := task.Exec(ctx, context.String("exec-id"), pspec, io)
if err != nil {
return err
}

View File

@ -36,7 +36,7 @@ var psCommand = cli.Command{
if err != nil {
return err
}
processes, err := task.Processes(ctx)
processes, err := task.Pids(ctx)
if err != nil {
return err
}

View File

@ -129,7 +129,7 @@ var shimCreateCommand = cli.Command{
return err
}
if _, err := service.ResizePty(ctx, &shim.ResizePtyRequest{
Pid: r.Pid,
ID: id,
Width: uint32(size.Width),
Height: uint32(size.Height),
}); err != nil {
@ -180,7 +180,9 @@ var shimStateCommand = cli.Command{
if err != nil {
return err
}
r, err := service.State(gocontext.Background(), empty)
r, err := service.State(gocontext.Background(), &shim.StateRequest{
ID: context.Args().First(),
})
if err != nil {
return err
}
@ -221,10 +223,18 @@ var shimExecCommand = cli.Command{
),
Action: func(context *cli.Context) error {
service, err := getShimService(context)
ctx := gocontext.Background()
if err != nil {
return err
}
var (
id = context.Args().First()
ctx = gocontext.Background()
)
if id == "" {
return errors.New("exec id must be provided")
}
tty := context.Bool("tty")
wg, err := prepareStdio(context.String("stdin"), context.String("stdout"), context.String("stderr"), tty)
if err != nil {
@ -242,6 +252,7 @@ var shimExecCommand = cli.Command{
}
rq := &shim.ExecProcessRequest{
ID: id,
Spec: &protobuf.Any{
TypeUrl: url,
Value: spec,
@ -269,7 +280,7 @@ var shimExecCommand = cli.Command{
return err
}
if _, err := service.ResizePty(ctx, &shim.ResizePtyRequest{
Pid: r.Pid,
ID: id,
Width: uint32(size.Width),
Height: uint32(size.Height),
}); err != nil {

View File

@ -202,10 +202,9 @@ func (c *container) NewTask(ctx context.Context, ioCreate IOCreation, opts ...Ne
}
}
t := &task{
client: c.client,
io: i,
containerID: c.ID(),
pidSync: make(chan struct{}),
client: c.client,
io: i,
id: c.ID(),
}
if request.Checkpoint != nil {
@ -217,7 +216,6 @@ func (c *container) NewTask(ctx context.Context, ioCreate IOCreation, opts ...Ne
return nil, err
}
t.pid = response.Pid
close(t.pidSync)
}
return t, nil
}
@ -250,16 +248,11 @@ func (c *container) loadTask(ctx context.Context, ioAttach IOAttach) (Task, erro
return nil, err
}
}
// create and close a channel on load as we already have the pid
// and don't want to block calls to Wait(), etc...
ps := make(chan struct{})
close(ps)
t := &task{
client: c.client,
io: i,
containerID: response.Task.ContainerID,
pid: response.Task.Pid,
pidSync: ps,
client: c.client,
io: i,
id: response.Task.ID,
pid: response.Task.Pid,
}
return t, nil
}

View File

@ -263,8 +263,8 @@ func TestContainerExec(t *testing.T) {
"sh", "-c",
"exit 6",
}
process, err := task.Exec(ctx, processSpec, empty())
execID := t.Name() + "_exec"
process, err := task.Exec(ctx, execID, processSpec, empty())
if err != nil {
t.Error(err)
return
@ -354,7 +354,7 @@ func TestContainerProcesses(t *testing.T) {
if pid <= 0 {
t.Errorf("invalid task pid %d", pid)
}
processes, err := task.Processes(ctx)
processes, err := task.Pids(ctx)
if err != nil {
t.Error(err)
return

View File

@ -50,7 +50,7 @@ func (l *taskList) addWithNamespace(namespace string, t *Task) error {
l.mu.Lock()
defer l.mu.Unlock()
id := t.containerID
id := t.id
if _, ok := l.tasks[namespace]; !ok {
l.tasks[namespace] = make(map[string]*Task)
}
@ -70,6 +70,6 @@ func (l *taskList) delete(ctx context.Context, t *Task) {
}
tasks, ok := l.tasks[namespace]
if ok {
delete(tasks, t.containerID)
delete(tasks, t.id)
}
}

86
linux/process.go Normal file
View File

@ -0,0 +1,86 @@
// +build linux
package linux
import (
"context"
"errors"
"github.com/containerd/containerd/api/types/task"
shim "github.com/containerd/containerd/linux/shim/v1"
"github.com/containerd/containerd/runtime"
"google.golang.org/grpc"
)
type Process struct {
id string
t *Task
}
func (p *Process) ID() string {
return p.id
}
func (p *Process) Kill(ctx context.Context, signal uint32, _ bool) error {
_, err := p.t.shim.Kill(ctx, &shim.KillRequest{
Signal: signal,
ID: p.id,
})
if err != nil {
err = errors.New(grpc.ErrorDesc(err))
}
return err
}
func (p *Process) State(ctx context.Context) (runtime.State, error) {
// use the container status for the status of the process
response, err := p.t.shim.State(ctx, &shim.StateRequest{
ID: p.id,
})
if err != nil {
return runtime.State{}, errors.New(grpc.ErrorDesc(err))
}
var status runtime.Status
switch response.Status {
case task.StatusCreated:
status = runtime.CreatedStatus
case task.StatusRunning:
status = runtime.RunningStatus
case task.StatusStopped:
status = runtime.StoppedStatus
case task.StatusPaused:
status = runtime.PausedStatus
// TODO: containerd.DeletedStatus
}
return runtime.State{
Pid: response.Pid,
Status: status,
Stdin: response.Stdin,
Stdout: response.Stdout,
Stderr: response.Stderr,
Terminal: response.Terminal,
}, nil
}
func (p *Process) ResizePty(ctx context.Context, size runtime.ConsoleSize) error {
_, err := p.t.shim.ResizePty(ctx, &shim.ResizePtyRequest{
ID: p.id,
Width: size.Width,
Height: size.Height,
})
if err != nil {
err = errors.New(grpc.ErrorDesc(err))
}
return err
}
func (p *Process) CloseIO(ctx context.Context) error {
_, err := p.t.shim.CloseIO(ctx, &shim.CloseIORequest{
ID: p.id,
Stdin: true,
})
if err != nil {
err = errors.New(grpc.ErrorDesc(err))
}
return err
}

View File

@ -201,9 +201,9 @@ func (r *Runtime) Create(ctx context.Context, id string, opts runtime.CreateOpts
})
}
if err := r.emit(ctx, "/runtime/create", &eventsapi.RuntimeCreate{
ID: id,
Bundle: bundle.path,
RootFS: runtimeMounts,
ContainerID: id,
Bundle: bundle.path,
RootFS: runtimeMounts,
IO: &eventsapi.RuntimeIO{
Stdin: opts.IO.Stdin,
Stdout: opts.IO.Stdout,
@ -239,14 +239,14 @@ func (r *Runtime) Delete(ctx context.Context, c runtime.Task) (*runtime.Exit, er
r.tasks.delete(ctx, lc)
var (
bundle = loadBundle(filepath.Join(r.root, namespace, lc.containerID), namespace)
bundle = loadBundle(filepath.Join(r.root, namespace, lc.id), namespace)
i = c.Info()
)
if err := r.emit(ctx, "/runtime/delete", &eventsapi.RuntimeDelete{
ID: i.ID,
Runtime: i.Runtime,
ExitStatus: rsp.ExitStatus,
ExitedAt: rsp.ExitedAt,
ContainerID: i.ID,
Runtime: i.Runtime,
ExitStatus: rsp.ExitStatus,
ExitedAt: rsp.ExitedAt,
}); err != nil {
return nil, err
}
@ -324,9 +324,9 @@ func (r *Runtime) loadTasks(ctx context.Context, ns string) ([]*Task, error) {
continue
}
o = append(o, &Task{
containerID: id,
shim: s,
namespace: ns,
id: id,
shim: s,
namespace: ns,
})
}
return o, nil

View File

@ -26,7 +26,7 @@ import (
type execProcess struct {
sync.WaitGroup
id int
id string
console console.Console
io runc.IO
status int
@ -34,29 +34,27 @@ type execProcess struct {
pid int
closers []io.Closer
stdin io.Closer
stdio stdio
parent *initProcess
stdinPath string
stdoutPath string
stderrPath string
terminal bool
}
func newExecProcess(context context.Context, path string, r *shimapi.ExecProcessRequest, parent *initProcess, id int) (process, error) {
func newExecProcess(context context.Context, path string, r *shimapi.ExecProcessRequest, parent *initProcess, id string) (process, error) {
e := &execProcess{
id: id,
parent: parent,
stdinPath: r.Stdin,
stdoutPath: r.Stdout,
stderrPath: r.Stderr,
terminal: r.Terminal,
id: id,
parent: parent,
stdio: stdio{
stdin: r.Stdin,
stdout: r.Stdout,
stderr: r.Stderr,
terminal: r.Terminal,
},
}
var (
err error
socket *runc.Socket
io runc.IO
pidfile = filepath.Join(path, fmt.Sprintf("%d.pid", id))
pidfile = filepath.Join(path, fmt.Sprintf("%s.pid", id))
)
if r.Terminal {
if socket, err = runc.NewConsoleSocket(filepath.Join(path, "pty.sock")); err != nil {
@ -120,6 +118,10 @@ func newExecProcess(context context.Context, path string, r *shimapi.ExecProcess
return e, nil
}
func (e *execProcess) ID() string {
return e.id
}
func (e *execProcess) Pid() int {
return e.pid
}
@ -155,7 +157,7 @@ func (e *execProcess) Resize(ws console.WinSize) error {
return e.console.Resize(ws)
}
func (e *execProcess) Signal(sig int) error {
func (e *execProcess) Kill(ctx context.Context, sig uint32, _ bool) error {
if err := unix.Kill(e.pid, syscall.Signal(sig)); err != nil {
return checkKillError(err)
}
@ -165,3 +167,7 @@ func (e *execProcess) Signal(sig int) error {
func (e *execProcess) Stdin() io.Closer {
return e.stdin
}
func (e *execProcess) Stdio() stdio {
return e.stdio
}

View File

@ -48,11 +48,7 @@ type initProcess struct {
pid int
closers []io.Closer
stdin io.Closer
stdinPath string
stdoutPath string
stderrPath string
terminal bool
stdio stdio
}
func newInitProcess(context context.Context, path, namespace string, r *shimapi.CreateTaskRequest) (*initProcess, error) {
@ -82,13 +78,15 @@ func newInitProcess(context context.Context, path, namespace string, r *shimapi.
Root: filepath.Join(RuncRoot, namespace),
}
p := &initProcess{
id: r.ID,
bundle: r.Bundle,
runtime: runtime,
stdinPath: r.Stdin,
stdoutPath: r.Stdout,
stderrPath: r.Stderr,
terminal: r.Terminal,
id: r.ID,
bundle: r.Bundle,
runtime: runtime,
stdio: stdio{
stdin: r.Stdin,
stdout: r.Stdout,
stderr: r.Stderr,
terminal: r.Terminal,
},
}
var (
err error
@ -171,6 +169,10 @@ func newInitProcess(context context.Context, path, namespace string, r *shimapi.
return p, nil
}
func (p *initProcess) ID() string {
return p.id
}
func (p *initProcess) Pid() int {
return p.pid
}
@ -257,10 +259,6 @@ func (p *initProcess) killAll(context context.Context) error {
return p.runtimeError(err, "OCI runtime killall failed")
}
func (p *initProcess) Signal(sig int) error {
return checkKillError(unix.Kill(p.pid, syscall.Signal(sig)))
}
func (p *initProcess) Stdin() io.Closer {
return p.stdin
}
@ -306,6 +304,10 @@ func (p *initProcess) Update(context context.Context, r *shimapi.UpdateTaskReque
return p.runtime.Update(context, p.id, &resources)
}
func (p *initProcess) Stdio() stdio {
return p.stdio
}
// TODO(mlaventure): move to runc package?
func getLastRuntimeError(r *runc.Runc) (string, error) {
if r.Log == "" {

View File

@ -60,7 +60,7 @@ func (c *local) Stream(ctx context.Context, in *shimapi.StreamEventsRequest, opt
}, nil
}
func (c *local) State(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*shimapi.StateResponse, error) {
func (c *local) State(ctx context.Context, in *shimapi.StateRequest, opts ...grpc.CallOption) (*shimapi.StateResponse, error) {
return c.s.State(ctx, in)
}

View File

@ -10,7 +10,16 @@ import (
"github.com/containerd/console"
)
type stdio struct {
stdin string
stdout string
stderr string
terminal bool
}
type process interface {
// ID returns the id for the process
ID() string
// Pid returns the pid for the process
Pid() int
// Resize resizes the process console
@ -23,8 +32,10 @@ type process interface {
ExitedAt() time.Time
// Delete deletes the process and its resourcess
Delete(context.Context) error
// Signal directly signals the process
Signal(int) error
// Stdin returns the process STDIN
Stdin() io.Closer
// Kill kills the process
Kill(context.Context, uint32, bool) error
// Stdio returns io information for the container
Stdio() stdio
}

View File

@ -6,7 +6,9 @@ import (
"fmt"
"os"
"sync"
"syscall"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"github.com/containerd/console"
events "github.com/containerd/containerd/api/services/events/v1"
@ -16,7 +18,6 @@ import (
google_protobuf "github.com/golang/protobuf/ptypes/empty"
"github.com/pkg/errors"
"golang.org/x/net/context"
"golang.org/x/sys/unix"
)
const (
@ -34,7 +35,7 @@ func NewService(path, namespace string) (*Service, error) {
}
return &Service{
path: path,
processes: make(map[int]process),
processes: make(map[string]process),
events: make(chan *events.RuntimeEvent, 4096),
namespace: namespace,
}, nil
@ -46,34 +47,38 @@ type Service struct {
id string
bundle string
mu sync.Mutex
processes map[int]process
processes map[string]process
events chan *events.RuntimeEvent
eventsMu sync.Mutex
deferredEvent *events.RuntimeEvent
execID int
namespace string
}
func (s *Service) Create(ctx context.Context, r *shimapi.CreateTaskRequest) (*shimapi.CreateTaskResponse, error) {
if r.ID == "" {
return nil, grpc.Errorf(codes.InvalidArgument, "task id cannot be empty")
}
process, err := newInitProcess(ctx, s.path, s.namespace, r)
if err != nil {
return nil, err
}
s.mu.Lock()
// save the main task id and bundle to the shim for additional requests
s.id = r.ID
s.bundle = r.Bundle
s.initProcess = process
pid := process.Pid()
s.processes[pid] = process
s.processes[r.ID] = process
s.mu.Unlock()
cmd := &reaper.Cmd{
ExitCh: make(chan int, 1),
}
reaper.Default.Register(pid, cmd)
s.events <- &events.RuntimeEvent{
Type: events.RuntimeEvent_CREATE,
ID: r.ID,
Pid: uint32(pid),
Type: events.RuntimeEvent_CREATE,
ID: r.ID,
ContainerID: s.id,
Pid: uint32(pid),
}
go s.waitExit(process, pid, cmd)
return &shimapi.CreateTaskResponse{
@ -89,9 +94,10 @@ func (s *Service) Start(ctx context.Context, r *google_protobuf.Empty) (*google_
return nil, err
}
s.events <- &events.RuntimeEvent{
Type: events.RuntimeEvent_START,
ID: s.id,
Pid: uint32(s.initProcess.Pid()),
Type: events.RuntimeEvent_START,
ID: s.id,
ContainerID: s.id,
Pid: uint32(s.initProcess.Pid()),
}
return empty, nil
}
@ -104,7 +110,7 @@ func (s *Service) Delete(ctx context.Context, r *google_protobuf.Empty) (*shimap
// TODO (@crosbymichael): how to handle errors here
p.Delete(ctx)
s.mu.Lock()
delete(s.processes, p.Pid())
delete(s.processes, p.ID())
s.mu.Unlock()
return &shimapi.DeleteResponse{
ExitStatus: uint32(p.Status()),
@ -117,19 +123,19 @@ func (s *Service) DeleteProcess(ctx context.Context, r *shimapi.DeleteProcessReq
if s.initProcess == nil {
return nil, errors.New(ErrContainerNotCreated)
}
if int(r.Pid) == s.initProcess.pid {
return nil, fmt.Errorf("cannot delete init process with DeleteProcess")
if r.ID == s.initProcess.id {
return nil, grpc.Errorf(codes.InvalidArgument, "cannot delete init process with DeleteProcess")
}
s.mu.Lock()
p, ok := s.processes[int(r.Pid)]
p, ok := s.processes[r.ID]
s.mu.Unlock()
if !ok {
return nil, fmt.Errorf("process %d not found", r.Pid)
return nil, fmt.Errorf("process %s not found", r.ID)
}
// TODO (@crosbymichael): how to handle errors here
p.Delete(ctx)
s.mu.Lock()
delete(s.processes, p.Pid())
delete(s.processes, p.ID())
s.mu.Unlock()
return &shimapi.DeleteResponse{
ExitStatus: uint32(p.Status()),
@ -144,9 +150,8 @@ func (s *Service) Exec(ctx context.Context, r *shimapi.ExecProcessRequest) (*shi
}
s.mu.Lock()
defer s.mu.Unlock()
s.execID++
process, err := newExecProcess(ctx, s.path, r, s.initProcess, s.execID)
process, err := newExecProcess(ctx, s.path, r, s.initProcess, r.ID)
if err != nil {
return nil, err
}
@ -155,12 +160,13 @@ func (s *Service) Exec(ctx context.Context, r *shimapi.ExecProcessRequest) (*shi
ExitCh: make(chan int, 1),
}
reaper.Default.Register(pid, cmd)
s.processes[pid] = process
s.processes[r.ID] = process
s.events <- &events.RuntimeEvent{
Type: events.RuntimeEvent_EXEC_ADDED,
ID: s.id,
Pid: uint32(pid),
Type: events.RuntimeEvent_EXEC_ADDED,
ID: r.ID,
ContainerID: s.id,
Pid: uint32(pid),
}
go s.waitExit(process, pid, cmd)
return &shimapi.ExecProcessResponse{
@ -169,18 +175,18 @@ func (s *Service) Exec(ctx context.Context, r *shimapi.ExecProcessRequest) (*shi
}
func (s *Service) ResizePty(ctx context.Context, r *shimapi.ResizePtyRequest) (*google_protobuf.Empty, error) {
if r.Pid == 0 {
return nil, errors.Errorf("pid not provided in request")
if r.ID == "" {
return nil, grpc.Errorf(codes.InvalidArgument, "id not provided")
}
ws := console.WinSize{
Width: uint16(r.Width),
Height: uint16(r.Height),
}
s.mu.Lock()
p, ok := s.processes[int(r.Pid)]
p, ok := s.processes[r.ID]
s.mu.Unlock()
if !ok {
return nil, errors.Errorf("process does not exist %d", r.Pid)
return nil, errors.Errorf("process does not exist %s", r.ID)
}
if err := p.Resize(ws); err != nil {
return nil, err
@ -212,10 +218,14 @@ func (s *Service) Stream(r *shimapi.StreamEventsRequest, stream shimapi.Shim_Str
}
}
func (s *Service) State(ctx context.Context, r *google_protobuf.Empty) (*shimapi.StateResponse, error) {
func (s *Service) State(ctx context.Context, r *shimapi.StateRequest) (*shimapi.StateResponse, error) {
if s.initProcess == nil {
return nil, errors.New(ErrContainerNotCreated)
}
p, ok := s.processes[r.ID]
if !ok {
return nil, grpc.Errorf(codes.NotFound, "process id %s not found", r.ID)
}
st, err := s.initProcess.ContainerStatus(ctx)
if err != nil {
return nil, err
@ -231,38 +241,17 @@ func (s *Service) State(ctx context.Context, r *google_protobuf.Empty) (*shimapi
case "paused":
status = task.StatusPaused
}
o := &shimapi.StateResponse{
ID: s.id,
Bundle: s.bundle,
Pid: uint32(s.initProcess.Pid()),
Status: status,
Processes: []*task.Process{},
Stdin: s.initProcess.stdinPath,
Stdout: s.initProcess.stdoutPath,
Stderr: s.initProcess.stderrPath,
}
s.mu.Lock()
defer s.mu.Unlock()
for _, p := range s.processes {
status := task.StatusRunning
if err := unix.Kill(p.Pid(), 0); err != nil {
if err != syscall.ESRCH {
return nil, err
}
status = task.StatusStopped
}
pp := &task.Process{
Pid: uint32(p.Pid()),
Status: status,
}
if ep, ok := p.(*execProcess); ok {
pp.Stdin = ep.stdinPath
pp.Stdout = ep.stdoutPath
pp.Stderr = ep.stderrPath
}
o.Processes = append(o.Processes, pp)
}
return o, nil
sio := p.Stdio()
return &shimapi.StateResponse{
ID: p.ID(),
Bundle: s.bundle,
Pid: uint32(p.Pid()),
Status: status,
Stdin: sio.stdin,
Stdout: sio.stdout,
Stderr: sio.stderr,
Terminal: sio.terminal,
}, nil
}
func (s *Service) Pause(ctx context.Context, r *google_protobuf.Empty) (*google_protobuf.Empty, error) {
@ -289,35 +278,19 @@ func (s *Service) Kill(ctx context.Context, r *shimapi.KillRequest) (*google_pro
if s.initProcess == nil {
return nil, errors.New(ErrContainerNotCreated)
}
if r.Pid == 0 {
if r.ID == "" {
if err := s.initProcess.Kill(ctx, r.Signal, r.All); err != nil {
return nil, err
}
return empty, nil
}
if int(r.Pid) == s.initProcess.pid {
if err := s.initProcess.Kill(ctx, r.Signal, r.All); err != nil {
return nil, err
}
return empty, nil
p, ok := s.processes[r.ID]
if !ok {
return nil, grpc.Errorf(codes.NotFound, "process id %s not found", r.ID)
}
pids, err := s.getContainerPids(ctx, s.initProcess.id)
if err != nil {
if err := p.Kill(ctx, r.Signal, r.All); err != nil {
return nil, err
}
valid := false
for _, p := range pids {
if r.Pid == p {
valid = true
break
}
}
if !valid {
return nil, errors.Errorf("process %d does not exist in container", r.Pid)
}
if err := unix.Kill(int(r.Pid), syscall.Signal(r.Signal)); err != nil {
return nil, checkKillError(err)
}
return empty, nil
}
@ -332,9 +305,9 @@ func (s *Service) ListPids(ctx context.Context, r *shimapi.ListPidsRequest) (*sh
}
func (s *Service) CloseIO(ctx context.Context, r *shimapi.CloseIORequest) (*google_protobuf.Empty, error) {
p, ok := s.processes[int(r.Pid)]
p, ok := s.processes[r.ID]
if !ok {
return nil, fmt.Errorf("process does not exist %d", r.Pid)
return nil, grpc.Errorf(codes.NotFound, "process does not exist %s", r.ID)
}
if err := p.Stdin().Close(); err != nil {
return nil, err
@ -374,11 +347,12 @@ func (s *Service) waitExit(p process, pid int, cmd *reaper.Cmd) {
reaper.Default.Delete(pid)
s.events <- &events.RuntimeEvent{
Type: events.RuntimeEvent_EXIT,
ID: s.id,
Pid: uint32(pid),
ExitStatus: uint32(status),
ExitedAt: p.ExitedAt(),
Type: events.RuntimeEvent_EXIT,
ID: p.ID(),
ContainerID: s.id,
Pid: uint32(pid),
ExitStatus: uint32(status),
ExitedAt: p.ExitedAt(),
}
}
@ -387,11 +361,9 @@ func (s *Service) getContainerPids(ctx context.Context, id string) ([]uint32, er
if err != nil {
return nil, err
}
pids := make([]uint32, 0, len(p))
for _, pid := range p {
pids = append(pids, uint32(pid))
}
return pids, nil
}

File diff suppressed because it is too large Load Diff

View File

@ -18,7 +18,7 @@ option go_package = "github.com/containerd/containerd/linux/shim/v1;shim";
// for the container processes.
service Shim {
// State returns shim and task state information.
rpc State(google.protobuf.Empty) returns (StateResponse);
rpc State(StateRequest) returns (StateResponse);
rpc Create(CreateTaskRequest) returns (CreateTaskResponse);
@ -77,15 +77,16 @@ message DeleteResponse {
}
message DeleteProcessRequest {
uint32 pid = 1;
string id = 1;
}
message ExecProcessRequest {
bool terminal = 1;
string stdin = 2;
string stdout = 3;
string stderr = 4;
google.protobuf.Any spec = 5;
string id = 1;
bool terminal = 2;
string stdin = 3;
string stdout = 4;
string stderr = 5;
google.protobuf.Any spec = 6;
}
message ExecProcessResponse {
@ -93,31 +94,34 @@ message ExecProcessResponse {
}
message ResizePtyRequest {
uint32 pid = 1;
string id = 1;
uint32 width = 2;
uint32 height = 3;
}
message StateRequest {
string id = 1;
}
message StateResponse {
string id = 1;
string bundle = 2;
uint32 pid = 3;
containerd.v1.types.Status status = 4;
repeated containerd.v1.types.Process processes = 5;
string stdin = 6;
string stdout = 7;
string stderr = 8;
bool terminal = 9;
string stdin = 5;
string stdout = 6;
string stderr = 7;
bool terminal = 8;
}
message KillRequest {
uint32 signal = 1;
bool all = 2;
uint32 pid = 3;
string id = 1;
uint32 signal = 2;
bool all = 3;
}
message CloseIORequest {
uint32 pid = 1;
string id = 1;
bool stdin = 2;
}

View File

@ -16,25 +16,28 @@ import (
)
type Task struct {
containerID string
shim *client.Client
namespace string
id string
shim *client.Client
namespace string
}
func newTask(id, namespace string, shim *client.Client) *Task {
return &Task{
containerID: id,
shim: shim,
namespace: namespace,
id: id,
shim: shim,
namespace: namespace,
}
}
func (t *Task) ID() string {
return t.id
}
func (t *Task) Info() runtime.TaskInfo {
return runtime.TaskInfo{
ID: t.containerID,
ContainerID: t.containerID,
Runtime: pluginID,
Namespace: t.namespace,
ID: t.id,
Runtime: pluginID,
Namespace: t.namespace,
}
}
@ -47,7 +50,9 @@ func (t *Task) Start(ctx context.Context) error {
}
func (t *Task) State(ctx context.Context) (runtime.State, error) {
response, err := t.shim.State(ctx, empty)
response, err := t.shim.State(ctx, &shim.StateRequest{
ID: t.id,
})
if err != nil {
return runtime.State{}, errors.New(grpc.ErrorDesc(err))
}
@ -89,10 +94,10 @@ func (t *Task) Resume(ctx context.Context) error {
return err
}
func (t *Task) Kill(ctx context.Context, signal uint32, pid uint32, all bool) error {
func (t *Task) Kill(ctx context.Context, signal uint32, all bool) error {
_, err := t.shim.Kill(ctx, &shim.KillRequest{
ID: t.id,
Signal: signal,
Pid: pid,
All: all,
})
if err != nil {
@ -101,28 +106,28 @@ func (t *Task) Kill(ctx context.Context, signal uint32, pid uint32, all bool) er
return err
}
func (t *Task) Exec(ctx context.Context, opts runtime.ExecOpts) (runtime.Process, error) {
func (t *Task) Exec(ctx context.Context, id string, opts runtime.ExecOpts) (runtime.Process, error) {
request := &shim.ExecProcessRequest{
ID: id,
Stdin: opts.IO.Stdin,
Stdout: opts.IO.Stdout,
Stderr: opts.IO.Stderr,
Terminal: opts.IO.Terminal,
Spec: opts.Spec,
}
resp, err := t.shim.Exec(ctx, request)
if err != nil {
if _, err := t.shim.Exec(ctx, request); err != nil {
return nil, errors.New(grpc.ErrorDesc(err))
}
return &Process{
pid: int(resp.Pid),
t: t,
id: id,
t: t,
}, nil
}
func (t *Task) Pids(ctx context.Context) ([]uint32, error) {
resp, err := t.shim.ListPids(ctx, &shim.ListPidsRequest{
ID: t.containerID,
// TODO: (@crosbymichael) this id can probably be removed
ID: t.id,
})
if err != nil {
return nil, errors.New(grpc.ErrorDesc(err))
@ -130,9 +135,9 @@ func (t *Task) Pids(ctx context.Context) ([]uint32, error) {
return resp.Pids, nil
}
func (t *Task) ResizePty(ctx context.Context, pid uint32, size runtime.ConsoleSize) error {
func (t *Task) ResizePty(ctx context.Context, size runtime.ConsoleSize) error {
_, err := t.shim.ResizePty(ctx, &shim.ResizePtyRequest{
Pid: pid,
ID: t.id,
Width: size.Width,
Height: size.Height,
})
@ -142,9 +147,9 @@ func (t *Task) ResizePty(ctx context.Context, pid uint32, size runtime.ConsoleSi
return err
}
func (t *Task) CloseIO(ctx context.Context, pid uint32) error {
func (t *Task) CloseIO(ctx context.Context) error {
_, err := t.shim.CloseIO(ctx, &shim.CloseIORequest{
Pid: pid,
ID: t.id,
Stdin: true,
})
if err != nil {
@ -164,9 +169,9 @@ func (t *Task) Checkpoint(ctx context.Context, path string, options *types.Any)
return nil
}
func (t *Task) DeleteProcess(ctx context.Context, pid uint32) (*runtime.Exit, error) {
func (t *Task) DeleteProcess(ctx context.Context, id string) (*runtime.Exit, error) {
r, err := t.shim.DeleteProcess(ctx, &shim.DeleteProcessRequest{
Pid: pid,
ID: id,
})
if err != nil {
return nil, errors.New(grpc.ErrorDesc(err))
@ -174,7 +179,7 @@ func (t *Task) DeleteProcess(ctx context.Context, pid uint32) (*runtime.Exit, er
return &runtime.Exit{
Status: r.ExitStatus,
Timestamp: r.ExitedAt,
Pid: pid,
Pid: r.Pid,
}, nil
}
@ -185,28 +190,10 @@ func (t *Task) Update(ctx context.Context, resources *types.Any) error {
return err
}
type Process struct {
pid int
t *Task
}
func (p *Process) Kill(ctx context.Context, signal uint32, _ bool) error {
_, err := p.t.shim.Kill(ctx, &shim.KillRequest{
Signal: signal,
Pid: uint32(p.pid),
})
if err != nil {
err = errors.New(grpc.ErrorDesc(err))
}
return err
}
func (p *Process) State(ctx context.Context) (runtime.State, error) {
// use the container status for the status of the process
state, err := p.t.State(ctx)
if err != nil {
return state, err
}
state.Pid = uint32(p.pid)
return state, nil
func (t *Task) Process(ctx context.Context, id string) (runtime.Process, error) {
// TODO: verify process exists for container
return &Process{
id: id,
t: t,
}, nil
}

View File

@ -73,8 +73,9 @@ func (m *cgroupsMonitor) Events(events chan<- *events.RuntimeEvent) {
func (m *cgroupsMonitor) trigger(id string, cg cgroups.Cgroup) {
m.events <- &events.RuntimeEvent{
Timestamp: time.Now(),
Type: events.RuntimeEvent_OOM,
ID: id,
Timestamp: time.Now(),
Type: events.RuntimeEvent_OOM,
ID: id,
ContainerID: id,
}
}

View File

@ -11,20 +11,17 @@ import (
)
type process struct {
id string
task *task
// this is a hack to make a blocking Wait work
// exec does not have a create/start split so if a quick exiting process like `exit 1`
// run, the wait does not have enough time to get the pid catch the event. So we need
// to lock this on process struct create and only unlock it after the pid is set
// this allow the wait to be called before calling process start and not race with the exit event
pidSync chan struct{}
io *IO
pid uint32
io *IO
spec *specs.Process
}
func (p *process) ID() string {
return p.id
}
// Pid returns the pid of the process
// The pid is not set until start is called and returns
func (p *process) Pid() uint32 {
@ -38,7 +35,8 @@ func (p *process) Start(ctx context.Context) error {
return err
}
request := &tasks.ExecProcessRequest{
ContainerID: p.task.containerID,
ContainerID: p.task.id,
ExecID: p.id,
Terminal: p.io.Terminal,
Stdin: p.io.Stdin,
Stdout: p.io.Stdout,
@ -50,17 +48,14 @@ func (p *process) Start(ctx context.Context) error {
return err
}
p.pid = response.Pid
close(p.pidSync)
return nil
}
func (p *process) Kill(ctx context.Context, s syscall.Signal) error {
_, err := p.task.client.TaskService().Kill(ctx, &tasks.KillRequest{
Signal: uint32(s),
ContainerID: p.task.containerID,
PidOrAll: &tasks.KillRequest_Pid{
Pid: p.pid,
},
ContainerID: p.task.id,
ExecID: p.id,
})
return err
}
@ -70,7 +65,6 @@ func (p *process) Wait(ctx context.Context) (uint32, error) {
if err != nil {
return UnknownExitStatus, err
}
<-p.pidSync
evloop:
for {
evt, err := eventstream.Recv()
@ -86,7 +80,7 @@ evloop:
if e.Type != eventsapi.RuntimeEvent_EXIT {
continue evloop
}
if e.ID == p.task.containerID && e.Pid == p.pid {
if e.ID == p.id && e.ContainerID == p.task.id {
return e.ExitStatus, nil
}
}
@ -95,8 +89,8 @@ evloop:
func (p *process) CloseIO(ctx context.Context, opts ...IOCloserOpts) error {
r := &tasks.CloseIORequest{
ContainerID: p.task.containerID,
Pid: p.pid,
ContainerID: p.task.id,
ExecID: p.id,
}
for _, o := range opts {
o(r)
@ -111,10 +105,10 @@ func (p *process) IO() *IO {
func (p *process) Resize(ctx context.Context, w, h uint32) error {
_, err := p.task.client.TaskService().ResizePty(ctx, &tasks.ResizePtyRequest{
ContainerID: p.task.containerID,
ContainerID: p.task.id,
Width: w,
Height: h,
Pid: p.pid,
ExecID: p.id,
})
return err
}
@ -122,8 +116,8 @@ func (p *process) Resize(ctx context.Context, w, h uint32) error {
func (p *process) Delete(ctx context.Context) (uint32, error) {
cerr := p.io.Close()
r, err := p.task.client.TaskService().DeleteProcess(ctx, &tasks.DeleteProcessRequest{
ContainerID: p.task.containerID,
Pid: p.pid,
ContainerID: p.task.id,
ExecID: p.id,
})
if err != nil {
return UnknownExitStatus, err

View File

@ -7,39 +7,47 @@ import (
)
type TaskInfo struct {
ID string
ContainerID string
Runtime string
Namespace string
ID string
Runtime string
Spec []byte
Namespace string
}
type Process interface {
ID() string
// State returns the process state
State(context.Context) (State, error)
// Kill signals a container
Kill(context.Context, uint32, bool) error
// Pty resizes the processes pty/console
ResizePty(context.Context, ConsoleSize) error
// CloseStdin closes the processes stdin
CloseIO(context.Context) error
}
type Task interface {
Process
// Information of the container
Info() TaskInfo
// Start the container's user defined process
Start(context.Context) error
// State returns the container's state
State(context.Context) (State, error)
// Pause pauses the container process
Pause(context.Context) error
// Resume unpauses the container process
Resume(context.Context) error
// Kill signals a container
Kill(context.Context, uint32, uint32, bool) error
// Exec adds a process into the container
Exec(context.Context, ExecOpts) (Process, error)
// Pids returns all pids for the task
Exec(context.Context, string, ExecOpts) (Process, error)
// Pids returns all pids
Pids(context.Context) ([]uint32, error)
// Pty resizes the processes pty/console
ResizePty(context.Context, uint32, ConsoleSize) error
// CloseStdin closes the processes stdin
CloseIO(context.Context, uint32) error
// Checkpoint checkpoints a container to an image with live system data
Checkpoint(context.Context, string, *types.Any) error
// DeleteProcess deletes a specific exec process via the pid
DeleteProcess(context.Context, uint32) (*Exit, error)
DeleteProcess(context.Context, string) (*Exit, error)
// Update sets the provided resources to a running task
Update(context.Context, *types.Any) error
// Process returns a process within the task for the provided id
Process(context.Context, string) (Process, error)
}
type ExecOpts struct {
@ -47,13 +55,6 @@ type ExecOpts struct {
IO IO
}
type Process interface {
// State returns the process state
State(context.Context) (State, error)
// Kill signals a container
Kill(context.Context, uint32, bool) error
}
type ConsoleSize struct {
Width uint32
Height uint32

View File

@ -107,8 +107,8 @@ func (s *Service) Create(ctx context.Context, req *api.CreateContainerRequest) (
return &resp, errdefs.ToGRPC(err)
}
if err := s.emit(ctx, "/containers/create", &eventsapi.ContainerCreate{
ContainerID: resp.Container.ID,
Image: resp.Container.Image,
ID: resp.Container.ID,
Image: resp.Container.Image,
Runtime: &eventsapi.ContainerCreate_Runtime{
Name: resp.Container.Runtime.Name,
Options: resp.Container.Runtime.Options,
@ -181,10 +181,10 @@ func (s *Service) Update(ctx context.Context, req *api.UpdateContainerRequest) (
}
if err := s.emit(ctx, "/containers/update", &eventsapi.ContainerUpdate{
ContainerID: resp.Container.ID,
Image: resp.Container.Image,
Labels: resp.Container.Labels,
RootFS: resp.Container.RootFS,
ID: resp.Container.ID,
Image: resp.Container.Image,
Labels: resp.Container.Labels,
RootFS: resp.Container.RootFS,
}); err != nil {
return &resp, err
}
@ -200,7 +200,7 @@ func (s *Service) Delete(ctx context.Context, req *api.DeleteContainerRequest) (
}
if err := s.emit(ctx, "/containers/delete", &eventsapi.ContainerDelete{
ContainerID: req.ID,
ID: req.ID,
}); err != nil {
return &empty.Empty{}, err
}

View File

@ -36,9 +36,6 @@ var (
empty = &google_protobuf.Empty{}
)
// TODO(stevvooe): Clean up error mapping to avoid double mapping certain
// errors within helper methods.
func init() {
plugin.Register(&plugin.Registration{
Type: plugin.GRPCPlugin,
@ -212,11 +209,12 @@ func (s *Service) DeleteProcess(ctx context.Context, r *api.DeleteProcessRequest
if err != nil {
return nil, err
}
exit, err := t.DeleteProcess(ctx, r.Pid)
exit, err := t.DeleteProcess(ctx, r.ExecID)
if err != nil {
return nil, err
}
return &api.DeleteResponse{
ID: r.ExecID,
ExitStatus: exit.Status,
ExitedAt: exit.Timestamp,
Pid: exit.Pid,
@ -228,7 +226,6 @@ func taskFromContainerd(ctx context.Context, c runtime.Task) (*task.Task, error)
if err != nil {
return nil, err
}
var status task.Status
switch state.Status {
case runtime.CreatedStatus:
@ -243,14 +240,13 @@ func taskFromContainerd(ctx context.Context, c runtime.Task) (*task.Task, error)
log.G(ctx).WithField("status", state.Status).Warn("unknown status")
}
return &task.Task{
ID: c.Info().ID,
ContainerID: c.Info().ContainerID,
Pid: state.Pid,
Status: status,
Stdin: state.Stdin,
Stdout: state.Stdout,
Stderr: state.Stderr,
Terminal: state.Terminal,
ID: c.Info().ID,
Pid: state.Pid,
Status: status,
Stdin: state.Stdin,
Stdout: state.Stdout,
Stderr: state.Stderr,
Terminal: state.Terminal,
}, nil
}
@ -315,18 +311,14 @@ func (s *Service) Kill(ctx context.Context, r *api.KillRequest) (*google_protobu
if err != nil {
return nil, err
}
switch v := r.PidOrAll.(type) {
case *api.KillRequest_All:
if err := t.Kill(ctx, r.Signal, 0, true); err != nil {
p := runtime.Process(t)
if r.ExecID != "" {
if p, err = t.Process(ctx, r.ExecID); err != nil {
return nil, err
}
case *api.KillRequest_Pid:
if err := t.Kill(ctx, r.Signal, v.Pid, false); err != nil {
return nil, err
}
default:
return nil, fmt.Errorf("invalid option specified; expected pid or all")
}
if err := p.Kill(ctx, r.Signal, r.All); err != nil {
return nil, err
}
return empty, nil
}
@ -346,11 +338,14 @@ func (s *Service) ListPids(ctx context.Context, r *api.ListPidsRequest) (*api.Li
}
func (s *Service) Exec(ctx context.Context, r *api.ExecProcessRequest) (*api.ExecProcessResponse, error) {
if r.ExecID == "" {
return nil, grpc.Errorf(codes.InvalidArgument, "exec id cannot be empty")
}
t, err := s.getTask(ctx, r.ContainerID)
if err != nil {
return nil, err
}
process, err := t.Exec(ctx, runtime.ExecOpts{
process, err := t.Exec(ctx, r.ExecID, runtime.ExecOpts{
Spec: r.Spec,
IO: runtime.IO{
Stdin: r.Stdin,
@ -376,7 +371,13 @@ func (s *Service) ResizePty(ctx context.Context, r *api.ResizePtyRequest) (*goog
if err != nil {
return nil, err
}
if err := t.ResizePty(ctx, r.Pid, runtime.ConsoleSize{
p := runtime.Process(t)
if r.ExecID != "" {
if p, err = t.Process(ctx, r.ExecID); err != nil {
return nil, err
}
}
if err := p.ResizePty(ctx, runtime.ConsoleSize{
Width: r.Width,
Height: r.Height,
}); err != nil {
@ -390,8 +391,14 @@ func (s *Service) CloseIO(ctx context.Context, r *api.CloseIORequest) (*google_p
if err != nil {
return nil, err
}
p := runtime.Process(t)
if r.ExecID != "" {
if p, err = t.Process(ctx, r.ExecID); err != nil {
return nil, err
}
}
if r.Stdin {
if err := t.CloseIO(ctx, r.Pid); err != nil {
if err := p.CloseIO(ctx); err != nil {
return nil, err
}
}
@ -505,7 +512,6 @@ func (s *Service) getTaskFromContainer(ctx context.Context, container *container
return nil, grpc.Errorf(codes.NotFound, "task %v not found", container.ID)
}
return t, nil
}
func (s *Service) getRuntime(name string) (runtime.Runtime, error) {

59
task.go
View File

@ -51,8 +51,8 @@ type Task interface {
Start(context.Context) error
Status(context.Context) (TaskStatus, error)
Wait(context.Context) (uint32, error)
Exec(context.Context, *specs.Process, IOCreation) (Process, error)
Processes(context.Context) ([]uint32, error)
Exec(context.Context, string, *specs.Process, IOCreation) (Process, error)
Pids(context.Context) ([]uint32, error)
CloseIO(context.Context, ...IOCloserOpts) error
Resize(ctx context.Context, w, h uint32) error
IO() *IO
@ -76,12 +76,11 @@ var _ = (Task)(&task{})
type task struct {
client *Client
io *IO
containerID string
pid uint32
io *IO
id string
pid uint32
deferred *tasks.CreateTaskRequest
pidSync chan struct{}
}
// Pid returns the pid or process id for the task
@ -97,11 +96,10 @@ func (t *task) Start(ctx context.Context) error {
return err
}
t.pid = response.Pid
close(t.pidSync)
return nil
}
_, err := t.client.TaskService().Start(ctx, &tasks.StartTaskRequest{
ContainerID: t.containerID,
ContainerID: t.id,
})
return err
}
@ -109,10 +107,7 @@ func (t *task) Start(ctx context.Context) error {
func (t *task) Kill(ctx context.Context, s syscall.Signal) error {
_, err := t.client.TaskService().Kill(ctx, &tasks.KillRequest{
Signal: uint32(s),
ContainerID: t.containerID,
PidOrAll: &tasks.KillRequest_Pid{
Pid: t.pid,
},
ContainerID: t.id,
})
if err != nil {
if strings.Contains(grpc.ErrorDesc(err), runtime.ErrProcessExited.Error()) {
@ -125,21 +120,21 @@ func (t *task) Kill(ctx context.Context, s syscall.Signal) error {
func (t *task) Pause(ctx context.Context) error {
_, err := t.client.TaskService().Pause(ctx, &tasks.PauseTaskRequest{
ContainerID: t.containerID,
ContainerID: t.id,
})
return err
}
func (t *task) Resume(ctx context.Context) error {
_, err := t.client.TaskService().Resume(ctx, &tasks.ResumeTaskRequest{
ContainerID: t.containerID,
ContainerID: t.id,
})
return err
}
func (t *task) Status(ctx context.Context) (TaskStatus, error) {
r, err := t.client.TaskService().Get(ctx, &tasks.GetTaskRequest{
ContainerID: t.containerID,
ContainerID: t.id,
})
if err != nil {
return "", err
@ -153,8 +148,6 @@ func (t *task) Wait(ctx context.Context) (uint32, error) {
if err != nil {
return UnknownExitStatus, err
}
<-t.pidSync
for {
evt, err := eventstream.Recv()
if err != nil {
@ -169,7 +162,7 @@ func (t *task) Wait(ctx context.Context) (uint32, error) {
if e.Type != eventsapi.RuntimeEvent_EXIT {
continue
}
if e.ID == t.containerID && e.Pid == t.pid {
if e.ID == t.id && e.Pid == t.pid {
return e.ExitStatus, nil
}
}
@ -185,7 +178,7 @@ func (t *task) Delete(ctx context.Context) (uint32, error) {
cerr = t.io.Close()
}
r, err := t.client.TaskService().Delete(ctx, &tasks.DeleteTaskRequest{
ContainerID: t.containerID,
ContainerID: t.id,
})
if err != nil {
return UnknownExitStatus, err
@ -193,22 +186,22 @@ func (t *task) Delete(ctx context.Context) (uint32, error) {
return r.ExitStatus, cerr
}
func (t *task) Exec(ctx context.Context, spec *specs.Process, ioCreate IOCreation) (Process, error) {
func (t *task) Exec(ctx context.Context, id string, spec *specs.Process, ioCreate IOCreation) (Process, error) {
i, err := ioCreate()
if err != nil {
return nil, err
}
return &process{
task: t,
io: i,
spec: spec,
pidSync: make(chan struct{}),
id: id,
task: t,
io: i,
spec: spec,
}, nil
}
func (t *task) Processes(ctx context.Context) ([]uint32, error) {
func (t *task) Pids(ctx context.Context) ([]uint32, error) {
response, err := t.client.TaskService().ListPids(ctx, &tasks.ListPidsRequest{
ContainerID: t.containerID,
ContainerID: t.id,
})
if err != nil {
return nil, err
@ -218,8 +211,7 @@ func (t *task) Processes(ctx context.Context) ([]uint32, error) {
func (t *task) CloseIO(ctx context.Context, opts ...IOCloserOpts) error {
r := &tasks.CloseIORequest{
ContainerID: t.containerID,
Pid: t.pid,
ContainerID: t.id,
}
for _, o := range opts {
o(r)
@ -234,17 +226,16 @@ func (t *task) IO() *IO {
func (t *task) Resize(ctx context.Context, w, h uint32) error {
_, err := t.client.TaskService().ResizePty(ctx, &tasks.ResizePtyRequest{
ContainerID: t.containerID,
ContainerID: t.id,
Width: w,
Height: h,
Pid: t.pid,
})
return err
}
func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointOpts) (d v1.Descriptor, err error) {
request := &tasks.CheckpointTaskRequest{
ContainerID: t.containerID,
ContainerID: t.id,
}
for _, o := range opts {
if err := o(request); err != nil {
@ -257,7 +248,7 @@ func (t *task) Checkpoint(ctx context.Context, opts ...CheckpointOpts) (d v1.Des
}
defer t.Resume(ctx)
cr, err := t.client.ContainerService().Get(ctx, &containers.GetContainerRequest{
ID: t.containerID,
ID: t.id,
})
if err != nil {
return d, err
@ -281,7 +272,7 @@ type UpdateTaskOpts func(context.Context, *Client, *tasks.UpdateTaskRequest) err
func (t *task) Update(ctx context.Context, opts ...UpdateTaskOpts) error {
request := &tasks.UpdateTaskRequest{
ContainerID: t.containerID,
ContainerID: t.id,
}
for _, o := range opts {
if err := o(ctx, t.client, request); err != nil {
@ -342,7 +333,7 @@ func (t *task) writeIndex(ctx context.Context, index *v1.Index) (v1.Descriptor,
if err := json.NewEncoder(buf).Encode(index); err != nil {
return v1.Descriptor{}, err
}
return writeContent(ctx, t.client.ContentStore(), v1.MediaTypeImageIndex, t.containerID, buf)
return writeContent(ctx, t.client.ContentStore(), v1.MediaTypeImageIndex, t.id, buf)
}
func writeContent(ctx context.Context, store content.Store, mediaType, ref string, r io.Reader) (d v1.Descriptor, err error) {

View File

@ -68,6 +68,10 @@ type container struct {
sendEvent eventCallback
}
func (c *container) ID() string {
return c.ctr.ID()
}
func (c *container) Info() runtime.TaskInfo {
return runtime.TaskInfo{
ID: c.ctr.ID(),
@ -122,14 +126,23 @@ func (c *container) State(ctx context.Context) (runtime.State, error) {
}, nil
}
func (c *container) Kill(ctx context.Context, signal uint32, pid uint32, all bool) error {
func (c *container) Kill(ctx context.Context, signal uint32, all bool) error {
if winsys.Signal(signal) == winsys.SIGKILL {
return c.ctr.Kill(ctx)
}
return c.ctr.Stop(ctx)
}
func (c *container) Exec(ctx context.Context, opts runtime.ExecOpts) (runtime.Process, error) {
func (c *container) Process(ctx context.Context, id string) (runtime.Process, error) {
for _, p := range c.ctr.Processes() {
if p.ID() == id {
return &process{p}, nil
}
}
return nil, errors.Errorf("process %s not found", id)
}
func (c *container) Exec(ctx context.Context, id string, opts runtime.ExecOpts) (runtime.Process, error) {
if c.ctr.Pid() == 0 {
return nil, ErrLoadedContainer
}
@ -144,7 +157,7 @@ func (c *container) Exec(ctx context.Context, opts runtime.ExecOpts) (runtime.Pr
return nil, errors.Wrap(err, "failed to unmarshal oci spec")
}
p, err := c.ctr.AddProcess(ctx, &procSpec, pio)
p, err := c.ctr.AddProcess(ctx, id, &procSpec, pio)
if err != nil {
return nil, err
}
@ -160,12 +173,12 @@ func (c *container) Exec(ctx context.Context, opts runtime.ExecOpts) (runtime.Pr
return &process{p}, nil
}
func (c *container) CloseIO(ctx context.Context, pid uint32) error {
return c.ctr.CloseIO(ctx, pid)
func (c *container) CloseIO(ctx context.Context) error {
return c.ctr.CloseIO(ctx)
}
func (c *container) ResizePty(ctx context.Context, pid uint32, size runtime.ConsoleSize) error {
return c.ctr.ResizePty(ctx, pid, size)
func (c *container) ResizePty(ctx context.Context, size runtime.ConsoleSize) error {
return c.ctr.ResizePty(ctx, size)
}
func (c *container) Status() runtime.Status {
@ -192,16 +205,16 @@ func (c *container) Checkpoint(ctx context.Context, _ string, _ *types.Any) erro
return fmt.Errorf("Windows containers do not support checkpoint")
}
func (c *container) DeleteProcess(ctx context.Context, pid uint32) (*runtime.Exit, error) {
func (c *container) DeleteProcess(ctx context.Context, id string) (*runtime.Exit, error) {
var process *hcs.Process
for _, p := range c.ctr.Processes() {
if p.Pid() == pid {
if p.ID() == id {
process = p
break
}
}
if process == nil {
return nil, fmt.Errorf("process %d not found", pid)
return nil, fmt.Errorf("process %s not found", id)
}
ec, err := process.ExitCode()
if err != nil {

View File

@ -172,7 +172,7 @@ func (c *Container) Processes() []*Process {
}
func (c *Container) Start(ctx context.Context) error {
_, err := c.addProcess(ctx, c.spec.Process, c.io)
_, err := c.addProcess(ctx, c.id, c.spec.Process, c.io)
return err
}
@ -199,35 +199,35 @@ func (c *Container) Stop(ctx context.Context) error {
return nil
}
func (c *Container) CloseIO(ctx context.Context, pid uint32) error {
func (c *Container) CloseIO(ctx context.Context) error {
var proc *Process
c.Lock()
for _, p := range c.processes {
if p.Pid() == pid {
if p.id == c.id {
proc = p
break
}
}
c.Unlock()
if proc == nil {
return errors.Errorf("no such process %v", pid)
return errors.Errorf("no such process %s", c.id)
}
return proc.CloseStdin()
}
func (c *Container) ResizePty(ctx context.Context, pid uint32, size runtime.ConsoleSize) error {
func (c *Container) ResizePty(ctx context.Context, size runtime.ConsoleSize) error {
var proc *Process
c.Lock()
for _, p := range c.processes {
if p.Pid() == pid {
if p.id == c.id {
proc = p
break
}
}
c.Unlock()
if proc == nil {
return errors.Errorf("no such process %v", pid)
return errors.Errorf("no such process %s", c.id)
}
return proc.ResizeConsole(uint16(size.Width), uint16(size.Height))
@ -303,15 +303,14 @@ func (c *Container) GetConfiguration() Configuration {
return c.conf
}
func (c *Container) AddProcess(ctx context.Context, spec *specs.Process, io *IO) (*Process, error) {
func (c *Container) AddProcess(ctx context.Context, id string, spec *specs.Process, io *IO) (*Process, error) {
if len(c.processes) == 0 {
return nil, errors.New("container not started")
}
return c.addProcess(ctx, spec, io)
return c.addProcess(ctx, id, spec, io)
}
func (c *Container) addProcess(ctx context.Context, spec *specs.Process, pio *IO) (*Process, error) {
func (c *Container) addProcess(ctx context.Context, id string, spec *specs.Process, pio *IO) (*Process, error) {
// If we don't have a process yet, reused the container pid
var pid uint32
if len(c.processes) == 0 {
@ -388,6 +387,7 @@ func (c *Container) addProcess(ctx context.Context, spec *specs.Process, pio *IO
}
p := &Process{
id: id,
Process: proc,
pid: pid,
io: pio,

View File

@ -14,6 +14,7 @@ import (
type Process struct {
hcsshim.Process
id string
pid uint32
io *IO
ec uint32
@ -22,6 +23,10 @@ type Process struct {
ecSync chan struct{}
}
func (p *Process) ID() string {
return p.id
}
func (p *Process) Pid() uint32 {
return p.pid
}

View File

@ -32,3 +32,11 @@ func (p *process) Status() runtime.Status {
func (p *process) Pid() uint32 {
return p.Process.Pid()
}
func (p *process) CloseIO(ctx context.Context) error {
return p.Process.CloseStdin()
}
func (p *process) ResizePty(ctx context.Context, size runtime.ConsoleSize) error {
return p.Process.ResizeConsole(uint16(size.Width), uint16(size.Height))
}