From 5335f1108d461f934fbdcf523886a900148a9ecb Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Tue, 8 Feb 2022 15:54:04 +0530 Subject: [PATCH 1/3] Add new Healer operation Healer Operation is used both for healing the volume and checking for health of the volume, it is upto the CSI driver whether to implement the healer mechanism or just live with health checks. Signed-off-by: Prasanna Kumar Kalever --- healer/README.md | 130 +++++++++++++++++++++++++++++++++++++++++++++ identity/README.md | 23 ++++++++ 2 files changed, 153 insertions(+) create mode 100644 healer/README.md diff --git a/healer/README.md b/healer/README.md new file mode 100644 index 0000000..2f9056c --- /dev/null +++ b/healer/README.md @@ -0,0 +1,130 @@ +# CSI-Addons Operation: Healer + +## Terminology + +| Term | Definition | +| -------- | ------------------------------------------------------------------------------------- | +| VolumeID | The identifier of the volume generated by the plugin. | +| CO | Container Orchestration system that communicates with plugins using CSI service RPCs. | +| SP | Storage Provider, the vendor of a CSI plugin implementation. | +| RPC | [Remote Procedure Call](https://en.wikipedia.org/wiki/Remote_procedure_call). | + +## Objective + +Define a standard that will enable storage providers (SP) to +perform node level volume health check and healing operations. + +### Goals in MVP + +The new extension will define a procedure that + +* can be called for existing volumes +* interacts with the Node-Plugin to check the health condition of the volume +* makes it possible for the SP to heal the volumes if they are in abnormal + condition + +### Non-Goals in MVP + +* Implementation of healing logic is OPTIONAL and completely SP specific + +## Solution Overview + +This specification defines an interface along with the minimum operational and +packaging recommendations for a storage provider (SP) to implement a +health check and heal operations for volumes. The interface declares the +RPCs that a plugin MUST expose. + +## RPC Interface + +* **Node Service**: The Node plugin MUST implement this RPC. + +```protobuf +syntax = "proto3"; +package healer; + +import "github.com/container-storage-interface/spec/lib/go/csi/csi.proto"; +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/csi-addons/spec/lib/go/healer"; + +// HealerNode holds the RPC method for running heal operations on the +// active (staged/published) volume. +service HealerNode { + // NodeHealer is a procedure that gets called on the CSI NodePlugin. + rpc NodeHealer (NodeHealerRequest) + returns (NodeHealerResponse) {} +} +``` + +### NodeHealer + +```protobuf +// NodeHealerRequest contains the information needed to identify the +// location where the volume is mounted so that local filesystem or +// block-device operations to heal volume can be executed. +message NodeHealerRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The path on which volume is available. This field is REQUIRED. + // This field overrides the general CSI size limit. + // SP SHOULD support the maximum path length allowed by the operating + // system/filesystem, but, at a minimum, SP MUST accept a max path + // length of at least 128 bytes. + string volume_path = 2; + + // The path where the volume is staged, if the plugin has the + // STAGE_UNSTAGE_VOLUME capability, otherwise empty. + // If not empty, it MUST be an absolute path in the root + // filesystem of the process serving this request. + // This field is OPTIONAL. + // This field overrides the general CSI size limit. + // SP SHOULD support the maximum path length allowed by the operating + // system/filesystem, but, at a minimum, SP MUST accept a max path + // length of at least 128 bytes. + string staging_target_path = 3; + + // Volume capability describing how the CO intends to use this volume. + // This allows SP to determine if volume is being used as a block + // device or mounted file system. For example - if volume is being + // used as a block device the SP MAY choose to skip calling filesystem + // operations to healer. If volume_capability is omitted the SP MAY + // determine access_type from given volume_path for the volume and + // perform healing. This is an OPTIONAL field. + csi.v1.VolumeCapability volume_capability = 4; + + // Secrets required by plugin to complete the healer operation. + // This field is OPTIONAL. + map secrets = 5 [(csi.v1.csi_secret) = true]; + + // Volume context as returned by SP in + // CreateVolumeResponse.Volume.volume_context. + // This field is OPTIONAL and MUST match the volume_context of the + // volume identified by `volume_id`. + map volume_context = 6; +} + +// NodeHealerResponse holds the information about the result of the +// NodeHealerRequest call. +message NodeHealerResponse { + // Normal volumes are available for use and operating optimally. + // An abnormal volume does not meet these criteria. + // This field is REQUIRED. + bool abnormal = 1; + + // The message describing the condition of the volume. + // This field is REQUIRED. + string message = 2; +} +``` + +#### NodeHealer Errors + +| Condition | gRPC Code | Description | Recovery Behavior | +| ---------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Missing required field | 3 INVALID_ARGUMENT | Indicates that a required field is missing from the request. | Caller MUST fix the request by adding the missing required field before retrying. | +| Volume does not exist | 5 NOT_FOUND | Indicates that a volume corresponding to the specified `volume_id` does not exist. | Caller MUST verify that the `volume_id` is correct and that the volume is accessible and has not been deleted before retrying with exponential back off. | +| Call not implemented | 12 UNIMPLEMENTED | The invoked RPC is not implemented by the CSI-driver or disabled in the driver's current mode of operation. | Caller MUST NOT retry. | +| Operation pending for volume | 10 ABORTED | Indicates that there is already an operation pending for the specified `volume_id`. In general the CSI-Addons CO plugin is responsible for ensuring that there is no more than one call "in-flight" per `volume_id` at a given time. However, in some circumstances, the CSI-Addons CO plugin MAY lose state (for example when the it crashes and restarts), and MAY issue multiple calls simultaneously for the same `volume_id`. The CSI-driver, SHOULD handle this as gracefully as possible, and MAY return this error code to reject secondary calls. | Caller SHOULD ensure that there are no other calls pending for the specified `volume_id`, and then retry with exponential back off. | +| Not authenticated | 16 UNAUTHENTICATED | The invoked RPC does not carry secrets that are valid for authentication. | Caller SHALL either fix the secrets provided in the RPC, or otherwise regalvanize said secrets such that they will pass authentication by the Plugin for the attempted RPC, after which point the caller MAY retry the attempted RPC. | +| Error is Unknown | 2 UNKNOWN | Indicates that a unknown error is generated | Caller MUST study the logs before retrying | diff --git a/identity/README.md b/identity/README.md index 89f6a83..cfc7c35 100644 --- a/identity/README.md +++ b/identity/README.md @@ -239,6 +239,27 @@ message Capability { Type type = 1; } + // Healer contains the features of the Healer operation that the + // CSI-driver supports. + message Healer { + // Type describes a CSI Service that CSI-drivers can support. + enum Type { + // UNKNOWN indicates that the CSI-driver does not support the Healer + // operation in the current mode. The CSI-Addons CO plugin will most + // likely ignore this node for the Healer operation. + UNKNOWN = 0; + + // HEALER indicates that the CSI-driver provides RPCs for a + // Healer operation. + // The presence of this capability determines whether the CSI-Addons CO + // plugin can invoke RPCs that require access to the storage system, + // similar to the CSI Controller (provisioner). + HEALER = 1; + } + // type contains the Type of CSI Service that the CSI-driver supports. + Type type = 1; + } + // Additional CSI-Addons operations will need to be added here. oneof type { @@ -248,6 +269,8 @@ message Capability { ReclaimSpace reclaim_space = 2; // NetworkFence operation capabilities NetworkFence network_fence = 3; + // Healer operation capabilities + Healer healer = 4; // Additional CSI-Addons operations need to be appended to this list. } From b33a71bae95e31a3140617e7a9892c8113542db0 Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Tue, 8 Feb 2022 15:57:34 +0530 Subject: [PATCH 2/3] Healer: add makefile changes Change to the build scripts Signed-off-by: Prasanna Kumar Kalever --- Makefile | 1 + healer/Makefile | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 healer/Makefile diff --git a/Makefile b/Makefile index d6806a4..0390623 100644 --- a/Makefile +++ b/Makefile @@ -25,3 +25,4 @@ clean-deps: $(MAKE) -C identity $@ $(MAKE) -C reclaimspace $@ $(MAKE) -C replication $@ + $(MAKE) -C healer $@ diff --git a/healer/Makefile b/healer/Makefile new file mode 100644 index 0000000..a930084 --- /dev/null +++ b/healer/Makefile @@ -0,0 +1,20 @@ +# Copyright 2022 The csi-addons Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +PROTO := healer.proto +PROTO_SOURCE := README.md + +all: install-deps $(PROTO) build + +include ../release-tools/build.make From 09d55dd0d6ffa47f6d904d2daff66a477ae00b8e Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Tue, 15 Mar 2022 16:07:38 +0530 Subject: [PATCH 3/3] Healer: add auto-generated proto file Fixes: #20 Signed-off-by: Prasanna Kumar Kalever --- healer/healer.proto | 73 +++++++ identity/identity.proto | 23 +++ lib/go/healer/healer.pb.go | 351 ++++++++++++++++++++++++++++++++ lib/go/healer/healer_grpc.pb.go | 103 ++++++++++ lib/go/identity/identity.pb.go | 311 ++++++++++++++++++++-------- 5 files changed, 779 insertions(+), 82 deletions(-) create mode 100644 healer/healer.proto create mode 100644 lib/go/healer/healer.pb.go create mode 100644 lib/go/healer/healer_grpc.pb.go diff --git a/healer/healer.proto b/healer/healer.proto new file mode 100644 index 0000000..60ab913 --- /dev/null +++ b/healer/healer.proto @@ -0,0 +1,73 @@ +// Code generated by make; DO NOT EDIT. +syntax = "proto3"; +package healer; + +import "github.com/container-storage-interface/spec/lib/go/csi/csi.proto"; +import "google/protobuf/descriptor.proto"; + +option go_package = "github.com/csi-addons/spec/lib/go/healer"; + +// HealerNode holds the RPC method for running heal operations on the +// active (staged/published) volume. +service HealerNode { + // NodeHealer is a procedure that gets called on the CSI NodePlugin. + rpc NodeHealer (NodeHealerRequest) + returns (NodeHealerResponse) {} +} +// NodeHealerRequest contains the information needed to identify the +// location where the volume is mounted so that local filesystem or +// block-device operations to heal volume can be executed. +message NodeHealerRequest { + // The ID of the volume. This field is REQUIRED. + string volume_id = 1; + + // The path on which volume is available. This field is REQUIRED. + // This field overrides the general CSI size limit. + // SP SHOULD support the maximum path length allowed by the operating + // system/filesystem, but, at a minimum, SP MUST accept a max path + // length of at least 128 bytes. + string volume_path = 2; + + // The path where the volume is staged, if the plugin has the + // STAGE_UNSTAGE_VOLUME capability, otherwise empty. + // If not empty, it MUST be an absolute path in the root + // filesystem of the process serving this request. + // This field is OPTIONAL. + // This field overrides the general CSI size limit. + // SP SHOULD support the maximum path length allowed by the operating + // system/filesystem, but, at a minimum, SP MUST accept a max path + // length of at least 128 bytes. + string staging_target_path = 3; + + // Volume capability describing how the CO intends to use this volume. + // This allows SP to determine if volume is being used as a block + // device or mounted file system. For example - if volume is being + // used as a block device the SP MAY choose to skip calling filesystem + // operations to healer. If volume_capability is omitted the SP MAY + // determine access_type from given volume_path for the volume and + // perform healing. This is an OPTIONAL field. + csi.v1.VolumeCapability volume_capability = 4; + + // Secrets required by plugin to complete the healer operation. + // This field is OPTIONAL. + map secrets = 5 [(csi.v1.csi_secret) = true]; + + // Volume context as returned by SP in + // CreateVolumeResponse.Volume.volume_context. + // This field is OPTIONAL and MUST match the volume_context of the + // volume identified by `volume_id`. + map volume_context = 6; +} + +// NodeHealerResponse holds the information about the result of the +// NodeHealerRequest call. +message NodeHealerResponse { + // Normal volumes are available for use and operating optimally. + // An abnormal volume does not meet these criteria. + // This field is REQUIRED. + bool abnormal = 1; + + // The message describing the condition of the volume. + // This field is REQUIRED. + string message = 2; +} diff --git a/identity/identity.proto b/identity/identity.proto index 6c77af3..cb070cf 100644 --- a/identity/identity.proto +++ b/identity/identity.proto @@ -139,6 +139,27 @@ message Capability { Type type = 1; } + // Healer contains the features of the Healer operation that the + // CSI-driver supports. + message Healer { + // Type describes a CSI Service that CSI-drivers can support. + enum Type { + // UNKNOWN indicates that the CSI-driver does not support the Healer + // operation in the current mode. The CSI-Addons CO plugin will most + // likely ignore this node for the Healer operation. + UNKNOWN = 0; + + // HEALER indicates that the CSI-driver provides RPCs for a + // Healer operation. + // The presence of this capability determines whether the CSI-Addons CO + // plugin can invoke RPCs that require access to the storage system, + // similar to the CSI Controller (provisioner). + HEALER = 1; + } + // type contains the Type of CSI Service that the CSI-driver supports. + Type type = 1; + } + // Additional CSI-Addons operations will need to be added here. oneof type { @@ -148,6 +169,8 @@ message Capability { ReclaimSpace reclaim_space = 2; // NetworkFence operation capabilities NetworkFence network_fence = 3; + // Healer operation capabilities + Healer healer = 4; // Additional CSI-Addons operations need to be appended to this list. } diff --git a/lib/go/healer/healer.pb.go b/lib/go/healer/healer.pb.go new file mode 100644 index 0000000..4ce4647 --- /dev/null +++ b/lib/go/healer/healer.pb.go @@ -0,0 +1,351 @@ +// Code generated by make; DO NOT EDIT. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.25.0 +// protoc v3.14.0 +// source: healer/healer.proto + +package healer + +import ( + csi "github.com/container-storage-interface/spec/lib/go/csi" + proto "github.com/golang/protobuf/proto" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + _ "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// NodeHealerRequest contains the information needed to identify the +// location where the volume is mounted so that local filesystem or +// block-device operations to heal volume can be executed. +type NodeHealerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the volume. This field is REQUIRED. + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId,proto3" json:"volume_id,omitempty"` + // The path on which volume is available. This field is REQUIRED. + // This field overrides the general CSI size limit. + // SP SHOULD support the maximum path length allowed by the operating + // system/filesystem, but, at a minimum, SP MUST accept a max path + // length of at least 128 bytes. + VolumePath string `protobuf:"bytes,2,opt,name=volume_path,json=volumePath,proto3" json:"volume_path,omitempty"` + // The path where the volume is staged, if the plugin has the + // STAGE_UNSTAGE_VOLUME capability, otherwise empty. + // If not empty, it MUST be an absolute path in the root + // filesystem of the process serving this request. + // This field is OPTIONAL. + // This field overrides the general CSI size limit. + // SP SHOULD support the maximum path length allowed by the operating + // system/filesystem, but, at a minimum, SP MUST accept a max path + // length of at least 128 bytes. + StagingTargetPath string `protobuf:"bytes,3,opt,name=staging_target_path,json=stagingTargetPath,proto3" json:"staging_target_path,omitempty"` + // Volume capability describing how the CO intends to use this volume. + // This allows SP to determine if volume is being used as a block + // device or mounted file system. For example - if volume is being + // used as a block device the SP MAY choose to skip calling filesystem + // operations to healer. If volume_capability is omitted the SP MAY + // determine access_type from given volume_path for the volume and + // perform healing. This is an OPTIONAL field. + VolumeCapability *csi.VolumeCapability `protobuf:"bytes,4,opt,name=volume_capability,json=volumeCapability,proto3" json:"volume_capability,omitempty"` + // Secrets required by plugin to complete the healer operation. + // This field is OPTIONAL. + Secrets map[string]string `protobuf:"bytes,5,rep,name=secrets,proto3" json:"secrets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Volume context as returned by SP in + // CreateVolumeResponse.Volume.volume_context. + // This field is OPTIONAL and MUST match the volume_context of the + // volume identified by `volume_id`. + VolumeContext map[string]string `protobuf:"bytes,6,rep,name=volume_context,json=volumeContext,proto3" json:"volume_context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *NodeHealerRequest) Reset() { + *x = NodeHealerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_healer_healer_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeHealerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeHealerRequest) ProtoMessage() {} + +func (x *NodeHealerRequest) ProtoReflect() protoreflect.Message { + mi := &file_healer_healer_proto_msgTypes[0] + 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 NodeHealerRequest.ProtoReflect.Descriptor instead. +func (*NodeHealerRequest) Descriptor() ([]byte, []int) { + return file_healer_healer_proto_rawDescGZIP(), []int{0} +} + +func (x *NodeHealerRequest) GetVolumeId() string { + if x != nil { + return x.VolumeId + } + return "" +} + +func (x *NodeHealerRequest) GetVolumePath() string { + if x != nil { + return x.VolumePath + } + return "" +} + +func (x *NodeHealerRequest) GetStagingTargetPath() string { + if x != nil { + return x.StagingTargetPath + } + return "" +} + +func (x *NodeHealerRequest) GetVolumeCapability() *csi.VolumeCapability { + if x != nil { + return x.VolumeCapability + } + return nil +} + +func (x *NodeHealerRequest) GetSecrets() map[string]string { + if x != nil { + return x.Secrets + } + return nil +} + +func (x *NodeHealerRequest) GetVolumeContext() map[string]string { + if x != nil { + return x.VolumeContext + } + return nil +} + +// NodeHealerResponse holds the information about the result of the +// NodeHealerRequest call. +type NodeHealerResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Normal volumes are available for use and operating optimally. + // An abnormal volume does not meet these criteria. + // This field is REQUIRED. + Abnormal bool `protobuf:"varint,1,opt,name=abnormal,proto3" json:"abnormal,omitempty"` + // The message describing the condition of the volume. + // This field is REQUIRED. + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *NodeHealerResponse) Reset() { + *x = NodeHealerResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_healer_healer_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeHealerResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeHealerResponse) ProtoMessage() {} + +func (x *NodeHealerResponse) ProtoReflect() protoreflect.Message { + mi := &file_healer_healer_proto_msgTypes[1] + 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 NodeHealerResponse.ProtoReflect.Descriptor instead. +func (*NodeHealerResponse) Descriptor() ([]byte, []int) { + return file_healer_healer_proto_rawDescGZIP(), []int{1} +} + +func (x *NodeHealerResponse) GetAbnormal() bool { + if x != nil { + return x.Abnormal + } + return false +} + +func (x *NodeHealerResponse) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +var File_healer_healer_proto protoreflect.FileDescriptor + +var file_healer_healer_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x68, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x1a, 0x40, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x2d, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2d, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x67, + 0x6f, 0x2f, 0x63, 0x73, 0x69, 0x2f, 0x63, 0x73, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xe2, 0x03, 0x0a, 0x11, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x11, 0x73, 0x74, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, + 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x63, 0x73, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x10, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x45, 0x0a, 0x07, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x68, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x03, 0x98, 0x42, 0x01, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x0e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x65, + 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x3a, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x12, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x65, + 0x61, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x61, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x61, 0x62, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x32, 0x53, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x45, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x12, 0x19, + 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x65, 0x61, 0x6c, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x68, 0x65, 0x61, 0x6c, + 0x65, 0x72, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x73, 0x69, 0x2d, 0x61, 0x64, 0x64, 0x6f, 0x6e, 0x73, + 0x2f, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x67, 0x6f, 0x2f, 0x68, 0x65, 0x61, + 0x6c, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_healer_healer_proto_rawDescOnce sync.Once + file_healer_healer_proto_rawDescData = file_healer_healer_proto_rawDesc +) + +func file_healer_healer_proto_rawDescGZIP() []byte { + file_healer_healer_proto_rawDescOnce.Do(func() { + file_healer_healer_proto_rawDescData = protoimpl.X.CompressGZIP(file_healer_healer_proto_rawDescData) + }) + return file_healer_healer_proto_rawDescData +} + +var file_healer_healer_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_healer_healer_proto_goTypes = []interface{}{ + (*NodeHealerRequest)(nil), // 0: healer.NodeHealerRequest + (*NodeHealerResponse)(nil), // 1: healer.NodeHealerResponse + nil, // 2: healer.NodeHealerRequest.SecretsEntry + nil, // 3: healer.NodeHealerRequest.VolumeContextEntry + (*csi.VolumeCapability)(nil), // 4: csi.v1.VolumeCapability +} +var file_healer_healer_proto_depIdxs = []int32{ + 4, // 0: healer.NodeHealerRequest.volume_capability:type_name -> csi.v1.VolumeCapability + 2, // 1: healer.NodeHealerRequest.secrets:type_name -> healer.NodeHealerRequest.SecretsEntry + 3, // 2: healer.NodeHealerRequest.volume_context:type_name -> healer.NodeHealerRequest.VolumeContextEntry + 0, // 3: healer.HealerNode.NodeHealer:input_type -> healer.NodeHealerRequest + 1, // 4: healer.HealerNode.NodeHealer:output_type -> healer.NodeHealerResponse + 4, // [4:5] is the sub-list for method output_type + 3, // [3:4] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_healer_healer_proto_init() } +func file_healer_healer_proto_init() { + if File_healer_healer_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_healer_healer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeHealerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_healer_healer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeHealerResponse); 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{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_healer_healer_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_healer_healer_proto_goTypes, + DependencyIndexes: file_healer_healer_proto_depIdxs, + MessageInfos: file_healer_healer_proto_msgTypes, + }.Build() + File_healer_healer_proto = out.File + file_healer_healer_proto_rawDesc = nil + file_healer_healer_proto_goTypes = nil + file_healer_healer_proto_depIdxs = nil +} diff --git a/lib/go/healer/healer_grpc.pb.go b/lib/go/healer/healer_grpc.pb.go new file mode 100644 index 0000000..4f8a9b4 --- /dev/null +++ b/lib/go/healer/healer_grpc.pb.go @@ -0,0 +1,103 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package healer + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// HealerNodeClient is the client API for HealerNode service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type HealerNodeClient interface { + // NodeHealer is a procedure that gets called on the CSI NodePlugin. + NodeHealer(ctx context.Context, in *NodeHealerRequest, opts ...grpc.CallOption) (*NodeHealerResponse, error) +} + +type healerNodeClient struct { + cc grpc.ClientConnInterface +} + +func NewHealerNodeClient(cc grpc.ClientConnInterface) HealerNodeClient { + return &healerNodeClient{cc} +} + +func (c *healerNodeClient) NodeHealer(ctx context.Context, in *NodeHealerRequest, opts ...grpc.CallOption) (*NodeHealerResponse, error) { + out := new(NodeHealerResponse) + err := c.cc.Invoke(ctx, "/healer.HealerNode/NodeHealer", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// HealerNodeServer is the server API for HealerNode service. +// All implementations must embed UnimplementedHealerNodeServer +// for forward compatibility +type HealerNodeServer interface { + // NodeHealer is a procedure that gets called on the CSI NodePlugin. + NodeHealer(context.Context, *NodeHealerRequest) (*NodeHealerResponse, error) + mustEmbedUnimplementedHealerNodeServer() +} + +// UnimplementedHealerNodeServer must be embedded to have forward compatible implementations. +type UnimplementedHealerNodeServer struct { +} + +func (UnimplementedHealerNodeServer) NodeHealer(context.Context, *NodeHealerRequest) (*NodeHealerResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method NodeHealer not implemented") +} +func (UnimplementedHealerNodeServer) mustEmbedUnimplementedHealerNodeServer() {} + +// UnsafeHealerNodeServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to HealerNodeServer will +// result in compilation errors. +type UnsafeHealerNodeServer interface { + mustEmbedUnimplementedHealerNodeServer() +} + +func RegisterHealerNodeServer(s grpc.ServiceRegistrar, srv HealerNodeServer) { + s.RegisterService(&HealerNode_ServiceDesc, srv) +} + +func _HealerNode_NodeHealer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeHealerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(HealerNodeServer).NodeHealer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/healer.HealerNode/NodeHealer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(HealerNodeServer).NodeHealer(ctx, req.(*NodeHealerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// HealerNode_ServiceDesc is the grpc.ServiceDesc for HealerNode service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var HealerNode_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "healer.HealerNode", + HandlerType: (*HealerNodeServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "NodeHealer", + Handler: _HealerNode_NodeHealer_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "healer/healer.proto", +} diff --git a/lib/go/identity/identity.pb.go b/lib/go/identity/identity.pb.go index 607c8bc..1262f98 100644 --- a/lib/go/identity/identity.pb.go +++ b/lib/go/identity/identity.pb.go @@ -211,6 +211,61 @@ func (Capability_NetworkFence_Type) EnumDescriptor() ([]byte, []int) { return file_identity_identity_proto_rawDescGZIP(), []int{4, 2, 0} } +// Type describes a CSI Service that CSI-drivers can support. +type Capability_Healer_Type int32 + +const ( + // UNKNOWN indicates that the CSI-driver does not support the Healer + // operation in the current mode. The CSI-Addons CO plugin will most + // likely ignore this node for the Healer operation. + Capability_Healer_UNKNOWN Capability_Healer_Type = 0 + // HEALER indicates that the CSI-driver provides RPCs for a + // Healer operation. + // The presence of this capability determines whether the CSI-Addons CO + // plugin can invoke RPCs that require access to the storage system, + // similar to the CSI Controller (provisioner). + Capability_Healer_HEALER Capability_Healer_Type = 1 +) + +// Enum value maps for Capability_Healer_Type. +var ( + Capability_Healer_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "HEALER", + } + Capability_Healer_Type_value = map[string]int32{ + "UNKNOWN": 0, + "HEALER": 1, + } +) + +func (x Capability_Healer_Type) Enum() *Capability_Healer_Type { + p := new(Capability_Healer_Type) + *p = x + return p +} + +func (x Capability_Healer_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Capability_Healer_Type) Descriptor() protoreflect.EnumDescriptor { + return file_identity_identity_proto_enumTypes[3].Descriptor() +} + +func (Capability_Healer_Type) Type() protoreflect.EnumType { + return &file_identity_identity_proto_enumTypes[3] +} + +func (x Capability_Healer_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Capability_Healer_Type.Descriptor instead. +func (Capability_Healer_Type) EnumDescriptor() ([]byte, []int) { + return file_identity_identity_proto_rawDescGZIP(), []int{4, 3, 0} +} + // GetIdentityRequest is sent by the CSI-Addons CO plugin to obtain the // drivername, version and optional details from the CSI-driver. type GetIdentityRequest struct { @@ -425,6 +480,7 @@ type Capability struct { // *Capability_Service_ // *Capability_ReclaimSpace_ // *Capability_NetworkFence_ + // *Capability_Healer_ Type isCapability_Type `protobuf_oneof:"type"` } @@ -488,6 +544,13 @@ func (x *Capability) GetNetworkFence() *Capability_NetworkFence { return nil } +func (x *Capability) GetHealer() *Capability_Healer { + if x, ok := x.GetType().(*Capability_Healer_); ok { + return x.Healer + } + return nil +} + type isCapability_Type interface { isCapability_Type() } @@ -507,12 +570,19 @@ type Capability_NetworkFence_ struct { NetworkFence *Capability_NetworkFence `protobuf:"bytes,3,opt,name=network_fence,json=networkFence,proto3,oneof"` } +type Capability_Healer_ struct { + // Healer operation capabilities + Healer *Capability_Healer `protobuf:"bytes,4,opt,name=healer,proto3,oneof"` +} + func (*Capability_Service_) isCapability_Type() {} func (*Capability_ReclaimSpace_) isCapability_Type() {} func (*Capability_NetworkFence_) isCapability_Type() {} +func (*Capability_Healer_) isCapability_Type() {} + // ProbeRequest is sent to the CSI-driver to confirm that it can respond to // requests from the CSI-Addons CO plugin. type ProbeRequest struct { @@ -770,6 +840,56 @@ func (x *Capability_NetworkFence) GetType() Capability_NetworkFence_Type { return Capability_NetworkFence_UNKNOWN } +// Healer contains the features of the Healer operation that the +// CSI-driver supports. +type Capability_Healer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // type contains the Type of CSI Service that the CSI-driver supports. + Type Capability_Healer_Type `protobuf:"varint,1,opt,name=type,proto3,enum=identity.Capability_Healer_Type" json:"type,omitempty"` +} + +func (x *Capability_Healer) Reset() { + *x = Capability_Healer{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_identity_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Capability_Healer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Capability_Healer) ProtoMessage() {} + +func (x *Capability_Healer) ProtoReflect() protoreflect.Message { + mi := &file_identity_identity_proto_msgTypes[11] + 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 Capability_Healer.ProtoReflect.Descriptor instead. +func (*Capability_Healer) Descriptor() ([]byte, []int) { + return file_identity_identity_proto_rawDescGZIP(), []int{4, 3} +} + +func (x *Capability_Healer) GetType() Capability_Healer_Type { + if x != nil { + return x.Type + } + return Capability_Healer_UNKNOWN +} + var File_identity_identity_proto protoreflect.FileDescriptor var file_identity_identity_proto_rawDesc = []byte{ @@ -799,7 +919,7 @@ var file_identity_identity_proto_rawDesc = []byte{ 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x22, 0xd1, 0x04, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x73, 0x22, 0xe9, 0x05, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x48, @@ -812,52 +932,62 @@ var file_identity_identity_proto_rawDesc = []byte{ 0x66, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x46, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, - 0x52, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x46, 0x65, 0x6e, 0x63, 0x65, 0x1a, 0x7f, - 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x3d, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, - 0x4c, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, - 0x0c, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x02, 0x1a, - 0x78, 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x2e, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x04, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, - 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x1a, 0x72, 0x0a, 0x0c, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x46, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x46, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x45, - 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x46, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x01, 0x42, 0x06, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x32, 0xee, 0x01, 0x0a, 0x08, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x4c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, - 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x47, 0x65, - 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, - 0x05, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x16, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, + 0x52, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x46, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x35, + 0x0a, 0x06, 0x68, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x68, + 0x65, 0x61, 0x6c, 0x65, 0x72, 0x1a, 0x7f, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x35, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, + 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3d, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, + 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, + 0x43, 0x45, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x45, 0x52, + 0x56, 0x49, 0x43, 0x45, 0x10, 0x02, 0x1a, 0x78, 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, + 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x52, 0x65, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x53, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x22, 0x2c, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, 0x49, + 0x4e, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, + 0x1a, 0x72, 0x0a, 0x0c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x46, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x3a, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, + 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x46, 0x65, 0x6e, 0x63, + 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x46, 0x45, 0x4e, + 0x43, 0x45, 0x10, 0x01, 0x1a, 0x5f, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x12, 0x34, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x65, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x1f, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x48, 0x45, 0x41, + 0x4c, 0x45, 0x52, 0x10, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0e, 0x0a, + 0x0c, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, 0x0a, + 0x0d, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, + 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 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, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, + 0x32, 0xee, 0x01, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x4c, 0x0a, + 0x0b, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1c, 0x2e, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x20, + 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x70, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x05, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x16, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x3b, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x2e, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x3b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -872,46 +1002,50 @@ func file_identity_identity_proto_rawDescGZIP() []byte { return file_identity_identity_proto_rawDescData } -var file_identity_identity_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_identity_identity_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_identity_identity_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_identity_identity_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_identity_identity_proto_goTypes = []interface{}{ (Capability_Service_Type)(0), // 0: identity.Capability.Service.Type (Capability_ReclaimSpace_Type)(0), // 1: identity.Capability.ReclaimSpace.Type (Capability_NetworkFence_Type)(0), // 2: identity.Capability.NetworkFence.Type - (*GetIdentityRequest)(nil), // 3: identity.GetIdentityRequest - (*GetIdentityResponse)(nil), // 4: identity.GetIdentityResponse - (*GetCapabilitiesRequest)(nil), // 5: identity.GetCapabilitiesRequest - (*GetCapabilitiesResponse)(nil), // 6: identity.GetCapabilitiesResponse - (*Capability)(nil), // 7: identity.Capability - (*ProbeRequest)(nil), // 8: identity.ProbeRequest - (*ProbeResponse)(nil), // 9: identity.ProbeResponse - nil, // 10: identity.GetIdentityResponse.ManifestEntry - (*Capability_Service)(nil), // 11: identity.Capability.Service - (*Capability_ReclaimSpace)(nil), // 12: identity.Capability.ReclaimSpace - (*Capability_NetworkFence)(nil), // 13: identity.Capability.NetworkFence - (*wrapperspb.BoolValue)(nil), // 14: google.protobuf.BoolValue + (Capability_Healer_Type)(0), // 3: identity.Capability.Healer.Type + (*GetIdentityRequest)(nil), // 4: identity.GetIdentityRequest + (*GetIdentityResponse)(nil), // 5: identity.GetIdentityResponse + (*GetCapabilitiesRequest)(nil), // 6: identity.GetCapabilitiesRequest + (*GetCapabilitiesResponse)(nil), // 7: identity.GetCapabilitiesResponse + (*Capability)(nil), // 8: identity.Capability + (*ProbeRequest)(nil), // 9: identity.ProbeRequest + (*ProbeResponse)(nil), // 10: identity.ProbeResponse + nil, // 11: identity.GetIdentityResponse.ManifestEntry + (*Capability_Service)(nil), // 12: identity.Capability.Service + (*Capability_ReclaimSpace)(nil), // 13: identity.Capability.ReclaimSpace + (*Capability_NetworkFence)(nil), // 14: identity.Capability.NetworkFence + (*Capability_Healer)(nil), // 15: identity.Capability.Healer + (*wrapperspb.BoolValue)(nil), // 16: google.protobuf.BoolValue } var file_identity_identity_proto_depIdxs = []int32{ - 10, // 0: identity.GetIdentityResponse.manifest:type_name -> identity.GetIdentityResponse.ManifestEntry - 7, // 1: identity.GetCapabilitiesResponse.capabilities:type_name -> identity.Capability - 11, // 2: identity.Capability.service:type_name -> identity.Capability.Service - 12, // 3: identity.Capability.reclaim_space:type_name -> identity.Capability.ReclaimSpace - 13, // 4: identity.Capability.network_fence:type_name -> identity.Capability.NetworkFence - 14, // 5: identity.ProbeResponse.ready:type_name -> google.protobuf.BoolValue - 0, // 6: identity.Capability.Service.type:type_name -> identity.Capability.Service.Type - 1, // 7: identity.Capability.ReclaimSpace.type:type_name -> identity.Capability.ReclaimSpace.Type - 2, // 8: identity.Capability.NetworkFence.type:type_name -> identity.Capability.NetworkFence.Type - 3, // 9: identity.Identity.GetIdentity:input_type -> identity.GetIdentityRequest - 5, // 10: identity.Identity.GetCapabilities:input_type -> identity.GetCapabilitiesRequest - 8, // 11: identity.Identity.Probe:input_type -> identity.ProbeRequest - 4, // 12: identity.Identity.GetIdentity:output_type -> identity.GetIdentityResponse - 6, // 13: identity.Identity.GetCapabilities:output_type -> identity.GetCapabilitiesResponse - 9, // 14: identity.Identity.Probe:output_type -> identity.ProbeResponse - 12, // [12:15] is the sub-list for method output_type - 9, // [9:12] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 11, // 0: identity.GetIdentityResponse.manifest:type_name -> identity.GetIdentityResponse.ManifestEntry + 8, // 1: identity.GetCapabilitiesResponse.capabilities:type_name -> identity.Capability + 12, // 2: identity.Capability.service:type_name -> identity.Capability.Service + 13, // 3: identity.Capability.reclaim_space:type_name -> identity.Capability.ReclaimSpace + 14, // 4: identity.Capability.network_fence:type_name -> identity.Capability.NetworkFence + 15, // 5: identity.Capability.healer:type_name -> identity.Capability.Healer + 16, // 6: identity.ProbeResponse.ready:type_name -> google.protobuf.BoolValue + 0, // 7: identity.Capability.Service.type:type_name -> identity.Capability.Service.Type + 1, // 8: identity.Capability.ReclaimSpace.type:type_name -> identity.Capability.ReclaimSpace.Type + 2, // 9: identity.Capability.NetworkFence.type:type_name -> identity.Capability.NetworkFence.Type + 3, // 10: identity.Capability.Healer.type:type_name -> identity.Capability.Healer.Type + 4, // 11: identity.Identity.GetIdentity:input_type -> identity.GetIdentityRequest + 6, // 12: identity.Identity.GetCapabilities:input_type -> identity.GetCapabilitiesRequest + 9, // 13: identity.Identity.Probe:input_type -> identity.ProbeRequest + 5, // 14: identity.Identity.GetIdentity:output_type -> identity.GetIdentityResponse + 7, // 15: identity.Identity.GetCapabilities:output_type -> identity.GetCapabilitiesResponse + 10, // 16: identity.Identity.Probe:output_type -> identity.ProbeResponse + 14, // [14:17] is the sub-list for method output_type + 11, // [11:14] is the sub-list for method input_type + 11, // [11:11] is the sub-list for extension type_name + 11, // [11:11] is the sub-list for extension extendee + 0, // [0:11] is the sub-list for field type_name } func init() { file_identity_identity_proto_init() } @@ -1040,19 +1174,32 @@ func file_identity_identity_proto_init() { return nil } } + file_identity_identity_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Capability_Healer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_identity_identity_proto_msgTypes[4].OneofWrappers = []interface{}{ (*Capability_Service_)(nil), (*Capability_ReclaimSpace_)(nil), (*Capability_NetworkFence_)(nil), + (*Capability_Healer_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_identity_identity_proto_rawDesc, - NumEnums: 3, - NumMessages: 11, + NumEnums: 4, + NumMessages: 12, NumExtensions: 0, NumServices: 1, },