提交 8497dc8e 编写于 作者: H holyfei 提交者: yangfeiyu

load: print log info in client

reason: print log info in client
Signed-off-by: Nyangfeiyu <yangfeiyu2@huawei.com>
上级 62b3f2d4
......@@ -6,12 +6,13 @@ package isula_build_v1
import (
context "context"
fmt "fmt"
math "math"
proto "github.com/gogo/protobuf/proto"
types "github.com/gogo/protobuf/types"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.
......@@ -1073,7 +1074,9 @@ func (m *LoadRequest) GetPath() string {
type LoadResponse struct {
// imageID is the ID of loaded image
ImageID string `protobuf:"bytes,1,opt,name=imageID,proto3" json:"imageID,omitempty"`
ImageID string `protobuf:"bytes,1,opt,name=imageID,proto3" json:"imageID,omitempty"`
// log is the log sent to client
Log string `protobuf:"bytes,2,opt,name=log,proto3" json:"log,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
......@@ -1110,6 +1113,13 @@ func (m *LoadResponse) GetImageID() string {
return ""
}
func (m *LoadResponse) GetLog() string {
if m != nil {
return m.Log
}
return ""
}
func init() {
proto.RegisterEnum("isula.build.v1.HealthCheckResponse_ServingStatus", HealthCheckResponse_ServingStatus_name, HealthCheckResponse_ServingStatus_value)
proto.RegisterType((*BuildRequest)(nil), "isula.build.v1.BuildRequest")
......@@ -1138,72 +1148,73 @@ func init() {
func init() { proto.RegisterFile("api/services/control.proto", fileDescriptor_d71ef680555cb937) }
var fileDescriptor_d71ef680555cb937 = []byte{
// 1034 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x6d, 0x6f, 0xdc, 0x44,
0x10, 0xc6, 0xb9, 0xc4, 0x49, 0xc6, 0xb9, 0x6b, 0xb4, 0x54, 0x91, 0xe5, 0x84, 0xf6, 0x30, 0x08,
0x1d, 0x20, 0x39, 0x6d, 0xe0, 0x03, 0x45, 0x2a, 0x52, 0x5e, 0x4a, 0x38, 0x1a, 0xae, 0xc2, 0x39,
0xca, 0x47, 0xb4, 0xb9, 0xdb, 0x38, 0xab, 0xda, 0x5e, 0xb3, 0xbb, 0x0e, 0x3d, 0xf8, 0x17, 0x7c,
0x86, 0x5f, 0xc4, 0xcf, 0xe1, 0x0f, 0xa0, 0x5d, 0xaf, 0xdf, 0xce, 0x17, 0xd2, 0x6f, 0x9e, 0x97,
0x9d, 0x7d, 0x66, 0xe6, 0x99, 0x59, 0x83, 0x87, 0x33, 0x7a, 0x28, 0x08, 0xbf, 0xa5, 0x33, 0x22,
0x0e, 0x67, 0x2c, 0x95, 0x9c, 0xc5, 0x41, 0xc6, 0x99, 0x64, 0x68, 0x40, 0x45, 0x1e, 0xe3, 0xe0,
0x2a, 0xa7, 0xf1, 0x3c, 0xb8, 0x7d, 0xea, 0xed, 0x47, 0x8c, 0x45, 0x31, 0x39, 0xd4, 0xd6, 0xab,
0xfc, 0xfa, 0x90, 0x24, 0x99, 0x5c, 0x14, 0xce, 0xde, 0xe3, 0x65, 0xa3, 0xa4, 0x09, 0x11, 0x12,
0x27, 0x59, 0xe1, 0xe0, 0xff, 0xbb, 0x06, 0x3b, 0x27, 0x2a, 0x54, 0x48, 0x7e, 0xcd, 0x89, 0x90,
0xe8, 0x00, 0xb6, 0x75, 0xe8, 0xe9, 0x22, 0x23, 0xae, 0x35, 0xb4, 0x46, 0xdb, 0x61, 0xad, 0x40,
0x2e, 0x6c, 0x6a, 0x61, 0x7c, 0xe6, 0xae, 0x69, 0x5b, 0x29, 0xa2, 0x47, 0x00, 0x0a, 0x27, 0x79,
0x2b, 0xcf, 0x28, 0x77, 0x7b, 0xda, 0xd8, 0xd0, 0xa0, 0x21, 0x38, 0xd7, 0x34, 0x26, 0xa7, 0x4a,
0x93, 0x4a, 0x77, 0x5d, 0x3b, 0x34, 0x55, 0x68, 0x0f, 0x6c, 0x96, 0xcb, 0x2c, 0x97, 0xee, 0x86,
0x36, 0x1a, 0xa9, 0x42, 0x74, 0xcc, 0x23, 0xe1, 0xda, 0xc3, 0x5e, 0x85, 0x48, 0x29, 0xd0, 0x43,
0xd8, 0xc8, 0x38, 0x7b, 0xbb, 0x70, 0x37, 0x87, 0xd6, 0x68, 0x2b, 0x2c, 0x04, 0x85, 0x93, 0xd2,
0xb9, 0x8a, 0xee, 0x6e, 0x15, 0x38, 0x8d, 0x88, 0x9e, 0x83, 0xa3, 0x0f, 0x5f, 0x4a, 0x2c, 0xe9,
0xcc, 0xdd, 0x1e, 0x5a, 0x23, 0xe7, 0x68, 0x3f, 0x68, 0x17, 0x35, 0x38, 0xa9, 0x5d, 0xc2, 0xa6,
0xbf, 0x4a, 0x93, 0xa4, 0x33, 0xbe, 0xc8, 0xe4, 0x4b, 0xb2, 0x70, 0xa1, 0x48, 0xb3, 0xd6, 0xa0,
0x8f, 0xa1, 0x8f, 0xe7, 0x73, 0x2a, 0x29, 0x4b, 0x71, 0x3c, 0xc5, 0x91, 0xeb, 0x68, 0x97, 0xb6,
0xd2, 0x3f, 0x86, 0xfe, 0x38, 0xc9, 0x18, 0x97, 0x8d, 0xaa, 0x73, 0x72, 0x4d, 0x38, 0x49, 0x67,
0x55, 0xd5, 0x2b, 0x05, 0x42, 0xb0, 0x3e, 0xc7, 0x12, 0xeb, 0x92, 0xef, 0x84, 0xfa, 0xdb, 0xff,
0x0c, 0x06, 0x65, 0x08, 0x91, 0xb1, 0x54, 0xe8, 0xde, 0xd0, 0x04, 0x47, 0x64, 0x7c, 0x66, 0x22,
0x94, 0xa2, 0x7f, 0x0e, 0x4e, 0x23, 0x21, 0xf4, 0x55, 0xd9, 0x62, 0x9a, 0x14, 0x97, 0x39, 0x47,
0x5e, 0x50, 0x10, 0x25, 0x28, 0x89, 0x12, 0x4c, 0x4b, 0xa2, 0x84, 0xb5, 0xb3, 0xff, 0x1c, 0xfa,
0x86, 0x2c, 0xf7, 0xdd, 0xb9, 0x12, 0xf3, 0xa7, 0xd0, 0x57, 0x10, 0x72, 0x51, 0xa6, 0xdd, 0xa0,
0x93, 0xd5, 0xa2, 0x93, 0x4a, 0xaf, 0x74, 0xad, 0xaf, 0x9a, 0x19, 0xf2, 0x18, 0x5f, 0x23, 0xfa,
0x9f, 0x83, 0x73, 0x41, 0x45, 0xb3, 0x96, 0x1a, 0xc4, 0x04, 0x27, 0x55, 0x2d, 0x2b, 0x85, 0xff,
0x25, 0xc0, 0x14, 0x47, 0xa5, 0xef, 0x43, 0xd8, 0xd0, 0x26, 0xe3, 0x57, 0x08, 0x68, 0x17, 0x7a,
0x12, 0x47, 0x86, 0xe1, 0xea, 0xd3, 0xff, 0xc7, 0x82, 0x9d, 0xe2, 0x0e, 0x83, 0xe6, 0x1b, 0xb0,
0xb5, 0xaf, 0x70, 0xad, 0x61, 0x6f, 0xe4, 0x1c, 0x7d, 0xb2, 0xcc, 0xa0, 0xa6, 0x77, 0x30, 0xd6,
0x45, 0x49, 0xaf, 0x59, 0x68, 0x4e, 0x79, 0x7f, 0xc0, 0x76, 0xa5, 0x54, 0xa4, 0xe2, 0x24, 0x63,
0x82, 0x4a, 0xc6, 0x17, 0x06, 0x4a, 0x43, 0xd3, 0xc5, 0x83, 0x06, 0xb0, 0x46, 0xe7, 0x66, 0xca,
0xd6, 0xe8, 0x5c, 0x17, 0x87, 0x13, 0x2c, 0xc9, 0xdc, 0x4c, 0x56, 0x29, 0xaa, 0x3e, 0x08, 0xfa,
0x3b, 0x31, 0x33, 0xa5, 0xbf, 0xfd, 0xbf, 0x2d, 0x78, 0xf0, 0x9a, 0x70, 0x41, 0x59, 0xda, 0x2c,
0xef, 0x6d, 0xa1, 0x2a, 0xcb, 0x6b, 0x44, 0x55, 0xcf, 0x88, 0x19, 0x77, 0x83, 0xa1, 0x56, 0x68,
0x2b, 0x95, 0xa7, 0x2c, 0x49, 0xa8, 0x34, 0x80, 0x6a, 0x45, 0xbd, 0x4d, 0x14, 0xd5, 0xd6, 0x9b,
0xdb, 0x84, 0x26, 0x44, 0x4f, 0xbc, 0x38, 0xe6, 0xb3, 0x9b, 0x6a, 0xe2, 0xb5, 0xe4, 0xff, 0x08,
0xfd, 0x90, 0x24, 0xec, 0x96, 0x34, 0x78, 0x52, 0xd3, 0xac, 0xd7, 0xa4, 0xd9, 0x2e, 0xf4, 0x70,
0x1c, 0x6b, 0x58, 0x5b, 0xa1, 0xfa, 0x2c, 0x16, 0x42, 0x9e, 0x12, 0x0d, 0x46, 0x2f, 0x84, 0x3c,
0x55, 0x6d, 0x1f, 0x94, 0x21, 0x4d, 0xc2, 0x3e, 0xec, 0xc4, 0x78, 0x41, 0xf8, 0x0f, 0x44, 0x88,
0x9a, 0x01, 0x2d, 0x9d, 0xff, 0x97, 0x05, 0xef, 0x7f, 0x47, 0x70, 0x2c, 0x6f, 0x4e, 0x6f, 0xc8,
0xec, 0x4d, 0x75, 0x76, 0x0c, 0xb6, 0xd0, 0xec, 0xd4, 0xa7, 0x06, 0x47, 0x4f, 0x97, 0xbb, 0xbf,
0xe2, 0x50, 0x70, 0xa9, 0xf6, 0x79, 0x1a, 0x19, 0x5a, 0x9b, 0x00, 0xfe, 0xd7, 0xd0, 0x6f, 0x19,
0x90, 0x03, 0x9b, 0x3f, 0x4d, 0x5e, 0x4e, 0x5e, 0xfd, 0x3c, 0xd9, 0x7d, 0x4f, 0x09, 0x97, 0x2f,
0xc2, 0xd7, 0xe3, 0xc9, 0xf9, 0xae, 0x85, 0x1e, 0x80, 0x33, 0x79, 0x35, 0xfd, 0xa5, 0x54, 0xac,
0xf9, 0x19, 0xec, 0x5c, 0xb0, 0x88, 0xa6, 0x65, 0x99, 0xf6, 0xc0, 0x56, 0x8f, 0x06, 0xe1, 0x26,
0x19, 0x23, 0x21, 0x0f, 0xb6, 0x72, 0x41, 0x78, 0xaa, 0x06, 0xa2, 0x68, 0x60, 0x25, 0x2b, 0x5b,
0x86, 0x85, 0xf8, 0x8d, 0xf1, 0x92, 0x4f, 0x95, 0xac, 0x8a, 0xfb, 0x86, 0x2c, 0x4c, 0xdf, 0xd4,
0xa7, 0x9a, 0x60, 0x73, 0xe3, 0xbd, 0x53, 0xf9, 0x4c, 0xbb, 0xb2, 0x5c, 0xde, 0x87, 0xae, 0xd3,
0x42, 0x7f, 0x04, 0x83, 0xf2, 0xa8, 0xb9, 0x66, 0x0f, 0x6c, 0x4e, 0x44, 0x1e, 0x97, 0xb7, 0x18,
0xc9, 0xff, 0x10, 0x9c, 0x0b, 0x86, 0xab, 0xc7, 0x0b, 0xc1, 0x7a, 0x86, 0xe5, 0x8d, 0x71, 0xd2,
0xdf, 0xfe, 0x48, 0x15, 0x09, 0xbf, 0xc3, 0xca, 0x3a, 0xfa, 0xd3, 0x86, 0xcd, 0xd3, 0xe2, 0xad,
0x45, 0xdf, 0xc2, 0x86, 0xde, 0x74, 0xe8, 0x60, 0xe5, 0xd3, 0x60, 0x2e, 0xf4, 0x3e, 0xb8, 0xc3,
0x5a, 0xdc, 0xf5, 0xc4, 0x52, 0x4c, 0x31, 0x7d, 0xed, 0xb8, 0xb6, 0x56, 0xa1, 0xf7, 0xe8, 0x2e,
0x73, 0x15, 0xea, 0x18, 0xd6, 0xd5, 0x52, 0x41, 0xfb, 0xab, 0x57, 0x4d, 0x11, 0xe6, 0xe0, 0xff,
0xf6, 0x10, 0x3a, 0x81, 0xcd, 0x72, 0x6e, 0xf7, 0x3a, 0x1b, 0xff, 0x85, 0xfa, 0x6f, 0xf0, 0x1e,
0x2f, 0x07, 0x58, 0x5e, 0x14, 0x63, 0xb0, 0x8b, 0x49, 0xea, 0x66, 0xd4, 0x1a, 0xda, 0x6e, 0x46,
0xed, 0x01, 0x7c, 0x62, 0xa1, 0xef, 0xc1, 0x69, 0x0c, 0xca, 0x9d, 0x90, 0x3e, 0x7a, 0x87, 0xe9,
0x42, 0x67, 0xb0, 0xa1, 0x99, 0xd9, 0x6d, 0x58, 0x73, 0x44, 0xba, 0x0d, 0x6b, 0xd3, 0xf9, 0x1c,
0xec, 0x82, 0x79, 0x68, 0x95, 0x63, 0x4d, 0xe6, 0x6e, 0x72, 0x4b, 0x84, 0x55, 0xcd, 0x62, 0x78,
0xbe, 0xa2, 0x59, 0x35, 0x5d, 0x57, 0x34, 0xab, 0x49, 0xd4, 0x31, 0xd8, 0xc5, 0x0b, 0xdf, 0xc5,
0xd2, 0xfa, 0x79, 0xe8, 0x62, 0x69, 0xff, 0x18, 0x8c, 0x2c, 0xf4, 0x4c, 0x3f, 0x20, 0xc8, 0x5b,
0x76, 0xac, 0x5f, 0x42, 0xef, 0x8e, 0xe2, 0x5f, 0xd9, 0x5a, 0xfe, 0xe2, 0xbf, 0x00, 0x00, 0x00,
0xff, 0xff, 0x9f, 0xe9, 0xe5, 0xf2, 0x93, 0x0a, 0x00, 0x00,
// 1044 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x56, 0x6d, 0x6f, 0xdc, 0xc4,
0x13, 0xff, 0x3b, 0x77, 0x71, 0x92, 0x71, 0xee, 0x1a, 0xed, 0xbf, 0x8a, 0x2c, 0x27, 0xb4, 0x87,
0x41, 0xe8, 0x00, 0xc9, 0x69, 0x03, 0x2f, 0x68, 0xa5, 0x22, 0xe5, 0xa1, 0x84, 0xa3, 0xe1, 0x2a,
0x9c, 0x50, 0x5e, 0xa2, 0xcd, 0xdd, 0xc6, 0x59, 0xd5, 0xf6, 0x9a, 0xdd, 0x75, 0xe8, 0xc1, 0xd7,
0xe0, 0x25, 0x7c, 0x22, 0x3e, 0x0e, 0x5f, 0x00, 0xed, 0x7a, 0xfd, 0x74, 0xbe, 0x90, 0xbe, 0xf3,
0x3c, 0xec, 0xec, 0x6f, 0x66, 0x7e, 0x33, 0x6b, 0xf0, 0x70, 0x46, 0x0f, 0x04, 0xe1, 0xb7, 0x74,
0x46, 0xc4, 0xc1, 0x8c, 0xa5, 0x92, 0xb3, 0x38, 0xc8, 0x38, 0x93, 0x0c, 0x0d, 0xa9, 0xc8, 0x63,
0x1c, 0x5c, 0xe5, 0x34, 0x9e, 0x07, 0xb7, 0x4f, 0xbd, 0xbd, 0x88, 0xb1, 0x28, 0x26, 0x07, 0xda,
0x7a, 0x95, 0x5f, 0x1f, 0x90, 0x24, 0x93, 0x8b, 0xc2, 0xd9, 0x7b, 0xbc, 0x6c, 0x94, 0x34, 0x21,
0x42, 0xe2, 0x24, 0x2b, 0x1c, 0xfc, 0x7f, 0xd6, 0x60, 0xfb, 0x58, 0x85, 0x0a, 0xc9, 0x2f, 0x39,
0x11, 0x12, 0xed, 0xc3, 0x96, 0x0e, 0x7d, 0xb9, 0xc8, 0x88, 0x6b, 0x8d, 0xac, 0xf1, 0x56, 0x58,
0x2b, 0x90, 0x0b, 0x1b, 0x5a, 0x98, 0x9c, 0xba, 0x6b, 0xda, 0x56, 0x8a, 0xe8, 0x11, 0x80, 0xc2,
0x49, 0xde, 0xc9, 0x53, 0xca, 0xdd, 0x9e, 0x36, 0x36, 0x34, 0x68, 0x04, 0xce, 0x35, 0x8d, 0xc9,
0x89, 0xd2, 0xa4, 0xd2, 0xed, 0x6b, 0x87, 0xa6, 0x0a, 0xed, 0x82, 0xcd, 0x72, 0x99, 0xe5, 0xd2,
0x5d, 0xd7, 0x46, 0x23, 0x55, 0x88, 0x8e, 0x78, 0x24, 0x5c, 0x7b, 0xd4, 0xab, 0x10, 0x29, 0x05,
0x7a, 0x08, 0xeb, 0x19, 0x67, 0xef, 0x16, 0xee, 0xc6, 0xc8, 0x1a, 0x6f, 0x86, 0x85, 0xa0, 0x70,
0x52, 0x3a, 0x57, 0xd1, 0xdd, 0xcd, 0x02, 0xa7, 0x11, 0xd1, 0x0b, 0x70, 0xf4, 0xe1, 0x0b, 0x89,
0x25, 0x9d, 0xb9, 0x5b, 0x23, 0x6b, 0xec, 0x1c, 0xee, 0x05, 0xed, 0xa2, 0x06, 0xc7, 0xb5, 0x4b,
0xd8, 0xf4, 0x57, 0x69, 0x92, 0x74, 0xc6, 0x17, 0x99, 0x7c, 0x45, 0x16, 0x2e, 0x14, 0x69, 0xd6,
0x1a, 0xf4, 0x31, 0x0c, 0xf0, 0x7c, 0x4e, 0x25, 0x65, 0x29, 0x8e, 0x2f, 0x71, 0xe4, 0x3a, 0xda,
0xa5, 0xad, 0xf4, 0x8f, 0x60, 0x30, 0x49, 0x32, 0xc6, 0x65, 0xa3, 0xea, 0x9c, 0x5c, 0x13, 0x4e,
0xd2, 0x59, 0x55, 0xf5, 0x4a, 0x81, 0x10, 0xf4, 0xe7, 0x58, 0x62, 0x5d, 0xf2, 0xed, 0x50, 0x7f,
0xfb, 0x9f, 0xc1, 0xb0, 0x0c, 0x21, 0x32, 0x96, 0x0a, 0xdd, 0x1b, 0x9a, 0xe0, 0x88, 0x4c, 0x4e,
0x4d, 0x84, 0x52, 0xf4, 0xcf, 0xc0, 0x69, 0x24, 0x84, 0xbe, 0x2a, 0x5b, 0x4c, 0x93, 0xe2, 0x32,
0xe7, 0xd0, 0x0b, 0x0a, 0xa2, 0x04, 0x25, 0x51, 0x82, 0xcb, 0x92, 0x28, 0x61, 0xed, 0xec, 0xbf,
0x80, 0x81, 0x21, 0xcb, 0x7d, 0x77, 0xae, 0xc4, 0xfc, 0x29, 0x0c, 0x14, 0x84, 0x5c, 0x94, 0x69,
0x37, 0xe8, 0x64, 0xb5, 0xe8, 0xa4, 0xd2, 0x2b, 0x5d, 0xeb, 0xab, 0x66, 0x86, 0x3c, 0xc6, 0xd7,
0x88, 0xfe, 0xe7, 0xe0, 0x9c, 0x53, 0xd1, 0xac, 0xa5, 0x06, 0x31, 0xc5, 0x49, 0x55, 0xcb, 0x4a,
0xe1, 0x7f, 0x09, 0x70, 0x89, 0xa3, 0xd2, 0xf7, 0x21, 0xac, 0x6b, 0x93, 0xf1, 0x2b, 0x04, 0xb4,
0x03, 0x3d, 0x89, 0x23, 0xc3, 0x70, 0xf5, 0xe9, 0xff, 0x6d, 0xc1, 0x76, 0x71, 0x87, 0x41, 0xf3,
0x35, 0xd8, 0xda, 0x57, 0xb8, 0xd6, 0xa8, 0x37, 0x76, 0x0e, 0x3f, 0x59, 0x66, 0x50, 0xd3, 0x3b,
0x98, 0xe8, 0xa2, 0xa4, 0xd7, 0x2c, 0x34, 0xa7, 0xbc, 0xdf, 0x61, 0xab, 0x52, 0x2a, 0x52, 0x71,
0x92, 0x31, 0x41, 0x25, 0xe3, 0x0b, 0x03, 0xa5, 0xa1, 0xe9, 0xe2, 0x41, 0x43, 0x58, 0xa3, 0x73,
0x33, 0x65, 0x6b, 0x74, 0xae, 0x8b, 0xc3, 0x09, 0x96, 0x64, 0x6e, 0x26, 0xab, 0x14, 0x55, 0x1f,
0x04, 0xfd, 0x8d, 0x98, 0x99, 0xd2, 0xdf, 0xfe, 0x5f, 0x16, 0x3c, 0x78, 0x43, 0xb8, 0xa0, 0x2c,
0x6d, 0x96, 0xf7, 0xb6, 0x50, 0x95, 0xe5, 0x35, 0xa2, 0xaa, 0x67, 0xc4, 0x8c, 0xbb, 0xc1, 0x50,
0x2b, 0xb4, 0x95, 0xca, 0x13, 0x96, 0x24, 0x54, 0x1a, 0x40, 0xb5, 0xa2, 0xde, 0x26, 0x8a, 0x6a,
0xfd, 0xe6, 0x36, 0xa1, 0x09, 0xd1, 0x13, 0x2f, 0x8e, 0xf8, 0xec, 0xa6, 0x9a, 0x78, 0x2d, 0xf9,
0x3f, 0xc0, 0x20, 0x24, 0x09, 0xbb, 0x25, 0x0d, 0x9e, 0xd4, 0x34, 0xeb, 0x35, 0x69, 0xb6, 0x03,
0x3d, 0x1c, 0xc7, 0x1a, 0xd6, 0x66, 0xa8, 0x3e, 0x8b, 0x85, 0x90, 0xa7, 0x44, 0x83, 0xd1, 0x0b,
0x21, 0x4f, 0x55, 0xdb, 0x87, 0x65, 0x48, 0x93, 0xb0, 0x0f, 0xdb, 0x31, 0x5e, 0x10, 0xfe, 0x3d,
0x11, 0xa2, 0x66, 0x40, 0x4b, 0xe7, 0xff, 0x69, 0xc1, 0xff, 0xbf, 0x25, 0x38, 0x96, 0x37, 0x27,
0x37, 0x64, 0xf6, 0xb6, 0x3a, 0x3b, 0x01, 0x5b, 0x68, 0x76, 0xea, 0x53, 0xc3, 0xc3, 0xa7, 0xcb,
0xdd, 0x5f, 0x71, 0x28, 0xb8, 0x50, 0xfb, 0x3c, 0x8d, 0x0c, 0xad, 0x4d, 0x00, 0xff, 0x39, 0x0c,
0x5a, 0x06, 0xe4, 0xc0, 0xc6, 0x8f, 0xd3, 0x57, 0xd3, 0xd7, 0x3f, 0x4d, 0x77, 0xfe, 0xa7, 0x84,
0x8b, 0x97, 0xe1, 0x9b, 0xc9, 0xf4, 0x6c, 0xc7, 0x42, 0x0f, 0xc0, 0x99, 0xbe, 0xbe, 0xfc, 0xb9,
0x54, 0xac, 0xf9, 0x19, 0x6c, 0x9f, 0xb3, 0x88, 0xa6, 0x65, 0x99, 0x76, 0xc1, 0x56, 0x8f, 0x06,
0xe1, 0x26, 0x19, 0x23, 0x21, 0x0f, 0x36, 0x73, 0x41, 0x78, 0xaa, 0x06, 0xa2, 0x68, 0x60, 0x25,
0x2b, 0x5b, 0x86, 0x85, 0xf8, 0x95, 0xf1, 0x92, 0x4f, 0x95, 0xac, 0x8a, 0xfb, 0x96, 0x2c, 0x4c,
0xdf, 0xd4, 0xa7, 0x9a, 0x60, 0x73, 0xe3, 0xbd, 0x53, 0xf9, 0x4c, 0xbb, 0xb2, 0x5c, 0xde, 0x87,
0xae, 0xd3, 0x42, 0x7f, 0x0c, 0xc3, 0xf2, 0xa8, 0xb9, 0x66, 0x17, 0x6c, 0x4e, 0x44, 0x1e, 0x97,
0xb7, 0x18, 0xc9, 0xff, 0x10, 0x9c, 0x73, 0x86, 0xab, 0xc7, 0x0b, 0x41, 0x3f, 0xc3, 0xf2, 0xc6,
0x38, 0xe9, 0x6f, 0xff, 0xb9, 0x2a, 0x12, 0x7e, 0x9f, 0x95, 0xb5, 0x03, 0xbd, 0x98, 0x55, 0x63,
0x16, 0xb3, 0xe8, 0xf0, 0x0f, 0x1b, 0x36, 0x4e, 0x8a, 0xd7, 0x17, 0x7d, 0x03, 0xeb, 0x7a, 0xf7,
0xa1, 0xfd, 0x95, 0x8f, 0x85, 0x81, 0xe0, 0x7d, 0x70, 0x87, 0xb5, 0xb8, 0xfd, 0x89, 0xa5, 0xb8,
0x63, 0x3a, 0xdd, 0x71, 0x6d, 0x2d, 0x47, 0xef, 0xd1, 0x5d, 0xe6, 0x2a, 0xd4, 0x11, 0xf4, 0xd5,
0x9a, 0x41, 0x7b, 0xab, 0x97, 0x4f, 0x11, 0x66, 0xff, 0xbf, 0x36, 0x13, 0x3a, 0x86, 0x8d, 0x72,
0x92, 0x77, 0x3b, 0x6f, 0xc0, 0x4b, 0xf5, 0x27, 0xe1, 0x3d, 0x5e, 0x0e, 0xb0, 0xbc, 0x3a, 0x26,
0x60, 0x17, 0xb3, 0xd5, 0xcd, 0xa8, 0x35, 0xc6, 0xdd, 0x8c, 0xda, 0x23, 0xf9, 0xc4, 0x42, 0xdf,
0x81, 0xd3, 0x18, 0x9d, 0x3b, 0x21, 0x7d, 0xf4, 0x1e, 0xf3, 0x86, 0x4e, 0x61, 0x5d, 0x73, 0xb5,
0xdb, 0xb0, 0xe6, 0xd0, 0x74, 0x1b, 0xd6, 0x26, 0xf8, 0x19, 0xd8, 0x05, 0x17, 0xd1, 0x2a, 0xc7,
0x9a, 0xde, 0xdd, 0xe4, 0x96, 0x28, 0x7c, 0x02, 0x7d, 0xc5, 0xc3, 0x15, 0xcd, 0xaa, 0x09, 0xbc,
0xa2, 0x59, 0x0d, 0xea, 0x16, 0xe4, 0x29, 0x5e, 0xfd, 0x2e, 0x9a, 0xd6, 0x0f, 0x45, 0x17, 0x4d,
0xfb, 0x67, 0x61, 0x6c, 0xa1, 0x67, 0xfa, 0x51, 0x41, 0xde, 0xb2, 0x63, 0xfd, 0x3a, 0x7a, 0x77,
0x94, 0xff, 0xca, 0xd6, 0xf2, 0x17, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x91, 0x70, 0xf4, 0x02,
0xa7, 0x0a, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
......@@ -1235,7 +1246,7 @@ type ControlClient interface {
// Logout requests to logout registry and delete any credentials
Logout(ctx context.Context, in *LogoutRequest, opts ...grpc.CallOption) (*LogoutResponse, error)
// Load requests an image tar load
Load(ctx context.Context, in *LoadRequest, opts ...grpc.CallOption) (*LoadResponse, error)
Load(ctx context.Context, in *LoadRequest, opts ...grpc.CallOption) (Control_LoadClient, error)
// Import requests import a new image
Import(ctx context.Context, opts ...grpc.CallOption) (Control_ImportClient, error)
// Tag requests to tag an image
......@@ -1391,17 +1402,40 @@ func (c *controlClient) Logout(ctx context.Context, in *LogoutRequest, opts ...g
return out, nil
}
func (c *controlClient) Load(ctx context.Context, in *LoadRequest, opts ...grpc.CallOption) (*LoadResponse, error) {
out := new(LoadResponse)
err := c.cc.Invoke(ctx, "/isula.build.v1.Control/Load", in, out, opts...)
func (c *controlClient) Load(ctx context.Context, in *LoadRequest, opts ...grpc.CallOption) (Control_LoadClient, error) {
stream, err := c.cc.NewStream(ctx, &_Control_serviceDesc.Streams[3], "/isula.build.v1.Control/Load", opts...)
if err != nil {
return nil, err
}
return out, nil
x := &controlLoadClient{stream}
if err := x.ClientStream.SendMsg(in); err != nil {
return nil, err
}
if err := x.ClientStream.CloseSend(); err != nil {
return nil, err
}
return x, nil
}
type Control_LoadClient interface {
Recv() (*LoadResponse, error)
grpc.ClientStream
}
type controlLoadClient struct {
grpc.ClientStream
}
func (x *controlLoadClient) Recv() (*LoadResponse, error) {
m := new(LoadResponse)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
return m, nil
}
func (c *controlClient) Import(ctx context.Context, opts ...grpc.CallOption) (Control_ImportClient, error) {
stream, err := c.cc.NewStream(ctx, &_Control_serviceDesc.Streams[3], "/isula.build.v1.Control/Import", opts...)
stream, err := c.cc.NewStream(ctx, &_Control_serviceDesc.Streams[4], "/isula.build.v1.Control/Import", opts...)
if err != nil {
return nil, err
}
......@@ -1462,7 +1496,7 @@ type ControlServer interface {
// Logout requests to logout registry and delete any credentials
Logout(context.Context, *LogoutRequest) (*LogoutResponse, error)
// Load requests an image tar load
Load(context.Context, *LoadRequest) (*LoadResponse, error)
Load(*LoadRequest, Control_LoadServer) error
// Import requests import a new image
Import(Control_ImportServer) error
// Tag requests to tag an image
......@@ -1497,8 +1531,8 @@ func (*UnimplementedControlServer) Login(ctx context.Context, req *LoginRequest)
func (*UnimplementedControlServer) Logout(ctx context.Context, req *LogoutRequest) (*LogoutResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Logout not implemented")
}
func (*UnimplementedControlServer) Load(ctx context.Context, req *LoadRequest) (*LoadResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method Load not implemented")
func (*UnimplementedControlServer) Load(req *LoadRequest, srv Control_LoadServer) error {
return status.Errorf(codes.Unimplemented, "method Load not implemented")
}
func (*UnimplementedControlServer) Import(srv Control_ImportServer) error {
return status.Errorf(codes.Unimplemented, "method Import not implemented")
......@@ -1664,22 +1698,25 @@ func _Control_Logout_Handler(srv interface{}, ctx context.Context, dec func(inte
return interceptor(ctx, in, info, handler)
}
func _Control_Load_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(LoadRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ControlServer).Load(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/isula.build.v1.Control/Load",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ControlServer).Load(ctx, req.(*LoadRequest))
func _Control_Load_Handler(srv interface{}, stream grpc.ServerStream) error {
m := new(LoadRequest)
if err := stream.RecvMsg(m); err != nil {
return err
}
return interceptor(ctx, in, info, handler)
return srv.(ControlServer).Load(m, &controlLoadServer{stream})
}
type Control_LoadServer interface {
Send(*LoadResponse) error
grpc.ServerStream
}
type controlLoadServer struct {
grpc.ServerStream
}
func (x *controlLoadServer) Send(m *LoadResponse) error {
return x.ServerStream.SendMsg(m)
}
func _Control_Import_Handler(srv interface{}, stream grpc.ServerStream) error {
......@@ -1750,10 +1787,6 @@ var _Control_serviceDesc = grpc.ServiceDesc{
MethodName: "Logout",
Handler: _Control_Logout_Handler,
},
{
MethodName: "Load",
Handler: _Control_Load_Handler,
},
{
MethodName: "tag",
Handler: _Control_Tag_Handler,
......@@ -1775,6 +1808,11 @@ var _Control_serviceDesc = grpc.ServiceDesc{
Handler: _Control_Remove_Handler,
ServerStreams: true,
},
{
StreamName: "Load",
Handler: _Control_Load_Handler,
ServerStreams: true,
},
{
StreamName: "Import",
Handler: _Control_Import_Handler,
......
......@@ -35,7 +35,7 @@ service Control {
// Logout requests to logout registry and delete any credentials
rpc Logout(LogoutRequest) returns (LogoutResponse);
// Load requests an image tar load
rpc Load(LoadRequest) returns (LoadResponse);
rpc Load(LoadRequest) returns (stream LoadResponse);
// Import requests import a new image
rpc Import(stream ImportRequest) returns (ImportResponse);
// Tag requests to tag an image
......@@ -196,6 +196,6 @@ message LoadRequest {
}
message LoadResponse {
// imageID is the ID of loaded image
string imageID = 1;
// log is the log sent to client
string log = 1;
}
......@@ -68,6 +68,11 @@ func (f *mockDaemon) importImage(_ context.Context, opts ...grpc.CallOption) (pb
return &mockImportClient{}, nil
}
func (f *mockDaemon) load(_ context.Context, in *pb.LoadRequest, opts ...grpc.CallOption) (pb.Control_LoadClient, error) {
f.loadReq = in
return &mockLoadClient{}, nil
}
func (f *mockDaemon) build(_ context.Context, in *pb.BuildRequest, opts ...grpc.CallOption) (pb.Control_BuildClient, error) {
f.buildReq = in
return &mockBuildClient{}, nil
......
......@@ -39,7 +39,7 @@ type mockGrpcClient struct {
healthCheckFunc func(ctx context.Context, in *types.Empty, opts ...grpc.CallOption) (*pb.HealthCheckResponse, error)
loginFunc func(ctx context.Context, in *pb.LoginRequest, opts ...grpc.CallOption) (*pb.LoginResponse, error)
logoutFunc func(ctx context.Context, in *pb.LogoutRequest, opts ...grpc.CallOption) (*pb.LogoutResponse, error)
loadFunc func(ctx context.Context, in *pb.LoadRequest, opts ...grpc.CallOption) (*pb.LoadResponse, error)
loadFunc func(ctx context.Context, in *pb.LoadRequest, opts ...grpc.CallOption) (pb.Control_LoadClient, error)
importFunc func(ctx context.Context, opts ...grpc.CallOption) (pb.Control_ImportClient, error)
}
......@@ -118,7 +118,7 @@ func (gcli *mockGrpcClient) Logout(ctx context.Context, in *pb.LogoutRequest, op
return &pb.LogoutResponse{Result: "Success Logout"}, nil
}
func (gcli *mockGrpcClient) Load(ctx context.Context, in *pb.LoadRequest, opts ...grpc.CallOption) (*pb.LoadResponse, error) {
func (gcli *mockGrpcClient) Load(ctx context.Context, in *pb.LoadRequest, opts ...grpc.CallOption) (pb.Control_LoadClient, error) {
if gcli.loadFunc != nil {
return gcli.loadFunc(ctx, in, opts...)
}
......@@ -142,6 +142,10 @@ type mockRemoveClient struct {
grpc.ClientStream
}
type mockLoadClient struct {
grpc.ClientStream
}
func (bcli *mockBuildClient) Recv() (*pb.BuildResponse, error) {
resp := &pb.BuildResponse{
ImageID: imageID,
......@@ -178,6 +182,13 @@ func (rcli *mockRemoveClient) Recv() (*pb.RemoveResponse, error) {
return resp, io.EOF
}
func (lcli *mockLoadClient) Recv() (*pb.LoadResponse, error) {
resp := &pb.LoadResponse{
Log: "Getting image source signatures",
}
return resp, io.EOF
}
func TestGetStartTimeout(t *testing.T) {
type args struct {
timeout string
......
......@@ -18,6 +18,7 @@ package main
import (
"context"
"fmt"
"io"
"os"
"path/filepath"
......@@ -44,6 +45,7 @@ func NewLoadCmd() *cobra.Command {
Use: "load",
Short: "Load images",
Example: loadExample,
Args: util.NoArgs,
RunE: loadCommand,
}
......@@ -59,28 +61,13 @@ func loadCommand(cmd *cobra.Command, args []string) error {
return err
}
return runLoad(ctx, cli, args)
return runLoad(ctx, cli)
}
func runLoad(ctx context.Context, cli Cli, args []string) error {
if len(args) > 0 {
return errors.New("load accepts no arguments")
}
// check input
if len(loadOpts.path) == 0 {
return errors.New("tarball path should not be empty")
}
if !filepath.IsAbs(loadOpts.path) {
pwd, err := os.Getwd()
if err != nil {
return errors.New("get current path failed")
}
loadOpts.path = util.MakeAbsolute(loadOpts.path, pwd)
}
func runLoad(ctx context.Context, cli Cli) error {
var err error
if err := util.CheckLoadFile(loadOpts.path); err != nil {
if loadOpts.path, err = resolveLoadPath(loadOpts.path); err != nil {
return err
}
......@@ -91,9 +78,39 @@ func runLoad(ctx context.Context, cli Cli, args []string) error {
return err
}
if resp != nil {
fmt.Printf("Imported image as %v\n", resp.ImageID)
for {
msg, rerr := resp.Recv()
if msg != nil {
fmt.Print(msg.Log)
}
if rerr != nil {
if rerr != io.EOF {
err = rerr
}
break
}
}
return err
}
func resolveLoadPath(path string) (string, error) {
// check input
if path == "" {
return "", errors.New("tarball path should not be empty")
}
if !filepath.IsAbs(path) {
pwd, err := os.Getwd()
if err != nil {
return "", errors.Wrap(err, "get current path failed while loading image")
}
path = util.MakeAbsolute(path, pwd)
}
if err := util.CheckLoadFile(path); err != nil {
return "", err
}
return nil
return path, nil
}
......@@ -25,9 +25,9 @@ import (
)
func TestRunLoad(t *testing.T) {
args := make([]string, 0, 0)
ctx := context.Background()
cli := newMockClient(&mockGrpcClient{})
mockDaemon := newMockDaemon()
cli := newMockClient(&mockGrpcClient{loadFunc: mockDaemon.load})
fileEmpty := "empty.tar"
fileNormal := "test.tar"
......@@ -67,7 +67,7 @@ func TestRunLoad(t *testing.T) {
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
loadOpts.path = tc.path
err := runLoad(ctx, &cli, args)
err := runLoad(ctx, &cli)
assert.Equal(t, err != nil, tc.isErr, "Failed at [%s], err: %v", tc.name, err)
if err != nil {
assert.ErrorContains(t, err, tc.errString)
......
......@@ -16,11 +16,13 @@
package daemon
import (
"context"
"path/filepath"
"github.com/containers/image/v5/docker/tarfile"
"github.com/containers/storage"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"golang.org/x/sync/errgroup"
constant "isula.org/isula-build"
pb "isula.org/isula-build/api/services"
......@@ -30,37 +32,65 @@ import (
)
// Load loads the image
func (b *Backend) Load(ctx context.Context, req *pb.LoadRequest) (*pb.LoadResponse, error) {
func (b *Backend) Load(req *pb.LoadRequest, stream pb.Control_LoadServer) error {
var si *storage.Image
logrus.Info("LoadRequest received")
if err := util.CheckLoadFile(req.Path); err != nil {
return &pb.LoadResponse{}, err
return err
}
tarfileSource, err := tarfile.NewSourceFromFile(req.Path)
// tmp dir will be removed after NewSourceFromFileWithContext
tmpDir := filepath.Join(b.daemon.opts.DataRoot, "tmp")
systemContext := image.GetSystemContext()
systemContext.BigFilesTemporaryDir = tmpDir
tarfileSource, err := tarfile.NewSourceFromFileWithContext(systemContext, req.Path)
if err != nil {
return &pb.LoadResponse{}, errors.Wrapf(err, "failed to get the source of loading tar file")
return errors.Wrapf(err, "failed to get the source of loading tar file")
}
topLevelImageManifest, err := tarfileSource.LoadTarManifest()
if err != nil || len(topLevelImageManifest) == 0 {
return &pb.LoadResponse{}, errors.Wrapf(err, "failed to get the top level image manifest")
return errors.Wrapf(err, "failed to get the top level image manifest")
}
_, si, err := image.ResolveFromImage(&image.PrepareImageOptions{
Ctx: ctx,
FromImage: "docker-archive:" + req.Path,
SystemContext: image.GetSystemContext(),
Store: b.daemon.localStore,
Reporter: logger.NewCliLogger(constant.CliLogBufferLen),
log := logger.NewCliLogger(constant.CliLogBufferLen)
eg, ctx := errgroup.WithContext(stream.Context())
eg.Go(func() error {
for c := range log.GetContent() {
if serr := stream.Send(&pb.LoadResponse{
Log: c,
}); serr != nil {
return serr
}
}
return nil
})
eg.Go(func() error {
defer log.CloseContent()
_, si, err = image.ResolveFromImage(&image.PrepareImageOptions{
Ctx: ctx,
FromImage: "docker-archive:" + req.Path,
SystemContext: image.GetSystemContext(),
Store: b.daemon.localStore,
Reporter: log,
})
if err != nil {
return err
}
if serr := b.daemon.localStore.SetNames(si.ID, topLevelImageManifest[0].RepoTags); serr != nil {
return serr
}
log.Print("Loaded image as %s\n", si.ID)
return nil
})
if err != nil {
return nil, err
}
if err := b.daemon.localStore.SetNames(si.ID, topLevelImageManifest[0].RepoTags); err != nil {
return nil, err
if werr := eg.Wait(); werr != nil {
return werr
}
logrus.Infof("Loaded image as %v", si.ID)
return &pb.LoadResponse{ImageID: si.ID}, nil
logrus.Infof("Loaded image as %s", si.ID)
return nil
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册