Add container start and supervisor

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby 2016-12-05 15:38:32 -08:00
parent e620833c9e
commit 21a53c1d70
11 changed files with 380 additions and 139 deletions

View file

@ -55,6 +55,14 @@ func (x Status) String() string {
} }
func (Status) EnumDescriptor() ([]byte, []int) { return fileDescriptorContainer, []int{0} } func (Status) EnumDescriptor() ([]byte, []int) { return fileDescriptorContainer, []int{0} }
type StartContainerRequest struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
}
func (m *StartContainerRequest) Reset() { *m = StartContainerRequest{} }
func (*StartContainerRequest) ProtoMessage() {}
func (*StartContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{0} }
type StartProcessRequest struct { type StartProcessRequest struct {
ContainerId string `protobuf:"bytes,1,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"`
Process *Process `protobuf:"bytes,2,opt,name=process" json:"process,omitempty"` Process *Process `protobuf:"bytes,2,opt,name=process" json:"process,omitempty"`
@ -65,7 +73,7 @@ type StartProcessRequest struct {
func (m *StartProcessRequest) Reset() { *m = StartProcessRequest{} } func (m *StartProcessRequest) Reset() { *m = StartProcessRequest{} }
func (*StartProcessRequest) ProtoMessage() {} func (*StartProcessRequest) ProtoMessage() {}
func (*StartProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{0} } func (*StartProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{1} }
type StartProcessResponse struct { type StartProcessResponse struct {
Process *Process `protobuf:"bytes,1,opt,name=process" json:"process,omitempty"` Process *Process `protobuf:"bytes,1,opt,name=process" json:"process,omitempty"`
@ -73,7 +81,7 @@ type StartProcessResponse struct {
func (m *StartProcessResponse) Reset() { *m = StartProcessResponse{} } func (m *StartProcessResponse) Reset() { *m = StartProcessResponse{} }
func (*StartProcessResponse) ProtoMessage() {} func (*StartProcessResponse) ProtoMessage() {}
func (*StartProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{1} } func (*StartProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{2} }
type Container struct { type Container struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
@ -84,7 +92,7 @@ type Container struct {
func (m *Container) Reset() { *m = Container{} } func (m *Container) Reset() { *m = Container{} }
func (*Container) ProtoMessage() {} func (*Container) ProtoMessage() {}
func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{2} } func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{3} }
type Process struct { type Process struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
@ -100,7 +108,7 @@ type Process struct {
func (m *Process) Reset() { *m = Process{} } func (m *Process) Reset() { *m = Process{} }
func (*Process) ProtoMessage() {} func (*Process) ProtoMessage() {}
func (*Process) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{3} } func (*Process) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{4} }
type User struct { type User struct {
Uid uint32 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"` Uid uint32 `protobuf:"varint,1,opt,name=uid,proto3" json:"uid,omitempty"`
@ -110,7 +118,7 @@ type User struct {
func (m *User) Reset() { *m = User{} } func (m *User) Reset() { *m = User{} }
func (*User) ProtoMessage() {} func (*User) ProtoMessage() {}
func (*User) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{4} } func (*User) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{5} }
type GetContainerRequest struct { type GetContainerRequest struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
@ -118,7 +126,7 @@ type GetContainerRequest struct {
func (m *GetContainerRequest) Reset() { *m = GetContainerRequest{} } func (m *GetContainerRequest) Reset() { *m = GetContainerRequest{} }
func (*GetContainerRequest) ProtoMessage() {} func (*GetContainerRequest) ProtoMessage() {}
func (*GetContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{5} } func (*GetContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{6} }
type GetContainerResponse struct { type GetContainerResponse struct {
Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"` Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"`
@ -126,7 +134,7 @@ type GetContainerResponse struct {
func (m *GetContainerResponse) Reset() { *m = GetContainerResponse{} } func (m *GetContainerResponse) Reset() { *m = GetContainerResponse{} }
func (*GetContainerResponse) ProtoMessage() {} func (*GetContainerResponse) ProtoMessage() {}
func (*GetContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{6} } func (*GetContainerResponse) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{7} }
type UpdateContainerRequest struct { type UpdateContainerRequest struct {
Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"` Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"`
@ -135,7 +143,7 @@ type UpdateContainerRequest struct {
func (m *UpdateContainerRequest) Reset() { *m = UpdateContainerRequest{} } func (m *UpdateContainerRequest) Reset() { *m = UpdateContainerRequest{} }
func (*UpdateContainerRequest) ProtoMessage() {} func (*UpdateContainerRequest) ProtoMessage() {}
func (*UpdateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{7} } func (*UpdateContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{8} }
type PauseContainerRequest struct { type PauseContainerRequest struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
@ -143,7 +151,7 @@ type PauseContainerRequest struct {
func (m *PauseContainerRequest) Reset() { *m = PauseContainerRequest{} } func (m *PauseContainerRequest) Reset() { *m = PauseContainerRequest{} }
func (*PauseContainerRequest) ProtoMessage() {} func (*PauseContainerRequest) ProtoMessage() {}
func (*PauseContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{8} } func (*PauseContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{9} }
type ResumeContainerRequest struct { type ResumeContainerRequest struct {
ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
@ -151,7 +159,7 @@ type ResumeContainerRequest struct {
func (m *ResumeContainerRequest) Reset() { *m = ResumeContainerRequest{} } func (m *ResumeContainerRequest) Reset() { *m = ResumeContainerRequest{} }
func (*ResumeContainerRequest) ProtoMessage() {} func (*ResumeContainerRequest) ProtoMessage() {}
func (*ResumeContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{9} } func (*ResumeContainerRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{10} }
type GetProcessRequest struct { type GetProcessRequest struct {
Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"` Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"`
@ -160,7 +168,7 @@ type GetProcessRequest struct {
func (m *GetProcessRequest) Reset() { *m = GetProcessRequest{} } func (m *GetProcessRequest) Reset() { *m = GetProcessRequest{} }
func (*GetProcessRequest) ProtoMessage() {} func (*GetProcessRequest) ProtoMessage() {}
func (*GetProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{10} } func (*GetProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{11} }
type GetProcessResponse struct { type GetProcessResponse struct {
Process *Process `protobuf:"bytes,1,opt,name=process" json:"process,omitempty"` Process *Process `protobuf:"bytes,1,opt,name=process" json:"process,omitempty"`
@ -168,7 +176,7 @@ type GetProcessResponse struct {
func (m *GetProcessResponse) Reset() { *m = GetProcessResponse{} } func (m *GetProcessResponse) Reset() { *m = GetProcessResponse{} }
func (*GetProcessResponse) ProtoMessage() {} func (*GetProcessResponse) ProtoMessage() {}
func (*GetProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{11} } func (*GetProcessResponse) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{12} }
type SignalProcessRequest struct { type SignalProcessRequest struct {
Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"` Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"`
@ -178,7 +186,7 @@ type SignalProcessRequest struct {
func (m *SignalProcessRequest) Reset() { *m = SignalProcessRequest{} } func (m *SignalProcessRequest) Reset() { *m = SignalProcessRequest{} }
func (*SignalProcessRequest) ProtoMessage() {} func (*SignalProcessRequest) ProtoMessage() {}
func (*SignalProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{12} } func (*SignalProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{13} }
type DeleteProcessRequest struct { type DeleteProcessRequest struct {
Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"` Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"`
@ -187,7 +195,7 @@ type DeleteProcessRequest struct {
func (m *DeleteProcessRequest) Reset() { *m = DeleteProcessRequest{} } func (m *DeleteProcessRequest) Reset() { *m = DeleteProcessRequest{} }
func (*DeleteProcessRequest) ProtoMessage() {} func (*DeleteProcessRequest) ProtoMessage() {}
func (*DeleteProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{13} } func (*DeleteProcessRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{14} }
type ListProcessesRequest struct { type ListProcessesRequest struct {
Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"` Container *Container `protobuf:"bytes,1,opt,name=container" json:"container,omitempty"`
@ -195,7 +203,7 @@ type ListProcessesRequest struct {
func (m *ListProcessesRequest) Reset() { *m = ListProcessesRequest{} } func (m *ListProcessesRequest) Reset() { *m = ListProcessesRequest{} }
func (*ListProcessesRequest) ProtoMessage() {} func (*ListProcessesRequest) ProtoMessage() {}
func (*ListProcessesRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{14} } func (*ListProcessesRequest) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{15} }
type ListProcessesResponse struct { type ListProcessesResponse struct {
Processes []*Process `protobuf:"bytes,1,rep,name=processes" json:"processes,omitempty"` Processes []*Process `protobuf:"bytes,1,rep,name=processes" json:"processes,omitempty"`
@ -203,9 +211,10 @@ type ListProcessesResponse struct {
func (m *ListProcessesResponse) Reset() { *m = ListProcessesResponse{} } func (m *ListProcessesResponse) Reset() { *m = ListProcessesResponse{} }
func (*ListProcessesResponse) ProtoMessage() {} func (*ListProcessesResponse) ProtoMessage() {}
func (*ListProcessesResponse) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{15} } func (*ListProcessesResponse) Descriptor() ([]byte, []int) { return fileDescriptorContainer, []int{16} }
func init() { func init() {
proto.RegisterType((*StartContainerRequest)(nil), "containerd.v1.StartContainerRequest")
proto.RegisterType((*StartProcessRequest)(nil), "containerd.v1.StartProcessRequest") proto.RegisterType((*StartProcessRequest)(nil), "containerd.v1.StartProcessRequest")
proto.RegisterType((*StartProcessResponse)(nil), "containerd.v1.StartProcessResponse") proto.RegisterType((*StartProcessResponse)(nil), "containerd.v1.StartProcessResponse")
proto.RegisterType((*Container)(nil), "containerd.v1.Container") proto.RegisterType((*Container)(nil), "containerd.v1.Container")
@ -224,6 +233,16 @@ func init() {
proto.RegisterType((*ListProcessesResponse)(nil), "containerd.v1.ListProcessesResponse") proto.RegisterType((*ListProcessesResponse)(nil), "containerd.v1.ListProcessesResponse")
proto.RegisterEnum("containerd.v1.Status", Status_name, Status_value) proto.RegisterEnum("containerd.v1.Status", Status_name, Status_value)
} }
func (this *StartContainerRequest) GoString() string {
if this == nil {
return "nil"
}
s := make([]string, 0, 5)
s = append(s, "&execution.StartContainerRequest{")
s = append(s, "ID: "+fmt.Sprintf("%#v", this.ID)+",\n")
s = append(s, "}")
return strings.Join(s, "")
}
func (this *StartProcessRequest) GoString() string { func (this *StartProcessRequest) GoString() string {
if this == nil { if this == nil {
return "nil" return "nil"
@ -476,6 +495,7 @@ type ContainerServiceClient interface {
Update(ctx context.Context, in *UpdateContainerRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) Update(ctx context.Context, in *UpdateContainerRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
Pause(ctx context.Context, in *PauseContainerRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) Pause(ctx context.Context, in *PauseContainerRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
Resume(ctx context.Context, in *ResumeContainerRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) Resume(ctx context.Context, in *ResumeContainerRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
Start(ctx context.Context, in *StartContainerRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
StartProcess(ctx context.Context, in *StartProcessRequest, opts ...grpc.CallOption) (*StartProcessResponse, error) StartProcess(ctx context.Context, in *StartProcessRequest, opts ...grpc.CallOption) (*StartProcessResponse, error)
GetProcess(ctx context.Context, in *GetProcessRequest, opts ...grpc.CallOption) (*GetProcessResponse, error) GetProcess(ctx context.Context, in *GetProcessRequest, opts ...grpc.CallOption) (*GetProcessResponse, error)
SignalProcess(ctx context.Context, in *SignalProcessRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) SignalProcess(ctx context.Context, in *SignalProcessRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error)
@ -527,6 +547,15 @@ func (c *containerServiceClient) Resume(ctx context.Context, in *ResumeContainer
return out, nil return out, nil
} }
func (c *containerServiceClient) Start(ctx context.Context, in *StartContainerRequest, opts ...grpc.CallOption) (*google_protobuf.Empty, error) {
out := new(google_protobuf.Empty)
err := grpc.Invoke(ctx, "/containerd.v1.ContainerService/Start", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *containerServiceClient) StartProcess(ctx context.Context, in *StartProcessRequest, opts ...grpc.CallOption) (*StartProcessResponse, error) { func (c *containerServiceClient) StartProcess(ctx context.Context, in *StartProcessRequest, opts ...grpc.CallOption) (*StartProcessResponse, error) {
out := new(StartProcessResponse) out := new(StartProcessResponse)
err := grpc.Invoke(ctx, "/containerd.v1.ContainerService/StartProcess", in, out, c.cc, opts...) err := grpc.Invoke(ctx, "/containerd.v1.ContainerService/StartProcess", in, out, c.cc, opts...)
@ -579,6 +608,7 @@ type ContainerServiceServer interface {
Update(context.Context, *UpdateContainerRequest) (*google_protobuf.Empty, error) Update(context.Context, *UpdateContainerRequest) (*google_protobuf.Empty, error)
Pause(context.Context, *PauseContainerRequest) (*google_protobuf.Empty, error) Pause(context.Context, *PauseContainerRequest) (*google_protobuf.Empty, error)
Resume(context.Context, *ResumeContainerRequest) (*google_protobuf.Empty, error) Resume(context.Context, *ResumeContainerRequest) (*google_protobuf.Empty, error)
Start(context.Context, *StartContainerRequest) (*google_protobuf.Empty, error)
StartProcess(context.Context, *StartProcessRequest) (*StartProcessResponse, error) StartProcess(context.Context, *StartProcessRequest) (*StartProcessResponse, error)
GetProcess(context.Context, *GetProcessRequest) (*GetProcessResponse, error) GetProcess(context.Context, *GetProcessRequest) (*GetProcessResponse, error)
SignalProcess(context.Context, *SignalProcessRequest) (*google_protobuf.Empty, error) SignalProcess(context.Context, *SignalProcessRequest) (*google_protobuf.Empty, error)
@ -662,6 +692,24 @@ func _ContainerService_Resume_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _ContainerService_Start_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StartContainerRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ContainerServiceServer).Start(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/containerd.v1.ContainerService/Start",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ContainerServiceServer).Start(ctx, req.(*StartContainerRequest))
}
return interceptor(ctx, in, info, handler)
}
func _ContainerService_StartProcess_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { func _ContainerService_StartProcess_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(StartProcessRequest) in := new(StartProcessRequest)
if err := dec(in); err != nil { if err := dec(in); err != nil {
@ -772,6 +820,10 @@ var _ContainerService_serviceDesc = grpc.ServiceDesc{
MethodName: "Resume", MethodName: "Resume",
Handler: _ContainerService_Resume_Handler, Handler: _ContainerService_Resume_Handler,
}, },
{
MethodName: "Start",
Handler: _ContainerService_Start_Handler,
},
{ {
MethodName: "StartProcess", MethodName: "StartProcess",
Handler: _ContainerService_StartProcess_Handler, Handler: _ContainerService_StartProcess_Handler,
@ -797,6 +849,30 @@ var _ContainerService_serviceDesc = grpc.ServiceDesc{
Metadata: "container.proto", Metadata: "container.proto",
} }
func (m *StartContainerRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalTo(dAtA)
if err != nil {
return nil, err
}
return dAtA[:n], nil
}
func (m *StartContainerRequest) MarshalTo(dAtA []byte) (int, error) {
var i int
_ = i
var l int
_ = l
if len(m.ID) > 0 {
dAtA[i] = 0xa
i++
i = encodeVarintContainer(dAtA, i, uint64(len(m.ID)))
i += copy(dAtA[i:], m.ID)
}
return i, nil
}
func (m *StartProcessRequest) Marshal() (dAtA []byte, err error) { func (m *StartProcessRequest) Marshal() (dAtA []byte, err error) {
size := m.Size() size := m.Size()
dAtA = make([]byte, size) dAtA = make([]byte, size)
@ -1423,6 +1499,16 @@ func encodeVarintContainer(dAtA []byte, offset int, v uint64) int {
dAtA[offset] = uint8(v) dAtA[offset] = uint8(v)
return offset + 1 return offset + 1
} }
func (m *StartContainerRequest) Size() (n int) {
var l int
_ = l
l = len(m.ID)
if l > 0 {
n += 1 + l + sovContainer(uint64(l))
}
return n
}
func (m *StartProcessRequest) Size() (n int) { func (m *StartProcessRequest) Size() (n int) {
var l int var l int
_ = l _ = l
@ -1684,6 +1770,16 @@ func sovContainer(x uint64) (n int) {
func sozContainer(x uint64) (n int) { func sozContainer(x uint64) (n int) {
return sovContainer(uint64((x << 1) ^ uint64((int64(x) >> 63)))) return sovContainer(uint64((x << 1) ^ uint64((int64(x) >> 63))))
} }
func (this *StartContainerRequest) String() string {
if this == nil {
return "nil"
}
s := strings.Join([]string{`&StartContainerRequest{`,
`ID:` + fmt.Sprintf("%v", this.ID) + `,`,
`}`,
}, "")
return s
}
func (this *StartProcessRequest) String() string { func (this *StartProcessRequest) String() string {
if this == nil { if this == nil {
return "nil" return "nil"
@ -1874,6 +1970,85 @@ func valueToStringContainer(v interface{}) string {
pv := reflect.Indirect(rv).Interface() pv := reflect.Indirect(rv).Interface()
return fmt.Sprintf("*%v", pv) return fmt.Sprintf("*%v", pv)
} }
func (m *StartContainerRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
preIndex := iNdEx
var wire uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowContainer
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
wire |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
return fmt.Errorf("proto: StartContainerRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
return fmt.Errorf("proto: StartContainerRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowContainer
}
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 ErrInvalidLengthContainer
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.ID = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipContainer(dAtA[iNdEx:])
if err != nil {
return err
}
if skippy < 0 {
return ErrInvalidLengthContainer
}
if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
iNdEx += skippy
}
}
if iNdEx > l {
return io.ErrUnexpectedEOF
}
return nil
}
func (m *StartProcessRequest) Unmarshal(dAtA []byte) error { func (m *StartProcessRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA) l := len(dAtA)
iNdEx := 0 iNdEx := 0
@ -3882,58 +4057,59 @@ var (
func init() { proto.RegisterFile("container.proto", fileDescriptorContainer) } func init() { proto.RegisterFile("container.proto", fileDescriptorContainer) }
var fileDescriptorContainer = []byte{ var fileDescriptorContainer = []byte{
// 841 bytes of a gzipped FileDescriptorProto // 855 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xc4, 0x56, 0xcd, 0x6e, 0xeb, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xc4, 0x56, 0xdd, 0x6e, 0xeb, 0x44,
0x14, 0xee, 0xc4, 0x89, 0xd3, 0x9c, 0x5c, 0x5f, 0xc2, 0x34, 0x8d, 0xac, 0x80, 0x72, 0x73, 0xcd, 0x10, 0xee, 0xc6, 0xa9, 0xd3, 0x4c, 0x8e, 0x0f, 0x61, 0x9b, 0x46, 0x56, 0x40, 0x39, 0x39, 0xe6,
0x05, 0x22, 0xa4, 0x9b, 0x5c, 0x02, 0x62, 0xc3, 0xaa, 0x6d, 0x42, 0xa8, 0x54, 0x42, 0x98, 0x34, 0x00, 0x11, 0x52, 0x93, 0x12, 0x10, 0x37, 0x5c, 0xb5, 0x4d, 0x08, 0x95, 0x4a, 0x08, 0x9b, 0x46,
0x42, 0x42, 0x42, 0x95, 0x1b, 0x0f, 0xa9, 0xa5, 0xd4, 0x76, 0xed, 0x71, 0x81, 0x5d, 0x1f, 0x83, 0x48, 0x48, 0xa8, 0x72, 0xe3, 0x25, 0xb5, 0x94, 0xda, 0xae, 0xbd, 0x2e, 0x70, 0xd7, 0xc7, 0xe0,
0x17, 0x60, 0xcf, 0x63, 0x74, 0xc9, 0x92, 0x15, 0xd0, 0x3c, 0x01, 0x8f, 0x80, 0x66, 0xfc, 0x93, 0x05, 0xe0, 0x9a, 0xc7, 0xe8, 0x25, 0x97, 0x5c, 0x21, 0x9a, 0x27, 0xe0, 0x11, 0xd0, 0xae, 0x7f,
0xc4, 0x76, 0x42, 0x28, 0x48, 0x77, 0x77, 0xe6, 0xe4, 0xcc, 0xe7, 0xef, 0x3b, 0x3d, 0xdf, 0x99, 0x92, 0xd8, 0x4e, 0x08, 0x05, 0xe9, 0xdc, 0xcd, 0x8c, 0x67, 0x3e, 0x7f, 0xdf, 0x78, 0x67, 0xd6,
0xc2, 0x1b, 0x53, 0xdb, 0x62, 0xba, 0x69, 0x51, 0xb7, 0xed, 0xb8, 0x36, 0xb3, 0xb1, 0x12, 0x27, 0xf0, 0xc6, 0xc4, 0xb6, 0x98, 0x6e, 0x5a, 0xd4, 0x6d, 0x39, 0xae, 0xcd, 0x6c, 0xac, 0xc4, 0x01,
0x8c, 0xf6, 0xed, 0x87, 0xf5, 0xb7, 0x66, 0xb6, 0x3d, 0x9b, 0xd3, 0x8e, 0xf8, 0xf1, 0xd2, 0xff, 0xa3, 0x75, 0xf7, 0x61, 0xed, 0xad, 0xa9, 0x6d, 0x4f, 0x67, 0xb4, 0x2d, 0x1e, 0x5e, 0xf9, 0xdf,
0xae, 0x43, 0xaf, 0x1d, 0xf6, 0x63, 0x50, 0x5b, 0xaf, 0xce, 0xec, 0x99, 0x2d, 0xc2, 0x0e, 0x8f, 0xb5, 0xe9, 0x8d, 0xc3, 0x7e, 0x0c, 0x72, 0x6b, 0x95, 0xa9, 0x3d, 0xb5, 0x85, 0xd9, 0xe6, 0x56,
0x82, 0xac, 0xf6, 0x0b, 0x82, 0x83, 0x31, 0xd3, 0x5d, 0x36, 0x72, 0xed, 0x29, 0xf5, 0x3c, 0x42, 0x10, 0xd5, 0xda, 0x70, 0x30, 0x62, 0xba, 0xcb, 0x4e, 0x23, 0x20, 0x42, 0x6f, 0x7d, 0xea, 0x31,
0x6f, 0x7c, 0xea, 0x31, 0xfc, 0x1c, 0x9e, 0xc4, 0xd8, 0x17, 0xa6, 0xa1, 0xa2, 0x26, 0x6a, 0x95, 0x5c, 0x85, 0x9c, 0x69, 0xa8, 0xa8, 0x81, 0x9a, 0xc5, 0x13, 0x79, 0xfe, 0xc7, 0x8b, 0xdc, 0x59,
0x48, 0x39, 0xce, 0x9d, 0x1a, 0xf8, 0x15, 0x14, 0x9d, 0xe0, 0x92, 0x9a, 0x6b, 0xa2, 0x56, 0xb9, 0x97, 0xe4, 0x4c, 0x43, 0xfb, 0x15, 0xc1, 0xbe, 0xa8, 0x18, 0xba, 0xf6, 0x84, 0x7a, 0x5e, 0x94,
0x5b, 0x6b, 0xaf, 0xd1, 0x69, 0x47, 0x90, 0x51, 0x19, 0xae, 0x42, 0xc1, 0x63, 0x86, 0x69, 0xa9, 0xff, 0x12, 0x9e, 0xc5, 0x64, 0x2e, 0xa3, 0x4a, 0x52, 0x8a, 0x63, 0x67, 0x06, 0x3e, 0x82, 0x82,
0x92, 0x40, 0x0b, 0x0e, 0xb8, 0x06, 0xb2, 0xc7, 0x0c, 0xdb, 0x67, 0x6a, 0x5e, 0xa4, 0xc3, 0x53, 0x13, 0x14, 0xa9, 0xb9, 0x06, 0x6a, 0x96, 0x3a, 0xd5, 0xd6, 0x0a, 0xff, 0x56, 0x04, 0x19, 0xa5,
0x98, 0xa7, 0xae, 0xab, 0x16, 0xe2, 0x3c, 0x75, 0x5d, 0xed, 0x73, 0xa8, 0xae, 0x33, 0xf6, 0x1c, 0xe1, 0x0a, 0xec, 0x7a, 0xcc, 0x30, 0x2d, 0x55, 0x12, 0x68, 0x81, 0x83, 0xab, 0x20, 0x7b, 0xcc,
0xdb, 0xf2, 0xe8, 0x2a, 0x1f, 0xb4, 0x13, 0x1f, 0xed, 0x67, 0x04, 0xa5, 0x93, 0xa8, 0x04, 0xd7, 0xb0, 0x7d, 0xa6, 0xe6, 0x45, 0x38, 0xf4, 0xc2, 0x38, 0x75, 0x5d, 0x75, 0x37, 0x8e, 0x53, 0xd7,
0x20, 0x17, 0x09, 0x3d, 0x96, 0x17, 0xbf, 0x3f, 0xcb, 0x9d, 0xf6, 0x48, 0xce, 0x34, 0xf0, 0x33, 0xd5, 0x3e, 0x87, 0xca, 0x2a, 0x63, 0xcf, 0xb1, 0x2d, 0x8f, 0x2e, 0xf3, 0x41, 0x5b, 0xf1, 0xd1,
0x28, 0x5f, 0xfa, 0x96, 0x31, 0xa7, 0x17, 0x8e, 0xce, 0xae, 0x84, 0xd6, 0x12, 0x81, 0x20, 0x35, 0x7e, 0x46, 0x50, 0x8c, 0x3b, 0xb5, 0xae, 0x45, 0xf8, 0x05, 0x94, 0xae, 0x7c, 0xcb, 0x98, 0xd1,
0xd2, 0xd9, 0xd5, 0xea, 0x87, 0xa5, 0xdd, 0x1a, 0xf1, 0x92, 0x4b, 0xd3, 0x99, 0xef, 0x09, 0xc9, 0x4b, 0x47, 0x67, 0xd7, 0x42, 0x6b, 0x91, 0x40, 0x10, 0x1a, 0xea, 0xec, 0x7a, 0xf9, 0xc5, 0xd2,
0x4f, 0xbb, 0x87, 0x89, 0x0b, 0x63, 0xf1, 0x23, 0x09, 0x8b, 0xb4, 0xbb, 0x1c, 0x14, 0x43, 0x8c, 0x76, 0x8d, 0x38, 0xe4, 0xd2, 0x74, 0xe6, 0x7b, 0x42, 0xf2, 0xf3, 0xce, 0x41, 0xa2, 0x60, 0x24,
0x8d, 0x2c, 0x2b, 0x20, 0x39, 0xa6, 0x21, 0xd8, 0x49, 0x84, 0x87, 0x18, 0x43, 0x5e, 0x77, 0x67, 0x1e, 0x92, 0x30, 0x49, 0xbb, 0xcf, 0x41, 0x21, 0xc4, 0x58, 0xcb, 0xb2, 0x0c, 0x92, 0x63, 0x1a,
0x9c, 0x93, 0xd4, 0x2a, 0x11, 0x11, 0xf3, 0x2a, 0x6a, 0xdd, 0xaa, 0x79, 0x91, 0xe2, 0x21, 0x7e, 0x82, 0x9d, 0x44, 0xb8, 0x89, 0x31, 0xe4, 0x75, 0x77, 0xca, 0x39, 0x49, 0xcd, 0x22, 0x11, 0x36,
0x1f, 0xf2, 0xbe, 0x47, 0x83, 0x1e, 0x97, 0xbb, 0x07, 0x09, 0x22, 0x13, 0x8f, 0xba, 0x44, 0x14, 0xcf, 0xa2, 0xd6, 0x9d, 0x9a, 0x17, 0x21, 0x6e, 0xe2, 0xf7, 0x21, 0xef, 0x7b, 0x34, 0xe8, 0x71,
0xf0, 0xab, 0xd3, 0xef, 0x0d, 0x55, 0x16, 0xf2, 0x79, 0x88, 0xeb, 0xb0, 0xcf, 0xa8, 0x7b, 0x6d, 0xa9, 0xb3, 0x9f, 0x20, 0x32, 0xf6, 0xa8, 0x4b, 0x44, 0x02, 0x2f, 0x9d, 0x7c, 0x6f, 0xa8, 0xb2,
0x5a, 0xfa, 0x5c, 0x2d, 0x36, 0x51, 0x6b, 0x9f, 0xc4, 0xe7, 0x15, 0x85, 0xfb, 0x3b, 0x28, 0xe4, 0x90, 0xcf, 0x4d, 0x5c, 0x83, 0x3d, 0x46, 0xdd, 0x1b, 0xd3, 0xd2, 0x67, 0x6a, 0xa1, 0x81, 0x9a,
0x3d, 0xa6, 0x3f, 0x98, 0xec, 0x22, 0xbc, 0x53, 0x6a, 0xa2, 0x96, 0x42, 0x80, 0xa7, 0x82, 0x42, 0x7b, 0x24, 0xf6, 0x97, 0x14, 0xee, 0x6d, 0xa1, 0x90, 0xf7, 0x98, 0xfe, 0x60, 0xb2, 0xcb, 0xb0,
0x8d, 0x40, 0x7e, 0x12, 0xb2, 0xf0, 0x43, 0xfd, 0x0a, 0xe1, 0x21, 0xcf, 0xcc, 0x42, 0xe1, 0x0a, 0xa6, 0xd8, 0x40, 0x4d, 0x85, 0x00, 0x0f, 0x05, 0x89, 0x1a, 0x81, 0xfc, 0x38, 0x64, 0xe1, 0x87,
0xe1, 0x21, 0x7e, 0x0f, 0x9e, 0xea, 0x86, 0x61, 0x32, 0xd3, 0xb6, 0xf4, 0xf9, 0xc0, 0x34, 0x82, 0xfa, 0x15, 0xc2, 0x4d, 0x1e, 0x99, 0x86, 0xc2, 0x15, 0xc2, 0x4d, 0xfc, 0x1e, 0x3c, 0xd7, 0x0d,
0x16, 0x28, 0x24, 0x91, 0xd5, 0x5e, 0xc2, 0xc1, 0x80, 0xb2, 0x78, 0x00, 0xa2, 0xd1, 0xdf, 0xd0, 0xc3, 0x64, 0xa6, 0x6d, 0xe9, 0xb3, 0xbe, 0x69, 0x04, 0x2d, 0x50, 0x48, 0x22, 0xaa, 0x1d, 0xc2,
0x61, 0x6d, 0x08, 0xd5, 0xf5, 0xf2, 0x70, 0xee, 0x3e, 0x81, 0x52, 0xac, 0x2d, 0x9c, 0x3c, 0x35, 0x7e, 0x9f, 0x6e, 0x3f, 0x2a, 0x03, 0xa8, 0xac, 0xa6, 0x87, 0xe7, 0xee, 0x13, 0x28, 0xc6, 0xda,
0xa1, 0x76, 0x79, 0x69, 0x59, 0xaa, 0xdd, 0x40, 0x6d, 0xe2, 0x18, 0x3a, 0xa3, 0x29, 0x06, 0x8f, 0xc2, 0x93, 0xa7, 0x26, 0xd4, 0x2e, 0x8a, 0x16, 0xa9, 0xda, 0x2d, 0x54, 0xc7, 0x8e, 0xa1, 0x33,
0x44, 0xfc, 0xc7, 0x49, 0xd5, 0x3a, 0x70, 0x38, 0xd2, 0x7d, 0x8f, 0xee, 0xac, 0xf9, 0x15, 0xd4, 0x9a, 0x62, 0xf0, 0x44, 0xc4, 0x7f, 0x3c, 0xa9, 0x7c, 0x3d, 0x0c, 0x75, 0xdf, 0xa3, 0x5b, 0x6b,
0x08, 0xf5, 0xfc, 0xeb, 0xdd, 0x6f, 0x7c, 0x0b, 0x6f, 0x0e, 0x68, 0x72, 0x9b, 0x3c, 0x56, 0x50, 0x3e, 0x82, 0x2a, 0xa1, 0x9e, 0x7f, 0xb3, 0x7d, 0xc5, 0xb7, 0xf0, 0x66, 0x9f, 0x26, 0xb7, 0xc9,
0x6a, 0xa8, 0xb5, 0xcf, 0x00, 0xaf, 0xc2, 0x3f, 0xda, 0xfa, 0x3f, 0x21, 0xa8, 0x8e, 0xcd, 0x99, 0x53, 0x05, 0xa5, 0x0e, 0xb5, 0xf6, 0x19, 0xe0, 0x65, 0xf8, 0x27, 0x8f, 0xfe, 0x4f, 0x08, 0x2a,
0xa5, 0xcf, 0xff, 0x27, 0xaa, 0xff, 0x7e, 0x1b, 0xf2, 0xfd, 0x26, 0x18, 0x88, 0xad, 0xa1, 0x90, 0x23, 0x73, 0x6a, 0xe9, 0xb3, 0xff, 0x89, 0xea, 0xbf, 0xdf, 0x86, 0x7c, 0xbf, 0x09, 0x06, 0x62,
0xf0, 0xa4, 0xdd, 0x21, 0xa8, 0xf6, 0xe8, 0x9c, 0x32, 0xfa, 0xba, 0xa8, 0xf1, 0x51, 0x3f, 0x33, 0x6b, 0x28, 0x24, 0xf4, 0xb4, 0x7b, 0x04, 0x95, 0x2e, 0x9d, 0x51, 0x46, 0x5f, 0x17, 0x35, 0x7e,
0xbd, 0xa8, 0xcd, 0xf4, 0xbf, 0x32, 0xd0, 0xbe, 0x80, 0xc3, 0x04, 0x5e, 0xf8, 0x87, 0xfb, 0x18, 0xd4, 0xcf, 0x4d, 0x2f, 0x6a, 0x33, 0xfd, 0xaf, 0x0c, 0xb4, 0x2f, 0xe0, 0x20, 0x81, 0x17, 0x7e,
0x4a, 0x4e, 0x94, 0x54, 0x51, 0x53, 0xda, 0x42, 0x6e, 0x59, 0xf8, 0xc1, 0xa7, 0x20, 0x07, 0x6b, 0xb8, 0x8f, 0xa1, 0xe8, 0x44, 0x41, 0x15, 0x35, 0xa4, 0x0d, 0xe4, 0x16, 0x89, 0x1f, 0x7c, 0x0a,
0x01, 0x97, 0xa1, 0x78, 0x42, 0xfa, 0x47, 0xe7, 0xfd, 0x5e, 0x65, 0x8f, 0x1f, 0xc8, 0x64, 0x38, 0x72, 0xb0, 0x16, 0x70, 0x09, 0x0a, 0xa7, 0xa4, 0x77, 0x7c, 0xd1, 0xeb, 0x96, 0x77, 0xb8, 0x43,
0x3c, 0x1d, 0x0e, 0x2a, 0x88, 0x1f, 0xc6, 0xe7, 0x5f, 0x8e, 0x46, 0xfd, 0x5e, 0x25, 0x87, 0x01, 0xc6, 0x83, 0xc1, 0xd9, 0xa0, 0x5f, 0x46, 0xdc, 0x19, 0x5d, 0x7c, 0x39, 0x1c, 0xf6, 0xba, 0xe5,
0xe4, 0xd1, 0xd1, 0x64, 0xdc, 0xef, 0x55, 0xa4, 0xee, 0x1f, 0x05, 0xa8, 0xc4, 0x24, 0xc7, 0xd4, 0x1c, 0x06, 0x90, 0x87, 0xc7, 0xe3, 0x51, 0xaf, 0x5b, 0x96, 0x3a, 0xbf, 0xc8, 0x50, 0x8e, 0x49,
0xbd, 0x35, 0xa7, 0x14, 0x0f, 0x41, 0x1a, 0x50, 0x86, 0xb5, 0xc4, 0xb7, 0x33, 0xd6, 0x43, 0xfd, 0x8e, 0xa8, 0x7b, 0x67, 0x4e, 0x28, 0x1e, 0x80, 0xd4, 0xa7, 0x0c, 0x6b, 0x89, 0x77, 0x67, 0xac,
0x9d, 0xad, 0x35, 0xa1, 0xae, 0x01, 0xc8, 0x81, 0xb7, 0xf1, 0xbb, 0xc9, 0x8d, 0x9a, 0x69, 0xf9, 0x87, 0xda, 0x3b, 0x1b, 0x73, 0x42, 0x5d, 0x7d, 0x90, 0x83, 0xd9, 0xc6, 0xef, 0x26, 0x37, 0x6a,
0x7a, 0xad, 0x1d, 0xbc, 0xdd, 0xed, 0xe8, 0xed, 0x6e, 0xf7, 0xf9, 0xdb, 0x8d, 0xfb, 0x50, 0x10, 0xe6, 0xc8, 0xd7, 0xaa, 0xad, 0xe0, 0xb2, 0x6f, 0x45, 0x97, 0x7d, 0xab, 0xc7, 0x2f, 0x7b, 0xdc,
0x8e, 0xc5, 0x2f, 0x92, 0x6d, 0xc9, 0xf2, 0xf1, 0x46, 0x98, 0x01, 0xc8, 0x81, 0x8f, 0x53, 0x7c, 0x83, 0x5d, 0x31, 0xb1, 0xf8, 0x55, 0xb2, 0x2d, 0x59, 0x73, 0xbc, 0x16, 0xa6, 0x0f, 0x72, 0x30,
0xb2, 0xed, 0xbd, 0x11, 0xe8, 0x6b, 0x78, 0xb2, 0xfa, 0xf8, 0xa6, 0x3a, 0x96, 0xf1, 0xbf, 0x44, 0xc7, 0x29, 0x3e, 0xd9, 0xe3, 0xbd, 0x89, 0x8f, 0xb8, 0x7c, 0x53, 0x7c, 0x32, 0x7f, 0x3b, 0xd6,
0xaa, 0x63, 0x99, 0xaf, 0xf7, 0x57, 0x00, 0x4b, 0x63, 0xe3, 0x66, 0xba, 0xc9, 0x09, 0xd0, 0xe7, 0xc2, 0x7c, 0x0d, 0xcf, 0x96, 0xef, 0xf0, 0x54, 0xe3, 0x33, 0x7e, 0x49, 0x52, 0x8d, 0xcf, 0xfc,
0x5b, 0x2a, 0x42, 0xc8, 0x33, 0x50, 0xd6, 0x2c, 0x8e, 0x53, 0x44, 0x32, 0x16, 0xc0, 0x46, 0xe5, 0x09, 0xf8, 0x0a, 0x60, 0xb1, 0x1f, 0x70, 0x23, 0xfd, 0xad, 0x12, 0xa0, 0x2f, 0x37, 0x64, 0x84,
0x67, 0xa0, 0xac, 0xb9, 0x32, 0x85, 0x96, 0xe5, 0xd9, 0x8d, 0x68, 0xdf, 0x80, 0xb2, 0xe6, 0x88, 0x90, 0xe7, 0xa0, 0xac, 0x6c, 0x0a, 0x9c, 0x22, 0x92, 0xb1, 0x47, 0xd6, 0x2a, 0x3f, 0x07, 0x65,
0x14, 0x5a, 0x96, 0xff, 0xea, 0x2f, 0xb6, 0x17, 0x05, 0xba, 0x8f, 0xdf, 0xbe, 0x7f, 0x68, 0xec, 0x65, 0xb8, 0x53, 0x68, 0x59, 0xa3, 0xbf, 0x16, 0xed, 0x1b, 0x50, 0x56, 0x06, 0x2b, 0x85, 0x96,
0xfd, 0xf6, 0xd0, 0xd8, 0xfb, 0xeb, 0xa1, 0x81, 0xee, 0x16, 0x0d, 0x74, 0xbf, 0x68, 0xa0, 0x5f, 0x35, 0xc6, 0xb5, 0x57, 0x9b, 0x93, 0x02, 0xdd, 0x27, 0x6f, 0x3f, 0x3c, 0xd6, 0x77, 0x7e, 0x7f,
0x17, 0x0d, 0xf4, 0xe7, 0xa2, 0x81, 0x2e, 0x65, 0xc1, 0xe4, 0xa3, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xac, 0xef, 0xfc, 0xf5, 0x58, 0x47, 0xf7, 0xf3, 0x3a, 0x7a, 0x98, 0xd7, 0xd1, 0x6f, 0xf3, 0x3a,
0xff, 0x93, 0x32, 0xdb, 0x86, 0x4d, 0x0a, 0x00, 0x00, 0xfa, 0x73, 0x5e, 0x47, 0x57, 0xb2, 0x60, 0xf2, 0xd1, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x81,
0x9a, 0x9a, 0xae, 0xc5, 0x0a, 0x00, 0x00,
} }

View file

@ -10,6 +10,7 @@ service ContainerService {
rpc Update(UpdateContainerRequest) returns (google.protobuf.Empty); rpc Update(UpdateContainerRequest) returns (google.protobuf.Empty);
rpc Pause(PauseContainerRequest) returns (google.protobuf.Empty); rpc Pause(PauseContainerRequest) returns (google.protobuf.Empty);
rpc Resume(ResumeContainerRequest) returns (google.protobuf.Empty); rpc Resume(ResumeContainerRequest) returns (google.protobuf.Empty);
rpc Start(StartContainerRequest) returns (google.protobuf.Empty);
rpc StartProcess(StartProcessRequest) returns (StartProcessResponse); rpc StartProcess(StartProcessRequest) returns (StartProcessResponse);
rpc GetProcess(GetProcessRequest) returns (GetProcessResponse); rpc GetProcess(GetProcessRequest) returns (GetProcessResponse);
@ -18,6 +19,10 @@ service ContainerService {
rpc ListProcesses(ListProcessesRequest) returns (ListProcessesResponse); rpc ListProcesses(ListProcessesRequest) returns (ListProcessesResponse);
} }
message StartContainerRequest {
string id = 1 [(gogoproto.customname) = "ID"];
}
message StartProcessRequest { message StartProcessRequest {
string container_id = 1; string container_id = 1;
Process process = 2; Process process = 2;

View file

@ -16,6 +16,7 @@
DeleteContainerResponse DeleteContainerResponse
ListContainersRequest ListContainersRequest
ListContainersResponse ListContainersResponse
StartContainerRequest
StartProcessRequest StartProcessRequest
StartProcessResponse StartProcessResponse
Container Container

View file

@ -1,14 +1,64 @@
package execution package execution
import "fmt"
func NewContainer(stateRoot, id, bundle string) (*Container, error) {
stateDir, err := NewStateDir(stateRoot, id)
if err != nil {
return nil, err
}
return &Container{
id: id,
bundle: bundle,
stateDir: stateDir,
processes: make(map[string]Process),
}, nil
}
func LoadContainer(dir StateDir, id, bundle string, initPid int) *Container {
return &Container{
id: id,
stateDir: dir,
bundle: bundle,
initPid: initPid,
processes: make(map[string]Process),
}
}
type Container struct { type Container struct {
ID string id string
Bundle string bundle string
StateDir StateDir stateDir StateDir
initPid int
processes map[string]Process processes map[string]Process
} }
func (c *Container) AddProcess(p Process) { func (c *Container) ID() string {
return c.id
}
func (c *Container) Bundle() string {
return c.bundle
}
func (c *Container) StateDir() StateDir {
return c.stateDir
}
func (c *Container) Wait() (uint32, error) {
for _, p := range c.processes {
if p.Pid() == c.initPid {
return p.Wait()
}
}
return nil, fmt.Errorf("no init process")
}
func (c *Container) AddProcess(p Process, isInit bool) {
if isInit {
c.initPid = p.Pid()
}
c.processes[p.ID()] = p c.processes[p.ID()] = p
} }

View file

@ -29,6 +29,7 @@ type Executor interface {
List() ([]*Container, error) List() ([]*Container, error)
Load(id string) (*Container, error) Load(id string) (*Container, error)
Delete(*Container) error Delete(*Container) error
Start(*Container) error
StartProcess(*Container, CreateProcessOpts) (Process, error) StartProcess(*Container, CreateProcessOpts) (Process, error)
SignalProcess(*Container, os.Signal) error SignalProcess(*Container, os.Signal) error

View file

@ -29,21 +29,19 @@ type OCIRuntime struct {
runc *runc.Runc runc *runc.Runc
} }
func (r *OCIRuntime) Create(id string, o execution.CreateOpts) (*execution.Container, error) { func (r *OCIRuntime) Create(id string, o execution.CreateOpts) (container *execution.Container, err error) {
var err error if container, err = execution.NewContainer(r.root, id, o.Bundle); err != nil {
stateDir, err := NewStateDir(r.root, id)
if err != nil {
return nil, err return nil, err
} }
defer func() {
initStateDir, err := stateDir.NewProcess() if err != nil {
if err != nil { container.StateDir().Delete()
return nil, err }
} }()
var (
// /run/runc/redis/1/pid initDir = container.StateDir().NewProcess()
pidFile := filepath.Join(initStateDir, "pid") pidFile = filepath.Join(initDir, "pid")
)
err = r.runc.Create(id, o.Bundle, &runc.CreateOpts{ err = r.runc.Create(id, o.Bundle, &runc.CreateOpts{
Pidfile: pidfile, Pidfile: pidfile,
Stdin: o.Stdin, Stdin: o.Stdin,
@ -55,40 +53,40 @@ func (r *OCIRuntime) Create(id string, o execution.CreateOpts) (*execution.Conta
} }
pid, err := runc.ReadPifFile(pidfile) pid, err := runc.ReadPifFile(pidfile)
if err != nil { if err != nil {
// TODO: kill the container if we are going to return
return nil, err return nil, err
} }
process, err := newProcess(pid) process, err := newProcess(filepath.Base(initDir), pid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
container := &execution.Container{ container.AddProcess(process, true)
ID: id,
Bundle: o.Bundle,
StateDir: stateDir,
}
container.AddProcess(process)
return container, nil return container, nil
} }
func (r *OCIRuntime) load(runcC *runc.Container) (*execution.Container, error) { func (r *OCIRuntime) load(runcC *runc.Container) (*execution.Container, error) {
container := &execution.Container{ container := execution.LoadContainer(
ID: runcC.ID, execution.StateDir(filepath.Join(r.root, runcC.ID)),
Bundle: runcC.Bundle, runcC.ID,
StateDir: StateDir(filepath.Join(r.root, runcC.ID)), runcC.Bundle,
} )
process, err := newProcess(runcC.Pid) dirs, err := ioutil.ReadDir(filepath.Join(container.StateDir().Processes()))
if err != nil { if err != nil {
return nil, err return nil, err
} }
container.AddProcess(process) for _, d := range dirs {
pid, err := runc.ReadPidFile(filepath.Join(d, "pid"))
// /run/containerd/container-id/processess/process-id if err != nil {
dirs, err := ioutil.ReadDir(filepath.Join(container.Root)) return nil, err
if err != nil { }
return nil, err process, err := newProcess(filepath.Base(d), pid)
if err != nil {
return nil, err
}
container.AddProcess(process, pid == runcC.Pid)
} }
return container, nil return container, nil
@ -171,7 +169,7 @@ func (r *OCIRuntime) StartProcess(c *execution.Container, o CreateProcessOpts) (
return nil, err return nil, err
} }
container.AddProcess(process) container.AddProcess(process, false)
return process, nil return process, nil
} }

View file

@ -7,20 +7,26 @@ import (
"github.com/docker/containerd/execution" "github.com/docker/containerd/execution"
) )
func newProcess(pid int) (execution.Process, error) { func newProcess(id string, pid int) (execution.Process, error) {
proc, err := os.FindProcess(pid) proc, err := os.FindProcess(pid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &process{ return &process{
id: id,
proc: proc, proc: proc,
}, nil }, nil
} }
type process struct { type process struct {
id string
proc *os.Process proc *os.Process
} }
func (p *process) ID() string {
return p.id
}
func (p *process) Pid() int { func (p *process) Pid() int {
return p.proc.Pid return p.proc.Pid
} }
@ -30,6 +36,7 @@ func (p *process) Wait() (uint32, error) {
if err != nil { if err != nil {
return 0, nil return 0, nil
} }
// TODO: implement kill-all if we are the init pid
return uint32(state.Sys().(syscall.WaitStatus).ExitStatus()), nil return uint32(state.Sys().(syscall.WaitStatus).ExitStatus()), nil
} }

View file

@ -1,18 +1,11 @@
package execution package execution
import ( import "os"
"os"
"github.com/opencontainers/runtime-spec/specs-go"
)
type Process interface { type Process interface {
ID() string ID() string
Pid() int64 Pid() int64
Spec() *specs.Process //Spec() *specs.Process
Start() error
Status() (Status, error)
Wait() (uint32, error) Wait() (uint32, error)
Signal(os.Signal) error Signal(os.Signal) error
} }

View file

@ -99,6 +99,14 @@ func (s *Service) Resume(ctx context.Context, r *api.ResumeContainerRequest) (*g
return nil, s.executor.Resume(container) return nil, s.executor.Resume(container)
} }
func (s *Service) Start(ctx context.Context, r *api.StartContainerRequest) (*google_protobuf.Empty, error) {
container, err := s.executor.Load(r.ID)
if err != nil {
return nil, err
}
return nil, s.executor.Start(container)
}
func (s *Service) StartProcess(ctx context.Context, r *api.StartProcessRequest) (*api.StartProcessResponse, error) { func (s *Service) StartProcess(ctx context.Context, r *api.StartProcessRequest) (*api.StartProcessResponse, error) {
container, err := s.executor.Load(r.ContainerId) container, err := s.executor.Load(r.ContainerId)
if err != nil { if err != nil {
@ -117,7 +125,6 @@ func (s *Service) StartProcess(ctx context.Context, r *api.StartProcessRequest)
if err != nil { if err != nil {
return nil, err return nil, err
} }
s.supervisor.Add(process) s.supervisor.Add(process)
return &api.StartProcessResponse{ return &api.StartProcessResponse{

View file

@ -12,17 +12,13 @@ type StateDir string
func NewStateDir(root, id string) (StateDir, error) { func NewStateDir(root, id string) (StateDir, error) {
path := filepath.Join(root, id) path := filepath.Join(root, id)
err := os.Mkdir(path, 0700) if err := os.Mkdir(path, 0700); err != nil {
if err != nil {
return "", err return "", err
} }
if err := os.Mkdir(filepath.Join(path, processesDir), 0700); err != nil {
err = os.Mkdir(filepath.Join(path, processesDir), 0700)
if err != nil {
os.RemoveAll(path) os.RemoveAll(path)
return "", err return "", err
} }
return StateDir(path), err return StateDir(path), err
} }
@ -30,15 +26,8 @@ func (s StateDir) Delete() error {
return os.RemoveAll(string(s)) return os.RemoveAll(string(s))
} }
func (s StateDir) NewProcess(id string) (string, error) { func (s StateDir) NewProcess() (string, error) {
// TODO: generate id return ioutil.TempDir(s.processDir(), "")
newPath := filepath.Join(string(s), "1")
err := os.Mkdir(newPath, 0755)
if err != nil {
return "", err
}
return newPath, nil
} }
func (s StateDir) ProcessDir(id string) string { func (s StateDir) ProcessDir(id string) string {
@ -46,23 +35,25 @@ func (s StateDir) ProcessDir(id string) string {
} }
func (s StateDir) DeleteProcess(id string) error { func (s StateDir) DeleteProcess(id string) error {
return os.RemoveAll(filepath.Join(string(s), id)) return os.RemoveAll(filepath.Join(s.processDir(), id))
} }
func (s StateDir) Processes() ([]string, error) { func (s StateDir) Processes() ([]string, error) {
basepath := filepath.Join(string(s), processesDir) procsDir := s.processDir()
dirs, err := ioutil.ReadDir(basepath) dirs, err := ioutil.ReadDir(procsDir)
if err != nil { if err != nil {
return nil, err return nil, err
} }
paths := make([]string, 0) paths := make([]string, 0)
for _, d := range dirs { for _, d := range dirs {
if d.IsDir() { if d.IsDir() {
paths = append(paths, filepath.Join(basepath, d.Name())) paths = append(paths, filepath.Join(procsDir, d.Name()))
} }
} }
return paths, nil return paths, nil
} }
func (s StateDir) processDir() string {
return filepath.Join(string(s), processesDir)
}

12
execution/supervisor.go Normal file
View file

@ -0,0 +1,12 @@
package execution
type Supervisor struct {
}
type waiter interface {
Wait() (uint32, error)
}
func (s *Supervisor) Add(w waiter) {
}