feat: use grpc-proxy in apid

This replaces codegen version of apid proxying with
talos-systems/grpc-proxy based version. Proxying is transparent, it
doesn't require exact information about methods and response types. It
requires some common layout response to enhance it properly with node
metadata or errors.

There should be no signifcant changes to the API with the previous
version, but it's worth mentioning a few changes:

1. grpc.ClientConn is established just once per upstream (either local
service or remote apid instance).

2. When called without `-t` (`targets`), apid proxies immediately down
to local service skipping proxying to itself (as before), which results
in empty node metadata in response (before it had local node IP). Might
revert this later to proxy to itself (?).

3. Streaming APIs are now fully supported with multiple targets, but
message definition doesn't contain `ResponseMetadata`, so streaming APIs
are broken now with targets (needs a fix).

4. Errors are now returned as responses with `Error` field set in
`ResponseMetadata`, this requires client library update and `osctl` to
handle it properly.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
This commit is contained in:
Andrey Smirnov
2019-11-27 23:39:38 +03:00
committed by Andrey Smirnov
parent 712275dfea
commit 5b7bea2471
36 changed files with 1560 additions and 2233 deletions

View File

@@ -18,7 +18,6 @@ RUN cd $(mktemp -d) \
&& go get mvdan.cc/gofumpt/gofumports \
&& mv /go/bin/gofumports /toolchain/go/bin/gofumports
RUN curl -sfL https://github.com/uber/prototool/releases/download/v1.8.0/prototool-Linux-x86_64.tar.gz | tar -xz --strip-components=2 -C /toolchain/bin prototool/bin/prototool
COPY --from=autonomy/protoc-gen-proxy:4a9e5da /protoc-gen-proxy /toolchain/bin/protoc-gen-proxy
COPY ./hack/docgen /go/src/github.com/talos-systems/docgen
RUN cd /go/src/github.com/talos-systems/docgen \
&& go build . \
@@ -52,15 +51,11 @@ COPY ./api/time/time.proto /api/time/time.proto
RUN protoc -I/api --go_out=plugins=grpc:/api/time /api/time/time.proto
COPY ./api/network/network.proto /api/network/network.proto
RUN protoc -I/api --go_out=plugins=grpc:/api/network /api/network/network.proto
# Genenrate api bits last so we have other proto files in place to satisfy the import
COPY ./api/api.proto /api/api.proto
RUN protoc -I/api --plugin=proxy --proxy_out=plugins=grpc+proxy:/api /api/api.proto
# Gofumports generated files to adjust import order
RUN gofumports -w -local github.com/talos-systems/talos /api/
FROM scratch AS generate
COPY --from=generate-build /api/common/github.com/talos-systems/talos/api/common/common.pb.go /api/common/
COPY --from=generate-build /api/github.com/talos-systems/talos/api/api.pb.go /api/
COPY --from=generate-build /api/os/github.com/talos-systems/talos/api/os/os.pb.go /api/os/
COPY --from=generate-build /api/security/github.com/talos-systems/talos/api/security/security.pb.go /api/security/
COPY --from=generate-build /api/machine/github.com/talos-systems/talos/api/machine/machine.pb.go /api/machine/

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +0,0 @@
syntax = "proto3";
package api;
option go_package = "github.com/talos-systems/talos/api";
import public "os/os.proto";
import public "machine/machine.proto";
import public "time/time.proto";
import public "network/network.proto";
import public "common/common.proto";
import public "google/protobuf/empty.proto";

View File

@@ -49,106 +49,72 @@ func (ContainerDriver) EnumDescriptor() ([]byte, []int) {
}
// Common metadata message nested in all reply message types
type NodeMetadata struct {
Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"`
type ResponseMetadata struct {
// hostname of the server response comes from (injected by proxy)
Hostname string `protobuf:"bytes,1,opt,name=hostname,proto3" json:"hostname,omitempty"`
// error is set if request failed to the upstream (rest of response is undefined)
Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *NodeMetadata) Reset() { *m = NodeMetadata{} }
func (m *NodeMetadata) String() string { return proto.CompactTextString(m) }
func (*NodeMetadata) ProtoMessage() {}
func (*NodeMetadata) Descriptor() ([]byte, []int) {
func (m *ResponseMetadata) Reset() { *m = ResponseMetadata{} }
func (m *ResponseMetadata) String() string { return proto.CompactTextString(m) }
func (*ResponseMetadata) ProtoMessage() {}
func (*ResponseMetadata) Descriptor() ([]byte, []int) {
return fileDescriptor_8f954d82c0b891f6, []int{0}
}
func (m *NodeMetadata) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_NodeMetadata.Unmarshal(m, b)
func (m *ResponseMetadata) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ResponseMetadata.Unmarshal(m, b)
}
func (m *NodeMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_NodeMetadata.Marshal(b, m, deterministic)
func (m *ResponseMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ResponseMetadata.Marshal(b, m, deterministic)
}
func (m *NodeMetadata) XXX_Merge(src proto.Message) {
xxx_messageInfo_NodeMetadata.Merge(m, src)
func (m *ResponseMetadata) XXX_Merge(src proto.Message) {
xxx_messageInfo_ResponseMetadata.Merge(m, src)
}
func (m *NodeMetadata) XXX_Size() int {
return xxx_messageInfo_NodeMetadata.Size(m)
func (m *ResponseMetadata) XXX_Size() int {
return xxx_messageInfo_ResponseMetadata.Size(m)
}
func (m *NodeMetadata) XXX_DiscardUnknown() {
xxx_messageInfo_NodeMetadata.DiscardUnknown(m)
func (m *ResponseMetadata) XXX_DiscardUnknown() {
xxx_messageInfo_ResponseMetadata.DiscardUnknown(m)
}
var xxx_messageInfo_NodeMetadata proto.InternalMessageInfo
var xxx_messageInfo_ResponseMetadata proto.InternalMessageInfo
func (m *NodeMetadata) GetHostname() string {
func (m *ResponseMetadata) GetHostname() string {
if m != nil {
return m.Hostname
}
return ""
}
// The response message containing the requested logs.
type Data struct {
Bytes []byte `protobuf:"bytes,1,opt,name=bytes,proto3" json:"bytes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Data) Reset() { *m = Data{} }
func (m *Data) String() string { return proto.CompactTextString(m) }
func (*Data) ProtoMessage() {}
func (*Data) Descriptor() ([]byte, []int) {
return fileDescriptor_8f954d82c0b891f6, []int{1}
}
func (m *Data) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Data.Unmarshal(m, b)
}
func (m *Data) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Data.Marshal(b, m, deterministic)
}
func (m *Data) XXX_Merge(src proto.Message) {
xxx_messageInfo_Data.Merge(m, src)
}
func (m *Data) XXX_Size() int {
return xxx_messageInfo_Data.Size(m)
}
func (m *Data) XXX_DiscardUnknown() {
xxx_messageInfo_Data.DiscardUnknown(m)
}
var xxx_messageInfo_Data proto.InternalMessageInfo
func (m *Data) GetBytes() []byte {
func (m *ResponseMetadata) GetError() string {
if m != nil {
return m.Bytes
return m.Error
}
return nil
return ""
}
type DataResponse struct {
Metadata *NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Bytes *Data `protobuf:"bytes,2,opt,name=bytes,proto3" json:"bytes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Bytes []byte `protobuf:"bytes,2,opt,name=bytes,proto3" json:"bytes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DataResponse) Reset() { *m = DataResponse{} }
func (m *DataResponse) String() string { return proto.CompactTextString(m) }
func (*DataResponse) ProtoMessage() {}
func (*DataResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_8f954d82c0b891f6, []int{2}
return fileDescriptor_8f954d82c0b891f6, []int{1}
}
func (m *DataResponse) XXX_Unmarshal(b []byte) error {
@@ -173,14 +139,14 @@ func (m *DataResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_DataResponse proto.InternalMessageInfo
func (m *DataResponse) GetMetadata() *NodeMetadata {
func (m *DataResponse) GetMetadata() *ResponseMetadata {
if m != nil {
return m.Metadata
}
return nil
}
func (m *DataResponse) GetBytes() *Data {
func (m *DataResponse) GetBytes() []byte {
if m != nil {
return m.Bytes
}
@@ -198,7 +164,7 @@ func (m *DataReply) Reset() { *m = DataReply{} }
func (m *DataReply) String() string { return proto.CompactTextString(m) }
func (*DataReply) ProtoMessage() {}
func (*DataReply) Descriptor() ([]byte, []int) {
return fileDescriptor_8f954d82c0b891f6, []int{3}
return fileDescriptor_8f954d82c0b891f6, []int{2}
}
func (m *DataReply) XXX_Unmarshal(b []byte) error {
@@ -230,32 +196,121 @@ func (m *DataReply) GetResponse() []*DataResponse {
return nil
}
type EmptyResponse struct {
Metadata *ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *EmptyResponse) Reset() { *m = EmptyResponse{} }
func (m *EmptyResponse) String() string { return proto.CompactTextString(m) }
func (*EmptyResponse) ProtoMessage() {}
func (*EmptyResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_8f954d82c0b891f6, []int{3}
}
func (m *EmptyResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EmptyResponse.Unmarshal(m, b)
}
func (m *EmptyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_EmptyResponse.Marshal(b, m, deterministic)
}
func (m *EmptyResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_EmptyResponse.Merge(m, src)
}
func (m *EmptyResponse) XXX_Size() int {
return xxx_messageInfo_EmptyResponse.Size(m)
}
func (m *EmptyResponse) XXX_DiscardUnknown() {
xxx_messageInfo_EmptyResponse.DiscardUnknown(m)
}
var xxx_messageInfo_EmptyResponse proto.InternalMessageInfo
func (m *EmptyResponse) GetMetadata() *ResponseMetadata {
if m != nil {
return m.Metadata
}
return nil
}
type EmptyReply struct {
Response []*EmptyResponse `protobuf:"bytes,1,rep,name=response,proto3" json:"response,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *EmptyReply) Reset() { *m = EmptyReply{} }
func (m *EmptyReply) String() string { return proto.CompactTextString(m) }
func (*EmptyReply) ProtoMessage() {}
func (*EmptyReply) Descriptor() ([]byte, []int) {
return fileDescriptor_8f954d82c0b891f6, []int{4}
}
func (m *EmptyReply) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EmptyReply.Unmarshal(m, b)
}
func (m *EmptyReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_EmptyReply.Marshal(b, m, deterministic)
}
func (m *EmptyReply) XXX_Merge(src proto.Message) {
xxx_messageInfo_EmptyReply.Merge(m, src)
}
func (m *EmptyReply) XXX_Size() int {
return xxx_messageInfo_EmptyReply.Size(m)
}
func (m *EmptyReply) XXX_DiscardUnknown() {
xxx_messageInfo_EmptyReply.DiscardUnknown(m)
}
var xxx_messageInfo_EmptyReply proto.InternalMessageInfo
func (m *EmptyReply) GetResponse() []*EmptyResponse {
if m != nil {
return m.Response
}
return nil
}
func init() {
proto.RegisterEnum("common.ContainerDriver", ContainerDriver_name, ContainerDriver_value)
proto.RegisterType((*NodeMetadata)(nil), "common.NodeMetadata")
proto.RegisterType((*Data)(nil), "common.Data")
proto.RegisterType((*ResponseMetadata)(nil), "common.ResponseMetadata")
proto.RegisterType((*DataResponse)(nil), "common.DataResponse")
proto.RegisterType((*DataReply)(nil), "common.DataReply")
proto.RegisterType((*EmptyResponse)(nil), "common.EmptyResponse")
proto.RegisterType((*EmptyReply)(nil), "common.EmptyReply")
}
func init() { proto.RegisterFile("common/common.proto", fileDescriptor_8f954d82c0b891f6) }
var fileDescriptor_8f954d82c0b891f6 = []byte{
// 254 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x90, 0xc1, 0x4b, 0xf3, 0x30,
0x18, 0xc6, 0xbf, 0x7e, 0xd3, 0xb9, 0xbd, 0x16, 0x1d, 0x71, 0x87, 0x21, 0x1e, 0x46, 0x4f, 0x5a,
0x71, 0x15, 0x3d, 0x7b, 0xd0, 0xd6, 0xc3, 0x0e, 0x56, 0x08, 0x9e, 0xbc, 0xa5, 0x36, 0xb8, 0xc2,
0x92, 0xb7, 0x24, 0xaf, 0x42, 0xff, 0x7b, 0x69, 0x92, 0x95, 0x9e, 0xc2, 0x43, 0x7e, 0x3c, 0xbf,
0x97, 0x07, 0x2e, 0xbe, 0x50, 0x29, 0xd4, 0x99, 0x7f, 0x36, 0xad, 0x41, 0x42, 0x36, 0xf5, 0x29,
0x49, 0x21, 0x2e, 0xb1, 0x96, 0x6f, 0x92, 0x44, 0x2d, 0x48, 0xb0, 0x4b, 0x98, 0xed, 0xd0, 0x92,
0x16, 0x4a, 0xae, 0xa2, 0x75, 0x74, 0x3d, 0xe7, 0x43, 0x4e, 0xae, 0xe0, 0xa8, 0xe8, 0x99, 0x25,
0x1c, 0x57, 0x1d, 0x49, 0xeb, 0x80, 0x98, 0xfb, 0x90, 0xd4, 0x10, 0xf7, 0xbf, 0x5c, 0xda, 0x16,
0xb5, 0x95, 0xec, 0x1e, 0x66, 0x2a, 0xb4, 0x3a, 0xf0, 0xf4, 0x61, 0xb9, 0x09, 0x27, 0x8c, 0x8d,
0x7c, 0xa0, 0x58, 0x72, 0xe8, 0xfd, 0xef, 0xf0, 0xf8, 0x80, 0xbb, 0xda, 0x60, 0x79, 0x82, 0xb9,
0xb7, 0xb4, 0xfb, 0xae, 0x57, 0x98, 0xa0, 0x5b, 0x45, 0xeb, 0xc9, 0x58, 0x31, 0x3e, 0x85, 0x0f,
0x54, 0x9a, 0xc2, 0x79, 0x8e, 0x9a, 0x44, 0xa3, 0xa5, 0x29, 0x4c, 0xf3, 0x2b, 0x0d, 0x3b, 0x03,
0xc8, 0xdf, 0xcb, 0x8f, 0xe7, 0x6d, 0xf9, 0xca, 0x8b, 0xc5, 0x3f, 0x76, 0x02, 0x93, 0x9c, 0x6f,
0x17, 0xd1, 0xcb, 0xed, 0xe7, 0xcd, 0x77, 0x43, 0xbb, 0x9f, 0xaa, 0xef, 0xcc, 0x48, 0xec, 0xd1,
0xde, 0xd9, 0xce, 0x92, 0x54, 0xd6, 0xa7, 0x4c, 0xb4, 0x4d, 0x58, 0xb5, 0x9a, 0xba, 0x59, 0x1f,
0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x4c, 0x3c, 0xf1, 0xf3, 0x6d, 0x01, 0x00, 0x00,
// 279 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0xd1, 0xcf, 0x4b, 0xc3, 0x30,
0x14, 0x07, 0x70, 0xeb, 0x70, 0x76, 0x6f, 0x53, 0x4b, 0x9c, 0x50, 0x3c, 0x8d, 0x9e, 0xe6, 0xc4,
0x55, 0xa7, 0x57, 0x11, 0x6d, 0x7b, 0xd8, 0xc1, 0x09, 0xc1, 0xd3, 0x6e, 0xa9, 0x06, 0x57, 0x58,
0x9a, 0x90, 0x3c, 0x85, 0xfe, 0xf7, 0xd2, 0x26, 0xad, 0xbf, 0x8e, 0x9e, 0xc2, 0x97, 0x3c, 0x3e,
0xef, 0x0b, 0x0f, 0x8e, 0x5f, 0xa4, 0x10, 0xb2, 0x8c, 0xed, 0x33, 0x57, 0x5a, 0xa2, 0x24, 0x7d,
0x9b, 0xa2, 0x14, 0x02, 0xca, 0x8d, 0x92, 0xa5, 0xe1, 0x8f, 0x1c, 0xd9, 0x2b, 0x43, 0x46, 0x4e,
0xc1, 0xdf, 0x48, 0x83, 0x25, 0x13, 0x3c, 0xf4, 0x26, 0xde, 0x74, 0x40, 0xbb, 0x4c, 0xc6, 0xb0,
0xc7, 0xb5, 0x96, 0x3a, 0xdc, 0x6d, 0x3e, 0x6c, 0x88, 0xd6, 0x30, 0x4a, 0x19, 0xb2, 0x56, 0x22,
0x37, 0xe0, 0x0b, 0xa7, 0x35, 0xc2, 0x70, 0x11, 0xce, 0xdd, 0xfa, 0xdf, 0xdb, 0x68, 0x37, 0x59,
0xdb, 0x79, 0x85, 0xdc, 0x34, 0xf6, 0x88, 0xda, 0x10, 0xdd, 0xc2, 0xc0, 0xda, 0x6a, 0x5b, 0x91,
0x4b, 0xf0, 0xb5, 0x03, 0x42, 0x6f, 0xd2, 0x9b, 0x0e, 0x17, 0xe3, 0x16, 0xfe, 0x5e, 0x80, 0x76,
0x53, 0x51, 0x06, 0x07, 0x99, 0x50, 0x58, 0xfd, 0xaf, 0x5b, 0x74, 0x07, 0xe0, 0x98, 0xba, 0xc6,
0xd5, 0x9f, 0x1a, 0x27, 0xad, 0xf1, 0x63, 0xd9, 0x57, 0x8f, 0xd9, 0x0c, 0x8e, 0x12, 0x59, 0x22,
0x2b, 0x4a, 0xae, 0x53, 0x5d, 0x7c, 0x70, 0x4d, 0x0e, 0x01, 0x92, 0xa7, 0xd5, 0xf3, 0xfd, 0x72,
0x95, 0xd1, 0x34, 0xd8, 0x21, 0xfb, 0xd0, 0x4b, 0xe8, 0x32, 0xf0, 0x1e, 0xce, 0xd7, 0x67, 0x6f,
0x05, 0x6e, 0xde, 0xf3, 0x1a, 0x8d, 0x91, 0x6d, 0xa5, 0xb9, 0x30, 0x95, 0x41, 0x2e, 0x8c, 0x4d,
0x31, 0x53, 0x85, 0xbb, 0x67, 0xde, 0x6f, 0x0e, 0x7a, 0xfd, 0x19, 0x00, 0x00, 0xff, 0xff, 0xc9,
0x87, 0x28, 0x41, 0xe7, 0x01, 0x00, 0x00,
}

View File

@@ -5,24 +5,30 @@ package common;
option go_package = "github.com/talos-systems/talos/api/common";
// Common metadata message nested in all reply message types
message NodeMetadata {
message ResponseMetadata {
// hostname of the server response comes from (injected by proxy)
string hostname = 1;
}
// The response message containing the requested logs.
message Data {
bytes bytes = 1;
// error is set if request failed to the upstream (rest of response is undefined)
string error = 2;
}
message DataResponse {
NodeMetadata metadata = 1;
Data bytes = 2;
ResponseMetadata metadata = 1;
bytes bytes = 2;
}
message DataReply {
repeated DataResponse response = 1;
}
message EmptyResponse {
ResponseMetadata metadata = 1;
}
message EmptyReply {
repeated EmptyResponse response = 1;
}
enum ContainerDriver {
CONTAINERD = 0;
CRI = 1;

View File

@@ -32,10 +32,10 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
// rpc reboot
// The response message containing the reboot status.
type RebootResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RebootResponse) Reset() { *m = RebootResponse{} }
@@ -67,7 +67,7 @@ func (m *RebootResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_RebootResponse proto.InternalMessageInfo
func (m *RebootResponse) GetMetadata() *common.NodeMetadata {
func (m *RebootResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -120,10 +120,10 @@ func (m *RebootReply) GetResponse() []*RebootResponse {
// rpc reset
// The response message containing the restart status.
type ResetResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ResetResponse) Reset() { *m = ResetResponse{} }
@@ -155,7 +155,7 @@ func (m *ResetResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ResetResponse proto.InternalMessageInfo
func (m *ResetResponse) GetMetadata() *common.NodeMetadata {
func (m *ResetResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -208,10 +208,10 @@ func (m *ResetReply) GetResponse() []*ResetResponse {
// rpc shutdown
// The response message containing the shutdown status.
type ShutdownResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ShutdownResponse) Reset() { *m = ShutdownResponse{} }
@@ -243,7 +243,7 @@ func (m *ShutdownResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ShutdownResponse proto.InternalMessageInfo
func (m *ShutdownResponse) GetMetadata() *common.NodeMetadata {
func (m *ShutdownResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -338,11 +338,11 @@ func (m *UpgradeRequest) GetImage() string {
}
type UpgradeResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Ack string `protobuf:"bytes,2,opt,name=ack,proto3" json:"ack,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Ack string `protobuf:"bytes,2,opt,name=ack,proto3" json:"ack,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *UpgradeResponse) Reset() { *m = UpgradeResponse{} }
@@ -374,7 +374,7 @@ func (m *UpgradeResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_UpgradeResponse proto.InternalMessageInfo
func (m *UpgradeResponse) GetMetadata() *common.NodeMetadata {
func (m *UpgradeResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -433,11 +433,11 @@ func (m *UpgradeReply) GetResponse() []*UpgradeResponse {
// rpc servicelist
type ServiceListResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Services []*ServiceInfo `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Services []*ServiceInfo `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ServiceListResponse) Reset() { *m = ServiceListResponse{} }
@@ -469,7 +469,7 @@ func (m *ServiceListResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ServiceListResponse proto.InternalMessageInfo
func (m *ServiceListResponse) GetMetadata() *common.NodeMetadata {
func (m *ServiceListResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -807,11 +807,11 @@ func (m *ServiceStartRequest) GetId() string {
}
type ServiceStartResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Resp string `protobuf:"bytes,2,opt,name=resp,proto3" json:"resp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Resp string `protobuf:"bytes,2,opt,name=resp,proto3" json:"resp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ServiceStartResponse) Reset() { *m = ServiceStartResponse{} }
@@ -843,7 +843,7 @@ func (m *ServiceStartResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ServiceStartResponse proto.InternalMessageInfo
func (m *ServiceStartResponse) GetMetadata() *common.NodeMetadata {
func (m *ServiceStartResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -944,11 +944,11 @@ func (m *ServiceStopRequest) GetId() string {
}
type ServiceStopResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Resp string `protobuf:"bytes,2,opt,name=resp,proto3" json:"resp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Resp string `protobuf:"bytes,2,opt,name=resp,proto3" json:"resp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ServiceStopResponse) Reset() { *m = ServiceStopResponse{} }
@@ -980,7 +980,7 @@ func (m *ServiceStopResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ServiceStopResponse proto.InternalMessageInfo
func (m *ServiceStopResponse) GetMetadata() *common.NodeMetadata {
func (m *ServiceStopResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -1081,11 +1081,11 @@ func (m *ServiceRestartRequest) GetId() string {
}
type ServiceRestartResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Resp string `protobuf:"bytes,2,opt,name=resp,proto3" json:"resp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Resp string `protobuf:"bytes,2,opt,name=resp,proto3" json:"resp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ServiceRestartResponse) Reset() { *m = ServiceRestartResponse{} }
@@ -1117,7 +1117,7 @@ func (m *ServiceRestartResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ServiceRestartResponse proto.InternalMessageInfo
func (m *ServiceRestartResponse) GetMetadata() *common.NodeMetadata {
func (m *ServiceRestartResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -1350,58 +1350,6 @@ func (m *StopReply) GetResp() string {
return ""
}
// StreamingData is used to stream back responses
type StreamingData struct {
Bytes []byte `protobuf:"bytes,1,opt,name=bytes,proto3" json:"bytes,omitempty"`
Errors string `protobuf:"bytes,2,opt,name=errors,proto3" json:"errors,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *StreamingData) Reset() { *m = StreamingData{} }
func (m *StreamingData) String() string { return proto.CompactTextString(m) }
func (*StreamingData) ProtoMessage() {}
func (*StreamingData) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{28}
}
func (m *StreamingData) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StreamingData.Unmarshal(m, b)
}
func (m *StreamingData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_StreamingData.Marshal(b, m, deterministic)
}
func (m *StreamingData) XXX_Merge(src proto.Message) {
xxx_messageInfo_StreamingData.Merge(m, src)
}
func (m *StreamingData) XXX_Size() int {
return xxx_messageInfo_StreamingData.Size(m)
}
func (m *StreamingData) XXX_DiscardUnknown() {
xxx_messageInfo_StreamingData.DiscardUnknown(m)
}
var xxx_messageInfo_StreamingData proto.InternalMessageInfo
func (m *StreamingData) GetBytes() []byte {
if m != nil {
return m.Bytes
}
return nil
}
func (m *StreamingData) GetErrors() string {
if m != nil {
return m.Errors
}
return ""
}
// CopyOutRequest describes a request to copy data out of Talos node
//
// CopyOut produces .tar.gz archive which is streamed back to the caller
@@ -1417,7 +1365,7 @@ func (m *CopyOutRequest) Reset() { *m = CopyOutRequest{} }
func (m *CopyOutRequest) String() string { return proto.CompactTextString(m) }
func (*CopyOutRequest) ProtoMessage() {}
func (*CopyOutRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{29}
return fileDescriptor_84b4f59d98cc997c, []int{28}
}
func (m *CopyOutRequest) XXX_Unmarshal(b []byte) error {
@@ -1468,7 +1416,7 @@ func (m *LSRequest) Reset() { *m = LSRequest{} }
func (m *LSRequest) String() string { return proto.CompactTextString(m) }
func (*LSRequest) ProtoMessage() {}
func (*LSRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{30}
return fileDescriptor_84b4f59d98cc997c, []int{29}
}
func (m *LSRequest) XXX_Unmarshal(b []byte) error {
@@ -1516,23 +1464,24 @@ func (m *LSRequest) GetRecursionDepth() int32 {
// FileInfo describes a file or directory's information
type FileInfo struct {
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
// Name is the name (including prefixed path) of the file or directory
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
// Size indicates the number of bytes contained within the file
Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"`
Size int64 `protobuf:"varint,3,opt,name=size,proto3" json:"size,omitempty"`
// Mode is the bitmap of UNIX mode/permission flags of the file
Mode uint32 `protobuf:"varint,3,opt,name=mode,proto3" json:"mode,omitempty"`
Mode uint32 `protobuf:"varint,4,opt,name=mode,proto3" json:"mode,omitempty"`
// Modified indicates the UNIX timestamp at which the file was last modified
Modified int64 `protobuf:"varint,4,opt,name=modified,proto3" json:"modified,omitempty"`
Modified int64 `protobuf:"varint,5,opt,name=modified,proto3" json:"modified,omitempty"`
// IsDir indicates that the file is a directory
IsDir bool `protobuf:"varint,5,opt,name=is_dir,json=isDir,proto3" json:"is_dir,omitempty"`
IsDir bool `protobuf:"varint,6,opt,name=is_dir,json=isDir,proto3" json:"is_dir,omitempty"`
// Error describes any error encountered while trying to read the file
// information.
Error string `protobuf:"bytes,6,opt,name=error,proto3" json:"error,omitempty"`
Error string `protobuf:"bytes,7,opt,name=error,proto3" json:"error,omitempty"`
// Link is filled with symlink target
Link string `protobuf:"bytes,7,opt,name=link,proto3" json:"link,omitempty"`
Link string `protobuf:"bytes,8,opt,name=link,proto3" json:"link,omitempty"`
// RelativeName is the name of the file or directory relative to the RootPath
RelativeName string `protobuf:"bytes,8,opt,name=relative_name,json=relativeName,proto3" json:"relative_name,omitempty"`
RelativeName string `protobuf:"bytes,9,opt,name=relative_name,json=relativeName,proto3" json:"relative_name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -1542,7 +1491,7 @@ func (m *FileInfo) Reset() { *m = FileInfo{} }
func (m *FileInfo) String() string { return proto.CompactTextString(m) }
func (*FileInfo) ProtoMessage() {}
func (*FileInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{31}
return fileDescriptor_84b4f59d98cc997c, []int{30}
}
func (m *FileInfo) XXX_Unmarshal(b []byte) error {
@@ -1567,6 +1516,13 @@ func (m *FileInfo) XXX_DiscardUnknown() {
var xxx_messageInfo_FileInfo proto.InternalMessageInfo
func (m *FileInfo) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
return nil
}
func (m *FileInfo) GetName() string {
if m != nil {
return m.Name
@@ -1625,18 +1581,18 @@ func (m *FileInfo) GetRelativeName() string {
// The response message containing the requested df stats.
type MountsResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Stats []*MountStat `protobuf:"bytes,2,rep,name=stats,proto3" json:"stats,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Stats []*MountStat `protobuf:"bytes,2,rep,name=stats,proto3" json:"stats,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *MountsResponse) Reset() { *m = MountsResponse{} }
func (m *MountsResponse) String() string { return proto.CompactTextString(m) }
func (*MountsResponse) ProtoMessage() {}
func (*MountsResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{32}
return fileDescriptor_84b4f59d98cc997c, []int{31}
}
func (m *MountsResponse) XXX_Unmarshal(b []byte) error {
@@ -1661,7 +1617,7 @@ func (m *MountsResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_MountsResponse proto.InternalMessageInfo
func (m *MountsResponse) GetMetadata() *common.NodeMetadata {
func (m *MountsResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -1686,7 +1642,7 @@ func (m *MountsReply) Reset() { *m = MountsReply{} }
func (m *MountsReply) String() string { return proto.CompactTextString(m) }
func (*MountsReply) ProtoMessage() {}
func (*MountsReply) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{33}
return fileDescriptor_84b4f59d98cc997c, []int{32}
}
func (m *MountsReply) XXX_Unmarshal(b []byte) error {
@@ -1733,7 +1689,7 @@ func (m *MountStat) Reset() { *m = MountStat{} }
func (m *MountStat) String() string { return proto.CompactTextString(m) }
func (*MountStat) ProtoMessage() {}
func (*MountStat) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{34}
return fileDescriptor_84b4f59d98cc997c, []int{33}
}
func (m *MountStat) XXX_Unmarshal(b []byte) error {
@@ -1787,19 +1743,19 @@ func (m *MountStat) GetMountedOn() string {
}
type VersionResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Version *VersionInfo `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
Platform *PlatformInfo `protobuf:"bytes,3,opt,name=platform,proto3" json:"platform,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Version *VersionInfo `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
Platform *PlatformInfo `protobuf:"bytes,3,opt,name=platform,proto3" json:"platform,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *VersionResponse) Reset() { *m = VersionResponse{} }
func (m *VersionResponse) String() string { return proto.CompactTextString(m) }
func (*VersionResponse) ProtoMessage() {}
func (*VersionResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{35}
return fileDescriptor_84b4f59d98cc997c, []int{34}
}
func (m *VersionResponse) XXX_Unmarshal(b []byte) error {
@@ -1824,7 +1780,7 @@ func (m *VersionResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_VersionResponse proto.InternalMessageInfo
func (m *VersionResponse) GetMetadata() *common.NodeMetadata {
func (m *VersionResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -1856,7 +1812,7 @@ func (m *VersionReply) Reset() { *m = VersionReply{} }
func (m *VersionReply) String() string { return proto.CompactTextString(m) }
func (*VersionReply) ProtoMessage() {}
func (*VersionReply) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{36}
return fileDescriptor_84b4f59d98cc997c, []int{35}
}
func (m *VersionReply) XXX_Unmarshal(b []byte) error {
@@ -1904,7 +1860,7 @@ func (m *VersionInfo) Reset() { *m = VersionInfo{} }
func (m *VersionInfo) String() string { return proto.CompactTextString(m) }
func (*VersionInfo) ProtoMessage() {}
func (*VersionInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{37}
return fileDescriptor_84b4f59d98cc997c, []int{36}
}
func (m *VersionInfo) XXX_Unmarshal(b []byte) error {
@@ -1983,7 +1939,7 @@ func (m *PlatformInfo) Reset() { *m = PlatformInfo{} }
func (m *PlatformInfo) String() string { return proto.CompactTextString(m) }
func (*PlatformInfo) ProtoMessage() {}
func (*PlatformInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{38}
return fileDescriptor_84b4f59d98cc997c, []int{37}
}
func (m *PlatformInfo) XXX_Unmarshal(b []byte) error {
@@ -2038,7 +1994,7 @@ func (m *LogsRequest) Reset() { *m = LogsRequest{} }
func (m *LogsRequest) String() string { return proto.CompactTextString(m) }
func (*LogsRequest) ProtoMessage() {}
func (*LogsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{39}
return fileDescriptor_84b4f59d98cc997c, []int{38}
}
func (m *LogsRequest) XXX_Unmarshal(b []byte) error {
@@ -2095,7 +2051,7 @@ func (m *ReadRequest) Reset() { *m = ReadRequest{} }
func (m *ReadRequest) String() string { return proto.CompactTextString(m) }
func (*ReadRequest) ProtoMessage() {}
func (*ReadRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_84b4f59d98cc997c, []int{40}
return fileDescriptor_84b4f59d98cc997c, []int{39}
}
func (m *ReadRequest) XXX_Unmarshal(b []byte) error {
@@ -2156,7 +2112,6 @@ func init() {
proto.RegisterType((*StartReply)(nil), "machine.StartReply")
proto.RegisterType((*StopRequest)(nil), "machine.StopRequest")
proto.RegisterType((*StopReply)(nil), "machine.StopReply")
proto.RegisterType((*StreamingData)(nil), "machine.StreamingData")
proto.RegisterType((*CopyOutRequest)(nil), "machine.CopyOutRequest")
proto.RegisterType((*LSRequest)(nil), "machine.LSRequest")
proto.RegisterType((*FileInfo)(nil), "machine.FileInfo")
@@ -2174,102 +2129,100 @@ func init() {
func init() { proto.RegisterFile("machine/machine.proto", fileDescriptor_84b4f59d98cc997c) }
var fileDescriptor_84b4f59d98cc997c = []byte{
// 1515 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xeb, 0x6f, 0x13, 0x47,
0x10, 0x97, 0x1d, 0xc7, 0x8f, 0xb1, 0xe3, 0xc0, 0xe6, 0x81, 0x31, 0xe1, 0x75, 0xd0, 0x82, 0x50,
0xe3, 0xd0, 0x00, 0x11, 0x8f, 0x16, 0x41, 0x08, 0x88, 0x8a, 0x24, 0xa0, 0x4b, 0xe9, 0x87, 0xb6,
0xaa, 0xb5, 0xb6, 0x37, 0xf6, 0x8a, 0xbb, 0xdb, 0xeb, 0xed, 0x3a, 0xc8, 0x55, 0xbf, 0xb7, 0xea,
0xd7, 0xfe, 0x09, 0x95, 0xfa, 0xb7, 0xf4, 0xcf, 0xaa, 0xf6, 0x71, 0xeb, 0xf5, 0x39, 0x0e, 0x88,
0xf0, 0xc9, 0xbb, 0xb3, 0x73, 0x33, 0xbf, 0xdf, 0xec, 0xec, 0xec, 0xac, 0x61, 0x25, 0xc4, 0xdd,
0x01, 0x8d, 0xc8, 0x86, 0xf9, 0x6d, 0xc5, 0x09, 0x13, 0x0c, 0x95, 0xcc, 0xb4, 0x79, 0xa1, 0xcf,
0x58, 0x3f, 0x20, 0x1b, 0x4a, 0xdc, 0x19, 0x1e, 0x6e, 0x90, 0x30, 0x16, 0x23, 0xad, 0xd5, 0xbc,
0x9c, 0x5d, 0x14, 0x34, 0x24, 0x5c, 0xe0, 0x30, 0x36, 0x0a, 0x4b, 0x5d, 0x16, 0x86, 0x2c, 0xda,
0xd0, 0x3f, 0x5a, 0xe8, 0x6d, 0x43, 0xdd, 0x27, 0x1d, 0xc6, 0x84, 0x4f, 0x78, 0xcc, 0x22, 0x4e,
0xd0, 0x6d, 0x28, 0x87, 0x44, 0xe0, 0x1e, 0x16, 0xb8, 0x91, 0xbb, 0x92, 0xbb, 0x59, 0xdd, 0x5c,
0x6e, 0x99, 0x4f, 0xf6, 0x59, 0x8f, 0xec, 0x99, 0x35, 0xdf, 0x6a, 0x79, 0xdb, 0x50, 0x4d, 0x6d,
0xc4, 0xc1, 0x08, 0xdd, 0x81, 0x72, 0x62, 0x8c, 0x35, 0x72, 0x57, 0xe6, 0x6e, 0x56, 0x37, 0xcf,
0xb5, 0x52, 0x42, 0x93, 0xbe, 0x7c, 0xab, 0xe8, 0x3d, 0x85, 0x05, 0x9f, 0x70, 0x72, 0x1a, 0x18,
0x4f, 0x00, 0x8c, 0x09, 0x89, 0x62, 0x73, 0x0a, 0xc5, 0xaa, 0x83, 0xc2, 0xf1, 0xe4, 0x80, 0xd8,
0x81, 0x33, 0x07, 0x83, 0xa1, 0xe8, 0xb1, 0xf7, 0xd1, 0x29, 0x70, 0xbc, 0x80, 0x85, 0xb1, 0x15,
0x09, 0xe5, 0xde, 0x14, 0x94, 0xf3, 0x16, 0x4a, 0xd6, 0x9f, 0x83, 0xe6, 0x4b, 0xa8, 0xbf, 0x8d,
0xfb, 0x09, 0xee, 0x11, 0x9f, 0xfc, 0x3a, 0x24, 0x5c, 0xa0, 0x65, 0x98, 0xa7, 0x21, 0xee, 0x13,
0x05, 0xa4, 0xe2, 0xeb, 0x89, 0xf7, 0x16, 0x16, 0xad, 0xde, 0xa7, 0x82, 0x46, 0x67, 0x60, 0x0e,
0x77, 0xdf, 0x35, 0xf2, 0xca, 0xb0, 0x1c, 0x7a, 0x3b, 0x50, 0xb3, 0x66, 0x25, 0x8b, 0xbb, 0x53,
0x2c, 0x1a, 0x96, 0x45, 0xc6, 0xbf, 0x43, 0x62, 0x04, 0x4b, 0x07, 0x24, 0x39, 0xa2, 0x5d, 0xb2,
0x4b, 0xf9, 0x29, 0x76, 0x57, 0x7e, 0xc1, 0xb5, 0x21, 0xde, 0xc8, 0x2b, 0xf7, 0xcb, 0xe3, 0x20,
0xea, 0x85, 0xef, 0xa2, 0x43, 0xe6, 0x5b, 0x2d, 0x6f, 0x17, 0xce, 0x4c, 0xb8, 0x96, 0x24, 0xee,
0x4f, 0x91, 0x58, 0xcb, 0x5a, 0x71, 0x71, 0x3a, 0x44, 0xfe, 0xce, 0x41, 0xd5, 0xf1, 0x83, 0xea,
0x90, 0xa7, 0x3d, 0xb3, 0x11, 0x79, 0xda, 0x93, 0x7b, 0xc3, 0x05, 0x16, 0xc4, 0x84, 0x50, 0x4f,
0x50, 0x0b, 0x8a, 0xe4, 0x88, 0x44, 0x82, 0x37, 0xe6, 0x14, 0xcb, 0xd5, 0xac, 0xb7, 0xe7, 0x6a,
0xd5, 0x37, 0x5a, 0x52, 0x7f, 0x40, 0x70, 0x20, 0x06, 0x8d, 0xc2, 0xf1, 0xfa, 0x2f, 0xd5, 0xaa,
0x6f, 0xb4, 0xbc, 0xc7, 0xb0, 0x30, 0x61, 0x08, 0xad, 0x5b, 0x87, 0x9a, 0xde, 0xca, 0xb1, 0x0e,
0x53, 0x7f, 0x5e, 0x07, 0x6a, 0xae, 0x5c, 0xa6, 0x41, 0xc8, 0xfb, 0x86, 0x96, 0x1c, 0xce, 0xe0,
0x75, 0x0b, 0xf2, 0x96, 0x53, 0xb3, 0xa5, 0x2b, 0x4f, 0x2b, 0xad, 0x3c, 0xad, 0xef, 0xd3, 0xca,
0xe3, 0xe7, 0x05, 0xf7, 0xfe, 0xc9, 0x59, 0x90, 0x1a, 0x3d, 0x6a, 0x40, 0x69, 0x18, 0xbd, 0x8b,
0xd8, 0xfb, 0x48, 0x79, 0x2a, 0xfb, 0xe9, 0x54, 0xae, 0x68, 0x66, 0x23, 0xe5, 0xaf, 0xec, 0xa7,
0x53, 0x74, 0x15, 0x6a, 0x01, 0xe6, 0xa2, 0x1d, 0x12, 0xce, 0xe5, 0x11, 0x98, 0x53, 0x70, 0xaa,
0x52, 0xb6, 0xa7, 0x45, 0xe8, 0x11, 0xa8, 0x69, 0xbb, 0x3b, 0xc0, 0x51, 0x9f, 0x98, 0x08, 0x9e,
0x84, 0x0e, 0xa4, 0xfa, 0x33, 0xa5, 0xed, 0x7d, 0x61, 0x13, 0xf5, 0x40, 0xe0, 0x44, 0xa4, 0x47,
0x2e, 0xb3, 0xcd, 0xde, 0xcf, 0xb0, 0x3c, 0xa9, 0xf6, 0xc9, 0x09, 0x8d, 0xa0, 0x20, 0x93, 0xcb,
0xc4, 0x55, 0x8d, 0xbd, 0x7d, 0x38, 0x3b, 0x69, 0x5d, 0xe6, 0xec, 0x83, 0xa9, 0x9c, 0xbd, 0x98,
0xdd, 0xd4, 0x09, 0x2c, 0x4e, 0xd2, 0x5e, 0x07, 0x64, 0x35, 0x58, 0x3c, 0x8b, 0xd3, 0x4f, 0x0e,
0x75, 0xa9, 0xf5, 0x59, 0x29, 0x8d, 0x4f, 0xa1, 0x36, 0xfe, 0x91, 0xa7, 0xd0, 0x45, 0xe2, 0x10,
0xba, 0x01, 0x2b, 0x46, 0xc1, 0x97, 0x7b, 0x38, 0x7b, 0x9f, 0x7e, 0x81, 0xd5, 0xac, 0xe2, 0x67,
0xa5, 0xe5, 0xdb, 0x98, 0x59, 0xfb, 0x92, 0xd9, 0xa3, 0x29, 0x66, 0x97, 0xb3, 0xcc, 0x32, 0x78,
0x1c, 0x72, 0x1e, 0xd4, 0x4e, 0xca, 0xbd, 0x87, 0xf9, 0x46, 0xce, 0xbb, 0x0e, 0xe0, 0xa4, 0x46,
0x8a, 0x2c, 0x37, 0x46, 0xa6, 0xb4, 0xae, 0x42, 0xf5, 0x84, 0x0d, 0x57, 0x2a, 0xd7, 0xa0, 0x32,
0xde, 0x90, 0x59, 0x76, 0xbe, 0x85, 0x85, 0x03, 0x91, 0x10, 0x1c, 0xd2, 0xa8, 0xbf, 0x23, 0x43,
0xb1, 0x0c, 0xf3, 0x9d, 0x91, 0x20, 0x5c, 0x69, 0xd6, 0x7c, 0x3d, 0x41, 0xab, 0x50, 0x24, 0x49,
0xc2, 0x12, 0x6e, 0x42, 0x64, 0x66, 0xde, 0x3a, 0xd4, 0x9f, 0xb1, 0x78, 0xf4, 0x7a, 0x68, 0x29,
0x5d, 0x80, 0x4a, 0xc2, 0x98, 0x68, 0xc7, 0x58, 0x0c, 0x8c, 0xb7, 0xb2, 0x14, 0xbc, 0xc1, 0x62,
0xe0, 0x75, 0xa0, 0xb2, 0x7b, 0x90, 0x6a, 0x4a, 0x48, 0x8c, 0x09, 0x0b, 0x89, 0x31, 0x21, 0xab,
0x43, 0x42, 0xba, 0xc3, 0x84, 0x93, 0xb4, 0x3a, 0x98, 0x29, 0xba, 0x01, 0x8b, 0x7a, 0x48, 0x59,
0xd4, 0xee, 0x91, 0x58, 0x0c, 0x54, 0x81, 0x98, 0xf7, 0xeb, 0x56, 0xbc, 0x23, 0xa5, 0xde, 0x7f,
0x39, 0x28, 0xbf, 0xa0, 0x81, 0xae, 0xe1, 0x08, 0x0a, 0x11, 0x0e, 0xd3, 0xeb, 0x54, 0x8d, 0xa5,
0x8c, 0xd3, 0xdf, 0xb4, 0x83, 0x39, 0x5f, 0x8d, 0xa5, 0x2c, 0x64, 0x3d, 0x5d, 0x73, 0x16, 0x7c,
0x35, 0x46, 0x4d, 0x28, 0x87, 0xac, 0x47, 0x0f, 0x29, 0xe9, 0xa9, 0x4a, 0x33, 0xe7, 0xdb, 0x39,
0x5a, 0x81, 0x22, 0xe5, 0xed, 0x1e, 0x4d, 0x1a, 0xf3, 0x0a, 0xe6, 0x3c, 0xe5, 0x3b, 0x34, 0x91,
0xc1, 0x53, 0x81, 0x69, 0x14, 0x75, 0x29, 0x55, 0x13, 0x69, 0x3c, 0xa0, 0xd1, 0xbb, 0x46, 0x49,
0x83, 0x90, 0x63, 0x74, 0x0d, 0x16, 0x12, 0x12, 0x60, 0x41, 0x8f, 0x48, 0x5b, 0x21, 0x2c, 0xab,
0xc5, 0x5a, 0x2a, 0xdc, 0xc7, 0x21, 0xf1, 0x02, 0xa8, 0xef, 0xb1, 0xa1, 0xbc, 0x3d, 0x3e, 0x3d,
0xb5, 0x6f, 0xea, 0xea, 0x9e, 0x5e, 0xa9, 0xc8, 0x26, 0xab, 0xb2, 0x7c, 0x20, 0xb0, 0xd0, 0x15,
0x9f, 0xcb, 0x26, 0x2f, 0xf5, 0xf6, 0xa1, 0x26, 0x6f, 0x12, 0x95, 0x93, 0xe0, 0xbf, 0x43, 0xc5,
0xda, 0x45, 0x97, 0x00, 0x0e, 0x69, 0x40, 0xf8, 0x88, 0x0b, 0x12, 0x9a, 0x2d, 0x70, 0x24, 0x13,
0x1b, 0x51, 0x30, 0x1b, 0xb1, 0x06, 0x15, 0x7c, 0x84, 0x69, 0x80, 0x3b, 0x81, 0xde, 0x8d, 0x82,
0x3f, 0x16, 0xa0, 0x8b, 0x00, 0xa1, 0x34, 0x4f, 0x7a, 0x6d, 0x16, 0xa9, 0x4d, 0xa9, 0xf8, 0x15,
0x23, 0x79, 0x1d, 0x79, 0xff, 0xe6, 0x60, 0xf1, 0x07, 0xa2, 0x72, 0xe1, 0x14, 0x11, 0x6b, 0x41,
0xe9, 0x48, 0x1b, 0x51, 0xc8, 0xdc, 0x36, 0xc4, 0x18, 0x57, 0x6d, 0x48, 0xaa, 0x84, 0xbe, 0x86,
0x72, 0x1c, 0x60, 0x71, 0xc8, 0x92, 0xd0, 0xdc, 0x97, 0xe3, 0x2b, 0xf9, 0x8d, 0x59, 0xd0, 0x8d,
0x4b, 0xaa, 0x26, 0x3b, 0x2f, 0x8b, 0xf3, 0x43, 0x9d, 0x57, 0x86, 0x90, 0x13, 0xec, 0xbf, 0x72,
0x50, 0x75, 0x10, 0xc9, 0xab, 0x5d, 0x60, 0x7b, 0xb5, 0x0b, 0xdc, 0x97, 0x12, 0x3e, 0xc0, 0x69,
0xcf, 0xc7, 0x07, 0xfa, 0x78, 0x0f, 0x69, 0x20, 0xcc, 0xed, 0xaa, 0x27, 0x32, 0xae, 0x7d, 0xd6,
0x4e, 0x59, 0x9b, 0xb8, 0xf6, 0x99, 0x31, 0x2e, 0xab, 0x0b, 0xe3, 0x2a, 0xd3, 0x2b, 0x7e, 0x9e,
0x71, 0xb9, 0x71, 0x38, 0xe9, 0x0e, 0x4c, 0x96, 0xab, 0xb1, 0xb7, 0x05, 0x35, 0x97, 0xec, 0xac,
0x93, 0xa7, 0x4e, 0x99, 0x29, 0xb3, 0x72, 0xec, 0x05, 0x50, 0xdd, 0x65, 0x7d, 0x9e, 0x16, 0x85,
0x35, 0xa8, 0x48, 0x55, 0x1e, 0xe3, 0x6e, 0xfa, 0xed, 0x58, 0x60, 0xca, 0x5c, 0xde, 0xb6, 0x64,
0x1b, 0x50, 0xec, 0x25, 0xf4, 0x88, 0x24, 0x8a, 0x4e, 0x7d, 0xf3, 0x5c, 0xba, 0xb5, 0xcf, 0x58,
0x24, 0x30, 0x8d, 0x48, 0xb2, 0xa3, 0x96, 0x7d, 0xa3, 0x26, 0xcb, 0xa6, 0x4f, 0x70, 0xcf, 0x29,
0x41, 0x4e, 0x9d, 0x52, 0xe3, 0xcd, 0x3f, 0xca, 0x50, 0xda, 0xd3, 0xb1, 0x47, 0xdf, 0x40, 0xc9,
0x94, 0x37, 0x34, 0x4e, 0xfe, 0xc9, 0x82, 0xd7, 0x74, 0x1a, 0x38, 0xb7, 0x90, 0xde, 0xce, 0xa1,
0xc7, 0x00, 0xaf, 0x86, 0x1d, 0xd2, 0x65, 0xd1, 0x21, 0xed, 0xa3, 0xd5, 0xa9, 0x36, 0xe5, 0xb9,
0x7c, 0xdb, 0x9d, 0xf0, 0xfd, 0x3a, 0xe4, 0x77, 0x0f, 0xd0, 0xf8, 0xc4, 0xda, 0xd2, 0xd9, 0x3c,
0x6b, 0x65, 0x69, 0xa5, 0xbb, 0x9d, 0x43, 0x5f, 0x41, 0x41, 0x46, 0x12, 0x8d, 0xd3, 0xd5, 0x09,
0x6c, 0xb3, 0x96, 0x86, 0xc6, 0x18, 0xdf, 0x82, 0xa2, 0x3e, 0xc5, 0x33, 0x81, 0x2d, 0x4f, 0x1d,
0x77, 0x99, 0xaa, 0x5b, 0x50, 0x90, 0x11, 0x74, 0xbc, 0x38, 0x01, 0x3d, 0x81, 0xcc, 0x16, 0x14,
0xf5, 0xd3, 0xf0, 0x23, 0xfc, 0xb9, 0x6f, 0xcd, 0xbb, 0x30, 0xaf, 0x1e, 0x73, 0x33, 0x3f, 0x5b,
0xca, 0x3e, 0xfa, 0xe4, 0x57, 0x4f, 0x6c, 0x2b, 0x2f, 0x9b, 0xfd, 0x99, 0xdf, 0x9e, 0x3f, 0xfe,
0x69, 0x20, 0x2d, 0xec, 0x43, 0x7d, 0xf2, 0x3a, 0x47, 0x97, 0x66, 0xde, 0xf3, 0x9a, 0xfb, 0xda,
0xcc, 0x75, 0x69, 0xef, 0xa5, 0xed, 0xc3, 0xd5, 0xed, 0x8e, 0xd6, 0x66, 0x74, 0x78, 0xda, 0x56,
0x73, 0xc6, 0xaa, 0xb4, 0xf4, 0xdc, 0x72, 0x93, 0xd7, 0x3b, 0xba, 0x70, 0x7c, 0x63, 0xa5, 0xed,
0x9c, 0x3f, 0x7e, 0x51, 0x9a, 0x79, 0x08, 0xe5, 0xf4, 0x69, 0xfa, 0x31, 0xb9, 0x39, 0xf1, 0xde,
0x7d, 0x00, 0x25, 0xf3, 0x20, 0x74, 0xce, 0xc5, 0xe4, 0x53, 0xb6, 0xb9, 0x32, 0xbd, 0xa0, 0x3b,
0xc3, 0x79, 0x1d, 0x00, 0xe7, 0xdd, 0xe2, 0x32, 0x5f, 0xca, 0x8a, 0xe3, 0x60, 0xe4, 0xcd, 0xfd,
0x99, 0xcf, 0xa1, 0x7b, 0x50, 0x50, 0x84, 0x9d, 0x57, 0xa1, 0xc3, 0x14, 0x65, 0xa4, 0xf6, 0xb3,
0xfb, 0x50, 0x4a, 0xeb, 0xd8, 0x2c, 0x9a, 0x2b, 0xd3, 0xc5, 0x36, 0x0e, 0x46, 0xdb, 0xaf, 0x60,
0xb1, 0xcb, 0x42, 0xbb, 0x86, 0x63, 0xba, 0x0d, 0xa6, 0x32, 0x3c, 0x8d, 0xe9, 0x9b, 0xdc, 0x8f,
0xb7, 0xfa, 0x54, 0x0c, 0x86, 0x1d, 0x79, 0xb2, 0x36, 0x04, 0x0e, 0x18, 0x5f, 0xd7, 0x37, 0x1b,
0xd7, 0xb3, 0x0d, 0x1c, 0xd3, 0xf4, 0x8f, 0x9e, 0x4e, 0x51, 0xf9, 0xbc, 0xf3, 0x7f, 0x00, 0x00,
0x00, 0xff, 0xff, 0x4a, 0x46, 0xbd, 0x4c, 0x02, 0x12, 0x00, 0x00,
// 1483 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdd, 0x6f, 0x13, 0xc7,
0x16, 0xd7, 0x3a, 0x1f, 0xb6, 0x8f, 0x13, 0x07, 0x26, 0x1f, 0x18, 0x13, 0xbe, 0x16, 0xee, 0x05,
0x21, 0xc5, 0xe1, 0x86, 0x80, 0xb8, 0x70, 0x75, 0x45, 0x21, 0x41, 0x54, 0x24, 0x80, 0x36, 0x6d,
0xa5, 0xf6, 0xc5, 0x1d, 0xdb, 0x13, 0x7b, 0xc4, 0xee, 0xce, 0x76, 0x67, 0x1c, 0x94, 0xaa, 0x7d,
0x6f, 0xfb, 0xda, 0x3f, 0xa1, 0x6f, 0xfd, 0x23, 0xab, 0x6a, 0x3e, 0x3d, 0x5e, 0xc7, 0x01, 0xd5,
0x3c, 0x79, 0xe6, 0xcc, 0xd9, 0x73, 0xce, 0xef, 0x7c, 0xcd, 0x19, 0xc3, 0x7a, 0x82, 0xbb, 0x03,
0x9a, 0x92, 0x6d, 0xf3, 0xdb, 0xca, 0x72, 0x26, 0x18, 0x2a, 0x9b, 0x6d, 0xf3, 0x4a, 0x9f, 0xb1,
0x7e, 0x4c, 0xb6, 0x15, 0xb9, 0x33, 0x3c, 0xde, 0x26, 0x49, 0x26, 0x4e, 0x35, 0x57, 0xf3, 0x7a,
0xf1, 0x50, 0xd0, 0x84, 0x70, 0x81, 0x93, 0xcc, 0x30, 0xac, 0x76, 0x59, 0x92, 0xb0, 0x74, 0x5b,
0xff, 0x68, 0x62, 0xf8, 0x12, 0xea, 0x11, 0xe9, 0x30, 0x26, 0x22, 0xc2, 0x33, 0x96, 0x72, 0x82,
0x76, 0xa1, 0x92, 0x10, 0x81, 0x7b, 0x58, 0xe0, 0x46, 0x70, 0x23, 0xb8, 0x5b, 0xdb, 0x69, 0xb4,
0xcc, 0x27, 0x96, 0xe7, 0xd0, 0x9c, 0x47, 0x8e, 0x33, 0x7c, 0x0e, 0x35, 0x2b, 0x27, 0x8b, 0x4f,
0xd1, 0x03, 0xa8, 0xe4, 0x86, 0xb9, 0x11, 0xdc, 0x98, 0xbb, 0x5b, 0xdb, 0xb9, 0xd4, 0xb2, 0xa0,
0xc6, 0xf5, 0x45, 0x8e, 0x31, 0xdc, 0x87, 0xe5, 0x88, 0x70, 0x32, 0xab, 0x29, 0xcf, 0x00, 0x8c,
0x18, 0x69, 0xc9, 0xce, 0x84, 0x25, 0x1b, 0x9e, 0x25, 0x9e, 0x36, 0xcf, 0x90, 0x57, 0x70, 0xe1,
0x68, 0x30, 0x14, 0x3d, 0xf6, 0x21, 0x9d, 0xd1, 0x96, 0x97, 0xb0, 0x3c, 0x92, 0x24, 0xcd, 0x79,
0x38, 0x61, 0xce, 0x65, 0x67, 0x4e, 0x51, 0xa7, 0x67, 0xd1, 0xbf, 0xa1, 0xfe, 0x75, 0xd6, 0xcf,
0x71, 0x8f, 0x44, 0xe4, 0x87, 0x21, 0xe1, 0x02, 0xad, 0xc1, 0x02, 0x4d, 0x70, 0x9f, 0x28, 0x63,
0xaa, 0x91, 0xde, 0x84, 0xdf, 0xc2, 0x8a, 0xe3, 0x9b, 0xc5, 0x70, 0x74, 0x01, 0xe6, 0x70, 0xf7,
0x7d, 0xa3, 0xa4, 0x84, 0xcb, 0x65, 0xb8, 0x07, 0x4b, 0x4e, 0xb4, 0x44, 0xb2, 0x3b, 0x81, 0xa4,
0xe1, 0x90, 0x14, 0x6c, 0xf0, 0x80, 0xfc, 0x0c, 0xab, 0x47, 0x24, 0x3f, 0xa1, 0x5d, 0x72, 0x40,
0xf9, 0x8c, 0x91, 0x46, 0xf7, 0xa1, 0xc2, 0xb5, 0x30, 0xde, 0x28, 0x29, 0x13, 0xd6, 0x46, 0xce,
0xd4, 0x07, 0x5f, 0xa6, 0xc7, 0x2c, 0x72, 0x5c, 0xe1, 0x01, 0x5c, 0x18, 0x53, 0x2f, 0x81, 0x3c,
0x9e, 0x00, 0xb2, 0x59, 0x94, 0xe2, 0xdb, 0xea, 0x81, 0xf9, 0x3d, 0x80, 0x9a, 0xa7, 0x07, 0xd5,
0xa1, 0x44, 0x7b, 0x26, 0x20, 0x25, 0xda, 0x93, 0x31, 0xe2, 0x02, 0x0b, 0x62, 0xdc, 0xa8, 0x37,
0xa8, 0x05, 0x8b, 0xe4, 0x84, 0xa4, 0x82, 0x37, 0xe6, 0x14, 0xd2, 0x8d, 0xa2, 0xb6, 0x7d, 0x75,
0x1a, 0x19, 0x2e, 0xc9, 0x3f, 0x20, 0x38, 0x16, 0x83, 0xc6, 0xfc, 0xd9, 0xfc, 0xaf, 0xd4, 0x69,
0x64, 0xb8, 0xc2, 0xff, 0xc3, 0xf2, 0x98, 0x20, 0xb4, 0xe5, 0x14, 0x6a, 0x78, 0xeb, 0x67, 0x2a,
0xb4, 0xfa, 0xc2, 0x0e, 0x2c, 0xf9, 0x74, 0x99, 0x0a, 0x09, 0xef, 0x1b, 0x58, 0x72, 0x39, 0x05,
0xd7, 0x3d, 0x28, 0x39, 0x4c, 0xcd, 0x96, 0xee, 0x46, 0x2d, 0xdb, 0x8d, 0x5a, 0x5f, 0xd9, 0x6e,
0x14, 0x95, 0x04, 0x0f, 0xff, 0x08, 0x9c, 0x91, 0xda, 0x7a, 0xd4, 0x80, 0xf2, 0x30, 0x7d, 0x9f,
0xb2, 0x0f, 0xa9, 0xd2, 0x54, 0x89, 0xec, 0x56, 0x9e, 0x68, 0x64, 0xa7, 0x4a, 0x5f, 0x25, 0xb2,
0x5b, 0x74, 0x13, 0x96, 0x62, 0xcc, 0x45, 0x3b, 0x21, 0x9c, 0xcb, 0x52, 0x98, 0x53, 0xe6, 0xd4,
0x24, 0xed, 0x50, 0x93, 0xd0, 0x53, 0x50, 0xdb, 0x76, 0x77, 0x80, 0xd3, 0x3e, 0x31, 0x1e, 0x3c,
0xcf, 0x3a, 0x90, 0xec, 0x2f, 0x14, 0x77, 0xf8, 0x2f, 0x97, 0xac, 0x47, 0x02, 0xe7, 0xc2, 0x96,
0x5e, 0x21, 0xcc, 0xe1, 0xf7, 0xb0, 0x36, 0xce, 0x36, 0x53, 0x52, 0x23, 0x98, 0x97, 0x09, 0x66,
0x7c, 0xab, 0xd6, 0xe1, 0x1b, 0xb8, 0x38, 0xae, 0x41, 0xe6, 0xed, 0x7f, 0x27, 0xf2, 0xf6, 0x6a,
0x31, 0xb0, 0x63, 0xf6, 0x78, 0x89, 0x7b, 0x1b, 0x90, 0xe3, 0x60, 0xd9, 0x34, 0x5c, 0x6d, 0x0f,
0xbe, 0xe4, 0xfa, 0xec, 0xb0, 0x46, 0xd5, 0xa8, 0x15, 0x7c, 0x62, 0x35, 0xfa, 0xd6, 0x78, 0xa0,
0xee, 0xc0, 0xba, 0x61, 0x88, 0x64, 0x2c, 0xa7, 0xc7, 0xab, 0x03, 0x1b, 0x45, 0xc6, 0xcf, 0x0e,
0x2d, 0x72, 0xbe, 0x73, 0x3a, 0x24, 0xba, 0xa7, 0x13, 0xe8, 0xae, 0x17, 0xd1, 0x15, 0x6c, 0xf2,
0x00, 0x86, 0xb0, 0x74, 0x5e, 0x1e, 0x3e, 0x29, 0x35, 0x82, 0xf0, 0x36, 0x80, 0x97, 0x22, 0xd6,
0xb2, 0x60, 0x64, 0x99, 0xe2, 0xba, 0x09, 0xb5, 0x73, 0x02, 0xaf, 0x58, 0x6e, 0x41, 0x75, 0x14,
0x94, 0x69, 0x72, 0xb6, 0xa0, 0xfe, 0x82, 0x65, 0xa7, 0x6f, 0x87, 0xce, 0xa6, 0x2b, 0x50, 0xcd,
0x19, 0x13, 0xed, 0x0c, 0x8b, 0x81, 0x61, 0xaf, 0x48, 0xc2, 0x3b, 0x2c, 0x06, 0x61, 0x07, 0xaa,
0x07, 0x47, 0x96, 0x53, 0xca, 0x64, 0x4c, 0x38, 0x99, 0x8c, 0x09, 0x59, 0xea, 0x39, 0xe9, 0x0e,
0x73, 0x4e, 0x6c, 0xa9, 0x9b, 0x2d, 0xba, 0x03, 0x2b, 0x7a, 0x49, 0x59, 0xda, 0xee, 0x91, 0x4c,
0x0c, 0x54, 0xb5, 0x2f, 0x44, 0x75, 0x47, 0xde, 0x93, 0xd4, 0xf0, 0xaf, 0x00, 0x2a, 0x2f, 0x69,
0xac, 0x1b, 0xf2, 0x3f, 0x8e, 0x67, 0x8a, 0x13, 0xdb, 0xdd, 0xd4, 0x5a, 0xd2, 0x38, 0xfd, 0x51,
0xb7, 0x98, 0xb9, 0x48, 0xad, 0x25, 0x2d, 0x61, 0x3d, 0xdd, 0x54, 0x96, 0x23, 0xb5, 0x46, 0x4d,
0xa8, 0x24, 0xac, 0x47, 0x8f, 0x29, 0xe9, 0x35, 0x16, 0x14, 0xaf, 0xdb, 0xa3, 0x75, 0x58, 0xa4,
0xbc, 0xdd, 0xa3, 0x79, 0x63, 0x51, 0x81, 0x5b, 0xa0, 0x7c, 0x8f, 0xe6, 0xb2, 0x9b, 0x92, 0x3c,
0x67, 0x79, 0xa3, 0xac, 0xbb, 0xa9, 0xda, 0x48, 0xe1, 0x31, 0x4d, 0xdf, 0x37, 0x2a, 0xda, 0x08,
0xb9, 0x46, 0xb7, 0x60, 0x39, 0x27, 0x31, 0x16, 0xf4, 0x84, 0xb4, 0x95, 0x85, 0x55, 0x75, 0xb8,
0x64, 0x89, 0x6f, 0x70, 0x42, 0xc2, 0x0c, 0xea, 0x87, 0x6c, 0x28, 0x2f, 0x90, 0xd9, 0xb2, 0xfa,
0xae, 0x6e, 0xf2, 0xf6, 0x66, 0x45, 0x2e, 0x4f, 0x95, 0xf4, 0x23, 0x81, 0x85, 0x6e, 0xfc, 0x5c,
0xce, 0x7e, 0x56, 0xe3, 0xc7, 0x66, 0xbf, 0x71, 0xcb, 0xbc, 0xdc, 0xfe, 0x09, 0xaa, 0x4e, 0x2e,
0xba, 0x06, 0x70, 0x4c, 0x63, 0xc2, 0x4f, 0xb9, 0x20, 0x89, 0x49, 0x10, 0x8f, 0xe2, 0x82, 0x21,
0x03, 0x34, 0x6f, 0x82, 0xb1, 0x09, 0x55, 0x7c, 0x82, 0x69, 0x8c, 0x3b, 0xb1, 0x8e, 0xd2, 0x7c,
0x34, 0x22, 0xa0, 0xab, 0x00, 0x89, 0x14, 0x4f, 0x7a, 0x6d, 0x96, 0xaa, 0x80, 0x55, 0xa3, 0xaa,
0xa1, 0xbc, 0x4d, 0xc3, 0x3f, 0x03, 0x58, 0xf9, 0x86, 0xa8, 0x2c, 0x9a, 0xd1, 0x6b, 0x2d, 0x28,
0x9f, 0x68, 0x41, 0xca, 0x3a, 0x7f, 0x22, 0x31, 0x0a, 0xd4, 0x44, 0x62, 0x99, 0xd0, 0x7f, 0xa0,
0x92, 0xc5, 0x58, 0x1c, 0xb3, 0x3c, 0x31, 0x57, 0xe7, 0xe8, 0x76, 0x7e, 0x67, 0x0e, 0xf4, 0x0c,
0x63, 0xd9, 0xe4, 0x20, 0xe6, 0x6c, 0xfd, 0xd8, 0x20, 0x56, 0x00, 0xe5, 0x39, 0xfc, 0xb7, 0x00,
0x6a, 0x9e, 0x45, 0xf2, 0x96, 0x17, 0xd8, 0xdd, 0xf2, 0x02, 0xf7, 0x25, 0x85, 0x0f, 0xb0, 0x1d,
0x01, 0xf9, 0x00, 0xcb, 0x4c, 0xed, 0x0c, 0x69, 0x2c, 0xcc, 0x45, 0xab, 0x37, 0xd2, 0xb7, 0x7d,
0xd6, 0xb6, 0xa8, 0x8d, 0x6f, 0xfb, 0xcc, 0x08, 0x97, 0xcd, 0x85, 0x71, 0x55, 0x0b, 0xd5, 0xa8,
0xc4, 0xb8, 0x0c, 0x1e, 0xce, 0xbb, 0x03, 0x55, 0x03, 0xd5, 0x48, 0xad, 0xc3, 0x47, 0xb0, 0xe4,
0x83, 0x75, 0x15, 0x18, 0x8c, 0x57, 0xa0, 0xaa, 0x36, 0x53, 0x95, 0x72, 0x1d, 0xc6, 0x50, 0x3b,
0x60, 0x7d, 0x6e, 0x5b, 0xca, 0x26, 0x54, 0x25, 0x2b, 0xcf, 0x70, 0xd7, 0x7e, 0x3b, 0x22, 0x98,
0x2e, 0x57, 0x72, 0xd3, 0xd9, 0x36, 0x2c, 0xf6, 0x72, 0x7a, 0x42, 0x72, 0x05, 0xa7, 0xbe, 0x73,
0xc9, 0x86, 0xf7, 0x05, 0x4b, 0x05, 0xa6, 0x29, 0xc9, 0xf7, 0xd4, 0x71, 0x64, 0xd8, 0x64, 0xd7,
0x8c, 0x08, 0xee, 0x79, 0x0d, 0xcc, 0xeb, 0x72, 0x6a, 0xbd, 0xf3, 0x6b, 0x05, 0xca, 0x87, 0xda,
0xf7, 0xe8, 0x09, 0x94, 0x4d, 0x73, 0x44, 0xa3, 0x02, 0x18, 0x6f, 0x97, 0xcd, 0x35, 0xab, 0x73,
0x4f, 0xa6, 0x91, 0x89, 0xcd, 0xfd, 0x00, 0xfd, 0x0f, 0xe0, 0xf5, 0xb0, 0x43, 0xba, 0x2c, 0x3d,
0xa6, 0x7d, 0xb4, 0x31, 0x31, 0xaf, 0xec, 0xcb, 0x87, 0xdf, 0xd4, 0xaf, 0xb7, 0xa0, 0x74, 0x70,
0x84, 0x46, 0x15, 0xeb, 0x9a, 0x6e, 0xf3, 0xa2, 0xa3, 0xd9, 0x1e, 0x79, 0x3f, 0x40, 0xbb, 0x30,
0x2f, 0xbd, 0x88, 0x46, 0xa9, 0xea, 0x39, 0x75, 0xaa, 0x92, 0x47, 0xb0, 0xa8, 0xab, 0xf9, 0x1c,
0xf3, 0x8a, 0x65, 0xaf, 0xd3, 0x75, 0x5e, 0x7a, 0xd1, 0xd3, 0xe6, 0x39, 0xf5, 0x3c, 0x6d, 0xfa,
0xdd, 0xf8, 0x09, 0xda, 0xfc, 0x87, 0xe8, 0x2e, 0x2c, 0xa8, 0x57, 0xde, 0xd4, 0xcf, 0x56, 0x8b,
0xaf, 0x41, 0xf9, 0xd5, 0x33, 0x37, 0xd7, 0xcb, 0xc9, 0x7f, 0xea, 0xb7, 0x97, 0xcf, 0x7e, 0x27,
0x48, 0x09, 0x6f, 0xa0, 0x3e, 0x7e, 0x9f, 0xa3, 0x6b, 0x53, 0x2f, 0x7a, 0x8d, 0x7c, 0x73, 0xea,
0xb9, 0x94, 0xf7, 0xca, 0x0d, 0xe5, 0xea, 0x7a, 0x47, 0x9b, 0x53, 0x46, 0x3d, 0x2d, 0xab, 0x39,
0xe5, 0x54, 0x4a, 0xda, 0x77, 0xd8, 0xe4, 0xfd, 0x8e, 0xae, 0x9c, 0x3d, 0x5d, 0x69, 0x39, 0x97,
0xcf, 0x3e, 0x94, 0x62, 0x9e, 0x40, 0xc5, 0xbe, 0x57, 0xa7, 0xfa, 0x67, 0xe3, 0x8c, 0xa7, 0xad,
0x9e, 0x5c, 0xcb, 0xe6, 0x85, 0xe8, 0x55, 0xc6, 0xf8, 0xfb, 0xb6, 0xb9, 0x3e, 0x79, 0xa0, 0xc7,
0xc3, 0x05, 0xed, 0x00, 0xef, 0x11, 0xe3, 0x23, 0x5f, 0x2d, 0x92, 0xb3, 0xf8, 0x34, 0x9c, 0xfb,
0xa5, 0x14, 0xa0, 0x87, 0x30, 0xaf, 0x00, 0x7b, 0x4f, 0x44, 0x0f, 0x29, 0x2a, 0x50, 0xdd, 0x67,
0x8f, 0xa1, 0x6c, 0x3b, 0xd9, 0x34, 0x98, 0xeb, 0x93, 0xed, 0x36, 0x8b, 0x4f, 0x9f, 0xbf, 0x86,
0x95, 0x2e, 0x4b, 0xdc, 0x19, 0xce, 0xe8, 0x73, 0x30, 0xbd, 0xe1, 0x8b, 0x8c, 0xbe, 0x0b, 0xbe,
0xbb, 0xd7, 0xa7, 0x62, 0x30, 0xec, 0xc8, 0x8c, 0xdf, 0x16, 0x38, 0x66, 0x7c, 0x4b, 0xdf, 0x6f,
0x5c, 0xef, 0xb6, 0x71, 0x46, 0xed, 0x3f, 0x41, 0x9d, 0x45, 0xa5, 0xf3, 0xc1, 0xdf, 0x01, 0x00,
0x00, 0xff, 0xff, 0xb3, 0x68, 0xfa, 0xac, 0x23, 0x12, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -2329,7 +2282,7 @@ func (c *machineClient) CopyOut(ctx context.Context, in *CopyOutRequest, opts ..
}
type Machine_CopyOutClient interface {
Recv() (*StreamingData, error)
Recv() (*common.DataResponse, error)
grpc.ClientStream
}
@@ -2337,8 +2290,8 @@ type machineCopyOutClient struct {
grpc.ClientStream
}
func (x *machineCopyOutClient) Recv() (*StreamingData, error) {
m := new(StreamingData)
func (x *machineCopyOutClient) Recv() (*common.DataResponse, error) {
m := new(common.DataResponse)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
@@ -2361,7 +2314,7 @@ func (c *machineClient) Kubeconfig(ctx context.Context, in *empty.Empty, opts ..
}
type Machine_KubeconfigClient interface {
Recv() (*StreamingData, error)
Recv() (*common.DataResponse, error)
grpc.ClientStream
}
@@ -2369,8 +2322,8 @@ type machineKubeconfigClient struct {
grpc.ClientStream
}
func (x *machineKubeconfigClient) Recv() (*StreamingData, error) {
m := new(StreamingData)
func (x *machineKubeconfigClient) Recv() (*common.DataResponse, error) {
m := new(common.DataResponse)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
@@ -2425,7 +2378,7 @@ func (c *machineClient) Logs(ctx context.Context, in *LogsRequest, opts ...grpc.
}
type Machine_LogsClient interface {
Recv() (*common.Data, error)
Recv() (*common.DataResponse, error)
grpc.ClientStream
}
@@ -2433,8 +2386,8 @@ type machineLogsClient struct {
grpc.ClientStream
}
func (x *machineLogsClient) Recv() (*common.Data, error) {
m := new(common.Data)
func (x *machineLogsClient) Recv() (*common.DataResponse, error) {
m := new(common.DataResponse)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
@@ -2466,7 +2419,7 @@ func (c *machineClient) Read(ctx context.Context, in *ReadRequest, opts ...grpc.
}
type Machine_ReadClient interface {
Recv() (*StreamingData, error)
Recv() (*common.DataResponse, error)
grpc.ClientStream
}
@@ -2474,8 +2427,8 @@ type machineReadClient struct {
grpc.ClientStream
}
func (x *machineReadClient) Recv() (*StreamingData, error) {
m := new(StreamingData)
func (x *machineReadClient) Recv() (*common.DataResponse, error) {
m := new(common.DataResponse)
if err := x.ClientStream.RecvMsg(m); err != nil {
return nil, err
}
@@ -2617,7 +2570,7 @@ func _Machine_CopyOut_Handler(srv interface{}, stream grpc.ServerStream) error {
}
type Machine_CopyOutServer interface {
Send(*StreamingData) error
Send(*common.DataResponse) error
grpc.ServerStream
}
@@ -2625,7 +2578,7 @@ type machineCopyOutServer struct {
grpc.ServerStream
}
func (x *machineCopyOutServer) Send(m *StreamingData) error {
func (x *machineCopyOutServer) Send(m *common.DataResponse) error {
return x.ServerStream.SendMsg(m)
}
@@ -2638,7 +2591,7 @@ func _Machine_Kubeconfig_Handler(srv interface{}, stream grpc.ServerStream) erro
}
type Machine_KubeconfigServer interface {
Send(*StreamingData) error
Send(*common.DataResponse) error
grpc.ServerStream
}
@@ -2646,7 +2599,7 @@ type machineKubeconfigServer struct {
grpc.ServerStream
}
func (x *machineKubeconfigServer) Send(m *StreamingData) error {
func (x *machineKubeconfigServer) Send(m *common.DataResponse) error {
return x.ServerStream.SendMsg(m)
}
@@ -2680,7 +2633,7 @@ func _Machine_Logs_Handler(srv interface{}, stream grpc.ServerStream) error {
}
type Machine_LogsServer interface {
Send(*common.Data) error
Send(*common.DataResponse) error
grpc.ServerStream
}
@@ -2688,7 +2641,7 @@ type machineLogsServer struct {
grpc.ServerStream
}
func (x *machineLogsServer) Send(m *common.Data) error {
func (x *machineLogsServer) Send(m *common.DataResponse) error {
return x.ServerStream.SendMsg(m)
}
@@ -2719,7 +2672,7 @@ func _Machine_Read_Handler(srv interface{}, stream grpc.ServerStream) error {
}
type Machine_ReadServer interface {
Send(*StreamingData) error
Send(*common.DataResponse) error
grpc.ServerStream
}
@@ -2727,7 +2680,7 @@ type machineReadServer struct {
grpc.ServerStream
}
func (x *machineReadServer) Send(m *StreamingData) error {
func (x *machineReadServer) Send(m *common.DataResponse) error {
return x.ServerStream.SendMsg(m)
}

View File

@@ -13,12 +13,12 @@ import "common/common.proto";
// The machine service definition.
service Machine {
rpc CopyOut(CopyOutRequest) returns (stream StreamingData);
rpc Kubeconfig(google.protobuf.Empty) returns (stream StreamingData);
rpc CopyOut(CopyOutRequest) returns (stream common.DataResponse);
rpc Kubeconfig(google.protobuf.Empty) returns (stream common.DataResponse);
rpc LS(LSRequest) returns (stream FileInfo);
rpc Logs(LogsRequest) returns (stream common.Data);
rpc Logs(LogsRequest) returns (stream common.DataResponse);
rpc Mounts(google.protobuf.Empty) returns (MountsReply);
rpc Read(ReadRequest) returns (stream StreamingData);
rpc Read(ReadRequest) returns (stream common.DataResponse);
rpc Reboot(google.protobuf.Empty) returns (RebootReply);
rpc Reset(google.protobuf.Empty) returns (ResetReply);
rpc ServiceList(google.protobuf.Empty) returns (ServiceListReply);
@@ -41,7 +41,7 @@ service Machine {
// rpc reboot
// The response message containing the reboot status.
message RebootResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
}
message RebootReply {
repeated RebootResponse response = 1;
@@ -50,7 +50,7 @@ message RebootReply {
// rpc reset
// The response message containing the restart status.
message ResetResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
}
message ResetReply {
repeated ResetResponse response = 1;
@@ -59,7 +59,7 @@ message ResetReply {
// rpc shutdown
// The response message containing the shutdown status.
message ShutdownResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
}
message ShutdownReply {
repeated ShutdownResponse response = 1;
@@ -70,7 +70,7 @@ message UpgradeRequest {
string image = 1;
}
message UpgradeResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
string ack = 2;
}
message UpgradeReply {
@@ -79,7 +79,7 @@ message UpgradeReply {
// rpc servicelist
message ServiceListResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
repeated ServiceInfo services = 2;
}
message ServiceListReply {
@@ -116,7 +116,7 @@ message ServiceStartRequest {
}
message ServiceStartResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
string resp = 2;
}
message ServiceStartReply {
@@ -128,7 +128,7 @@ message ServiceStopRequest {
}
message ServiceStopResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
string resp = 2;
}
message ServiceStopReply {
@@ -140,7 +140,7 @@ message ServiceRestartRequest {
}
message ServiceRestartResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
string resp = 2;
}
message ServiceRestartReply {
@@ -167,12 +167,6 @@ message StopReply {
string resp = 1;
}
// StreamingData is used to stream back responses
message StreamingData {
bytes bytes = 1;
string errors = 2;
}
// CopyOutRequest describes a request to copy data out of Talos node
//
// CopyOut produces .tar.gz archive which is streamed back to the caller
@@ -195,28 +189,29 @@ message LSRequest {
// FileInfo describes a file or directory's information
message FileInfo {
common.ResponseMetadata metadata = 1;
// Name is the name (including prefixed path) of the file or directory
string name = 1;
string name = 2;
// Size indicates the number of bytes contained within the file
int64 size = 2;
int64 size = 3;
// Mode is the bitmap of UNIX mode/permission flags of the file
uint32 mode = 3;
uint32 mode = 4;
// Modified indicates the UNIX timestamp at which the file was last modified
int64 modified = 4; // TODO: unix timestamp or include proto's Date type
int64 modified = 5; // TODO: unix timestamp or include proto's Date type
// IsDir indicates that the file is a directory
bool is_dir = 5;
bool is_dir = 6;
// Error describes any error encountered while trying to read the file
// information.
string error = 6;
string error = 7;
// Link is filled with symlink target
string link = 7;
string link = 8;
// RelativeName is the name of the file or directory relative to the RootPath
string relative_name = 8;
string relative_name = 9;
}
// The response message containing the requested df stats.
message MountsResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
repeated MountStat stats = 2;
}
message MountsReply {
@@ -232,7 +227,7 @@ message MountStat {
}
message VersionResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
VersionInfo version = 2;
PlatformInfo platform = 3;
}

View File

@@ -211,11 +211,11 @@ func (m *RoutesReply) GetResponse() []*RoutesResponse {
}
type RoutesResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Routes []*Route `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Routes []*Route `protobuf:"bytes,2,rep,name=routes,proto3" json:"routes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RoutesResponse) Reset() { *m = RoutesResponse{} }
@@ -247,7 +247,7 @@ func (m *RoutesResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_RoutesResponse proto.InternalMessageInfo
func (m *RoutesResponse) GetMetadata() *common.NodeMetadata {
func (m *RoutesResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -422,11 +422,11 @@ func (m *InterfacesReply) GetResponse() []*InterfacesResponse {
}
type InterfacesResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Interfaces []*Interface `protobuf:"bytes,2,rep,name=interfaces,proto3" json:"interfaces,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Interfaces []*Interface `protobuf:"bytes,2,rep,name=interfaces,proto3" json:"interfaces,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *InterfacesResponse) Reset() { *m = InterfacesResponse{} }
@@ -458,7 +458,7 @@ func (m *InterfacesResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_InterfacesResponse proto.InternalMessageInfo
func (m *InterfacesResponse) GetMetadata() *common.NodeMetadata {
func (m *InterfacesResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -571,59 +571,59 @@ func init() {
func init() { proto.RegisterFile("network/network.proto", fileDescriptor_96ad937ae012c472) }
var fileDescriptor_96ad937ae012c472 = []byte{
// 830 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6f, 0xeb, 0x44,
0x14, 0xc5, 0xf9, 0xce, 0x4d, 0x9d, 0x4c, 0xa7, 0xa5, 0xb5, 0xfa, 0x58, 0x44, 0x59, 0xa0, 0x2a,
0xd2, 0x4b, 0x50, 0x1e, 0x2a, 0x3b, 0x24, 0x3b, 0x71, 0x1e, 0x21, 0xa9, 0x6d, 0xa6, 0x2e, 0xa0,
0xb7, 0xa9, 0xa6, 0xf1, 0x24, 0xcf, 0x10, 0x7f, 0xc8, 0x76, 0x54, 0xc2, 0x0e, 0xf1, 0x4b, 0xf8,
0x05, 0x6c, 0xf9, 0x79, 0xc8, 0xe3, 0xb1, 0xeb, 0x10, 0xd8, 0xb0, 0xf2, 0xdc, 0x73, 0xce, 0xdc,
0x7b, 0x67, 0xce, 0xcc, 0x18, 0x3e, 0xf5, 0x59, 0xf2, 0x12, 0x44, 0x3f, 0x8f, 0xc5, 0x77, 0x14,
0x46, 0x41, 0x12, 0xe0, 0xa6, 0x08, 0x6f, 0xde, 0x6c, 0x83, 0x60, 0xbb, 0x63, 0x63, 0x0e, 0x3f,
0xef, 0x37, 0x63, 0xe6, 0x85, 0xc9, 0x21, 0x53, 0xdd, 0x5c, 0xac, 0x03, 0xcf, 0x0b, 0xfc, 0x71,
0xf6, 0xc9, 0xc0, 0x81, 0x06, 0x1d, 0x12, 0xec, 0x13, 0x16, 0x13, 0x16, 0xee, 0x0e, 0xf8, 0x1d,
0xb4, 0x22, 0x16, 0x87, 0x81, 0x1f, 0x33, 0x45, 0xea, 0x57, 0x6f, 0x3b, 0x93, 0xeb, 0x51, 0x5e,
0x2b, 0xd7, 0x65, 0x34, 0x29, 0x84, 0x83, 0x9f, 0xa0, 0x7b, 0xcc, 0xe1, 0x2f, 0xa0, 0xe5, 0xb1,
0x84, 0x3a, 0x34, 0xa1, 0x8a, 0xd4, 0x97, 0x6e, 0x3b, 0x93, 0xcb, 0x91, 0x28, 0x6b, 0x04, 0x0e,
0xbb, 0x17, 0x1c, 0x29, 0x54, 0xf8, 0x73, 0x68, 0x44, 0x3c, 0x87, 0x52, 0xe1, 0x65, 0xbb, 0xc7,
0x65, 0x89, 0x60, 0x07, 0x7f, 0x54, 0xa0, 0xce, 0x11, 0xfc, 0x19, 0xb4, 0x5d, 0x3f, 0x61, 0xd1,
0x86, 0xae, 0x19, 0x2f, 0xd2, 0x26, 0xaf, 0x00, 0xee, 0x43, 0xc7, 0x61, 0x71, 0xe2, 0xfa, 0x34,
0x71, 0x03, 0x5f, 0xa9, 0x70, 0xbe, 0x0c, 0x61, 0x05, 0x9a, 0x5b, 0x9a, 0xb0, 0x17, 0x7a, 0x50,
0xaa, 0x9c, 0xcd, 0x43, 0x7c, 0x05, 0x0d, 0x8f, 0x25, 0x91, 0xbb, 0x56, 0x6a, 0x7d, 0xe9, 0x56,
0x26, 0x22, 0xc2, 0x97, 0x50, 0x8f, 0xd7, 0x41, 0xc8, 0x94, 0x3a, 0x87, 0xb3, 0x20, 0x55, 0xc7,
0xc1, 0x3e, 0x5a, 0x33, 0xa5, 0xc1, 0xd3, 0x88, 0x08, 0x8f, 0xa0, 0xb1, 0xa1, 0x9e, 0xbb, 0x3b,
0x28, 0xcd, 0xbe, 0x74, 0xdb, 0x9d, 0x5c, 0x15, 0x2b, 0x52, 0x1d, 0x27, 0x62, 0x71, 0x3c, 0xe7,
0x2c, 0x11, 0x2a, 0x3c, 0x81, 0x16, 0xb7, 0x64, 0x1d, 0xec, 0x94, 0xd6, 0x3f, 0x66, 0xf0, 0x15,
0x5b, 0x82, 0x25, 0x85, 0x2e, 0xed, 0x68, 0xb3, 0xa3, 0xdb, 0x58, 0x69, 0x67, 0x1d, 0xf1, 0x60,
0xf0, 0x2d, 0xf4, 0x16, 0xf9, 0x46, 0x08, 0x5f, 0xbf, 0x3a, 0xf1, 0xf5, 0x4d, 0x91, 0xbc, 0xac,
0x3d, 0xf1, 0xf6, 0x57, 0xc0, 0xa7, 0xfc, 0xff, 0xf0, 0x77, 0x02, 0x50, 0x98, 0x93, 0x7b, 0x8c,
0x4f, 0x5b, 0x20, 0x25, 0xd5, 0xe0, 0x2f, 0x09, 0xda, 0x05, 0x93, 0xae, 0xd5, 0xf5, 0x1d, 0xf6,
0x0b, 0x2f, 0x28, 0x93, 0x2c, 0xc0, 0x08, 0xaa, 0x5e, 0xb2, 0xe7, 0xfe, 0xca, 0x24, 0x1d, 0x62,
0x0c, 0x35, 0x9f, 0x7a, 0x4c, 0x98, 0xca, 0xc7, 0x78, 0x00, 0x67, 0x1f, 0x69, 0xe4, 0xbc, 0xd0,
0x88, 0x51, 0xc7, 0x89, 0xb8, 0xaf, 0x6d, 0x72, 0x84, 0xe1, 0xb7, 0xf9, 0x5e, 0xd6, 0xf9, 0xe6,
0x5f, 0x9f, 0x36, 0x37, 0x4f, 0x69, 0xb1, 0xc9, 0xfc, 0xf8, 0x85, 0x34, 0x73, 0x52, 0x69, 0xf4,
0xab, 0xfc, 0xf8, 0xe5, 0xc0, 0xf0, 0x3b, 0x90, 0x8f, 0x5c, 0xc6, 0x32, 0xb4, 0xd5, 0xf9, 0xd3,
0xa3, 0xf1, 0x60, 0xe9, 0x53, 0xf4, 0x09, 0xee, 0x40, 0x53, 0x9d, 0x3f, 0x2d, 0x0c, 0xdd, 0x46,
0x15, 0xdc, 0x82, 0xda, 0xc2, 0xfa, 0xfe, 0x4b, 0x54, 0xc1, 0x67, 0xd0, 0x12, 0xf0, 0x1d, 0x02,
0x81, 0xdf, 0x21, 0xb8, 0xa9, 0x20, 0x69, 0xf8, 0x67, 0x05, 0xe4, 0xa3, 0x73, 0x80, 0xcf, 0x41,
0x26, 0xb6, 0x45, 0x4c, 0xfb, 0x35, 0xef, 0x05, 0xf4, 0x04, 0x44, 0xf4, 0xd9, 0x82, 0xe8, 0x53,
0x1b, 0x49, 0x25, 0xdd, 0x52, 0x27, 0x86, 0xbe, 0x42, 0x15, 0xdc, 0x83, 0x8e, 0x80, 0x34, 0xd3,
0xb4, 0x51, 0xb5, 0xa4, 0x79, 0xb0, 0x55, 0x7b, 0x31, 0x45, 0x35, 0x8c, 0xe0, 0x4c, 0x40, 0xef,
0x55, 0x5b, 0x9f, 0xa1, 0x56, 0xba, 0x88, 0x3c, 0xbb, 0x8a, 0xda, 0xb8, 0x0b, 0x20, 0xc2, 0x7b,
0x62, 0x23, 0x28, 0x4d, 0xf8, 0xa0, 0x6b, 0x44, 0x45, 0x9d, 0x72, 0x99, 0x05, 0x99, 0xa1, 0xb3,
0x52, 0x7f, 0x33, 0x83, 0x98, 0x8f, 0x69, 0x5a, 0xb9, 0xa4, 0xfa, 0xd1, 0x24, 0x16, 0xea, 0x96,
0x12, 0x1b, 0xf6, 0x12, 0xf5, 0x4a, 0x82, 0xd9, 0x37, 0x53, 0x0b, 0x21, 0x8c, 0xa1, 0x5b, 0x54,
0xce, 0xb2, 0x9c, 0x97, 0xaa, 0x6b, 0xaa, 0xa6, 0xaf, 0xd0, 0x70, 0xf8, 0xbb, 0x04, 0xdd, 0x63,
0xf3, 0x52, 0xd1, 0x7c, 0xa5, 0xbe, 0x7f, 0x7a, 0x34, 0x96, 0x86, 0xf9, 0x83, 0x91, 0x39, 0x91,
0x21, 0x16, 0x92, 0xd2, 0xbc, 0x3c, 0xd0, 0x88, 0xa9, 0xce, 0xa6, 0xea, 0x43, 0xea, 0xce, 0x39,
0xc8, 0x1c, 0x5b, 0x99, 0xa6, 0xa5, 0xa9, 0xd3, 0x25, 0xaa, 0xe2, 0x6b, 0xb8, 0xe0, 0x90, 0x65,
0x2e, 0x0c, 0xfb, 0xc9, 0x36, 0xb3, 0x01, 0xaa, 0x15, 0xf3, 0xef, 0x1f, 0x57, 0xf6, 0x82, 0xcf,
0xaf, 0x4f, 0x7e, 0x93, 0xa0, 0x69, 0x64, 0x47, 0x09, 0xdf, 0x41, 0x23, 0x7b, 0x29, 0xf1, 0xd5,
0x28, 0x7b, 0xaa, 0x47, 0xf9, 0x53, 0x3d, 0xd2, 0xd3, 0xa7, 0xfa, 0xe6, 0xf2, 0xe4, 0xb9, 0x4d,
0xaf, 0xef, 0xd7, 0x00, 0xaf, 0xb7, 0xf0, 0x3f, 0xe7, 0x2a, 0xff, 0x7a, 0xa5, 0xc3, 0xdd, 0x41,
0x5b, 0x42, 0x6f, 0x1d, 0x78, 0x05, 0x4d, 0x43, 0x57, 0x03, 0xd1, 0x93, 0x1a, 0xba, 0x96, 0xf4,
0x61, 0xb8, 0x75, 0x93, 0x8f, 0xfb, 0xe7, 0xf4, 0x12, 0x8f, 0x13, 0xba, 0x0b, 0xe2, 0xb7, 0xf1,
0x21, 0x4e, 0x98, 0x17, 0x67, 0xd1, 0x98, 0x86, 0x6e, 0xfe, 0xcf, 0x79, 0x6e, 0xf0, 0xb2, 0xef,
0xfe, 0x0e, 0x00, 0x00, 0xff, 0xff, 0xf3, 0xb1, 0x46, 0x21, 0x8d, 0x06, 0x00, 0x00,
// 829 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6f, 0xe3, 0x36,
0x10, 0xad, 0xfc, 0xed, 0x71, 0x64, 0x33, 0xcc, 0x36, 0x11, 0xb2, 0x3d, 0x18, 0x3e, 0x14, 0x81,
0x81, 0xb5, 0x01, 0xef, 0x22, 0xbd, 0x15, 0x90, 0x6c, 0x79, 0xeb, 0xda, 0x91, 0x54, 0x46, 0x69,
0x8b, 0xbd, 0x04, 0x8c, 0x45, 0x3b, 0x42, 0xad, 0x0f, 0x48, 0x32, 0x52, 0x5f, 0x0a, 0x14, 0xfd,
0x25, 0xfd, 0x05, 0xbd, 0xf6, 0xe7, 0x15, 0xa2, 0x28, 0x45, 0xae, 0xdb, 0xcb, 0x9e, 0xc4, 0x79,
0xef, 0x71, 0x66, 0xc8, 0x47, 0x52, 0xf0, 0xa5, 0xcf, 0x92, 0x97, 0x20, 0xfa, 0x65, 0x2c, 0xbe,
0xa3, 0x30, 0x0a, 0x92, 0x00, 0x37, 0x45, 0x78, 0xfd, 0x76, 0x1b, 0x04, 0xdb, 0x1d, 0x1b, 0x73,
0xf8, 0x69, 0xbf, 0x19, 0x33, 0x2f, 0x4c, 0x0e, 0x99, 0xea, 0xfa, 0x62, 0x1d, 0x78, 0x5e, 0xe0,
0x8f, 0xb3, 0x4f, 0x06, 0x0e, 0x34, 0xe8, 0x90, 0x60, 0x9f, 0xb0, 0x98, 0xb0, 0x70, 0x77, 0xc0,
0xef, 0xa1, 0x15, 0xb1, 0x38, 0x0c, 0xfc, 0x98, 0x29, 0x52, 0xbf, 0x7a, 0xd3, 0x99, 0x5c, 0x8d,
0xf2, 0x5a, 0xb9, 0x2e, 0xa3, 0x49, 0x21, 0x1c, 0xf8, 0xd0, 0x3d, 0xe6, 0xf0, 0x07, 0x68, 0x79,
0x2c, 0xa1, 0x0e, 0x4d, 0xa8, 0x22, 0xf5, 0xa5, 0x9b, 0xce, 0x44, 0x19, 0x89, 0xb2, 0xb9, 0xe6,
0x4e, 0xf0, 0xa4, 0x50, 0xe2, 0xaf, 0xa1, 0x11, 0xf1, 0x3c, 0x4a, 0x85, 0x97, 0xee, 0x1e, 0x97,
0x26, 0x82, 0x1d, 0xfc, 0x59, 0x81, 0x3a, 0x47, 0xf0, 0x57, 0xd0, 0x76, 0xfd, 0x84, 0x45, 0x1b,
0xba, 0x66, 0xbc, 0x50, 0x9b, 0xbc, 0x02, 0xb8, 0x0f, 0x1d, 0x87, 0xc5, 0x89, 0xeb, 0xd3, 0xc4,
0x0d, 0x7c, 0xa5, 0xc2, 0xf9, 0x32, 0x84, 0x15, 0x68, 0x6e, 0x69, 0xc2, 0x5e, 0xe8, 0x41, 0xa9,
0x72, 0x36, 0x0f, 0xf1, 0x25, 0x34, 0x3c, 0x96, 0x44, 0xee, 0x5a, 0xa9, 0xf5, 0xa5, 0x1b, 0x99,
0x88, 0x08, 0xbf, 0x81, 0x7a, 0xbc, 0x0e, 0x42, 0xa6, 0xd4, 0x39, 0x9c, 0x05, 0xa9, 0x3a, 0x0e,
0xf6, 0xd1, 0x9a, 0x29, 0x0d, 0x9e, 0x46, 0x44, 0x78, 0x04, 0x8d, 0x0d, 0xf5, 0xdc, 0xdd, 0x41,
0x69, 0xf6, 0xa5, 0x9b, 0xee, 0xe4, 0xb2, 0x58, 0x91, 0xea, 0x38, 0x11, 0x8b, 0xe3, 0x39, 0x67,
0x89, 0x50, 0xe1, 0x09, 0xb4, 0xb8, 0x2d, 0xeb, 0x60, 0xa7, 0xb4, 0xfe, 0x35, 0x83, 0xaf, 0xd8,
0x12, 0x2c, 0x29, 0x74, 0x69, 0x47, 0x9b, 0x1d, 0xdd, 0xc6, 0x4a, 0x3b, 0xeb, 0x88, 0x07, 0x83,
0xef, 0xa1, 0xb7, 0xc8, 0x37, 0x42, 0x78, 0xfb, 0xcd, 0x89, 0xb7, 0x6f, 0x8b, 0xe4, 0x65, 0xed,
0x89, 0xbf, 0xbf, 0x01, 0x3e, 0xe5, 0x3f, 0xd3, 0xe3, 0x09, 0x40, 0x61, 0x50, 0xee, 0x33, 0x3e,
0x6d, 0x83, 0x94, 0x54, 0x83, 0xbf, 0x25, 0x68, 0x17, 0x4c, 0xba, 0x5e, 0xd7, 0x77, 0xd8, 0xaf,
0xbc, 0xa8, 0x4c, 0xb2, 0x00, 0x23, 0xa8, 0x7a, 0xc9, 0x9e, 0x7b, 0x2c, 0x93, 0x74, 0x88, 0x31,
0xd4, 0x7c, 0xea, 0x31, 0x61, 0x2c, 0x1f, 0xe3, 0x01, 0x9c, 0x3d, 0xd3, 0xc8, 0x79, 0xa1, 0x11,
0xa3, 0x8e, 0x13, 0x71, 0x6f, 0xdb, 0xe4, 0x08, 0xc3, 0xef, 0xf2, 0xfd, 0xac, 0x73, 0x03, 0xae,
0x4e, 0x9b, 0x9b, 0xa7, 0xb4, 0xd8, 0x68, 0x7e, 0x04, 0x43, 0x9a, 0xb9, 0xa9, 0x34, 0xfa, 0x55,
0x7e, 0x04, 0x73, 0x60, 0xf8, 0x03, 0xc8, 0x47, 0x4e, 0x63, 0x19, 0xda, 0xea, 0xfc, 0xf1, 0xc1,
0xb8, 0xb7, 0xf4, 0x29, 0xfa, 0x02, 0x77, 0xa0, 0xa9, 0xce, 0x1f, 0x17, 0x86, 0x6e, 0xa3, 0x0a,
0x6e, 0x41, 0x6d, 0x61, 0xfd, 0xf8, 0x01, 0x55, 0xf0, 0x19, 0xb4, 0x04, 0x7c, 0x8b, 0x40, 0xe0,
0xb7, 0x08, 0xae, 0x2b, 0x48, 0x1a, 0xfe, 0x55, 0x01, 0xf9, 0xe8, 0x2c, 0xe0, 0x73, 0x90, 0x89,
0x6d, 0x11, 0xd3, 0x7e, 0xcd, 0x7b, 0x01, 0x3d, 0x01, 0x11, 0x7d, 0xb6, 0x20, 0xfa, 0xd4, 0x46,
0x52, 0x49, 0xb7, 0xd4, 0x89, 0xa1, 0xaf, 0x50, 0x05, 0xf7, 0xa0, 0x23, 0x20, 0xcd, 0x34, 0x6d,
0x54, 0x2d, 0x69, 0xee, 0x6d, 0xd5, 0x5e, 0x4c, 0x51, 0x0d, 0x23, 0x38, 0x13, 0xd0, 0x47, 0xd5,
0xd6, 0x67, 0xa8, 0x95, 0x2e, 0x22, 0xcf, 0xae, 0xa2, 0x36, 0xee, 0x02, 0x88, 0xf0, 0x8e, 0xd8,
0x08, 0x4a, 0x13, 0x3e, 0xe9, 0x1a, 0x51, 0x51, 0xa7, 0x5c, 0x66, 0x41, 0x66, 0xe8, 0xac, 0xd4,
0xdf, 0xcc, 0x20, 0xe6, 0x43, 0x9a, 0x56, 0x2e, 0xa9, 0x7e, 0x36, 0x89, 0x85, 0xba, 0xa5, 0xc4,
0x86, 0xbd, 0x44, 0xbd, 0x92, 0x60, 0xf6, 0xdd, 0xd4, 0x42, 0x08, 0x63, 0xe8, 0x16, 0x95, 0xb3,
0x2c, 0xe7, 0xa5, 0xea, 0x9a, 0xaa, 0xe9, 0x2b, 0x34, 0x1c, 0xfe, 0x21, 0x41, 0xf7, 0xd8, 0xbc,
0x54, 0x34, 0x5f, 0xa9, 0x1f, 0x1f, 0x1f, 0x8c, 0xa5, 0x61, 0xfe, 0x64, 0x64, 0x4e, 0x64, 0x88,
0x85, 0xa4, 0x34, 0x2f, 0x0f, 0x34, 0x62, 0xaa, 0xb3, 0xa9, 0x7a, 0x9f, 0xba, 0x73, 0x0e, 0x32,
0xc7, 0x56, 0xa6, 0x69, 0x69, 0xea, 0x74, 0x89, 0xaa, 0xf8, 0x0a, 0x2e, 0x38, 0x64, 0x99, 0x0b,
0xc3, 0x7e, 0xb4, 0xcd, 0x6c, 0x80, 0x6a, 0xc5, 0xfc, 0xbb, 0x87, 0x95, 0xbd, 0xe0, 0xf3, 0xeb,
0x93, 0xdf, 0x25, 0x68, 0x1a, 0xd9, 0x51, 0xc2, 0xb7, 0xd0, 0xc8, 0x5e, 0x4c, 0x7c, 0x39, 0xca,
0x9e, 0xec, 0x51, 0xfe, 0x64, 0x8f, 0xf4, 0xf4, 0xc9, 0xbe, 0x7e, 0x73, 0xf2, 0xec, 0xa6, 0x57,
0xf8, 0x5b, 0x80, 0xd7, 0x9b, 0xf8, 0xbf, 0x73, 0x95, 0xff, 0xbc, 0xd6, 0xe1, 0xee, 0xa0, 0x2d,
0xa1, 0xb7, 0x0e, 0xbc, 0x82, 0xa6, 0xa1, 0xab, 0x81, 0xe8, 0x49, 0x0d, 0x5d, 0x4b, 0xfa, 0x34,
0xdc, 0xba, 0xc9, 0xf3, 0xfe, 0x29, 0xbd, 0xc8, 0xe3, 0x84, 0xee, 0x82, 0xf8, 0x5d, 0x7c, 0x88,
0x13, 0xe6, 0xc5, 0x59, 0x34, 0xa6, 0xa1, 0x9b, 0xff, 0x7b, 0x9e, 0x1a, 0xbc, 0xec, 0xfb, 0x7f,
0x02, 0x00, 0x00, 0xff, 0xff, 0x4a, 0x6f, 0x63, 0x58, 0x95, 0x06, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@@ -59,7 +59,7 @@ message RoutesReply {
}
message RoutesResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
repeated Route routes = 2;
}
@@ -90,7 +90,7 @@ message InterfacesReply {
}
message InterfacesResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
repeated Interface interfaces = 2;
}

View File

@@ -174,11 +174,11 @@ func (m *Container) GetName() string {
// The response message containing the requested containers.
type ContainerResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Containers []*Container `protobuf:"bytes,2,rep,name=containers,proto3" json:"containers,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Containers []*Container `protobuf:"bytes,2,rep,name=containers,proto3" json:"containers,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ContainerResponse) Reset() { *m = ContainerResponse{} }
@@ -210,7 +210,7 @@ func (m *ContainerResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ContainerResponse proto.InternalMessageInfo
func (m *ContainerResponse) GetMetadata() *common.NodeMetadata {
func (m *ContainerResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -347,11 +347,11 @@ func (m *ProcessesReply) GetResponse() []*ProcessResponse {
}
type ProcessResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Processes []*Process `protobuf:"bytes,2,rep,name=processes,proto3" json:"processes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Processes []*Process `protobuf:"bytes,2,rep,name=processes,proto3" json:"processes,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ProcessResponse) Reset() { *m = ProcessResponse{} }
@@ -383,7 +383,7 @@ func (m *ProcessResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_ProcessResponse proto.InternalMessageInfo
func (m *ProcessResponse) GetMetadata() *common.NodeMetadata {
func (m *ProcessResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -575,10 +575,10 @@ func (m *RestartRequest) GetDriver() common.ContainerDriver {
}
type RestartResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RestartResponse) Reset() { *m = RestartResponse{} }
@@ -610,7 +610,7 @@ func (m *RestartResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_RestartResponse proto.InternalMessageInfo
func (m *RestartResponse) GetMetadata() *common.NodeMetadata {
func (m *RestartResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -716,11 +716,11 @@ func (m *StatsRequest) GetDriver() common.ContainerDriver {
// The response message containing the requested stats.
type StatsResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Stats []*Stat `protobuf:"bytes,2,rep,name=stats,proto3" json:"stats,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Stats []*Stat `protobuf:"bytes,2,rep,name=stats,proto3" json:"stats,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *StatsResponse) Reset() { *m = StatsResponse{} }
@@ -752,7 +752,7 @@ func (m *StatsResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_StatsResponse proto.InternalMessageInfo
func (m *StatsResponse) GetMetadata() *common.NodeMetadata {
func (m *StatsResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -894,11 +894,11 @@ func (m *Stat) GetName() string {
}
type MemInfoResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Meminfo *MemInfo `protobuf:"bytes,2,opt,name=meminfo,proto3" json:"meminfo,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Meminfo *MemInfo `protobuf:"bytes,2,opt,name=meminfo,proto3" json:"meminfo,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *MemInfoResponse) Reset() { *m = MemInfoResponse{} }
@@ -930,7 +930,7 @@ func (m *MemInfoResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_MemInfoResponse proto.InternalMessageInfo
func (m *MemInfoResponse) GetMetadata() *common.NodeMetadata {
func (m *MemInfoResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -1430,95 +1430,95 @@ func init() {
func init() { proto.RegisterFile("os/os.proto", fileDescriptor_b20a722d09fd3254) }
var fileDescriptor_b20a722d09fd3254 = []byte{
// 1400 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xdb, 0x6e, 0x1b, 0xb7,
0x16, 0x85, 0x64, 0xc9, 0xb2, 0x68, 0x5b, 0xb6, 0xe9, 0x5c, 0x18, 0x27, 0x27, 0xc7, 0xd1, 0x89,
0x13, 0xe7, 0x9c, 0xd8, 0x4a, 0x7c, 0x0a, 0xb4, 0x40, 0x0b, 0x14, 0x49, 0xdc, 0x87, 0x3c, 0xa4,
0x09, 0x26, 0xed, 0x4b, 0x81, 0xc2, 0xa0, 0x66, 0x28, 0x89, 0xf5, 0x70, 0x38, 0x1d, 0x72, 0x94,
0xba, 0xbf, 0xd0, 0x1f, 0xe8, 0x5b, 0x5f, 0xfa, 0x17, 0xfd, 0xb9, 0x62, 0x73, 0x73, 0x46, 0x1c,
0xe5, 0xd2, 0x24, 0x45, 0x9f, 0x34, 0x7b, 0xed, 0xc5, 0x45, 0xee, 0x0b, 0x2f, 0x22, 0xeb, 0xda,
0x8c, 0xb4, 0x39, 0xce, 0x0b, 0x6d, 0x35, 0x6d, 0x6b, 0xb3, 0x77, 0x7d, 0xaa, 0xf5, 0x34, 0x15,
0x23, 0x87, 0x8c, 0xcb, 0xc9, 0x48, 0xa8, 0xdc, 0x5e, 0x20, 0x61, 0x6f, 0x37, 0xd6, 0x4a, 0xe9,
0x6c, 0x84, 0x3f, 0x08, 0x0e, 0xc7, 0x64, 0xe7, 0x89, 0xce, 0x2c, 0x97, 0x99, 0x28, 0x4c, 0x24,
0x7e, 0x2c, 0x85, 0xb1, 0xf4, 0x06, 0xe9, 0x67, 0x5c, 0x09, 0x93, 0xf3, 0x58, 0xb0, 0xd6, 0x7e,
0xeb, 0xb0, 0x1f, 0x2d, 0x00, 0x3a, 0x22, 0xab, 0x49, 0x21, 0xe7, 0xa2, 0x60, 0xed, 0xfd, 0xd6,
0xe1, 0xe0, 0xe4, 0xea, 0xb1, 0x57, 0xac, 0x85, 0x4e, 0x9d, 0x3b, 0xf2, 0xb4, 0xe1, 0xef, 0x2d,
0xd2, 0xaf, 0x7d, 0x7f, 0x21, 0x3e, 0x20, 0x6d, 0x99, 0x38, 0xe1, 0x7e, 0xd4, 0x96, 0x09, 0xbd,
0x44, 0xba, 0x52, 0xf1, 0xa9, 0x60, 0x2b, 0x0e, 0x42, 0x83, 0x6e, 0x93, 0x95, 0x5c, 0x26, 0xac,
0xb3, 0xdf, 0x3a, 0xdc, 0x8c, 0xe0, 0x93, 0x5e, 0x21, 0xab, 0xc6, 0x72, 0x5b, 0x1a, 0xd6, 0x75,
0x44, 0x6f, 0xd1, 0xcb, 0x64, 0x35, 0xd7, 0xc9, 0x99, 0x4c, 0xd8, 0x2a, 0x0a, 0xe4, 0x3a, 0x79,
0x9a, 0x50, 0x4a, 0x3a, 0x30, 0x27, 0xeb, 0x39, 0xd0, 0x7d, 0x0f, 0x6d, 0x90, 0x8a, 0x48, 0x98,
0x5c, 0x67, 0x46, 0xd0, 0x07, 0x64, 0x4d, 0x09, 0xcb, 0x13, 0x6e, 0xb9, 0x5b, 0xec, 0xfa, 0xc9,
0xa5, 0x2a, 0xdc, 0xaf, 0x75, 0x22, 0x9e, 0x79, 0x5f, 0x54, 0xb3, 0xe8, 0x11, 0x21, 0x71, 0x9d,
0x51, 0xd6, 0xde, 0x5f, 0x39, 0x5c, 0x3f, 0xd9, 0x3c, 0xd6, 0x66, 0x91, 0x9e, 0x28, 0x20, 0x0c,
0x4f, 0xc9, 0x56, 0x58, 0x80, 0x3c, 0xbd, 0xa0, 0x0f, 0xc9, 0x5a, 0xe1, 0xe7, 0x67, 0x2d, 0x37,
0xfe, 0x72, 0x73, 0xbc, 0x77, 0x46, 0x35, 0x6d, 0x48, 0xc9, 0xf6, 0x8b, 0x42, 0xc7, 0xc2, 0x18,
0x51, 0x55, 0x71, 0xf8, 0x88, 0x0c, 0x02, 0x0c, 0x84, 0x47, 0xaf, 0x09, 0xef, 0x82, 0xb0, 0x67,
0xbd, 0x41, 0x36, 0x23, 0x5b, 0x4b, 0xce, 0x8f, 0x48, 0xc8, 0x3d, 0xd2, 0xcf, 0xab, 0x75, 0xf8,
0x7c, 0xac, 0x87, 0xd3, 0x2e, 0xbc, 0xc3, 0x5f, 0xdb, 0xa4, 0xe7, 0xe1, 0xaa, 0xc6, 0x30, 0x47,
0x17, 0x6b, 0x4c, 0x49, 0x27, 0xcf, 0x7d, 0x77, 0x74, 0x23, 0xf7, 0x0d, 0xfd, 0x01, 0x95, 0xae,
0xfb, 0xc3, 0x19, 0x94, 0x91, 0x9e, 0x9d, 0x15, 0x82, 0x27, 0xc6, 0xf5, 0x48, 0x37, 0xaa, 0x4c,
0x7a, 0x8d, 0xac, 0xc5, 0x79, 0x79, 0x66, 0xa5, 0x12, 0xae, 0x53, 0x5a, 0x51, 0x2f, 0xce, 0xcb,
0x6f, 0xa4, 0x12, 0xf4, 0x80, 0x0c, 0xe6, 0xb2, 0xb0, 0x25, 0x4f, 0xcf, 0x94, 0x50, 0xba, 0xb8,
0x70, 0x2d, 0xd3, 0x89, 0x36, 0x3d, 0xfa, 0xcc, 0x81, 0xf4, 0x2e, 0xd9, 0x2a, 0x84, 0x91, 0x89,
0xc8, 0x6c, 0xc5, 0xeb, 0x39, 0xde, 0xa0, 0x82, 0x3d, 0x91, 0x91, 0x1e, 0x24, 0x86, 0x67, 0x09,
0x5b, 0x73, 0x8b, 0xab, 0x4c, 0x7a, 0x93, 0x10, 0xf1, 0x93, 0x88, 0x4b, 0xcb, 0xc7, 0xa9, 0x60,
0x7d, 0xe7, 0x0c, 0x10, 0x08, 0x94, 0x17, 0x53, 0xc3, 0x08, 0x76, 0x27, 0x7c, 0x0f, 0x35, 0x19,
0x44, 0xc2, 0x58, 0x5e, 0xd8, 0xf7, 0xdb, 0xa5, 0xcb, 0x1b, 0x69, 0xb1, 0x6b, 0x57, 0xde, 0x6f,
0xd7, 0x3e, 0x21, 0x5b, 0xf5, 0x84, 0x1f, 0x5b, 0xfb, 0xe1, 0x97, 0x64, 0xa3, 0x16, 0x79, 0x47,
0x07, 0x2e, 0x4d, 0x14, 0x74, 0xe0, 0xf7, 0x64, 0xe3, 0xa5, 0xe5, 0xf6, 0x9f, 0x3a, 0x9a, 0x38,
0xd9, 0xf4, 0xf2, 0x1f, 0xdd, 0xde, 0x37, 0xb1, 0x03, 0xab, 0xd6, 0x5e, 0x83, 0x78, 0x40, 0x13,
0x7b, 0xd1, 0x0c, 0x3f, 0x27, 0xc4, 0x4f, 0x01, 0x09, 0x38, 0x7a, 0x2d, 0x01, 0x3b, 0xd5, 0x80,
0x37, 0x6d, 0xc0, 0xdf, 0x5a, 0xa4, 0x03, 0xbe, 0x0f, 0x2c, 0xf6, 0x2d, 0xb2, 0x81, 0xad, 0x79,
0x56, 0x1a, 0x38, 0x3c, 0x3b, 0xae, 0x41, 0xd7, 0x11, 0xfb, 0x16, 0x20, 0x7a, 0x9d, 0xf4, 0x61,
0x23, 0xa0, 0xbf, 0xeb, 0xfc, 0xb0, 0x33, 0xd0, 0xf9, 0x01, 0xa7, 0xe6, 0x0f, 0x64, 0xeb, 0x99,
0x50, 0x4f, 0xb3, 0x89, 0xfe, 0x1b, 0x39, 0x3c, 0x20, 0x3d, 0x25, 0x94, 0xcc, 0x26, 0xda, 0x05,
0xe1, 0x0f, 0x88, 0x4a, 0xb7, 0xf2, 0x41, 0x37, 0xd5, 0x73, 0xbd, 0xa3, 0x9b, 0x96, 0xd6, 0x13,
0xa4, 0xf3, 0x97, 0x0d, 0xd2, 0xf3, 0x5e, 0xba, 0x07, 0xab, 0x54, 0x56, 0x5b, 0x9e, 0xba, 0x55,
0x76, 0xa2, 0xda, 0x86, 0xad, 0xab, 0x84, 0x9a, 0x14, 0x42, 0xb8, 0xf5, 0x74, 0xa2, 0xca, 0xa4,
0x43, 0x97, 0x59, 0x3e, 0xe7, 0x32, 0x75, 0x9b, 0x77, 0xc5, 0xb9, 0x1b, 0x18, 0x8c, 0x1e, 0x97,
0x93, 0x09, 0x1c, 0xff, 0x98, 0xf8, 0xca, 0x84, 0x5b, 0x2a, 0xe6, 0xf1, 0x4c, 0x24, 0x3e, 0xe3,
0xde, 0x82, 0x03, 0xc1, 0xbc, 0xe2, 0xb9, 0xf7, 0xe1, 0xb1, 0x13, 0x20, 0x30, 0x8e, 0xc7, 0x56,
0xce, 0x85, 0x3f, 0x6a, 0xbc, 0x05, 0x31, 0xc8, 0xcc, 0x7b, 0xd6, 0x30, 0x86, 0xca, 0x06, 0x4d,
0xfc, 0xe2, 0x99, 0xce, 0xdc, 0x21, 0xd3, 0x89, 0x02, 0x04, 0x22, 0xa9, 0xb8, 0x8e, 0x41, 0x30,
0x92, 0x10, 0x5b, 0x68, 0x4c, 0x64, 0x2a, 0xd8, 0x7a, 0xa8, 0x01, 0x48, 0xa8, 0xe1, 0x18, 0x1b,
0x4d, 0x0d, 0xc7, 0xd9, 0x27, 0xeb, 0x65, 0x26, 0xe6, 0x32, 0xc6, 0xd3, 0x6e, 0x13, 0x5b, 0x31,
0x80, 0x5c, 0xb6, 0x53, 0x1d, 0x9f, 0x8b, 0x84, 0x0d, 0x7c, 0xb6, 0xd1, 0x84, 0xae, 0x87, 0x2c,
0x60, 0x91, 0xb6, 0x9c, 0x6f, 0x01, 0x40, 0xf4, 0x60, 0xb8, 0x32, 0x6d, 0x63, 0xf4, 0x95, 0x0d,
0xf7, 0x42, 0x22, 0x0b, 0x7b, 0xc1, 0x76, 0x9c, 0x03, 0x0d, 0xd0, 0x7b, 0x55, 0x48, 0x2b, 0xc6,
0x3c, 0x3e, 0x67, 0x14, 0xf5, 0x6a, 0x00, 0xbc, 0x10, 0x75, 0xce, 0xa7, 0xc2, 0xb0, 0x5d, 0xf4,
0xd6, 0x00, 0xd4, 0x40, 0xf1, 0x3c, 0x17, 0x09, 0xbb, 0x84, 0x35, 0x40, 0xcb, 0xdd, 0x40, 0x33,
0x25, 0x14, 0xbb, 0x8c, 0x33, 0x39, 0x03, 0xb6, 0x8a, 0x49, 0xf9, 0x98, 0x5d, 0x71, 0xa0, 0xfb,
0x86, 0x6c, 0x99, 0x42, 0xc4, 0x29, 0x97, 0xca, 0xa5, 0xe2, 0x2a, 0x66, 0x2b, 0xc4, 0x5c, 0x27,
0x94, 0x99, 0x47, 0x18, 0xf3, 0x9d, 0x50, 0x23, 0x90, 0xcd, 0x73, 0x51, 0x64, 0x22, 0x35, 0x16,
0x62, 0xb8, 0x86, 0xd9, 0x0c, 0x20, 0x50, 0x80, 0x05, 0xbb, 0xd4, 0x1a, 0xb6, 0x87, 0x0a, 0x0b,
0x04, 0x14, 0xb2, 0x89, 0x29, 0x33, 0x83, 0xf5, 0xb8, 0x8e, 0x0a, 0x01, 0x04, 0x91, 0x8e, 0x75,
0x99, 0xc5, 0x82, 0xdd, 0xc0, 0x48, 0xd1, 0x82, 0xf5, 0xd7, 0xc9, 0xb2, 0x2a, 0x67, 0xff, 0xc2,
0xf5, 0x87, 0x18, 0xa8, 0xc3, 0x56, 0x97, 0x36, 0x95, 0x4a, 0x5a, 0x76, 0x13, 0xd5, 0x03, 0x68,
0xc1, 0xb0, 0x22, 0xe1, 0x86, 0xfd, 0x3b, 0x64, 0x38, 0x08, 0xe6, 0x99, 0x2b, 0x9e, 0xa6, 0x3a,
0xc6, 0xc2, 0xef, 0xe3, 0x3c, 0x21, 0x06, 0x2a, 0xde, 0x2e, 0x8d, 0x48, 0xd8, 0x2d, 0x54, 0x09,
0xa0, 0x40, 0x25, 0x9e, 0x95, 0xd9, 0x39, 0x1b, 0x36, 0x54, 0x1c, 0x46, 0xef, 0x93, 0x9d, 0x19,
0x2f, 0x92, 0x57, 0xbc, 0x10, 0xb1, 0x2e, 0x8a, 0x32, 0xb7, 0x22, 0x61, 0xff, 0x71, 0xc4, 0xd7,
0x1d, 0xf4, 0x36, 0xd9, 0x84, 0x76, 0x98, 0x95, 0x53, 0x81, 0x3d, 0x72, 0x1b, 0xdf, 0x07, 0x0d,
0x90, 0xde, 0x21, 0x03, 0xd7, 0x02, 0x0b, 0xda, 0x01, 0x3e, 0x0f, 0x9a, 0x68, 0xcd, 0xcb, 0x55,
0xe2, 0xfb, 0xea, 0x4e, 0xc0, 0xab, 0x51, 0xe8, 0xf2, 0x58, 0x71, 0xcc, 0xc4, 0x5d, 0x7f, 0x4e,
0x7b, 0xdb, 0x3d, 0x31, 0x14, 0x77, 0x1b, 0xe0, 0x10, 0x77, 0x8e, 0x37, 0x41, 0xbd, 0x9e, 0x0a,
0xc7, 0xde, 0x43, 0xf5, 0x26, 0x0a, 0x31, 0xd5, 0x88, 0xd3, 0xf9, 0x2f, 0xc6, 0xd4, 0x00, 0x1b,
0xac, 0xc2, 0xcc, 0x13, 0xf6, 0xbf, 0x25, 0x16, 0x80, 0x0d, 0x96, 0x29, 0x8b, 0x9c, 0xdd, 0x5f,
0x62, 0x01, 0x08, 0x75, 0xa9, 0x01, 0xf9, 0xb3, 0x60, 0x47, 0x58, 0x97, 0x10, 0x83, 0xea, 0x26,
0xb2, 0x10, 0xb1, 0x55, 0x3c, 0xff, 0xe4, 0x9c, 0x1d, 0x63, 0x75, 0x03, 0xa8, 0xc1, 0x38, 0x51,
0x6c, 0xb4, 0xc4, 0x38, 0x51, 0x0d, 0xc6, 0xc3, 0x29, 0x7b, 0xb0, 0xc4, 0x78, 0x38, 0x3d, 0xf9,
0xa3, 0x4d, 0xda, 0xcf, 0x5f, 0xd2, 0xcf, 0x08, 0x59, 0xbc, 0xc0, 0x69, 0xf3, 0xa9, 0x5d, 0xbd,
0x3b, 0xf6, 0x76, 0x97, 0x61, 0xb8, 0x7f, 0x4e, 0x48, 0xf7, 0x54, 0x09, 0x33, 0xa5, 0x57, 0x8e,
0xf1, 0x8f, 0xd7, 0x71, 0xf5, 0xc7, 0xeb, 0xf8, 0x2b, 0xf8, 0xe3, 0xb5, 0xb7, 0x53, 0xdd, 0x7b,
0xa7, 0x70, 0xdf, 0xf9, 0x31, 0xab, 0xfe, 0x7d, 0xf8, 0xb6, 0x41, 0xdb, 0x8d, 0x3b, 0x0c, 0xc6,
0x7c, 0x4a, 0xfa, 0xf5, 0x4b, 0xfe, 0xad, 0xc3, 0x68, 0xf0, 0xa6, 0x5e, 0x3c, 0xf8, 0x7b, 0xfe,
0x69, 0x45, 0x69, 0xe3, 0x9d, 0x85, 0x41, 0x6d, 0x37, 0x30, 0x18, 0x70, 0x8f, 0x74, 0xdd, 0x53,
0x84, 0x6e, 0x07, 0xaf, 0x12, 0x24, 0x0f, 0x02, 0x24, 0x4f, 0x2f, 0x1e, 0x7f, 0x01, 0xff, 0x73,
0x14, 0x80, 0x3c, 0x97, 0x8f, 0xbb, 0xcf, 0xcd, 0xa3, 0x5c, 0xbe, 0x68, 0x7d, 0x77, 0x30, 0x95,
0x76, 0x56, 0x8e, 0x21, 0xf0, 0x91, 0xe5, 0xa9, 0x36, 0x47, 0xe6, 0xc2, 0x58, 0xa1, 0x0c, 0x5a,
0x23, 0x9e, 0xcb, 0x91, 0x36, 0xe3, 0x55, 0xb7, 0xfa, 0xff, 0xff, 0x19, 0x00, 0x00, 0xff, 0xff,
0x42, 0x1d, 0x62, 0x84, 0xc3, 0x0e, 0x00, 0x00,
// 1396 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xdd, 0x6e, 0x1b, 0x45,
0x14, 0x96, 0x1d, 0x3b, 0x8e, 0xc7, 0x89, 0x93, 0x4c, 0xfa, 0x33, 0x4d, 0x4b, 0x49, 0x4d, 0xd3,
0xa6, 0xd0, 0xd8, 0xd4, 0x54, 0x02, 0x09, 0x24, 0xd4, 0x12, 0x84, 0x7a, 0x51, 0xb5, 0xda, 0xc2,
0x0d, 0x12, 0x8a, 0xc6, 0xbb, 0x63, 0x7b, 0x94, 0x9d, 0xdd, 0x65, 0x67, 0xd6, 0x6d, 0x78, 0x05,
0x5e, 0x80, 0x3b, 0x6e, 0x78, 0x0b, 0x5e, 0x0e, 0x9d, 0x39, 0xb3, 0xeb, 0x59, 0xf7, 0x87, 0x96,
0x88, 0x2b, 0xef, 0xf9, 0xce, 0x37, 0xdf, 0xcc, 0xf9, 0x99, 0x1f, 0x93, 0x5e, 0xaa, 0x47, 0xa9,
0x1e, 0x66, 0x79, 0x6a, 0x52, 0xda, 0x4c, 0xf5, 0xfe, 0xf5, 0x59, 0x9a, 0xce, 0x62, 0x31, 0xb2,
0xc8, 0xa4, 0x98, 0x8e, 0x84, 0xca, 0xcc, 0x39, 0x12, 0xf6, 0xf7, 0xc2, 0x54, 0xa9, 0x34, 0x19,
0xe1, 0x0f, 0x82, 0x83, 0x09, 0xd9, 0xfd, 0x2e, 0x4d, 0x0c, 0x97, 0x89, 0xc8, 0x75, 0x20, 0x7e,
0x2d, 0x84, 0x36, 0xf4, 0x06, 0xe9, 0x26, 0x5c, 0x09, 0x9d, 0xf1, 0x50, 0xb0, 0xc6, 0x41, 0xe3,
0xa8, 0x1b, 0x2c, 0x01, 0x3a, 0x22, 0xeb, 0x51, 0x2e, 0x17, 0x22, 0x67, 0xcd, 0x83, 0xc6, 0x51,
0x7f, 0x7c, 0x75, 0xe8, 0x14, 0x2b, 0xa1, 0x13, 0xeb, 0x0e, 0x1c, 0x6d, 0xf0, 0x57, 0x83, 0x74,
0x2b, 0xdf, 0xbf, 0x88, 0xf7, 0x49, 0x53, 0x46, 0x56, 0xb8, 0x1b, 0x34, 0x65, 0x44, 0x2f, 0x91,
0xb6, 0x54, 0x7c, 0x26, 0xd8, 0x9a, 0x85, 0xd0, 0xa0, 0x3b, 0x64, 0x2d, 0x93, 0x11, 0x6b, 0x1d,
0x34, 0x8e, 0xb6, 0x02, 0xf8, 0xa4, 0x57, 0xc8, 0xba, 0x36, 0xdc, 0x14, 0x9a, 0xb5, 0x2d, 0xd1,
0x59, 0xf4, 0x32, 0x59, 0xcf, 0xd2, 0xe8, 0x54, 0x46, 0x6c, 0x1d, 0x05, 0xb2, 0x34, 0x7a, 0x12,
0x51, 0x4a, 0x5a, 0x30, 0x27, 0xeb, 0x58, 0xd0, 0x7e, 0x0f, 0x5e, 0x79, 0xa9, 0x08, 0x84, 0xce,
0xd2, 0x44, 0x0b, 0xfa, 0x90, 0x6c, 0x28, 0x61, 0x78, 0xc4, 0x0d, 0xb7, 0x8b, 0xed, 0x8d, 0x59,
0x19, 0x6e, 0xc9, 0x79, 0xea, 0xfc, 0x41, 0xc5, 0xa4, 0xc7, 0x84, 0x84, 0x55, 0x56, 0x59, 0xf3,
0x60, 0xed, 0xa8, 0x37, 0xde, 0x1a, 0xa6, 0x7a, 0x99, 0xa2, 0xc0, 0x23, 0x0c, 0x4e, 0xc8, 0xb6,
0x5f, 0x84, 0x2c, 0x3e, 0xa7, 0x0f, 0xc8, 0x46, 0xee, 0xf4, 0x59, 0xc3, 0x8e, 0xbf, 0x5c, 0x1f,
0xef, 0x9c, 0x41, 0x45, 0x1b, 0x50, 0xb2, 0xf3, 0x3c, 0x4f, 0x43, 0xa1, 0xb5, 0x28, 0x2b, 0x39,
0x78, 0x44, 0xfa, 0x1e, 0x06, 0xc2, 0xa3, 0xd7, 0x84, 0xf7, 0x40, 0xd8, 0xb1, 0xde, 0x20, 0x9b,
0x93, 0xed, 0x15, 0xe7, 0x7f, 0x4c, 0xca, 0x3d, 0xd2, 0xcd, 0xca, 0xb5, 0xb8, 0x9c, 0xf4, 0xfc,
0xa9, 0x97, 0xde, 0xc1, 0x1f, 0x4d, 0xd2, 0x71, 0x70, 0x59, 0x6b, 0x98, 0xa7, 0x8d, 0xb5, 0xa6,
0xa4, 0x95, 0x65, 0xae, 0x4b, 0xda, 0x81, 0xfd, 0x86, 0x3e, 0x81, 0x8a, 0x57, 0x7d, 0x62, 0x0d,
0xca, 0x48, 0xc7, 0xcc, 0x73, 0xc1, 0x23, 0x6d, 0x7b, 0xa5, 0x1d, 0x94, 0x26, 0xbd, 0x46, 0x36,
0xc2, 0xac, 0x38, 0x35, 0x52, 0x09, 0xdb, 0x31, 0x8d, 0xa0, 0x13, 0x66, 0xc5, 0x8f, 0x52, 0x09,
0x7a, 0x48, 0xfa, 0x0b, 0x99, 0x9b, 0x82, 0xc7, 0xa7, 0x4a, 0xa8, 0x34, 0x3f, 0xb7, 0xad, 0xd3,
0x0a, 0xb6, 0x1c, 0xfa, 0xd4, 0x82, 0xf4, 0x2e, 0xd9, 0xce, 0x85, 0x96, 0x91, 0x48, 0x4c, 0xc9,
0xeb, 0x58, 0x5e, 0xbf, 0x84, 0x1d, 0x91, 0x91, 0x0e, 0x24, 0x87, 0x27, 0x11, 0xdb, 0xb0, 0x8b,
0x2b, 0x4d, 0x7a, 0x93, 0x10, 0xf1, 0x4a, 0x84, 0x85, 0xe1, 0x93, 0x58, 0xb0, 0xae, 0x75, 0x7a,
0x08, 0x04, 0xca, 0xf3, 0x99, 0x66, 0x04, 0xbb, 0x14, 0xbe, 0x07, 0x29, 0xe9, 0x07, 0x42, 0x1b,
0x9e, 0x9b, 0xf7, 0xdb, 0xad, 0xab, 0x1b, 0x6a, 0xb9, 0x7b, 0xd7, 0xde, 0x6f, 0xf7, 0xfe, 0x40,
0xb6, 0xab, 0x09, 0x2f, 0x52, 0xff, 0xc1, 0xb7, 0x64, 0xb3, 0x12, 0x7a, 0x47, 0x27, 0xae, 0x4c,
0xe6, 0x75, 0xe2, 0x2f, 0x64, 0xf3, 0x85, 0xe1, 0xe6, 0xff, 0x3a, 0xa6, 0x04, 0xd9, 0x72, 0xf2,
0x17, 0x6a, 0xf3, 0x9b, 0xd8, 0x89, 0x65, 0x8b, 0x6f, 0x40, 0x4c, 0xa0, 0x8b, 0x3d, 0xa9, 0x07,
0x5f, 0x13, 0xe2, 0xa6, 0x81, 0x24, 0x1c, 0xbf, 0x96, 0x84, 0xdd, 0x72, 0xc0, 0x9b, 0x36, 0xe3,
0x9f, 0x0d, 0xd2, 0x02, 0xdf, 0x07, 0x16, 0xfd, 0x16, 0xd9, 0xc4, 0x16, 0x3d, 0x2d, 0x34, 0x1c,
0xa6, 0x2d, 0xdb, 0xa8, 0x3d, 0xc4, 0x7e, 0x02, 0x88, 0x5e, 0x27, 0x5d, 0xd8, 0x10, 0xe8, 0x6f,
0x5b, 0x3f, 0xec, 0x10, 0x74, 0x7e, 0xc0, 0x29, 0x9a, 0x90, 0xed, 0xa7, 0x42, 0x3d, 0x49, 0xa6,
0xe9, 0x05, 0xf3, 0x78, 0x48, 0x3a, 0x4a, 0x28, 0x99, 0x4c, 0x53, 0x1b, 0x88, 0x3b, 0x2c, 0x4a,
0xed, 0xd2, 0x07, 0x5d, 0x55, 0xcd, 0xf7, 0x8e, 0xae, 0x5a, 0x59, 0x93, 0x97, 0xd2, 0xdf, 0x37,
0x49, 0xc7, 0x79, 0xe9, 0x3e, 0xac, 0x54, 0x99, 0xd4, 0xf0, 0xd8, 0xae, 0xb4, 0x15, 0x54, 0x36,
0x6c, 0x63, 0x25, 0xd4, 0x34, 0x17, 0xc2, 0xae, 0xa7, 0x15, 0x94, 0x26, 0x1d, 0xd8, 0xec, 0xf2,
0x05, 0x97, 0xb1, 0xdd, 0xc8, 0x6b, 0xd6, 0x5d, 0xc3, 0x60, 0xf4, 0xa4, 0x98, 0x4e, 0xe1, 0x3a,
0xc0, 0xe4, 0x97, 0x26, 0xdc, 0x5c, 0x21, 0x0f, 0xe7, 0x22, 0x72, 0x59, 0x77, 0x16, 0x1c, 0x0e,
0xfa, 0x25, 0xcf, 0x9c, 0x0f, 0x8f, 0x20, 0x0f, 0x81, 0x71, 0x3c, 0x34, 0x72, 0x21, 0xdc, 0xb1,
0xe3, 0x2c, 0x88, 0x41, 0x26, 0xce, 0xb3, 0x81, 0x31, 0x94, 0x36, 0x68, 0xe2, 0x17, 0x4f, 0xd2,
0xc4, 0x1e, 0x38, 0xad, 0xc0, 0x43, 0x20, 0x92, 0x92, 0x6b, 0x19, 0x04, 0x23, 0xf1, 0xb1, 0xa5,
0xc6, 0x54, 0xc6, 0x82, 0xf5, 0x7c, 0x0d, 0x40, 0x7c, 0x0d, 0xcb, 0xd8, 0xac, 0x6b, 0x58, 0xce,
0x01, 0xe9, 0x15, 0x89, 0x58, 0xc8, 0x10, 0x4f, 0xbe, 0x2d, 0x6c, 0x47, 0x0f, 0xb2, 0xd9, 0x8e,
0xd3, 0xf0, 0x4c, 0x44, 0xac, 0xef, 0xb2, 0x8d, 0x26, 0x74, 0x3e, 0x64, 0x01, 0x8b, 0xb4, 0x6d,
0x7d, 0x4b, 0x00, 0xa2, 0x07, 0xc3, 0x96, 0x69, 0x07, 0xa3, 0x2f, 0x6d, 0xb8, 0x23, 0x22, 0x99,
0x9b, 0x73, 0xb6, 0x6b, 0x1d, 0x68, 0x80, 0xde, 0xcb, 0x5c, 0x1a, 0x31, 0xe1, 0xe1, 0x19, 0xa3,
0xa8, 0x57, 0x01, 0xe0, 0x85, 0xa8, 0x33, 0x3e, 0x13, 0x9a, 0xed, 0xa1, 0xb7, 0x02, 0xa0, 0x06,
0x8a, 0x67, 0x99, 0x88, 0xd8, 0x25, 0xac, 0x01, 0x5a, 0xf6, 0x36, 0x9a, 0x2b, 0xa1, 0xd8, 0x65,
0x9c, 0xc9, 0x1a, 0xb0, 0x5d, 0x74, 0xcc, 0x27, 0xec, 0x8a, 0x05, 0xed, 0x37, 0x64, 0x4b, 0xe7,
0x22, 0x8c, 0xb9, 0x54, 0x36, 0x15, 0x57, 0x31, 0x5b, 0x3e, 0x66, 0x3b, 0xa1, 0x48, 0x1c, 0xc2,
0x98, 0xeb, 0x84, 0x0a, 0x81, 0x6c, 0x9e, 0x89, 0x3c, 0x11, 0xb1, 0x36, 0x10, 0xc3, 0x35, 0xcc,
0xa6, 0x07, 0x81, 0x02, 0x2c, 0xd8, 0xa6, 0x56, 0xb3, 0x7d, 0x54, 0x58, 0x22, 0xa0, 0x90, 0x4c,
0x75, 0x91, 0x68, 0xac, 0xc7, 0x75, 0x54, 0xf0, 0x20, 0x88, 0x74, 0x92, 0x16, 0x49, 0x28, 0xd8,
0x0d, 0x8c, 0x14, 0x2d, 0x58, 0x7f, 0x95, 0x2c, 0xa3, 0x32, 0xf6, 0x11, 0xae, 0xdf, 0xc7, 0x40,
0x1d, 0xb6, 0xbb, 0x34, 0xb1, 0x54, 0xd2, 0xb0, 0x9b, 0xa8, 0xee, 0x41, 0x4b, 0x86, 0x11, 0x11,
0xd7, 0xec, 0x63, 0x9f, 0x61, 0x21, 0x98, 0x67, 0xa1, 0x78, 0x1c, 0xa7, 0x21, 0x16, 0xfe, 0x00,
0xe7, 0xf1, 0x31, 0x50, 0x71, 0x76, 0xa1, 0x45, 0xc4, 0x6e, 0xa1, 0x8a, 0x07, 0x79, 0x2a, 0xe1,
0xbc, 0x48, 0xce, 0xd8, 0xa0, 0xa6, 0x62, 0x31, 0x7a, 0x9f, 0xec, 0xce, 0x79, 0x1e, 0xbd, 0xe4,
0xb9, 0x08, 0xd3, 0x3c, 0x2f, 0x32, 0x23, 0x22, 0xf6, 0x89, 0x25, 0xbe, 0xee, 0xa0, 0xb7, 0xc9,
0x16, 0xb4, 0xc3, 0xbc, 0x98, 0x09, 0xec, 0x91, 0xdb, 0xf8, 0x56, 0xa8, 0x81, 0xf4, 0x0e, 0xe9,
0xdb, 0x16, 0x58, 0xd2, 0x0e, 0xf1, 0xa9, 0x50, 0x47, 0x2b, 0x5e, 0xa6, 0x22, 0xd7, 0x57, 0x77,
0x3c, 0x5e, 0x85, 0x42, 0x97, 0x87, 0x8a, 0x63, 0x26, 0xee, 0xba, 0xb3, 0xda, 0xd9, 0xf6, 0xb9,
0xa1, 0xb8, 0xdd, 0x00, 0x47, 0xb8, 0x73, 0x9c, 0x09, 0xea, 0xd5, 0x54, 0x38, 0xf6, 0x1e, 0xaa,
0xd7, 0x51, 0x88, 0xa9, 0x42, 0xac, 0xce, 0xa7, 0x18, 0x53, 0x0d, 0xac, 0xb1, 0x72, 0xbd, 0x88,
0xd8, 0x67, 0x2b, 0x2c, 0x00, 0x6b, 0x2c, 0x5d, 0xe4, 0x19, 0xbb, 0xbf, 0xc2, 0x02, 0x10, 0xea,
0x52, 0x01, 0xf2, 0x37, 0xc1, 0x8e, 0xb1, 0x2e, 0x3e, 0x06, 0xd5, 0x8d, 0x64, 0x2e, 0x42, 0xa3,
0x78, 0xf6, 0xf0, 0x8c, 0x0d, 0xb1, 0xba, 0x1e, 0x54, 0x63, 0x8c, 0x15, 0x1b, 0xad, 0x30, 0xc6,
0xaa, 0xc6, 0x78, 0x30, 0x63, 0x9f, 0xaf, 0x30, 0x1e, 0xcc, 0xc6, 0x7f, 0x37, 0x49, 0xf3, 0xd9,
0x0b, 0xfa, 0x15, 0x21, 0xcb, 0x17, 0x39, 0xad, 0x3f, 0xbd, 0xcb, 0xf7, 0xc7, 0xfe, 0xde, 0x2a,
0x0c, 0xf7, 0xcf, 0x98, 0xb4, 0x4f, 0x94, 0xd0, 0x33, 0x7a, 0x65, 0x88, 0x7f, 0xc6, 0x86, 0xe5,
0x9f, 0xb1, 0xe1, 0xf7, 0xf0, 0x67, 0x6c, 0x7f, 0xb7, 0xbc, 0xfb, 0x4e, 0xe0, 0xbe, 0x73, 0x63,
0xd6, 0xdd, 0x5b, 0xf1, 0x6d, 0x83, 0x76, 0x6a, 0x77, 0x18, 0x8c, 0xf9, 0x92, 0x74, 0xab, 0x97,
0xfd, 0x5b, 0x87, 0x51, 0xef, 0x7d, 0xbd, 0xfc, 0x03, 0xd0, 0x71, 0x4f, 0x2c, 0x4a, 0x6b, 0xef,
0x2d, 0x0c, 0x6a, 0xa7, 0x86, 0xc1, 0x80, 0x7b, 0xa4, 0x6d, 0x9f, 0x23, 0x74, 0xc7, 0x7b, 0x99,
0x20, 0xb9, 0xef, 0x21, 0x59, 0x7c, 0xfe, 0xf8, 0x1b, 0xf8, 0xdf, 0xa3, 0x00, 0xe4, 0x99, 0x7c,
0xdc, 0x7e, 0xa6, 0x1f, 0x65, 0xf2, 0x79, 0xe3, 0xe7, 0xc3, 0x99, 0x34, 0xf3, 0x62, 0x02, 0x81,
0x8f, 0x0c, 0x8f, 0x53, 0x7d, 0xac, 0xcf, 0xb5, 0x11, 0x4a, 0xa3, 0x35, 0xe2, 0x99, 0x1c, 0xa5,
0x7a, 0xb2, 0x6e, 0x57, 0xff, 0xc5, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8a, 0x2c, 0xaa, 0xad,
0xd7, 0x0e, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@@ -44,7 +44,7 @@ message Container {
// The response message containing the requested containers.
message ContainerResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
repeated Container containers = 2;
}
@@ -60,7 +60,7 @@ message ProcessesReply {
}
message ProcessResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
repeated Process processes = 2;
}
@@ -87,7 +87,7 @@ message RestartRequest {
}
message RestartResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
}
// The response message containing the restart status.
@@ -106,7 +106,7 @@ message StatsRequest {
// The response message containing the requested stats.
message StatsResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
repeated Stat stats = 2;
}
@@ -126,7 +126,7 @@ message Stat {
message MemInfoResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
MemInfo meminfo = 2;
}

View File

@@ -118,13 +118,13 @@ func (m *TimeReply) GetResponse() []*TimeResponse {
}
type TimeResponse struct {
Metadata *common.NodeMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Server string `protobuf:"bytes,2,opt,name=server,proto3" json:"server,omitempty"`
Localtime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=localtime,proto3" json:"localtime,omitempty"`
Remotetime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=remotetime,proto3" json:"remotetime,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Metadata *common.ResponseMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
Server string `protobuf:"bytes,2,opt,name=server,proto3" json:"server,omitempty"`
Localtime *timestamp.Timestamp `protobuf:"bytes,3,opt,name=localtime,proto3" json:"localtime,omitempty"`
Remotetime *timestamp.Timestamp `protobuf:"bytes,4,opt,name=remotetime,proto3" json:"remotetime,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *TimeResponse) Reset() { *m = TimeResponse{} }
@@ -156,7 +156,7 @@ func (m *TimeResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_TimeResponse proto.InternalMessageInfo
func (m *TimeResponse) GetMetadata() *common.NodeMetadata {
func (m *TimeResponse) GetMetadata() *common.ResponseMetadata {
if m != nil {
return m.Metadata
}
@@ -193,28 +193,28 @@ func init() {
func init() { proto.RegisterFile("time/time.proto", fileDescriptor_e7ed1ef5b20ef4ce) }
var fileDescriptor_e7ed1ef5b20ef4ce = []byte{
// 332 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0x4e, 0x32, 0x31,
0x14, 0x85, 0x33, 0x3f, 0x84, 0x1f, 0x2e, 0x24, 0xc4, 0x6a, 0x08, 0x19, 0x17, 0x12, 0x12, 0x23,
0x1b, 0xa7, 0x06, 0x37, 0x46, 0x57, 0x62, 0x5c, 0x6a, 0xcc, 0xc4, 0x95, 0xbb, 0x32, 0x5c, 0xa1,
0x71, 0xca, 0xad, 0xd3, 0x62, 0xc2, 0x4b, 0xfa, 0x4c, 0xa6, 0xed, 0x88, 0x8d, 0x2c, 0xdc, 0x4c,
0xa7, 0xf7, 0x9c, 0x33, 0x3d, 0xf9, 0xa6, 0xd0, 0xb7, 0x52, 0x21, 0x77, 0x8f, 0x4c, 0x57, 0x64,
0x89, 0x35, 0xdd, 0x7b, 0x7a, 0xbc, 0x24, 0x5a, 0x96, 0xc8, 0xfd, 0x6c, 0xbe, 0x79, 0xe5, 0xa8,
0xb4, 0xdd, 0x06, 0x4b, 0x7a, 0xf2, 0x5b, 0x74, 0x11, 0x63, 0x85, 0xd2, 0xb5, 0xe1, 0xb0, 0x20,
0xa5, 0x68, 0xcd, 0xc3, 0x12, 0x86, 0xe3, 0x53, 0xe8, 0x3e, 0x4b, 0x85, 0x39, 0xbe, 0x6f, 0xd0,
0x58, 0x36, 0x80, 0x96, 0xc1, 0xea, 0x03, 0xab, 0x61, 0x32, 0x4a, 0x26, 0x9d, 0xbc, 0xde, 0x8d,
0x6f, 0xa0, 0x13, 0x6c, 0xba, 0xdc, 0xb2, 0x0c, 0xda, 0x15, 0x1a, 0x4d, 0x6b, 0x83, 0xc3, 0x64,
0xd4, 0x98, 0x74, 0xa7, 0x2c, 0xf3, 0x5d, 0x83, 0x25, 0x28, 0xf9, 0xce, 0x33, 0xfe, 0x4c, 0xa0,
0x17, 0x4b, 0xec, 0x02, 0xda, 0x0a, 0xad, 0x58, 0x08, 0x2b, 0xfc, 0x39, 0xdd, 0xe9, 0x51, 0x56,
0xb7, 0x7a, 0xa4, 0x05, 0x3e, 0xd4, 0x5a, 0xbe, 0x73, 0x45, 0xbd, 0xfe, 0xc5, 0xbd, 0xd8, 0x15,
0x74, 0x4a, 0x2a, 0x44, 0xe9, 0x8e, 0x1f, 0x36, 0xfc, 0xa7, 0xd2, 0x2c, 0x80, 0xc8, 0xbe, 0x41,
0xf8, 0x5a, 0x1e, 0x44, 0xfe, 0x63, 0x66, 0xd7, 0x00, 0x15, 0x2a, 0xb2, 0xe8, 0xa3, 0xcd, 0x3f,
0xa3, 0x91, 0x7b, 0xba, 0x82, 0xa6, 0x13, 0x18, 0xaf, 0xd7, 0xc1, 0x5e, 0xee, 0xde, 0xfd, 0x98,
0xb4, 0x1f, 0x63, 0x71, 0xe4, 0x78, 0xc0, 0x78, 0xb7, 0xc2, 0xe2, 0x8d, 0x1d, 0xc4, 0xaa, 0xc7,
0xbf, 0x17, 0x98, 0xcd, 0xa0, 0x57, 0x90, 0x0a, 0x53, 0xa1, 0xe5, 0xec, 0xbf, 0x93, 0x6e, 0xb5,
0x7c, 0x4a, 0x5e, 0xce, 0x96, 0xd2, 0xae, 0x36, 0x73, 0x07, 0x8e, 0x5b, 0x51, 0x92, 0x39, 0x37,
0x5b, 0x63, 0x51, 0x99, 0xb0, 0xe3, 0x42, 0x4b, 0x7f, 0x05, 0xe6, 0x2d, 0xdf, 0xea, 0xf2, 0x2b,
0x00, 0x00, 0xff, 0xff, 0xa7, 0x62, 0x03, 0x24, 0x55, 0x02, 0x00, 0x00,
// 331 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0x41, 0x4b, 0xfb, 0x30,
0x18, 0xc6, 0xe9, 0x7f, 0x63, 0xff, 0xed, 0xdd, 0x60, 0x18, 0x61, 0x94, 0x7a, 0x70, 0x0c, 0xc4,
0x5d, 0x4c, 0x60, 0x7a, 0x10, 0x3d, 0x39, 0xf1, 0x28, 0x48, 0xf1, 0xe4, 0x2d, 0xab, 0xaf, 0x5b,
0xb0, 0x59, 0x62, 0x93, 0x0a, 0xfd, 0x9a, 0x7e, 0x22, 0x49, 0xd2, 0xcd, 0xe0, 0x0e, 0x5e, 0x9a,
0xe6, 0x7d, 0x7e, 0x4f, 0xfb, 0xf0, 0x24, 0x30, 0xb6, 0x42, 0x22, 0x73, 0x0f, 0xaa, 0x2b, 0x65,
0x15, 0xe9, 0xba, 0xf7, 0xec, 0x64, 0xad, 0xd4, 0xba, 0x44, 0xe6, 0x67, 0xab, 0xfa, 0x8d, 0xa1,
0xd4, 0xb6, 0x09, 0x48, 0x76, 0xfa, 0x5b, 0x74, 0x16, 0x63, 0xb9, 0xd4, 0x2d, 0x70, 0x5c, 0x28,
0x29, 0xd5, 0x96, 0x85, 0x25, 0x0c, 0x67, 0x67, 0x30, 0x7c, 0x16, 0x12, 0x73, 0xfc, 0xa8, 0xd1,
0x58, 0x32, 0x81, 0x9e, 0xc1, 0xea, 0x13, 0xab, 0x34, 0x99, 0x26, 0xf3, 0x41, 0xde, 0xee, 0x66,
0xb7, 0x30, 0x08, 0x98, 0x2e, 0x1b, 0x42, 0xa1, 0x5f, 0xa1, 0xd1, 0x6a, 0x6b, 0x30, 0x4d, 0xa6,
0x9d, 0xf9, 0x70, 0x41, 0xa8, 0xcf, 0x1a, 0x90, 0xa0, 0xe4, 0x7b, 0x66, 0xf6, 0x95, 0xc0, 0x28,
0x96, 0xc8, 0x15, 0xf4, 0x25, 0x5a, 0xfe, 0xca, 0x2d, 0xf7, 0xff, 0x19, 0x2e, 0x52, 0xda, 0xa6,
0xda, 0x31, 0x8f, 0xad, 0x9e, 0xef, 0xc9, 0x28, 0xdb, 0xbf, 0x38, 0x1b, 0xb9, 0x86, 0x41, 0xa9,
0x0a, 0x5e, 0xba, 0x08, 0x69, 0xc7, 0x7f, 0x2e, 0xa3, 0xa1, 0x0c, 0xba, 0x2b, 0xc3, 0x47, 0xf3,
0x65, 0xe4, 0x3f, 0x30, 0xb9, 0x01, 0xa8, 0x50, 0x2a, 0x8b, 0xde, 0xda, 0xfd, 0xd3, 0x1a, 0xd1,
0x8b, 0x0d, 0x74, 0x9d, 0x40, 0x58, 0xbb, 0x4e, 0x0e, 0x7c, 0x0f, 0xee, 0x70, 0xb2, 0x71, 0x5c,
0x8d, 0x6b, 0x8f, 0x85, 0x2a, 0xef, 0x37, 0x58, 0xbc, 0x93, 0xa3, 0x58, 0xf5, 0x47, 0x70, 0x60,
0x58, 0x2e, 0x61, 0x54, 0x28, 0x19, 0xa6, 0x5c, 0x8b, 0xe5, 0x7f, 0x27, 0xdd, 0x69, 0xf1, 0x94,
0xbc, 0x9c, 0xaf, 0x85, 0xdd, 0xd4, 0x2b, 0x57, 0x1e, 0xb3, 0xbc, 0x54, 0xe6, 0xc2, 0x34, 0xc6,
0xa2, 0x34, 0x61, 0xc7, 0xb8, 0x16, 0xfe, 0x1a, 0xac, 0x7a, 0x3e, 0xd5, 0xe5, 0x77, 0x00, 0x00,
0x00, 0xff, 0xff, 0x2f, 0x43, 0x34, 0x6f, 0x59, 0x02, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@@ -26,7 +26,7 @@ message TimeReply {
}
message TimeResponse {
common.NodeMetadata metadata = 1;
common.ResponseMetadata metadata = 1;
string server = 2;
google.protobuf.Timestamp localtime = 3;
google.protobuf.Timestamp remotetime = 4;

View File

@@ -86,8 +86,8 @@ func NewNode(clusterName string, req *Request) (err error) {
switch req.Type {
case generate.TypeInit:
var osdPort nat.Port
osdPort, err = nat.NewPort("tcp", "50000")
var apidPort nat.Port
apidPort, err = nat.NewPort("tcp", "50000")
if err != nil {
return err
@@ -101,12 +101,12 @@ func NewNode(clusterName string, req *Request) (err error) {
}
containerConfig.ExposedPorts = nat.PortSet{
osdPort: struct{}{},
apidPort: struct{}{},
apiServerPort: struct{}{},
}
hostConfig.PortBindings = nat.PortMap{
osdPort: []nat.PortBinding{
apidPort: []nat.PortBinding{
{
HostIP: "0.0.0.0",
HostPort: "50000",

View File

@@ -38,7 +38,7 @@ var dmesgCmd = &cobra.Command{
if len(reply.Response) > 1 {
fmt.Println(resp.Metadata.Hostname)
}
_, err = os.Stdout.Write(resp.Bytes.Bytes)
_, err = os.Stdout.Write(resp.Bytes)
helpers.Should(err)
}
})

View File

@@ -119,7 +119,7 @@ func setupClient(action func(*client.Client)) {
helpers.Fatalf("error getting client credentials: %s", err)
}
c, err := client.NewClient(creds, t, constants.OsdPort)
c, err := client.NewClient(creds, t, constants.ApidPort)
if err != nil {
helpers.Fatalf("error constructing client: %s", err)
}

View File

@@ -373,7 +373,7 @@ func (c *Client) Read(ctx context.Context, path string) (io.Reader, <-chan error
}
type machineStream interface {
Recv() (*machineapi.StreamingData, error)
Recv() (*common.DataResponse, error)
grpc.ClientStream
}
@@ -404,8 +404,8 @@ func readStream(stream machineStream) (io.Reader, <-chan error, error) {
}
}
if data.Errors != "" {
errCh <- errors.New(data.Errors)
if data.Metadata != nil && data.Metadata.Error != "" {
errCh <- errors.New(data.Metadata.Error)
}
}
}()

3
go.mod
View File

@@ -31,6 +31,7 @@ require (
github.com/gizak/termui/v3 v3.0.0
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/gogo/googleapis v1.1.0 // indirect
github.com/gogo/protobuf v1.3.1
github.com/golang/protobuf v1.3.2
github.com/google/uuid v1.1.1
github.com/grpc-ecosystem/go-grpc-middleware v1.1.0
@@ -53,10 +54,12 @@ require (
github.com/spf13/cobra v0.0.5
github.com/stretchr/testify v1.4.0
github.com/syndtr/gocapability v0.0.0-20180223013746-33e07d32887e
github.com/talos-systems/grpc-proxy v0.0.0-20191129165806-5c579a7a6147
github.com/u-root/u-root v6.0.0+incompatible // indirect
github.com/vmware/vmw-guestinfo v0.0.0-20170707015358-25eff159a728
go.etcd.io/etcd v3.3.13+incompatible
golang.org/x/crypto v0.0.0-20191108234033-bd318be0434a
golang.org/x/net v0.0.0-20191116160921-f9c825593386 // indirect
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
golang.org/x/sys v0.0.0-20191110163157-d32e6e3b99c4
golang.org/x/text v0.3.2

6
go.sum
View File

@@ -394,6 +394,10 @@ github.com/syndtr/gocapability v0.0.0-20180223013746-33e07d32887e h1:QjF5rxNgRSL
github.com/syndtr/gocapability v0.0.0-20180223013746-33e07d32887e/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/talos-systems/bootkube v0.14.1-0.20191127182503-08e42a4c200c h1:By7EcuWOTMwvsmymyiWsi+RfK2pVbYEA6Kuk3Ma/K6g=
github.com/talos-systems/bootkube v0.14.1-0.20191127182503-08e42a4c200c/go.mod h1:CIpoNLW4Lm9zNVFRgqQIylnbZi/x9TnulTEA8edC0O4=
github.com/talos-systems/grpc-proxy v0.0.0-20191127172027-6c9f7b399173 h1:ZxCT4CuPSQPHkK0pFDg820AhozcaMXmDinuXc/E5HSo=
github.com/talos-systems/grpc-proxy v0.0.0-20191127172027-6c9f7b399173/go.mod h1:sm97Vc/z2cok3pu6ruNeszQej4KDxFrDgfWs4C1mtC4=
github.com/talos-systems/grpc-proxy v0.0.0-20191129165806-5c579a7a6147 h1:Sf4q46/8IkNY+JaYoBV0peSYsO5quJlvvmv2AytJlLI=
github.com/talos-systems/grpc-proxy v0.0.0-20191129165806-5c579a7a6147/go.mod h1:sm97Vc/z2cok3pu6ruNeszQej4KDxFrDgfWs4C1mtC4=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/u-root/u-root v6.0.0+incompatible h1:YqPGmRoRyYmeg17KIWFRSyVq6LX5T6GSzawyA6wG6EE=
@@ -480,6 +484,8 @@ golang.org/x/net v0.0.0-20191007182048-72f939374954 h1:JGZucVF/L/TotR719NbujzadO
golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191109021931-daa7c04131f5 h1:bHNaocaoJxYBo5cw41UyTMLjYlb8wPY7+WFrnklbHOM=
golang.org/x/net v0.0.0-20191109021931-daa7c04131f5/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191116160921-f9c825593386 h1:ktbWvQrW08Txdxno1PiDpSxPXG6ndGsfnJjRRtkM0LQ=
golang.org/x/net v0.0.0-20191116160921-f9c825593386/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be h1:vEDujvNQGv4jgYKudGeI/+DAX4Jffq6hpD55MmoEvKs=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=

View File

@@ -9,12 +9,15 @@ import (
"log"
stdlibnet "net"
"os"
"regexp"
"strings"
"github.com/talos-systems/grpc-proxy/proxy"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"github.com/talos-systems/talos/api"
"github.com/talos-systems/talos/internal/app/apid/pkg/backend"
"github.com/talos-systems/talos/internal/app/apid/pkg/director"
"github.com/talos-systems/talos/pkg/config"
"github.com/talos-systems/talos/pkg/constants"
"github.com/talos-systems/talos/pkg/grpc/factory"
@@ -61,43 +64,57 @@ func main() {
log.Fatalf("failed to create OS-level TLS configuration: %v", err)
}
machineClient, err := api.NewLocalMachineClient()
// TODO: refactor
certs, err := provider.GetCertificate(nil)
if err != nil {
log.Fatalf("machine client: %v", err)
log.Fatalf("failed to get TLS certs: %v", err)
}
osClient, err := api.NewLocalOSClient()
clientTLSConfig, err := tls.New(
tls.WithClientAuthType(tls.Mutual),
tls.WithCACertPEM(ca),
tls.WithKeypair(*certs), // TODO: this doesn't support cert refresh, fix me!
)
if err != nil {
log.Fatalf("networkd client: %v", err)
log.Fatalf("failed to create client TLS config: %v", err)
}
timeClient, err := api.NewLocalTimeClient()
if err != nil {
log.Fatalf("time client: %v", err)
backendFactory := backend.NewAPIDFactory(clientTLSConfig)
router := director.NewRouter(backendFactory.Get)
router.RegisterLocalBackend("os.OS", backend.NewLocal("osd", constants.OSSocketPath))
router.RegisterLocalBackend("machine.Machine", backend.NewLocal("machined", constants.MachineSocketPath))
router.RegisterLocalBackend("time.Time", backend.NewLocal("timed", constants.TimeSocketPath))
router.RegisterLocalBackend("network.Network", backend.NewLocal("networkd", constants.NetworkSocketPath))
// all existing streaming methods
for _, methodName := range []string{
"/machine.Machine/CopyOut",
"/machine.Machine/Kubeconfig",
"/machine.Machine/LS",
"/machine.Machine/Logs",
"/machine.Machine/Read",
} {
router.RegisterStreamedRegex("^" + regexp.QuoteMeta(methodName) + "$")
}
networkClient, err := api.NewLocalNetworkClient()
if err != nil {
log.Fatalf("time client: %v", err)
}
protoProxy := api.NewApiProxy(provider)
// register future pattern: method should have suffix "Stream"
router.RegisterStreamedRegex("Stream$")
err = factory.ListenAndServe(
&api.Registrator{
MachineClient: machineClient,
OSClient: osClient,
TimeClient: timeClient,
NetworkClient: networkClient,
},
factory.Port(constants.OsdPort),
factory.WithStreamInterceptor(protoProxy.StreamInterceptor()),
factory.WithUnaryInterceptor(protoProxy.UnaryInterceptor()),
router,
factory.Port(constants.ApidPort),
factory.WithDefaultLog(),
factory.ServerOptions(
grpc.Creds(
credentials.NewTLS(tlsConfig),
),
grpc.CustomCodec(proxy.Codec()),
grpc.UnknownServiceHandler(
proxy.TransparentHandler(
router.Director,
proxy.WithStreamedDetector(router.StreamedDetector),
)),
),
)
if err != nil {

View File

@@ -0,0 +1,213 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package backend
import (
"context"
"fmt"
"strings"
"sync"
"github.com/gogo/protobuf/proto"
"github.com/talos-systems/grpc-proxy/proxy"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
"github.com/talos-systems/talos/api/common"
"github.com/talos-systems/talos/pkg/constants"
)
// APID backend performs proxying to another apid instance.
//
// Backend authenticates itself using given grpc credentials.
type APID struct {
target string
creds credentials.TransportCredentials
mu sync.Mutex
conn *grpc.ClientConn
}
// NewAPID creates new instance of APID backend
func NewAPID(target string, creds credentials.TransportCredentials) (*APID, error) {
// perform very basic validation on target
if target == "" || strings.Contains(target, ":") {
return nil, fmt.Errorf("invalid target %q", target)
}
return &APID{
target: target,
creds: creds,
}, nil
}
func (a *APID) String() string {
return a.target
}
// GetConnection returns a grpc connection to the backend.
func (a *APID) GetConnection(ctx context.Context) (context.Context, *grpc.ClientConn, error) {
origMd, ok := metadata.FromIncomingContext(ctx)
md := origMd.Copy()
delete(md, "targets")
delete(md, ":authority")
if ok {
md.Set("proxyfrom", origMd[":authority"]...)
} else {
md.Set("proxyfrom", "unknown")
}
outCtx := metadata.NewOutgoingContext(ctx, md)
a.mu.Lock()
defer a.mu.Unlock()
if a.conn != nil {
return outCtx, a.conn, nil
}
var err error
a.conn, err = grpc.DialContext(
ctx,
fmt.Sprintf("%s:%d", a.target, constants.ApidPort),
grpc.WithTransportCredentials(a.creds),
grpc.WithCodec(proxy.Codec()), //nolint: staticcheck
)
return outCtx, a.conn, err
}
// AppendInfo is called to enhance response from the backend with additional data.
//
// AppendInfo enhances upstream response with node metadata (target).
//
// This method depends on grpc protobuf response structure, each response should
// look like:
//
// message SomeReply {
// repeated SomeResponse response = 1; // please note field ID == 1
// }
//
// message SomeResponse {
// common.ResponseMetadata metadata = 1;
// <other fields go here ...>
// }
//
// As 'SomeResponse' is repeated in 'SomeReply', if we concatenate protobuf representation
// of several 'SomeReply' messages, we still get valid 'SomeReply' representation but with more
// entries (feature of protobuf binary representation).
//
// If we look at binary representation of any 'SomeReply' message, it will always contain one
// protobuf field with field ID 1 (see above) and type 2 (embedded message SomeResponse is encoded
// as string with length). So if we want to add fields to 'SomeResponse', we can simply read field
// header, adjust length for new 'SomeResponse' representation, and prepend new field header.
//
// At the same time, we can add 'common.ResponseMetadata' structure to 'SomeResponse' by simply
// appending or prepending 'common.ResponseMetadata' as a single field. This requires 'metadata'
// field to be not defined in original response. (This is due to the fact that protobuf message
// representation is concatenation of each field representation).
//
// To build only single field (ResponseMetadata) we use helper message which contains exactly this
// field with same field ID as in every other 'Response':
//
// message EmptyResponse {
// common.ResponseMetadata metadata = 1;
// }
//
// As streaming responses are not wrapped into 'SomeReply' with 'repeated', handling is simpler: we just
// need to append EmptyResponse with details.
//
// So AppendInfo does the following: validates that reply contains field ID 1 encoded as string,
// cuts field header, rest is representation of some 'Response'. Marshal 'EmptyResponse' as protobuf,
// which builds 'common.ResponseMetadata' field, append it to original 'Response' message, build new header
// for new length of some 'Response', and add back new field header.
func (a *APID) AppendInfo(streaming bool, resp []byte) ([]byte, error) {
payload, err := proto.Marshal(&common.EmptyResponse{
Metadata: &common.ResponseMetadata{
Hostname: a.target,
},
})
if streaming {
return append(resp, payload...), err
}
const (
metadataField = 1 // field number in proto definition for repeated response
metadataType = 2 // "string" for embedded messages
)
// decode protobuf embedded header
typ, n1 := proto.DecodeVarint(resp)
_, n2 := proto.DecodeVarint(resp[n1:]) // length
if typ != (metadataField<<3)|metadataType {
return nil, fmt.Errorf("unexpected message format: %d", typ)
}
if n1+n2 > len(resp) {
return nil, fmt.Errorf("unexpected message size: %d", len(resp))
}
// cut off embedded message header
resp = resp[n1+n2:]
// build new embedded message header
prefix := append(proto.EncodeVarint((metadataField<<3)|metadataType), proto.EncodeVarint(uint64(len(resp)+len(payload)))...)
resp = append(prefix, resp...)
return append(resp, payload...), err
}
// BuildError is called to convert error from upstream into response field.
//
// BuildError converts upstream error into message from upstream, so that multiple
// successful and failure responses might be returned.
//
// This simply relies on the fact that any response contains 'EmptyReply' message.
// So if 'EmptyReply' is unmarshalled into any other 'Reply' message, all the fields
// are undefined but 'ResponseMetadata':
//
// message EmptyResponse {
// common.ResponseMetadata metadata = 1;
// }
//
// message EmptyReply {
// repeated EmptyResponse response = 1;
// }
//
// Streaming responses are not wrapped into EmptyReply, so we simply marshall EmptyResponse
// message.
func (a *APID) BuildError(streaming bool, err error) ([]byte, error) {
var resp proto.Message = &common.EmptyResponse{
Metadata: &common.ResponseMetadata{
Hostname: a.target,
Error: err.Error(),
},
}
if !streaming {
resp = &common.EmptyReply{
Response: []*common.EmptyResponse{
resp.(*common.EmptyResponse),
},
}
}
return proto.Marshal(resp)
}
// Close connection.
func (a *APID) Close() {
a.mu.Lock()
defer a.mu.Unlock()
if a.conn != nil {
a.conn.Close() //nolint: errcheck
a.conn = nil
}
}

View File

@@ -0,0 +1,55 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package backend
import (
"crypto/tls"
"sync"
"github.com/talos-systems/grpc-proxy/proxy"
"google.golang.org/grpc/credentials"
)
// APIDFactory caches connection to apid instances by target.
//
// TODO: need to clean up idle connections from time to time.
type APIDFactory struct {
cache sync.Map
creds credentials.TransportCredentials
}
// NewAPIDFactory creates new APIDFactory with given tls.Config.
//
// Client TLS config is used to connect to other apid instances.
func NewAPIDFactory(config *tls.Config) *APIDFactory {
return &APIDFactory{
creds: credentials.NewTLS(config),
}
}
// Get backend by target.
//
// Get performs caching of backends.
func (factory *APIDFactory) Get(target string) (proxy.Backend, error) {
b, ok := factory.cache.Load(target)
if ok {
return b.(proxy.Backend), nil
}
backend, err := NewAPID(target, factory.creds)
if err != nil {
return nil, err
}
existing, loaded := factory.cache.LoadOrStore(target, backend)
if loaded {
// race: another Get() call built different backend
backend.Close()
return existing.(proxy.Backend), nil
}
return backend, nil
}

View File

@@ -0,0 +1,74 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package backend_test
import (
"crypto/tls"
"sync"
"testing"
"github.com/stretchr/testify/suite"
"github.com/talos-systems/grpc-proxy/proxy"
"github.com/talos-systems/talos/internal/app/apid/pkg/backend"
)
type APIDFactorySuite struct {
suite.Suite
f *backend.APIDFactory
}
func (suite *APIDFactorySuite) SetupSuite() {
suite.f = backend.NewAPIDFactory(&tls.Config{})
}
func (suite *APIDFactorySuite) TestGet() {
b1, err := suite.f.Get("127.0.0.1")
suite.Require().NoError(err)
suite.Require().NotNil(b1)
b2, err := suite.f.Get("127.0.0.1")
suite.Require().NoError(err)
suite.Require().Equal(b1, b2)
b3, err := suite.f.Get("127.0.0.2")
suite.Require().NoError(err)
suite.Require().NotEqual(b1, b3)
_, err = suite.f.Get("127.0.0.2:50000")
suite.Require().Error(err)
}
func (suite *APIDFactorySuite) TestGetConcurrent() {
// for race detector
var wg sync.WaitGroup
backendCh := make(chan proxy.Backend, 10)
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
b, _ := suite.f.Get("10.0.0.1") //nolint: errcheck
backendCh <- b
}()
}
wg.Wait()
close(backendCh)
b := <-backendCh
for anotherB := range backendCh {
suite.Assert().Equal(b, anotherB)
}
}
func TestAPIDFactorySuite(t *testing.T) {
suite.Run(t, new(APIDFactorySuite))
}

View File

@@ -0,0 +1,162 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package backend_test
import (
"context"
"crypto/tls"
"errors"
"testing"
"github.com/gogo/protobuf/proto"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
"github.com/talos-systems/grpc-proxy/proxy"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
"github.com/talos-systems/talos/api/common"
"github.com/talos-systems/talos/internal/app/apid/pkg/backend"
)
func TestAPIDInterfaces(t *testing.T) {
assert.Implements(t, (*proxy.Backend)(nil), new(backend.APID))
}
type APIDSuite struct {
suite.Suite
b *backend.APID
}
func (suite *APIDSuite) SetupSuite() {
var err error
suite.b, err = backend.NewAPID("127.0.0.1", credentials.NewTLS(&tls.Config{}))
suite.Require().NoError(err)
}
func (suite *APIDSuite) TestGetConnection() {
md := metadata.New(nil)
md.Set(":authority", "127.0.0.2")
md.Set("targets", "127.0.0.1")
md.Set("key", "value1", "value2")
ctx := metadata.NewIncomingContext(context.Background(), md)
outCtx1, conn1, err1 := suite.b.GetConnection(ctx)
suite.Require().NoError(err1)
suite.Assert().NotNil(conn1)
mdOut1, ok1 := metadata.FromOutgoingContext(outCtx1)
suite.Require().True(ok1)
suite.Assert().Equal([]string{"value1", "value2"}, mdOut1.Get("key"))
suite.Assert().Equal([]string{"127.0.0.2"}, mdOut1.Get("proxyfrom"))
outCtx2, conn2, err2 := suite.b.GetConnection(ctx)
suite.Require().NoError(err2)
suite.Assert().Equal(conn1, conn2) // connection is cached
mdOut2, ok2 := metadata.FromOutgoingContext(outCtx2)
suite.Require().True(ok2)
suite.Assert().Equal([]string{"value1", "value2"}, mdOut2.Get("key"))
suite.Assert().Equal([]string{"127.0.0.2"}, mdOut2.Get("proxyfrom"))
}
func (suite *APIDSuite) TestAppendInfoUnary() {
reply := &common.DataReply{
Response: []*common.DataResponse{
{
Bytes: []byte("foobar"),
},
},
}
resp, err := proto.Marshal(reply)
suite.Require().NoError(err)
newResp, err := suite.b.AppendInfo(false, resp)
suite.Require().NoError(err)
var newReply common.DataReply
err = proto.Unmarshal(newResp, &newReply)
suite.Require().NoError(err)
suite.Assert().EqualValues([]byte("foobar"), newReply.Response[0].Bytes)
suite.Assert().Equal(suite.b.String(), newReply.Response[0].Metadata.Hostname)
suite.Assert().Empty(newReply.Response[0].Metadata.Error)
}
func (suite *APIDSuite) TestAppendInfoStreaming() {
response := &common.DataResponse{
Bytes: []byte("foobar"),
}
resp, err := proto.Marshal(response)
suite.Require().NoError(err)
newResp, err := suite.b.AppendInfo(true, resp)
suite.Require().NoError(err)
var newResponse common.DataResponse
err = proto.Unmarshal(newResp, &newResponse)
suite.Require().NoError(err)
suite.Assert().EqualValues([]byte("foobar"), newResponse.Bytes)
suite.Assert().Equal(suite.b.String(), newResponse.Metadata.Hostname)
suite.Assert().Empty(newResponse.Metadata.Error)
}
func (suite *APIDSuite) TestAppendInfoStreamingMetadata() {
// this tests the case when metadata field is appended twice
// to the message, but protobuf merges definitions
response := &common.DataResponse{
Metadata: &common.ResponseMetadata{
Error: "something went wrong",
},
}
resp, err := proto.Marshal(response)
suite.Require().NoError(err)
newResp, err := suite.b.AppendInfo(true, resp)
suite.Require().NoError(err)
var newResponse common.DataResponse
err = proto.Unmarshal(newResp, &newResponse)
suite.Require().NoError(err)
suite.Assert().Nil(newResponse.Bytes)
suite.Assert().Equal(suite.b.String(), newResponse.Metadata.Hostname)
suite.Assert().Equal("something went wrong", newResponse.Metadata.Error)
}
func (suite *APIDSuite) TestBuildErrorUnary() {
resp, err := suite.b.BuildError(false, errors.New("some error"))
suite.Require().NoError(err)
var reply common.DataReply
err = proto.Unmarshal(resp, &reply)
suite.Require().NoError(err)
suite.Assert().Nil(reply.Response[0].Bytes)
suite.Assert().Equal(suite.b.String(), reply.Response[0].Metadata.Hostname)
suite.Assert().Equal("some error", reply.Response[0].Metadata.Error)
}
func (suite *APIDSuite) TestBuildErrorStreaming() {
resp, err := suite.b.BuildError(true, errors.New("some error"))
suite.Require().NoError(err)
var response common.DataResponse
err = proto.Unmarshal(resp, &response)
suite.Require().NoError(err)
suite.Assert().Nil(response.Bytes)
suite.Assert().Equal(suite.b.String(), response.Metadata.Hostname)
suite.Assert().Equal("some error", response.Metadata.Error)
}
func TestAPIDSuite(t *testing.T) {
suite.Run(t, new(APIDSuite))
}

View File

@@ -0,0 +1,6 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Package backend implements backends satisfying proxy.Backend interface
package backend

View File

@@ -0,0 +1,72 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package backend
import (
"context"
"sync"
"github.com/talos-systems/grpc-proxy/proxy"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
)
// Local implements local backend (proxying one2one to local service)
type Local struct {
name string
socketPath string
mu sync.Mutex
conn *grpc.ClientConn
}
// NewLocal builds new Local backend
func NewLocal(name, socketPath string) *Local {
return &Local{
name: name,
socketPath: socketPath,
}
}
func (l *Local) String() string {
return l.name
}
// GetConnection returns a grpc connection to the backend.
func (l *Local) GetConnection(ctx context.Context) (context.Context, *grpc.ClientConn, error) {
l.mu.Lock()
defer l.mu.Unlock()
// copy metadata
outCtx := ctx
if md, ok := metadata.FromIncomingContext(ctx); ok {
outCtx = metadata.NewOutgoingContext(ctx, md)
}
if l.conn != nil {
return outCtx, l.conn, nil
}
var err error
l.conn, err = grpc.DialContext(
ctx,
"unix:"+l.socketPath,
grpc.WithInsecure(),
grpc.WithCodec(proxy.Codec()), //nolint: staticcheck
)
return outCtx, l.conn, err
}
// AppendInfo is called to enhance response from the backend with additional data.
func (l *Local) AppendInfo(streaming bool, resp []byte) ([]byte, error) {
return resp, nil
}
// BuildError is called to convert error from upstream into response field.
func (l *Local) BuildError(streaming bool, err error) ([]byte, error) {
return nil, nil
}

View File

@@ -0,0 +1,44 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package backend_test
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/talos-systems/grpc-proxy/proxy"
"google.golang.org/grpc/metadata"
"github.com/talos-systems/talos/internal/app/apid/pkg/backend"
)
func TestLocalInterfaces(t *testing.T) {
assert.Implements(t, (*proxy.Backend)(nil), new(backend.Local))
}
func TestLocalGetConnection(t *testing.T) {
l := backend.NewLocal("test", "/tmp/test.sock")
md := metadata.New(nil)
md.Set("key", "value1", "value2")
ctx := metadata.NewIncomingContext(context.Background(), md)
outCtx1, conn1, err1 := l.GetConnection(ctx)
assert.NoError(t, err1)
assert.NotNil(t, conn1)
mdOut1, ok1 := metadata.FromOutgoingContext(outCtx1)
assert.True(t, ok1)
assert.Equal(t, []string{"value1", "value2"}, mdOut1.Get("key"))
outCtx2, conn2, err2 := l.GetConnection(ctx)
assert.NoError(t, err2)
assert.Equal(t, conn1, conn2) // connection is cached
mdOut2, ok2 := metadata.FromOutgoingContext(outCtx2)
assert.True(t, ok2)
assert.Equal(t, []string{"value1", "value2"}, mdOut2.Get("key"))
}

View File

@@ -0,0 +1,122 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Package director provides proxy call routing facility
package director
import (
"context"
"fmt"
"regexp"
"strings"
"github.com/talos-systems/grpc-proxy/proxy"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc/status"
)
// Router wraps grpc-proxy StreamDirector
type Router struct {
localBackends map[string]proxy.Backend
remoteBackendFactory RemoteBackendFactory
streamedMatchers []*regexp.Regexp
}
// RemoteBackendFactory provides backend generation by address (target)
type RemoteBackendFactory func(target string) (proxy.Backend, error)
// NewRouter builds new Router
func NewRouter(backendFactory RemoteBackendFactory) *Router {
return &Router{
localBackends: map[string]proxy.Backend{},
remoteBackendFactory: backendFactory,
}
}
// Register is no-op to implement factory.Registrator interface.
//
// Actual proxy handler is installed via grpc.UnknownServiceHandler option.
func (r *Router) Register(srv *grpc.Server) {
}
// Director implements proxy.StreamDirector function
func (r *Router) Director(ctx context.Context, fullMethodName string) (proxy.Mode, []proxy.Backend, error) {
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return r.localDirector(fullMethodName)
}
if _, exists := md["proxyfrom"]; exists {
return r.localDirector(fullMethodName)
}
var targets []string
if targets, ok = md["targets"]; !ok {
// send directly to local node, skips another layer of proxying
return r.localDirector(fullMethodName)
}
return r.aggregateDirector(targets)
}
// localDirector sends requests down to local service in one2one mode.
//
// Local backends are registered via RegisterLocalBackend
func (r *Router) localDirector(fullMethodName string) (proxy.Mode, []proxy.Backend, error) {
parts := strings.SplitN(fullMethodName, "/", 3)
serviceName := parts[1]
if backend, ok := r.localBackends[serviceName]; ok {
return proxy.One2One, []proxy.Backend{backend}, nil
}
return proxy.One2One, nil, status.Errorf(codes.Unknown, "service %v is not defined", serviceName)
}
// aggregateDirector sends request across set of remote instances and aggregates results.
func (r *Router) aggregateDirector(targets []string) (proxy.Mode, []proxy.Backend, error) {
var err error
backends := make([]proxy.Backend, len(targets))
for i, target := range targets {
backends[i], err = r.remoteBackendFactory(target)
if err != nil {
return proxy.One2Many, nil, status.Error(codes.Internal, err.Error())
}
}
return proxy.One2Many, backends, nil
}
// RegisterLocalBackend registers local backend by service name.
func (r *Router) RegisterLocalBackend(serviceName string, backend proxy.Backend) {
if _, exists := r.localBackends[serviceName]; exists {
panic(fmt.Sprintf("local backend %v already registered", serviceName))
}
r.localBackends[serviceName] = backend
}
// StreamedDetector implements proxy.StreamedDetector.
func (r *Router) StreamedDetector(fullMethodName string) bool {
for _, re := range r.streamedMatchers {
if re.MatchString(fullMethodName) {
return true
}
}
return false
}
// RegisterStreamedRegex register regex for streamed method.
//
// This could be exact literal match: /^\/serviceName\/methodName$/ or any
// suffix/prefix match.
func (r *Router) RegisterStreamedRegex(regex string) {
r.streamedMatchers = append(r.streamedMatchers, regexp.MustCompile(regex))
}

View File

@@ -0,0 +1,105 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package director_test
import (
"context"
"regexp"
"testing"
"github.com/stretchr/testify/suite"
"github.com/talos-systems/grpc-proxy/proxy"
"google.golang.org/grpc/metadata"
"github.com/talos-systems/talos/internal/app/apid/pkg/director"
)
type DirectorSuite struct {
suite.Suite
router *director.Router
}
func (suite *DirectorSuite) SetupSuite() {
suite.router = director.NewRouter(mockBackendFactory)
}
func (suite *DirectorSuite) TestRegisterLocalBackend() {
suite.router.RegisterLocalBackend("a.A", &mockBackend{})
suite.router.RegisterLocalBackend("b.B", &mockBackend{})
suite.Require().Panics(func() { suite.router.RegisterLocalBackend("a.A", &mockBackend{}) })
}
func (suite *DirectorSuite) TestStreamedDetector() {
suite.Assert().False(suite.router.StreamedDetector("/service.Service/someMethod"))
suite.router.RegisterStreamedRegex("^" + regexp.QuoteMeta("/service.Service/someMethod") + "$")
suite.Assert().True(suite.router.StreamedDetector("/service.Service/someMethod"))
suite.Assert().False(suite.router.StreamedDetector("/service.Service/someMethod2"))
suite.Assert().False(suite.router.StreamedDetector("/servicexService/someMethod"))
suite.router.RegisterStreamedRegex("Stream$")
suite.Assert().True(suite.router.StreamedDetector("/service.Service/getStream"))
suite.Assert().False(suite.router.StreamedDetector("/service.Service/getStreamItem"))
}
func (suite *DirectorSuite) TestDirectorLocal() {
ctx := context.Background()
mode, backends, err := suite.router.Director(ctx, "/service.Service/method")
suite.Assert().Equal(proxy.One2One, mode)
suite.Assert().Nil(backends)
suite.Assert().EqualError(err, "rpc error: code = Unknown desc = service service.Service is not defined")
suite.router.RegisterLocalBackend("service.Service", &mockBackend{target: "local"})
mode, backends, err = suite.router.Director(ctx, "/service.Service/method")
suite.Assert().Equal(proxy.One2One, mode)
suite.Assert().Len(backends, 1)
suite.Assert().Equal("local", backends[0].(*mockBackend).target)
suite.Assert().NoError(err)
ctxProxyFrom := metadata.NewIncomingContext(ctx, metadata.Pairs("proxyfrom", "127.0.0.1"))
mode, backends, err = suite.router.Director(ctxProxyFrom, "/service.Service/method")
suite.Assert().Equal(proxy.One2One, mode)
suite.Assert().Len(backends, 1)
suite.Assert().Equal("local", backends[0].(*mockBackend).target)
suite.Assert().NoError(err)
ctxNoTargets := metadata.NewIncomingContext(ctx, metadata.Pairs(":authority", "127.0.0.1"))
mode, backends, err = suite.router.Director(ctxNoTargets, "/service.Service/method")
suite.Assert().Equal(proxy.One2One, mode)
suite.Assert().Len(backends, 1)
suite.Assert().Equal("local", backends[0].(*mockBackend).target)
suite.Assert().NoError(err)
}
func (suite *DirectorSuite) TestDirectorAggregate() {
ctx := context.Background()
md := metadata.New(nil)
md.Set("targets", "127.0.0.1", "127.0.0.2")
mode, backends, err := suite.router.Director(metadata.NewIncomingContext(ctx, md), "/service.Service/method")
suite.Assert().Equal(proxy.One2Many, mode)
suite.Assert().Len(backends, 2)
suite.Assert().Equal("127.0.0.1", backends[0].(*mockBackend).target)
suite.Assert().Equal("127.0.0.2", backends[1].(*mockBackend).target)
suite.Assert().NoError(err)
md = metadata.New(nil)
md.Set("targets", "127.0.0.1")
mode, backends, err = suite.router.Director(metadata.NewIncomingContext(ctx, md), "/service.Service/method")
suite.Assert().Equal(proxy.One2Many, mode)
suite.Assert().Len(backends, 1)
suite.Assert().Equal("127.0.0.1", backends[0].(*mockBackend).target)
suite.Assert().NoError(err)
}
func TestDirectorSuite(t *testing.T) {
suite.Run(t, new(DirectorSuite))
}

View File

@@ -0,0 +1,36 @@
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package director_test
import (
"context"
"github.com/talos-systems/grpc-proxy/proxy"
"google.golang.org/grpc"
)
type mockBackend struct {
target string
}
func (m *mockBackend) String() string {
return m.target
}
func (m *mockBackend) GetConnection(ctx context.Context) (context.Context, *grpc.ClientConn, error) {
return ctx, nil, nil
}
func (m *mockBackend) AppendInfo(streaming bool, resp []byte) ([]byte, error) {
return resp, nil
}
func (m *mockBackend) BuildError(streaming bool, err error) ([]byte, error) {
return nil, nil
}
func mockBackendFactory(target string) (proxy.Backend, error) {
return &mockBackend{target: target}, nil
}

View File

@@ -259,7 +259,7 @@ func (r *Registrator) CopyOut(req *machineapi.CopyOutRequest, s machineapi.Machi
chunkCh := chunker.Read(ctx)
for data := range chunkCh {
err := s.SendMsg(&machineapi.StreamingData{Bytes: data})
err := s.SendMsg(&common.DataResponse{Bytes: data})
if err != nil {
ctxCancel()
}
@@ -267,7 +267,11 @@ func (r *Registrator) CopyOut(req *machineapi.CopyOutRequest, s machineapi.Machi
archiveErr := <-errCh
if archiveErr != nil {
return s.SendMsg(&machineapi.StreamingData{Errors: archiveErr.Error()})
return s.SendMsg(&common.DataResponse{
Metadata: &common.ResponseMetadata{
Error: archiveErr.Error(),
},
})
}
return nil
@@ -460,7 +464,7 @@ func (r *Registrator) Logs(req *machineapi.LogsRequest, l machineapi.Machine_Log
}
for data := range chunk.Read(l.Context()) {
if err = l.Send(&common.Data{Bytes: data}); err != nil {
if err = l.Send(&common.DataResponse{Bytes: data}); err != nil {
return
}
}
@@ -531,7 +535,7 @@ func (r *Registrator) Read(in *machineapi.ReadRequest, srv machineapi.Machine_Re
chunkCh := chunker.Read(ctx)
for data := range chunkCh {
err := srv.SendMsg(&machineapi.StreamingData{Bytes: data})
err := srv.SendMsg(&common.DataResponse{Bytes: data})
if err != nil {
cancel()
}

View File

@@ -146,7 +146,7 @@ func (o *APID) Runner(config runtime.Configurator) (runner.Runner, error) {
func (o *APID) HealthFunc(runtime.Configurator) health.Check {
return func(ctx context.Context) error {
var d net.Dialer
conn, err := d.DialContext(ctx, "tcp", fmt.Sprintf("%s:%d", "127.0.0.1", constants.OsdPort))
conn, err := d.DialContext(ctx, "tcp", fmt.Sprintf("%s:%d", "127.0.0.1", constants.ApidPort))
if err != nil {
return err
}

View File

@@ -181,7 +181,7 @@ func (r *Registrator) Dmesg(ctx context.Context, in *empty.Empty) (data *common.
data = &common.DataReply{
Response: []*common.DataResponse{
{
Bytes: &common.Data{Bytes: buf[:n]},
Bytes: buf[:n],
},
},
}

View File

@@ -30,7 +30,7 @@ func (apiSuite *APISuite) SetupSuite() {
target = apiSuite.Target
}
apiSuite.Client, err = client.NewClient(creds, target, constants.OsdPort)
apiSuite.Client, err = client.NewClient(creds, target, constants.ApidPort)
apiSuite.Require().NoError(err)
}

View File

@@ -33,7 +33,7 @@ func NewClient(endpoint string, connectionTimeout time.Duration) (*Client, error
grpc.WithInsecure(),
grpc.WithBlock(),
grpc.FailOnNonTempDialError(false),
grpc.WithBackoffMaxDelay(3*time.Second),
grpc.WithBackoffMaxDelay(3*time.Second), //nolint: staticcheck
grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize)))
if err != nil {
return nil, fmt.Errorf("error connecting to CRI: %w", err)

View File

@@ -179,8 +179,8 @@ const (
// EncryptionConfigRootfsPath is the path to the EncryptionConfig relative to rootfs.
EncryptionConfigRootfsPath = "/etc/kubernetes/encryptionconfig.yaml"
// OsdPort is the port for the osd service.
OsdPort = 50000
// ApidPort is the port for the apid service.
ApidPort = 50000
// TrustdPort is the port for the trustd service.
TrustdPort = 50001