expose cluster status update rpc (#296)

* expose cluster status update rpc

Signed-off-by: Nirav Parikh <nir.parikh05@gmail.com>

* added cluster rpc to relay peering rpc server listener

Signed-off-by: Nirav Parikh <nir.parikh05@gmail.com>

---------

Signed-off-by: Nirav Parikh <nir.parikh05@gmail.com>
This commit is contained in:
Nirav Parikh
2024-02-28 10:41:10 +05:30
committed by GitHub
parent 8b54b40673
commit 0cd2a35ab5
15 changed files with 1271 additions and 259 deletions
@@ -1718,6 +1718,248 @@
]
}
},
"/infra/v3/project/{metadata.project}/cluster/{metadata.name}/status": {
"get": {
"operationId": "ClusterService_GetClusterStatus",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/v3GetClusterStatusResponse"
}
},
"403": {
"description": "Returned when the user does not have permission to access the resource.",
"schema": {}
},
"404": {
"description": "Returned when the resource does not exist.",
"schema": {
"type": "string",
"format": "string"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/googlerpcStatus"
}
}
},
"parameters": [
{
"name": "metadata.project",
"description": "Project of the resource",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "metadata.name",
"description": "name of the resource",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "metadata.displayName",
"description": "Display Name\n\ndisplay name of the resource",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "metadata.description",
"description": "Description\n\ndescription of the resource",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "metadata.labels",
"description": "Labels\n\nThis is a request variable of the map type. The query format is \"map_name[key]=value\", e.g. If the map name is Age, the key type is string, and the value type is integer, the query parameter is expressed as Age[\"bob\"]=18",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "metadata.annotations",
"description": "Annotations\n\nThis is a request variable of the map type. The query format is \"map_name[key]=value\", e.g. If the map name is Age, the key type is string, and the value type is integer, the query parameter is expressed as Age[\"bob\"]=18",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "metadata.organization",
"description": "Organization\n\nOrganization to which the resource belongs",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "metadata.partner",
"description": "Partner\n\nPartner to which the resource belongs",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "metadata.id",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "metadata.urlScope",
"in": "query",
"required": false,
"type": "string"
},
{
"name": "metadata.createdAt",
"in": "query",
"required": false,
"type": "string",
"format": "date-time"
},
{
"name": "metadata.modifiedAt",
"in": "query",
"required": false,
"type": "string",
"format": "date-time"
}
],
"tags": [
"ClusterService"
]
},
"put": {
"operationId": "ClusterService_UpdateClusterStatus",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/v3UpdateClusterStatusResponse"
}
},
"403": {
"description": "Returned when the user does not have permission to access the resource.",
"schema": {}
},
"404": {
"description": "Returned when the resource does not exist.",
"schema": {
"type": "string",
"format": "string"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/googlerpcStatus"
}
}
},
"parameters": [
{
"name": "metadata.project",
"description": "Project of the resource",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "metadata.name",
"description": "name of the resource",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"type": "object",
"properties": {
"metadata": {
"type": "object",
"example": {
"name": "some-name",
"project": "defaultproject"
},
"properties": {
"displayName": {
"type": "string",
"description": "display name of the resource",
"title": "Display Name"
},
"description": {
"type": "string",
"description": "description of the resource",
"title": "Description"
},
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "labels of the resource",
"title": "Labels"
},
"annotations": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "annotations of the resource",
"title": "Annotations"
},
"organization": {
"type": "string",
"description": "Organization to which the resource belongs",
"title": "Organization"
},
"partner": {
"type": "string",
"description": "Partner to which the resource belongs",
"title": "Partner"
},
"id": {
"type": "string",
"readOnly": true
},
"urlScope": {
"type": "string",
"readOnly": true
},
"createdAt": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"modifiedAt": {
"type": "string",
"format": "date-time",
"readOnly": true
}
},
"description": "metadata of the resource",
"title": "Metadata"
},
"clusterStatus": {
"$ref": "#/definitions/v3ClusterStatus"
}
}
}
}
],
"tags": [
"ClusterService"
]
}
},
"/infra/v3/project/{project}/cluster": {
"get": {
"operationId": "ClusterService_GetClusters",
@@ -2214,7 +2456,8 @@
"ClusterReady",
"ClusterAuxiliaryTaskSync",
"ClusterBootstrapAgent",
"ClusterDelete"
"ClusterDelete",
"ClusterHealth"
],
"default": "ClusterBlueprintSync"
},
@@ -2520,6 +2763,17 @@
"v3DeleteClusterResponse": {
"type": "object"
},
"v3GetClusterStatusResponse": {
"type": "object",
"properties": {
"metadata": {
"$ref": "#/definitions/v3Metadata"
},
"clusterStatus": {
"$ref": "#/definitions/v3ClusterStatus"
}
}
},
"v3Health": {
"type": "string",
"enum": [
@@ -2718,7 +2972,10 @@
"Stopped",
"Expired",
"Stopping",
"Submitted"
"Submitted",
"Healthy",
"Unhealthy",
"Disconnected"
],
"default": "NotSet",
"title": "ParalusConditionStatus is the status of the status condition"
@@ -2837,6 +3094,9 @@
"format": "int64"
}
}
},
"v3UpdateClusterStatusResponse": {
"type": "object"
}
},
"securityDefinitions": {
+4
View File
@@ -38,6 +38,7 @@ var (
NewClusterAuxiliaryTaskSync ClusterConditionFunc = newClusterCondition(infrav3.ClusterConditionType_ClusterAuxiliaryTaskSync)
NewClusterBootstrapAgent ClusterConditionFunc = newClusterCondition(infrav3.ClusterConditionType_ClusterBootstrapAgent)
NewClusterDelete ClusterConditionFunc = newClusterCondition(infrav3.ClusterConditionType_ClusterDelete)
NewClusterHealth ClusterConditionFunc = newClusterCondition(infrav3.ClusterConditionType_ClusterHealth)
IsClusterBootstrapAgentPending ClusterConditionReadyFunc = isClusterCondition(constants.Pending, infrav3.ClusterConditionType_ClusterBootstrapAgent)
IsClusterBootstrapAgentRetry ClusterConditionReadyFunc = isClusterCondition(constants.Retry, infrav3.ClusterConditionType_ClusterBootstrapAgent)
@@ -53,6 +54,9 @@ var (
IsClusterDeleteRetry ClusterConditionReadyFunc = isClusterCondition(constants.Retry, infrav3.ClusterConditionType_ClusterDelete)
IsClusterDeleted ClusterConditionReadyFunc = isClusterCondition(constants.Success, infrav3.ClusterConditionType_ClusterDelete)
IsClusterDeleteNotSet ClusterConditionReadyFunc = isClusterCondition(constants.NotSet, infrav3.ClusterConditionType_ClusterDelete)
IsClusterHealthy ClusterConditionReadyFunc = isClusterCondition(constants.Healthy, infrav3.ClusterConditionType_ClusterHealth)
IsClusterUnhealthy ClusterConditionReadyFunc = isClusterCondition(constants.Unhealthy, infrav3.ClusterConditionType_ClusterHealth)
IsClusterDisconnected ClusterConditionReadyFunc = isClusterCondition(constants.Disconnected, infrav3.ClusterConditionType_ClusterHealth)
NewNamespaceAssigned NamespaceConditionFunc = newNamespaceCondition(scheduler.ClusterNamespaceConditionType_ClusterNamespaceAssigned)
NewNamespaceConverged NamespaceConditionFunc = newNamespaceCondition(scheduler.ClusterNamespaceConditionType_ClusterNamespaceConverged)
+14 -11
View File
@@ -41,15 +41,18 @@ const (
)
const (
NotSet = commonv3.ParalusConditionStatus_NotSet
Pending = commonv3.ParalusConditionStatus_Pending
InProgress = commonv3.ParalusConditionStatus_InProgress
Success = commonv3.ParalusConditionStatus_Success
Failed = commonv3.ParalusConditionStatus_Failed
Retry = commonv3.ParalusConditionStatus_Retry
Skipped = commonv3.ParalusConditionStatus_Skipped
Stopped = commonv3.ParalusConditionStatus_Stopped
Expired = commonv3.ParalusConditionStatus_Expired
Stopping = commonv3.ParalusConditionStatus_Stopping
Submitted = commonv3.ParalusConditionStatus_Submitted
NotSet = commonv3.ParalusConditionStatus_NotSet
Pending = commonv3.ParalusConditionStatus_Pending
InProgress = commonv3.ParalusConditionStatus_InProgress
Success = commonv3.ParalusConditionStatus_Success
Failed = commonv3.ParalusConditionStatus_Failed
Retry = commonv3.ParalusConditionStatus_Retry
Skipped = commonv3.ParalusConditionStatus_Skipped
Stopped = commonv3.ParalusConditionStatus_Stopped
Expired = commonv3.ParalusConditionStatus_Expired
Stopping = commonv3.ParalusConditionStatus_Stopping
Submitted = commonv3.ParalusConditionStatus_Submitted
Healthy = commonv3.ParalusConditionStatus_Healthy
Unhealthy = commonv3.ParalusConditionStatus_Unhealthy
Disconnected = commonv3.ParalusConditionStatus_Disconnected
)
+7 -5
View File
@@ -163,9 +163,9 @@ var (
ras service.RelayAuditService
rcs service.AuditLogService
schedulerPool schedulerrpc.SchedulerPool
schedulerAddr string
downloadData *common.DownloadData
clusterPool schedulerrpc.ClusterPool
infraAddr string
downloadData *common.DownloadData
kekFunc = func() ([]byte, error) {
if len(bootstrapKEK) == 0 {
@@ -331,7 +331,7 @@ func setup() {
}
as = service.NewAuthzService(db, enforcer)
schedulerPool = schedulerrpc.NewSchedulerPool(schedulerAddr, 5*goruntime.NumCPU())
clusterPool = schedulerrpc.NewClusterPool(infraAddr, 5*goruntime.NumCPU())
ps = service.NewPartnerService(db, auditLogger)
os = service.NewOrganizationService(db, auditLogger)
@@ -556,6 +556,7 @@ func runRelayPeerRPC(wg *sync.WaitGroup, ctx context.Context) {
}
clusterAuthzServer := server.NewClusterAuthzServer(bs, aps, gps, krs, kcs, kss, ns)
auditInfoServer := server.NewAuditInfoServer(bs, aps, pps)
crpc := server.NewClusterServer(cs, downloadData)
s, err := grpc.NewSecureServerWithPEM(cert, key, ca)
if err != nil {
@@ -573,6 +574,7 @@ func runRelayPeerRPC(wg *sync.WaitGroup, ctx context.Context) {
sentryrpc.RegisterRelayPeerServiceServer(s, relayPeerService)
sentryrpc.RegisterClusterAuthorizationServiceServer(s, clusterAuthzServer)
sentryrpc.RegisterAuditInformationServiceServer(s, auditInfoServer)
schedulerrpc.RegisterClusterServiceServer(s, crpc)
l, err := net.Listen("tcp", fmt.Sprintf(":%d", rpcRelayPeeringPort))
if err != nil {
@@ -591,7 +593,7 @@ func runRelayPeerRPC(wg *sync.WaitGroup, ctx context.Context) {
func runRPC(wg *sync.WaitGroup, ctx context.Context) {
defer wg.Done()
defer schedulerPool.Close()
defer clusterPool.Close()
defer db.Close()
partnerServer := server.NewPartnerServer(ps)
+445 -132
View File
@@ -8,8 +8,8 @@ package rpcv3
import (
_ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
v31 "github.com/paralus/paralus/proto/types/commonpb/v3"
v3 "github.com/paralus/paralus/proto/types/infrapb/v3"
v3 "github.com/paralus/paralus/proto/types/commonpb/v3"
v31 "github.com/paralus/paralus/proto/types/infrapb/v3"
_ "google.golang.org/genproto/googleapis/api/annotations"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
@@ -172,6 +172,201 @@ func (*DeleteClusterResponse) Descriptor() ([]byte, []int) {
return file_proto_rpc_scheduler_cluster_proto_rawDescGZIP(), []int{2}
}
type UpdateClusterStatusRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Metadata *v3.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
ClusterStatus *v31.ClusterStatus `protobuf:"bytes,2,opt,name=clusterStatus,proto3" json:"clusterStatus,omitempty"`
}
func (x *UpdateClusterStatusRequest) Reset() {
*x = UpdateClusterStatusRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_proto_rpc_scheduler_cluster_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UpdateClusterStatusRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UpdateClusterStatusRequest) ProtoMessage() {}
func (x *UpdateClusterStatusRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_rpc_scheduler_cluster_proto_msgTypes[3]
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 UpdateClusterStatusRequest.ProtoReflect.Descriptor instead.
func (*UpdateClusterStatusRequest) Descriptor() ([]byte, []int) {
return file_proto_rpc_scheduler_cluster_proto_rawDescGZIP(), []int{3}
}
func (x *UpdateClusterStatusRequest) GetMetadata() *v3.Metadata {
if x != nil {
return x.Metadata
}
return nil
}
func (x *UpdateClusterStatusRequest) GetClusterStatus() *v31.ClusterStatus {
if x != nil {
return x.ClusterStatus
}
return nil
}
type UpdateClusterStatusResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *UpdateClusterStatusResponse) Reset() {
*x = UpdateClusterStatusResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_proto_rpc_scheduler_cluster_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UpdateClusterStatusResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UpdateClusterStatusResponse) ProtoMessage() {}
func (x *UpdateClusterStatusResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_rpc_scheduler_cluster_proto_msgTypes[4]
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 UpdateClusterStatusResponse.ProtoReflect.Descriptor instead.
func (*UpdateClusterStatusResponse) Descriptor() ([]byte, []int) {
return file_proto_rpc_scheduler_cluster_proto_rawDescGZIP(), []int{4}
}
type GetClusterStatusRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Metadata *v3.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
}
func (x *GetClusterStatusRequest) Reset() {
*x = GetClusterStatusRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_proto_rpc_scheduler_cluster_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetClusterStatusRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetClusterStatusRequest) ProtoMessage() {}
func (x *GetClusterStatusRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_rpc_scheduler_cluster_proto_msgTypes[5]
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 GetClusterStatusRequest.ProtoReflect.Descriptor instead.
func (*GetClusterStatusRequest) Descriptor() ([]byte, []int) {
return file_proto_rpc_scheduler_cluster_proto_rawDescGZIP(), []int{5}
}
func (x *GetClusterStatusRequest) GetMetadata() *v3.Metadata {
if x != nil {
return x.Metadata
}
return nil
}
type GetClusterStatusResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Metadata *v3.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
ClusterStatus *v31.ClusterStatus `protobuf:"bytes,2,opt,name=clusterStatus,proto3" json:"clusterStatus,omitempty"`
}
func (x *GetClusterStatusResponse) Reset() {
*x = GetClusterStatusResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_proto_rpc_scheduler_cluster_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetClusterStatusResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetClusterStatusResponse) ProtoMessage() {}
func (x *GetClusterStatusResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_rpc_scheduler_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 GetClusterStatusResponse.ProtoReflect.Descriptor instead.
func (*GetClusterStatusResponse) Descriptor() ([]byte, []int) {
return file_proto_rpc_scheduler_cluster_proto_rawDescGZIP(), []int{6}
}
func (x *GetClusterStatusResponse) GetMetadata() *v3.Metadata {
if x != nil {
return x.Metadata
}
return nil
}
func (x *GetClusterStatusResponse) GetClusterStatus() *v31.ClusterStatus {
if x != nil {
return x.ClusterStatus
}
return nil
}
var File_proto_rpc_scheduler_cluster_proto protoreflect.FileDescriptor
var file_proto_rpc_scheduler_cluster_proto_rawDesc = []byte{
@@ -201,113 +396,168 @@ var file_proto_rpc_scheduler_cluster_proto_rawDesc = []byte{
0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x63,
0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x17, 0x0a, 0x15,
0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc7, 0x08, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xcb, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65,
0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61, 0x72,
0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69,
0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a,
0x23, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79,
0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75,
0x73, 0x74, 0x65, 0x72, 0x22, 0x70, 0x92, 0x41, 0x36, 0x4a, 0x34, 0x0a, 0x03, 0x32, 0x30, 0x31,
0x12, 0x2d, 0x0a, 0x2b, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65,
0x6e, 0x20, 0x65, 0x64, 0x67, 0x65, 0x20, 0x69, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
0x64, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x2e, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x31, 0x3a, 0x01, 0x2a, 0x22, 0x2c, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61,
0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x63,
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x8e, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x6c,
0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb0, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73,
0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x1a, 0x27, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e,
0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43,
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x25, 0x12, 0x23, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72,
0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f,
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x9c, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43,
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73,
0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61,
0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a, 0x23, 0x2e, 0x70, 0x61,
0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d,
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29,
0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70,
0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73,
0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x1d, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6c,
0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64,
0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
0x76, 0x33, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xae, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75,
0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64,
0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
0x76, 0x33, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4f, 0x0a, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70,
0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x32, 0xcd, 0x0b, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xcb, 0x01, 0x0a, 0x0d, 0x43, 0x72,
0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61,
0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e,
0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61,
0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x63,
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa2, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c,
0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66,
0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a, 0x23, 0x2e,
0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65,
0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x1a, 0x3c, 0x2f,
0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65,
0x63, 0x74, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x6d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a, 0x0d,
0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e,
0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65,
0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x1a, 0x29, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76,
0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c,
0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x01,
0x92, 0x41, 0x39, 0x4a, 0x37, 0x0a, 0x03, 0x32, 0x30, 0x34, 0x12, 0x30, 0x0a, 0x2e, 0x52, 0x65,
0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x6a,
0x65, 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x73,
0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x2e, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72,
0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e,
0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d,
0x12, 0xac, 0x01, 0x0a, 0x0f, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6c, 0x75,
0x73, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64,
0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76,
0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x70, 0x61, 0x72, 0x61,
0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x63, 0x6f,
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79,
0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x12, 0x45, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61,
0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x63,
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x42,
0xd6, 0x04, 0x92, 0x41, 0x8b, 0x03, 0x12, 0x25, 0x0a, 0x0f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x61, 0x72,
0x61, 0x6c, 0x75, 0x73, 0x20, 0x44, 0x65, 0x76, 0x32, 0x03, 0x33, 0x2e, 0x30, 0x2a, 0x01, 0x02,
0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73,
0x6f, 0x6e, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f,
0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x2f, 0x79, 0x61, 0x6d, 0x6c, 0x52, 0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12,
0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e,
0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e,
0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69,
0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65,
0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30,
0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68,
0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20,
0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12,
0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x5a, 0x55, 0x0a, 0x1f, 0x0a, 0x0a, 0x41, 0x70, 0x69,
0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x11, 0x08, 0x02, 0x1a, 0x0b, 0x58, 0x2d, 0x41,
0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x49, 0x44, 0x20, 0x02, 0x0a, 0x21, 0x0a, 0x0c, 0x41, 0x70,
0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x12, 0x11, 0x08, 0x02, 0x1a, 0x0b,
0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x20, 0x02, 0x0a, 0x0f, 0x0a,
0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x02, 0x08, 0x01, 0x62, 0x31,
0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00,
0x0a, 0x10, 0x0a, 0x0c, 0x41, 0x70, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x75, 0x74, 0x68,
0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12,
0x00, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64,
0x65, 0x76, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x33, 0x42, 0x0c, 0x43, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75,
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2f, 0x70, 0x61,
0x72, 0x61, 0x6c, 0x75, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x70, 0x63, 0x2f,
0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x3b, 0x72, 0x70, 0x63, 0x76, 0x33, 0xa2,
0x02, 0x03, 0x50, 0x44, 0x52, 0xaa, 0x02, 0x12, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e,
0x44, 0x65, 0x76, 0x2e, 0x52, 0x70, 0x63, 0x2e, 0x56, 0x33, 0xca, 0x02, 0x12, 0x50, 0x61, 0x72,
0x61, 0x6c, 0x75, 0x73, 0x5c, 0x44, 0x65, 0x76, 0x5c, 0x52, 0x70, 0x63, 0x5c, 0x56, 0x33, 0xe2,
0x02, 0x1e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x5c, 0x44, 0x65, 0x76, 0x5c, 0x52, 0x70,
0x63, 0x5c, 0x56, 0x33, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0xea, 0x02, 0x15, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x3a, 0x3a, 0x44, 0x65, 0x76, 0x3a,
0x3a, 0x52, 0x70, 0x63, 0x3a, 0x3a, 0x56, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x1a, 0x23, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74,
0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c,
0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x70, 0x92, 0x41, 0x36, 0x4a, 0x34, 0x0a, 0x03, 0x32, 0x30,
0x31, 0x12, 0x2d, 0x0a, 0x2b, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68,
0x65, 0x6e, 0x20, 0x65, 0x64, 0x67, 0x65, 0x20, 0x69, 0x73, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74,
0x65, 0x64, 0x20, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x2e,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x3a, 0x01, 0x2a, 0x22, 0x2c, 0x2f, 0x69, 0x6e, 0x66, 0x72,
0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65,
0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f,
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x8e, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x43,
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75,
0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x6f, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x1a, 0x27, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76,
0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e,
0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2b, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70,
0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d,
0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x9c, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74,
0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75,
0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72,
0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a, 0x23, 0x2e, 0x70,
0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x72,
0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65,
0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f,
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xa2, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61, 0x72, 0x61,
0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e,
0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a, 0x23,
0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70,
0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73,
0x74, 0x65, 0x72, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x1a, 0x3c,
0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
0x74, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x6a,
0x65, 0x63, 0x74, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x6d, 0x65,
0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xe2, 0x01, 0x0a,
0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x23,
0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70,
0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73,
0x74, 0x65, 0x72, 0x1a, 0x29, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65,
0x76, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43,
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80,
0x01, 0x92, 0x41, 0x39, 0x4a, 0x37, 0x0a, 0x03, 0x32, 0x30, 0x34, 0x12, 0x30, 0x0a, 0x2e, 0x52,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x70, 0x72, 0x6f,
0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20,
0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x2e, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70,
0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65,
0x7d, 0x12, 0xac, 0x01, 0x0a, 0x0f, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6c,
0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e,
0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e,
0x76, 0x33, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x70, 0x61, 0x72,
0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x63,
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x33, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64,
0x79, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x12, 0x45, 0x2f, 0x69, 0x6e, 0x66, 0x72,
0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65,
0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f,
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64,
0x12, 0xc6, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c,
0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x33, 0x2e, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c,
0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x33, 0x2e, 0x55, 0x70,
0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x48, 0x3a, 0x01, 0x2a, 0x1a, 0x43, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x76, 0x33, 0x2f,
0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
0x61, 0x2e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d,
0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0xba, 0x01, 0x0a, 0x10, 0x47, 0x65,
0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2b,
0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x72, 0x70, 0x63,
0x2e, 0x76, 0x33, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74,
0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x61,
0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x33,
0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x45, 0x12, 0x43, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x76, 0x33, 0x2f, 0x70, 0x72, 0x6f,
0x6a, 0x65, 0x63, 0x74, 0x2f, 0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70,
0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f,
0x7b, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f,
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0xd6, 0x04, 0x92, 0x41, 0x8b, 0x03, 0x12, 0x25, 0x0a,
0x0f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x20, 0x44, 0x65, 0x76, 0x32,
0x03, 0x33, 0x2e, 0x30, 0x2a, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69,
0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x10, 0x61, 0x70, 0x70,
0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61,
0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x79, 0x61, 0x6d, 0x6c, 0x52,
0x50, 0x0a, 0x03, 0x34, 0x30, 0x33, 0x12, 0x49, 0x0a, 0x47, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e,
0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, 0x65, 0x72,
0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x70,
0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x63, 0x63,
0x65, 0x73, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
0x2e, 0x52, 0x3b, 0x0a, 0x03, 0x34, 0x30, 0x34, 0x12, 0x34, 0x0a, 0x2a, 0x52, 0x65, 0x74, 0x75,
0x72, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20,
0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x12, 0x06, 0x0a, 0x04, 0x9a, 0x02, 0x01, 0x07, 0x5a, 0x55,
0x0a, 0x1f, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x11,
0x08, 0x02, 0x1a, 0x0b, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x4b, 0x45, 0x59, 0x49, 0x44, 0x20,
0x02, 0x0a, 0x21, 0x0a, 0x0c, 0x41, 0x70, 0x69, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x75, 0x74,
0x68, 0x12, 0x11, 0x08, 0x02, 0x1a, 0x0b, 0x58, 0x2d, 0x41, 0x50, 0x49, 0x2d, 0x54, 0x4f, 0x4b,
0x45, 0x4e, 0x20, 0x02, 0x0a, 0x0f, 0x0a, 0x09, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74,
0x68, 0x12, 0x02, 0x08, 0x01, 0x62, 0x31, 0x0a, 0x0e, 0x0a, 0x0a, 0x41, 0x70, 0x69, 0x4b, 0x65,
0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x10, 0x0a, 0x0c, 0x41, 0x70, 0x69, 0x54, 0x6f,
0x6b, 0x65, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x0d, 0x0a, 0x09, 0x42, 0x61, 0x73,
0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x00, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x61,
0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x33,
0x42, 0x0c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x61, 0x72,
0x61, 0x6c, 0x75, 0x73, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2f, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72,
0x3b, 0x72, 0x70, 0x63, 0x76, 0x33, 0xa2, 0x02, 0x03, 0x50, 0x44, 0x52, 0xaa, 0x02, 0x12, 0x50,
0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x2e, 0x52, 0x70, 0x63, 0x2e, 0x56,
0x33, 0xca, 0x02, 0x12, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x5c, 0x44, 0x65, 0x76, 0x5c,
0x52, 0x70, 0x63, 0x5c, 0x56, 0x33, 0xe2, 0x02, 0x1e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73,
0x5c, 0x44, 0x65, 0x76, 0x5c, 0x52, 0x70, 0x63, 0x5c, 0x56, 0x33, 0x5c, 0x47, 0x50, 0x42, 0x4d,
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x15, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75,
0x73, 0x3a, 0x3a, 0x44, 0x65, 0x76, 0x3a, 0x3a, 0x52, 0x70, 0x63, 0x3a, 0x3a, 0x56, 0x33, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -322,34 +572,49 @@ func file_proto_rpc_scheduler_cluster_proto_rawDescGZIP() []byte {
return file_proto_rpc_scheduler_cluster_proto_rawDescData
}
var file_proto_rpc_scheduler_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_proto_rpc_scheduler_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_proto_rpc_scheduler_cluster_proto_goTypes = []interface{}{
(*RegisterClusterRequest)(nil), // 0: paralus.dev.rpc.v3.RegisterClusterRequest
(*RegisterClusterResponse)(nil), // 1: paralus.dev.rpc.v3.RegisterClusterResponse
(*DeleteClusterResponse)(nil), // 2: paralus.dev.rpc.v3.DeleteClusterResponse
(*v3.Cluster)(nil), // 3: paralus.dev.types.infra.v3.Cluster
(*v31.QueryOptions)(nil), // 4: paralus.dev.types.common.v3.QueryOptions
(*v3.ClusterList)(nil), // 5: paralus.dev.types.infra.v3.ClusterList
(*v31.HttpBody)(nil), // 6: paralus.dev.types.common.v3.HttpBody
(*RegisterClusterRequest)(nil), // 0: paralus.dev.rpc.v3.RegisterClusterRequest
(*RegisterClusterResponse)(nil), // 1: paralus.dev.rpc.v3.RegisterClusterResponse
(*DeleteClusterResponse)(nil), // 2: paralus.dev.rpc.v3.DeleteClusterResponse
(*UpdateClusterStatusRequest)(nil), // 3: paralus.dev.rpc.v3.UpdateClusterStatusRequest
(*UpdateClusterStatusResponse)(nil), // 4: paralus.dev.rpc.v3.UpdateClusterStatusResponse
(*GetClusterStatusRequest)(nil), // 5: paralus.dev.rpc.v3.GetClusterStatusRequest
(*GetClusterStatusResponse)(nil), // 6: paralus.dev.rpc.v3.GetClusterStatusResponse
(*v3.Metadata)(nil), // 7: paralus.dev.types.common.v3.Metadata
(*v31.ClusterStatus)(nil), // 8: paralus.dev.types.infra.v3.ClusterStatus
(*v31.Cluster)(nil), // 9: paralus.dev.types.infra.v3.Cluster
(*v3.QueryOptions)(nil), // 10: paralus.dev.types.common.v3.QueryOptions
(*v31.ClusterList)(nil), // 11: paralus.dev.types.infra.v3.ClusterList
(*v3.HttpBody)(nil), // 12: paralus.dev.types.common.v3.HttpBody
}
var file_proto_rpc_scheduler_cluster_proto_depIdxs = []int32{
3, // 0: paralus.dev.rpc.v3.ClusterService.CreateCluster:input_type -> paralus.dev.types.infra.v3.Cluster
4, // 1: paralus.dev.rpc.v3.ClusterService.GetClusters:input_type -> paralus.dev.types.common.v3.QueryOptions
3, // 2: paralus.dev.rpc.v3.ClusterService.GetCluster:input_type -> paralus.dev.types.infra.v3.Cluster
3, // 3: paralus.dev.rpc.v3.ClusterService.UpdateCluster:input_type -> paralus.dev.types.infra.v3.Cluster
3, // 4: paralus.dev.rpc.v3.ClusterService.DeleteCluster:input_type -> paralus.dev.types.infra.v3.Cluster
3, // 5: paralus.dev.rpc.v3.ClusterService.DownloadCluster:input_type -> paralus.dev.types.infra.v3.Cluster
3, // 6: paralus.dev.rpc.v3.ClusterService.CreateCluster:output_type -> paralus.dev.types.infra.v3.Cluster
5, // 7: paralus.dev.rpc.v3.ClusterService.GetClusters:output_type -> paralus.dev.types.infra.v3.ClusterList
3, // 8: paralus.dev.rpc.v3.ClusterService.GetCluster:output_type -> paralus.dev.types.infra.v3.Cluster
3, // 9: paralus.dev.rpc.v3.ClusterService.UpdateCluster:output_type -> paralus.dev.types.infra.v3.Cluster
2, // 10: paralus.dev.rpc.v3.ClusterService.DeleteCluster:output_type -> paralus.dev.rpc.v3.DeleteClusterResponse
6, // 11: paralus.dev.rpc.v3.ClusterService.DownloadCluster:output_type -> paralus.dev.types.common.v3.HttpBody
6, // [6:12] is the sub-list for method output_type
0, // [0:6] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
7, // 0: paralus.dev.rpc.v3.UpdateClusterStatusRequest.metadata:type_name -> paralus.dev.types.common.v3.Metadata
8, // 1: paralus.dev.rpc.v3.UpdateClusterStatusRequest.clusterStatus:type_name -> paralus.dev.types.infra.v3.ClusterStatus
7, // 2: paralus.dev.rpc.v3.GetClusterStatusRequest.metadata:type_name -> paralus.dev.types.common.v3.Metadata
7, // 3: paralus.dev.rpc.v3.GetClusterStatusResponse.metadata:type_name -> paralus.dev.types.common.v3.Metadata
8, // 4: paralus.dev.rpc.v3.GetClusterStatusResponse.clusterStatus:type_name -> paralus.dev.types.infra.v3.ClusterStatus
9, // 5: paralus.dev.rpc.v3.ClusterService.CreateCluster:input_type -> paralus.dev.types.infra.v3.Cluster
10, // 6: paralus.dev.rpc.v3.ClusterService.GetClusters:input_type -> paralus.dev.types.common.v3.QueryOptions
9, // 7: paralus.dev.rpc.v3.ClusterService.GetCluster:input_type -> paralus.dev.types.infra.v3.Cluster
9, // 8: paralus.dev.rpc.v3.ClusterService.UpdateCluster:input_type -> paralus.dev.types.infra.v3.Cluster
9, // 9: paralus.dev.rpc.v3.ClusterService.DeleteCluster:input_type -> paralus.dev.types.infra.v3.Cluster
9, // 10: paralus.dev.rpc.v3.ClusterService.DownloadCluster:input_type -> paralus.dev.types.infra.v3.Cluster
3, // 11: paralus.dev.rpc.v3.ClusterService.UpdateClusterStatus:input_type -> paralus.dev.rpc.v3.UpdateClusterStatusRequest
5, // 12: paralus.dev.rpc.v3.ClusterService.GetClusterStatus:input_type -> paralus.dev.rpc.v3.GetClusterStatusRequest
9, // 13: paralus.dev.rpc.v3.ClusterService.CreateCluster:output_type -> paralus.dev.types.infra.v3.Cluster
11, // 14: paralus.dev.rpc.v3.ClusterService.GetClusters:output_type -> paralus.dev.types.infra.v3.ClusterList
9, // 15: paralus.dev.rpc.v3.ClusterService.GetCluster:output_type -> paralus.dev.types.infra.v3.Cluster
9, // 16: paralus.dev.rpc.v3.ClusterService.UpdateCluster:output_type -> paralus.dev.types.infra.v3.Cluster
2, // 17: paralus.dev.rpc.v3.ClusterService.DeleteCluster:output_type -> paralus.dev.rpc.v3.DeleteClusterResponse
12, // 18: paralus.dev.rpc.v3.ClusterService.DownloadCluster:output_type -> paralus.dev.types.common.v3.HttpBody
4, // 19: paralus.dev.rpc.v3.ClusterService.UpdateClusterStatus:output_type -> paralus.dev.rpc.v3.UpdateClusterStatusResponse
6, // 20: paralus.dev.rpc.v3.ClusterService.GetClusterStatus:output_type -> paralus.dev.rpc.v3.GetClusterStatusResponse
13, // [13:21] is the sub-list for method output_type
5, // [5:13] is the sub-list for method input_type
5, // [5:5] is the sub-list for extension type_name
5, // [5:5] is the sub-list for extension extendee
0, // [0:5] is the sub-list for field type_name
}
func init() { file_proto_rpc_scheduler_cluster_proto_init() }
@@ -394,6 +659,54 @@ func file_proto_rpc_scheduler_cluster_proto_init() {
return nil
}
}
file_proto_rpc_scheduler_cluster_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateClusterStatusRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_proto_rpc_scheduler_cluster_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UpdateClusterStatusResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_proto_rpc_scheduler_cluster_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetClusterStatusRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_proto_rpc_scheduler_cluster_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetClusterStatusResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
@@ -401,7 +714,7 @@ func file_proto_rpc_scheduler_cluster_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_proto_rpc_scheduler_cluster_proto_rawDesc,
NumEnums: 0,
NumMessages: 3,
NumMessages: 7,
NumExtensions: 0,
NumServices: 1,
},
+280
View File
@@ -529,6 +529,184 @@ func local_request_ClusterService_DownloadCluster_0(ctx context.Context, marshal
}
func request_ClusterService_UpdateClusterStatus_0(ctx context.Context, marshaler runtime.Marshaler, client ClusterServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateClusterStatusRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["metadata.project"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metadata.project")
}
err = runtime.PopulateFieldFromPath(&protoReq, "metadata.project", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metadata.project", err)
}
val, ok = pathParams["metadata.name"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metadata.name")
}
err = runtime.PopulateFieldFromPath(&protoReq, "metadata.name", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metadata.name", err)
}
msg, err := client.UpdateClusterStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_ClusterService_UpdateClusterStatus_0(ctx context.Context, marshaler runtime.Marshaler, server ClusterServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateClusterStatusRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["metadata.project"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metadata.project")
}
err = runtime.PopulateFieldFromPath(&protoReq, "metadata.project", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metadata.project", err)
}
val, ok = pathParams["metadata.name"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metadata.name")
}
err = runtime.PopulateFieldFromPath(&protoReq, "metadata.name", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metadata.name", err)
}
msg, err := server.UpdateClusterStatus(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_ClusterService_GetClusterStatus_0 = &utilities.DoubleArray{Encoding: map[string]int{"metadata": 0, "project": 1, "name": 2}, Base: []int{1, 4, 5, 6, 2, 0, 4, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 5, 2, 7, 3, 4}}
)
func request_ClusterService_GetClusterStatus_0(ctx context.Context, marshaler runtime.Marshaler, client ClusterServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetClusterStatusRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["metadata.project"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metadata.project")
}
err = runtime.PopulateFieldFromPath(&protoReq, "metadata.project", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metadata.project", err)
}
val, ok = pathParams["metadata.name"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metadata.name")
}
err = runtime.PopulateFieldFromPath(&protoReq, "metadata.name", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metadata.name", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ClusterService_GetClusterStatus_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.GetClusterStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_ClusterService_GetClusterStatus_0(ctx context.Context, marshaler runtime.Marshaler, server ClusterServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetClusterStatusRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["metadata.project"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metadata.project")
}
err = runtime.PopulateFieldFromPath(&protoReq, "metadata.project", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metadata.project", err)
}
val, ok = pathParams["metadata.name"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "metadata.name")
}
err = runtime.PopulateFieldFromPath(&protoReq, "metadata.name", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "metadata.name", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ClusterService_GetClusterStatus_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetClusterStatus(ctx, &protoReq)
return msg, metadata, err
}
// RegisterClusterServiceHandlerServer registers the http handlers for service ClusterService to "mux".
// UnaryRPC :call ClusterServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@@ -685,6 +863,56 @@ func RegisterClusterServiceHandlerServer(ctx context.Context, mux *runtime.Serve
})
mux.Handle("PUT", pattern_ClusterService_UpdateClusterStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/paralus.dev.rpc.v3.ClusterService/UpdateClusterStatus", runtime.WithHTTPPathPattern("/infra/v3/project/{metadata.project}/cluster/{metadata.name}/status"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_ClusterService_UpdateClusterStatus_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_ClusterService_UpdateClusterStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_ClusterService_GetClusterStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
var stream runtime.ServerTransportStream
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/paralus.dev.rpc.v3.ClusterService/GetClusterStatus", runtime.WithHTTPPathPattern("/infra/v3/project/{metadata.project}/cluster/{metadata.name}/status"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_ClusterService_GetClusterStatus_0(annotatedContext, inboundMarshaler, server, req, pathParams)
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_ClusterService_GetClusterStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@@ -858,6 +1086,50 @@ func RegisterClusterServiceHandlerClient(ctx context.Context, mux *runtime.Serve
})
mux.Handle("PUT", pattern_ClusterService_UpdateClusterStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/paralus.dev.rpc.v3.ClusterService/UpdateClusterStatus", runtime.WithHTTPPathPattern("/infra/v3/project/{metadata.project}/cluster/{metadata.name}/status"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_ClusterService_UpdateClusterStatus_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_ClusterService_UpdateClusterStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_ClusterService_GetClusterStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
var err error
var annotatedContext context.Context
annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/paralus.dev.rpc.v3.ClusterService/GetClusterStatus", runtime.WithHTTPPathPattern("/infra/v3/project/{metadata.project}/cluster/{metadata.name}/status"))
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_ClusterService_GetClusterStatus_0(annotatedContext, inboundMarshaler, client, req, pathParams)
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
if err != nil {
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
return
}
forward_ClusterService_GetClusterStatus_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@@ -873,6 +1145,10 @@ var (
pattern_ClusterService_DeleteCluster_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"infra", "v3", "project", "metadata.project", "cluster", "metadata.name"}, ""))
pattern_ClusterService_DownloadCluster_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"infra", "v3", "project", "metadata.project", "cluster", "metadata.name", "download"}, ""))
pattern_ClusterService_UpdateClusterStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"infra", "v3", "project", "metadata.project", "cluster", "metadata.name", "status"}, ""))
pattern_ClusterService_GetClusterStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"infra", "v3", "project", "metadata.project", "cluster", "metadata.name", "status"}, ""))
)
var (
@@ -887,4 +1163,8 @@ var (
forward_ClusterService_DeleteCluster_0 = runtime.ForwardResponseMessage
forward_ClusterService_DownloadCluster_0 = runtime.ForwardResponseMessage
forward_ClusterService_UpdateClusterStatus_0 = runtime.ForwardResponseMessage
forward_ClusterService_GetClusterStatus_0 = runtime.ForwardResponseMessage
)
+31
View File
@@ -18,6 +18,22 @@ message RegisterClusterResponse {
message DeleteClusterResponse {}
message UpdateClusterStatusRequest {
paralus.dev.types.common.v3.Metadata metadata = 1;
paralus.dev.types.infra.v3.ClusterStatus clusterStatus = 2;
}
message UpdateClusterStatusResponse {}
message GetClusterStatusRequest {
paralus.dev.types.common.v3.Metadata metadata = 1;
}
message GetClusterStatusResponse {
paralus.dev.types.common.v3.Metadata metadata = 1;
paralus.dev.types.infra.v3.ClusterStatus clusterStatus = 2;
}
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
info : {
title : "Cluster Service"
@@ -137,5 +153,20 @@ service ClusterService {
get : "/infra/v3/project/{metadata.project}/cluster/{metadata.name}/download"
};
};
rpc UpdateClusterStatus(UpdateClusterStatusRequest)
returns (UpdateClusterStatusResponse) {
option (google.api.http) = {
put : "/infra/v3/project/{metadata.project}/cluster/{metadata.name}/status"
body : "*"
};
};
rpc GetClusterStatus(GetClusterStatusRequest)
returns (GetClusterStatusResponse) {
option (google.api.http) = {
get : "/infra/v3/project/{metadata.project}/cluster/{metadata.name}/status"
};
};
}
+80 -6
View File
@@ -21,12 +21,14 @@ import (
const _ = grpc.SupportPackageIsVersion7
const (
ClusterService_CreateCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/CreateCluster"
ClusterService_GetClusters_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/GetClusters"
ClusterService_GetCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/GetCluster"
ClusterService_UpdateCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/UpdateCluster"
ClusterService_DeleteCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/DeleteCluster"
ClusterService_DownloadCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/DownloadCluster"
ClusterService_CreateCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/CreateCluster"
ClusterService_GetClusters_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/GetClusters"
ClusterService_GetCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/GetCluster"
ClusterService_UpdateCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/UpdateCluster"
ClusterService_DeleteCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/DeleteCluster"
ClusterService_DownloadCluster_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/DownloadCluster"
ClusterService_UpdateClusterStatus_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/UpdateClusterStatus"
ClusterService_GetClusterStatus_FullMethodName = "/paralus.dev.rpc.v3.ClusterService/GetClusterStatus"
)
// ClusterServiceClient is the client API for ClusterService service.
@@ -39,6 +41,8 @@ type ClusterServiceClient interface {
UpdateCluster(ctx context.Context, in *v3.Cluster, opts ...grpc.CallOption) (*v3.Cluster, error)
DeleteCluster(ctx context.Context, in *v3.Cluster, opts ...grpc.CallOption) (*DeleteClusterResponse, error)
DownloadCluster(ctx context.Context, in *v3.Cluster, opts ...grpc.CallOption) (*v31.HttpBody, error)
UpdateClusterStatus(ctx context.Context, in *UpdateClusterStatusRequest, opts ...grpc.CallOption) (*UpdateClusterStatusResponse, error)
GetClusterStatus(ctx context.Context, in *GetClusterStatusRequest, opts ...grpc.CallOption) (*GetClusterStatusResponse, error)
}
type clusterServiceClient struct {
@@ -103,6 +107,24 @@ func (c *clusterServiceClient) DownloadCluster(ctx context.Context, in *v3.Clust
return out, nil
}
func (c *clusterServiceClient) UpdateClusterStatus(ctx context.Context, in *UpdateClusterStatusRequest, opts ...grpc.CallOption) (*UpdateClusterStatusResponse, error) {
out := new(UpdateClusterStatusResponse)
err := c.cc.Invoke(ctx, ClusterService_UpdateClusterStatus_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *clusterServiceClient) GetClusterStatus(ctx context.Context, in *GetClusterStatusRequest, opts ...grpc.CallOption) (*GetClusterStatusResponse, error) {
out := new(GetClusterStatusResponse)
err := c.cc.Invoke(ctx, ClusterService_GetClusterStatus_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// ClusterServiceServer is the server API for ClusterService service.
// All implementations should embed UnimplementedClusterServiceServer
// for forward compatibility
@@ -113,6 +135,8 @@ type ClusterServiceServer interface {
UpdateCluster(context.Context, *v3.Cluster) (*v3.Cluster, error)
DeleteCluster(context.Context, *v3.Cluster) (*DeleteClusterResponse, error)
DownloadCluster(context.Context, *v3.Cluster) (*v31.HttpBody, error)
UpdateClusterStatus(context.Context, *UpdateClusterStatusRequest) (*UpdateClusterStatusResponse, error)
GetClusterStatus(context.Context, *GetClusterStatusRequest) (*GetClusterStatusResponse, error)
}
// UnimplementedClusterServiceServer should be embedded to have forward compatible implementations.
@@ -137,6 +161,12 @@ func (UnimplementedClusterServiceServer) DeleteCluster(context.Context, *v3.Clus
func (UnimplementedClusterServiceServer) DownloadCluster(context.Context, *v3.Cluster) (*v31.HttpBody, error) {
return nil, status.Errorf(codes.Unimplemented, "method DownloadCluster not implemented")
}
func (UnimplementedClusterServiceServer) UpdateClusterStatus(context.Context, *UpdateClusterStatusRequest) (*UpdateClusterStatusResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateClusterStatus not implemented")
}
func (UnimplementedClusterServiceServer) GetClusterStatus(context.Context, *GetClusterStatusRequest) (*GetClusterStatusResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetClusterStatus not implemented")
}
// UnsafeClusterServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to ClusterServiceServer will
@@ -257,6 +287,42 @@ func _ClusterService_DownloadCluster_Handler(srv interface{}, ctx context.Contex
return interceptor(ctx, in, info, handler)
}
func _ClusterService_UpdateClusterStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(UpdateClusterStatusRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ClusterServiceServer).UpdateClusterStatus(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: ClusterService_UpdateClusterStatus_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ClusterServiceServer).UpdateClusterStatus(ctx, req.(*UpdateClusterStatusRequest))
}
return interceptor(ctx, in, info, handler)
}
func _ClusterService_GetClusterStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetClusterStatusRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ClusterServiceServer).GetClusterStatus(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: ClusterService_GetClusterStatus_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ClusterServiceServer).GetClusterStatus(ctx, req.(*GetClusterStatusRequest))
}
return interceptor(ctx, in, info, handler)
}
// ClusterService_ServiceDesc is the grpc.ServiceDesc for ClusterService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@@ -288,6 +354,14 @@ var ClusterService_ServiceDesc = grpc.ServiceDesc{
MethodName: "DownloadCluster",
Handler: _ClusterService_DownloadCluster_Handler,
},
{
MethodName: "UpdateClusterStatus",
Handler: _ClusterService_UpdateClusterStatus_Handler,
},
{
MethodName: "GetClusterStatus",
Handler: _ClusterService_GetClusterStatus_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "proto/rpc/scheduler/cluster.proto",
+15 -15
View File
@@ -7,50 +7,50 @@ import (
grpcpool "github.com/processout/grpc-go-pool"
)
// SchedulerClient is the interface for accessing all the RPCs
// exposed by Cluster Scheduler
type SchedulerClient interface {
// ClusterClient is the interface for accessing all the RPCs
// exposed by Cluster service
type ClusterClient interface {
Unhealthy()
Close() error
ClusterServiceClient
}
type schedulerClient struct {
type clusterClient struct {
*grpcpool.ClientConn
*clusterServiceClient
}
var _ SchedulerClient = (*schedulerClient)(nil)
var _ ClusterClient = (*clusterClient)(nil)
// SchedulerPool maintains pool of grpc connections to scheduler service
type SchedulerPool interface {
// ClusterPool maintains pool of grpc connections to cluster service
type ClusterPool interface {
Close()
NewClient(ctx context.Context) (SchedulerClient, error)
NewClient(ctx context.Context) (ClusterClient, error)
}
// NewSchedulerPool new scheduler pool
func NewSchedulerPool(addr string, maxConn int) SchedulerPool {
return &schedulerPool{
// NewClusterPool new cluster pool
func NewClusterPool(addr string, maxConn int) ClusterPool {
return &clusterPool{
GRPCPool: pool.NewGRPCPool(addr, maxConn, nil),
}
}
type schedulerPool struct {
type clusterPool struct {
*pool.GRPCPool
}
func (p *schedulerPool) Close() {
func (p *clusterPool) Close() {
if p.GRPCPool != nil {
p.GRPCPool.Close()
}
}
func (p *schedulerPool) NewClient(ctx context.Context) (SchedulerClient, error) {
func (p *clusterPool) NewClient(ctx context.Context) (ClusterClient, error) {
cc, err := p.GetConnection(ctx)
if err != nil {
return nil, err
}
return &schedulerClient{
return &clusterClient{
cc,
&clusterServiceClient{cc.ClientConn},
}, nil
+53 -41
View File
@@ -81,17 +81,20 @@ func (ConditionStatus) EnumDescriptor() ([]byte, []int) {
type ParalusConditionStatus int32
const (
ParalusConditionStatus_NotSet ParalusConditionStatus = 0
ParalusConditionStatus_Pending ParalusConditionStatus = 1
ParalusConditionStatus_InProgress ParalusConditionStatus = 2
ParalusConditionStatus_Success ParalusConditionStatus = 3
ParalusConditionStatus_Failed ParalusConditionStatus = 4
ParalusConditionStatus_Retry ParalusConditionStatus = 5
ParalusConditionStatus_Skipped ParalusConditionStatus = 6
ParalusConditionStatus_Stopped ParalusConditionStatus = 7
ParalusConditionStatus_Expired ParalusConditionStatus = 8
ParalusConditionStatus_Stopping ParalusConditionStatus = 9
ParalusConditionStatus_Submitted ParalusConditionStatus = 10
ParalusConditionStatus_NotSet ParalusConditionStatus = 0
ParalusConditionStatus_Pending ParalusConditionStatus = 1
ParalusConditionStatus_InProgress ParalusConditionStatus = 2
ParalusConditionStatus_Success ParalusConditionStatus = 3
ParalusConditionStatus_Failed ParalusConditionStatus = 4
ParalusConditionStatus_Retry ParalusConditionStatus = 5
ParalusConditionStatus_Skipped ParalusConditionStatus = 6
ParalusConditionStatus_Stopped ParalusConditionStatus = 7
ParalusConditionStatus_Expired ParalusConditionStatus = 8
ParalusConditionStatus_Stopping ParalusConditionStatus = 9
ParalusConditionStatus_Submitted ParalusConditionStatus = 10
ParalusConditionStatus_Healthy ParalusConditionStatus = 11
ParalusConditionStatus_Unhealthy ParalusConditionStatus = 12
ParalusConditionStatus_Disconnected ParalusConditionStatus = 13
)
// Enum value maps for ParalusConditionStatus.
@@ -108,19 +111,25 @@ var (
8: "Expired",
9: "Stopping",
10: "Submitted",
11: "Healthy",
12: "Unhealthy",
13: "Disconnected",
}
ParalusConditionStatus_value = map[string]int32{
"NotSet": 0,
"Pending": 1,
"InProgress": 2,
"Success": 3,
"Failed": 4,
"Retry": 5,
"Skipped": 6,
"Stopped": 7,
"Expired": 8,
"Stopping": 9,
"Submitted": 10,
"NotSet": 0,
"Pending": 1,
"InProgress": 2,
"Success": 3,
"Failed": 4,
"Retry": 5,
"Skipped": 6,
"Stopped": 7,
"Expired": 8,
"Stopping": 9,
"Submitted": 10,
"Healthy": 11,
"Unhealthy": 12,
"Disconnected": 13,
}
)
@@ -1441,7 +1450,7 @@ var file_proto_types_commonpb_v3_common_proto_rawDesc = []byte{
0x74, 0x61, 0x74, 0x75, 0x73, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x10, 0x01,
0x12, 0x0c, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x4b, 0x10, 0x02, 0x12, 0x10,
0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x03,
0x2a, 0xa9, 0x01, 0x0a, 0x16, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x43, 0x6f, 0x6e, 0x64,
0x2a, 0xd7, 0x01, 0x0a, 0x16, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x43, 0x6f, 0x6e, 0x64,
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x4e,
0x6f, 0x74, 0x53, 0x65, 0x74, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x65, 0x6e, 0x64, 0x69,
0x6e, 0x67, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65,
@@ -1451,24 +1460,27 @@ var file_proto_types_commonpb_v3_common_proto_rawDesc = []byte{
0x70, 0x65, 0x64, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64,
0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x64, 0x10, 0x08, 0x12,
0x0c, 0x0a, 0x08, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x10, 0x09, 0x12, 0x0d, 0x0a,
0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x10, 0x0a, 0x42, 0xfc, 0x01, 0x0a,
0x1f, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76,
0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x33,
0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x61, 0x72, 0x61,
0x6c, 0x75, 0x73, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62,
0x2f, 0x76, 0x33, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x76, 0x33, 0xa2, 0x02, 0x04, 0x50,
0x44, 0x54, 0x43, 0xaa, 0x02, 0x1b, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x44, 0x65,
0x76, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x56,
0x33, 0xca, 0x02, 0x1b, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x5c, 0x44, 0x65, 0x76, 0x5c,
0x54, 0x79, 0x70, 0x65, 0x73, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x56, 0x33, 0xe2,
0x02, 0x27, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x5c, 0x44, 0x65, 0x76, 0x5c, 0x54, 0x79,
0x70, 0x65, 0x73, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x56, 0x33, 0x5c, 0x47, 0x50,
0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1f, 0x50, 0x61, 0x72, 0x61,
0x6c, 0x75, 0x73, 0x3a, 0x3a, 0x44, 0x65, 0x76, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a,
0x3a, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
0x09, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07,
0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x10, 0x0b, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x6e, 0x68,
0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x63,
0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x10, 0x0d, 0x42, 0xfc, 0x01, 0x0a, 0x1f, 0x63,
0x6f, 0x6d, 0x2e, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74,
0x79, 0x70, 0x65, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x33, 0x42, 0x0b,
0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b, 0x67,
0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75,
0x73, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x70, 0x62, 0x2f, 0x76,
0x33, 0x3b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x76, 0x33, 0xa2, 0x02, 0x04, 0x50, 0x44, 0x54,
0x43, 0xaa, 0x02, 0x1b, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x2e,
0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x56, 0x33, 0xca,
0x02, 0x1b, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x5c, 0x44, 0x65, 0x76, 0x5c, 0x54, 0x79,
0x70, 0x65, 0x73, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x56, 0x33, 0xe2, 0x02, 0x27,
0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x5c, 0x44, 0x65, 0x76, 0x5c, 0x54, 0x79, 0x70, 0x65,
0x73, 0x5c, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5c, 0x56, 0x33, 0x5c, 0x47, 0x50, 0x42, 0x4d,
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1f, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75,
0x73, 0x3a, 0x3a, 0x44, 0x65, 0x76, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x43,
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
}
var (
+3
View File
@@ -300,6 +300,9 @@ enum ParalusConditionStatus {
Expired = 8;
Stopping = 9;
Submitted = 10;
Healthy = 11;
Unhealthy = 12;
Disconnected = 13;
}
// HttpBody represents arbitrary HTTP Body. It should only be used for
+47 -43
View File
@@ -86,21 +86,23 @@ const (
ClusterConditionType_ClusterAuxiliaryTaskSync ClusterConditionType = 7
ClusterConditionType_ClusterBootstrapAgent ClusterConditionType = 8
ClusterConditionType_ClusterDelete ClusterConditionType = 9
ClusterConditionType_ClusterHealth ClusterConditionType = 10
)
// Enum value maps for ClusterConditionType.
var (
ClusterConditionType_name = map[int32]string{
0: "ClusterBlueprintSync",
1: "ClusterApprove",
2: "ClusterCheckIn",
3: "ClusterNodeSync",
4: "ClusterRegister",
5: "ClusterNamespaceSync",
6: "ClusterReady",
7: "ClusterAuxiliaryTaskSync",
8: "ClusterBootstrapAgent",
9: "ClusterDelete",
0: "ClusterBlueprintSync",
1: "ClusterApprove",
2: "ClusterCheckIn",
3: "ClusterNodeSync",
4: "ClusterRegister",
5: "ClusterNamespaceSync",
6: "ClusterReady",
7: "ClusterAuxiliaryTaskSync",
8: "ClusterBootstrapAgent",
9: "ClusterDelete",
10: "ClusterHealth",
}
ClusterConditionType_value = map[string]int32{
"ClusterBlueprintSync": 0,
@@ -113,6 +115,7 @@ var (
"ClusterAuxiliaryTaskSync": 7,
"ClusterBootstrapAgent": 8,
"ClusterDelete": 9,
"ClusterHealth": 10,
}
)
@@ -2519,7 +2522,7 @@ var file_proto_types_infrapb_v3_cluster_proto_rawDesc = []byte{
0x74, 0x65, 0x64, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x64, 0x79, 0x10, 0x01, 0x12, 0x14,
0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x61,
0x64, 0x79, 0x10, 0x02, 0x2a, 0xfa, 0x01, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x64, 0x79, 0x10, 0x02, 0x2a, 0x8d, 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a,
0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x42, 0x6c, 0x75, 0x65, 0x70, 0x72, 0x69, 0x6e,
0x74, 0x53, 0x79, 0x6e, 0x63, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x6c, 0x75, 0x73, 0x74,
@@ -2535,39 +2538,40 @@ var file_proto_types_infrapb_v3_cluster_proto_rawDesc = []byte{
0x63, 0x10, 0x07, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x42, 0x6f,
0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x10, 0x08, 0x12, 0x11,
0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x10,
0x09, 0x2a, 0x43, 0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72,
0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x53, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x74, 0x53, 0x65, 0x74, 0x10,
0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x55,
0x53, 0x54, 0x4f, 0x4d, 0x10, 0x02, 0x2a, 0x56, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68,
0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x44, 0x47, 0x45, 0x5f, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x10,
0x00, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x44, 0x47, 0x45, 0x5f, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48,
0x59, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x44, 0x47, 0x45, 0x5f, 0x55, 0x4e, 0x48, 0x45,
0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x44, 0x47, 0x45, 0x5f,
0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x2d,
0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x54, 0x79,
0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x42, 0x6f, 0x6f,
0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x00, 0x2a, 0x34, 0x0a,
0x11, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x53, 0x74, 0x61,
0x74, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4e, 0x6f, 0x74, 0x55, 0x73,
0x65, 0x64, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x73, 0x65,
0x64, 0x10, 0x01, 0x42, 0xf6, 0x01, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x61, 0x72, 0x61,
0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x69, 0x6e,
0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x42, 0x0c, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50,
0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
0x6f, 0x6d, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6c,
0x75, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x69,
0x6e, 0x66, 0x72, 0x61, 0x70, 0x62, 0x2f, 0x76, 0x33, 0x3b, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x76,
0x33, 0xa2, 0x02, 0x04, 0x50, 0x44, 0x54, 0x49, 0xaa, 0x02, 0x1a, 0x50, 0x61, 0x72, 0x61, 0x6c,
0x75, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x66,
0x72, 0x61, 0x2e, 0x56, 0x33, 0xca, 0x02, 0x1a, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x5c,
0x09, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x48, 0x65, 0x61, 0x6c,
0x74, 0x68, 0x10, 0x0a, 0x2a, 0x43, 0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53,
0x68, 0x61, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x6c, 0x75, 0x73,
0x74, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x4e, 0x6f, 0x74, 0x53,
0x65, 0x74, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x0a, 0x0a,
0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x02, 0x2a, 0x56, 0x0a, 0x06, 0x48, 0x65, 0x61,
0x6c, 0x74, 0x68, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x44, 0x47, 0x45, 0x5f, 0x49, 0x47, 0x4e, 0x4f,
0x52, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x44, 0x47, 0x45, 0x5f, 0x48, 0x45, 0x41,
0x4c, 0x54, 0x48, 0x59, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x44, 0x47, 0x45, 0x5f, 0x55,
0x4e, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x44,
0x47, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10,
0x03, 0x2a, 0x2d, 0x0a, 0x10, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65,
0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x10, 0x00,
0x2a, 0x34, 0x0a, 0x11, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4e, 0x6f,
0x74, 0x55, 0x73, 0x65, 0x64, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
0x55, 0x73, 0x65, 0x64, 0x10, 0x01, 0x42, 0xf6, 0x01, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x70,
0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73,
0x2e, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x76, 0x33, 0x42, 0x0c, 0x43, 0x6c, 0x75, 0x73, 0x74,
0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75,
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x2f, 0x70, 0x61,
0x72, 0x61, 0x6c, 0x75, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x79, 0x70, 0x65,
0x73, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x70, 0x62, 0x2f, 0x76, 0x33, 0x3b, 0x69, 0x6e, 0x66,
0x72, 0x61, 0x76, 0x33, 0xa2, 0x02, 0x04, 0x50, 0x44, 0x54, 0x49, 0xaa, 0x02, 0x1a, 0x50, 0x61,
0x72, 0x61, 0x6c, 0x75, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e,
0x49, 0x6e, 0x66, 0x72, 0x61, 0x2e, 0x56, 0x33, 0xca, 0x02, 0x1a, 0x50, 0x61, 0x72, 0x61, 0x6c,
0x75, 0x73, 0x5c, 0x44, 0x65, 0x76, 0x5c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x5c, 0x49, 0x6e, 0x66,
0x72, 0x61, 0x5c, 0x56, 0x33, 0xe2, 0x02, 0x26, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x5c,
0x44, 0x65, 0x76, 0x5c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x5c, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x5c,
0x56, 0x33, 0xe2, 0x02, 0x26, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x5c, 0x44, 0x65, 0x76,
0x5c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x5c, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x5c, 0x56, 0x33, 0x5c,
0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x1e, 0x50, 0x61,
0x72, 0x61, 0x6c, 0x75, 0x73, 0x3a, 0x3a, 0x44, 0x65, 0x76, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65,
0x73, 0x3a, 0x3a, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x3a, 0x3a, 0x56, 0x33, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
0x56, 0x33, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02,
0x1e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x75, 0x73, 0x3a, 0x3a, 0x44, 0x65, 0x76, 0x3a, 0x3a, 0x54,
0x79, 0x70, 0x65, 0x73, 0x3a, 0x3a, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x3a, 0x3a, 0x56, 0x33, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
+1
View File
@@ -302,6 +302,7 @@ enum ClusterConditionType {
ClusterAuxiliaryTaskSync = 7;
ClusterBootstrapAgent = 8;
ClusterDelete = 9;
ClusterHealth = 10;
}
enum ClusterShareMode {
@@ -13,6 +13,12 @@
"PUT",
"DELETE"
]
},
{
"url": "/:metadata.name/status",
"methods": [
"PUT"
]
}
],
"resource_action_urls": [],
+23 -4
View File
@@ -13,6 +13,7 @@ import (
commonv3 "github.com/paralus/paralus/proto/types/commonpb/v3"
v3 "github.com/paralus/paralus/proto/types/commonpb/v3"
infrapbv3 "github.com/paralus/paralus/proto/types/infrapb/v3"
infrav3 "github.com/paralus/paralus/proto/types/infrapb/v3"
"google.golang.org/protobuf/types/known/timestamppb"
)
@@ -99,10 +100,28 @@ func (s *clusterServer) DownloadCluster(ctx context.Context, cluster *infrapbv3.
}, nil
}
func (s *clusterServer) UpdateClusterStatus(ctx context.Context, cluster *infrapbv3.Cluster) (*infrapbv3.Cluster, error) {
err := s.UpdateClusterConditionStatus(ctx, cluster)
func (s *clusterServer) UpdateClusterStatus(ctx context.Context, request *rpcv3.UpdateClusterStatusRequest) (*rpcv3.UpdateClusterStatusResponse, error) {
err := s.UpdateClusterConditionStatus(ctx, &infrav3.Cluster{
Metadata: request.Metadata,
Spec: &infrav3.ClusterSpec{
ClusterData: &infrav3.ClusterData{
ClusterStatus: request.ClusterStatus,
},
},
})
if err != nil {
return updateClusterStatus(cluster, cluster, err), err
return nil, err
}
return cluster, nil
return &rpcv3.UpdateClusterStatusResponse{}, nil
}
func (s *clusterServer) GetClusterStatus(ctx context.Context, request *rpcv3.GetClusterStatusRequest) (*rpcv3.GetClusterStatusResponse, error) {
cluster, err := s.Get(ctx, query.WithMeta(request.Metadata))
if err != nil {
return nil, err
}
return &rpcv3.GetClusterStatusResponse{
Metadata: cluster.GetMetadata(),
ClusterStatus: cluster.GetSpec().GetClusterData().GetClusterStatus(),
}, nil
}