diff --git a/docs/docs.json b/docs/docs.json index 1762b5c5..c0ecec76 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -736,6 +736,50 @@ "enums": [], "extensions": [], "messages": [ + { + "name": "APIServerACL", + "longName": "APIServerACL", + "fullName": "api.v1.APIServerACL", + "description": "APiServerACL defines which source ip addresses are allowed to talk to the API Server.", + "hasExtensions": false, + "hasFields": true, + "hasOneofs": false, + "extensions": [], + "fields": [ + { + "name": "enabled", + "description": "enabled must be true if the acls should take effect.\nCan be set to false to temporarily disable the acls without loosing the original list of source addresses", + "label": "", + "type": "bool", + "longType": "bool", + "fullType": "bool", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "source_addresses", + "description": "source_addresses a list of ip addresses which are allowed.", + "label": "repeated", + "type": "string", + "longType": "string", + "fullType": "string", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "", + "options": { + "validate.rules": [ + { + "name": "repeated.items.string.ip", + "value": true + } + ] + } + } + ] + }, { "name": "Cluster", "longName": "Cluster", @@ -945,6 +989,18 @@ "isoneof": false, "oneofdecl": "", "defaultValue": "" + }, + { + "name": "api_server_acl", + "description": "", + "label": "", + "type": "APIServerACL", + "longType": "APIServerACL", + "fullType": "api.v1.APIServerACL", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" } ] }, @@ -1533,6 +1589,18 @@ "isoneof": true, "oneofdecl": "_maintenance", "defaultValue": "" + }, + { + "name": "api_server_acl", + "description": "", + "label": "optional", + "type": "APIServerACL", + "longType": "APIServerACL", + "fullType": "api.v1.APIServerACL", + "ismap": false, + "isoneof": true, + "oneofdecl": "_api_server_acl", + "defaultValue": "" } ] }, diff --git a/go.mod b/go.mod index 03221e6b..d93b7e04 100644 --- a/go.mod +++ b/go.mod @@ -9,9 +9,9 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.0.2 github.com/klauspost/connect-compress/v2 v2.0.0 github.com/stretchr/testify v1.8.4 - golang.org/x/exp v0.0.0-20231006140011-7918f672742d + golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa google.golang.org/protobuf v1.31.0 -) +) require ( github.com/Masterminds/goutils v1.1.1 // indirect @@ -27,7 +27,7 @@ require ( github.com/shopspring/decimal v1.3.1 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/stretchr/objx v0.5.1 // indirect - golang.org/x/crypto v0.14.0 // indirect + golang.org/x/crypto v0.15.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 55d2a9b3..0bc19e7a 100644 --- a/go.sum +++ b/go.sum @@ -72,10 +72,10 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= -golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= diff --git a/go/api/v1/cluster.pb.go b/go/api/v1/cluster.pb.go index ebc85146..02c10ccd 100644 --- a/go/api/v1/cluster.pb.go +++ b/go/api/v1/cluster.pb.go @@ -29,20 +29,21 @@ type Cluster struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - Partition string `protobuf:"bytes,4,opt,name=partition,proto3" json:"partition,omitempty"` // partition is part of a region - Kubernetes *KubernetesSpec `protobuf:"bytes,5,opt,name=kubernetes,proto3" json:"kubernetes,omitempty"` - Workers []*Worker `protobuf:"bytes,6,rep,name=workers,proto3" json:"workers,omitempty"` - Maintenance *Maintenance `protobuf:"bytes,7,opt,name=maintenance,proto3" json:"maintenance,omitempty"` - Tenant string `protobuf:"bytes,8,opt,name=tenant,proto3" json:"tenant,omitempty"` - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - DeletedAt *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` - Status *ClusterStatus `protobuf:"bytes,20,opt,name=status,proto3" json:"status,omitempty"` - Purpose *string `protobuf:"bytes,21,opt,name=purpose,proto3,oneof" json:"purpose,omitempty"` - Monitoring *ClusterMonitoring `protobuf:"bytes,22,opt,name=monitoring,proto3" json:"monitoring,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + Partition string `protobuf:"bytes,4,opt,name=partition,proto3" json:"partition,omitempty"` // partition is part of a region + Kubernetes *KubernetesSpec `protobuf:"bytes,5,opt,name=kubernetes,proto3" json:"kubernetes,omitempty"` + Workers []*Worker `protobuf:"bytes,6,rep,name=workers,proto3" json:"workers,omitempty"` + Maintenance *Maintenance `protobuf:"bytes,7,opt,name=maintenance,proto3" json:"maintenance,omitempty"` + Tenant string `protobuf:"bytes,8,opt,name=tenant,proto3" json:"tenant,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + DeletedAt *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=deleted_at,json=deletedAt,proto3" json:"deleted_at,omitempty"` + Status *ClusterStatus `protobuf:"bytes,20,opt,name=status,proto3" json:"status,omitempty"` + Purpose *string `protobuf:"bytes,21,opt,name=purpose,proto3,oneof" json:"purpose,omitempty"` + Monitoring *ClusterMonitoring `protobuf:"bytes,22,opt,name=monitoring,proto3" json:"monitoring,omitempty"` + ApiServerAcl *APIServerACL `protobuf:"bytes,23,opt,name=api_server_acl,json=apiServerAcl,proto3" json:"api_server_acl,omitempty"` } func (x *Cluster) Reset() { @@ -175,6 +176,13 @@ func (x *Cluster) GetMonitoring() *ClusterMonitoring { return nil } +func (x *Cluster) GetApiServerAcl() *APIServerACL { + if x != nil { + return x.ApiServerAcl + } + return nil +} + type KubernetesSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -514,6 +522,65 @@ func (x *WorkerUpdate) GetMaxunavailable() uint32 { return 0 } +// APiServerACL defines which source ip addresses are allowed to talk to the API Server. +type APIServerACL struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // enabled must be true if the acls should take effect. + // Can be set to false to temporarily disable the acls without loosing the original list of source addresses + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + // source_addresses a list of ip addresses which are allowed. + SourceAddresses []string `protobuf:"bytes,2,rep,name=source_addresses,json=sourceAddresses,proto3" json:"source_addresses,omitempty"` +} + +func (x *APIServerACL) Reset() { + *x = APIServerACL{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_cluster_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *APIServerACL) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*APIServerACL) ProtoMessage() {} + +func (x *APIServerACL) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_cluster_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use APIServerACL.ProtoReflect.Descriptor instead. +func (*APIServerACL) Descriptor() ([]byte, []int) { + return file_api_v1_cluster_proto_rawDescGZIP(), []int{6} +} + +func (x *APIServerACL) GetEnabled() bool { + if x != nil { + return x.Enabled + } + return false +} + +func (x *APIServerACL) GetSourceAddresses() []string { + if x != nil { + return x.SourceAddresses + } + return nil +} + // Requests type ClusterServiceGetRequest struct { state protoimpl.MessageState @@ -527,7 +594,7 @@ type ClusterServiceGetRequest struct { func (x *ClusterServiceGetRequest) Reset() { *x = ClusterServiceGetRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[6] + mi := &file_api_v1_cluster_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -540,7 +607,7 @@ func (x *ClusterServiceGetRequest) String() string { func (*ClusterServiceGetRequest) ProtoMessage() {} func (x *ClusterServiceGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[6] + mi := &file_api_v1_cluster_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -553,7 +620,7 @@ func (x *ClusterServiceGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceGetRequest.ProtoReflect.Descriptor instead. func (*ClusterServiceGetRequest) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{6} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{7} } func (x *ClusterServiceGetRequest) GetUuid() string { @@ -583,7 +650,7 @@ type ClusterServiceGetCredentialsRequest struct { func (x *ClusterServiceGetCredentialsRequest) Reset() { *x = ClusterServiceGetCredentialsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[7] + mi := &file_api_v1_cluster_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -596,7 +663,7 @@ func (x *ClusterServiceGetCredentialsRequest) String() string { func (*ClusterServiceGetCredentialsRequest) ProtoMessage() {} func (x *ClusterServiceGetCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[7] + mi := &file_api_v1_cluster_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -609,7 +676,7 @@ func (x *ClusterServiceGetCredentialsRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use ClusterServiceGetCredentialsRequest.ProtoReflect.Descriptor instead. func (*ClusterServiceGetCredentialsRequest) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{7} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{8} } func (x *ClusterServiceGetCredentialsRequest) GetUuid() string { @@ -644,7 +711,7 @@ type ClusterServiceListRequest struct { func (x *ClusterServiceListRequest) Reset() { *x = ClusterServiceListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[8] + mi := &file_api_v1_cluster_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -657,7 +724,7 @@ func (x *ClusterServiceListRequest) String() string { func (*ClusterServiceListRequest) ProtoMessage() {} func (x *ClusterServiceListRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[8] + mi := &file_api_v1_cluster_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -670,7 +737,7 @@ func (x *ClusterServiceListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceListRequest.ProtoReflect.Descriptor instead. func (*ClusterServiceListRequest) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{8} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{9} } func (x *ClusterServiceListRequest) GetProject() string { @@ -696,7 +763,7 @@ type ClusterServiceCreateRequest struct { func (x *ClusterServiceCreateRequest) Reset() { *x = ClusterServiceCreateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[9] + mi := &file_api_v1_cluster_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -709,7 +776,7 @@ func (x *ClusterServiceCreateRequest) String() string { func (*ClusterServiceCreateRequest) ProtoMessage() {} func (x *ClusterServiceCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[9] + mi := &file_api_v1_cluster_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -722,7 +789,7 @@ func (x *ClusterServiceCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceCreateRequest.ProtoReflect.Descriptor instead. func (*ClusterServiceCreateRequest) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{9} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{10} } func (x *ClusterServiceCreateRequest) GetName() string { @@ -772,17 +839,18 @@ type ClusterServiceUpdateRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` - Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` - Kubernetes *KubernetesSpec `protobuf:"bytes,3,opt,name=kubernetes,proto3,oneof" json:"kubernetes,omitempty"` - Workers []*WorkerUpdate `protobuf:"bytes,4,rep,name=workers,proto3" json:"workers,omitempty"` - Maintenance *Maintenance `protobuf:"bytes,5,opt,name=maintenance,proto3,oneof" json:"maintenance,omitempty"` + Uuid string `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"` + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + Kubernetes *KubernetesSpec `protobuf:"bytes,3,opt,name=kubernetes,proto3,oneof" json:"kubernetes,omitempty"` + Workers []*WorkerUpdate `protobuf:"bytes,4,rep,name=workers,proto3" json:"workers,omitempty"` + Maintenance *Maintenance `protobuf:"bytes,5,opt,name=maintenance,proto3,oneof" json:"maintenance,omitempty"` + ApiServerAcl *APIServerACL `protobuf:"bytes,23,opt,name=api_server_acl,json=apiServerAcl,proto3,oneof" json:"api_server_acl,omitempty"` } func (x *ClusterServiceUpdateRequest) Reset() { *x = ClusterServiceUpdateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[10] + mi := &file_api_v1_cluster_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -795,7 +863,7 @@ func (x *ClusterServiceUpdateRequest) String() string { func (*ClusterServiceUpdateRequest) ProtoMessage() {} func (x *ClusterServiceUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[10] + mi := &file_api_v1_cluster_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -808,7 +876,7 @@ func (x *ClusterServiceUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceUpdateRequest.ProtoReflect.Descriptor instead. func (*ClusterServiceUpdateRequest) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{10} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{11} } func (x *ClusterServiceUpdateRequest) GetUuid() string { @@ -846,6 +914,13 @@ func (x *ClusterServiceUpdateRequest) GetMaintenance() *Maintenance { return nil } +func (x *ClusterServiceUpdateRequest) GetApiServerAcl() *APIServerACL { + if x != nil { + return x.ApiServerAcl + } + return nil +} + type ClusterServiceDeleteRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -858,7 +933,7 @@ type ClusterServiceDeleteRequest struct { func (x *ClusterServiceDeleteRequest) Reset() { *x = ClusterServiceDeleteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[11] + mi := &file_api_v1_cluster_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -871,7 +946,7 @@ func (x *ClusterServiceDeleteRequest) String() string { func (*ClusterServiceDeleteRequest) ProtoMessage() {} func (x *ClusterServiceDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[11] + mi := &file_api_v1_cluster_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -884,7 +959,7 @@ func (x *ClusterServiceDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceDeleteRequest.ProtoReflect.Descriptor instead. func (*ClusterServiceDeleteRequest) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{11} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{12} } func (x *ClusterServiceDeleteRequest) GetUuid() string { @@ -913,7 +988,7 @@ type ClusterServiceWatchStatusRequest struct { func (x *ClusterServiceWatchStatusRequest) Reset() { *x = ClusterServiceWatchStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[12] + mi := &file_api_v1_cluster_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -926,7 +1001,7 @@ func (x *ClusterServiceWatchStatusRequest) String() string { func (*ClusterServiceWatchStatusRequest) ProtoMessage() {} func (x *ClusterServiceWatchStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[12] + mi := &file_api_v1_cluster_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -939,7 +1014,7 @@ func (x *ClusterServiceWatchStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceWatchStatusRequest.ProtoReflect.Descriptor instead. func (*ClusterServiceWatchStatusRequest) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{12} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{13} } func (x *ClusterServiceWatchStatusRequest) GetUuid() string { @@ -975,7 +1050,7 @@ type ClusterStatus struct { func (x *ClusterStatus) Reset() { *x = ClusterStatus{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[13] + mi := &file_api_v1_cluster_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -988,7 +1063,7 @@ func (x *ClusterStatus) String() string { func (*ClusterStatus) ProtoMessage() {} func (x *ClusterStatus) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[13] + mi := &file_api_v1_cluster_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1001,7 +1076,7 @@ func (x *ClusterStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterStatus.ProtoReflect.Descriptor instead. func (*ClusterStatus) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{13} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{14} } func (x *ClusterStatus) GetUuid() string { @@ -1088,7 +1163,7 @@ type ClusterStatusLastError struct { func (x *ClusterStatusLastError) Reset() { *x = ClusterStatusLastError{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[14] + mi := &file_api_v1_cluster_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1101,7 +1176,7 @@ func (x *ClusterStatusLastError) String() string { func (*ClusterStatusLastError) ProtoMessage() {} func (x *ClusterStatusLastError) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[14] + mi := &file_api_v1_cluster_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1114,7 +1189,7 @@ func (x *ClusterStatusLastError) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterStatusLastError.ProtoReflect.Descriptor instead. func (*ClusterStatusLastError) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{14} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{15} } func (x *ClusterStatusLastError) GetDescription() string { @@ -1158,7 +1233,7 @@ type ClusterMonitoring struct { func (x *ClusterMonitoring) Reset() { *x = ClusterMonitoring{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[15] + mi := &file_api_v1_cluster_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1171,7 +1246,7 @@ func (x *ClusterMonitoring) String() string { func (*ClusterMonitoring) ProtoMessage() {} func (x *ClusterMonitoring) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[15] + mi := &file_api_v1_cluster_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1184,7 +1259,7 @@ func (x *ClusterMonitoring) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterMonitoring.ProtoReflect.Descriptor instead. func (*ClusterMonitoring) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{15} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{16} } func (x *ClusterMonitoring) GetUsername() string { @@ -1220,7 +1295,7 @@ type ClusterServiceCreateResponse struct { func (x *ClusterServiceCreateResponse) Reset() { *x = ClusterServiceCreateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[16] + mi := &file_api_v1_cluster_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1233,7 +1308,7 @@ func (x *ClusterServiceCreateResponse) String() string { func (*ClusterServiceCreateResponse) ProtoMessage() {} func (x *ClusterServiceCreateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[16] + mi := &file_api_v1_cluster_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1246,7 +1321,7 @@ func (x *ClusterServiceCreateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceCreateResponse.ProtoReflect.Descriptor instead. func (*ClusterServiceCreateResponse) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{16} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{17} } func (x *ClusterServiceCreateResponse) GetCluster() *Cluster { @@ -1267,7 +1342,7 @@ type ClusterServiceGetResponse struct { func (x *ClusterServiceGetResponse) Reset() { *x = ClusterServiceGetResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[17] + mi := &file_api_v1_cluster_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1280,7 +1355,7 @@ func (x *ClusterServiceGetResponse) String() string { func (*ClusterServiceGetResponse) ProtoMessage() {} func (x *ClusterServiceGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[17] + mi := &file_api_v1_cluster_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1293,7 +1368,7 @@ func (x *ClusterServiceGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceGetResponse.ProtoReflect.Descriptor instead. func (*ClusterServiceGetResponse) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{17} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{18} } func (x *ClusterServiceGetResponse) GetCluster() *Cluster { @@ -1314,7 +1389,7 @@ type ClusterServiceGetCredentialsResponse struct { func (x *ClusterServiceGetCredentialsResponse) Reset() { *x = ClusterServiceGetCredentialsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[18] + mi := &file_api_v1_cluster_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1327,7 +1402,7 @@ func (x *ClusterServiceGetCredentialsResponse) String() string { func (*ClusterServiceGetCredentialsResponse) ProtoMessage() {} func (x *ClusterServiceGetCredentialsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[18] + mi := &file_api_v1_cluster_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1340,7 +1415,7 @@ func (x *ClusterServiceGetCredentialsResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use ClusterServiceGetCredentialsResponse.ProtoReflect.Descriptor instead. func (*ClusterServiceGetCredentialsResponse) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{18} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{19} } func (x *ClusterServiceGetCredentialsResponse) GetKubeconfig() string { @@ -1361,7 +1436,7 @@ type ClusterServiceDeleteResponse struct { func (x *ClusterServiceDeleteResponse) Reset() { *x = ClusterServiceDeleteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[19] + mi := &file_api_v1_cluster_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1374,7 +1449,7 @@ func (x *ClusterServiceDeleteResponse) String() string { func (*ClusterServiceDeleteResponse) ProtoMessage() {} func (x *ClusterServiceDeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[19] + mi := &file_api_v1_cluster_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1387,7 +1462,7 @@ func (x *ClusterServiceDeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceDeleteResponse.ProtoReflect.Descriptor instead. func (*ClusterServiceDeleteResponse) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{19} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{20} } func (x *ClusterServiceDeleteResponse) GetCluster() *Cluster { @@ -1408,7 +1483,7 @@ type ClusterServiceUpdateResponse struct { func (x *ClusterServiceUpdateResponse) Reset() { *x = ClusterServiceUpdateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[20] + mi := &file_api_v1_cluster_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1421,7 +1496,7 @@ func (x *ClusterServiceUpdateResponse) String() string { func (*ClusterServiceUpdateResponse) ProtoMessage() {} func (x *ClusterServiceUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[20] + mi := &file_api_v1_cluster_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1434,7 +1509,7 @@ func (x *ClusterServiceUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceUpdateResponse.ProtoReflect.Descriptor instead. func (*ClusterServiceUpdateResponse) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{20} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{21} } func (x *ClusterServiceUpdateResponse) GetCluster() *Cluster { @@ -1455,7 +1530,7 @@ type ClusterServiceListResponse struct { func (x *ClusterServiceListResponse) Reset() { *x = ClusterServiceListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[21] + mi := &file_api_v1_cluster_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1468,7 +1543,7 @@ func (x *ClusterServiceListResponse) String() string { func (*ClusterServiceListResponse) ProtoMessage() {} func (x *ClusterServiceListResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[21] + mi := &file_api_v1_cluster_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1481,7 +1556,7 @@ func (x *ClusterServiceListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterServiceListResponse.ProtoReflect.Descriptor instead. func (*ClusterServiceListResponse) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{21} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{22} } func (x *ClusterServiceListResponse) GetClusters() []*Cluster { @@ -1502,7 +1577,7 @@ type ClusterServiceWatchStatusResponse struct { func (x *ClusterServiceWatchStatusResponse) Reset() { *x = ClusterServiceWatchStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_cluster_proto_msgTypes[22] + mi := &file_api_v1_cluster_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1515,7 +1590,7 @@ func (x *ClusterServiceWatchStatusResponse) String() string { func (*ClusterServiceWatchStatusResponse) ProtoMessage() {} func (x *ClusterServiceWatchStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_cluster_proto_msgTypes[22] + mi := &file_api_v1_cluster_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1528,7 +1603,7 @@ func (x *ClusterServiceWatchStatusResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ClusterServiceWatchStatusResponse.ProtoReflect.Descriptor instead. func (*ClusterServiceWatchStatusResponse) Descriptor() ([]byte, []int) { - return file_api_v1_cluster_proto_rawDescGZIP(), []int{22} + return file_api_v1_cluster_proto_rawDescGZIP(), []int{23} } func (x *ClusterServiceWatchStatusResponse) GetStatus() *ClusterStatus { @@ -1549,7 +1624,7 @@ var file_api_v1_cluster_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x81, 0x05, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbd, 0x05, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, @@ -1589,277 +1664,292 @@ var file_api_v1_cluster_proto_rawDesc = []byte{ 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x6d, 0x6f, 0x6e, 0x69, 0x74, - 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, - 0x65, 0x22, 0x48, 0x0a, 0x0e, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x53, - 0x70, 0x65, 0x63, 0x12, 0x36, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0xfa, 0x42, 0x19, 0x72, 0x17, 0x28, 0x08, 0x32, 0x13, 0x5b, - 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x2e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x2e, 0x5b, 0x30, 0x2d, - 0x39, 0x5d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xfb, 0x01, 0x0a, 0x0b, - 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x15, 0x6b, - 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x14, 0x6b, 0x75, - 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x17, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x16, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, - 0x65, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x1a, 0x0a, - 0x18, 0x5f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, - 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x15, 0x4d, 0x61, + 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x0e, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x50, 0x49, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x41, 0x43, 0x4c, 0x52, 0x0c, 0x61, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x63, + 0x6c, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x22, 0x48, 0x0a, + 0x0e, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x36, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x1c, 0xfa, 0x42, 0x19, 0x72, 0x17, 0x28, 0x08, 0x32, 0x13, 0x5b, 0x30, 0x2d, 0x39, 0x5d, + 0x2b, 0x2e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x2e, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xfb, 0x01, 0x0a, 0x0b, 0x4d, 0x61, 0x69, 0x6e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x15, 0x6b, 0x75, 0x62, 0x65, 0x72, + 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x14, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x65, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x88, 0x01, + 0x01, 0x12, 0x3c, 0x0a, 0x17, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x01, 0x52, 0x16, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x41, 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x12, + 0x3e, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, - 0x64, 0x6f, 0x77, 0x12, 0x3a, 0x0a, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, - 0xfa, 0x42, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x12, - 0x47, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0xfa, 0x42, - 0x0d, 0xaa, 0x01, 0x0a, 0x1a, 0x03, 0x08, 0xc0, 0x70, 0x32, 0x03, 0x08, 0x90, 0x1c, 0x52, 0x08, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xf3, 0x01, 0x0a, 0x06, 0x57, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, - 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x0b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x20, 0x52, 0x07, 0x6d, 0x69, - 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x40, 0x52, - 0x07, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x73, - 0x75, 0x72, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, - 0x02, 0x18, 0x40, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x73, 0x75, 0x72, 0x67, 0x65, 0x12, 0x2f, 0x0a, - 0x0e, 0x6d, 0x61, 0x78, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x40, 0x52, 0x0e, - 0x6d, 0x61, 0x78, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xdb, - 0x02, 0x0a, 0x0c, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x64, 0x6f, 0x77, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x42, + 0x18, 0x0a, 0x16, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x61, + 0x75, 0x74, 0x6f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x15, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, + 0x3a, 0x0a, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xfa, 0x42, 0x05, 0xb2, + 0x01, 0x02, 0x08, 0x01, 0x52, 0x05, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x10, 0xfa, 0x42, 0x0d, 0xaa, 0x01, 0x0a, + 0x1a, 0x03, 0x08, 0xc0, 0x70, 0x32, 0x03, 0x08, 0x90, 0x1c, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xf3, 0x01, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x32, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x2d, 0x0a, 0x0c, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, - 0x01, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x20, 0x48, 0x01, 0x52, - 0x07, 0x6d, 0x69, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x07, 0x6d, - 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, - 0x04, 0x2a, 0x02, 0x18, 0x40, 0x48, 0x02, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, - 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x73, 0x75, 0x72, 0x67, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x40, 0x48, 0x03, - 0x52, 0x08, 0x6d, 0x61, 0x78, 0x73, 0x75, 0x72, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, - 0x0e, 0x6d, 0x61, 0x78, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x40, 0x48, 0x04, - 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, - 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x69, 0x6e, 0x73, 0x69, 0x7a, 0x65, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x0b, 0x0a, 0x09, - 0x5f, 0x6d, 0x61, 0x78, 0x73, 0x75, 0x72, 0x67, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6d, 0x61, - 0x78, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x5e, 0x0a, 0x18, + 0x01, 0x52, 0x0b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, + 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, + 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x20, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x73, 0x69, 0x7a, + 0x65, 0x12, 0x21, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x40, 0x52, 0x07, 0x6d, 0x61, 0x78, + 0x73, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x73, 0x75, 0x72, 0x67, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x40, 0x52, + 0x08, 0x6d, 0x61, 0x78, 0x73, 0x75, 0x72, 0x67, 0x65, 0x12, 0x2f, 0x0a, 0x0e, 0x6d, 0x61, 0x78, + 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x40, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x75, + 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xdb, 0x02, 0x0a, 0x0c, 0x57, + 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, + 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x0c, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x48, 0x00, 0x52, + 0x0b, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, + 0x26, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x20, 0x48, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, + 0x73, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, + 0x40, 0x48, 0x02, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x88, 0x01, 0x01, 0x12, + 0x28, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x73, 0x75, 0x72, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x40, 0x48, 0x03, 0x52, 0x08, 0x6d, 0x61, + 0x78, 0x73, 0x75, 0x72, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x0e, 0x6d, 0x61, 0x78, + 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0d, 0x42, 0x07, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x18, 0x40, 0x48, 0x04, 0x52, 0x0e, 0x6d, 0x61, + 0x78, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, + 0x0f, 0x0a, 0x0d, 0x5f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x69, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x0a, 0x0a, 0x08, + 0x5f, 0x6d, 0x61, 0x78, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x61, 0x78, + 0x73, 0x75, 0x72, 0x67, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x6d, 0x61, 0x78, 0x75, 0x6e, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x61, 0x0a, 0x0c, 0x41, 0x50, 0x49, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x43, 0x4c, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x12, 0x37, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xfa, 0x42, + 0x09, 0x92, 0x01, 0x06, 0x22, 0x04, 0x72, 0x02, 0x70, 0x01, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x5e, 0x0a, 0x18, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, + 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x23, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, - 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, - 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb8, 0x01, 0x0a, - 0x23, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, - 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x04, 0x75, 0x75, - 0x69, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, - 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x41, 0x0a, 0x19, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, - 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x9b, 0x02, 0x0a, 0x1b, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x10, - 0x02, 0x18, 0x0c, 0x68, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, - 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x36, 0x0a, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x75, 0x62, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x6b, 0x75, 0x62, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, - 0x73, 0x12, 0x35, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x6d, 0x61, 0x69, - 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xa9, 0x02, 0x0a, 0x1b, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, - 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, - 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3b, 0x0a, 0x0a, - 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x0a, 0x6b, 0x75, 0x62, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x07, 0x77, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x6d, 0x61, 0x69, - 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x63, 0x65, 0x48, 0x01, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x63, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x65, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x63, 0x65, 0x22, 0x61, 0x0a, 0x1b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x74, 0x0a, 0x20, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x88, 0x01, 0x01, 0x12, 0x24, - 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x22, 0xdd, 0x02, - 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x70, 0x69, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, - 0x61, 0x64, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x52, 0x65, - 0x61, 0x64, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x61, - 0x64, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x52, - 0x65, 0x61, 0x64, 0x79, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x3f, 0x0a, 0x0b, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0xc0, 0x01, - 0x0a, 0x16, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, - 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x07, 0x74, 0x61, - 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x74, - 0x61, 0x73, 0x6b, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x64, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x44, - 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, - 0x22, 0x67, 0x0a, 0x11, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, 0x6e, 0x69, 0x74, - 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x49, 0x0a, 0x1c, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x22, 0x46, 0x0a, 0x19, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x46, 0x0a, 0x24, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, - 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0x49, 0x0a, 0x1c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x41, 0x0a, 0x19, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x9b, 0x02, 0x0a, 0x1b, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xfa, 0x42, 0x08, 0x72, 0x06, 0x10, 0x02, + 0x18, 0x0c, 0x68, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, + 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, + 0x0a, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x75, 0x62, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x6b, 0x75, 0x62, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, + 0x12, 0x35, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xfd, 0x02, 0x0a, 0x1b, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, + 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, + 0x80, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x6b, + 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, + 0x74, 0x65, 0x73, 0x53, 0x70, 0x65, 0x63, 0x48, 0x00, 0x52, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x72, + 0x6e, 0x65, 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x07, 0x77, 0x6f, 0x72, 0x6b, + 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x07, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x63, 0x65, 0x48, 0x01, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x3f, 0x0a, 0x0e, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x5f, 0x61, 0x63, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x50, 0x49, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, + 0x43, 0x4c, 0x48, 0x02, 0x52, 0x0c, 0x61, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, + 0x63, 0x6c, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, + 0x65, 0x74, 0x65, 0x73, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x63, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x6c, 0x22, 0x61, 0x0a, 0x1b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, + 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x74, 0x0a, 0x20, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x61, 0x74, 0x63, + 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xfa, 0x42, + 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x88, 0x01, + 0x01, 0x12, 0x24, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0a, 0xfa, 0x42, 0x07, 0x72, 0x05, 0x10, 0x02, 0x18, 0x80, 0x01, 0x52, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x75, 0x75, 0x69, 0x64, + 0x22, 0xdd, 0x02, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, + 0x61, 0x70, 0x69, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, + 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, + 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x36, 0x0a, 0x17, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x61, + 0x64, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, + 0x3f, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0e, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, + 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x64, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6f, 0x64, 0x65, + 0x73, 0x12, 0x44, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x74, 0x61, 0x73, 0x6b, + 0x5f, 0x69, 0x64, 0x22, 0x67, 0x0a, 0x11, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x6f, + 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x49, 0x0a, 0x1c, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x46, 0x0a, 0x19, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, - 0x49, 0x0a, 0x1c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x29, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x49, 0x0a, 0x1a, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x52, 0x0a, 0x21, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x32, 0xe7, 0x05, 0x0a, 0x0e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x61, 0x0a, 0x06, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, + 0x46, 0x0a, 0x24, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6b, 0x75, 0x62, + 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x49, 0x0a, 0x1c, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x22, 0x49, 0x0a, 0x1c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x49, 0x0a, + 0x1a, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x52, 0x0a, 0x21, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x32, 0xe7, 0x05, 0x0a, + 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x61, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0c, 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xe0, 0xf3, + 0x18, 0x01, 0x12, 0x5c, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x0c, 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xe0, 0xf3, 0x18, 0x01, 0x12, - 0x5c, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0xc8, 0xf3, 0x18, - 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xc8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, 0x02, 0x12, 0x5f, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, + 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xc8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, 0x02, + 0x12, 0x5f, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0xc8, 0xf3, - 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xc8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, 0x02, 0x12, 0x76, - 0x0a, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, - 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x10, 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xc8, 0xf3, 0x18, 0x03, - 0xe8, 0xf3, 0x18, 0x02, 0x30, 0x01, 0x12, 0x61, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0c, 0xc8, 0xf3, 0x18, - 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xe0, 0xf3, 0x18, 0x01, 0x12, 0x61, 0x0a, 0x06, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x10, 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xc8, 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, + 0x02, 0x12, 0x76, 0x0a, 0x0b, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x57, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xc8, + 0xf3, 0x18, 0x03, 0xe8, 0xf3, 0x18, 0x02, 0x30, 0x01, 0x12, 0x61, 0x0a, 0x06, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0c, - 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xe0, 0xf3, 0x18, 0x01, 0x12, 0x75, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2b, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0c, + 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xe0, 0xf3, 0x18, 0x01, 0x12, 0x61, 0x0a, 0x06, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x0c, 0xc8, 0xf3, 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0xe0, 0xf3, 0x18, 0x01, 0x12, + 0x75, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x73, 0x12, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, 0x18, 0x01, 0xc8, - 0xf3, 0x18, 0x02, 0x42, 0x85, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x42, 0x0c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, - 0x65, 0x74, 0x61, 0x6c, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, - 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x41, 0x70, 0x69, - 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, - 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x07, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0xc8, 0xf3, + 0x18, 0x01, 0xc8, 0xf3, 0x18, 0x02, 0x42, 0x85, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x2d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2d, 0x63, 0x6c, + 0x6f, 0x75, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x06, + 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x12, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1874,7 +1964,7 @@ func file_api_v1_cluster_proto_rawDescGZIP() []byte { return file_api_v1_cluster_proto_rawDescData } -var file_api_v1_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_api_v1_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 24) var file_api_v1_cluster_proto_goTypes = []interface{}{ (*Cluster)(nil), // 0: api.v1.Cluster (*KubernetesSpec)(nil), // 1: api.v1.KubernetesSpec @@ -1882,72 +1972,75 @@ var file_api_v1_cluster_proto_goTypes = []interface{}{ (*MaintenanceTimeWindow)(nil), // 3: api.v1.MaintenanceTimeWindow (*Worker)(nil), // 4: api.v1.Worker (*WorkerUpdate)(nil), // 5: api.v1.WorkerUpdate - (*ClusterServiceGetRequest)(nil), // 6: api.v1.ClusterServiceGetRequest - (*ClusterServiceGetCredentialsRequest)(nil), // 7: api.v1.ClusterServiceGetCredentialsRequest - (*ClusterServiceListRequest)(nil), // 8: api.v1.ClusterServiceListRequest - (*ClusterServiceCreateRequest)(nil), // 9: api.v1.ClusterServiceCreateRequest - (*ClusterServiceUpdateRequest)(nil), // 10: api.v1.ClusterServiceUpdateRequest - (*ClusterServiceDeleteRequest)(nil), // 11: api.v1.ClusterServiceDeleteRequest - (*ClusterServiceWatchStatusRequest)(nil), // 12: api.v1.ClusterServiceWatchStatusRequest - (*ClusterStatus)(nil), // 13: api.v1.ClusterStatus - (*ClusterStatusLastError)(nil), // 14: api.v1.ClusterStatusLastError - (*ClusterMonitoring)(nil), // 15: api.v1.ClusterMonitoring - (*ClusterServiceCreateResponse)(nil), // 16: api.v1.ClusterServiceCreateResponse - (*ClusterServiceGetResponse)(nil), // 17: api.v1.ClusterServiceGetResponse - (*ClusterServiceGetCredentialsResponse)(nil), // 18: api.v1.ClusterServiceGetCredentialsResponse - (*ClusterServiceDeleteResponse)(nil), // 19: api.v1.ClusterServiceDeleteResponse - (*ClusterServiceUpdateResponse)(nil), // 20: api.v1.ClusterServiceUpdateResponse - (*ClusterServiceListResponse)(nil), // 21: api.v1.ClusterServiceListResponse - (*ClusterServiceWatchStatusResponse)(nil), // 22: api.v1.ClusterServiceWatchStatusResponse - (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 24: google.protobuf.Duration + (*APIServerACL)(nil), // 6: api.v1.APIServerACL + (*ClusterServiceGetRequest)(nil), // 7: api.v1.ClusterServiceGetRequest + (*ClusterServiceGetCredentialsRequest)(nil), // 8: api.v1.ClusterServiceGetCredentialsRequest + (*ClusterServiceListRequest)(nil), // 9: api.v1.ClusterServiceListRequest + (*ClusterServiceCreateRequest)(nil), // 10: api.v1.ClusterServiceCreateRequest + (*ClusterServiceUpdateRequest)(nil), // 11: api.v1.ClusterServiceUpdateRequest + (*ClusterServiceDeleteRequest)(nil), // 12: api.v1.ClusterServiceDeleteRequest + (*ClusterServiceWatchStatusRequest)(nil), // 13: api.v1.ClusterServiceWatchStatusRequest + (*ClusterStatus)(nil), // 14: api.v1.ClusterStatus + (*ClusterStatusLastError)(nil), // 15: api.v1.ClusterStatusLastError + (*ClusterMonitoring)(nil), // 16: api.v1.ClusterMonitoring + (*ClusterServiceCreateResponse)(nil), // 17: api.v1.ClusterServiceCreateResponse + (*ClusterServiceGetResponse)(nil), // 18: api.v1.ClusterServiceGetResponse + (*ClusterServiceGetCredentialsResponse)(nil), // 19: api.v1.ClusterServiceGetCredentialsResponse + (*ClusterServiceDeleteResponse)(nil), // 20: api.v1.ClusterServiceDeleteResponse + (*ClusterServiceUpdateResponse)(nil), // 21: api.v1.ClusterServiceUpdateResponse + (*ClusterServiceListResponse)(nil), // 22: api.v1.ClusterServiceListResponse + (*ClusterServiceWatchStatusResponse)(nil), // 23: api.v1.ClusterServiceWatchStatusResponse + (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 25: google.protobuf.Duration } var file_api_v1_cluster_proto_depIdxs = []int32{ 1, // 0: api.v1.Cluster.kubernetes:type_name -> api.v1.KubernetesSpec 4, // 1: api.v1.Cluster.workers:type_name -> api.v1.Worker 2, // 2: api.v1.Cluster.maintenance:type_name -> api.v1.Maintenance - 23, // 3: api.v1.Cluster.created_at:type_name -> google.protobuf.Timestamp - 23, // 4: api.v1.Cluster.updated_at:type_name -> google.protobuf.Timestamp - 23, // 5: api.v1.Cluster.deleted_at:type_name -> google.protobuf.Timestamp - 13, // 6: api.v1.Cluster.status:type_name -> api.v1.ClusterStatus - 15, // 7: api.v1.Cluster.monitoring:type_name -> api.v1.ClusterMonitoring - 3, // 8: api.v1.Maintenance.time_window:type_name -> api.v1.MaintenanceTimeWindow - 23, // 9: api.v1.MaintenanceTimeWindow.begin:type_name -> google.protobuf.Timestamp - 24, // 10: api.v1.MaintenanceTimeWindow.duration:type_name -> google.protobuf.Duration - 24, // 11: api.v1.ClusterServiceGetCredentialsRequest.expiration:type_name -> google.protobuf.Duration - 1, // 12: api.v1.ClusterServiceCreateRequest.kubernetes:type_name -> api.v1.KubernetesSpec - 4, // 13: api.v1.ClusterServiceCreateRequest.workers:type_name -> api.v1.Worker - 2, // 14: api.v1.ClusterServiceCreateRequest.maintenance:type_name -> api.v1.Maintenance - 1, // 15: api.v1.ClusterServiceUpdateRequest.kubernetes:type_name -> api.v1.KubernetesSpec - 5, // 16: api.v1.ClusterServiceUpdateRequest.workers:type_name -> api.v1.WorkerUpdate - 2, // 17: api.v1.ClusterServiceUpdateRequest.maintenance:type_name -> api.v1.Maintenance - 14, // 18: api.v1.ClusterStatus.last_errors:type_name -> api.v1.ClusterStatusLastError - 23, // 19: api.v1.ClusterStatusLastError.last_update_time:type_name -> google.protobuf.Timestamp - 0, // 20: api.v1.ClusterServiceCreateResponse.cluster:type_name -> api.v1.Cluster - 0, // 21: api.v1.ClusterServiceGetResponse.cluster:type_name -> api.v1.Cluster - 0, // 22: api.v1.ClusterServiceDeleteResponse.cluster:type_name -> api.v1.Cluster - 0, // 23: api.v1.ClusterServiceUpdateResponse.cluster:type_name -> api.v1.Cluster - 0, // 24: api.v1.ClusterServiceListResponse.clusters:type_name -> api.v1.Cluster - 13, // 25: api.v1.ClusterServiceWatchStatusResponse.status:type_name -> api.v1.ClusterStatus - 9, // 26: api.v1.ClusterService.Create:input_type -> api.v1.ClusterServiceCreateRequest - 6, // 27: api.v1.ClusterService.Get:input_type -> api.v1.ClusterServiceGetRequest - 8, // 28: api.v1.ClusterService.List:input_type -> api.v1.ClusterServiceListRequest - 12, // 29: api.v1.ClusterService.WatchStatus:input_type -> api.v1.ClusterServiceWatchStatusRequest - 11, // 30: api.v1.ClusterService.Delete:input_type -> api.v1.ClusterServiceDeleteRequest - 10, // 31: api.v1.ClusterService.Update:input_type -> api.v1.ClusterServiceUpdateRequest - 7, // 32: api.v1.ClusterService.GetCredentials:input_type -> api.v1.ClusterServiceGetCredentialsRequest - 16, // 33: api.v1.ClusterService.Create:output_type -> api.v1.ClusterServiceCreateResponse - 17, // 34: api.v1.ClusterService.Get:output_type -> api.v1.ClusterServiceGetResponse - 21, // 35: api.v1.ClusterService.List:output_type -> api.v1.ClusterServiceListResponse - 22, // 36: api.v1.ClusterService.WatchStatus:output_type -> api.v1.ClusterServiceWatchStatusResponse - 19, // 37: api.v1.ClusterService.Delete:output_type -> api.v1.ClusterServiceDeleteResponse - 20, // 38: api.v1.ClusterService.Update:output_type -> api.v1.ClusterServiceUpdateResponse - 18, // 39: api.v1.ClusterService.GetCredentials:output_type -> api.v1.ClusterServiceGetCredentialsResponse - 33, // [33:40] is the sub-list for method output_type - 26, // [26:33] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 24, // 3: api.v1.Cluster.created_at:type_name -> google.protobuf.Timestamp + 24, // 4: api.v1.Cluster.updated_at:type_name -> google.protobuf.Timestamp + 24, // 5: api.v1.Cluster.deleted_at:type_name -> google.protobuf.Timestamp + 14, // 6: api.v1.Cluster.status:type_name -> api.v1.ClusterStatus + 16, // 7: api.v1.Cluster.monitoring:type_name -> api.v1.ClusterMonitoring + 6, // 8: api.v1.Cluster.api_server_acl:type_name -> api.v1.APIServerACL + 3, // 9: api.v1.Maintenance.time_window:type_name -> api.v1.MaintenanceTimeWindow + 24, // 10: api.v1.MaintenanceTimeWindow.begin:type_name -> google.protobuf.Timestamp + 25, // 11: api.v1.MaintenanceTimeWindow.duration:type_name -> google.protobuf.Duration + 25, // 12: api.v1.ClusterServiceGetCredentialsRequest.expiration:type_name -> google.protobuf.Duration + 1, // 13: api.v1.ClusterServiceCreateRequest.kubernetes:type_name -> api.v1.KubernetesSpec + 4, // 14: api.v1.ClusterServiceCreateRequest.workers:type_name -> api.v1.Worker + 2, // 15: api.v1.ClusterServiceCreateRequest.maintenance:type_name -> api.v1.Maintenance + 1, // 16: api.v1.ClusterServiceUpdateRequest.kubernetes:type_name -> api.v1.KubernetesSpec + 5, // 17: api.v1.ClusterServiceUpdateRequest.workers:type_name -> api.v1.WorkerUpdate + 2, // 18: api.v1.ClusterServiceUpdateRequest.maintenance:type_name -> api.v1.Maintenance + 6, // 19: api.v1.ClusterServiceUpdateRequest.api_server_acl:type_name -> api.v1.APIServerACL + 15, // 20: api.v1.ClusterStatus.last_errors:type_name -> api.v1.ClusterStatusLastError + 24, // 21: api.v1.ClusterStatusLastError.last_update_time:type_name -> google.protobuf.Timestamp + 0, // 22: api.v1.ClusterServiceCreateResponse.cluster:type_name -> api.v1.Cluster + 0, // 23: api.v1.ClusterServiceGetResponse.cluster:type_name -> api.v1.Cluster + 0, // 24: api.v1.ClusterServiceDeleteResponse.cluster:type_name -> api.v1.Cluster + 0, // 25: api.v1.ClusterServiceUpdateResponse.cluster:type_name -> api.v1.Cluster + 0, // 26: api.v1.ClusterServiceListResponse.clusters:type_name -> api.v1.Cluster + 14, // 27: api.v1.ClusterServiceWatchStatusResponse.status:type_name -> api.v1.ClusterStatus + 10, // 28: api.v1.ClusterService.Create:input_type -> api.v1.ClusterServiceCreateRequest + 7, // 29: api.v1.ClusterService.Get:input_type -> api.v1.ClusterServiceGetRequest + 9, // 30: api.v1.ClusterService.List:input_type -> api.v1.ClusterServiceListRequest + 13, // 31: api.v1.ClusterService.WatchStatus:input_type -> api.v1.ClusterServiceWatchStatusRequest + 12, // 32: api.v1.ClusterService.Delete:input_type -> api.v1.ClusterServiceDeleteRequest + 11, // 33: api.v1.ClusterService.Update:input_type -> api.v1.ClusterServiceUpdateRequest + 8, // 34: api.v1.ClusterService.GetCredentials:input_type -> api.v1.ClusterServiceGetCredentialsRequest + 17, // 35: api.v1.ClusterService.Create:output_type -> api.v1.ClusterServiceCreateResponse + 18, // 36: api.v1.ClusterService.Get:output_type -> api.v1.ClusterServiceGetResponse + 22, // 37: api.v1.ClusterService.List:output_type -> api.v1.ClusterServiceListResponse + 23, // 38: api.v1.ClusterService.WatchStatus:output_type -> api.v1.ClusterServiceWatchStatusResponse + 20, // 39: api.v1.ClusterService.Delete:output_type -> api.v1.ClusterServiceDeleteResponse + 21, // 40: api.v1.ClusterService.Update:output_type -> api.v1.ClusterServiceUpdateResponse + 19, // 41: api.v1.ClusterService.GetCredentials:output_type -> api.v1.ClusterServiceGetCredentialsResponse + 35, // [35:42] is the sub-list for method output_type + 28, // [28:35] is the sub-list for method input_type + 28, // [28:28] is the sub-list for extension type_name + 28, // [28:28] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name } func init() { file_api_v1_cluster_proto_init() } @@ -2030,7 +2123,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceGetRequest); i { + switch v := v.(*APIServerACL); i { case 0: return &v.state case 1: @@ -2042,7 +2135,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceGetCredentialsRequest); i { + switch v := v.(*ClusterServiceGetRequest); i { case 0: return &v.state case 1: @@ -2054,7 +2147,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceListRequest); i { + switch v := v.(*ClusterServiceGetCredentialsRequest); i { case 0: return &v.state case 1: @@ -2066,7 +2159,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceCreateRequest); i { + switch v := v.(*ClusterServiceListRequest); i { case 0: return &v.state case 1: @@ -2078,7 +2171,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceUpdateRequest); i { + switch v := v.(*ClusterServiceCreateRequest); i { case 0: return &v.state case 1: @@ -2090,7 +2183,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceDeleteRequest); i { + switch v := v.(*ClusterServiceUpdateRequest); i { case 0: return &v.state case 1: @@ -2102,7 +2195,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceWatchStatusRequest); i { + switch v := v.(*ClusterServiceDeleteRequest); i { case 0: return &v.state case 1: @@ -2114,7 +2207,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterStatus); i { + switch v := v.(*ClusterServiceWatchStatusRequest); i { case 0: return &v.state case 1: @@ -2126,7 +2219,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterStatusLastError); i { + switch v := v.(*ClusterStatus); i { case 0: return &v.state case 1: @@ -2138,7 +2231,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterMonitoring); i { + switch v := v.(*ClusterStatusLastError); i { case 0: return &v.state case 1: @@ -2150,7 +2243,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceCreateResponse); i { + switch v := v.(*ClusterMonitoring); i { case 0: return &v.state case 1: @@ -2162,7 +2255,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceGetResponse); i { + switch v := v.(*ClusterServiceCreateResponse); i { case 0: return &v.state case 1: @@ -2174,7 +2267,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceGetCredentialsResponse); i { + switch v := v.(*ClusterServiceGetResponse); i { case 0: return &v.state case 1: @@ -2186,7 +2279,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceDeleteResponse); i { + switch v := v.(*ClusterServiceGetCredentialsResponse); i { case 0: return &v.state case 1: @@ -2198,7 +2291,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceUpdateResponse); i { + switch v := v.(*ClusterServiceDeleteResponse); i { case 0: return &v.state case 1: @@ -2210,7 +2303,7 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterServiceListResponse); i { + switch v := v.(*ClusterServiceUpdateResponse); i { case 0: return &v.state case 1: @@ -2222,6 +2315,18 @@ func file_api_v1_cluster_proto_init() { } } file_api_v1_cluster_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterServiceListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_cluster_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterServiceWatchStatusResponse); i { case 0: return &v.state @@ -2237,17 +2342,17 @@ func file_api_v1_cluster_proto_init() { file_api_v1_cluster_proto_msgTypes[0].OneofWrappers = []interface{}{} file_api_v1_cluster_proto_msgTypes[2].OneofWrappers = []interface{}{} file_api_v1_cluster_proto_msgTypes[5].OneofWrappers = []interface{}{} - file_api_v1_cluster_proto_msgTypes[7].OneofWrappers = []interface{}{} - file_api_v1_cluster_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_api_v1_cluster_proto_msgTypes[12].OneofWrappers = []interface{}{} - file_api_v1_cluster_proto_msgTypes[14].OneofWrappers = []interface{}{} + file_api_v1_cluster_proto_msgTypes[8].OneofWrappers = []interface{}{} + file_api_v1_cluster_proto_msgTypes[11].OneofWrappers = []interface{}{} + file_api_v1_cluster_proto_msgTypes[13].OneofWrappers = []interface{}{} + file_api_v1_cluster_proto_msgTypes[15].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_v1_cluster_proto_rawDesc, NumEnums: 0, - NumMessages: 23, + NumMessages: 24, NumExtensions: 0, NumServices: 1, }, diff --git a/go/api/v1/cluster.pb.validate.go b/go/api/v1/cluster.pb.validate.go index d3b5ec60..fc569fe5 100644 --- a/go/api/v1/cluster.pb.validate.go +++ b/go/api/v1/cluster.pb.validate.go @@ -334,6 +334,35 @@ func (m *Cluster) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetApiServerAcl()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ApiServerAcl", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ApiServerAcl", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetApiServerAcl()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: "ApiServerAcl", + reason: "embedded message failed validation", + cause: err, + } + } + } + if m.Purpose != nil { // no validation rules for Purpose } @@ -1176,6 +1205,123 @@ var _ interface { ErrorName() string } = WorkerUpdateValidationError{} +// Validate checks the field values on APIServerACL with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *APIServerACL) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on APIServerACL with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in APIServerACLMultiError, or +// nil if none found. +func (m *APIServerACL) ValidateAll() error { + return m.validate(true) +} + +func (m *APIServerACL) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Enabled + + for idx, item := range m.GetSourceAddresses() { + _, _ = idx, item + + if ip := net.ParseIP(item); ip == nil { + err := APIServerACLValidationError{ + field: fmt.Sprintf("SourceAddresses[%v]", idx), + reason: "value must be a valid IP address", + } + if !all { + return err + } + errors = append(errors, err) + } + + } + + if len(errors) > 0 { + return APIServerACLMultiError(errors) + } + + return nil +} + +// APIServerACLMultiError is an error wrapping multiple validation errors +// returned by APIServerACL.ValidateAll() if the designated constraints aren't met. +type APIServerACLMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m APIServerACLMultiError) Error() string { + var msgs []string + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m APIServerACLMultiError) AllErrors() []error { return m } + +// APIServerACLValidationError is the validation error returned by +// APIServerACL.Validate if the designated constraints aren't met. +type APIServerACLValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e APIServerACLValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e APIServerACLValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e APIServerACLValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e APIServerACLValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e APIServerACLValidationError) ErrorName() string { return "APIServerACLValidationError" } + +// Error satisfies the builtin error interface +func (e APIServerACLValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sAPIServerACL.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = APIServerACLValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = APIServerACLValidationError{} + // Validate checks the field values on ClusterServiceGetRequest with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. @@ -1997,6 +2143,39 @@ func (m *ClusterServiceUpdateRequest) validate(all bool) error { } + if m.ApiServerAcl != nil { + + if all { + switch v := interface{}(m.GetApiServerAcl()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterServiceUpdateRequestValidationError{ + field: "ApiServerAcl", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterServiceUpdateRequestValidationError{ + field: "ApiServerAcl", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetApiServerAcl()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterServiceUpdateRequestValidationError{ + field: "ApiServerAcl", + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + if len(errors) > 0 { return ClusterServiceUpdateRequestMultiError(errors) } diff --git a/js/admin/v1/cluster_pb.js b/js/admin/v1/cluster_pb.js index e449f1a9..5845c3dd 100644 --- a/js/admin/v1/cluster_pb.js +++ b/js/admin/v1/cluster_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/cluster.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/cluster_pb.ts b/js/admin/v1/cluster_pb.ts index 75c8aa19..84a52212 100644 --- a/js/admin/v1/cluster_pb.ts +++ b/js/admin/v1/cluster_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/cluster.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/machine_pb.js b/js/admin/v1/machine_pb.js index 7e894e64..e2244d6c 100644 --- a/js/admin/v1/machine_pb.js +++ b/js/admin/v1/machine_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/machine.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/machine_pb.ts b/js/admin/v1/machine_pb.ts index ccead602..e94070a3 100644 --- a/js/admin/v1/machine_pb.ts +++ b/js/admin/v1/machine_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/machine.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/payment_pb.js b/js/admin/v1/payment_pb.js index 8dee21be..ca3d1566 100644 --- a/js/admin/v1/payment_pb.js +++ b/js/admin/v1/payment_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/payment.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/payment_pb.ts b/js/admin/v1/payment_pb.ts index a12f7e31..86e29e8e 100644 --- a/js/admin/v1/payment_pb.ts +++ b/js/admin/v1/payment_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/payment.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/storage_pb.js b/js/admin/v1/storage_pb.js index d31e2081..43d2d07f 100644 --- a/js/admin/v1/storage_pb.js +++ b/js/admin/v1/storage_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/storage.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/storage_pb.ts b/js/admin/v1/storage_pb.ts index 8fa65ef5..5aa91195 100644 --- a/js/admin/v1/storage_pb.ts +++ b/js/admin/v1/storage_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/storage.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/tenant_pb.js b/js/admin/v1/tenant_pb.js index a228a96f..a72ed128 100644 --- a/js/admin/v1/tenant_pb.js +++ b/js/admin/v1/tenant_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/tenant.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/tenant_pb.ts b/js/admin/v1/tenant_pb.ts index f701d935..15a6bfde 100644 --- a/js/admin/v1/tenant_pb.ts +++ b/js/admin/v1/tenant_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/tenant.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/token_pb.js b/js/admin/v1/token_pb.js index adb9e507..86cc52d9 100644 --- a/js/admin/v1/token_pb.js +++ b/js/admin/v1/token_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/token.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/admin/v1/token_pb.ts b/js/admin/v1/token_pb.ts index 0cc419cc..c74e5638 100644 --- a/js/admin/v1/token_pb.ts +++ b/js/admin/v1/token_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file admin/v1/token.proto (package admin.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/assets_pb.js b/js/api/v1/assets_pb.js index 50a7ab7d..5a8d6946 100644 --- a/js/api/v1/assets_pb.js +++ b/js/api/v1/assets_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/assets.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/assets_pb.ts b/js/api/v1/assets_pb.ts index 811b43cf..93a078c7 100644 --- a/js/api/v1/assets_pb.ts +++ b/js/api/v1/assets_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/assets.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/cluster_pb.d.ts b/js/api/v1/cluster_pb.d.ts index bae7fb33..1eee9f98 100644 --- a/js/api/v1/cluster_pb.d.ts +++ b/js/api/v1/cluster_pb.d.ts @@ -64,6 +64,10 @@ export declare class Cluster extends Message { * @generated from field: api.v1.ClusterMonitoring monitoring = 22; */ monitoring?: ClusterMonitoring; + /** + * @generated from field: api.v1.APIServerACL api_server_acl = 23; + */ + apiServerAcl?: APIServerACL; constructor(data?: PartialMessage); static readonly runtime: typeof proto3; static readonly typeName = "api.v1.Cluster"; @@ -210,6 +214,34 @@ export declare class WorkerUpdate extends Message { static fromJsonString(jsonString: string, options?: Partial): WorkerUpdate; static equals(a: WorkerUpdate | PlainMessage | undefined, b: WorkerUpdate | PlainMessage | undefined): boolean; } +/** + * APiServerACL defines which source ip addresses are allowed to talk to the API Server. + * + * @generated from message api.v1.APIServerACL + */ +export declare class APIServerACL extends Message { + /** + * enabled must be true if the acls should take effect. + * Can be set to false to temporarily disable the acls without loosing the original list of source addresses + * + * @generated from field: bool enabled = 1; + */ + enabled: boolean; + /** + * source_addresses a list of ip addresses which are allowed. + * + * @generated from field: repeated string source_addresses = 2; + */ + sourceAddresses: string[]; + constructor(data?: PartialMessage); + static readonly runtime: typeof proto3; + static readonly typeName = "api.v1.APIServerACL"; + static readonly fields: FieldList; + static fromBinary(bytes: Uint8Array, options?: Partial): APIServerACL; + static fromJson(jsonValue: JsonValue, options?: Partial): APIServerACL; + static fromJsonString(jsonString: string, options?: Partial): APIServerACL; + static equals(a: APIServerACL | PlainMessage | undefined, b: APIServerACL | PlainMessage | undefined): boolean; +} /** * Requests * @@ -338,6 +370,10 @@ export declare class ClusterServiceUpdateRequest extends Message); static readonly runtime: typeof proto3; static readonly typeName = "api.v1.ClusterServiceUpdateRequest"; diff --git a/js/api/v1/cluster_pb.js b/js/api/v1/cluster_pb.js index a2c41218..b87f0428 100644 --- a/js/api/v1/cluster_pb.js +++ b/js/api/v1/cluster_pb.js @@ -1,10 +1,10 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/cluster.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck Object.defineProperty(exports, "__esModule", { value: true }); -exports.ClusterServiceWatchStatusResponse = exports.ClusterServiceListResponse = exports.ClusterServiceUpdateResponse = exports.ClusterServiceDeleteResponse = exports.ClusterServiceGetCredentialsResponse = exports.ClusterServiceGetResponse = exports.ClusterServiceCreateResponse = exports.ClusterMonitoring = exports.ClusterStatusLastError = exports.ClusterStatus = exports.ClusterServiceWatchStatusRequest = exports.ClusterServiceDeleteRequest = exports.ClusterServiceUpdateRequest = exports.ClusterServiceCreateRequest = exports.ClusterServiceListRequest = exports.ClusterServiceGetCredentialsRequest = exports.ClusterServiceGetRequest = exports.WorkerUpdate = exports.Worker = exports.MaintenanceTimeWindow = exports.Maintenance = exports.KubernetesSpec = exports.Cluster = void 0; +exports.ClusterServiceWatchStatusResponse = exports.ClusterServiceListResponse = exports.ClusterServiceUpdateResponse = exports.ClusterServiceDeleteResponse = exports.ClusterServiceGetCredentialsResponse = exports.ClusterServiceGetResponse = exports.ClusterServiceCreateResponse = exports.ClusterMonitoring = exports.ClusterStatusLastError = exports.ClusterStatus = exports.ClusterServiceWatchStatusRequest = exports.ClusterServiceDeleteRequest = exports.ClusterServiceUpdateRequest = exports.ClusterServiceCreateRequest = exports.ClusterServiceListRequest = exports.ClusterServiceGetCredentialsRequest = exports.ClusterServiceGetRequest = exports.APIServerACL = exports.WorkerUpdate = exports.Worker = exports.MaintenanceTimeWindow = exports.Maintenance = exports.KubernetesSpec = exports.Cluster = void 0; const protobuf_1 = require("@bufbuild/protobuf"); /** * Types @@ -73,6 +73,7 @@ Cluster.fields = protobuf_1.proto3.util.newFieldList(() => [ { no: 20, name: "status", kind: "message", T: ClusterStatus }, { no: 21, name: "purpose", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 22, name: "monitoring", kind: "message", T: ClusterMonitoring }, + { no: 23, name: "api_server_acl", kind: "message", T: APIServerACL }, ]); /** * @generated from message api.v1.KubernetesSpec @@ -254,6 +255,49 @@ WorkerUpdate.fields = protobuf_1.proto3.util.newFieldList(() => [ { no: 5, name: "maxsurge", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, { no: 6, name: "maxunavailable", kind: "scalar", T: 13 /* ScalarType.UINT32 */, opt: true }, ]); +/** + * APiServerACL defines which source ip addresses are allowed to talk to the API Server. + * + * @generated from message api.v1.APIServerACL + */ +class APIServerACL extends protobuf_1.Message { + constructor(data) { + super(); + /** + * enabled must be true if the acls should take effect. + * Can be set to false to temporarily disable the acls without loosing the original list of source addresses + * + * @generated from field: bool enabled = 1; + */ + this.enabled = false; + /** + * source_addresses a list of ip addresses which are allowed. + * + * @generated from field: repeated string source_addresses = 2; + */ + this.sourceAddresses = []; + protobuf_1.proto3.util.initPartial(data, this); + } + static fromBinary(bytes, options) { + return new APIServerACL().fromBinary(bytes, options); + } + static fromJson(jsonValue, options) { + return new APIServerACL().fromJson(jsonValue, options); + } + static fromJsonString(jsonString, options) { + return new APIServerACL().fromJsonString(jsonString, options); + } + static equals(a, b) { + return protobuf_1.proto3.util.equals(APIServerACL, a, b); + } +} +exports.APIServerACL = APIServerACL; +APIServerACL.runtime = protobuf_1.proto3; +APIServerACL.typeName = "api.v1.APIServerACL"; +APIServerACL.fields = protobuf_1.proto3.util.newFieldList(() => [ + { no: 1, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 2, name: "source_addresses", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, +]); /** * Requests * @@ -452,6 +496,7 @@ ClusterServiceUpdateRequest.fields = protobuf_1.proto3.util.newFieldList(() => [ { no: 3, name: "kubernetes", kind: "message", T: KubernetesSpec, opt: true }, { no: 4, name: "workers", kind: "message", T: WorkerUpdate, repeated: true }, { no: 5, name: "maintenance", kind: "message", T: Maintenance, opt: true }, + { no: 23, name: "api_server_acl", kind: "message", T: APIServerACL, opt: true }, ]); /** * @generated from message api.v1.ClusterServiceDeleteRequest diff --git a/js/api/v1/cluster_pb.ts b/js/api/v1/cluster_pb.ts index 97c200b5..e491c449 100644 --- a/js/api/v1/cluster_pb.ts +++ b/js/api/v1/cluster_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/cluster.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck @@ -84,6 +84,11 @@ export class Cluster extends Message { */ monitoring?: ClusterMonitoring; + /** + * @generated from field: api.v1.APIServerACL api_server_acl = 23; + */ + apiServerAcl?: APIServerACL; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -106,6 +111,7 @@ export class Cluster extends Message { { no: 20, name: "status", kind: "message", T: ClusterStatus }, { no: 21, name: "purpose", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 22, name: "monitoring", kind: "message", T: ClusterMonitoring }, + { no: 23, name: "api_server_acl", kind: "message", T: APIServerACL }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Cluster { @@ -388,6 +394,56 @@ export class WorkerUpdate extends Message { } } +/** + * APiServerACL defines which source ip addresses are allowed to talk to the API Server. + * + * @generated from message api.v1.APIServerACL + */ +export class APIServerACL extends Message { + /** + * enabled must be true if the acls should take effect. + * Can be set to false to temporarily disable the acls without loosing the original list of source addresses + * + * @generated from field: bool enabled = 1; + */ + enabled = false; + + /** + * source_addresses a list of ip addresses which are allowed. + * + * @generated from field: repeated string source_addresses = 2; + */ + sourceAddresses: string[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "api.v1.APIServerACL"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "enabled", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 2, name: "source_addresses", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): APIServerACL { + return new APIServerACL().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): APIServerACL { + return new APIServerACL().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): APIServerACL { + return new APIServerACL().fromJsonString(jsonString, options); + } + + static equals(a: APIServerACL | PlainMessage | undefined, b: APIServerACL | PlainMessage | undefined): boolean { + return proto3.util.equals(APIServerACL, a, b); + } +} + /** * Requests * @@ -617,6 +673,11 @@ export class ClusterServiceUpdateRequest extends Message) { super(); proto3.util.initPartial(data, this); @@ -630,6 +691,7 @@ export class ClusterServiceUpdateRequest extends Message): ClusterServiceUpdateRequest { diff --git a/js/api/v1/common_pb.js b/js/api/v1/common_pb.js index ad0313ec..4af92cf4 100644 --- a/js/api/v1/common_pb.js +++ b/js/api/v1/common_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/common.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/common_pb.ts b/js/api/v1/common_pb.ts index 07d9ebbf..71a896c0 100644 --- a/js/api/v1/common_pb.ts +++ b/js/api/v1/common_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/common.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/health_pb.js b/js/api/v1/health_pb.js index b6e372ec..f5eb6400 100644 --- a/js/api/v1/health_pb.js +++ b/js/api/v1/health_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/health.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/health_pb.ts b/js/api/v1/health_pb.ts index 7b854887..ac4547fe 100644 --- a/js/api/v1/health_pb.ts +++ b/js/api/v1/health_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/health.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/ip_pb.js b/js/api/v1/ip_pb.js index 761fd2a1..6fafd9ba 100644 --- a/js/api/v1/ip_pb.js +++ b/js/api/v1/ip_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/ip.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/ip_pb.ts b/js/api/v1/ip_pb.ts index ff437dfc..a247760b 100644 --- a/js/api/v1/ip_pb.ts +++ b/js/api/v1/ip_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/ip.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/methods_pb.js b/js/api/v1/methods_pb.js index d32eb880..7e5b9d41 100644 --- a/js/api/v1/methods_pb.js +++ b/js/api/v1/methods_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/methods.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/methods_pb.ts b/js/api/v1/methods_pb.ts index f18718bb..58f80494 100644 --- a/js/api/v1/methods_pb.ts +++ b/js/api/v1/methods_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/methods.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/payment_pb.js b/js/api/v1/payment_pb.js index 804eaecd..fb073f36 100644 --- a/js/api/v1/payment_pb.js +++ b/js/api/v1/payment_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/payment.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/payment_pb.ts b/js/api/v1/payment_pb.ts index 33fd2de3..d7bc8212 100644 --- a/js/api/v1/payment_pb.ts +++ b/js/api/v1/payment_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/payment.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/tenant_pb.js b/js/api/v1/tenant_pb.js index 9aba7071..4c31f25c 100644 --- a/js/api/v1/tenant_pb.js +++ b/js/api/v1/tenant_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/tenant.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/tenant_pb.ts b/js/api/v1/tenant_pb.ts index 11e01a05..b55b2ba8 100644 --- a/js/api/v1/tenant_pb.ts +++ b/js/api/v1/tenant_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/tenant.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/token_pb.js b/js/api/v1/token_pb.js index 8ce18f7f..63c1fba4 100644 --- a/js/api/v1/token_pb.js +++ b/js/api/v1/token_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/token.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/token_pb.ts b/js/api/v1/token_pb.ts index 97479e4a..8d4ccf7e 100644 --- a/js/api/v1/token_pb.ts +++ b/js/api/v1/token_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/token.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/user_pb.js b/js/api/v1/user_pb.js index 3c980096..e6407538 100644 --- a/js/api/v1/user_pb.js +++ b/js/api/v1/user_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/user.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/user_pb.ts b/js/api/v1/user_pb.ts index 9050f2fd..b9fc388e 100644 --- a/js/api/v1/user_pb.ts +++ b/js/api/v1/user_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/user.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/version_pb.js b/js/api/v1/version_pb.js index dff2f9fb..9f305e73 100644 --- a/js/api/v1/version_pb.js +++ b/js/api/v1/version_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/version.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/version_pb.ts b/js/api/v1/version_pb.ts index df1337cd..e577d85e 100644 --- a/js/api/v1/version_pb.ts +++ b/js/api/v1/version_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/version.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/volume_pb.js b/js/api/v1/volume_pb.js index 20527b2f..5ce9c428 100644 --- a/js/api/v1/volume_pb.js +++ b/js/api/v1/volume_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/volume.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/api/v1/volume_pb.ts b/js/api/v1/volume_pb.ts index ea718dde..140159f8 100644 --- a/js/api/v1/volume_pb.ts +++ b/js/api/v1/volume_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file api/v1/volume.proto (package api.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/package-lock.json b/js/package-lock.json index b9456abf..86283590 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -1,16 +1,16 @@ { "name": "@metal-stack-cloud/api", - "version": "0.6.1", + "version": "0.6.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@metal-stack-cloud/api", - "version": "0.6.1", + "version": "0.6.3", "license": "MIT", "dependencies": { "@bufbuild/connect-web": "^0.13.0", - "@bufbuild/protobuf": "^1.4.1" + "@bufbuild/protobuf": "^1.4.2" }, "devDependencies": { "typescript": "^5.2.2" @@ -36,9 +36,9 @@ } }, "node_modules/@bufbuild/protobuf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.4.1.tgz", - "integrity": "sha512-4dthhwBGD9nlpY35ic8dMQC5R0dsND2b2xyeVO3qf+hBk8m7Y9dUs+SmMh6rqO2pGLUTKHefGXLDW+z19hBPdQ==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.4.2.tgz", + "integrity": "sha512-JyEH8Z+OD5Sc2opSg86qMHn1EM1Sa+zj/Tc0ovxdwk56ByVNONJSabuCUbLQp+eKN3rWNfrho0X+3SEqEPXIow==" }, "node_modules/typescript": { "version": "5.2.2", diff --git a/js/package.json b/js/package.json index a27066bf..d17fa4d5 100644 --- a/js/package.json +++ b/js/package.json @@ -1,6 +1,6 @@ { "name": "@metal-stack-cloud/api", - "version": "0.6.1", + "version": "0.6.3", "description": "metal-cloud api js client", "main": "index.js", "repository": "https://github.com/metal-stack-cloud/api.git", @@ -12,7 +12,7 @@ "license": "MIT", "dependencies": { "@bufbuild/connect-web": "^0.13.0", - "@bufbuild/protobuf": "^1.4.1" + "@bufbuild/protobuf": "^1.4.2" }, "devDependencies": { "typescript": "^5.2.2" diff --git a/js/status/v1/message_pb.js b/js/status/v1/message_pb.js index cdeae4b8..7f16a149 100644 --- a/js/status/v1/message_pb.js +++ b/js/status/v1/message_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file status/v1/message.proto (package status.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/status/v1/message_pb.ts b/js/status/v1/message_pb.ts index 5cc1793e..de3dd421 100644 --- a/js/status/v1/message_pb.ts +++ b/js/status/v1/message_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file status/v1/message.proto (package status.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/status/v1/status_pb.js b/js/status/v1/status_pb.js index f5cb9d95..1d8aa8da 100644 --- a/js/status/v1/status_pb.js +++ b/js/status/v1/status_pb.js @@ -1,5 +1,5 @@ "use strict"; -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file status/v1/status.proto (package status.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/js/status/v1/status_pb.ts b/js/status/v1/status_pb.ts index ba2f5630..ae8fa59a 100644 --- a/js/status/v1/status_pb.ts +++ b/js/status/v1/status_pb.ts @@ -1,4 +1,4 @@ -// @generated by protoc-gen-es v1.4.1 with parameter "target=ts" +// @generated by protoc-gen-es v1.4.2 with parameter "target=ts" // @generated from file status/v1/status.proto (package status.v1, syntax proto3) /* eslint-disable */ // @ts-nocheck diff --git a/proto/Makefile b/proto/Makefile index e8c826a4..5b9565ad 100644 --- a/proto/Makefile +++ b/proto/Makefile @@ -1,5 +1,5 @@ MAKEFLAGS += --no-print-directory -BUF_VERSION := 1.27.2 +BUF_VERSION := 1.28.1 _buf: docker run --rm \ diff --git a/proto/api/v1/cluster.proto b/proto/api/v1/cluster.proto index 8265f8b4..6612e5fe 100644 --- a/proto/api/v1/cluster.proto +++ b/proto/api/v1/cluster.proto @@ -69,6 +69,7 @@ message Cluster { ClusterStatus status = 20; optional string purpose = 21; ClusterMonitoring monitoring = 22; + APIServerACL api_server_acl = 23; } message KubernetesSpec { @@ -122,6 +123,15 @@ message WorkerUpdate { optional uint32 maxunavailable = 6 [(validate.rules).uint32.lte = 64]; } +// APiServerACL defines which source ip addresses are allowed to talk to the API Server. +message APIServerACL { + // enabled must be true if the acls should take effect. + // Can be set to false to temporarily disable the acls without loosing the original list of source addresses + bool enabled = 1; + // source_addresses a list of ip addresses which are allowed. + repeated string source_addresses = 2 [(validate.rules).repeated.items.string.ip = true]; +} + // Requests message ClusterServiceGetRequest { string uuid = 1 [(validate.rules).string.uuid = true]; @@ -169,6 +179,7 @@ message ClusterServiceUpdateRequest { optional KubernetesSpec kubernetes = 3; repeated WorkerUpdate workers = 4; optional Maintenance maintenance = 5; + optional APIServerACL api_server_acl = 23; } message ClusterServiceDeleteRequest { string uuid = 1 [(validate.rules).string.uuid = true]; diff --git a/proto/buf.gen.yaml b/proto/buf.gen.yaml index b7e72427..7bf872b3 100644 --- a/proto/buf.gen.yaml +++ b/proto/buf.gen.yaml @@ -16,7 +16,7 @@ plugins: out: ../go opt: paths=source_relative # generate ts structs for protocol buffer definition - - plugin: buf.build/bufbuild/es:v1.4.1 + - plugin: buf.build/bufbuild/es:v1.4.2 out: ../js opt: target=ts - plugin: buf.build/connectrpc/es:v1.1.3 @@ -31,7 +31,7 @@ plugins: out: ../docs opt: json,docs.json # Create python client - # - plugin: buf.build/protocolbuffers/python:v23.4 + # - plugin: buf.build/protocolbuffers/python:v25.0 # out: ../python - # - plugin: buf.build/grpc/python:v1.56.0 + # - plugin: buf.build/grpc/python:v1.59.2 # out: ../python