From d190ffcf6bf7692f3571b0dd6f68d597a339f3e4 Mon Sep 17 00:00:00 2001 From: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Date: Fri, 7 Aug 2026 13:51:15 -0400 Subject: [PATCH 1/7] OSAC-2872: add Volume private API, DB migration, and server Volume is a tenant-scoped resource representing block storage provisioned on a backend storage array through the OSAC storage control plane. Proto definitions (osac.private.v1): - volume_type.proto: Volume, VolumeSpec, VolumeStatus, VolumeState enum, PVCReference, PVReference messages - volumes_service.proto: Volumes service with List, Get, Create, Update, Delete, Signal RPCs and REST transcoding - Event oneof: Volume volume = 41 DB migration (94_create_volumes_tables): - volumes and archived_volumes tables with standard schema - project ltree column with tenant and project foreign keys - Unique name per tenant on active records - Immutability trigger on id, name, tenant, project Server (private_volumes_server.go): - GenericServer passthrough for all CRUD operations - Create handler sets initial state to CREATING and clears caller ID - Registered in gRPC server and REST gateway Table rendering for CLI get output with ID, NAME, TENANT, TIER, SIZE, CLUSTER, BACKEND, and STATE columns. Unit tests cover builder validation, full CRUD lifecycle, standalone volumes (no cluster/pvc_ref), PVC-driven volumes, state enforcement, ID generation, name uniqueness, and Signal. Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Assisted-by: Cursor/Claude Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> --- .../api/osac/private/v1/event_type.pb.go | 407 +++--- .../private/v1/event_type_protoopaque.pb.go | 406 +++--- .../api/osac/private/v1/volume_type.pb.go | 890 +++++++++++++ .../private/v1/volume_type_protoopaque.pb.go | 875 ++++++++++++ .../api/osac/private/v1/volumes_service.pb.go | 1174 +++++++++++++++++ .../osac/private/v1/volumes_service.pb.gw.go | 516 ++++++++ .../private/v1/volumes_service_grpc.pb.go | 338 +++++ .../v1/volumes_service_protoopaque.pb.go | 1170 ++++++++++++++++ .../start/grpcserver/start_grpc_server_cmd.go | 14 + .../restgateway/start_rest_gateway_cmd.go | 1 + .../94_create_volumes_tables.up.sql | 75 ++ .../94_create_volumes_tables_test.go | 159 +++ .../tables/osac.private.v1.Volume.yaml | 39 + .../servers/private_volumes_server.go | 146 ++ .../servers/private_volumes_server_test.go | 384 ++++++ .../private/osac/private/v1/event_type.proto | 2 + .../private/osac/private/v1/volume_type.proto | 131 ++ .../osac/private/v1/volumes_service.proto | 154 +++ 18 files changed, 6529 insertions(+), 352 deletions(-) create mode 100644 fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go create mode 100644 fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go create mode 100644 fulfillment-service/internal/api/osac/private/v1/volumes_service.pb.go create mode 100644 fulfillment-service/internal/api/osac/private/v1/volumes_service.pb.gw.go create mode 100644 fulfillment-service/internal/api/osac/private/v1/volumes_service_grpc.pb.go create mode 100644 fulfillment-service/internal/api/osac/private/v1/volumes_service_protoopaque.pb.go create mode 100644 fulfillment-service/internal/database/migrations/94_create_volumes_tables.up.sql create mode 100644 fulfillment-service/internal/database/migrations/94_create_volumes_tables_test.go create mode 100644 fulfillment-service/internal/rendering/tables/osac.private.v1.Volume.yaml create mode 100644 fulfillment-service/internal/servers/private_volumes_server.go create mode 100644 fulfillment-service/internal/servers/private_volumes_server_test.go create mode 100644 fulfillment-service/proto/private/osac/private/v1/volume_type.proto create mode 100644 fulfillment-service/proto/private/osac/private/v1/volumes_service.proto diff --git a/fulfillment-service/internal/api/osac/private/v1/event_type.pb.go b/fulfillment-service/internal/api/osac/private/v1/event_type.pb.go index 776491558..e7479c382 100644 --- a/fulfillment-service/internal/api/osac/private/v1/event_type.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/event_type.pb.go @@ -140,6 +140,7 @@ type Event struct { // *Event_ClusterVersion // *Event_StorageTier // *Event_Secret + // *Event_Volume Payload isEvent_Payload `protobuf_oneof:"payload"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -470,6 +471,15 @@ func (x *Event) GetSecret() *Secret { return nil } +func (x *Event) GetVolume() *Volume { + if x != nil { + if x, ok := x.Payload.(*Event_Volume); ok { + return x.Volume + } + } + return nil +} + func (x *Event) SetId(v string) { x.Id = v } @@ -726,6 +736,14 @@ func (x *Event) SetSecret(v *Secret) { x.Payload = &Event_Secret{v} } +func (x *Event) SetVolume(v *Volume) { + if v == nil { + x.Payload = nil + return + } + x.Payload = &Event_Volume{v} +} + func (x *Event) HasPayload() bool { if x == nil { return false @@ -981,6 +999,14 @@ func (x *Event) HasSecret() bool { return ok } +func (x *Event) HasVolume() bool { + if x == nil { + return false + } + _, ok := x.Payload.(*Event_Volume) + return ok +} + func (x *Event) ClearPayload() { x.Payload = nil } @@ -1171,6 +1197,12 @@ func (x *Event) ClearSecret() { } } +func (x *Event) ClearVolume() { + if _, ok := x.Payload.(*Event_Volume); ok { + x.Payload = nil + } +} + const Event_Payload_not_set_case case_Event_Payload = 0 const Event_Cluster_case case_Event_Payload = 3 const Event_ClusterTemplate_case case_Event_Payload = 4 @@ -1203,6 +1235,7 @@ const Event_NatGateway_case case_Event_Payload = 37 const Event_ClusterVersion_case case_Event_Payload = 38 const Event_StorageTier_case case_Event_Payload = 39 const Event_Secret_case case_Event_Payload = 40 +const Event_Volume_case case_Event_Payload = 41 func (x *Event) WhichPayload() case_Event_Payload { if x == nil { @@ -1271,6 +1304,8 @@ func (x *Event) WhichPayload() case_Event_Payload { return Event_StorageTier_case case *Event_Secret: return Event_Secret_case + case *Event_Volume: + return Event_Volume_case default: return Event_Payload_not_set_case } @@ -1317,6 +1352,7 @@ type Event_builder struct { ClusterVersion *ClusterVersion StorageTier *StorageTier Secret *Secret + Volume *Volume // -- end of Payload } @@ -1419,6 +1455,9 @@ func (b0 Event_builder) Build() *Event { if b.Secret != nil { x.Payload = &Event_Secret{b.Secret} } + if b.Volume != nil { + x.Payload = &Event_Volume{b.Volume} + } return m0 } @@ -1560,6 +1599,10 @@ type Event_Secret struct { Secret *Secret `protobuf:"bytes,40,opt,name=secret,proto3,oneof"` } +type Event_Volume struct { + Volume *Volume `protobuf:"bytes,41,opt,name=volume,proto3,oneof"` +} + func (*Event_Cluster) isEvent_Payload() {} func (*Event_ClusterTemplate) isEvent_Payload() {} @@ -1622,6 +1665,8 @@ func (*Event_StorageTier) isEvent_Payload() {} func (*Event_Secret) isEvent_Payload() {} +func (*Event_Volume) isEvent_Payload() {} + var File_osac_private_v1_event_type_proto protoreflect.FileDescriptor var file_osac_private_v1_event_type_proto_rawDesc = string([]byte{ @@ -1711,181 +1756,187 @@ var file_osac_private_v1_event_type_proto_rawDesc = string([]byte{ 0x2f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xce, 0x12, 0x0a, - 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x10, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x75, 0x62, 0x48, 0x00, 0x52, 0x03, 0x68, 0x75, 0x62, 0x12, - 0x66, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x17, - 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x06, - 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, - 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x75, 0x62, 0x6e, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, - 0x4a, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x00, 0x52, 0x0e, 0x76, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x47, 0x0a, 0x0e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, + 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x6f, 0x73, + 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x81, 0x13, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, + 0x4d, 0x0a, 0x10, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x38, + 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x08, + 0x68, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x75, 0x62, 0x48, 0x00, 0x52, 0x03, 0x68, + 0x75, 0x62, 0x12, 0x66, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, + 0x00, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x63, 0x6f, + 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, + 0x00, 0x52, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, + 0x31, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x75, 0x62, 0x6e, + 0x65, 0x74, 0x12, 0x4a, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x00, 0x52, 0x0e, + 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x47, + 0x0a, 0x0e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x41, - 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x12, 0x57, 0x0a, 0x14, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x70, 0x0a, 0x1d, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, - 0x52, 0x1a, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x34, 0x0a, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x44, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x62, 0x61, 0x72, 0x65, - 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x11, 0x62, 0x61, 0x72, - 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6d, - 0x0a, 0x1c, 0x62, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x1c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x19, 0x62, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x77, 0x0a, - 0x20, 0x62, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x57, 0x0a, 0x14, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x16, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x70, 0x0a, + 0x1d, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x17, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x48, 0x00, 0x52, 0x1a, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x34, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x62, + 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, 0x65, 0x4d, + 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x11, + 0x62, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x12, 0x6d, 0x0a, 0x1c, 0x62, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, - 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, 0x52, 0x1c, 0x62, 0x61, 0x72, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, - 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x4a, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, - 0x48, 0x00, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x65, - 0x6e, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x1f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x06, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x21, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x48, 0x00, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x4b, 0x0a, 0x10, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x49, 0x50, 0x50, 0x6f, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x3e, 0x0a, 0x0b, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x48, 0x00, 0x52, 0x0a, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x12, 0x5d, 0x0a, 0x16, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x19, 0x62, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x12, 0x77, 0x0a, 0x20, 0x62, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, + 0x69, 0x74, 0x65, 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, 0x52, 0x1c, 0x62, 0x61, 0x72, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x4a, 0x0a, 0x0f, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, + 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x20, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x12, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, + 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x48, 0x00, 0x52, 0x11, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, + 0x4b, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x14, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x41, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x5f, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x50, 0x6f, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x0e, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x3e, 0x0a, 0x0b, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x18, 0x23, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x48, 0x00, + 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x12, 0x5d, 0x0a, 0x16, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, + 0x70, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0b, 0x6e, + 0x61, 0x74, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x41, 0x54, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x48, 0x00, 0x52, + 0x0a, 0x6e, 0x61, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x4a, 0x0a, 0x0f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x26, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x31, 0x0a, + 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x41, 0x54, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6e, 0x61, - 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x4a, 0x0a, 0x0f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, - 0x74, 0x69, 0x65, 0x72, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, - 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x4a, 0x04, 0x08, 0x11, 0x10, - 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x19, 0x10, 0x1a, 0x2a, 0xa4, 0x01, - 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x4c, - 0x45, 0x44, 0x10, 0x04, 0x42, 0xde, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, - 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, - 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, - 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, - 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, - 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, - 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x04, 0x08, 0x10, 0x10, + 0x11, 0x4a, 0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, + 0x19, 0x10, 0x1a, 0x2a, 0xa4, 0x01, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, + 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, + 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, + 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, + 0x53, 0x49, 0x47, 0x4e, 0x41, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x42, 0xde, 0x01, 0x0a, 0x13, 0x63, + 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x42, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, + 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, }) var file_osac_private_v1_event_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) @@ -1924,6 +1975,7 @@ var file_osac_private_v1_event_type_proto_goTypes = []any{ (*ClusterVersion)(nil), // 30: osac.private.v1.ClusterVersion (*StorageTier)(nil), // 31: osac.private.v1.StorageTier (*Secret)(nil), // 32: osac.private.v1.Secret + (*Volume)(nil), // 33: osac.private.v1.Volume } var file_osac_private_v1_event_type_proto_depIdxs = []int32{ 0, // 0: osac.private.v1.Event.type:type_name -> osac.private.v1.EventType @@ -1958,11 +2010,12 @@ var file_osac_private_v1_event_type_proto_depIdxs = []int32{ 30, // 29: osac.private.v1.Event.cluster_version:type_name -> osac.private.v1.ClusterVersion 31, // 30: osac.private.v1.Event.storage_tier:type_name -> osac.private.v1.StorageTier 32, // 31: osac.private.v1.Event.secret:type_name -> osac.private.v1.Secret - 32, // [32:32] is the sub-list for method output_type - 32, // [32:32] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 33, // 32: osac.private.v1.Event.volume:type_name -> osac.private.v1.Volume + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_osac_private_v1_event_type_proto_init() } @@ -2001,6 +2054,7 @@ func file_osac_private_v1_event_type_proto_init() { file_osac_private_v1_subnet_type_proto_init() file_osac_private_v1_user_type_proto_init() file_osac_private_v1_virtual_network_type_proto_init() + file_osac_private_v1_volume_type_proto_init() file_osac_private_v1_event_type_proto_msgTypes[0].OneofWrappers = []any{ (*Event_Cluster)(nil), (*Event_ClusterTemplate)(nil), @@ -2033,6 +2087,7 @@ func file_osac_private_v1_event_type_proto_init() { (*Event_ClusterVersion)(nil), (*Event_StorageTier)(nil), (*Event_Secret)(nil), + (*Event_Volume)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/fulfillment-service/internal/api/osac/private/v1/event_type_protoopaque.pb.go b/fulfillment-service/internal/api/osac/private/v1/event_type_protoopaque.pb.go index 7efdf9429..2f6628843 100644 --- a/fulfillment-service/internal/api/osac/private/v1/event_type_protoopaque.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/event_type_protoopaque.pb.go @@ -426,6 +426,15 @@ func (x *Event) GetSecret() *Secret { return nil } +func (x *Event) GetVolume() *Volume { + if x != nil { + if x, ok := x.xxx_hidden_Payload.(*event_Volume); ok { + return x.Volume + } + } + return nil +} + func (x *Event) SetId(v string) { x.xxx_hidden_Id = v } @@ -682,6 +691,14 @@ func (x *Event) SetSecret(v *Secret) { x.xxx_hidden_Payload = &event_Secret{v} } +func (x *Event) SetVolume(v *Volume) { + if v == nil { + x.xxx_hidden_Payload = nil + return + } + x.xxx_hidden_Payload = &event_Volume{v} +} + func (x *Event) HasPayload() bool { if x == nil { return false @@ -937,6 +954,14 @@ func (x *Event) HasSecret() bool { return ok } +func (x *Event) HasVolume() bool { + if x == nil { + return false + } + _, ok := x.xxx_hidden_Payload.(*event_Volume) + return ok +} + func (x *Event) ClearPayload() { x.xxx_hidden_Payload = nil } @@ -1127,6 +1152,12 @@ func (x *Event) ClearSecret() { } } +func (x *Event) ClearVolume() { + if _, ok := x.xxx_hidden_Payload.(*event_Volume); ok { + x.xxx_hidden_Payload = nil + } +} + const Event_Payload_not_set_case case_Event_Payload = 0 const Event_Cluster_case case_Event_Payload = 3 const Event_ClusterTemplate_case case_Event_Payload = 4 @@ -1159,6 +1190,7 @@ const Event_NatGateway_case case_Event_Payload = 37 const Event_ClusterVersion_case case_Event_Payload = 38 const Event_StorageTier_case case_Event_Payload = 39 const Event_Secret_case case_Event_Payload = 40 +const Event_Volume_case case_Event_Payload = 41 func (x *Event) WhichPayload() case_Event_Payload { if x == nil { @@ -1227,6 +1259,8 @@ func (x *Event) WhichPayload() case_Event_Payload { return Event_StorageTier_case case *event_Secret: return Event_Secret_case + case *event_Volume: + return Event_Volume_case default: return Event_Payload_not_set_case } @@ -1273,6 +1307,7 @@ type Event_builder struct { ClusterVersion *ClusterVersion StorageTier *StorageTier Secret *Secret + Volume *Volume // -- end of xxx_hidden_Payload } @@ -1375,6 +1410,9 @@ func (b0 Event_builder) Build() *Event { if b.Secret != nil { x.xxx_hidden_Payload = &event_Secret{b.Secret} } + if b.Volume != nil { + x.xxx_hidden_Payload = &event_Volume{b.Volume} + } return m0 } @@ -1516,6 +1554,10 @@ type event_Secret struct { Secret *Secret `protobuf:"bytes,40,opt,name=secret,proto3,oneof"` } +type event_Volume struct { + Volume *Volume `protobuf:"bytes,41,opt,name=volume,proto3,oneof"` +} + func (*event_Cluster) isEvent_Payload() {} func (*event_ClusterTemplate) isEvent_Payload() {} @@ -1578,6 +1620,8 @@ func (*event_StorageTier) isEvent_Payload() {} func (*event_Secret) isEvent_Payload() {} +func (*event_Volume) isEvent_Payload() {} + var File_osac_private_v1_event_type_proto protoreflect.FileDescriptor var file_osac_private_v1_event_type_proto_rawDesc = string([]byte{ @@ -1667,181 +1711,187 @@ var file_osac_private_v1_event_type_proto_rawDesc = string([]byte{ 0x2f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xce, 0x12, 0x0a, - 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x10, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x75, 0x62, 0x48, 0x00, 0x52, 0x03, 0x68, 0x75, 0x62, 0x12, - 0x66, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x17, - 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x06, - 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, - 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x75, 0x62, 0x6e, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, - 0x4a, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x00, 0x52, 0x0e, 0x76, 0x69, 0x72, - 0x74, 0x75, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x47, 0x0a, 0x0e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x13, 0x20, 0x01, + 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x6f, 0x73, + 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x81, 0x13, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, + 0x4d, 0x0a, 0x10, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x38, + 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x08, + 0x68, 0x6f, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x75, 0x62, 0x48, 0x00, 0x52, 0x03, 0x68, + 0x75, 0x62, 0x12, 0x66, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, + 0x00, 0x52, 0x17, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x4d, 0x0a, 0x10, 0x63, 0x6f, + 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, + 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x48, + 0x00, 0x52, 0x0c, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, + 0x31, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x75, 0x62, 0x6e, + 0x65, 0x74, 0x12, 0x4a, 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, + 0x72, 0x74, 0x75, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x48, 0x00, 0x52, 0x0e, + 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x47, + 0x0a, 0x0e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x41, - 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x12, 0x57, 0x0a, 0x14, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x70, 0x0a, 0x1d, 0x63, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, - 0x52, 0x1a, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x34, 0x0a, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x44, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x62, 0x61, 0x72, 0x65, - 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x11, 0x62, 0x61, 0x72, - 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x6d, - 0x0a, 0x1c, 0x62, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x1c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x19, 0x62, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x77, 0x0a, - 0x20, 0x62, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x57, 0x0a, 0x14, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x16, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x70, 0x0a, + 0x1d, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x17, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x48, 0x00, 0x52, 0x1a, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x34, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x62, + 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, 0x65, 0x4d, + 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x11, + 0x62, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x12, 0x6d, 0x0a, 0x1c, 0x62, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, - 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, 0x52, 0x1c, 0x62, 0x61, 0x72, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, 0x74, 0x61, 0x6c, - 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x4a, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, - 0x48, 0x00, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x65, - 0x6e, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x1f, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x06, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x18, 0x21, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x48, 0x00, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x4b, 0x0a, 0x10, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x49, 0x50, 0x50, 0x6f, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x3e, 0x0a, 0x0b, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x48, 0x00, 0x52, 0x0a, 0x65, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x12, 0x5d, 0x0a, 0x16, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, - 0x65, 0x6e, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x19, 0x62, 0x61, 0x72, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x12, 0x77, 0x0a, 0x20, 0x62, 0x61, 0x72, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x5f, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, + 0x69, 0x74, 0x65, 0x6d, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x72, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x48, 0x00, 0x52, 0x1c, 0x62, 0x61, 0x72, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x6c, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x4a, 0x0a, 0x0f, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x1e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x42, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x31, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, + 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x20, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x53, 0x0a, 0x12, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, + 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x48, 0x00, 0x52, 0x11, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, + 0x4b, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x5f, 0x70, + 0x6f, 0x6f, 0x6c, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x14, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x41, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x5f, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x50, 0x6f, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x0e, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x3e, 0x0a, 0x0b, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x18, 0x23, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x48, 0x00, + 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x12, 0x5d, 0x0a, 0x16, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x50, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, + 0x70, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0b, 0x6e, + 0x61, 0x74, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x41, 0x54, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x48, 0x00, 0x52, + 0x0a, 0x6e, 0x61, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x4a, 0x0a, 0x0f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x26, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x31, 0x0a, + 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x41, 0x54, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x48, 0x00, 0x52, 0x0a, 0x6e, 0x61, - 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x4a, 0x0a, 0x0f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x26, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, - 0x74, 0x69, 0x65, 0x72, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, - 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x4a, 0x04, 0x08, 0x11, 0x10, - 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, 0x19, 0x10, 0x1a, 0x2a, 0xa4, 0x01, - 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, - 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x4c, - 0x45, 0x44, 0x10, 0x04, 0x42, 0xde, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, - 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, - 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, - 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, - 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, - 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, - 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x06, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x04, 0x08, 0x10, 0x10, + 0x11, 0x4a, 0x04, 0x08, 0x11, 0x10, 0x12, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x4a, 0x04, 0x08, + 0x19, 0x10, 0x1a, 0x2a, 0xa4, 0x01, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, + 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, + 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, + 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, + 0x53, 0x49, 0x47, 0x4e, 0x41, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x42, 0xde, 0x01, 0x0a, 0x13, 0x63, + 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x42, 0x0e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, + 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, }) var file_osac_private_v1_event_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) @@ -1880,6 +1930,7 @@ var file_osac_private_v1_event_type_proto_goTypes = []any{ (*ClusterVersion)(nil), // 30: osac.private.v1.ClusterVersion (*StorageTier)(nil), // 31: osac.private.v1.StorageTier (*Secret)(nil), // 32: osac.private.v1.Secret + (*Volume)(nil), // 33: osac.private.v1.Volume } var file_osac_private_v1_event_type_proto_depIdxs = []int32{ 0, // 0: osac.private.v1.Event.type:type_name -> osac.private.v1.EventType @@ -1914,11 +1965,12 @@ var file_osac_private_v1_event_type_proto_depIdxs = []int32{ 30, // 29: osac.private.v1.Event.cluster_version:type_name -> osac.private.v1.ClusterVersion 31, // 30: osac.private.v1.Event.storage_tier:type_name -> osac.private.v1.StorageTier 32, // 31: osac.private.v1.Event.secret:type_name -> osac.private.v1.Secret - 32, // [32:32] is the sub-list for method output_type - 32, // [32:32] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 33, // 32: osac.private.v1.Event.volume:type_name -> osac.private.v1.Volume + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_osac_private_v1_event_type_proto_init() } @@ -1957,6 +2009,7 @@ func file_osac_private_v1_event_type_proto_init() { file_osac_private_v1_subnet_type_proto_init() file_osac_private_v1_user_type_proto_init() file_osac_private_v1_virtual_network_type_proto_init() + file_osac_private_v1_volume_type_proto_init() file_osac_private_v1_event_type_proto_msgTypes[0].OneofWrappers = []any{ (*event_Cluster)(nil), (*event_ClusterTemplate)(nil), @@ -1989,6 +2042,7 @@ func file_osac_private_v1_event_type_proto_init() { (*event_ClusterVersion)(nil), (*event_StorageTier)(nil), (*event_Secret)(nil), + (*event_Volume)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go new file mode 100644 index 000000000..1a818e07b --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go @@ -0,0 +1,890 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.5 +// protoc (unknown) +// source: osac/private/v1/volume_type.proto + +//go:build !protoopaque + +package privatev1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + unsafe "unsafe" +) + +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) +) + +// Lifecycle states for Volume resources. +type VolumeState int32 + +const ( + // State is unknown or has not been determined yet. + VolumeState_VOLUME_STATE_UNSPECIFIED VolumeState = 0 + // The volume is being provisioned on the storage backend. + VolumeState_VOLUME_STATE_CREATING VolumeState = 1 + // The volume has been provisioned and is ready for use. + VolumeState_VOLUME_STATE_AVAILABLE VolumeState = 2 + // The volume provisioning has permanently failed after max retries and requires admin intervention. + VolumeState_VOLUME_STATE_FAILED VolumeState = 3 + // The volume is being deprovisioned from the storage backend. + VolumeState_VOLUME_STATE_DELETING VolumeState = 4 + // The volume has been fully deprovisioned and the record is archived. + VolumeState_VOLUME_STATE_DELETED VolumeState = 5 +) + +// Enum value maps for VolumeState. +var ( + VolumeState_name = map[int32]string{ + 0: "VOLUME_STATE_UNSPECIFIED", + 1: "VOLUME_STATE_CREATING", + 2: "VOLUME_STATE_AVAILABLE", + 3: "VOLUME_STATE_FAILED", + 4: "VOLUME_STATE_DELETING", + 5: "VOLUME_STATE_DELETED", + } + VolumeState_value = map[string]int32{ + "VOLUME_STATE_UNSPECIFIED": 0, + "VOLUME_STATE_CREATING": 1, + "VOLUME_STATE_AVAILABLE": 2, + "VOLUME_STATE_FAILED": 3, + "VOLUME_STATE_DELETING": 4, + "VOLUME_STATE_DELETED": 5, + } +) + +func (x VolumeState) Enum() *VolumeState { + p := new(VolumeState) + *p = x + return p +} + +func (x VolumeState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VolumeState) Descriptor() protoreflect.EnumDescriptor { + return file_osac_private_v1_volume_type_proto_enumTypes[0].Descriptor() +} + +func (VolumeState) Type() protoreflect.EnumType { + return &file_osac_private_v1_volume_type_proto_enumTypes[0] +} + +func (x VolumeState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Identifies the PVC that triggered the volume creation. +type PVCReference struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + // Name of the PersistentVolumeClaim. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Namespace of the PersistentVolumeClaim. + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // Cluster where the PersistentVolumeClaim exists. + Cluster string `protobuf:"bytes,3,opt,name=cluster,proto3" json:"cluster,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PVCReference) Reset() { + *x = PVCReference{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PVCReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PVCReference) ProtoMessage() {} + +func (x *PVCReference) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *PVCReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PVCReference) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *PVCReference) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +func (x *PVCReference) SetName(v string) { + x.Name = v +} + +func (x *PVCReference) SetNamespace(v string) { + x.Namespace = v +} + +func (x *PVCReference) SetCluster(v string) { + x.Cluster = v +} + +type PVCReference_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Name of the PersistentVolumeClaim. + Name string + // Namespace of the PersistentVolumeClaim. + Namespace string + // Cluster where the PersistentVolumeClaim exists. + Cluster string +} + +func (b0 PVCReference_builder) Build() *PVCReference { + m0 := &PVCReference{} + b, x := &b0, m0 + _, _ = b, x + x.Name = b.Name + x.Namespace = b.Namespace + x.Cluster = b.Cluster + return m0 +} + +// Identifies the PV created for a volume. +type PVReference struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + // Name of the PersistentVolume. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Cluster where the PersistentVolume exists. + Cluster string `protobuf:"bytes,2,opt,name=cluster,proto3" json:"cluster,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PVReference) Reset() { + *x = PVReference{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PVReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PVReference) ProtoMessage() {} + +func (x *PVReference) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *PVReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PVReference) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +func (x *PVReference) SetName(v string) { + x.Name = v +} + +func (x *PVReference) SetCluster(v string) { + x.Cluster = v +} + +type PVReference_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Name of the PersistentVolume. + Name string + // Cluster where the PersistentVolume exists. + Cluster string +} + +func (b0 PVReference_builder) Build() *PVReference { + m0 := &PVReference{} + b, x := &b0, m0 + _, _ = b, x + x.Name = b.Name + x.Cluster = b.Cluster + return m0 +} + +// Represents a block storage volume managed by the OSAC storage control plane. +// +// Volumes are tenant-scoped resources that represent storage provisioned on a backend storage array +// through the OSAC CSI driver. The fulfillment-service tracks volume inventory in PostgreSQL and +// reconciles Volume CRs on the hub cluster. The osac-operator Volume controller handles vendor +// provisioning via the backend's CSI controller. +// +// Volumes are created through the private API, typically by the OSAC CSI driver in response to a +// PVC on a tenant cluster. The spec captures the user's requested configuration (tier, size, +// access mode), while the status tracks the system-resolved state (vendor volume ID, backend, +// protocol). +type Volume struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + // Unique identifier of the volume. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Metadata of the volume. + Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Desired configuration of the volume (immutable after creation). + Spec *VolumeSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` + // Current operational status of the volume. + Status *VolumeStatus `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Volume) Reset() { + *x = Volume{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Volume) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Volume) ProtoMessage() {} + +func (x *Volume) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *Volume) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Volume) GetMetadata() *Metadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *Volume) GetSpec() *VolumeSpec { + if x != nil { + return x.Spec + } + return nil +} + +func (x *Volume) GetStatus() *VolumeStatus { + if x != nil { + return x.Status + } + return nil +} + +func (x *Volume) SetId(v string) { + x.Id = v +} + +func (x *Volume) SetMetadata(v *Metadata) { + x.Metadata = v +} + +func (x *Volume) SetSpec(v *VolumeSpec) { + x.Spec = v +} + +func (x *Volume) SetStatus(v *VolumeStatus) { + x.Status = v +} + +func (x *Volume) HasMetadata() bool { + if x == nil { + return false + } + return x.Metadata != nil +} + +func (x *Volume) HasSpec() bool { + if x == nil { + return false + } + return x.Spec != nil +} + +func (x *Volume) HasStatus() bool { + if x == nil { + return false + } + return x.Status != nil +} + +func (x *Volume) ClearMetadata() { + x.Metadata = nil +} + +func (x *Volume) ClearSpec() { + x.Spec = nil +} + +func (x *Volume) ClearStatus() { + x.Status = nil +} + +type Volume_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Unique identifier of the volume. + Id string + // Metadata of the volume. + Metadata *Metadata + // Desired configuration of the volume (immutable after creation). + Spec *VolumeSpec + // Current operational status of the volume. + Status *VolumeStatus +} + +func (b0 Volume_builder) Build() *Volume { + m0 := &Volume{} + b, x := &b0, m0 + _, _ = b, x + x.Id = b.Id + x.Metadata = b.Metadata + x.Spec = b.Spec + x.Status = b.Status + return m0 +} + +// Defines the desired configuration for a Volume. All fields are immutable after creation. +type VolumeSpec struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + // Name of the StorageTier that determines which backend and protocol serve this volume. + StorageTier string `protobuf:"bytes,1,opt,name=storage_tier,json=storageTier,proto3" json:"storage_tier,omitempty"` + // Requested storage capacity in gibibytes (GiB). + SizeGib int64 `protobuf:"varint,2,opt,name=size_gib,json=sizeGib,proto3" json:"size_gib,omitempty"` + // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). + AccessMode string `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"` + // Name of the cluster where the PVC that triggered this volume exists. + Cluster string `protobuf:"bytes,4,opt,name=cluster,proto3" json:"cluster,omitempty"` + // Reference to the PVC that triggered this volume creation. Set by the CSI driver. + // Empty for API-driven volume creation. + PvcRef *PVCReference `protobuf:"bytes,5,opt,name=pvc_ref,json=pvcRef,proto3" json:"pvc_ref,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeSpec) Reset() { + *x = VolumeSpec{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumeSpec) ProtoMessage() {} + +func (x *VolumeSpec) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumeSpec) GetStorageTier() string { + if x != nil { + return x.StorageTier + } + return "" +} + +func (x *VolumeSpec) GetSizeGib() int64 { + if x != nil { + return x.SizeGib + } + return 0 +} + +func (x *VolumeSpec) GetAccessMode() string { + if x != nil { + return x.AccessMode + } + return "" +} + +func (x *VolumeSpec) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +func (x *VolumeSpec) GetPvcRef() *PVCReference { + if x != nil { + return x.PvcRef + } + return nil +} + +func (x *VolumeSpec) SetStorageTier(v string) { + x.StorageTier = v +} + +func (x *VolumeSpec) SetSizeGib(v int64) { + x.SizeGib = v +} + +func (x *VolumeSpec) SetAccessMode(v string) { + x.AccessMode = v +} + +func (x *VolumeSpec) SetCluster(v string) { + x.Cluster = v +} + +func (x *VolumeSpec) SetPvcRef(v *PVCReference) { + x.PvcRef = v +} + +func (x *VolumeSpec) HasPvcRef() bool { + if x == nil { + return false + } + return x.PvcRef != nil +} + +func (x *VolumeSpec) ClearPvcRef() { + x.PvcRef = nil +} + +type VolumeSpec_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Name of the StorageTier that determines which backend and protocol serve this volume. + StorageTier string + // Requested storage capacity in gibibytes (GiB). + SizeGib int64 + // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). + AccessMode string + // Name of the cluster where the PVC that triggered this volume exists. + Cluster string + // Reference to the PVC that triggered this volume creation. Set by the CSI driver. + // Empty for API-driven volume creation. + PvcRef *PVCReference +} + +func (b0 VolumeSpec_builder) Build() *VolumeSpec { + m0 := &VolumeSpec{} + b, x := &b0, m0 + _, _ = b, x + x.StorageTier = b.StorageTier + x.SizeGib = b.SizeGib + x.AccessMode = b.AccessMode + x.Cluster = b.Cluster + x.PvcRef = b.PvcRef + return m0 +} + +// Represents the current operational state of a Volume. +type VolumeStatus struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + // Current lifecycle state of the volume. + State VolumeState `protobuf:"varint,1,opt,name=state,proto3,enum=osac.private.v1.VolumeState" json:"state,omitempty"` + // Human-readable message providing additional details about the current state. + Message *string `protobuf:"bytes,2,opt,name=message,proto3,oneof" json:"message,omitempty"` + // Opaque identifier assigned by the vendor storage array. Set by the osac-operator after vendor + // CSI CreateVolume succeeds. + VendorVolumeId string `protobuf:"bytes,3,opt,name=vendor_volume_id,json=vendorVolumeId,proto3" json:"vendor_volume_id,omitempty"` + // Name of the StorageBackend that serves this volume. Resolved during tier resolution at + // creation time. Visible only through the private API. + Backend string `protobuf:"bytes,4,opt,name=backend,proto3" json:"backend,omitempty"` + // Storage protocol used for this volume (e.g., NFS, BLOCK). Resolved during tier resolution at + // creation time. Visible only through the private API. + Protocol string `protobuf:"bytes,5,opt,name=protocol,proto3" json:"protocol,omitempty"` + // Operator-confirmed reference to the PVC on the tenant cluster. + PvcRef *PVCReference `protobuf:"bytes,6,opt,name=pvc_ref,json=pvcRef,proto3" json:"pvc_ref,omitempty"` + // Reference to the PV created for this volume on the tenant cluster. + PvRef *PVReference `protobuf:"bytes,7,opt,name=pv_ref,json=pvRef,proto3" json:"pv_ref,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeStatus) Reset() { + *x = VolumeStatus{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumeStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumeStatus) ProtoMessage() {} + +func (x *VolumeStatus) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumeStatus) GetState() VolumeState { + if x != nil { + return x.State + } + return VolumeState_VOLUME_STATE_UNSPECIFIED +} + +func (x *VolumeStatus) GetMessage() string { + if x != nil && x.Message != nil { + return *x.Message + } + return "" +} + +func (x *VolumeStatus) GetVendorVolumeId() string { + if x != nil { + return x.VendorVolumeId + } + return "" +} + +func (x *VolumeStatus) GetBackend() string { + if x != nil { + return x.Backend + } + return "" +} + +func (x *VolumeStatus) GetProtocol() string { + if x != nil { + return x.Protocol + } + return "" +} + +func (x *VolumeStatus) GetPvcRef() *PVCReference { + if x != nil { + return x.PvcRef + } + return nil +} + +func (x *VolumeStatus) GetPvRef() *PVReference { + if x != nil { + return x.PvRef + } + return nil +} + +func (x *VolumeStatus) SetState(v VolumeState) { + x.State = v +} + +func (x *VolumeStatus) SetMessage(v string) { + x.Message = &v +} + +func (x *VolumeStatus) SetVendorVolumeId(v string) { + x.VendorVolumeId = v +} + +func (x *VolumeStatus) SetBackend(v string) { + x.Backend = v +} + +func (x *VolumeStatus) SetProtocol(v string) { + x.Protocol = v +} + +func (x *VolumeStatus) SetPvcRef(v *PVCReference) { + x.PvcRef = v +} + +func (x *VolumeStatus) SetPvRef(v *PVReference) { + x.PvRef = v +} + +func (x *VolumeStatus) HasMessage() bool { + if x == nil { + return false + } + return x.Message != nil +} + +func (x *VolumeStatus) HasPvcRef() bool { + if x == nil { + return false + } + return x.PvcRef != nil +} + +func (x *VolumeStatus) HasPvRef() bool { + if x == nil { + return false + } + return x.PvRef != nil +} + +func (x *VolumeStatus) ClearMessage() { + x.Message = nil +} + +func (x *VolumeStatus) ClearPvcRef() { + x.PvcRef = nil +} + +func (x *VolumeStatus) ClearPvRef() { + x.PvRef = nil +} + +type VolumeStatus_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Current lifecycle state of the volume. + State VolumeState + // Human-readable message providing additional details about the current state. + Message *string + // Opaque identifier assigned by the vendor storage array. Set by the osac-operator after vendor + // CSI CreateVolume succeeds. + VendorVolumeId string + // Name of the StorageBackend that serves this volume. Resolved during tier resolution at + // creation time. Visible only through the private API. + Backend string + // Storage protocol used for this volume (e.g., NFS, BLOCK). Resolved during tier resolution at + // creation time. Visible only through the private API. + Protocol string + // Operator-confirmed reference to the PVC on the tenant cluster. + PvcRef *PVCReference + // Reference to the PV created for this volume on the tenant cluster. + PvRef *PVReference +} + +func (b0 VolumeStatus_builder) Build() *VolumeStatus { + m0 := &VolumeStatus{} + b, x := &b0, m0 + _, _ = b, x + x.State = b.State + x.Message = b.Message + x.VendorVolumeId = b.VendorVolumeId + x.Backend = b.Backend + x.Protocol = b.Protocol + x.PvcRef = b.PvcRef + x.PvRef = b.PvRef + return m0 +} + +var File_osac_private_v1_volume_type_proto protoreflect.FileDescriptor + +var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ + 0x0a, 0x21, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x22, 0xb7, 0x01, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xbd, 0x01, 0x0a, + 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, + 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x73, 0x69, 0x7a, 0x65, 0x47, 0x69, 0x62, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x22, 0xba, 0x02, 0x0a, + 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, + 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, + 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, + 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, + 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, + 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, + 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, + 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, + 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, + 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) + +var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_osac_private_v1_volume_type_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_osac_private_v1_volume_type_proto_goTypes = []any{ + (VolumeState)(0), // 0: osac.private.v1.VolumeState + (*PVCReference)(nil), // 1: osac.private.v1.PVCReference + (*PVReference)(nil), // 2: osac.private.v1.PVReference + (*Volume)(nil), // 3: osac.private.v1.Volume + (*VolumeSpec)(nil), // 4: osac.private.v1.VolumeSpec + (*VolumeStatus)(nil), // 5: osac.private.v1.VolumeStatus + (*Metadata)(nil), // 6: osac.private.v1.Metadata +} +var file_osac_private_v1_volume_type_proto_depIdxs = []int32{ + 6, // 0: osac.private.v1.Volume.metadata:type_name -> osac.private.v1.Metadata + 4, // 1: osac.private.v1.Volume.spec:type_name -> osac.private.v1.VolumeSpec + 5, // 2: osac.private.v1.Volume.status:type_name -> osac.private.v1.VolumeStatus + 1, // 3: osac.private.v1.VolumeSpec.pvc_ref:type_name -> osac.private.v1.PVCReference + 0, // 4: osac.private.v1.VolumeStatus.state:type_name -> osac.private.v1.VolumeState + 1, // 5: osac.private.v1.VolumeStatus.pvc_ref:type_name -> osac.private.v1.PVCReference + 2, // 6: osac.private.v1.VolumeStatus.pv_ref:type_name -> osac.private.v1.PVReference + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_osac_private_v1_volume_type_proto_init() } +func file_osac_private_v1_volume_type_proto_init() { + if File_osac_private_v1_volume_type_proto != nil { + return + } + file_osac_private_v1_metadata_type_proto_init() + file_osac_private_v1_volume_type_proto_msgTypes[4].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_volume_type_proto_rawDesc), len(file_osac_private_v1_volume_type_proto_rawDesc)), + NumEnums: 1, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_osac_private_v1_volume_type_proto_goTypes, + DependencyIndexes: file_osac_private_v1_volume_type_proto_depIdxs, + EnumInfos: file_osac_private_v1_volume_type_proto_enumTypes, + MessageInfos: file_osac_private_v1_volume_type_proto_msgTypes, + }.Build() + File_osac_private_v1_volume_type_proto = out.File + file_osac_private_v1_volume_type_proto_goTypes = nil + file_osac_private_v1_volume_type_proto_depIdxs = nil +} diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go new file mode 100644 index 000000000..64f5b7b3d --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go @@ -0,0 +1,875 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.5 +// protoc (unknown) +// source: osac/private/v1/volume_type.proto + +//go:build protoopaque + +package privatev1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + unsafe "unsafe" +) + +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) +) + +// Lifecycle states for Volume resources. +type VolumeState int32 + +const ( + // State is unknown or has not been determined yet. + VolumeState_VOLUME_STATE_UNSPECIFIED VolumeState = 0 + // The volume is being provisioned on the storage backend. + VolumeState_VOLUME_STATE_CREATING VolumeState = 1 + // The volume has been provisioned and is ready for use. + VolumeState_VOLUME_STATE_AVAILABLE VolumeState = 2 + // The volume provisioning has permanently failed after max retries and requires admin intervention. + VolumeState_VOLUME_STATE_FAILED VolumeState = 3 + // The volume is being deprovisioned from the storage backend. + VolumeState_VOLUME_STATE_DELETING VolumeState = 4 + // The volume has been fully deprovisioned and the record is archived. + VolumeState_VOLUME_STATE_DELETED VolumeState = 5 +) + +// Enum value maps for VolumeState. +var ( + VolumeState_name = map[int32]string{ + 0: "VOLUME_STATE_UNSPECIFIED", + 1: "VOLUME_STATE_CREATING", + 2: "VOLUME_STATE_AVAILABLE", + 3: "VOLUME_STATE_FAILED", + 4: "VOLUME_STATE_DELETING", + 5: "VOLUME_STATE_DELETED", + } + VolumeState_value = map[string]int32{ + "VOLUME_STATE_UNSPECIFIED": 0, + "VOLUME_STATE_CREATING": 1, + "VOLUME_STATE_AVAILABLE": 2, + "VOLUME_STATE_FAILED": 3, + "VOLUME_STATE_DELETING": 4, + "VOLUME_STATE_DELETED": 5, + } +) + +func (x VolumeState) Enum() *VolumeState { + p := new(VolumeState) + *p = x + return p +} + +func (x VolumeState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VolumeState) Descriptor() protoreflect.EnumDescriptor { + return file_osac_private_v1_volume_type_proto_enumTypes[0].Descriptor() +} + +func (VolumeState) Type() protoreflect.EnumType { + return &file_osac_private_v1_volume_type_proto_enumTypes[0] +} + +func (x VolumeState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Identifies the PVC that triggered the volume creation. +type PVCReference struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Name string `protobuf:"bytes,1,opt,name=name,proto3"` + xxx_hidden_Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3"` + xxx_hidden_Cluster string `protobuf:"bytes,3,opt,name=cluster,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PVCReference) Reset() { + *x = PVCReference{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PVCReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PVCReference) ProtoMessage() {} + +func (x *PVCReference) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *PVCReference) GetName() string { + if x != nil { + return x.xxx_hidden_Name + } + return "" +} + +func (x *PVCReference) GetNamespace() string { + if x != nil { + return x.xxx_hidden_Namespace + } + return "" +} + +func (x *PVCReference) GetCluster() string { + if x != nil { + return x.xxx_hidden_Cluster + } + return "" +} + +func (x *PVCReference) SetName(v string) { + x.xxx_hidden_Name = v +} + +func (x *PVCReference) SetNamespace(v string) { + x.xxx_hidden_Namespace = v +} + +func (x *PVCReference) SetCluster(v string) { + x.xxx_hidden_Cluster = v +} + +type PVCReference_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Name of the PersistentVolumeClaim. + Name string + // Namespace of the PersistentVolumeClaim. + Namespace string + // Cluster where the PersistentVolumeClaim exists. + Cluster string +} + +func (b0 PVCReference_builder) Build() *PVCReference { + m0 := &PVCReference{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Name = b.Name + x.xxx_hidden_Namespace = b.Namespace + x.xxx_hidden_Cluster = b.Cluster + return m0 +} + +// Identifies the PV created for a volume. +type PVReference struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Name string `protobuf:"bytes,1,opt,name=name,proto3"` + xxx_hidden_Cluster string `protobuf:"bytes,2,opt,name=cluster,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PVReference) Reset() { + *x = PVReference{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PVReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PVReference) ProtoMessage() {} + +func (x *PVReference) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *PVReference) GetName() string { + if x != nil { + return x.xxx_hidden_Name + } + return "" +} + +func (x *PVReference) GetCluster() string { + if x != nil { + return x.xxx_hidden_Cluster + } + return "" +} + +func (x *PVReference) SetName(v string) { + x.xxx_hidden_Name = v +} + +func (x *PVReference) SetCluster(v string) { + x.xxx_hidden_Cluster = v +} + +type PVReference_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Name of the PersistentVolume. + Name string + // Cluster where the PersistentVolume exists. + Cluster string +} + +func (b0 PVReference_builder) Build() *PVReference { + m0 := &PVReference{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Name = b.Name + x.xxx_hidden_Cluster = b.Cluster + return m0 +} + +// Represents a block storage volume managed by the OSAC storage control plane. +// +// Volumes are tenant-scoped resources that represent storage provisioned on a backend storage array +// through the OSAC CSI driver. The fulfillment-service tracks volume inventory in PostgreSQL and +// reconciles Volume CRs on the hub cluster. The osac-operator Volume controller handles vendor +// provisioning via the backend's CSI controller. +// +// Volumes are created through the private API, typically by the OSAC CSI driver in response to a +// PVC on a tenant cluster. The spec captures the user's requested configuration (tier, size, +// access mode), while the status tracks the system-resolved state (vendor volume ID, backend, +// protocol). +type Volume struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Id string `protobuf:"bytes,1,opt,name=id,proto3"` + xxx_hidden_Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3"` + xxx_hidden_Spec *VolumeSpec `protobuf:"bytes,3,opt,name=spec,proto3"` + xxx_hidden_Status *VolumeStatus `protobuf:"bytes,4,opt,name=status,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Volume) Reset() { + *x = Volume{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Volume) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Volume) ProtoMessage() {} + +func (x *Volume) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *Volume) GetId() string { + if x != nil { + return x.xxx_hidden_Id + } + return "" +} + +func (x *Volume) GetMetadata() *Metadata { + if x != nil { + return x.xxx_hidden_Metadata + } + return nil +} + +func (x *Volume) GetSpec() *VolumeSpec { + if x != nil { + return x.xxx_hidden_Spec + } + return nil +} + +func (x *Volume) GetStatus() *VolumeStatus { + if x != nil { + return x.xxx_hidden_Status + } + return nil +} + +func (x *Volume) SetId(v string) { + x.xxx_hidden_Id = v +} + +func (x *Volume) SetMetadata(v *Metadata) { + x.xxx_hidden_Metadata = v +} + +func (x *Volume) SetSpec(v *VolumeSpec) { + x.xxx_hidden_Spec = v +} + +func (x *Volume) SetStatus(v *VolumeStatus) { + x.xxx_hidden_Status = v +} + +func (x *Volume) HasMetadata() bool { + if x == nil { + return false + } + return x.xxx_hidden_Metadata != nil +} + +func (x *Volume) HasSpec() bool { + if x == nil { + return false + } + return x.xxx_hidden_Spec != nil +} + +func (x *Volume) HasStatus() bool { + if x == nil { + return false + } + return x.xxx_hidden_Status != nil +} + +func (x *Volume) ClearMetadata() { + x.xxx_hidden_Metadata = nil +} + +func (x *Volume) ClearSpec() { + x.xxx_hidden_Spec = nil +} + +func (x *Volume) ClearStatus() { + x.xxx_hidden_Status = nil +} + +type Volume_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Unique identifier of the volume. + Id string + // Metadata of the volume. + Metadata *Metadata + // Desired configuration of the volume (immutable after creation). + Spec *VolumeSpec + // Current operational status of the volume. + Status *VolumeStatus +} + +func (b0 Volume_builder) Build() *Volume { + m0 := &Volume{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Id = b.Id + x.xxx_hidden_Metadata = b.Metadata + x.xxx_hidden_Spec = b.Spec + x.xxx_hidden_Status = b.Status + return m0 +} + +// Defines the desired configuration for a Volume. All fields are immutable after creation. +type VolumeSpec struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_StorageTier string `protobuf:"bytes,1,opt,name=storage_tier,json=storageTier,proto3"` + xxx_hidden_SizeGib int64 `protobuf:"varint,2,opt,name=size_gib,json=sizeGib,proto3"` + xxx_hidden_AccessMode string `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3"` + xxx_hidden_Cluster string `protobuf:"bytes,4,opt,name=cluster,proto3"` + xxx_hidden_PvcRef *PVCReference `protobuf:"bytes,5,opt,name=pvc_ref,json=pvcRef,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeSpec) Reset() { + *x = VolumeSpec{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumeSpec) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumeSpec) ProtoMessage() {} + +func (x *VolumeSpec) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumeSpec) GetStorageTier() string { + if x != nil { + return x.xxx_hidden_StorageTier + } + return "" +} + +func (x *VolumeSpec) GetSizeGib() int64 { + if x != nil { + return x.xxx_hidden_SizeGib + } + return 0 +} + +func (x *VolumeSpec) GetAccessMode() string { + if x != nil { + return x.xxx_hidden_AccessMode + } + return "" +} + +func (x *VolumeSpec) GetCluster() string { + if x != nil { + return x.xxx_hidden_Cluster + } + return "" +} + +func (x *VolumeSpec) GetPvcRef() *PVCReference { + if x != nil { + return x.xxx_hidden_PvcRef + } + return nil +} + +func (x *VolumeSpec) SetStorageTier(v string) { + x.xxx_hidden_StorageTier = v +} + +func (x *VolumeSpec) SetSizeGib(v int64) { + x.xxx_hidden_SizeGib = v +} + +func (x *VolumeSpec) SetAccessMode(v string) { + x.xxx_hidden_AccessMode = v +} + +func (x *VolumeSpec) SetCluster(v string) { + x.xxx_hidden_Cluster = v +} + +func (x *VolumeSpec) SetPvcRef(v *PVCReference) { + x.xxx_hidden_PvcRef = v +} + +func (x *VolumeSpec) HasPvcRef() bool { + if x == nil { + return false + } + return x.xxx_hidden_PvcRef != nil +} + +func (x *VolumeSpec) ClearPvcRef() { + x.xxx_hidden_PvcRef = nil +} + +type VolumeSpec_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Name of the StorageTier that determines which backend and protocol serve this volume. + StorageTier string + // Requested storage capacity in gibibytes (GiB). + SizeGib int64 + // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). + AccessMode string + // Name of the cluster where the PVC that triggered this volume exists. + Cluster string + // Reference to the PVC that triggered this volume creation. Set by the CSI driver. + // Empty for API-driven volume creation. + PvcRef *PVCReference +} + +func (b0 VolumeSpec_builder) Build() *VolumeSpec { + m0 := &VolumeSpec{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_StorageTier = b.StorageTier + x.xxx_hidden_SizeGib = b.SizeGib + x.xxx_hidden_AccessMode = b.AccessMode + x.xxx_hidden_Cluster = b.Cluster + x.xxx_hidden_PvcRef = b.PvcRef + return m0 +} + +// Represents the current operational state of a Volume. +type VolumeStatus struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_State VolumeState `protobuf:"varint,1,opt,name=state,proto3,enum=osac.private.v1.VolumeState"` + xxx_hidden_Message *string `protobuf:"bytes,2,opt,name=message,proto3,oneof"` + xxx_hidden_VendorVolumeId string `protobuf:"bytes,3,opt,name=vendor_volume_id,json=vendorVolumeId,proto3"` + xxx_hidden_Backend string `protobuf:"bytes,4,opt,name=backend,proto3"` + xxx_hidden_Protocol string `protobuf:"bytes,5,opt,name=protocol,proto3"` + xxx_hidden_PvcRef *PVCReference `protobuf:"bytes,6,opt,name=pvc_ref,json=pvcRef,proto3"` + xxx_hidden_PvRef *PVReference `protobuf:"bytes,7,opt,name=pv_ref,json=pvRef,proto3"` + XXX_raceDetectHookData protoimpl.RaceDetectHookData + XXX_presence [1]uint32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumeStatus) Reset() { + *x = VolumeStatus{} + mi := &file_osac_private_v1_volume_type_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumeStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumeStatus) ProtoMessage() {} + +func (x *VolumeStatus) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volume_type_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumeStatus) GetState() VolumeState { + if x != nil { + return x.xxx_hidden_State + } + return VolumeState_VOLUME_STATE_UNSPECIFIED +} + +func (x *VolumeStatus) GetMessage() string { + if x != nil { + if x.xxx_hidden_Message != nil { + return *x.xxx_hidden_Message + } + return "" + } + return "" +} + +func (x *VolumeStatus) GetVendorVolumeId() string { + if x != nil { + return x.xxx_hidden_VendorVolumeId + } + return "" +} + +func (x *VolumeStatus) GetBackend() string { + if x != nil { + return x.xxx_hidden_Backend + } + return "" +} + +func (x *VolumeStatus) GetProtocol() string { + if x != nil { + return x.xxx_hidden_Protocol + } + return "" +} + +func (x *VolumeStatus) GetPvcRef() *PVCReference { + if x != nil { + return x.xxx_hidden_PvcRef + } + return nil +} + +func (x *VolumeStatus) GetPvRef() *PVReference { + if x != nil { + return x.xxx_hidden_PvRef + } + return nil +} + +func (x *VolumeStatus) SetState(v VolumeState) { + x.xxx_hidden_State = v +} + +func (x *VolumeStatus) SetMessage(v string) { + x.xxx_hidden_Message = &v + protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 7) +} + +func (x *VolumeStatus) SetVendorVolumeId(v string) { + x.xxx_hidden_VendorVolumeId = v +} + +func (x *VolumeStatus) SetBackend(v string) { + x.xxx_hidden_Backend = v +} + +func (x *VolumeStatus) SetProtocol(v string) { + x.xxx_hidden_Protocol = v +} + +func (x *VolumeStatus) SetPvcRef(v *PVCReference) { + x.xxx_hidden_PvcRef = v +} + +func (x *VolumeStatus) SetPvRef(v *PVReference) { + x.xxx_hidden_PvRef = v +} + +func (x *VolumeStatus) HasMessage() bool { + if x == nil { + return false + } + return protoimpl.X.Present(&(x.XXX_presence[0]), 1) +} + +func (x *VolumeStatus) HasPvcRef() bool { + if x == nil { + return false + } + return x.xxx_hidden_PvcRef != nil +} + +func (x *VolumeStatus) HasPvRef() bool { + if x == nil { + return false + } + return x.xxx_hidden_PvRef != nil +} + +func (x *VolumeStatus) ClearMessage() { + protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1) + x.xxx_hidden_Message = nil +} + +func (x *VolumeStatus) ClearPvcRef() { + x.xxx_hidden_PvcRef = nil +} + +func (x *VolumeStatus) ClearPvRef() { + x.xxx_hidden_PvRef = nil +} + +type VolumeStatus_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Current lifecycle state of the volume. + State VolumeState + // Human-readable message providing additional details about the current state. + Message *string + // Opaque identifier assigned by the vendor storage array. Set by the osac-operator after vendor + // CSI CreateVolume succeeds. + VendorVolumeId string + // Name of the StorageBackend that serves this volume. Resolved during tier resolution at + // creation time. Visible only through the private API. + Backend string + // Storage protocol used for this volume (e.g., NFS, BLOCK). Resolved during tier resolution at + // creation time. Visible only through the private API. + Protocol string + // Operator-confirmed reference to the PVC on the tenant cluster. + PvcRef *PVCReference + // Reference to the PV created for this volume on the tenant cluster. + PvRef *PVReference +} + +func (b0 VolumeStatus_builder) Build() *VolumeStatus { + m0 := &VolumeStatus{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_State = b.State + if b.Message != nil { + protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 7) + x.xxx_hidden_Message = b.Message + } + x.xxx_hidden_VendorVolumeId = b.VendorVolumeId + x.xxx_hidden_Backend = b.Backend + x.xxx_hidden_Protocol = b.Protocol + x.xxx_hidden_PvcRef = b.PvcRef + x.xxx_hidden_PvRef = b.PvRef + return m0 +} + +var File_osac_private_v1_volume_type_proto protoreflect.FileDescriptor + +var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ + 0x0a, 0x21, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x22, 0xb7, 0x01, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xbd, 0x01, 0x0a, + 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, + 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x07, 0x73, 0x69, 0x7a, 0x65, 0x47, 0x69, 0x62, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x22, 0xba, 0x02, 0x0a, + 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, + 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, + 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, + 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, + 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, + 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, + 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, + 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, + 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, + 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) + +var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_osac_private_v1_volume_type_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_osac_private_v1_volume_type_proto_goTypes = []any{ + (VolumeState)(0), // 0: osac.private.v1.VolumeState + (*PVCReference)(nil), // 1: osac.private.v1.PVCReference + (*PVReference)(nil), // 2: osac.private.v1.PVReference + (*Volume)(nil), // 3: osac.private.v1.Volume + (*VolumeSpec)(nil), // 4: osac.private.v1.VolumeSpec + (*VolumeStatus)(nil), // 5: osac.private.v1.VolumeStatus + (*Metadata)(nil), // 6: osac.private.v1.Metadata +} +var file_osac_private_v1_volume_type_proto_depIdxs = []int32{ + 6, // 0: osac.private.v1.Volume.metadata:type_name -> osac.private.v1.Metadata + 4, // 1: osac.private.v1.Volume.spec:type_name -> osac.private.v1.VolumeSpec + 5, // 2: osac.private.v1.Volume.status:type_name -> osac.private.v1.VolumeStatus + 1, // 3: osac.private.v1.VolumeSpec.pvc_ref:type_name -> osac.private.v1.PVCReference + 0, // 4: osac.private.v1.VolumeStatus.state:type_name -> osac.private.v1.VolumeState + 1, // 5: osac.private.v1.VolumeStatus.pvc_ref:type_name -> osac.private.v1.PVCReference + 2, // 6: osac.private.v1.VolumeStatus.pv_ref:type_name -> osac.private.v1.PVReference + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_osac_private_v1_volume_type_proto_init() } +func file_osac_private_v1_volume_type_proto_init() { + if File_osac_private_v1_volume_type_proto != nil { + return + } + file_osac_private_v1_metadata_type_proto_init() + file_osac_private_v1_volume_type_proto_msgTypes[4].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_volume_type_proto_rawDesc), len(file_osac_private_v1_volume_type_proto_rawDesc)), + NumEnums: 1, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_osac_private_v1_volume_type_proto_goTypes, + DependencyIndexes: file_osac_private_v1_volume_type_proto_depIdxs, + EnumInfos: file_osac_private_v1_volume_type_proto_enumTypes, + MessageInfos: file_osac_private_v1_volume_type_proto_msgTypes, + }.Build() + File_osac_private_v1_volume_type_proto = out.File + file_osac_private_v1_volume_type_proto_goTypes = nil + file_osac_private_v1_volume_type_proto_depIdxs = nil +} diff --git a/fulfillment-service/internal/api/osac/private/v1/volumes_service.pb.go b/fulfillment-service/internal/api/osac/private/v1/volumes_service.pb.go new file mode 100644 index 000000000..54f546aa5 --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/volumes_service.pb.go @@ -0,0 +1,1174 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.5 +// protoc (unknown) +// source: osac/private/v1/volumes_service.proto + +//go:build !protoopaque + +package privatev1 + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + reflect "reflect" + unsafe "unsafe" +) + +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) +) + +type VolumesListRequest struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + // Index of the first result. If not specified the default value will be zero. + Offset *int32 `protobuf:"varint,1,opt,name=offset,proto3,oneof" json:"offset,omitempty"` + // Maximum number of results to be returned by the server. When not specified all the results will be returned. Note + // that there may not be enough results to return, and that the server may decide, for performance reasons, to return + // less results than requested. + Limit *int32 `protobuf:"varint,2,opt,name=limit,proto3,oneof" json:"limit,omitempty"` + // Filter criteria. + // + // The value of this parameter is a [CEL](https://cel.dev) expression used to select which objects to return. The + // built-in `this` variable refers to the object being tested and `now` refers to the current date and time. If the + // expression evaluates to `true` the object is included in the results. For example, to retrieve all volumes in the + // AVAILABLE state: + // + // this.status.state == 2 + // + // If this isn't provided, or if the value is empty, then all the volumes that the user has permission to see will be + // returned. Not all CEL constructs are currently supported for implementation reasons; see the filter documentation + // (docs/FILTER.md) for the full details. + Filter *string `protobuf:"bytes,3,opt,name=filter,proto3,oneof" json:"filter,omitempty"` + // Order criteria. + // + // The syntax of this parameter is similar to the syntax of the _order by_ clause of a SQL statement, but using the + // names of the attributes of the volume instead of the names of the columns of a table. For example, in order to + // sort the volumes descending by size: + // + // spec.size_gib desc + // + // If the parameter isn't provided, or if the value is empty, then the order of the results is undefined. + Order *string `protobuf:"bytes,4,opt,name=order,proto3,oneof" json:"order,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesListRequest) Reset() { + *x = VolumesListRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesListRequest) ProtoMessage() {} + +func (x *VolumesListRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesListRequest) GetOffset() int32 { + if x != nil && x.Offset != nil { + return *x.Offset + } + return 0 +} + +func (x *VolumesListRequest) GetLimit() int32 { + if x != nil && x.Limit != nil { + return *x.Limit + } + return 0 +} + +func (x *VolumesListRequest) GetFilter() string { + if x != nil && x.Filter != nil { + return *x.Filter + } + return "" +} + +func (x *VolumesListRequest) GetOrder() string { + if x != nil && x.Order != nil { + return *x.Order + } + return "" +} + +func (x *VolumesListRequest) SetOffset(v int32) { + x.Offset = &v +} + +func (x *VolumesListRequest) SetLimit(v int32) { + x.Limit = &v +} + +func (x *VolumesListRequest) SetFilter(v string) { + x.Filter = &v +} + +func (x *VolumesListRequest) SetOrder(v string) { + x.Order = &v +} + +func (x *VolumesListRequest) HasOffset() bool { + if x == nil { + return false + } + return x.Offset != nil +} + +func (x *VolumesListRequest) HasLimit() bool { + if x == nil { + return false + } + return x.Limit != nil +} + +func (x *VolumesListRequest) HasFilter() bool { + if x == nil { + return false + } + return x.Filter != nil +} + +func (x *VolumesListRequest) HasOrder() bool { + if x == nil { + return false + } + return x.Order != nil +} + +func (x *VolumesListRequest) ClearOffset() { + x.Offset = nil +} + +func (x *VolumesListRequest) ClearLimit() { + x.Limit = nil +} + +func (x *VolumesListRequest) ClearFilter() { + x.Filter = nil +} + +func (x *VolumesListRequest) ClearOrder() { + x.Order = nil +} + +type VolumesListRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Index of the first result. If not specified the default value will be zero. + Offset *int32 + // Maximum number of results to be returned by the server. When not specified all the results will be returned. Note + // that there may not be enough results to return, and that the server may decide, for performance reasons, to return + // less results than requested. + Limit *int32 + // Filter criteria. + // + // The value of this parameter is a [CEL](https://cel.dev) expression used to select which objects to return. The + // built-in `this` variable refers to the object being tested and `now` refers to the current date and time. If the + // expression evaluates to `true` the object is included in the results. For example, to retrieve all volumes in the + // AVAILABLE state: + // + // this.status.state == 2 + // + // If this isn't provided, or if the value is empty, then all the volumes that the user has permission to see will be + // returned. Not all CEL constructs are currently supported for implementation reasons; see the filter documentation + // (docs/FILTER.md) for the full details. + Filter *string + // Order criteria. + // + // The syntax of this parameter is similar to the syntax of the _order by_ clause of a SQL statement, but using the + // names of the attributes of the volume instead of the names of the columns of a table. For example, in order to + // sort the volumes descending by size: + // + // spec.size_gib desc + // + // If the parameter isn't provided, or if the value is empty, then the order of the results is undefined. + Order *string +} + +func (b0 VolumesListRequest_builder) Build() *VolumesListRequest { + m0 := &VolumesListRequest{} + b, x := &b0, m0 + _, _ = b, x + x.Offset = b.Offset + x.Limit = b.Limit + x.Filter = b.Filter + x.Order = b.Order + return m0 +} + +type VolumesListResponse struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + // Actual number of items returned. Note that this may be smaller than the value requested in the `limit` parameter + // of the request if there are not enough items, or if the system decides that returning that number of items isn't + // feasible or convenient for performance reasons. + Size int32 `protobuf:"varint,1,opt,name=size,proto3" json:"size,omitempty"` + // Total number of items of the collection that match the search criteria, regardless of the number of results + // requested with the `limit` parameter. + Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` + // List of results. + Items []*Volume `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesListResponse) Reset() { + *x = VolumesListResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesListResponse) ProtoMessage() {} + +func (x *VolumesListResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesListResponse) GetSize() int32 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *VolumesListResponse) GetTotal() int32 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *VolumesListResponse) GetItems() []*Volume { + if x != nil { + return x.Items + } + return nil +} + +func (x *VolumesListResponse) SetSize(v int32) { + x.Size = v +} + +func (x *VolumesListResponse) SetTotal(v int32) { + x.Total = v +} + +func (x *VolumesListResponse) SetItems(v []*Volume) { + x.Items = v +} + +type VolumesListResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Actual number of items returned. Note that this may be smaller than the value requested in the `limit` parameter + // of the request if there are not enough items, or if the system decides that returning that number of items isn't + // feasible or convenient for performance reasons. + Size int32 + // Total number of items of the collection that match the search criteria, regardless of the number of results + // requested with the `limit` parameter. + Total int32 + // List of results. + Items []*Volume +} + +func (b0 VolumesListResponse_builder) Build() *VolumesListResponse { + m0 := &VolumesListResponse{} + b, x := &b0, m0 + _, _ = b, x + x.Size = b.Size + x.Total = b.Total + x.Items = b.Items + return m0 +} + +type VolumesGetRequest struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesGetRequest) Reset() { + *x = VolumesGetRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesGetRequest) ProtoMessage() {} + +func (x *VolumesGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesGetRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VolumesGetRequest) SetId(v string) { + x.Id = v +} + +type VolumesGetRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Id string +} + +func (b0 VolumesGetRequest_builder) Build() *VolumesGetRequest { + m0 := &VolumesGetRequest{} + b, x := &b0, m0 + _, _ = b, x + x.Id = b.Id + return m0 +} + +type VolumesGetResponse struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Object *Volume `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesGetResponse) Reset() { + *x = VolumesGetResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesGetResponse) ProtoMessage() {} + +func (x *VolumesGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesGetResponse) GetObject() *Volume { + if x != nil { + return x.Object + } + return nil +} + +func (x *VolumesGetResponse) SetObject(v *Volume) { + x.Object = v +} + +func (x *VolumesGetResponse) HasObject() bool { + if x == nil { + return false + } + return x.Object != nil +} + +func (x *VolumesGetResponse) ClearObject() { + x.Object = nil +} + +type VolumesGetResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume +} + +func (b0 VolumesGetResponse_builder) Build() *VolumesGetResponse { + m0 := &VolumesGetResponse{} + b, x := &b0, m0 + _, _ = b, x + x.Object = b.Object + return m0 +} + +type VolumesCreateRequest struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Object *Volume `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesCreateRequest) Reset() { + *x = VolumesCreateRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesCreateRequest) ProtoMessage() {} + +func (x *VolumesCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesCreateRequest) GetObject() *Volume { + if x != nil { + return x.Object + } + return nil +} + +func (x *VolumesCreateRequest) SetObject(v *Volume) { + x.Object = v +} + +func (x *VolumesCreateRequest) HasObject() bool { + if x == nil { + return false + } + return x.Object != nil +} + +func (x *VolumesCreateRequest) ClearObject() { + x.Object = nil +} + +type VolumesCreateRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume +} + +func (b0 VolumesCreateRequest_builder) Build() *VolumesCreateRequest { + m0 := &VolumesCreateRequest{} + b, x := &b0, m0 + _, _ = b, x + x.Object = b.Object + return m0 +} + +type VolumesCreateResponse struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Object *Volume `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesCreateResponse) Reset() { + *x = VolumesCreateResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesCreateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesCreateResponse) ProtoMessage() {} + +func (x *VolumesCreateResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesCreateResponse) GetObject() *Volume { + if x != nil { + return x.Object + } + return nil +} + +func (x *VolumesCreateResponse) SetObject(v *Volume) { + x.Object = v +} + +func (x *VolumesCreateResponse) HasObject() bool { + if x == nil { + return false + } + return x.Object != nil +} + +func (x *VolumesCreateResponse) ClearObject() { + x.Object = nil +} + +type VolumesCreateResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume +} + +func (b0 VolumesCreateResponse_builder) Build() *VolumesCreateResponse { + m0 := &VolumesCreateResponse{} + b, x := &b0, m0 + _, _ = b, x + x.Object = b.Object + return m0 +} + +type VolumesUpdateRequest struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Object *Volume `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` + UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` + // Lock enables optimistic locking. When set to true, the server verifies that the current version of the object + // matches the value of the metadata.version field of the submitted object. If they differ the update will be + // rejected. This is useful to prevent lost updates when multiple clients are modifying the same object concurrently. + Lock bool `protobuf:"varint,3,opt,name=lock,proto3" json:"lock,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesUpdateRequest) Reset() { + *x = VolumesUpdateRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesUpdateRequest) ProtoMessage() {} + +func (x *VolumesUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesUpdateRequest) GetObject() *Volume { + if x != nil { + return x.Object + } + return nil +} + +func (x *VolumesUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask { + if x != nil { + return x.UpdateMask + } + return nil +} + +func (x *VolumesUpdateRequest) GetLock() bool { + if x != nil { + return x.Lock + } + return false +} + +func (x *VolumesUpdateRequest) SetObject(v *Volume) { + x.Object = v +} + +func (x *VolumesUpdateRequest) SetUpdateMask(v *fieldmaskpb.FieldMask) { + x.UpdateMask = v +} + +func (x *VolumesUpdateRequest) SetLock(v bool) { + x.Lock = v +} + +func (x *VolumesUpdateRequest) HasObject() bool { + if x == nil { + return false + } + return x.Object != nil +} + +func (x *VolumesUpdateRequest) HasUpdateMask() bool { + if x == nil { + return false + } + return x.UpdateMask != nil +} + +func (x *VolumesUpdateRequest) ClearObject() { + x.Object = nil +} + +func (x *VolumesUpdateRequest) ClearUpdateMask() { + x.UpdateMask = nil +} + +type VolumesUpdateRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume + UpdateMask *fieldmaskpb.FieldMask + // Lock enables optimistic locking. When set to true, the server verifies that the current version of the object + // matches the value of the metadata.version field of the submitted object. If they differ the update will be + // rejected. This is useful to prevent lost updates when multiple clients are modifying the same object concurrently. + Lock bool +} + +func (b0 VolumesUpdateRequest_builder) Build() *VolumesUpdateRequest { + m0 := &VolumesUpdateRequest{} + b, x := &b0, m0 + _, _ = b, x + x.Object = b.Object + x.UpdateMask = b.UpdateMask + x.Lock = b.Lock + return m0 +} + +type VolumesUpdateResponse struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Object *Volume `protobuf:"bytes,1,opt,name=object,proto3" json:"object,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesUpdateResponse) Reset() { + *x = VolumesUpdateResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesUpdateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesUpdateResponse) ProtoMessage() {} + +func (x *VolumesUpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesUpdateResponse) GetObject() *Volume { + if x != nil { + return x.Object + } + return nil +} + +func (x *VolumesUpdateResponse) SetObject(v *Volume) { + x.Object = v +} + +func (x *VolumesUpdateResponse) HasObject() bool { + if x == nil { + return false + } + return x.Object != nil +} + +func (x *VolumesUpdateResponse) ClearObject() { + x.Object = nil +} + +type VolumesUpdateResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume +} + +func (b0 VolumesUpdateResponse_builder) Build() *VolumesUpdateResponse { + m0 := &VolumesUpdateResponse{} + b, x := &b0, m0 + _, _ = b, x + x.Object = b.Object + return m0 +} + +type VolumesDeleteRequest struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesDeleteRequest) Reset() { + *x = VolumesDeleteRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesDeleteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesDeleteRequest) ProtoMessage() {} + +func (x *VolumesDeleteRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesDeleteRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VolumesDeleteRequest) SetId(v string) { + x.Id = v +} + +type VolumesDeleteRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Id string +} + +func (b0 VolumesDeleteRequest_builder) Build() *VolumesDeleteRequest { + m0 := &VolumesDeleteRequest{} + b, x := &b0, m0 + _, _ = b, x + x.Id = b.Id + return m0 +} + +type VolumesDeleteResponse struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesDeleteResponse) Reset() { + *x = VolumesDeleteResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesDeleteResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesDeleteResponse) ProtoMessage() {} + +func (x *VolumesDeleteResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +type VolumesDeleteResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + +} + +func (b0 VolumesDeleteResponse_builder) Build() *VolumesDeleteResponse { + m0 := &VolumesDeleteResponse{} + b, x := &b0, m0 + _, _ = b, x + return m0 +} + +type VolumesSignalRequest struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesSignalRequest) Reset() { + *x = VolumesSignalRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesSignalRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesSignalRequest) ProtoMessage() {} + +func (x *VolumesSignalRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesSignalRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VolumesSignalRequest) SetId(v string) { + x.Id = v +} + +type VolumesSignalRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Id string +} + +func (b0 VolumesSignalRequest_builder) Build() *VolumesSignalRequest { + m0 := &VolumesSignalRequest{} + b, x := &b0, m0 + _, _ = b, x + x.Id = b.Id + return m0 +} + +type VolumesSignalResponse struct { + state protoimpl.MessageState `protogen:"hybrid.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesSignalResponse) Reset() { + *x = VolumesSignalResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesSignalResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesSignalResponse) ProtoMessage() {} + +func (x *VolumesSignalResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +type VolumesSignalResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + +} + +func (b0 VolumesSignalResponse_builder) Build() *VolumesSignalResponse { + m0 := &VolumesSignalResponse{} + b, x := &b0, m0 + _, _ = b, x + return m0 +} + +var File_osac_private_v1_volumes_service_proto protoreflect.FileDescriptor + +var file_osac_private_v1_volumes_service_proto_rawDesc = string([]byte{ + 0x0a, 0x25, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x01, 0x0a, 0x12, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x88, 0x01, 0x01, 0x12, + 0x19, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x88, + 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x42, 0x08, 0x0a, + 0x06, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x6e, 0x0a, 0x13, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2d, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x23, 0x0a, 0x11, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x45, 0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x47, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x22, 0x48, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x98, 0x01, 0x0a, 0x14, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, + 0x73, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x04, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x48, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x22, 0x26, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x26, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x32, 0xf7, 0x05, 0x0a, 0x07, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x72, + 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x12, 0x7c, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x62, 0x06, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0x88, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x29, 0x3a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x62, 0x06, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x06, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, 0x06, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x62, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x32, 0x23, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x69, + 0x64, 0x7d, 0x12, 0x7d, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x12, 0x59, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x25, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xe3, 0x01, 0x0a, + 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, + 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, + 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, + 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, + 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) + +var file_osac_private_v1_volumes_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_osac_private_v1_volumes_service_proto_goTypes = []any{ + (*VolumesListRequest)(nil), // 0: osac.private.v1.VolumesListRequest + (*VolumesListResponse)(nil), // 1: osac.private.v1.VolumesListResponse + (*VolumesGetRequest)(nil), // 2: osac.private.v1.VolumesGetRequest + (*VolumesGetResponse)(nil), // 3: osac.private.v1.VolumesGetResponse + (*VolumesCreateRequest)(nil), // 4: osac.private.v1.VolumesCreateRequest + (*VolumesCreateResponse)(nil), // 5: osac.private.v1.VolumesCreateResponse + (*VolumesUpdateRequest)(nil), // 6: osac.private.v1.VolumesUpdateRequest + (*VolumesUpdateResponse)(nil), // 7: osac.private.v1.VolumesUpdateResponse + (*VolumesDeleteRequest)(nil), // 8: osac.private.v1.VolumesDeleteRequest + (*VolumesDeleteResponse)(nil), // 9: osac.private.v1.VolumesDeleteResponse + (*VolumesSignalRequest)(nil), // 10: osac.private.v1.VolumesSignalRequest + (*VolumesSignalResponse)(nil), // 11: osac.private.v1.VolumesSignalResponse + (*Volume)(nil), // 12: osac.private.v1.Volume + (*fieldmaskpb.FieldMask)(nil), // 13: google.protobuf.FieldMask +} +var file_osac_private_v1_volumes_service_proto_depIdxs = []int32{ + 12, // 0: osac.private.v1.VolumesListResponse.items:type_name -> osac.private.v1.Volume + 12, // 1: osac.private.v1.VolumesGetResponse.object:type_name -> osac.private.v1.Volume + 12, // 2: osac.private.v1.VolumesCreateRequest.object:type_name -> osac.private.v1.Volume + 12, // 3: osac.private.v1.VolumesCreateResponse.object:type_name -> osac.private.v1.Volume + 12, // 4: osac.private.v1.VolumesUpdateRequest.object:type_name -> osac.private.v1.Volume + 13, // 5: osac.private.v1.VolumesUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask + 12, // 6: osac.private.v1.VolumesUpdateResponse.object:type_name -> osac.private.v1.Volume + 0, // 7: osac.private.v1.Volumes.List:input_type -> osac.private.v1.VolumesListRequest + 2, // 8: osac.private.v1.Volumes.Get:input_type -> osac.private.v1.VolumesGetRequest + 4, // 9: osac.private.v1.Volumes.Create:input_type -> osac.private.v1.VolumesCreateRequest + 6, // 10: osac.private.v1.Volumes.Update:input_type -> osac.private.v1.VolumesUpdateRequest + 8, // 11: osac.private.v1.Volumes.Delete:input_type -> osac.private.v1.VolumesDeleteRequest + 10, // 12: osac.private.v1.Volumes.Signal:input_type -> osac.private.v1.VolumesSignalRequest + 1, // 13: osac.private.v1.Volumes.List:output_type -> osac.private.v1.VolumesListResponse + 3, // 14: osac.private.v1.Volumes.Get:output_type -> osac.private.v1.VolumesGetResponse + 5, // 15: osac.private.v1.Volumes.Create:output_type -> osac.private.v1.VolumesCreateResponse + 7, // 16: osac.private.v1.Volumes.Update:output_type -> osac.private.v1.VolumesUpdateResponse + 9, // 17: osac.private.v1.Volumes.Delete:output_type -> osac.private.v1.VolumesDeleteResponse + 11, // 18: osac.private.v1.Volumes.Signal:output_type -> osac.private.v1.VolumesSignalResponse + 13, // [13:19] is the sub-list for method output_type + 7, // [7:13] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_osac_private_v1_volumes_service_proto_init() } +func file_osac_private_v1_volumes_service_proto_init() { + if File_osac_private_v1_volumes_service_proto != nil { + return + } + file_osac_private_v1_volume_type_proto_init() + file_osac_private_v1_volumes_service_proto_msgTypes[0].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_volumes_service_proto_rawDesc), len(file_osac_private_v1_volumes_service_proto_rawDesc)), + NumEnums: 0, + NumMessages: 12, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_osac_private_v1_volumes_service_proto_goTypes, + DependencyIndexes: file_osac_private_v1_volumes_service_proto_depIdxs, + MessageInfos: file_osac_private_v1_volumes_service_proto_msgTypes, + }.Build() + File_osac_private_v1_volumes_service_proto = out.File + file_osac_private_v1_volumes_service_proto_goTypes = nil + file_osac_private_v1_volumes_service_proto_depIdxs = nil +} diff --git a/fulfillment-service/internal/api/osac/private/v1/volumes_service.pb.gw.go b/fulfillment-service/internal/api/osac/private/v1/volumes_service.pb.gw.go new file mode 100644 index 000000000..2e94c73d7 --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/volumes_service.pb.gw.go @@ -0,0 +1,516 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: osac/private/v1/volumes_service.proto + +/* +Package privatev1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package privatev1 + +import ( + "context" + "errors" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var ( + _ codes.Code + _ io.Reader + _ status.Status + _ = errors.New + _ = runtime.String + _ = utilities.NewDoubleArray + _ = metadata.Join +) + +var filter_Volumes_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} + +func request_Volumes_List_0(ctx context.Context, marshaler runtime.Marshaler, client VolumesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesListRequest + metadata runtime.ServerMetadata + ) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Volumes_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_Volumes_List_0(ctx context.Context, marshaler runtime.Marshaler, server VolumesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesListRequest + metadata runtime.ServerMetadata + ) + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Volumes_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err +} + +func request_Volumes_Get_0(ctx context.Context, marshaler runtime.Marshaler, client VolumesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesGetRequest + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + msg, err := client.Get(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_Volumes_Get_0(ctx context.Context, marshaler runtime.Marshaler, server VolumesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesGetRequest + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + msg, err := server.Get(ctx, &protoReq) + return msg, metadata, err +} + +func request_Volumes_Create_0(ctx context.Context, marshaler runtime.Marshaler, client VolumesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesCreateRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Object); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_Volumes_Create_0(ctx context.Context, marshaler runtime.Marshaler, server VolumesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesCreateRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq.Object); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err +} + +var filter_Volumes_Update_0 = &utilities.DoubleArray{Encoding: map[string]int{"object": 0, "id": 1}, Base: []int{1, 2, 1, 0, 0}, Check: []int{0, 1, 2, 3, 2}} + +func request_Volumes_Update_0(ctx context.Context, marshaler runtime.Marshaler, client VolumesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesUpdateRequest + metadata runtime.ServerMetadata + err error + ) + 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.Object); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Object); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + val, ok := pathParams["object.id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "object.id") + } + err = runtime.PopulateFieldFromPath(&protoReq, "object.id", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "object.id", err) + } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Volumes_Update_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_Volumes_Update_0(ctx context.Context, marshaler runtime.Marshaler, server VolumesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesUpdateRequest + metadata runtime.ServerMetadata + err error + ) + 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.Object); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if protoReq.UpdateMask == nil || len(protoReq.UpdateMask.GetPaths()) == 0 { + if fieldMask, err := runtime.FieldMaskFromRequestBody(newReader(), protoReq.Object); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } else { + protoReq.UpdateMask = fieldMask + } + } + val, ok := pathParams["object.id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "object.id") + } + err = runtime.PopulateFieldFromPath(&protoReq, "object.id", val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "object.id", err) + } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Volumes_Update_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err +} + +func request_Volumes_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client VolumesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesDeleteRequest + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_Volumes_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server VolumesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq VolumesDeleteRequest + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err +} + +// RegisterVolumesHandlerServer registers the http handlers for service Volumes to "mux". +// UnaryRPC :call VolumesServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterVolumesHandlerFromEndpoint instead. +// GRPC interceptors will not work for this type of registration. To use interceptors, you must use the "runtime.WithMiddlewares" option in the "runtime.NewServeMux" call. +func RegisterVolumesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server VolumesServer) error { + mux.Handle(http.MethodGet, pattern_Volumes_List_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) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/osac.private.v1.Volumes/List", runtime.WithHTTPPathPattern("/api/private/v1/volumes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Volumes_List_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_Volumes_List_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodGet, pattern_Volumes_Get_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) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/osac.private.v1.Volumes/Get", runtime.WithHTTPPathPattern("/api/private/v1/volumes/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Volumes_Get_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_Volumes_Get_0(annotatedContext, mux, outboundMarshaler, w, req, response_Volumes_Get_0{resp.(*VolumesGetResponse)}, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPost, pattern_Volumes_Create_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) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/osac.private.v1.Volumes/Create", runtime.WithHTTPPathPattern("/api/private/v1/volumes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Volumes_Create_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_Volumes_Create_0(annotatedContext, mux, outboundMarshaler, w, req, response_Volumes_Create_0{resp.(*VolumesCreateResponse)}, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPatch, pattern_Volumes_Update_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) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/osac.private.v1.Volumes/Update", runtime.WithHTTPPathPattern("/api/private/v1/volumes/{object.id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Volumes_Update_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_Volumes_Update_0(annotatedContext, mux, outboundMarshaler, w, req, response_Volumes_Update_0{resp.(*VolumesUpdateResponse)}, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodDelete, pattern_Volumes_Delete_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) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/osac.private.v1.Volumes/Delete", runtime.WithHTTPPathPattern("/api/private/v1/volumes/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Volumes_Delete_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_Volumes_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + + return nil +} + +// RegisterVolumesHandlerFromEndpoint is same as RegisterVolumesHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterVolumesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.NewClient(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Errorf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + return RegisterVolumesHandler(ctx, mux, conn) +} + +// RegisterVolumesHandler registers the http handlers for service Volumes to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterVolumesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterVolumesHandlerClient(ctx, mux, NewVolumesClient(conn)) +} + +// RegisterVolumesHandlerClient registers the http handlers for service Volumes +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "VolumesClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "VolumesClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "VolumesClient" to call the correct interceptors. This client ignores the HTTP middlewares. +func RegisterVolumesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client VolumesClient) error { + mux.Handle(http.MethodGet, pattern_Volumes_List_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) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/osac.private.v1.Volumes/List", runtime.WithHTTPPathPattern("/api/private/v1/volumes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Volumes_List_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_Volumes_List_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodGet, pattern_Volumes_Get_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) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/osac.private.v1.Volumes/Get", runtime.WithHTTPPathPattern("/api/private/v1/volumes/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Volumes_Get_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_Volumes_Get_0(annotatedContext, mux, outboundMarshaler, w, req, response_Volumes_Get_0{resp.(*VolumesGetResponse)}, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPost, pattern_Volumes_Create_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) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/osac.private.v1.Volumes/Create", runtime.WithHTTPPathPattern("/api/private/v1/volumes")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Volumes_Create_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_Volumes_Create_0(annotatedContext, mux, outboundMarshaler, w, req, response_Volumes_Create_0{resp.(*VolumesCreateResponse)}, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPatch, pattern_Volumes_Update_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) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/osac.private.v1.Volumes/Update", runtime.WithHTTPPathPattern("/api/private/v1/volumes/{object.id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Volumes_Update_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_Volumes_Update_0(annotatedContext, mux, outboundMarshaler, w, req, response_Volumes_Update_0{resp.(*VolumesUpdateResponse)}, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodDelete, pattern_Volumes_Delete_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) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/osac.private.v1.Volumes/Delete", runtime.WithHTTPPathPattern("/api/private/v1/volumes/{id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Volumes_Delete_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_Volumes_Delete_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + return nil +} + +type response_Volumes_Get_0 struct { + *VolumesGetResponse +} + +func (m response_Volumes_Get_0) XXX_ResponseBody() interface{} { + return m.Object +} + +type response_Volumes_Create_0 struct { + *VolumesCreateResponse +} + +func (m response_Volumes_Create_0) XXX_ResponseBody() interface{} { + return m.Object +} + +type response_Volumes_Update_0 struct { + *VolumesUpdateResponse +} + +func (m response_Volumes_Update_0) XXX_ResponseBody() interface{} { + return m.Object +} + +var ( + pattern_Volumes_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "private", "v1", "volumes"}, "")) + pattern_Volumes_Get_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "private", "v1", "volumes", "id"}, "")) + pattern_Volumes_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "private", "v1", "volumes"}, "")) + pattern_Volumes_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "private", "v1", "volumes", "object.id"}, "")) + pattern_Volumes_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "private", "v1", "volumes", "id"}, "")) +) + +var ( + forward_Volumes_List_0 = runtime.ForwardResponseMessage + forward_Volumes_Get_0 = runtime.ForwardResponseMessage + forward_Volumes_Create_0 = runtime.ForwardResponseMessage + forward_Volumes_Update_0 = runtime.ForwardResponseMessage + forward_Volumes_Delete_0 = runtime.ForwardResponseMessage +) diff --git a/fulfillment-service/internal/api/osac/private/v1/volumes_service_grpc.pb.go b/fulfillment-service/internal/api/osac/private/v1/volumes_service_grpc.pb.go new file mode 100644 index 000000000..87fc0553a --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/volumes_service_grpc.pb.go @@ -0,0 +1,338 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc (unknown) +// source: osac/private/v1/volumes_service.proto + +package privatev1 + +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.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Volumes_List_FullMethodName = "/osac.private.v1.Volumes/List" + Volumes_Get_FullMethodName = "/osac.private.v1.Volumes/Get" + Volumes_Create_FullMethodName = "/osac.private.v1.Volumes/Create" + Volumes_Update_FullMethodName = "/osac.private.v1.Volumes/Update" + Volumes_Delete_FullMethodName = "/osac.private.v1.Volumes/Delete" + Volumes_Signal_FullMethodName = "/osac.private.v1.Volumes/Signal" +) + +// VolumesClient is the client API for Volumes 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 VolumesClient interface { + // Retrieves the list of volumes. + List(ctx context.Context, in *VolumesListRequest, opts ...grpc.CallOption) (*VolumesListResponse, error) + // Retrieves the details of one specific volume. + Get(ctx context.Context, in *VolumesGetRequest, opts ...grpc.CallOption) (*VolumesGetResponse, error) + // Creates a new volume. + Create(ctx context.Context, in *VolumesCreateRequest, opts ...grpc.CallOption) (*VolumesCreateResponse, error) + // Updates an existing volume. + Update(ctx context.Context, in *VolumesUpdateRequest, opts ...grpc.CallOption) (*VolumesUpdateResponse, error) + // Deletes a volume. + Delete(ctx context.Context, in *VolumesDeleteRequest, opts ...grpc.CallOption) (*VolumesDeleteResponse, error) + // Signals the volume for re-reconciliation. Called by the operator feedback controller after + // Volume CR status changes on the hub. + Signal(ctx context.Context, in *VolumesSignalRequest, opts ...grpc.CallOption) (*VolumesSignalResponse, error) +} + +type volumesClient struct { + cc grpc.ClientConnInterface +} + +func NewVolumesClient(cc grpc.ClientConnInterface) VolumesClient { + return &volumesClient{cc} +} + +func (c *volumesClient) List(ctx context.Context, in *VolumesListRequest, opts ...grpc.CallOption) (*VolumesListResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VolumesListResponse) + err := c.cc.Invoke(ctx, Volumes_List_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *volumesClient) Get(ctx context.Context, in *VolumesGetRequest, opts ...grpc.CallOption) (*VolumesGetResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VolumesGetResponse) + err := c.cc.Invoke(ctx, Volumes_Get_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *volumesClient) Create(ctx context.Context, in *VolumesCreateRequest, opts ...grpc.CallOption) (*VolumesCreateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VolumesCreateResponse) + err := c.cc.Invoke(ctx, Volumes_Create_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *volumesClient) Update(ctx context.Context, in *VolumesUpdateRequest, opts ...grpc.CallOption) (*VolumesUpdateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VolumesUpdateResponse) + err := c.cc.Invoke(ctx, Volumes_Update_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *volumesClient) Delete(ctx context.Context, in *VolumesDeleteRequest, opts ...grpc.CallOption) (*VolumesDeleteResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VolumesDeleteResponse) + err := c.cc.Invoke(ctx, Volumes_Delete_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *volumesClient) Signal(ctx context.Context, in *VolumesSignalRequest, opts ...grpc.CallOption) (*VolumesSignalResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VolumesSignalResponse) + err := c.cc.Invoke(ctx, Volumes_Signal_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// VolumesServer is the server API for Volumes service. +// All implementations must embed UnimplementedVolumesServer +// for forward compatibility. +type VolumesServer interface { + // Retrieves the list of volumes. + List(context.Context, *VolumesListRequest) (*VolumesListResponse, error) + // Retrieves the details of one specific volume. + Get(context.Context, *VolumesGetRequest) (*VolumesGetResponse, error) + // Creates a new volume. + Create(context.Context, *VolumesCreateRequest) (*VolumesCreateResponse, error) + // Updates an existing volume. + Update(context.Context, *VolumesUpdateRequest) (*VolumesUpdateResponse, error) + // Deletes a volume. + Delete(context.Context, *VolumesDeleteRequest) (*VolumesDeleteResponse, error) + // Signals the volume for re-reconciliation. Called by the operator feedback controller after + // Volume CR status changes on the hub. + Signal(context.Context, *VolumesSignalRequest) (*VolumesSignalResponse, error) + mustEmbedUnimplementedVolumesServer() +} + +// UnimplementedVolumesServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedVolumesServer struct{} + +func (UnimplementedVolumesServer) List(context.Context, *VolumesListRequest) (*VolumesListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedVolumesServer) Get(context.Context, *VolumesGetRequest) (*VolumesGetResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Get not implemented") +} +func (UnimplementedVolumesServer) Create(context.Context, *VolumesCreateRequest) (*VolumesCreateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedVolumesServer) Update(context.Context, *VolumesUpdateRequest) (*VolumesUpdateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedVolumesServer) Delete(context.Context, *VolumesDeleteRequest) (*VolumesDeleteResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedVolumesServer) Signal(context.Context, *VolumesSignalRequest) (*VolumesSignalResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Signal not implemented") +} +func (UnimplementedVolumesServer) mustEmbedUnimplementedVolumesServer() {} +func (UnimplementedVolumesServer) testEmbeddedByValue() {} + +// UnsafeVolumesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to VolumesServer will +// result in compilation errors. +type UnsafeVolumesServer interface { + mustEmbedUnimplementedVolumesServer() +} + +func RegisterVolumesServer(s grpc.ServiceRegistrar, srv VolumesServer) { + // If the following call pancis, it indicates UnimplementedVolumesServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Volumes_ServiceDesc, srv) +} + +func _Volumes_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VolumesListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VolumesServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Volumes_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VolumesServer).List(ctx, req.(*VolumesListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Volumes_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VolumesGetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VolumesServer).Get(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Volumes_Get_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VolumesServer).Get(ctx, req.(*VolumesGetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Volumes_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VolumesCreateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VolumesServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Volumes_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VolumesServer).Create(ctx, req.(*VolumesCreateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Volumes_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VolumesUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VolumesServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Volumes_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VolumesServer).Update(ctx, req.(*VolumesUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Volumes_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VolumesDeleteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VolumesServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Volumes_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VolumesServer).Delete(ctx, req.(*VolumesDeleteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Volumes_Signal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VolumesSignalRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VolumesServer).Signal(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Volumes_Signal_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VolumesServer).Signal(ctx, req.(*VolumesSignalRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Volumes_ServiceDesc is the grpc.ServiceDesc for Volumes service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Volumes_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "osac.private.v1.Volumes", + HandlerType: (*VolumesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _Volumes_List_Handler, + }, + { + MethodName: "Get", + Handler: _Volumes_Get_Handler, + }, + { + MethodName: "Create", + Handler: _Volumes_Create_Handler, + }, + { + MethodName: "Update", + Handler: _Volumes_Update_Handler, + }, + { + MethodName: "Delete", + Handler: _Volumes_Delete_Handler, + }, + { + MethodName: "Signal", + Handler: _Volumes_Signal_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "osac/private/v1/volumes_service.proto", +} diff --git a/fulfillment-service/internal/api/osac/private/v1/volumes_service_protoopaque.pb.go b/fulfillment-service/internal/api/osac/private/v1/volumes_service_protoopaque.pb.go new file mode 100644 index 000000000..c4cac5fb4 --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/volumes_service_protoopaque.pb.go @@ -0,0 +1,1170 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.5 +// protoc (unknown) +// source: osac/private/v1/volumes_service.proto + +//go:build protoopaque + +package privatev1 + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" + reflect "reflect" + unsafe "unsafe" +) + +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) +) + +type VolumesListRequest struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Offset int32 `protobuf:"varint,1,opt,name=offset,proto3,oneof"` + xxx_hidden_Limit int32 `protobuf:"varint,2,opt,name=limit,proto3,oneof"` + xxx_hidden_Filter *string `protobuf:"bytes,3,opt,name=filter,proto3,oneof"` + xxx_hidden_Order *string `protobuf:"bytes,4,opt,name=order,proto3,oneof"` + XXX_raceDetectHookData protoimpl.RaceDetectHookData + XXX_presence [1]uint32 + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesListRequest) Reset() { + *x = VolumesListRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesListRequest) ProtoMessage() {} + +func (x *VolumesListRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesListRequest) GetOffset() int32 { + if x != nil { + return x.xxx_hidden_Offset + } + return 0 +} + +func (x *VolumesListRequest) GetLimit() int32 { + if x != nil { + return x.xxx_hidden_Limit + } + return 0 +} + +func (x *VolumesListRequest) GetFilter() string { + if x != nil { + if x.xxx_hidden_Filter != nil { + return *x.xxx_hidden_Filter + } + return "" + } + return "" +} + +func (x *VolumesListRequest) GetOrder() string { + if x != nil { + if x.xxx_hidden_Order != nil { + return *x.xxx_hidden_Order + } + return "" + } + return "" +} + +func (x *VolumesListRequest) SetOffset(v int32) { + x.xxx_hidden_Offset = v + protoimpl.X.SetPresent(&(x.XXX_presence[0]), 0, 4) +} + +func (x *VolumesListRequest) SetLimit(v int32) { + x.xxx_hidden_Limit = v + protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 4) +} + +func (x *VolumesListRequest) SetFilter(v string) { + x.xxx_hidden_Filter = &v + protoimpl.X.SetPresent(&(x.XXX_presence[0]), 2, 4) +} + +func (x *VolumesListRequest) SetOrder(v string) { + x.xxx_hidden_Order = &v + protoimpl.X.SetPresent(&(x.XXX_presence[0]), 3, 4) +} + +func (x *VolumesListRequest) HasOffset() bool { + if x == nil { + return false + } + return protoimpl.X.Present(&(x.XXX_presence[0]), 0) +} + +func (x *VolumesListRequest) HasLimit() bool { + if x == nil { + return false + } + return protoimpl.X.Present(&(x.XXX_presence[0]), 1) +} + +func (x *VolumesListRequest) HasFilter() bool { + if x == nil { + return false + } + return protoimpl.X.Present(&(x.XXX_presence[0]), 2) +} + +func (x *VolumesListRequest) HasOrder() bool { + if x == nil { + return false + } + return protoimpl.X.Present(&(x.XXX_presence[0]), 3) +} + +func (x *VolumesListRequest) ClearOffset() { + protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 0) + x.xxx_hidden_Offset = 0 +} + +func (x *VolumesListRequest) ClearLimit() { + protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 1) + x.xxx_hidden_Limit = 0 +} + +func (x *VolumesListRequest) ClearFilter() { + protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 2) + x.xxx_hidden_Filter = nil +} + +func (x *VolumesListRequest) ClearOrder() { + protoimpl.X.ClearPresent(&(x.XXX_presence[0]), 3) + x.xxx_hidden_Order = nil +} + +type VolumesListRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Index of the first result. If not specified the default value will be zero. + Offset *int32 + // Maximum number of results to be returned by the server. When not specified all the results will be returned. Note + // that there may not be enough results to return, and that the server may decide, for performance reasons, to return + // less results than requested. + Limit *int32 + // Filter criteria. + // + // The value of this parameter is a [CEL](https://cel.dev) expression used to select which objects to return. The + // built-in `this` variable refers to the object being tested and `now` refers to the current date and time. If the + // expression evaluates to `true` the object is included in the results. For example, to retrieve all volumes in the + // AVAILABLE state: + // + // this.status.state == 2 + // + // If this isn't provided, or if the value is empty, then all the volumes that the user has permission to see will be + // returned. Not all CEL constructs are currently supported for implementation reasons; see the filter documentation + // (docs/FILTER.md) for the full details. + Filter *string + // Order criteria. + // + // The syntax of this parameter is similar to the syntax of the _order by_ clause of a SQL statement, but using the + // names of the attributes of the volume instead of the names of the columns of a table. For example, in order to + // sort the volumes descending by size: + // + // spec.size_gib desc + // + // If the parameter isn't provided, or if the value is empty, then the order of the results is undefined. + Order *string +} + +func (b0 VolumesListRequest_builder) Build() *VolumesListRequest { + m0 := &VolumesListRequest{} + b, x := &b0, m0 + _, _ = b, x + if b.Offset != nil { + protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 0, 4) + x.xxx_hidden_Offset = *b.Offset + } + if b.Limit != nil { + protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 4) + x.xxx_hidden_Limit = *b.Limit + } + if b.Filter != nil { + protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 2, 4) + x.xxx_hidden_Filter = b.Filter + } + if b.Order != nil { + protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 3, 4) + x.xxx_hidden_Order = b.Order + } + return m0 +} + +type VolumesListResponse struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Size int32 `protobuf:"varint,1,opt,name=size,proto3"` + xxx_hidden_Total int32 `protobuf:"varint,2,opt,name=total,proto3"` + xxx_hidden_Items *[]*Volume `protobuf:"bytes,3,rep,name=items,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesListResponse) Reset() { + *x = VolumesListResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesListResponse) ProtoMessage() {} + +func (x *VolumesListResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesListResponse) GetSize() int32 { + if x != nil { + return x.xxx_hidden_Size + } + return 0 +} + +func (x *VolumesListResponse) GetTotal() int32 { + if x != nil { + return x.xxx_hidden_Total + } + return 0 +} + +func (x *VolumesListResponse) GetItems() []*Volume { + if x != nil { + if x.xxx_hidden_Items != nil { + return *x.xxx_hidden_Items + } + } + return nil +} + +func (x *VolumesListResponse) SetSize(v int32) { + x.xxx_hidden_Size = v +} + +func (x *VolumesListResponse) SetTotal(v int32) { + x.xxx_hidden_Total = v +} + +func (x *VolumesListResponse) SetItems(v []*Volume) { + x.xxx_hidden_Items = &v +} + +type VolumesListResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + // Actual number of items returned. Note that this may be smaller than the value requested in the `limit` parameter + // of the request if there are not enough items, or if the system decides that returning that number of items isn't + // feasible or convenient for performance reasons. + Size int32 + // Total number of items of the collection that match the search criteria, regardless of the number of results + // requested with the `limit` parameter. + Total int32 + // List of results. + Items []*Volume +} + +func (b0 VolumesListResponse_builder) Build() *VolumesListResponse { + m0 := &VolumesListResponse{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Size = b.Size + x.xxx_hidden_Total = b.Total + x.xxx_hidden_Items = &b.Items + return m0 +} + +type VolumesGetRequest struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Id string `protobuf:"bytes,1,opt,name=id,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesGetRequest) Reset() { + *x = VolumesGetRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesGetRequest) ProtoMessage() {} + +func (x *VolumesGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesGetRequest) GetId() string { + if x != nil { + return x.xxx_hidden_Id + } + return "" +} + +func (x *VolumesGetRequest) SetId(v string) { + x.xxx_hidden_Id = v +} + +type VolumesGetRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Id string +} + +func (b0 VolumesGetRequest_builder) Build() *VolumesGetRequest { + m0 := &VolumesGetRequest{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Id = b.Id + return m0 +} + +type VolumesGetResponse struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Object *Volume `protobuf:"bytes,1,opt,name=object,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesGetResponse) Reset() { + *x = VolumesGetResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesGetResponse) ProtoMessage() {} + +func (x *VolumesGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesGetResponse) GetObject() *Volume { + if x != nil { + return x.xxx_hidden_Object + } + return nil +} + +func (x *VolumesGetResponse) SetObject(v *Volume) { + x.xxx_hidden_Object = v +} + +func (x *VolumesGetResponse) HasObject() bool { + if x == nil { + return false + } + return x.xxx_hidden_Object != nil +} + +func (x *VolumesGetResponse) ClearObject() { + x.xxx_hidden_Object = nil +} + +type VolumesGetResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume +} + +func (b0 VolumesGetResponse_builder) Build() *VolumesGetResponse { + m0 := &VolumesGetResponse{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Object = b.Object + return m0 +} + +type VolumesCreateRequest struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Object *Volume `protobuf:"bytes,1,opt,name=object,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesCreateRequest) Reset() { + *x = VolumesCreateRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesCreateRequest) ProtoMessage() {} + +func (x *VolumesCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesCreateRequest) GetObject() *Volume { + if x != nil { + return x.xxx_hidden_Object + } + return nil +} + +func (x *VolumesCreateRequest) SetObject(v *Volume) { + x.xxx_hidden_Object = v +} + +func (x *VolumesCreateRequest) HasObject() bool { + if x == nil { + return false + } + return x.xxx_hidden_Object != nil +} + +func (x *VolumesCreateRequest) ClearObject() { + x.xxx_hidden_Object = nil +} + +type VolumesCreateRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume +} + +func (b0 VolumesCreateRequest_builder) Build() *VolumesCreateRequest { + m0 := &VolumesCreateRequest{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Object = b.Object + return m0 +} + +type VolumesCreateResponse struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Object *Volume `protobuf:"bytes,1,opt,name=object,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesCreateResponse) Reset() { + *x = VolumesCreateResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesCreateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesCreateResponse) ProtoMessage() {} + +func (x *VolumesCreateResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesCreateResponse) GetObject() *Volume { + if x != nil { + return x.xxx_hidden_Object + } + return nil +} + +func (x *VolumesCreateResponse) SetObject(v *Volume) { + x.xxx_hidden_Object = v +} + +func (x *VolumesCreateResponse) HasObject() bool { + if x == nil { + return false + } + return x.xxx_hidden_Object != nil +} + +func (x *VolumesCreateResponse) ClearObject() { + x.xxx_hidden_Object = nil +} + +type VolumesCreateResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume +} + +func (b0 VolumesCreateResponse_builder) Build() *VolumesCreateResponse { + m0 := &VolumesCreateResponse{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Object = b.Object + return m0 +} + +type VolumesUpdateRequest struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Object *Volume `protobuf:"bytes,1,opt,name=object,proto3"` + xxx_hidden_UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3"` + xxx_hidden_Lock bool `protobuf:"varint,3,opt,name=lock,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesUpdateRequest) Reset() { + *x = VolumesUpdateRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesUpdateRequest) ProtoMessage() {} + +func (x *VolumesUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesUpdateRequest) GetObject() *Volume { + if x != nil { + return x.xxx_hidden_Object + } + return nil +} + +func (x *VolumesUpdateRequest) GetUpdateMask() *fieldmaskpb.FieldMask { + if x != nil { + return x.xxx_hidden_UpdateMask + } + return nil +} + +func (x *VolumesUpdateRequest) GetLock() bool { + if x != nil { + return x.xxx_hidden_Lock + } + return false +} + +func (x *VolumesUpdateRequest) SetObject(v *Volume) { + x.xxx_hidden_Object = v +} + +func (x *VolumesUpdateRequest) SetUpdateMask(v *fieldmaskpb.FieldMask) { + x.xxx_hidden_UpdateMask = v +} + +func (x *VolumesUpdateRequest) SetLock(v bool) { + x.xxx_hidden_Lock = v +} + +func (x *VolumesUpdateRequest) HasObject() bool { + if x == nil { + return false + } + return x.xxx_hidden_Object != nil +} + +func (x *VolumesUpdateRequest) HasUpdateMask() bool { + if x == nil { + return false + } + return x.xxx_hidden_UpdateMask != nil +} + +func (x *VolumesUpdateRequest) ClearObject() { + x.xxx_hidden_Object = nil +} + +func (x *VolumesUpdateRequest) ClearUpdateMask() { + x.xxx_hidden_UpdateMask = nil +} + +type VolumesUpdateRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume + UpdateMask *fieldmaskpb.FieldMask + // Lock enables optimistic locking. When set to true, the server verifies that the current version of the object + // matches the value of the metadata.version field of the submitted object. If they differ the update will be + // rejected. This is useful to prevent lost updates when multiple clients are modifying the same object concurrently. + Lock bool +} + +func (b0 VolumesUpdateRequest_builder) Build() *VolumesUpdateRequest { + m0 := &VolumesUpdateRequest{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Object = b.Object + x.xxx_hidden_UpdateMask = b.UpdateMask + x.xxx_hidden_Lock = b.Lock + return m0 +} + +type VolumesUpdateResponse struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Object *Volume `protobuf:"bytes,1,opt,name=object,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesUpdateResponse) Reset() { + *x = VolumesUpdateResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesUpdateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesUpdateResponse) ProtoMessage() {} + +func (x *VolumesUpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesUpdateResponse) GetObject() *Volume { + if x != nil { + return x.xxx_hidden_Object + } + return nil +} + +func (x *VolumesUpdateResponse) SetObject(v *Volume) { + x.xxx_hidden_Object = v +} + +func (x *VolumesUpdateResponse) HasObject() bool { + if x == nil { + return false + } + return x.xxx_hidden_Object != nil +} + +func (x *VolumesUpdateResponse) ClearObject() { + x.xxx_hidden_Object = nil +} + +type VolumesUpdateResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Object *Volume +} + +func (b0 VolumesUpdateResponse_builder) Build() *VolumesUpdateResponse { + m0 := &VolumesUpdateResponse{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Object = b.Object + return m0 +} + +type VolumesDeleteRequest struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Id string `protobuf:"bytes,1,opt,name=id,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesDeleteRequest) Reset() { + *x = VolumesDeleteRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesDeleteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesDeleteRequest) ProtoMessage() {} + +func (x *VolumesDeleteRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesDeleteRequest) GetId() string { + if x != nil { + return x.xxx_hidden_Id + } + return "" +} + +func (x *VolumesDeleteRequest) SetId(v string) { + x.xxx_hidden_Id = v +} + +type VolumesDeleteRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Id string +} + +func (b0 VolumesDeleteRequest_builder) Build() *VolumesDeleteRequest { + m0 := &VolumesDeleteRequest{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Id = b.Id + return m0 +} + +type VolumesDeleteResponse struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesDeleteResponse) Reset() { + *x = VolumesDeleteResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesDeleteResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesDeleteResponse) ProtoMessage() {} + +func (x *VolumesDeleteResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +type VolumesDeleteResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + +} + +func (b0 VolumesDeleteResponse_builder) Build() *VolumesDeleteResponse { + m0 := &VolumesDeleteResponse{} + b, x := &b0, m0 + _, _ = b, x + return m0 +} + +type VolumesSignalRequest struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + xxx_hidden_Id string `protobuf:"bytes,1,opt,name=id,proto3"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesSignalRequest) Reset() { + *x = VolumesSignalRequest{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesSignalRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesSignalRequest) ProtoMessage() {} + +func (x *VolumesSignalRequest) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +func (x *VolumesSignalRequest) GetId() string { + if x != nil { + return x.xxx_hidden_Id + } + return "" +} + +func (x *VolumesSignalRequest) SetId(v string) { + x.xxx_hidden_Id = v +} + +type VolumesSignalRequest_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + + Id string +} + +func (b0 VolumesSignalRequest_builder) Build() *VolumesSignalRequest { + m0 := &VolumesSignalRequest{} + b, x := &b0, m0 + _, _ = b, x + x.xxx_hidden_Id = b.Id + return m0 +} + +type VolumesSignalResponse struct { + state protoimpl.MessageState `protogen:"opaque.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VolumesSignalResponse) Reset() { + *x = VolumesSignalResponse{} + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VolumesSignalResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumesSignalResponse) ProtoMessage() {} + +func (x *VolumesSignalResponse) ProtoReflect() protoreflect.Message { + mi := &file_osac_private_v1_volumes_service_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +type VolumesSignalResponse_builder struct { + _ [0]func() // Prevents comparability and use of unkeyed literals for the builder. + +} + +func (b0 VolumesSignalResponse_builder) Build() *VolumesSignalResponse { + m0 := &VolumesSignalResponse{} + b, x := &b0, m0 + _, _ = b, x + return m0 +} + +var File_osac_private_v1_volumes_service_proto protoreflect.FileDescriptor + +var file_osac_private_v1_volumes_service_proto_rawDesc = string([]byte{ + 0x0a, 0x25, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x21, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x01, 0x0a, 0x12, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x48, 0x00, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x88, 0x01, 0x01, 0x12, + 0x19, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x88, + 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x42, 0x08, 0x0a, + 0x06, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x6e, 0x0a, 0x13, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2d, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x23, 0x0a, 0x11, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x45, 0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x47, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x22, 0x48, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x98, 0x01, 0x0a, 0x14, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, + 0x73, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x04, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0x48, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x22, 0x26, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x26, 0x0a, 0x14, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x32, 0xf7, 0x05, 0x0a, 0x07, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x72, + 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x12, 0x7c, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x62, 0x06, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x12, 0x88, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x29, 0x3a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x62, 0x06, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x06, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, 0x06, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x62, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x32, 0x23, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x69, + 0x64, 0x7d, 0x12, 0x7d, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x6f, + 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x7d, 0x12, 0x59, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x25, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xe3, 0x01, 0x0a, + 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x42, 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, + 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, + 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, + 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, + 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) + +var file_osac_private_v1_volumes_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_osac_private_v1_volumes_service_proto_goTypes = []any{ + (*VolumesListRequest)(nil), // 0: osac.private.v1.VolumesListRequest + (*VolumesListResponse)(nil), // 1: osac.private.v1.VolumesListResponse + (*VolumesGetRequest)(nil), // 2: osac.private.v1.VolumesGetRequest + (*VolumesGetResponse)(nil), // 3: osac.private.v1.VolumesGetResponse + (*VolumesCreateRequest)(nil), // 4: osac.private.v1.VolumesCreateRequest + (*VolumesCreateResponse)(nil), // 5: osac.private.v1.VolumesCreateResponse + (*VolumesUpdateRequest)(nil), // 6: osac.private.v1.VolumesUpdateRequest + (*VolumesUpdateResponse)(nil), // 7: osac.private.v1.VolumesUpdateResponse + (*VolumesDeleteRequest)(nil), // 8: osac.private.v1.VolumesDeleteRequest + (*VolumesDeleteResponse)(nil), // 9: osac.private.v1.VolumesDeleteResponse + (*VolumesSignalRequest)(nil), // 10: osac.private.v1.VolumesSignalRequest + (*VolumesSignalResponse)(nil), // 11: osac.private.v1.VolumesSignalResponse + (*Volume)(nil), // 12: osac.private.v1.Volume + (*fieldmaskpb.FieldMask)(nil), // 13: google.protobuf.FieldMask +} +var file_osac_private_v1_volumes_service_proto_depIdxs = []int32{ + 12, // 0: osac.private.v1.VolumesListResponse.items:type_name -> osac.private.v1.Volume + 12, // 1: osac.private.v1.VolumesGetResponse.object:type_name -> osac.private.v1.Volume + 12, // 2: osac.private.v1.VolumesCreateRequest.object:type_name -> osac.private.v1.Volume + 12, // 3: osac.private.v1.VolumesCreateResponse.object:type_name -> osac.private.v1.Volume + 12, // 4: osac.private.v1.VolumesUpdateRequest.object:type_name -> osac.private.v1.Volume + 13, // 5: osac.private.v1.VolumesUpdateRequest.update_mask:type_name -> google.protobuf.FieldMask + 12, // 6: osac.private.v1.VolumesUpdateResponse.object:type_name -> osac.private.v1.Volume + 0, // 7: osac.private.v1.Volumes.List:input_type -> osac.private.v1.VolumesListRequest + 2, // 8: osac.private.v1.Volumes.Get:input_type -> osac.private.v1.VolumesGetRequest + 4, // 9: osac.private.v1.Volumes.Create:input_type -> osac.private.v1.VolumesCreateRequest + 6, // 10: osac.private.v1.Volumes.Update:input_type -> osac.private.v1.VolumesUpdateRequest + 8, // 11: osac.private.v1.Volumes.Delete:input_type -> osac.private.v1.VolumesDeleteRequest + 10, // 12: osac.private.v1.Volumes.Signal:input_type -> osac.private.v1.VolumesSignalRequest + 1, // 13: osac.private.v1.Volumes.List:output_type -> osac.private.v1.VolumesListResponse + 3, // 14: osac.private.v1.Volumes.Get:output_type -> osac.private.v1.VolumesGetResponse + 5, // 15: osac.private.v1.Volumes.Create:output_type -> osac.private.v1.VolumesCreateResponse + 7, // 16: osac.private.v1.Volumes.Update:output_type -> osac.private.v1.VolumesUpdateResponse + 9, // 17: osac.private.v1.Volumes.Delete:output_type -> osac.private.v1.VolumesDeleteResponse + 11, // 18: osac.private.v1.Volumes.Signal:output_type -> osac.private.v1.VolumesSignalResponse + 13, // [13:19] is the sub-list for method output_type + 7, // [7:13] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_osac_private_v1_volumes_service_proto_init() } +func file_osac_private_v1_volumes_service_proto_init() { + if File_osac_private_v1_volumes_service_proto != nil { + return + } + file_osac_private_v1_volume_type_proto_init() + file_osac_private_v1_volumes_service_proto_msgTypes[0].OneofWrappers = []any{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_volumes_service_proto_rawDesc), len(file_osac_private_v1_volumes_service_proto_rawDesc)), + NumEnums: 0, + NumMessages: 12, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_osac_private_v1_volumes_service_proto_goTypes, + DependencyIndexes: file_osac_private_v1_volumes_service_proto_depIdxs, + MessageInfos: file_osac_private_v1_volumes_service_proto_msgTypes, + }.Build() + File_osac_private_v1_volumes_service_proto = out.File + file_osac_private_v1_volumes_service_proto_goTypes = nil + file_osac_private_v1_volumes_service_proto_depIdxs = nil +} diff --git a/fulfillment-service/internal/cmd/service/start/grpcserver/start_grpc_server_cmd.go b/fulfillment-service/internal/cmd/service/start/grpcserver/start_grpc_server_cmd.go index 6e252e753..af885225e 100644 --- a/fulfillment-service/internal/cmd/service/start/grpcserver/start_grpc_server_cmd.go +++ b/fulfillment-service/internal/cmd/service/start/grpcserver/start_grpc_server_cmd.go @@ -1184,6 +1184,20 @@ func (c *runnerContext) run(cmd *cobra.Command, argv []string) error { //nolint: } privatev1.RegisterStorageTiersServer(grpcServer, privateStorageTiersServer) + // Create the private volumes server: + c.logger.InfoContext(ctx, "Creating private volumes server") + privateVolumesServer, err := servers.NewPrivateVolumesServer(). + SetLogger(c.logger). + SetNotifier(notifier). + SetAttributionLogic(privateAttributionLogic). + SetTenancyLogic(tenancyLogic). + SetMetricsRegisterer(metricsRegisterer). + Build() + if err != nil { + return fmt.Errorf("failed to create private volumes server: %w", err) + } + privatev1.RegisterVolumesServer(grpcServer, privateVolumesServer) + // Create the roles server: c.logger.InfoContext(ctx, "Creating roles server") rolesServer, err := servers.NewRolesServer(). diff --git a/fulfillment-service/internal/cmd/service/start/restgateway/start_rest_gateway_cmd.go b/fulfillment-service/internal/cmd/service/start/restgateway/start_rest_gateway_cmd.go index 259081d7c..296cc3525 100644 --- a/fulfillment-service/internal/cmd/service/start/restgateway/start_rest_gateway_cmd.go +++ b/fulfillment-service/internal/cmd/service/start/restgateway/start_rest_gateway_cmd.go @@ -333,6 +333,7 @@ func (c *runnerContext) registerHandlers(ctx context.Context, mux *runtime.Serve privatev1.RegisterSecretsHandler, privatev1.RegisterStorageBackendsHandler, privatev1.RegisterStorageTiersHandler, + privatev1.RegisterVolumesHandler, privatev1.RegisterVirtualNetworksHandler, privatev1.RegisterSubnetsHandler, privatev1.RegisterSecurityGroupsHandler, diff --git a/fulfillment-service/internal/database/migrations/94_create_volumes_tables.up.sql b/fulfillment-service/internal/database/migrations/94_create_volumes_tables.up.sql new file mode 100644 index 000000000..014801c3f --- /dev/null +++ b/fulfillment-service/internal/database/migrations/94_create_volumes_tables.up.sql @@ -0,0 +1,75 @@ +-- +-- Copyright (c) 2026 Red Hat Inc. +-- +-- 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. +-- + +-- Create tables for Volume resources. +-- +-- Volume is a tenant-scoped resource that represents block storage provisioned on a backend +-- storage array through the OSAC CSI driver. The fulfillment-service tracks volume inventory +-- and the osac-operator Volume controller handles vendor provisioning. + +create table volumes ( + id text not null primary key, + name text not null default '', + creation_timestamp timestamp with time zone not null default now(), + deletion_timestamp timestamp with time zone not null default 'epoch', + finalizers text[] not null default '{}', + creator text not null default '', + tenant text not null default '', + project ltree not null default ''::ltree, + labels jsonb not null default '{}'::jsonb, + annotations jsonb not null default '{}'::jsonb, + data jsonb not null, + version integer not null default 0 +); + +create table archived_volumes ( + id text not null, + name text not null default '', + creation_timestamp timestamp with time zone not null, + deletion_timestamp timestamp with time zone not null, + archival_timestamp timestamp with time zone not null default now(), + creator text not null default '', + tenant text not null default '', + project ltree not null default ''::ltree, + labels jsonb not null default '{}'::jsonb, + annotations jsonb not null default '{}'::jsonb, + data jsonb not null, + version integer not null default 0 +); + +create index volumes_by_name on volumes (name); +create index volumes_by_creator on volumes (creator); +create index volumes_by_tenant on volumes (tenant); +create index volumes_by_label on volumes using gin (labels); + +-- Unique name per tenant on active records only. +create unique index volumes_unique_name_per_tenant + on volumes (name, tenant) + where deletion_timestamp = 'epoch' + and name != ''; + +-- Tenant foreign key referencing the tenants table. +alter table volumes + add constraint volumes_tenant_fk + foreign key (tenant) references tenants (name); + +-- Project foreign key. +alter table volumes + add constraint volumes_project_fk + foreign key (tenant, project) references projects (tenant, name); + +-- Enforce immutability of id, tenant, and project columns at the database level. +create trigger check_immutable_columns + before update on volumes + for each row + execute function check_immutable_columns('id', 'name', 'tenant', 'project'); diff --git a/fulfillment-service/internal/database/migrations/94_create_volumes_tables_test.go b/fulfillment-service/internal/database/migrations/94_create_volumes_tables_test.go new file mode 100644 index 000000000..a213ad149 --- /dev/null +++ b/fulfillment-service/internal/database/migrations/94_create_volumes_tables_test.go @@ -0,0 +1,159 @@ +/* +Copyright (c) 2026 Red Hat Inc. + +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. +*/ + +package migrations + +import ( + "context" + "errors" + "fmt" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgconn" + . "github.com/onsi/ginkgo/v2/dsl/core" + . "github.com/onsi/ginkgo/v2/dsl/table" + . "github.com/onsi/gomega" +) + +var _ = DescribeMigration("Create volumes tables", func() { + DescribeTable( + "Creates the expected tables", + func(ctx context.Context, table string) { + err := tool.Migrate(ctx, 94) + Expect(err).ToNot(HaveOccurred()) + + quotedTable := pgx.Identifier{table}.Sanitize() + + _, err = conn.Exec(ctx, + fmt.Sprintf(`insert into %s (id, tenant, data) values ($1, $2, $3)`, quotedTable), + "test-id", "system", `{}`, + ) + Expect(err).ToNot(HaveOccurred()) + + var count int + err = conn.QueryRow(ctx, + fmt.Sprintf(`select count(*) from %s where id = $1`, quotedTable), + "test-id", + ).Scan(&count) + Expect(err).ToNot(HaveOccurred()) + Expect(count).To(Equal(1)) + }, + Entry("volumes", "volumes"), + ) + + It("Rejects invalid tenant reference", func(ctx context.Context) { + err := tool.Migrate(ctx, 94) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into volumes (id, tenant, data) values ($1, $2, $3)`, + "bad-tenant-id", "no-such-tenant", `{}`, + ) + Expect(err).To(HaveOccurred()) + }) + + It("Enforces name uniqueness per tenant", func(ctx context.Context) { + err := tool.Migrate(ctx, 94) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into volumes (id, name, tenant, data) values ($1, $2, $3, $4)`, + "id-1", "my-volume", "system", `{}`, + ) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into volumes (id, name, tenant, data) values ($1, $2, $3, $4)`, + "id-2", "my-volume", "system", `{}`, + ) + Expect(err).To(HaveOccurred()) + var pgErr *pgconn.PgError + Expect(errors.As(err, &pgErr)).To(BeTrue()) + Expect(pgErr.Code).To(Equal("23505")) + }) + + It("Allows same name in different tenants", func(ctx context.Context) { + err := tool.Migrate(ctx, 94) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into tenants (id, name, data) values ($1, $2, $3)`, + "tenant-2", "tenant-2", `{}`, + ) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into volumes (id, name, tenant, data) values ($1, $2, $3, $4)`, + "id-3", "shared-name", "system", `{}`, + ) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into volumes (id, name, tenant, data) values ($1, $2, $3, $4)`, + "id-4", "shared-name", "tenant-2", `{}`, + ) + Expect(err).ToNot(HaveOccurred()) + }) + + It("Allows same name after soft delete", func(ctx context.Context) { + err := tool.Migrate(ctx, 94) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into volumes (id, name, tenant, data) values ($1, $2, $3, $4)`, + "id-5", "reusable-name", "system", `{}`, + ) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `update volumes set deletion_timestamp = now() where id = $1`, + "id-5", + ) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into volumes (id, name, tenant, data) values ($1, $2, $3, $4)`, + "id-6", "reusable-name", "system", `{}`, + ) + Expect(err).ToNot(HaveOccurred()) + }) + + It("Enforces immutability of id, name, tenant, and project", func(ctx context.Context) { + err := tool.Migrate(ctx, 94) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into volumes (id, name, tenant, data) values ($1, $2, $3, $4)`, + "immutable-id", "immutable-vol", "system", `{}`, + ) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `update volumes set id = $1 where id = $2`, + "changed-id", "immutable-id", + ) + Expect(err).To(HaveOccurred()) + + _, err = conn.Exec(ctx, + `update volumes set name = $1 where id = $2`, + "changed-name", "immutable-id", + ) + Expect(err).To(HaveOccurred()) + + _, err = conn.Exec(ctx, + `update volumes set tenant = $1 where id = $2`, + "other-tenant", "immutable-id", + ) + Expect(err).To(HaveOccurred()) + }) +}) diff --git a/fulfillment-service/internal/rendering/tables/osac.private.v1.Volume.yaml b/fulfillment-service/internal/rendering/tables/osac.private.v1.Volume.yaml new file mode 100644 index 000000000..0459560a0 --- /dev/null +++ b/fulfillment-service/internal/rendering/tables/osac.private.v1.Volume.yaml @@ -0,0 +1,39 @@ +# +# Copyright (c) 2026 Red Hat Inc. +# +# 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. +# + +columns: + +- header: ID + value: this.id + +- header: NAME + value: "has(this.metadata.name)? this.metadata.name: '-'" + +- header: TENANT + value: "has(this.metadata.tenant)? this.metadata.tenant: '-'" + +- header: TIER + value: "has(this.spec.storage_tier)? this.spec.storage_tier: '-'" + +- header: SIZE (GIB) + value: "has(this.spec.size_gib)? string(this.spec.size_gib): '-'" + +- header: CLUSTER + value: "has(this.spec.cluster)? this.spec.cluster: '-'" + +- header: BACKEND + value: "has(this.status.backend) && this.status.backend != ''? this.status.backend: '-'" + +- header: STATE + value: this.status.state + type: osac.private.v1.VolumeState diff --git a/fulfillment-service/internal/servers/private_volumes_server.go b/fulfillment-service/internal/servers/private_volumes_server.go new file mode 100644 index 000000000..838cd2d8f --- /dev/null +++ b/fulfillment-service/internal/servers/private_volumes_server.go @@ -0,0 +1,146 @@ +/* +Copyright (c) 2026 Red Hat Inc. + +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. +*/ + +package servers + +import ( + "context" + "errors" + "log/slog" + + "github.com/prometheus/client_golang/prometheus" + + privatev1 "github.com/osac-project/osac/fulfillment-service/internal/api/osac/private/v1" + "github.com/osac-project/osac/fulfillment-service/internal/auth" + "github.com/osac-project/osac/fulfillment-service/internal/events" +) + +type PrivateVolumesServerBuilder struct { + logger *slog.Logger + notifier events.Notifier + attributionLogic auth.AttributionLogic + tenancyLogic auth.TenancyLogic + metricsRegisterer prometheus.Registerer +} + +var _ privatev1.VolumesServer = (*PrivateVolumesServer)(nil) + +type PrivateVolumesServer struct { + privatev1.UnimplementedVolumesServer + + logger *slog.Logger + generic *GenericServer[*privatev1.Volume] +} + +func NewPrivateVolumesServer() *PrivateVolumesServerBuilder { + return &PrivateVolumesServerBuilder{} +} + +func (b *PrivateVolumesServerBuilder) SetLogger(value *slog.Logger) *PrivateVolumesServerBuilder { + b.logger = value + return b +} + +func (b *PrivateVolumesServerBuilder) SetNotifier(value events.Notifier) *PrivateVolumesServerBuilder { + b.notifier = value + return b +} + +func (b *PrivateVolumesServerBuilder) SetAttributionLogic(value auth.AttributionLogic) *PrivateVolumesServerBuilder { + b.attributionLogic = value + return b +} + +func (b *PrivateVolumesServerBuilder) SetTenancyLogic(value auth.TenancyLogic) *PrivateVolumesServerBuilder { + b.tenancyLogic = value + return b +} + +func (b *PrivateVolumesServerBuilder) SetMetricsRegisterer(value prometheus.Registerer) *PrivateVolumesServerBuilder { + b.metricsRegisterer = value + return b +} + +func (b *PrivateVolumesServerBuilder) Build() (result *PrivateVolumesServer, err error) { + if b.logger == nil { + err = errors.New("logger is mandatory") + return + } + if b.tenancyLogic == nil { + err = errors.New("tenancy logic is mandatory") + return + } + + generic, err := NewGenericServer[*privatev1.Volume](). + SetLogger(b.logger). + SetService(privatev1.Volumes_ServiceDesc.ServiceName). + SetNotifier(b.notifier). + SetAttributionLogic(b.attributionLogic). + SetTenancyLogic(b.tenancyLogic). + SetMetricsRegisterer(b.metricsRegisterer). + Build() + if err != nil { + return + } + + result = &PrivateVolumesServer{ + logger: b.logger, + generic: generic, + } + return +} + +func (s *PrivateVolumesServer) List(ctx context.Context, + request *privatev1.VolumesListRequest) (response *privatev1.VolumesListResponse, err error) { + err = s.generic.List(ctx, request, &response) + return +} + +func (s *PrivateVolumesServer) Get(ctx context.Context, + request *privatev1.VolumesGetRequest) (response *privatev1.VolumesGetResponse, err error) { + err = s.generic.Get(ctx, request, &response) + return +} + +func (s *PrivateVolumesServer) Create(ctx context.Context, + request *privatev1.VolumesCreateRequest) (response *privatev1.VolumesCreateResponse, err error) { + vol := request.GetObject() + + if vol.GetStatus() == nil { + vol.SetStatus(&privatev1.VolumeStatus{}) + } + vol.GetStatus().SetState(privatev1.VolumeState_VOLUME_STATE_CREATING) + + vol.SetId("") + + err = s.generic.Create(ctx, request, &response) + return +} + +func (s *PrivateVolumesServer) Update(ctx context.Context, + request *privatev1.VolumesUpdateRequest) (response *privatev1.VolumesUpdateResponse, err error) { + err = s.generic.Update(ctx, request, &response) + return +} + +func (s *PrivateVolumesServer) Delete(ctx context.Context, + request *privatev1.VolumesDeleteRequest) (response *privatev1.VolumesDeleteResponse, err error) { + err = s.generic.Delete(ctx, request, &response) + return +} + +func (s *PrivateVolumesServer) Signal(ctx context.Context, + request *privatev1.VolumesSignalRequest) (response *privatev1.VolumesSignalResponse, err error) { + err = s.generic.Signal(ctx, request, &response) + return +} diff --git a/fulfillment-service/internal/servers/private_volumes_server_test.go b/fulfillment-service/internal/servers/private_volumes_server_test.go new file mode 100644 index 000000000..e501f0655 --- /dev/null +++ b/fulfillment-service/internal/servers/private_volumes_server_test.go @@ -0,0 +1,384 @@ +/* +Copyright (c) 2026 Red Hat Inc. + +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. +*/ + +package servers + +import ( + "fmt" + + "github.com/google/uuid" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/fieldmaskpb" + + privatev1 "github.com/osac-project/osac/fulfillment-service/internal/api/osac/private/v1" +) + +var _ = Describe("Private volumes server", func() { + Describe("Creation", func() { + It("Can be built if all the required parameters are set", func() { + server, err := NewPrivateVolumesServer(). + SetLogger(logger). + SetAttributionLogic(attribution). + SetTenancyLogic(tenancy). + Build() + Expect(err).ToNot(HaveOccurred()) + Expect(server).ToNot(BeNil()) + }) + + It("Fails if logger is not set", func() { + server, err := NewPrivateVolumesServer(). + SetAttributionLogic(attribution). + SetTenancyLogic(tenancy). + Build() + Expect(err).To(MatchError("logger is mandatory")) + Expect(server).To(BeNil()) + }) + + It("Fails if tenancy logic is not set", func() { + server, err := NewPrivateVolumesServer(). + SetLogger(logger). + SetAttributionLogic(attribution). + Build() + Expect(err).To(MatchError("tenancy logic is mandatory")) + Expect(server).To(BeNil()) + }) + }) + + Describe("Behaviour", func() { + var server *PrivateVolumesServer + + BeforeEach(func() { + var err error + server, err = NewPrivateVolumesServer(). + SetLogger(logger). + SetAttributionLogic(attribution). + SetTenancyLogic(tenancy). + Build() + Expect(err).ToNot(HaveOccurred()) + }) + + createVolume := func() *privatev1.Volume { + response, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: "test-volume", + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + SizeGib: 100, + AccessMode: "ReadWriteOnce", + Cluster: "cluster-1", + }.Build(), + }.Build(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + return response.GetObject() + } + + createVolumeWithName := func(name string) *privatev1.Volume { + response, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: name, + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + SizeGib: 100, + AccessMode: "ReadWriteOnce", + Cluster: "cluster-1", + }.Build(), + }.Build(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + return response.GetObject() + } + + createStandaloneVolume := func() *privatev1.Volume { + response, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: "standalone-volume", + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + SizeGib: 50, + AccessMode: "ReadWriteOnce", + }.Build(), + }.Build(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + return response.GetObject() + } + + It("Creates and gets a volume", func() { + created := createVolume() + + Expect(created.GetId()).ToNot(BeEmpty()) + Expect(created.GetSpec().GetStorageTier()).To(Equal("gold")) + Expect(created.GetSpec().GetSizeGib()).To(Equal(int64(100))) + Expect(created.GetSpec().GetAccessMode()).To(Equal("ReadWriteOnce")) + Expect(created.GetSpec().GetCluster()).To(Equal("cluster-1")) + Expect(created.GetStatus().GetState()).To(Equal( + privatev1.VolumeState_VOLUME_STATE_CREATING)) + + getResponse, err := server.Get(ctx, privatev1.VolumesGetRequest_builder{ + Id: created.GetId(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + obj := getResponse.GetObject() + Expect(obj.GetId()).To(Equal(created.GetId())) + Expect(obj.GetSpec().GetStorageTier()).To(Equal("gold")) + }) + + It("Creates a standalone volume without cluster or pvc_ref", func() { + created := createStandaloneVolume() + + Expect(created.GetId()).ToNot(BeEmpty()) + Expect(created.GetSpec().GetStorageTier()).To(Equal("gold")) + Expect(created.GetSpec().GetSizeGib()).To(Equal(int64(50))) + Expect(created.GetSpec().GetCluster()).To(BeEmpty()) + Expect(created.GetSpec().GetPvcRef()).To(BeNil()) + Expect(created.GetStatus().GetState()).To(Equal( + privatev1.VolumeState_VOLUME_STATE_CREATING)) + }) + + It("Creates a volume with pvc_ref", func() { + response, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: "pvc-volume", + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + SizeGib: 100, + AccessMode: "ReadWriteOnce", + Cluster: "cluster-1", + PvcRef: privatev1.PVCReference_builder{ + Name: "my-pvc", + Namespace: "default", + Cluster: "cluster-1", + }.Build(), + }.Build(), + }.Build(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + obj := response.GetObject() + Expect(obj.GetSpec().GetPvcRef().GetName()).To(Equal("my-pvc")) + Expect(obj.GetSpec().GetPvcRef().GetNamespace()).To(Equal("default")) + Expect(obj.GetSpec().GetPvcRef().GetCluster()).To(Equal("cluster-1")) + }) + + It("List volumes", func() { + const count = 5 + for i := range count { + createVolumeWithName(fmt.Sprintf("volume-%d", i)) + } + + response, err := server.List(ctx, privatev1.VolumesListRequest_builder{}.Build()) + Expect(err).ToNot(HaveOccurred()) + Expect(response.GetItems()).To(HaveLen(count)) + }) + + It("List volumes with limit", func() { + const count = 5 + for i := range count { + createVolumeWithName(fmt.Sprintf("volume-%d", i)) + } + + response, err := server.List(ctx, privatev1.VolumesListRequest_builder{ + Limit: new(int32(2)), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + Expect(response.GetSize()).To(BeNumerically("==", 2)) + }) + + It("List volumes with filter", func() { + const count = 3 + var ids []string + for i := range count { + obj := createVolumeWithName(fmt.Sprintf("volume-%d", i)) + ids = append(ids, obj.GetId()) + } + + for _, id := range ids { + response, err := server.List(ctx, privatev1.VolumesListRequest_builder{ + Filter: new(fmt.Sprintf("this.id == '%s'", id)), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + Expect(response.GetSize()).To(BeNumerically("==", 1)) + Expect(response.GetItems()[0].GetId()).To(Equal(id)) + } + }) + + It("List volumes with order", func() { + createVolumeWithName("aaa-volume") + createVolumeWithName("zzz-volume") + + response, err := server.List(ctx, privatev1.VolumesListRequest_builder{ + Order: new("metadata.name asc"), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + Expect(response.GetSize()).To(BeNumerically("==", 2)) + Expect(response.GetItems()[0].GetMetadata().GetName()).To(Equal("aaa-volume")) + Expect(response.GetItems()[1].GetMetadata().GetName()).To(Equal("zzz-volume")) + }) + + It("Update applies partial changes via field mask", func() { + created := createVolume() + + updateResponse, err := server.Update(ctx, privatev1.VolumesUpdateRequest_builder{ + Object: privatev1.Volume_builder{ + Id: created.GetId(), + Status: privatev1.VolumeStatus_builder{ + State: privatev1.VolumeState_VOLUME_STATE_AVAILABLE, + VendorVolumeId: "vast-vol-123", + Backend: "vast-1", + Protocol: "NFS", + }.Build(), + }.Build(), + UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{ + "status.state", + "status.vendor_volume_id", + "status.backend", + "status.protocol", + }}, + }.Build()) + Expect(err).ToNot(HaveOccurred()) + Expect(updateResponse.GetObject().GetStatus().GetState()).To(Equal( + privatev1.VolumeState_VOLUME_STATE_AVAILABLE)) + Expect(updateResponse.GetObject().GetStatus().GetVendorVolumeId()).To(Equal("vast-vol-123")) + Expect(updateResponse.GetObject().GetStatus().GetBackend()).To(Equal("vast-1")) + Expect(updateResponse.GetObject().GetStatus().GetProtocol()).To(Equal("NFS")) + Expect(updateResponse.GetObject().GetSpec().GetStorageTier()).To(Equal("gold")) + }) + + It("Delete removes the object", func() { + created := createVolume() + + _, err := server.Delete(ctx, privatev1.VolumesDeleteRequest_builder{ + Id: created.GetId(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + + _, err = server.Get(ctx, privatev1.VolumesGetRequest_builder{ + Id: created.GetId(), + }.Build()) + Expect(err).To(HaveOccurred()) + st, ok := status.FromError(err) + Expect(ok).To(BeTrue()) + Expect(st.Code()).To(Equal(codes.NotFound)) + }) + + It("Generates UUID for id ignoring caller-provided value", func() { + callerProvidedId := "my-custom-id" + response, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Id: callerProvidedId, + Metadata: privatev1.Metadata_builder{ + Name: "test-volume", + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + SizeGib: 100, + AccessMode: "ReadWriteOnce", + }.Build(), + }.Build(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + Expect(response.GetObject().GetId()).ToNot(Equal(callerProvidedId)) + _, err = uuid.Parse(response.GetObject().GetId()) + Expect(err).ToNot(HaveOccurred()) + }) + + It("Create always sets state to CREATING regardless of caller-provided state", func() { + response, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: "test-volume", + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + SizeGib: 100, + AccessMode: "ReadWriteOnce", + }.Build(), + Status: privatev1.VolumeStatus_builder{ + State: privatev1.VolumeState_VOLUME_STATE_AVAILABLE, + }.Build(), + }.Build(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + Expect(response.GetObject().GetStatus().GetState()).To(Equal( + privatev1.VolumeState_VOLUME_STATE_CREATING)) + }) + + Describe("Name uniqueness", func() { + It("Create with duplicate active name fails", func() { + createVolumeWithName("unique-name") + + _, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: "unique-name", + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + SizeGib: 50, + AccessMode: "ReadWriteOnce", + }.Build(), + }.Build(), + }.Build()) + Expect(err).To(HaveOccurred()) + st, ok := status.FromError(err) + Expect(ok).To(BeTrue()) + Expect(st.Code()).To(Equal(codes.AlreadyExists)) + }) + + It("Create after delete of same name succeeds", func() { + created := createVolumeWithName("reusable-name") + + _, err := server.Delete(ctx, privatev1.VolumesDeleteRequest_builder{ + Id: created.GetId(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + + second := createVolumeWithName("reusable-name") + Expect(second.GetId()).ToNot(Equal(created.GetId())) + Expect(second.GetMetadata().GetName()).To(Equal("reusable-name")) + }) + }) + + Describe("Signal", func() { + It("Signal succeeds for existing volume", func() { + created := createVolume() + + _, err := server.Signal(ctx, privatev1.VolumesSignalRequest_builder{ + Id: created.GetId(), + }.Build()) + Expect(err).ToNot(HaveOccurred()) + }) + + It("Signal fails for non-existent volume", func() { + _, err := server.Signal(ctx, privatev1.VolumesSignalRequest_builder{ + Id: "non-existent-id", + }.Build()) + Expect(err).To(HaveOccurred()) + st, ok := status.FromError(err) + Expect(ok).To(BeTrue()) + Expect(st.Code()).To(Equal(codes.NotFound)) + }) + }) + }) +}) diff --git a/fulfillment-service/proto/private/osac/private/v1/event_type.proto b/fulfillment-service/proto/private/osac/private/v1/event_type.proto index 5a0ba6190..c79687b69 100644 --- a/fulfillment-service/proto/private/osac/private/v1/event_type.proto +++ b/fulfillment-service/proto/private/osac/private/v1/event_type.proto @@ -46,6 +46,7 @@ import "osac/private/v1/storage_tier_type.proto"; import "osac/private/v1/subnet_type.proto"; import "osac/private/v1/user_type.proto"; import "osac/private/v1/virtual_network_type.proto"; +import "osac/private/v1/volume_type.proto"; // Represents events delivered by the server. message Event { @@ -90,6 +91,7 @@ message Event { ClusterVersion cluster_version = 38; StorageTier storage_tier = 39; Secret secret = 40; + Volume volume = 41; } } diff --git a/fulfillment-service/proto/private/osac/private/v1/volume_type.proto b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto new file mode 100644 index 000000000..f0ff7df08 --- /dev/null +++ b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto @@ -0,0 +1,131 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +syntax = "proto3"; + +package osac.private.v1; + +import "osac/private/v1/metadata_type.proto"; + +// Lifecycle states for Volume resources. +enum VolumeState { + // State is unknown or has not been determined yet. + VOLUME_STATE_UNSPECIFIED = 0; + + // The volume is being provisioned on the storage backend. + VOLUME_STATE_CREATING = 1; + + // The volume has been provisioned and is ready for use. + VOLUME_STATE_AVAILABLE = 2; + + // The volume provisioning has permanently failed after max retries and requires admin intervention. + VOLUME_STATE_FAILED = 3; + + // The volume is being deprovisioned from the storage backend. + VOLUME_STATE_DELETING = 4; + + // The volume has been fully deprovisioned and the record is archived. + VOLUME_STATE_DELETED = 5; +} + +// Identifies the PVC that triggered the volume creation. +message PVCReference { + // Name of the PersistentVolumeClaim. + string name = 1; + + // Namespace of the PersistentVolumeClaim. + string namespace = 2; + + // Cluster where the PersistentVolumeClaim exists. + string cluster = 3; +} + +// Identifies the PV created for a volume. +message PVReference { + // Name of the PersistentVolume. + string name = 1; + + // Cluster where the PersistentVolume exists. + string cluster = 2; +} + +// Represents a block storage volume managed by the OSAC storage control plane. +// +// Volumes are tenant-scoped resources that represent storage provisioned on a backend storage array +// through the OSAC CSI driver. The fulfillment-service tracks volume inventory in PostgreSQL and +// reconciles Volume CRs on the hub cluster. The osac-operator Volume controller handles vendor +// provisioning via the backend's CSI controller. +// +// Volumes are created through the private API, typically by the OSAC CSI driver in response to a +// PVC on a tenant cluster. The spec captures the user's requested configuration (tier, size, +// access mode), while the status tracks the system-resolved state (vendor volume ID, backend, +// protocol). +message Volume { + // Unique identifier of the volume. + string id = 1; + + // Metadata of the volume. + Metadata metadata = 2; + + // Desired configuration of the volume (immutable after creation). + VolumeSpec spec = 3; + + // Current operational status of the volume. + VolumeStatus status = 4; +} + +// Defines the desired configuration for a Volume. All fields are immutable after creation. +message VolumeSpec { + // Name of the StorageTier that determines which backend and protocol serve this volume. + string storage_tier = 1; + + // Requested storage capacity in gibibytes (GiB). + int64 size_gib = 2; + + // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). + string access_mode = 3; + + // Name of the cluster where the PVC that triggered this volume exists. + string cluster = 4; + + // Reference to the PVC that triggered this volume creation. Set by the CSI driver. + // Empty for API-driven volume creation. + PVCReference pvc_ref = 5; +} + +// Represents the current operational state of a Volume. +message VolumeStatus { + // Current lifecycle state of the volume. + VolumeState state = 1; + + // Human-readable message providing additional details about the current state. + optional string message = 2; + + // Opaque identifier assigned by the vendor storage array. Set by the osac-operator after vendor + // CSI CreateVolume succeeds. + string vendor_volume_id = 3; + + // Name of the StorageBackend that serves this volume. Resolved during tier resolution at + // creation time. Visible only through the private API. + string backend = 4; + + // Storage protocol used for this volume (e.g., NFS, BLOCK). Resolved during tier resolution at + // creation time. Visible only through the private API. + string protocol = 5; + + // Operator-confirmed reference to the PVC on the tenant cluster. + PVCReference pvc_ref = 6; + + // Reference to the PV created for this volume on the tenant cluster. + PVReference pv_ref = 7; +} diff --git a/fulfillment-service/proto/private/osac/private/v1/volumes_service.proto b/fulfillment-service/proto/private/osac/private/v1/volumes_service.proto new file mode 100644 index 000000000..458249428 --- /dev/null +++ b/fulfillment-service/proto/private/osac/private/v1/volumes_service.proto @@ -0,0 +1,154 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +syntax = "proto3"; + +package osac.private.v1; + +import "google/api/annotations.proto"; +import "google/protobuf/field_mask.proto"; +import "osac/private/v1/volume_type.proto"; + +message VolumesListRequest { + // Index of the first result. If not specified the default value will be zero. + optional int32 offset = 1; + + // Maximum number of results to be returned by the server. When not specified all the results will be returned. Note + // that there may not be enough results to return, and that the server may decide, for performance reasons, to return + // less results than requested. + optional int32 limit = 2; + + // Filter criteria. + // + // The value of this parameter is a [CEL](https://cel.dev) expression used to select which objects to return. The + // built-in `this` variable refers to the object being tested and `now` refers to the current date and time. If the + // expression evaluates to `true` the object is included in the results. For example, to retrieve all volumes in the + // AVAILABLE state: + // + // this.status.state == 2 + // + // If this isn't provided, or if the value is empty, then all the volumes that the user has permission to see will be + // returned. Not all CEL constructs are currently supported for implementation reasons; see the filter documentation + // (docs/FILTER.md) for the full details. + optional string filter = 3; + + // Order criteria. + // + // The syntax of this parameter is similar to the syntax of the _order by_ clause of a SQL statement, but using the + // names of the attributes of the volume instead of the names of the columns of a table. For example, in order to + // sort the volumes descending by size: + // + // spec.size_gib desc + // + // If the parameter isn't provided, or if the value is empty, then the order of the results is undefined. + optional string order = 4; +} + +message VolumesListResponse { + // Actual number of items returned. Note that this may be smaller than the value requested in the `limit` parameter + // of the request if there are not enough items, or if the system decides that returning that number of items isn't + // feasible or convenient for performance reasons. + int32 size = 1; + + // Total number of items of the collection that match the search criteria, regardless of the number of results + // requested with the `limit` parameter. + int32 total = 2; + + // List of results. + repeated Volume items = 3; +} + +message VolumesGetRequest { + string id = 1; +} + +message VolumesGetResponse { + Volume object = 1; +} + +message VolumesCreateRequest { + Volume object = 1; +} + +message VolumesCreateResponse { + Volume object = 1; +} + +message VolumesUpdateRequest { + Volume object = 1; + google.protobuf.FieldMask update_mask = 2; + + // Lock enables optimistic locking. When set to true, the server verifies that the current version of the object + // matches the value of the metadata.version field of the submitted object. If they differ the update will be + // rejected. This is useful to prevent lost updates when multiple clients are modifying the same object concurrently. + bool lock = 3; +} + +message VolumesUpdateResponse { + Volume object = 1; +} + +message VolumesDeleteRequest { + string id = 1; +} + +message VolumesDeleteResponse {} + +message VolumesSignalRequest { + string id = 1; +} + +message VolumesSignalResponse {} + +service Volumes { + // Retrieves the list of volumes. + rpc List(VolumesListRequest) returns (VolumesListResponse) { + option (google.api.http) = {get: "/api/private/v1/volumes"}; + } + + // Retrieves the details of one specific volume. + rpc Get(VolumesGetRequest) returns (VolumesGetResponse) { + option (google.api.http) = { + get: "/api/private/v1/volumes/{id}" + response_body: "object" + }; + } + + // Creates a new volume. + rpc Create(VolumesCreateRequest) returns (VolumesCreateResponse) { + option (google.api.http) = { + post: "/api/private/v1/volumes" + body: "object" + response_body: "object" + }; + } + + // Updates an existing volume. + rpc Update(VolumesUpdateRequest) returns (VolumesUpdateResponse) { + option (google.api.http) = { + patch: "/api/private/v1/volumes/{object.id}" + body: "object" + response_body: "object" + }; + } + + // Deletes a volume. + rpc Delete(VolumesDeleteRequest) returns (VolumesDeleteResponse) { + option (google.api.http) = {delete: "/api/private/v1/volumes/{id}"}; + } + + // Signals the volume for re-reconciliation. Called by the operator feedback controller after + // Volume CR status changes on the hub. + rpc Signal(VolumesSignalRequest) returns (VolumesSignalResponse) { + } +} From 9828151c7ebb54b446c9c583b429dede24492101 Mon Sep 17 00:00:00 2001 From: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Date: Fri, 7 Aug 2026 13:51:30 -0400 Subject: [PATCH 2/7] OSAC-2872: add Volume CRD types and scheme registration Volume CRD for the osac-operator, representing block storage provisioned on vendor arrays through the storage control plane. VolumeSpec (immutable after creation): - storageTier: name of the StorageTier for backend/protocol resolution - sizeGiB: requested capacity - accessMode: Kubernetes access mode (ReadWriteOnce, ReadWriteMany) - cluster: optional, cluster where the PVC exists - pvcRef: optional PVC reference set by the CSI driver VolumeStatus: - phase: Progressing, Ready, Failed, Deleting - conditions: VendorProvisioned (set True by Volume controller after vendor CSI CreateVolume succeeds) - vendorVolumeID, backend, protocol: resolved by tier resolution - pvcRef, pvRef: operator-confirmed PVC/PV on tenant cluster Constants (volume_names.go): namespace (osac-volume), labels (volume, volume-uuid), finalizers (volume, feedback, cleanup). Scheme registration in groupversion_info.go. Print columns show Tier, Size, Access, Cluster, Phase (default) and Backend, VendorID (wide). Generated: CRD manifest, deepcopy, Helm chart CRD sync. Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Assisted-by: Cursor/Claude Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> --- .../api/v1alpha1/groupversion_info.go | 2 + osac-operator/api/v1alpha1/volume_names.go | 39 +++ osac-operator/api/v1alpha1/volume_types.go | 176 ++++++++++++ .../api/v1alpha1/zz_generated.deepcopy.go | 141 ++++++++++ .../templates/osac.openshift.io_volumes.yaml | 265 ++++++++++++++++++ .../crd/bases/osac.openshift.io_volumes.yaml | 262 +++++++++++++++++ 6 files changed, 885 insertions(+) create mode 100644 osac-operator/api/v1alpha1/volume_names.go create mode 100644 osac-operator/api/v1alpha1/volume_types.go create mode 100644 osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml create mode 100644 osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml diff --git a/osac-operator/api/v1alpha1/groupversion_info.go b/osac-operator/api/v1alpha1/groupversion_info.go index 047f75c13..8b68c9319 100644 --- a/osac-operator/api/v1alpha1/groupversion_info.go +++ b/osac-operator/api/v1alpha1/groupversion_info.go @@ -58,6 +58,8 @@ func addKnownTypes(s *runtime.Scheme) error { &ExternalIPAttachmentList{}, &NATGateway{}, &NATGatewayList{}, + &Volume{}, + &VolumeList{}, ) metav1.AddToGroupVersion(s, GroupVersion) return nil diff --git a/osac-operator/api/v1alpha1/volume_names.go b/osac-operator/api/v1alpha1/volume_names.go new file mode 100644 index 000000000..9b773388d --- /dev/null +++ b/osac-operator/api/v1alpha1/volume_names.go @@ -0,0 +1,39 @@ +/* +Copyright 2026. + +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. +*/ + +package v1alpha1 + +const ( + // VolumeNamespace is the default namespace where Volume CRs are created. + VolumeNamespace = "osac-volume" + + // VolumeLabelName is the label key for the volume name. + VolumeLabelName = "osac.openshift.io/volume" + + // VolumeLabelUUID is the label key for the fulfillment-service volume ID, + // used by the feedback controller to map Volume CRs back to inventory records. + VolumeLabelUUID = "osac.openshift.io/volume-uuid" + + // VolumeFinalizer is the finalizer managed by the Volume resource controller. + VolumeFinalizer = "osac.openshift.io/volume-finalizer" + + // VolumeFeedbackFinalizer is the finalizer managed by the Volume feedback controller. + VolumeFeedbackFinalizer = "osac.openshift.io/volume-feedback" + + // VolumeCleanupFinalizer is the finalizer added to ClusterOrder when volumes + // are created, blocking cluster deletion until volumes are processed. + VolumeCleanupFinalizer = "osac.openshift.io/volume-cleanup" +) diff --git a/osac-operator/api/v1alpha1/volume_types.go b/osac-operator/api/v1alpha1/volume_types.go new file mode 100644 index 000000000..c2fe08bb4 --- /dev/null +++ b/osac-operator/api/v1alpha1/volume_types.go @@ -0,0 +1,176 @@ +/* +Copyright 2026. + +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. +*/ + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// VolumeSpec defines the desired state of Volume. +type VolumeSpec struct { + // StorageTier is the name of the StorageTier that determines which backend + // and protocol serve this volume. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="storageTier is immutable" + StorageTier string `json:"storageTier"` + + // SizeGiB is the requested storage capacity in gibibytes. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Minimum=1 + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="sizeGiB is immutable" + SizeGiB int64 `json:"sizeGiB"` + + // AccessMode is the Kubernetes access mode for the volume + // (e.g., "ReadWriteOnce", "ReadWriteMany"). + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="accessMode is immutable" + AccessMode string `json:"accessMode"` + + // Cluster is the name of the cluster where the PVC that triggered this + // volume exists. Empty for standalone volumes created via the API without + // a cluster association. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="cluster is immutable" + Cluster string `json:"cluster,omitempty"` + + // PVCRef is the reference to the PVC that triggered this volume creation. + // Set by the CSI driver. Empty for API-driven volume creation. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="pvcRef is immutable" + PVCRef *PVCReferenceType `json:"pvcRef,omitempty"` +} + +// PVCReferenceType identifies the PVC that triggered volume creation. +type PVCReferenceType struct { + // Name of the PersistentVolumeClaim. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + Name string `json:"name"` + + // Namespace of the PersistentVolumeClaim. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + Namespace string `json:"namespace"` + + // Cluster where the PersistentVolumeClaim exists. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + Cluster string `json:"cluster"` +} + +// PVReferenceType identifies the PV created for a volume. +type PVReferenceType struct { + // Name of the PersistentVolume. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + Name string `json:"name"` + + // Cluster where the PersistentVolume exists. + // +kubebuilder:validation:Required + // +kubebuilder:validation:MinLength=1 + Cluster string `json:"cluster"` +} + +// VolumePhaseType is a valid value for .status.phase +type VolumePhaseType string + +const ( + VolumePhaseProgressing VolumePhaseType = "Progressing" + VolumePhaseReady VolumePhaseType = "Ready" + VolumePhaseFailed VolumePhaseType = "Failed" + VolumePhaseDeleting VolumePhaseType = "Deleting" +) + +// VolumeConditionType is a valid value for .status.conditions.type +type VolumeConditionType string + +const ( + // VolumeConditionVendorProvisioned indicates whether the volume has been + // provisioned on the vendor storage array. + VolumeConditionVendorProvisioned VolumeConditionType = "VendorProvisioned" +) + +// VolumeStatus defines the observed state of Volume. +type VolumeStatus struct { + // Phase provides a single-value overview of the state of the Volume. + // +kubebuilder:validation:Optional + // +kubebuilder:validation:Enum=Progressing;Ready;Failed;Deleting + Phase VolumePhaseType `json:"phase,omitempty"` + + // Conditions holds an array of metav1.Condition that describe the state of the Volume. + // +kubebuilder:validation:Optional + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` + + // VendorVolumeID is the opaque identifier assigned by the vendor storage array. + // Set by the Volume controller after vendor CSI CreateVolume succeeds. + // +kubebuilder:validation:Optional + VendorVolumeID string `json:"vendorVolumeID,omitempty"` + + // Backend is the name of the StorageBackend that serves this volume. + // Resolved during tier resolution at creation time. + // +kubebuilder:validation:Optional + Backend string `json:"backend,omitempty"` + + // Protocol is the storage protocol used for this volume (e.g., NFS, BLOCK). + // Resolved during tier resolution at creation time. + // +kubebuilder:validation:Optional + Protocol string `json:"protocol,omitempty"` + + // PVCRef is the operator-confirmed reference to the PVC on the tenant cluster. + // +kubebuilder:validation:Optional + PVCRef *PVCReferenceType `json:"pvcRef,omitempty"` + + // PVRef is the reference to the PV created for this volume on the tenant cluster. + // +kubebuilder:validation:Optional + PVRef *PVReferenceType `json:"pvRef,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:resource:shortName=vol +// +kubebuilder:printcolumn:name="Tier",type=string,JSONPath=`.spec.storageTier` +// +kubebuilder:printcolumn:name="Size",type=integer,JSONPath=`.spec.sizeGiB` +// +kubebuilder:printcolumn:name="Access",type=string,JSONPath=`.spec.accessMode` +// +kubebuilder:printcolumn:name="Cluster",type=string,JSONPath=`.spec.cluster` +// +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Backend",type=string,JSONPath=`.status.backend`,priority=1 +// +kubebuilder:printcolumn:name="VendorID",type=string,JSONPath=`.status.vendorVolumeID`,priority=1 + +// Volume is the Schema for the volumes API. +type Volume struct { + metav1.TypeMeta `json:",inline"` + + // +optional + metav1.ObjectMeta `json:"metadata,omitempty,omitzero"` + + // +required + Spec VolumeSpec `json:"spec"` + + // +optional + Status VolumeStatus `json:"status,omitempty,omitzero"` +} + +// +kubebuilder:object:root=true + +// VolumeList contains a list of Volume. +type VolumeList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Volume `json:"items"` +} diff --git a/osac-operator/api/v1alpha1/zz_generated.deepcopy.go b/osac-operator/api/v1alpha1/zz_generated.deepcopy.go index 73d0a6b63..101281d8b 100644 --- a/osac-operator/api/v1alpha1/zz_generated.deepcopy.go +++ b/osac-operator/api/v1alpha1/zz_generated.deepcopy.go @@ -859,6 +859,36 @@ func (in *NodeRequest) DeepCopy() *NodeRequest { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PVCReferenceType) DeepCopyInto(out *PVCReferenceType) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PVCReferenceType. +func (in *PVCReferenceType) DeepCopy() *PVCReferenceType { + if in == nil { + return nil + } + out := new(PVCReferenceType) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PVReferenceType) DeepCopyInto(out *PVReferenceType) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PVReferenceType. +func (in *PVReferenceType) DeepCopy() *PVReferenceType { + if in == nil { + return nil + } + out := new(PVReferenceType) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ResolvedStorageClass) DeepCopyInto(out *ResolvedStorageClass) { *out = *in @@ -1398,3 +1428,114 @@ func (in *VirtualNetworkStatus) DeepCopy() *VirtualNetworkStatus { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Volume) DeepCopyInto(out *Volume) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Volume. +func (in *Volume) DeepCopy() *Volume { + if in == nil { + return nil + } + out := new(Volume) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Volume) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeList) DeepCopyInto(out *VolumeList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Volume, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeList. +func (in *VolumeList) DeepCopy() *VolumeList { + if in == nil { + return nil + } + out := new(VolumeList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *VolumeList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeSpec) DeepCopyInto(out *VolumeSpec) { + *out = *in + if in.PVCRef != nil { + in, out := &in.PVCRef, &out.PVCRef + *out = new(PVCReferenceType) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeSpec. +func (in *VolumeSpec) DeepCopy() *VolumeSpec { + if in == nil { + return nil + } + out := new(VolumeSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VolumeStatus) DeepCopyInto(out *VolumeStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.PVCRef != nil { + in, out := &in.PVCRef, &out.PVCRef + *out = new(PVCReferenceType) + **out = **in + } + if in.PVRef != nil { + in, out := &in.PVRef, &out.PVRef + *out = new(PVReferenceType) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeStatus. +func (in *VolumeStatus) DeepCopy() *VolumeStatus { + if in == nil { + return nil + } + out := new(VolumeStatus) + in.DeepCopyInto(out) + return out +} diff --git a/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml b/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml new file mode 100644 index 000000000..b630fb6fe --- /dev/null +++ b/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml @@ -0,0 +1,265 @@ +{{- if .Values.install }} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + "helm.sh/resource-policy": keep + controller-gen.kubebuilder.io/version: v0.20.0 + name: volumes.osac.openshift.io +spec: + group: osac.openshift.io + names: + kind: Volume + listKind: VolumeList + plural: volumes + shortNames: + - vol + singular: volume + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.storageTier + name: Tier + type: string + - jsonPath: .spec.sizeGiB + name: Size + type: integer + - jsonPath: .spec.accessMode + name: Access + type: string + - jsonPath: .spec.cluster + name: Cluster + type: string + - jsonPath: .status.phase + name: Phase + type: string + - jsonPath: .status.backend + name: Backend + priority: 1 + type: string + - jsonPath: .status.vendorVolumeID + name: VendorID + priority: 1 + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: Volume is the Schema for the volumes API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: VolumeSpec defines the desired state of Volume. + properties: + accessMode: + description: |- + AccessMode is the Kubernetes access mode for the volume + (e.g., "ReadWriteOnce", "ReadWriteMany"). + minLength: 1 + type: string + x-kubernetes-validations: + - message: accessMode is immutable + rule: self == oldSelf + cluster: + description: |- + Cluster is the name of the cluster where the PVC that triggered this + volume exists. Empty for standalone volumes created via the API without + a cluster association. + type: string + x-kubernetes-validations: + - message: cluster is immutable + rule: self == oldSelf + pvcRef: + description: |- + PVCRef is the reference to the PVC that triggered this volume creation. + Set by the CSI driver. Empty for API-driven volume creation. + properties: + cluster: + description: Cluster where the PersistentVolumeClaim exists. + minLength: 1 + type: string + name: + description: Name of the PersistentVolumeClaim. + minLength: 1 + type: string + namespace: + description: Namespace of the PersistentVolumeClaim. + minLength: 1 + type: string + required: + - cluster + - name + - namespace + type: object + x-kubernetes-validations: + - message: pvcRef is immutable + rule: self == oldSelf + sizeGiB: + description: SizeGiB is the requested storage capacity in gibibytes. + format: int64 + minimum: 1 + type: integer + x-kubernetes-validations: + - message: sizeGiB is immutable + rule: self == oldSelf + storageTier: + description: |- + StorageTier is the name of the StorageTier that determines which backend + and protocol serve this volume. + minLength: 1 + type: string + x-kubernetes-validations: + - message: storageTier is immutable + rule: self == oldSelf + required: + - accessMode + - sizeGiB + - storageTier + type: object + status: + description: VolumeStatus defines the observed state of Volume. + properties: + backend: + description: |- + Backend is the name of the StorageBackend that serves this volume. + Resolved during tier resolution at creation time. + type: string + conditions: + description: Conditions holds an array of metav1.Condition that describe + the state of the Volume. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + phase: + description: Phase provides a single-value overview of the state of + the Volume. + enum: + - Progressing + - Ready + - Failed + - Deleting + type: string + protocol: + description: |- + Protocol is the storage protocol used for this volume (e.g., NFS, BLOCK). + Resolved during tier resolution at creation time. + type: string + pvRef: + description: PVRef is the reference to the PV created for this volume + on the tenant cluster. + properties: + cluster: + description: Cluster where the PersistentVolume exists. + minLength: 1 + type: string + name: + description: Name of the PersistentVolume. + minLength: 1 + type: string + required: + - cluster + - name + type: object + pvcRef: + description: PVCRef is the operator-confirmed reference to the PVC + on the tenant cluster. + properties: + cluster: + description: Cluster where the PersistentVolumeClaim exists. + minLength: 1 + type: string + name: + description: Name of the PersistentVolumeClaim. + minLength: 1 + type: string + namespace: + description: Namespace of the PersistentVolumeClaim. + minLength: 1 + type: string + required: + - cluster + - name + - namespace + type: object + vendorVolumeID: + description: |- + VendorVolumeID is the opaque identifier assigned by the vendor storage array. + Set by the Volume controller after vendor CSI CreateVolume succeeds. + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} +{{- end }} diff --git a/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml b/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml new file mode 100644 index 000000000..8c2d6c66b --- /dev/null +++ b/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml @@ -0,0 +1,262 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.20.0 + name: volumes.osac.openshift.io +spec: + group: osac.openshift.io + names: + kind: Volume + listKind: VolumeList + plural: volumes + shortNames: + - vol + singular: volume + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.storageTier + name: Tier + type: string + - jsonPath: .spec.sizeGiB + name: Size + type: integer + - jsonPath: .spec.accessMode + name: Access + type: string + - jsonPath: .spec.cluster + name: Cluster + type: string + - jsonPath: .status.phase + name: Phase + type: string + - jsonPath: .status.backend + name: Backend + priority: 1 + type: string + - jsonPath: .status.vendorVolumeID + name: VendorID + priority: 1 + type: string + name: v1alpha1 + schema: + openAPIV3Schema: + description: Volume is the Schema for the volumes API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: VolumeSpec defines the desired state of Volume. + properties: + accessMode: + description: |- + AccessMode is the Kubernetes access mode for the volume + (e.g., "ReadWriteOnce", "ReadWriteMany"). + minLength: 1 + type: string + x-kubernetes-validations: + - message: accessMode is immutable + rule: self == oldSelf + cluster: + description: |- + Cluster is the name of the cluster where the PVC that triggered this + volume exists. Empty for standalone volumes created via the API without + a cluster association. + type: string + x-kubernetes-validations: + - message: cluster is immutable + rule: self == oldSelf + pvcRef: + description: |- + PVCRef is the reference to the PVC that triggered this volume creation. + Set by the CSI driver. Empty for API-driven volume creation. + properties: + cluster: + description: Cluster where the PersistentVolumeClaim exists. + minLength: 1 + type: string + name: + description: Name of the PersistentVolumeClaim. + minLength: 1 + type: string + namespace: + description: Namespace of the PersistentVolumeClaim. + minLength: 1 + type: string + required: + - cluster + - name + - namespace + type: object + x-kubernetes-validations: + - message: pvcRef is immutable + rule: self == oldSelf + sizeGiB: + description: SizeGiB is the requested storage capacity in gibibytes. + format: int64 + minimum: 1 + type: integer + x-kubernetes-validations: + - message: sizeGiB is immutable + rule: self == oldSelf + storageTier: + description: |- + StorageTier is the name of the StorageTier that determines which backend + and protocol serve this volume. + minLength: 1 + type: string + x-kubernetes-validations: + - message: storageTier is immutable + rule: self == oldSelf + required: + - accessMode + - sizeGiB + - storageTier + type: object + status: + description: VolumeStatus defines the observed state of Volume. + properties: + backend: + description: |- + Backend is the name of the StorageBackend that serves this volume. + Resolved during tier resolution at creation time. + type: string + conditions: + description: Conditions holds an array of metav1.Condition that describe + the state of the Volume. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + phase: + description: Phase provides a single-value overview of the state of + the Volume. + enum: + - Progressing + - Ready + - Failed + - Deleting + type: string + protocol: + description: |- + Protocol is the storage protocol used for this volume (e.g., NFS, BLOCK). + Resolved during tier resolution at creation time. + type: string + pvRef: + description: PVRef is the reference to the PV created for this volume + on the tenant cluster. + properties: + cluster: + description: Cluster where the PersistentVolume exists. + minLength: 1 + type: string + name: + description: Name of the PersistentVolume. + minLength: 1 + type: string + required: + - cluster + - name + type: object + pvcRef: + description: PVCRef is the operator-confirmed reference to the PVC + on the tenant cluster. + properties: + cluster: + description: Cluster where the PersistentVolumeClaim exists. + minLength: 1 + type: string + name: + description: Name of the PersistentVolumeClaim. + minLength: 1 + type: string + namespace: + description: Namespace of the PersistentVolumeClaim. + minLength: 1 + type: string + required: + - cluster + - name + - namespace + type: object + vendorVolumeID: + description: |- + VendorVolumeID is the opaque identifier assigned by the vendor storage array. + Set by the Volume controller after vendor CSI CreateVolume succeeds. + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} From 95bf40a3a9c5b5ed0dae4f2e78c901cd04fc5f0e Mon Sep 17 00:00:00 2001 From: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Date: Fri, 7 Aug 2026 14:59:00 -0400 Subject: [PATCH 3/7] OSAC-2872: address CodeRabbit review feedback - Remove spec.cluster from proto and CRD: cluster association will be tracked via status or a future attach/detach model, not as an immutable spec field. This keeps the volume representation consistent regardless of creation flow (PVC-driven vs standalone). - Add list-map markers to CRD Conditions field (+listType=map, +listMapKey=type) so server-side apply merges conditions by type instead of overwriting the entire array. - Assert SQLSTATE Z0001 in migration immutability tests to verify the check_immutable_columns trigger fires (not a foreign key error). Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Assisted-by: Cursor/Claude Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> --- .../api/osac/private/v1/volume_type.pb.go | 122 ++++++++---------- .../private/v1/volume_type_protoopaque.pb.go | 121 ++++++++--------- .../internal/database/migrations.sha256 | 2 +- ...up.sql => 95_create_volumes_tables.up.sql} | 0 ...st.go => 95_create_volumes_tables_test.go} | 24 ++-- .../tables/osac.private.v1.Volume.yaml | 3 - .../servers/private_volumes_server_test.go | 7 +- .../private/osac/private/v1/volume_type.proto | 5 +- osac-operator/api/v1alpha1/volume_types.go | 14 +- .../templates/osac.openshift.io_volumes.yaml | 15 +-- .../crd/bases/osac.openshift.io_volumes.yaml | 15 +-- 11 files changed, 134 insertions(+), 194 deletions(-) rename fulfillment-service/internal/database/migrations/{94_create_volumes_tables.up.sql => 95_create_volumes_tables.up.sql} (100%) rename fulfillment-service/internal/database/migrations/{94_create_volumes_tables_test.go => 95_create_volumes_tables_test.go} (87%) diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go index 1a818e07b..fe7fbe9f8 100644 --- a/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go @@ -423,11 +423,9 @@ type VolumeSpec struct { SizeGib int64 `protobuf:"varint,2,opt,name=size_gib,json=sizeGib,proto3" json:"size_gib,omitempty"` // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). AccessMode string `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"` - // Name of the cluster where the PVC that triggered this volume exists. - Cluster string `protobuf:"bytes,4,opt,name=cluster,proto3" json:"cluster,omitempty"` // Reference to the PVC that triggered this volume creation. Set by the CSI driver. // Empty for API-driven volume creation. - PvcRef *PVCReference `protobuf:"bytes,5,opt,name=pvc_ref,json=pvcRef,proto3" json:"pvc_ref,omitempty"` + PvcRef *PVCReference `protobuf:"bytes,4,opt,name=pvc_ref,json=pvcRef,proto3" json:"pvc_ref,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -478,13 +476,6 @@ func (x *VolumeSpec) GetAccessMode() string { return "" } -func (x *VolumeSpec) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - func (x *VolumeSpec) GetPvcRef() *PVCReference { if x != nil { return x.PvcRef @@ -504,10 +495,6 @@ func (x *VolumeSpec) SetAccessMode(v string) { x.AccessMode = v } -func (x *VolumeSpec) SetCluster(v string) { - x.Cluster = v -} - func (x *VolumeSpec) SetPvcRef(v *PVCReference) { x.PvcRef = v } @@ -532,8 +519,6 @@ type VolumeSpec_builder struct { SizeGib int64 // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). AccessMode string - // Name of the cluster where the PVC that triggered this volume exists. - Cluster string // Reference to the PVC that triggered this volume creation. Set by the CSI driver. // Empty for API-driven volume creation. PvcRef *PVCReference @@ -546,7 +531,6 @@ func (b0 VolumeSpec_builder) Build() *VolumeSpec { x.StorageTier = b.StorageTier x.SizeGib = b.SizeGib x.AccessMode = b.AccessMode - x.Cluster = b.Cluster x.PvcRef = b.PvcRef return m0 } @@ -775,65 +759,63 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xbd, 0x01, 0x0a, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x69, 0x7a, 0x65, 0x47, 0x69, 0x62, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x22, 0xba, 0x02, 0x0a, - 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, - 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, - 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, - 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, - 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, - 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, - 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, - 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, - 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, - 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, - 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, - 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, - 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, + 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, + 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, + 0x65, 0x66, 0x22, 0xba, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, + 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, + 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, + 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, + 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, + 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, + 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, + 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, + 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, + 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, + 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, + 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, + 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go index 64f5b7b3d..f6a8a2b5e 100644 --- a/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go @@ -411,8 +411,7 @@ type VolumeSpec struct { xxx_hidden_StorageTier string `protobuf:"bytes,1,opt,name=storage_tier,json=storageTier,proto3"` xxx_hidden_SizeGib int64 `protobuf:"varint,2,opt,name=size_gib,json=sizeGib,proto3"` xxx_hidden_AccessMode string `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3"` - xxx_hidden_Cluster string `protobuf:"bytes,4,opt,name=cluster,proto3"` - xxx_hidden_PvcRef *PVCReference `protobuf:"bytes,5,opt,name=pvc_ref,json=pvcRef,proto3"` + xxx_hidden_PvcRef *PVCReference `protobuf:"bytes,4,opt,name=pvc_ref,json=pvcRef,proto3"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -463,13 +462,6 @@ func (x *VolumeSpec) GetAccessMode() string { return "" } -func (x *VolumeSpec) GetCluster() string { - if x != nil { - return x.xxx_hidden_Cluster - } - return "" -} - func (x *VolumeSpec) GetPvcRef() *PVCReference { if x != nil { return x.xxx_hidden_PvcRef @@ -489,10 +481,6 @@ func (x *VolumeSpec) SetAccessMode(v string) { x.xxx_hidden_AccessMode = v } -func (x *VolumeSpec) SetCluster(v string) { - x.xxx_hidden_Cluster = v -} - func (x *VolumeSpec) SetPvcRef(v *PVCReference) { x.xxx_hidden_PvcRef = v } @@ -517,8 +505,6 @@ type VolumeSpec_builder struct { SizeGib int64 // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). AccessMode string - // Name of the cluster where the PVC that triggered this volume exists. - Cluster string // Reference to the PVC that triggered this volume creation. Set by the CSI driver. // Empty for API-driven volume creation. PvcRef *PVCReference @@ -531,7 +517,6 @@ func (b0 VolumeSpec_builder) Build() *VolumeSpec { x.xxx_hidden_StorageTier = b.StorageTier x.xxx_hidden_SizeGib = b.SizeGib x.xxx_hidden_AccessMode = b.AccessMode - x.xxx_hidden_Cluster = b.Cluster x.xxx_hidden_PvcRef = b.PvcRef return m0 } @@ -760,65 +745,63 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xbd, 0x01, 0x0a, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x69, 0x7a, 0x65, 0x47, 0x69, 0x62, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x22, 0xba, 0x02, 0x0a, - 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, - 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, - 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, - 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, - 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, - 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, - 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, - 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, - 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, - 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, - 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, - 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, - 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, - 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, + 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, + 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, + 0x65, 0x66, 0x22, 0xba, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, + 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, + 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, + 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, + 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, + 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, + 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, + 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, + 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, + 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, + 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, + 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, + 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, + 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, + 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) diff --git a/fulfillment-service/internal/database/migrations.sha256 b/fulfillment-service/internal/database/migrations.sha256 index eb6b9f0ed..3a7edf4bd 100644 --- a/fulfillment-service/internal/database/migrations.sha256 +++ b/fulfillment-service/internal/database/migrations.sha256 @@ -1 +1 @@ -1de074f524ec38334110b1d474ff41be8c1f13b46af459445e74a698d4319241 +0c15ed8b1750de64615204d2626b62ae0218eb8cb58d00d7878dd334923116d4 diff --git a/fulfillment-service/internal/database/migrations/94_create_volumes_tables.up.sql b/fulfillment-service/internal/database/migrations/95_create_volumes_tables.up.sql similarity index 100% rename from fulfillment-service/internal/database/migrations/94_create_volumes_tables.up.sql rename to fulfillment-service/internal/database/migrations/95_create_volumes_tables.up.sql diff --git a/fulfillment-service/internal/database/migrations/94_create_volumes_tables_test.go b/fulfillment-service/internal/database/migrations/95_create_volumes_tables_test.go similarity index 87% rename from fulfillment-service/internal/database/migrations/94_create_volumes_tables_test.go rename to fulfillment-service/internal/database/migrations/95_create_volumes_tables_test.go index a213ad149..7c2ebd9a4 100644 --- a/fulfillment-service/internal/database/migrations/94_create_volumes_tables_test.go +++ b/fulfillment-service/internal/database/migrations/95_create_volumes_tables_test.go @@ -29,7 +29,7 @@ var _ = DescribeMigration("Create volumes tables", func() { DescribeTable( "Creates the expected tables", func(ctx context.Context, table string) { - err := tool.Migrate(ctx, 94) + err := tool.Migrate(ctx, 95) Expect(err).ToNot(HaveOccurred()) quotedTable := pgx.Identifier{table}.Sanitize() @@ -52,7 +52,7 @@ var _ = DescribeMigration("Create volumes tables", func() { ) It("Rejects invalid tenant reference", func(ctx context.Context) { - err := tool.Migrate(ctx, 94) + err := tool.Migrate(ctx, 95) Expect(err).ToNot(HaveOccurred()) _, err = conn.Exec(ctx, @@ -63,7 +63,7 @@ var _ = DescribeMigration("Create volumes tables", func() { }) It("Enforces name uniqueness per tenant", func(ctx context.Context) { - err := tool.Migrate(ctx, 94) + err := tool.Migrate(ctx, 95) Expect(err).ToNot(HaveOccurred()) _, err = conn.Exec(ctx, @@ -83,12 +83,12 @@ var _ = DescribeMigration("Create volumes tables", func() { }) It("Allows same name in different tenants", func(ctx context.Context) { - err := tool.Migrate(ctx, 94) + err := tool.Migrate(ctx, 95) Expect(err).ToNot(HaveOccurred()) _, err = conn.Exec(ctx, - `insert into tenants (id, name, data) values ($1, $2, $3)`, - "tenant-2", "tenant-2", `{}`, + `insert into tenants (id, name, tenant, data) values ($1, $2, $3, $4)`, + "tenant-2", "tenant-2", "tenant-2", `{}`, ) Expect(err).ToNot(HaveOccurred()) @@ -106,7 +106,7 @@ var _ = DescribeMigration("Create volumes tables", func() { }) It("Allows same name after soft delete", func(ctx context.Context) { - err := tool.Migrate(ctx, 94) + err := tool.Migrate(ctx, 95) Expect(err).ToNot(HaveOccurred()) _, err = conn.Exec(ctx, @@ -129,7 +129,7 @@ var _ = DescribeMigration("Create volumes tables", func() { }) It("Enforces immutability of id, name, tenant, and project", func(ctx context.Context) { - err := tool.Migrate(ctx, 94) + err := tool.Migrate(ctx, 95) Expect(err).ToNot(HaveOccurred()) _, err = conn.Exec(ctx, @@ -138,22 +138,30 @@ var _ = DescribeMigration("Create volumes tables", func() { ) Expect(err).ToNot(HaveOccurred()) + var pgErr *pgconn.PgError + _, err = conn.Exec(ctx, `update volumes set id = $1 where id = $2`, "changed-id", "immutable-id", ) Expect(err).To(HaveOccurred()) + Expect(errors.As(err, &pgErr)).To(BeTrue()) + Expect(pgErr.Code).To(Equal("Z0001")) _, err = conn.Exec(ctx, `update volumes set name = $1 where id = $2`, "changed-name", "immutable-id", ) Expect(err).To(HaveOccurred()) + Expect(errors.As(err, &pgErr)).To(BeTrue()) + Expect(pgErr.Code).To(Equal("Z0001")) _, err = conn.Exec(ctx, `update volumes set tenant = $1 where id = $2`, "other-tenant", "immutable-id", ) Expect(err).To(HaveOccurred()) + Expect(errors.As(err, &pgErr)).To(BeTrue()) + Expect(pgErr.Code).To(Equal("Z0001")) }) }) diff --git a/fulfillment-service/internal/rendering/tables/osac.private.v1.Volume.yaml b/fulfillment-service/internal/rendering/tables/osac.private.v1.Volume.yaml index 0459560a0..8261762a9 100644 --- a/fulfillment-service/internal/rendering/tables/osac.private.v1.Volume.yaml +++ b/fulfillment-service/internal/rendering/tables/osac.private.v1.Volume.yaml @@ -28,9 +28,6 @@ columns: - header: SIZE (GIB) value: "has(this.spec.size_gib)? string(this.spec.size_gib): '-'" -- header: CLUSTER - value: "has(this.spec.cluster)? this.spec.cluster: '-'" - - header: BACKEND value: "has(this.status.backend) && this.status.backend != ''? this.status.backend: '-'" diff --git a/fulfillment-service/internal/servers/private_volumes_server_test.go b/fulfillment-service/internal/servers/private_volumes_server_test.go index e501f0655..093d12c99 100644 --- a/fulfillment-service/internal/servers/private_volumes_server_test.go +++ b/fulfillment-service/internal/servers/private_volumes_server_test.go @@ -80,7 +80,6 @@ var _ = Describe("Private volumes server", func() { StorageTier: "gold", SizeGib: 100, AccessMode: "ReadWriteOnce", - Cluster: "cluster-1", }.Build(), }.Build(), }.Build()) @@ -98,7 +97,6 @@ var _ = Describe("Private volumes server", func() { StorageTier: "gold", SizeGib: 100, AccessMode: "ReadWriteOnce", - Cluster: "cluster-1", }.Build(), }.Build(), }.Build()) @@ -130,7 +128,6 @@ var _ = Describe("Private volumes server", func() { Expect(created.GetSpec().GetStorageTier()).To(Equal("gold")) Expect(created.GetSpec().GetSizeGib()).To(Equal(int64(100))) Expect(created.GetSpec().GetAccessMode()).To(Equal("ReadWriteOnce")) - Expect(created.GetSpec().GetCluster()).To(Equal("cluster-1")) Expect(created.GetStatus().GetState()).To(Equal( privatev1.VolumeState_VOLUME_STATE_CREATING)) @@ -143,13 +140,12 @@ var _ = Describe("Private volumes server", func() { Expect(obj.GetSpec().GetStorageTier()).To(Equal("gold")) }) - It("Creates a standalone volume without cluster or pvc_ref", func() { + It("Creates a standalone volume without pvc_ref", func() { created := createStandaloneVolume() Expect(created.GetId()).ToNot(BeEmpty()) Expect(created.GetSpec().GetStorageTier()).To(Equal("gold")) Expect(created.GetSpec().GetSizeGib()).To(Equal(int64(50))) - Expect(created.GetSpec().GetCluster()).To(BeEmpty()) Expect(created.GetSpec().GetPvcRef()).To(BeNil()) Expect(created.GetStatus().GetState()).To(Equal( privatev1.VolumeState_VOLUME_STATE_CREATING)) @@ -165,7 +161,6 @@ var _ = Describe("Private volumes server", func() { StorageTier: "gold", SizeGib: 100, AccessMode: "ReadWriteOnce", - Cluster: "cluster-1", PvcRef: privatev1.PVCReference_builder{ Name: "my-pvc", Namespace: "default", diff --git a/fulfillment-service/proto/private/osac/private/v1/volume_type.proto b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto index f0ff7df08..7628fe375 100644 --- a/fulfillment-service/proto/private/osac/private/v1/volume_type.proto +++ b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto @@ -95,12 +95,9 @@ message VolumeSpec { // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). string access_mode = 3; - // Name of the cluster where the PVC that triggered this volume exists. - string cluster = 4; - // Reference to the PVC that triggered this volume creation. Set by the CSI driver. // Empty for API-driven volume creation. - PVCReference pvc_ref = 5; + PVCReference pvc_ref = 4; } // Represents the current operational state of a Volume. diff --git a/osac-operator/api/v1alpha1/volume_types.go b/osac-operator/api/v1alpha1/volume_types.go index c2fe08bb4..0a2178c4e 100644 --- a/osac-operator/api/v1alpha1/volume_types.go +++ b/osac-operator/api/v1alpha1/volume_types.go @@ -42,13 +42,6 @@ type VolumeSpec struct { // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="accessMode is immutable" AccessMode string `json:"accessMode"` - // Cluster is the name of the cluster where the PVC that triggered this - // volume exists. Empty for standalone volumes created via the API without - // a cluster association. - // +kubebuilder:validation:Optional - // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="cluster is immutable" - Cluster string `json:"cluster,omitempty"` - // PVCRef is the reference to the PVC that triggered this volume creation. // Set by the CSI driver. Empty for API-driven volume creation. // +kubebuilder:validation:Optional @@ -115,7 +108,11 @@ type VolumeStatus struct { // Conditions holds an array of metav1.Condition that describe the state of the Volume. // +kubebuilder:validation:Optional - Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` // VendorVolumeID is the opaque identifier assigned by the vendor storage array. // Set by the Volume controller after vendor CSI CreateVolume succeeds. @@ -147,7 +144,6 @@ type VolumeStatus struct { // +kubebuilder:printcolumn:name="Tier",type=string,JSONPath=`.spec.storageTier` // +kubebuilder:printcolumn:name="Size",type=integer,JSONPath=`.spec.sizeGiB` // +kubebuilder:printcolumn:name="Access",type=string,JSONPath=`.spec.accessMode` -// +kubebuilder:printcolumn:name="Cluster",type=string,JSONPath=`.spec.cluster` // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` // +kubebuilder:printcolumn:name="Backend",type=string,JSONPath=`.status.backend`,priority=1 // +kubebuilder:printcolumn:name="VendorID",type=string,JSONPath=`.status.vendorVolumeID`,priority=1 diff --git a/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml b/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml index b630fb6fe..70b0e6d13 100644 --- a/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml +++ b/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml @@ -28,9 +28,6 @@ spec: - jsonPath: .spec.accessMode name: Access type: string - - jsonPath: .spec.cluster - name: Cluster - type: string - jsonPath: .status.phase name: Phase type: string @@ -76,15 +73,6 @@ spec: x-kubernetes-validations: - message: accessMode is immutable rule: self == oldSelf - cluster: - description: |- - Cluster is the name of the cluster where the PVC that triggered this - volume exists. Empty for standalone volumes created via the API without - a cluster association. - type: string - x-kubernetes-validations: - - message: cluster is immutable - rule: self == oldSelf pvcRef: description: |- PVCRef is the reference to the PVC that triggered this volume creation. @@ -198,6 +186,9 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map phase: description: Phase provides a single-value overview of the state of the Volume. diff --git a/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml b/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml index 8c2d6c66b..712d8155f 100644 --- a/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml +++ b/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml @@ -26,9 +26,6 @@ spec: - jsonPath: .spec.accessMode name: Access type: string - - jsonPath: .spec.cluster - name: Cluster - type: string - jsonPath: .status.phase name: Phase type: string @@ -74,15 +71,6 @@ spec: x-kubernetes-validations: - message: accessMode is immutable rule: self == oldSelf - cluster: - description: |- - Cluster is the name of the cluster where the PVC that triggered this - volume exists. Empty for standalone volumes created via the API without - a cluster association. - type: string - x-kubernetes-validations: - - message: cluster is immutable - rule: self == oldSelf pvcRef: description: |- PVCRef is the reference to the PVC that triggered this volume creation. @@ -196,6 +184,9 @@ spec: - type type: object type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map phase: description: Phase provides a single-value overview of the state of the Volume. From 5b16b8c04fe665bcb21fce0072e90e469c6f6db4 Mon Sep 17 00:00:00 2001 From: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Date: Sat, 8 Aug 2026 14:29:16 -0400 Subject: [PATCH 4/7] OSAC-2872: use enums for access mode and protocol, add Create validation Address reviewer feedback from Zoltan: 1. VolumeAccessMode enum (proto + CRD): access_mode is now a typed enum matching Kubernetes PersistentVolume access modes (ReadWriteOnce, ReadOnlyMany, ReadWriteMany, ReadWriteOncePod) instead of a raw string. 2. StorageProtocol reuse (proto + CRD): status.protocol now uses the existing StorageProtocol enum instead of a raw string. Moved StorageProtocol from storage_tier_type.proto to a new shared storage_common_type.proto to avoid a false dependency between Volume and StorageTier. 3. Create validation: added validateVolumeCreate method to the server, matching the pattern used by StorageBackends and StorageTiers. Validates metadata.name, spec.storage_tier, spec.size_gib, and spec.access_mode before persisting. Tests: all 85 fulfillment-service suites pass, osac-operator lint 0 issues and all tests pass. Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Assisted-by: Cursor/Claude Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> --- .../osac/private/v1/storage_common_type.pb.go | 151 +++++++++ .../v1/storage_common_type_protoopaque.pb.go | 151 +++++++++ .../osac/private/v1/storage_tier_type.pb.go | 183 ++++------- .../v1/storage_tier_type_protoopaque.pb.go | 183 ++++------- .../api/osac/private/v1/volume_type.pb.go | 299 +++++++++++------- .../private/v1/volume_type_protoopaque.pb.go | 293 +++++++++++------ .../servers/private_volumes_server.go | 30 ++ .../servers/private_volumes_server_test.go | 113 ++++++- .../osac/private/v1/storage_common_type.proto | 28 ++ .../osac/private/v1/storage_tier_type.proto | 13 +- .../private/osac/private/v1/volume_type.proto | 30 +- osac-operator/api/v1alpha1/volume_types.go | 34 +- .../templates/osac.openshift.io_volumes.yaml | 25 +- .../crd/bases/osac.openshift.io_volumes.yaml | 25 +- 14 files changed, 1070 insertions(+), 488 deletions(-) create mode 100644 fulfillment-service/internal/api/osac/private/v1/storage_common_type.pb.go create mode 100644 fulfillment-service/internal/api/osac/private/v1/storage_common_type_protoopaque.pb.go create mode 100644 fulfillment-service/proto/private/osac/private/v1/storage_common_type.proto diff --git a/fulfillment-service/internal/api/osac/private/v1/storage_common_type.pb.go b/fulfillment-service/internal/api/osac/private/v1/storage_common_type.pb.go new file mode 100644 index 000000000..0f6e6ed97 --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/storage_common_type.pb.go @@ -0,0 +1,151 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.5 +// protoc (unknown) +// source: osac/private/v1/storage_common_type.proto + +//go:build !protoopaque + +package privatev1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + unsafe "unsafe" +) + +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) +) + +// Identifies the storage protocol used by storage backends and volumes. +type StorageProtocol int32 + +const ( + // Protocol is unknown or has not been specified. + StorageProtocol_STORAGE_PROTOCOL_UNSPECIFIED StorageProtocol = 0 + // NFS (Network File System) protocol for file-based storage access. + StorageProtocol_STORAGE_PROTOCOL_NFS StorageProtocol = 1 + // Block storage protocol for volume-based storage access. + StorageProtocol_STORAGE_PROTOCOL_BLOCK StorageProtocol = 2 +) + +// Enum value maps for StorageProtocol. +var ( + StorageProtocol_name = map[int32]string{ + 0: "STORAGE_PROTOCOL_UNSPECIFIED", + 1: "STORAGE_PROTOCOL_NFS", + 2: "STORAGE_PROTOCOL_BLOCK", + } + StorageProtocol_value = map[string]int32{ + "STORAGE_PROTOCOL_UNSPECIFIED": 0, + "STORAGE_PROTOCOL_NFS": 1, + "STORAGE_PROTOCOL_BLOCK": 2, + } +) + +func (x StorageProtocol) Enum() *StorageProtocol { + p := new(StorageProtocol) + *p = x + return p +} + +func (x StorageProtocol) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StorageProtocol) Descriptor() protoreflect.EnumDescriptor { + return file_osac_private_v1_storage_common_type_proto_enumTypes[0].Descriptor() +} + +func (StorageProtocol) Type() protoreflect.EnumType { + return &file_osac_private_v1_storage_common_type_proto_enumTypes[0] +} + +func (x StorageProtocol) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +var File_osac_private_v1_storage_common_type_proto protoreflect.FileDescriptor + +var file_osac_private_v1_storage_common_type_proto_rawDesc = string([]byte{ + 0x0a, 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2a, 0x69, 0x0a, 0x0f, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, + 0x20, 0x0a, 0x1c, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4e, 0x46, 0x53, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x53, + 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x02, 0x42, 0xe6, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, + 0x16, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, + 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, + 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, + 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, + 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) + +var file_osac_private_v1_storage_common_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_osac_private_v1_storage_common_type_proto_goTypes = []any{ + (StorageProtocol)(0), // 0: osac.private.v1.StorageProtocol +} +var file_osac_private_v1_storage_common_type_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] 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 +} + +func init() { file_osac_private_v1_storage_common_type_proto_init() } +func file_osac_private_v1_storage_common_type_proto_init() { + if File_osac_private_v1_storage_common_type_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_storage_common_type_proto_rawDesc), len(file_osac_private_v1_storage_common_type_proto_rawDesc)), + NumEnums: 1, + NumMessages: 0, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_osac_private_v1_storage_common_type_proto_goTypes, + DependencyIndexes: file_osac_private_v1_storage_common_type_proto_depIdxs, + EnumInfos: file_osac_private_v1_storage_common_type_proto_enumTypes, + }.Build() + File_osac_private_v1_storage_common_type_proto = out.File + file_osac_private_v1_storage_common_type_proto_goTypes = nil + file_osac_private_v1_storage_common_type_proto_depIdxs = nil +} diff --git a/fulfillment-service/internal/api/osac/private/v1/storage_common_type_protoopaque.pb.go b/fulfillment-service/internal/api/osac/private/v1/storage_common_type_protoopaque.pb.go new file mode 100644 index 000000000..925bc3815 --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/storage_common_type_protoopaque.pb.go @@ -0,0 +1,151 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.5 +// protoc (unknown) +// source: osac/private/v1/storage_common_type.proto + +//go:build protoopaque + +package privatev1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + unsafe "unsafe" +) + +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) +) + +// Identifies the storage protocol used by storage backends and volumes. +type StorageProtocol int32 + +const ( + // Protocol is unknown or has not been specified. + StorageProtocol_STORAGE_PROTOCOL_UNSPECIFIED StorageProtocol = 0 + // NFS (Network File System) protocol for file-based storage access. + StorageProtocol_STORAGE_PROTOCOL_NFS StorageProtocol = 1 + // Block storage protocol for volume-based storage access. + StorageProtocol_STORAGE_PROTOCOL_BLOCK StorageProtocol = 2 +) + +// Enum value maps for StorageProtocol. +var ( + StorageProtocol_name = map[int32]string{ + 0: "STORAGE_PROTOCOL_UNSPECIFIED", + 1: "STORAGE_PROTOCOL_NFS", + 2: "STORAGE_PROTOCOL_BLOCK", + } + StorageProtocol_value = map[string]int32{ + "STORAGE_PROTOCOL_UNSPECIFIED": 0, + "STORAGE_PROTOCOL_NFS": 1, + "STORAGE_PROTOCOL_BLOCK": 2, + } +) + +func (x StorageProtocol) Enum() *StorageProtocol { + p := new(StorageProtocol) + *p = x + return p +} + +func (x StorageProtocol) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StorageProtocol) Descriptor() protoreflect.EnumDescriptor { + return file_osac_private_v1_storage_common_type_proto_enumTypes[0].Descriptor() +} + +func (StorageProtocol) Type() protoreflect.EnumType { + return &file_osac_private_v1_storage_common_type_proto_enumTypes[0] +} + +func (x StorageProtocol) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +var File_osac_private_v1_storage_common_type_proto protoreflect.FileDescriptor + +var file_osac_private_v1_storage_common_type_proto_rawDesc = string([]byte{ + 0x0a, 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, + 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2a, 0x69, 0x0a, 0x0f, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, + 0x20, 0x0a, 0x1c, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, + 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4e, 0x46, 0x53, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x53, + 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x02, 0x42, 0xe6, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, + 0x16, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, + 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, + 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, + 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, + 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +}) + +var file_osac_private_v1_storage_common_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_osac_private_v1_storage_common_type_proto_goTypes = []any{ + (StorageProtocol)(0), // 0: osac.private.v1.StorageProtocol +} +var file_osac_private_v1_storage_common_type_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] 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 +} + +func init() { file_osac_private_v1_storage_common_type_proto_init() } +func file_osac_private_v1_storage_common_type_proto_init() { + if File_osac_private_v1_storage_common_type_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_storage_common_type_proto_rawDesc), len(file_osac_private_v1_storage_common_type_proto_rawDesc)), + NumEnums: 1, + NumMessages: 0, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_osac_private_v1_storage_common_type_proto_goTypes, + DependencyIndexes: file_osac_private_v1_storage_common_type_proto_depIdxs, + EnumInfos: file_osac_private_v1_storage_common_type_proto_enumTypes, + }.Build() + File_osac_private_v1_storage_common_type_proto = out.File + file_osac_private_v1_storage_common_type_proto_goTypes = nil + file_osac_private_v1_storage_common_type_proto_depIdxs = nil +} diff --git a/fulfillment-service/internal/api/osac/private/v1/storage_tier_type.pb.go b/fulfillment-service/internal/api/osac/private/v1/storage_tier_type.pb.go index dfe517fae..1ade28789 100644 --- a/fulfillment-service/internal/api/osac/private/v1/storage_tier_type.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/storage_tier_type.pb.go @@ -35,54 +35,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Identifies the storage protocol used by a backend association within a storage tier. -type StorageProtocol int32 - -const ( - // Protocol is unknown or has not been specified. - StorageProtocol_STORAGE_PROTOCOL_UNSPECIFIED StorageProtocol = 0 - // NFS (Network File System) protocol for file-based storage access. - StorageProtocol_STORAGE_PROTOCOL_NFS StorageProtocol = 1 - // Block storage protocol for volume-based storage access. - StorageProtocol_STORAGE_PROTOCOL_BLOCK StorageProtocol = 2 -) - -// Enum value maps for StorageProtocol. -var ( - StorageProtocol_name = map[int32]string{ - 0: "STORAGE_PROTOCOL_UNSPECIFIED", - 1: "STORAGE_PROTOCOL_NFS", - 2: "STORAGE_PROTOCOL_BLOCK", - } - StorageProtocol_value = map[string]int32{ - "STORAGE_PROTOCOL_UNSPECIFIED": 0, - "STORAGE_PROTOCOL_NFS": 1, - "STORAGE_PROTOCOL_BLOCK": 2, - } -) - -func (x StorageProtocol) Enum() *StorageProtocol { - p := new(StorageProtocol) - *p = x - return p -} - -func (x StorageProtocol) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (StorageProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_osac_private_v1_storage_tier_type_proto_enumTypes[0].Descriptor() -} - -func (StorageProtocol) Type() protoreflect.EnumType { - return &file_osac_private_v1_storage_tier_type_proto_enumTypes[0] -} - -func (x StorageProtocol) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - // Lifecycle states for StorageTier resources. type StorageTierState int32 @@ -116,11 +68,11 @@ func (x StorageTierState) String() string { } func (StorageTierState) Descriptor() protoreflect.EnumDescriptor { - return file_osac_private_v1_storage_tier_type_proto_enumTypes[1].Descriptor() + return file_osac_private_v1_storage_tier_type_proto_enumTypes[0].Descriptor() } func (StorageTierState) Type() protoreflect.EnumType { - return &file_osac_private_v1_storage_tier_type_proto_enumTypes[1] + return &file_osac_private_v1_storage_tier_type_proto_enumTypes[0] } func (x StorageTierState) Number() protoreflect.EnumNumber { @@ -587,60 +539,56 @@ var file_osac_private_v1_storage_tier_type_proto_rawDesc = string([]byte{ 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0xa9, 0x02, 0x0a, 0x12, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x61, 0x63, 0x6b, - 0x65, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x12, 0x33, 0x0a, 0x16, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6d, 0x62, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x13, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x61, 0x64, 0x42, 0x61, 0x6e, 0x64, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x4d, 0x62, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, - 0x6d, 0x62, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x4d, 0x62, 0x73, 0x12, - 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x47, 0x69, 0x62, 0x12, 0x2d, 0x0a, 0x12, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0b, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x34, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x74, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, - 0x69, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x08, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x73, - 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x22, 0x77, 0x0a, 0x11, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, - 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x2a, 0x69, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, - 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x4f, 0x52, - 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4e, 0x46, 0x53, - 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x02, 0x2a, 0x55, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa9, 0x02, 0x0a, 0x12, 0x42, + 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x49, 0x64, + 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x33, + 0x0a, 0x16, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6d, 0x62, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, + 0x6d, 0x61, 0x78, 0x52, 0x65, 0x61, 0x64, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x4d, 0x62, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6d, 0x62, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x57, 0x72, 0x69, 0x74, 0x65, 0x42, 0x61, + 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x4d, 0x62, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, + 0x6f, 0x74, 0x61, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x71, + 0x75, 0x6f, 0x74, 0x61, 0x47, 0x69, 0x62, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, + 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x74, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x22, 0x77, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, + 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0x55, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x49, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, @@ -664,24 +612,24 @@ var file_osac_private_v1_storage_tier_type_proto_rawDesc = string([]byte{ 0x6f, 0x74, 0x6f, 0x33, }) -var file_osac_private_v1_storage_tier_type_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_osac_private_v1_storage_tier_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_osac_private_v1_storage_tier_type_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_osac_private_v1_storage_tier_type_proto_goTypes = []any{ - (StorageProtocol)(0), // 0: osac.private.v1.StorageProtocol - (StorageTierState)(0), // 1: osac.private.v1.StorageTierState - (*BackendAssociation)(nil), // 2: osac.private.v1.BackendAssociation - (*StorageTier)(nil), // 3: osac.private.v1.StorageTier - (*StorageTierSpec)(nil), // 4: osac.private.v1.StorageTierSpec - (*StorageTierStatus)(nil), // 5: osac.private.v1.StorageTierStatus + (StorageTierState)(0), // 0: osac.private.v1.StorageTierState + (*BackendAssociation)(nil), // 1: osac.private.v1.BackendAssociation + (*StorageTier)(nil), // 2: osac.private.v1.StorageTier + (*StorageTierSpec)(nil), // 3: osac.private.v1.StorageTierSpec + (*StorageTierStatus)(nil), // 4: osac.private.v1.StorageTierStatus + (StorageProtocol)(0), // 5: osac.private.v1.StorageProtocol (*Metadata)(nil), // 6: osac.private.v1.Metadata } var file_osac_private_v1_storage_tier_type_proto_depIdxs = []int32{ - 0, // 0: osac.private.v1.BackendAssociation.protocol:type_name -> osac.private.v1.StorageProtocol + 5, // 0: osac.private.v1.BackendAssociation.protocol:type_name -> osac.private.v1.StorageProtocol 6, // 1: osac.private.v1.StorageTier.metadata:type_name -> osac.private.v1.Metadata - 4, // 2: osac.private.v1.StorageTier.spec:type_name -> osac.private.v1.StorageTierSpec - 5, // 3: osac.private.v1.StorageTier.status:type_name -> osac.private.v1.StorageTierStatus - 2, // 4: osac.private.v1.StorageTierSpec.backends:type_name -> osac.private.v1.BackendAssociation - 1, // 5: osac.private.v1.StorageTierStatus.state:type_name -> osac.private.v1.StorageTierState + 3, // 2: osac.private.v1.StorageTier.spec:type_name -> osac.private.v1.StorageTierSpec + 4, // 3: osac.private.v1.StorageTier.status:type_name -> osac.private.v1.StorageTierStatus + 1, // 4: osac.private.v1.StorageTierSpec.backends:type_name -> osac.private.v1.BackendAssociation + 0, // 5: osac.private.v1.StorageTierStatus.state:type_name -> osac.private.v1.StorageTierState 6, // [6:6] is the sub-list for method output_type 6, // [6:6] is the sub-list for method input_type 6, // [6:6] is the sub-list for extension type_name @@ -695,13 +643,14 @@ func file_osac_private_v1_storage_tier_type_proto_init() { return } file_osac_private_v1_metadata_type_proto_init() + file_osac_private_v1_storage_common_type_proto_init() file_osac_private_v1_storage_tier_type_proto_msgTypes[3].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_storage_tier_type_proto_rawDesc), len(file_osac_private_v1_storage_tier_type_proto_rawDesc)), - NumEnums: 2, + NumEnums: 1, NumMessages: 4, NumExtensions: 0, NumServices: 0, diff --git a/fulfillment-service/internal/api/osac/private/v1/storage_tier_type_protoopaque.pb.go b/fulfillment-service/internal/api/osac/private/v1/storage_tier_type_protoopaque.pb.go index 67a24caf0..18e31d46d 100644 --- a/fulfillment-service/internal/api/osac/private/v1/storage_tier_type_protoopaque.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/storage_tier_type_protoopaque.pb.go @@ -35,54 +35,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Identifies the storage protocol used by a backend association within a storage tier. -type StorageProtocol int32 - -const ( - // Protocol is unknown or has not been specified. - StorageProtocol_STORAGE_PROTOCOL_UNSPECIFIED StorageProtocol = 0 - // NFS (Network File System) protocol for file-based storage access. - StorageProtocol_STORAGE_PROTOCOL_NFS StorageProtocol = 1 - // Block storage protocol for volume-based storage access. - StorageProtocol_STORAGE_PROTOCOL_BLOCK StorageProtocol = 2 -) - -// Enum value maps for StorageProtocol. -var ( - StorageProtocol_name = map[int32]string{ - 0: "STORAGE_PROTOCOL_UNSPECIFIED", - 1: "STORAGE_PROTOCOL_NFS", - 2: "STORAGE_PROTOCOL_BLOCK", - } - StorageProtocol_value = map[string]int32{ - "STORAGE_PROTOCOL_UNSPECIFIED": 0, - "STORAGE_PROTOCOL_NFS": 1, - "STORAGE_PROTOCOL_BLOCK": 2, - } -) - -func (x StorageProtocol) Enum() *StorageProtocol { - p := new(StorageProtocol) - *p = x - return p -} - -func (x StorageProtocol) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (StorageProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_osac_private_v1_storage_tier_type_proto_enumTypes[0].Descriptor() -} - -func (StorageProtocol) Type() protoreflect.EnumType { - return &file_osac_private_v1_storage_tier_type_proto_enumTypes[0] -} - -func (x StorageProtocol) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - // Lifecycle states for StorageTier resources. type StorageTierState int32 @@ -116,11 +68,11 @@ func (x StorageTierState) String() string { } func (StorageTierState) Descriptor() protoreflect.EnumDescriptor { - return file_osac_private_v1_storage_tier_type_proto_enumTypes[1].Descriptor() + return file_osac_private_v1_storage_tier_type_proto_enumTypes[0].Descriptor() } func (StorageTierState) Type() protoreflect.EnumType { - return &file_osac_private_v1_storage_tier_type_proto_enumTypes[1] + return &file_osac_private_v1_storage_tier_type_proto_enumTypes[0] } func (x StorageTierState) Number() protoreflect.EnumNumber { @@ -585,60 +537,56 @@ var file_osac_private_v1_storage_tier_type_proto_rawDesc = string([]byte{ 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0xa9, 0x02, 0x0a, 0x12, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x61, 0x63, 0x6b, - 0x65, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x12, 0x33, 0x0a, 0x16, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6d, 0x62, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x13, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x61, 0x64, 0x42, 0x61, 0x6e, 0x64, - 0x77, 0x69, 0x64, 0x74, 0x68, 0x4d, 0x62, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, - 0x6d, 0x62, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x4d, 0x62, 0x73, 0x12, - 0x1b, 0x0a, 0x09, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x47, 0x69, 0x62, 0x12, 0x2d, 0x0a, 0x12, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0b, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x34, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x74, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, - 0x69, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x08, 0x62, 0x61, 0x63, - 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x73, - 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x22, 0x77, 0x0a, 0x11, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, - 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x2a, 0x69, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, - 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x4f, 0x52, - 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x4e, 0x46, 0x53, - 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x52, - 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x02, 0x2a, 0x55, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, + 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa9, 0x02, 0x0a, 0x12, 0x42, + 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x49, 0x64, + 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x33, + 0x0a, 0x16, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, + 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6d, 0x62, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, + 0x6d, 0x61, 0x78, 0x52, 0x65, 0x61, 0x64, 0x42, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, + 0x4d, 0x62, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x5f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6d, 0x62, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x57, 0x72, 0x69, 0x74, 0x65, 0x42, 0x61, + 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x4d, 0x62, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x71, 0x75, + 0x6f, 0x74, 0x61, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x71, + 0x75, 0x6f, 0x74, 0x61, 0x47, 0x69, 0x62, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x0a, + 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x73, + 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, + 0x70, 0x65, 0x63, 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, + 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x74, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x70, + 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x22, 0x77, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, + 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0x55, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x49, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, @@ -662,24 +610,24 @@ var file_osac_private_v1_storage_tier_type_proto_rawDesc = string([]byte{ 0x6f, 0x74, 0x6f, 0x33, }) -var file_osac_private_v1_storage_tier_type_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_osac_private_v1_storage_tier_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_osac_private_v1_storage_tier_type_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_osac_private_v1_storage_tier_type_proto_goTypes = []any{ - (StorageProtocol)(0), // 0: osac.private.v1.StorageProtocol - (StorageTierState)(0), // 1: osac.private.v1.StorageTierState - (*BackendAssociation)(nil), // 2: osac.private.v1.BackendAssociation - (*StorageTier)(nil), // 3: osac.private.v1.StorageTier - (*StorageTierSpec)(nil), // 4: osac.private.v1.StorageTierSpec - (*StorageTierStatus)(nil), // 5: osac.private.v1.StorageTierStatus + (StorageTierState)(0), // 0: osac.private.v1.StorageTierState + (*BackendAssociation)(nil), // 1: osac.private.v1.BackendAssociation + (*StorageTier)(nil), // 2: osac.private.v1.StorageTier + (*StorageTierSpec)(nil), // 3: osac.private.v1.StorageTierSpec + (*StorageTierStatus)(nil), // 4: osac.private.v1.StorageTierStatus + (StorageProtocol)(0), // 5: osac.private.v1.StorageProtocol (*Metadata)(nil), // 6: osac.private.v1.Metadata } var file_osac_private_v1_storage_tier_type_proto_depIdxs = []int32{ - 0, // 0: osac.private.v1.BackendAssociation.protocol:type_name -> osac.private.v1.StorageProtocol + 5, // 0: osac.private.v1.BackendAssociation.protocol:type_name -> osac.private.v1.StorageProtocol 6, // 1: osac.private.v1.StorageTier.metadata:type_name -> osac.private.v1.Metadata - 4, // 2: osac.private.v1.StorageTier.spec:type_name -> osac.private.v1.StorageTierSpec - 5, // 3: osac.private.v1.StorageTier.status:type_name -> osac.private.v1.StorageTierStatus - 2, // 4: osac.private.v1.StorageTierSpec.backends:type_name -> osac.private.v1.BackendAssociation - 1, // 5: osac.private.v1.StorageTierStatus.state:type_name -> osac.private.v1.StorageTierState + 3, // 2: osac.private.v1.StorageTier.spec:type_name -> osac.private.v1.StorageTierSpec + 4, // 3: osac.private.v1.StorageTier.status:type_name -> osac.private.v1.StorageTierStatus + 1, // 4: osac.private.v1.StorageTierSpec.backends:type_name -> osac.private.v1.BackendAssociation + 0, // 5: osac.private.v1.StorageTierStatus.state:type_name -> osac.private.v1.StorageTierState 6, // [6:6] is the sub-list for method output_type 6, // [6:6] is the sub-list for method input_type 6, // [6:6] is the sub-list for extension type_name @@ -693,13 +641,14 @@ func file_osac_private_v1_storage_tier_type_proto_init() { return } file_osac_private_v1_metadata_type_proto_init() + file_osac_private_v1_storage_common_type_proto_init() file_osac_private_v1_storage_tier_type_proto_msgTypes[3].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_storage_tier_type_proto_rawDesc), len(file_osac_private_v1_storage_tier_type_proto_rawDesc)), - NumEnums: 2, + NumEnums: 1, NumMessages: 4, NumExtensions: 0, NumServices: 0, diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go index fe7fbe9f8..e41f7d58e 100644 --- a/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go @@ -35,6 +35,63 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Access modes for Volume resources, matching Kubernetes PersistentVolume access modes. +// https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes +type VolumeAccessMode int32 + +const ( + // Access mode is unknown or has not been specified. + VolumeAccessMode_VOLUME_ACCESS_MODE_UNSPECIFIED VolumeAccessMode = 0 + // The volume can be mounted as read-write by a single node. + VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE VolumeAccessMode = 1 + // The volume can be mounted as read-only by many nodes. + VolumeAccessMode_VOLUME_ACCESS_MODE_READ_ONLY_MANY VolumeAccessMode = 2 + // The volume can be mounted as read-write by many nodes. + VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_MANY VolumeAccessMode = 3 + // The volume can be mounted as read-write by a single pod (requires CSI 1.5+). + VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE_POD VolumeAccessMode = 4 +) + +// Enum value maps for VolumeAccessMode. +var ( + VolumeAccessMode_name = map[int32]string{ + 0: "VOLUME_ACCESS_MODE_UNSPECIFIED", + 1: "VOLUME_ACCESS_MODE_READ_WRITE_ONCE", + 2: "VOLUME_ACCESS_MODE_READ_ONLY_MANY", + 3: "VOLUME_ACCESS_MODE_READ_WRITE_MANY", + 4: "VOLUME_ACCESS_MODE_READ_WRITE_ONCE_POD", + } + VolumeAccessMode_value = map[string]int32{ + "VOLUME_ACCESS_MODE_UNSPECIFIED": 0, + "VOLUME_ACCESS_MODE_READ_WRITE_ONCE": 1, + "VOLUME_ACCESS_MODE_READ_ONLY_MANY": 2, + "VOLUME_ACCESS_MODE_READ_WRITE_MANY": 3, + "VOLUME_ACCESS_MODE_READ_WRITE_ONCE_POD": 4, + } +) + +func (x VolumeAccessMode) Enum() *VolumeAccessMode { + p := new(VolumeAccessMode) + *p = x + return p +} + +func (x VolumeAccessMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VolumeAccessMode) Descriptor() protoreflect.EnumDescriptor { + return file_osac_private_v1_volume_type_proto_enumTypes[0].Descriptor() +} + +func (VolumeAccessMode) Type() protoreflect.EnumType { + return &file_osac_private_v1_volume_type_proto_enumTypes[0] +} + +func (x VolumeAccessMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + // Lifecycle states for Volume resources. type VolumeState int32 @@ -84,11 +141,11 @@ func (x VolumeState) String() string { } func (VolumeState) Descriptor() protoreflect.EnumDescriptor { - return file_osac_private_v1_volume_type_proto_enumTypes[0].Descriptor() + return file_osac_private_v1_volume_type_proto_enumTypes[1].Descriptor() } func (VolumeState) Type() protoreflect.EnumType { - return &file_osac_private_v1_volume_type_proto_enumTypes[0] + return &file_osac_private_v1_volume_type_proto_enumTypes[1] } func (x VolumeState) Number() protoreflect.EnumNumber { @@ -421,8 +478,8 @@ type VolumeSpec struct { StorageTier string `protobuf:"bytes,1,opt,name=storage_tier,json=storageTier,proto3" json:"storage_tier,omitempty"` // Requested storage capacity in gibibytes (GiB). SizeGib int64 `protobuf:"varint,2,opt,name=size_gib,json=sizeGib,proto3" json:"size_gib,omitempty"` - // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). - AccessMode string `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3" json:"access_mode,omitempty"` + // Kubernetes access mode for the volume. + AccessMode VolumeAccessMode `protobuf:"varint,3,opt,name=access_mode,json=accessMode,proto3,enum=osac.private.v1.VolumeAccessMode" json:"access_mode,omitempty"` // Reference to the PVC that triggered this volume creation. Set by the CSI driver. // Empty for API-driven volume creation. PvcRef *PVCReference `protobuf:"bytes,4,opt,name=pvc_ref,json=pvcRef,proto3" json:"pvc_ref,omitempty"` @@ -469,11 +526,11 @@ func (x *VolumeSpec) GetSizeGib() int64 { return 0 } -func (x *VolumeSpec) GetAccessMode() string { +func (x *VolumeSpec) GetAccessMode() VolumeAccessMode { if x != nil { return x.AccessMode } - return "" + return VolumeAccessMode_VOLUME_ACCESS_MODE_UNSPECIFIED } func (x *VolumeSpec) GetPvcRef() *PVCReference { @@ -491,7 +548,7 @@ func (x *VolumeSpec) SetSizeGib(v int64) { x.SizeGib = v } -func (x *VolumeSpec) SetAccessMode(v string) { +func (x *VolumeSpec) SetAccessMode(v VolumeAccessMode) { x.AccessMode = v } @@ -517,8 +574,8 @@ type VolumeSpec_builder struct { StorageTier string // Requested storage capacity in gibibytes (GiB). SizeGib int64 - // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). - AccessMode string + // Kubernetes access mode for the volume. + AccessMode VolumeAccessMode // Reference to the PVC that triggered this volume creation. Set by the CSI driver. // Empty for API-driven volume creation. PvcRef *PVCReference @@ -548,9 +605,9 @@ type VolumeStatus struct { // Name of the StorageBackend that serves this volume. Resolved during tier resolution at // creation time. Visible only through the private API. Backend string `protobuf:"bytes,4,opt,name=backend,proto3" json:"backend,omitempty"` - // Storage protocol used for this volume (e.g., NFS, BLOCK). Resolved during tier resolution at - // creation time. Visible only through the private API. - Protocol string `protobuf:"bytes,5,opt,name=protocol,proto3" json:"protocol,omitempty"` + // Storage protocol used for this volume. Resolved during tier resolution at creation time. + // Visible only through the private API. + Protocol StorageProtocol `protobuf:"varint,5,opt,name=protocol,proto3,enum=osac.private.v1.StorageProtocol" json:"protocol,omitempty"` // Operator-confirmed reference to the PVC on the tenant cluster. PvcRef *PVCReference `protobuf:"bytes,6,opt,name=pvc_ref,json=pvcRef,proto3" json:"pvc_ref,omitempty"` // Reference to the PV created for this volume on the tenant cluster. @@ -612,11 +669,11 @@ func (x *VolumeStatus) GetBackend() string { return "" } -func (x *VolumeStatus) GetProtocol() string { +func (x *VolumeStatus) GetProtocol() StorageProtocol { if x != nil { return x.Protocol } - return "" + return StorageProtocol_STORAGE_PROTOCOL_UNSPECIFIED } func (x *VolumeStatus) GetPvcRef() *PVCReference { @@ -649,7 +706,7 @@ func (x *VolumeStatus) SetBackend(v string) { x.Backend = v } -func (x *VolumeStatus) SetProtocol(v string) { +func (x *VolumeStatus) SetProtocol(v StorageProtocol) { x.Protocol = v } @@ -707,9 +764,9 @@ type VolumeStatus_builder struct { // Name of the StorageBackend that serves this volume. Resolved during tier resolution at // creation time. Visible only through the private API. Backend string - // Storage protocol used for this volume (e.g., NFS, BLOCK). Resolved during tier resolution at - // creation time. Visible only through the private API. - Protocol string + // Storage protocol used for this volume. Resolved during tier resolution at creation time. + // Visible only through the private API. + Protocol StorageProtocol // Operator-confirmed reference to the PVC on the tenant cluster. PvcRef *PVCReference // Reference to the PV created for this volume on the tenant cluster. @@ -738,50 +795,57 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x22, 0xb7, 0x01, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa3, 0x01, 0x0a, - 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, - 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x73, 0x69, 0x7a, 0x65, 0x47, 0x69, 0x62, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, - 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, - 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, - 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, - 0x65, 0x66, 0x22, 0xba, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, - 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0xb7, 0x01, + 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x7a, + 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x69, 0x7a, + 0x65, 0x47, 0x69, 0x62, 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, + 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, + 0x22, 0xdc, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, @@ -790,58 +854,76 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, - 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, - 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, - 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, - 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, - 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, - 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, - 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, - 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, - 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, - 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0xd9, 0x01, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, + 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, + 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, + 0x12, 0x25, 0x0a, 0x21, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, + 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, + 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, 0x4d, + 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, + 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x03, 0x12, + 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, + 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, + 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, + 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, + 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, + 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, + 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, + 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, + 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, + 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, + 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) -var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_osac_private_v1_volume_type_proto_msgTypes = make([]protoimpl.MessageInfo, 5) var file_osac_private_v1_volume_type_proto_goTypes = []any{ - (VolumeState)(0), // 0: osac.private.v1.VolumeState - (*PVCReference)(nil), // 1: osac.private.v1.PVCReference - (*PVReference)(nil), // 2: osac.private.v1.PVReference - (*Volume)(nil), // 3: osac.private.v1.Volume - (*VolumeSpec)(nil), // 4: osac.private.v1.VolumeSpec - (*VolumeStatus)(nil), // 5: osac.private.v1.VolumeStatus - (*Metadata)(nil), // 6: osac.private.v1.Metadata + (VolumeAccessMode)(0), // 0: osac.private.v1.VolumeAccessMode + (VolumeState)(0), // 1: osac.private.v1.VolumeState + (*PVCReference)(nil), // 2: osac.private.v1.PVCReference + (*PVReference)(nil), // 3: osac.private.v1.PVReference + (*Volume)(nil), // 4: osac.private.v1.Volume + (*VolumeSpec)(nil), // 5: osac.private.v1.VolumeSpec + (*VolumeStatus)(nil), // 6: osac.private.v1.VolumeStatus + (*Metadata)(nil), // 7: osac.private.v1.Metadata + (StorageProtocol)(0), // 8: osac.private.v1.StorageProtocol } var file_osac_private_v1_volume_type_proto_depIdxs = []int32{ - 6, // 0: osac.private.v1.Volume.metadata:type_name -> osac.private.v1.Metadata - 4, // 1: osac.private.v1.Volume.spec:type_name -> osac.private.v1.VolumeSpec - 5, // 2: osac.private.v1.Volume.status:type_name -> osac.private.v1.VolumeStatus - 1, // 3: osac.private.v1.VolumeSpec.pvc_ref:type_name -> osac.private.v1.PVCReference - 0, // 4: osac.private.v1.VolumeStatus.state:type_name -> osac.private.v1.VolumeState - 1, // 5: osac.private.v1.VolumeStatus.pvc_ref:type_name -> osac.private.v1.PVCReference - 2, // 6: osac.private.v1.VolumeStatus.pv_ref:type_name -> osac.private.v1.PVReference - 7, // [7:7] is the sub-list for method output_type - 7, // [7:7] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 7, // 0: osac.private.v1.Volume.metadata:type_name -> osac.private.v1.Metadata + 5, // 1: osac.private.v1.Volume.spec:type_name -> osac.private.v1.VolumeSpec + 6, // 2: osac.private.v1.Volume.status:type_name -> osac.private.v1.VolumeStatus + 0, // 3: osac.private.v1.VolumeSpec.access_mode:type_name -> osac.private.v1.VolumeAccessMode + 2, // 4: osac.private.v1.VolumeSpec.pvc_ref:type_name -> osac.private.v1.PVCReference + 1, // 5: osac.private.v1.VolumeStatus.state:type_name -> osac.private.v1.VolumeState + 8, // 6: osac.private.v1.VolumeStatus.protocol:type_name -> osac.private.v1.StorageProtocol + 2, // 7: osac.private.v1.VolumeStatus.pvc_ref:type_name -> osac.private.v1.PVCReference + 3, // 8: osac.private.v1.VolumeStatus.pv_ref:type_name -> osac.private.v1.PVReference + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] 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 } func init() { file_osac_private_v1_volume_type_proto_init() } @@ -850,13 +932,14 @@ func file_osac_private_v1_volume_type_proto_init() { return } file_osac_private_v1_metadata_type_proto_init() + file_osac_private_v1_storage_common_type_proto_init() file_osac_private_v1_volume_type_proto_msgTypes[4].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_volume_type_proto_rawDesc), len(file_osac_private_v1_volume_type_proto_rawDesc)), - NumEnums: 1, + NumEnums: 2, NumMessages: 5, NumExtensions: 0, NumServices: 0, diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go index f6a8a2b5e..42597642a 100644 --- a/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go @@ -35,6 +35,63 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +// Access modes for Volume resources, matching Kubernetes PersistentVolume access modes. +// https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes +type VolumeAccessMode int32 + +const ( + // Access mode is unknown or has not been specified. + VolumeAccessMode_VOLUME_ACCESS_MODE_UNSPECIFIED VolumeAccessMode = 0 + // The volume can be mounted as read-write by a single node. + VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE VolumeAccessMode = 1 + // The volume can be mounted as read-only by many nodes. + VolumeAccessMode_VOLUME_ACCESS_MODE_READ_ONLY_MANY VolumeAccessMode = 2 + // The volume can be mounted as read-write by many nodes. + VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_MANY VolumeAccessMode = 3 + // The volume can be mounted as read-write by a single pod (requires CSI 1.5+). + VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE_POD VolumeAccessMode = 4 +) + +// Enum value maps for VolumeAccessMode. +var ( + VolumeAccessMode_name = map[int32]string{ + 0: "VOLUME_ACCESS_MODE_UNSPECIFIED", + 1: "VOLUME_ACCESS_MODE_READ_WRITE_ONCE", + 2: "VOLUME_ACCESS_MODE_READ_ONLY_MANY", + 3: "VOLUME_ACCESS_MODE_READ_WRITE_MANY", + 4: "VOLUME_ACCESS_MODE_READ_WRITE_ONCE_POD", + } + VolumeAccessMode_value = map[string]int32{ + "VOLUME_ACCESS_MODE_UNSPECIFIED": 0, + "VOLUME_ACCESS_MODE_READ_WRITE_ONCE": 1, + "VOLUME_ACCESS_MODE_READ_ONLY_MANY": 2, + "VOLUME_ACCESS_MODE_READ_WRITE_MANY": 3, + "VOLUME_ACCESS_MODE_READ_WRITE_ONCE_POD": 4, + } +) + +func (x VolumeAccessMode) Enum() *VolumeAccessMode { + p := new(VolumeAccessMode) + *p = x + return p +} + +func (x VolumeAccessMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VolumeAccessMode) Descriptor() protoreflect.EnumDescriptor { + return file_osac_private_v1_volume_type_proto_enumTypes[0].Descriptor() +} + +func (VolumeAccessMode) Type() protoreflect.EnumType { + return &file_osac_private_v1_volume_type_proto_enumTypes[0] +} + +func (x VolumeAccessMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + // Lifecycle states for Volume resources. type VolumeState int32 @@ -84,11 +141,11 @@ func (x VolumeState) String() string { } func (VolumeState) Descriptor() protoreflect.EnumDescriptor { - return file_osac_private_v1_volume_type_proto_enumTypes[0].Descriptor() + return file_osac_private_v1_volume_type_proto_enumTypes[1].Descriptor() } func (VolumeState) Type() protoreflect.EnumType { - return &file_osac_private_v1_volume_type_proto_enumTypes[0] + return &file_osac_private_v1_volume_type_proto_enumTypes[1] } func (x VolumeState) Number() protoreflect.EnumNumber { @@ -410,7 +467,7 @@ type VolumeSpec struct { state protoimpl.MessageState `protogen:"opaque.v1"` xxx_hidden_StorageTier string `protobuf:"bytes,1,opt,name=storage_tier,json=storageTier,proto3"` xxx_hidden_SizeGib int64 `protobuf:"varint,2,opt,name=size_gib,json=sizeGib,proto3"` - xxx_hidden_AccessMode string `protobuf:"bytes,3,opt,name=access_mode,json=accessMode,proto3"` + xxx_hidden_AccessMode VolumeAccessMode `protobuf:"varint,3,opt,name=access_mode,json=accessMode,proto3,enum=osac.private.v1.VolumeAccessMode"` xxx_hidden_PvcRef *PVCReference `protobuf:"bytes,4,opt,name=pvc_ref,json=pvcRef,proto3"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -455,11 +512,11 @@ func (x *VolumeSpec) GetSizeGib() int64 { return 0 } -func (x *VolumeSpec) GetAccessMode() string { +func (x *VolumeSpec) GetAccessMode() VolumeAccessMode { if x != nil { return x.xxx_hidden_AccessMode } - return "" + return VolumeAccessMode_VOLUME_ACCESS_MODE_UNSPECIFIED } func (x *VolumeSpec) GetPvcRef() *PVCReference { @@ -477,7 +534,7 @@ func (x *VolumeSpec) SetSizeGib(v int64) { x.xxx_hidden_SizeGib = v } -func (x *VolumeSpec) SetAccessMode(v string) { +func (x *VolumeSpec) SetAccessMode(v VolumeAccessMode) { x.xxx_hidden_AccessMode = v } @@ -503,8 +560,8 @@ type VolumeSpec_builder struct { StorageTier string // Requested storage capacity in gibibytes (GiB). SizeGib int64 - // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). - AccessMode string + // Kubernetes access mode for the volume. + AccessMode VolumeAccessMode // Reference to the PVC that triggered this volume creation. Set by the CSI driver. // Empty for API-driven volume creation. PvcRef *PVCReference @@ -528,7 +585,7 @@ type VolumeStatus struct { xxx_hidden_Message *string `protobuf:"bytes,2,opt,name=message,proto3,oneof"` xxx_hidden_VendorVolumeId string `protobuf:"bytes,3,opt,name=vendor_volume_id,json=vendorVolumeId,proto3"` xxx_hidden_Backend string `protobuf:"bytes,4,opt,name=backend,proto3"` - xxx_hidden_Protocol string `protobuf:"bytes,5,opt,name=protocol,proto3"` + xxx_hidden_Protocol StorageProtocol `protobuf:"varint,5,opt,name=protocol,proto3,enum=osac.private.v1.StorageProtocol"` xxx_hidden_PvcRef *PVCReference `protobuf:"bytes,6,opt,name=pvc_ref,json=pvcRef,proto3"` xxx_hidden_PvRef *PVReference `protobuf:"bytes,7,opt,name=pv_ref,json=pvRef,proto3"` XXX_raceDetectHookData protoimpl.RaceDetectHookData @@ -593,11 +650,11 @@ func (x *VolumeStatus) GetBackend() string { return "" } -func (x *VolumeStatus) GetProtocol() string { +func (x *VolumeStatus) GetProtocol() StorageProtocol { if x != nil { return x.xxx_hidden_Protocol } - return "" + return StorageProtocol_STORAGE_PROTOCOL_UNSPECIFIED } func (x *VolumeStatus) GetPvcRef() *PVCReference { @@ -631,7 +688,7 @@ func (x *VolumeStatus) SetBackend(v string) { x.xxx_hidden_Backend = v } -func (x *VolumeStatus) SetProtocol(v string) { +func (x *VolumeStatus) SetProtocol(v StorageProtocol) { x.xxx_hidden_Protocol = v } @@ -690,9 +747,9 @@ type VolumeStatus_builder struct { // Name of the StorageBackend that serves this volume. Resolved during tier resolution at // creation time. Visible only through the private API. Backend string - // Storage protocol used for this volume (e.g., NFS, BLOCK). Resolved during tier resolution at - // creation time. Visible only through the private API. - Protocol string + // Storage protocol used for this volume. Resolved during tier resolution at creation time. + // Visible only through the private API. + Protocol StorageProtocol // Operator-confirmed reference to the PVC on the tenant cluster. PvcRef *PVCReference // Reference to the PV created for this volume on the tenant cluster. @@ -724,50 +781,57 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x22, 0xb7, 0x01, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, - 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa3, 0x01, 0x0a, - 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, - 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x73, 0x69, 0x7a, 0x65, 0x47, 0x69, 0x62, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, - 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, - 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, - 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, - 0x65, 0x66, 0x22, 0xba, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, - 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0xb7, 0x01, + 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, + 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x7a, + 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x69, 0x7a, + 0x65, 0x47, 0x69, 0x62, 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, + 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, + 0x22, 0xdc, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, @@ -776,58 +840,76 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, - 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, - 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, - 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, - 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, - 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, - 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, - 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, - 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, - 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, - 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, - 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0xd9, 0x01, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, + 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, + 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, + 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, + 0x12, 0x25, 0x0a, 0x21, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, + 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, + 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, 0x4d, + 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, + 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x03, 0x12, + 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, + 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, + 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, + 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, + 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, + 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, + 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, + 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, + 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, + 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, + 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, + 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) -var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_osac_private_v1_volume_type_proto_msgTypes = make([]protoimpl.MessageInfo, 5) var file_osac_private_v1_volume_type_proto_goTypes = []any{ - (VolumeState)(0), // 0: osac.private.v1.VolumeState - (*PVCReference)(nil), // 1: osac.private.v1.PVCReference - (*PVReference)(nil), // 2: osac.private.v1.PVReference - (*Volume)(nil), // 3: osac.private.v1.Volume - (*VolumeSpec)(nil), // 4: osac.private.v1.VolumeSpec - (*VolumeStatus)(nil), // 5: osac.private.v1.VolumeStatus - (*Metadata)(nil), // 6: osac.private.v1.Metadata + (VolumeAccessMode)(0), // 0: osac.private.v1.VolumeAccessMode + (VolumeState)(0), // 1: osac.private.v1.VolumeState + (*PVCReference)(nil), // 2: osac.private.v1.PVCReference + (*PVReference)(nil), // 3: osac.private.v1.PVReference + (*Volume)(nil), // 4: osac.private.v1.Volume + (*VolumeSpec)(nil), // 5: osac.private.v1.VolumeSpec + (*VolumeStatus)(nil), // 6: osac.private.v1.VolumeStatus + (*Metadata)(nil), // 7: osac.private.v1.Metadata + (StorageProtocol)(0), // 8: osac.private.v1.StorageProtocol } var file_osac_private_v1_volume_type_proto_depIdxs = []int32{ - 6, // 0: osac.private.v1.Volume.metadata:type_name -> osac.private.v1.Metadata - 4, // 1: osac.private.v1.Volume.spec:type_name -> osac.private.v1.VolumeSpec - 5, // 2: osac.private.v1.Volume.status:type_name -> osac.private.v1.VolumeStatus - 1, // 3: osac.private.v1.VolumeSpec.pvc_ref:type_name -> osac.private.v1.PVCReference - 0, // 4: osac.private.v1.VolumeStatus.state:type_name -> osac.private.v1.VolumeState - 1, // 5: osac.private.v1.VolumeStatus.pvc_ref:type_name -> osac.private.v1.PVCReference - 2, // 6: osac.private.v1.VolumeStatus.pv_ref:type_name -> osac.private.v1.PVReference - 7, // [7:7] is the sub-list for method output_type - 7, // [7:7] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 7, // 0: osac.private.v1.Volume.metadata:type_name -> osac.private.v1.Metadata + 5, // 1: osac.private.v1.Volume.spec:type_name -> osac.private.v1.VolumeSpec + 6, // 2: osac.private.v1.Volume.status:type_name -> osac.private.v1.VolumeStatus + 0, // 3: osac.private.v1.VolumeSpec.access_mode:type_name -> osac.private.v1.VolumeAccessMode + 2, // 4: osac.private.v1.VolumeSpec.pvc_ref:type_name -> osac.private.v1.PVCReference + 1, // 5: osac.private.v1.VolumeStatus.state:type_name -> osac.private.v1.VolumeState + 8, // 6: osac.private.v1.VolumeStatus.protocol:type_name -> osac.private.v1.StorageProtocol + 2, // 7: osac.private.v1.VolumeStatus.pvc_ref:type_name -> osac.private.v1.PVCReference + 3, // 8: osac.private.v1.VolumeStatus.pv_ref:type_name -> osac.private.v1.PVReference + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] 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 } func init() { file_osac_private_v1_volume_type_proto_init() } @@ -836,13 +918,14 @@ func file_osac_private_v1_volume_type_proto_init() { return } file_osac_private_v1_metadata_type_proto_init() + file_osac_private_v1_storage_common_type_proto_init() file_osac_private_v1_volume_type_proto_msgTypes[4].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_osac_private_v1_volume_type_proto_rawDesc), len(file_osac_private_v1_volume_type_proto_rawDesc)), - NumEnums: 1, + NumEnums: 2, NumMessages: 5, NumExtensions: 0, NumServices: 0, diff --git a/fulfillment-service/internal/servers/private_volumes_server.go b/fulfillment-service/internal/servers/private_volumes_server.go index 838cd2d8f..20389e9fa 100644 --- a/fulfillment-service/internal/servers/private_volumes_server.go +++ b/fulfillment-service/internal/servers/private_volumes_server.go @@ -19,6 +19,8 @@ import ( "log/slog" "github.com/prometheus/client_golang/prometheus" + grpccodes "google.golang.org/grpc/codes" + grpcstatus "google.golang.org/grpc/status" privatev1 "github.com/osac-project/osac/fulfillment-service/internal/api/osac/private/v1" "github.com/osac-project/osac/fulfillment-service/internal/auth" @@ -116,6 +118,11 @@ func (s *PrivateVolumesServer) Create(ctx context.Context, request *privatev1.VolumesCreateRequest) (response *privatev1.VolumesCreateResponse, err error) { vol := request.GetObject() + err = s.validateVolumeCreate(vol) + if err != nil { + return + } + if vol.GetStatus() == nil { vol.SetStatus(&privatev1.VolumeStatus{}) } @@ -127,6 +134,29 @@ func (s *PrivateVolumesServer) Create(ctx context.Context, return } +func (s *PrivateVolumesServer) validateVolumeCreate(vol *privatev1.Volume) error { + if vol == nil { + return grpcstatus.Errorf(grpccodes.InvalidArgument, "volume is mandatory") + } + if vol.GetMetadata() == nil || vol.GetMetadata().GetName() == "" { + return grpcstatus.Errorf(grpccodes.InvalidArgument, "field 'metadata.name' is required") + } + spec := vol.GetSpec() + if spec == nil { + return grpcstatus.Errorf(grpccodes.InvalidArgument, "field 'spec' is required") + } + if spec.GetStorageTier() == "" { + return grpcstatus.Errorf(grpccodes.InvalidArgument, "field 'spec.storage_tier' is required") + } + if spec.GetSizeGib() <= 0 { + return grpcstatus.Errorf(grpccodes.InvalidArgument, "field 'spec.size_gib' must be greater than zero") + } + if spec.GetAccessMode() == privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_UNSPECIFIED { + return grpcstatus.Errorf(grpccodes.InvalidArgument, "field 'spec.access_mode' is required") + } + return nil +} + func (s *PrivateVolumesServer) Update(ctx context.Context, request *privatev1.VolumesUpdateRequest) (response *privatev1.VolumesUpdateResponse, err error) { err = s.generic.Update(ctx, request, &response) diff --git a/fulfillment-service/internal/servers/private_volumes_server_test.go b/fulfillment-service/internal/servers/private_volumes_server_test.go index 093d12c99..13bf1cb42 100644 --- a/fulfillment-service/internal/servers/private_volumes_server_test.go +++ b/fulfillment-service/internal/servers/private_volumes_server_test.go @@ -79,7 +79,7 @@ var _ = Describe("Private volumes server", func() { Spec: privatev1.VolumeSpec_builder{ StorageTier: "gold", SizeGib: 100, - AccessMode: "ReadWriteOnce", + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, }.Build(), }.Build(), }.Build()) @@ -96,7 +96,7 @@ var _ = Describe("Private volumes server", func() { Spec: privatev1.VolumeSpec_builder{ StorageTier: "gold", SizeGib: 100, - AccessMode: "ReadWriteOnce", + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, }.Build(), }.Build(), }.Build()) @@ -113,7 +113,7 @@ var _ = Describe("Private volumes server", func() { Spec: privatev1.VolumeSpec_builder{ StorageTier: "gold", SizeGib: 50, - AccessMode: "ReadWriteOnce", + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, }.Build(), }.Build(), }.Build()) @@ -127,7 +127,8 @@ var _ = Describe("Private volumes server", func() { Expect(created.GetId()).ToNot(BeEmpty()) Expect(created.GetSpec().GetStorageTier()).To(Equal("gold")) Expect(created.GetSpec().GetSizeGib()).To(Equal(int64(100))) - Expect(created.GetSpec().GetAccessMode()).To(Equal("ReadWriteOnce")) + Expect(created.GetSpec().GetAccessMode()).To(Equal( + privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE)) Expect(created.GetStatus().GetState()).To(Equal( privatev1.VolumeState_VOLUME_STATE_CREATING)) @@ -160,7 +161,7 @@ var _ = Describe("Private volumes server", func() { Spec: privatev1.VolumeSpec_builder{ StorageTier: "gold", SizeGib: 100, - AccessMode: "ReadWriteOnce", + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, PvcRef: privatev1.PVCReference_builder{ Name: "my-pvc", Namespace: "default", @@ -241,7 +242,7 @@ var _ = Describe("Private volumes server", func() { State: privatev1.VolumeState_VOLUME_STATE_AVAILABLE, VendorVolumeId: "vast-vol-123", Backend: "vast-1", - Protocol: "NFS", + Protocol: privatev1.StorageProtocol_STORAGE_PROTOCOL_NFS, }.Build(), }.Build(), UpdateMask: &fieldmaskpb.FieldMask{Paths: []string{ @@ -256,7 +257,8 @@ var _ = Describe("Private volumes server", func() { privatev1.VolumeState_VOLUME_STATE_AVAILABLE)) Expect(updateResponse.GetObject().GetStatus().GetVendorVolumeId()).To(Equal("vast-vol-123")) Expect(updateResponse.GetObject().GetStatus().GetBackend()).To(Equal("vast-1")) - Expect(updateResponse.GetObject().GetStatus().GetProtocol()).To(Equal("NFS")) + Expect(updateResponse.GetObject().GetStatus().GetProtocol()).To(Equal( + privatev1.StorageProtocol_STORAGE_PROTOCOL_NFS)) Expect(updateResponse.GetObject().GetSpec().GetStorageTier()).To(Equal("gold")) }) @@ -288,7 +290,7 @@ var _ = Describe("Private volumes server", func() { Spec: privatev1.VolumeSpec_builder{ StorageTier: "gold", SizeGib: 100, - AccessMode: "ReadWriteOnce", + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, }.Build(), }.Build(), }.Build()) @@ -307,7 +309,7 @@ var _ = Describe("Private volumes server", func() { Spec: privatev1.VolumeSpec_builder{ StorageTier: "gold", SizeGib: 100, - AccessMode: "ReadWriteOnce", + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, }.Build(), Status: privatev1.VolumeStatus_builder{ State: privatev1.VolumeState_VOLUME_STATE_AVAILABLE, @@ -319,6 +321,97 @@ var _ = Describe("Private volumes server", func() { privatev1.VolumeState_VOLUME_STATE_CREATING)) }) + Describe("Validation", func() { + It("Create without metadata.name fails", func() { + _, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + SizeGib: 100, + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, + }.Build(), + }.Build(), + }.Build()) + Expect(err).To(HaveOccurred()) + st, ok := status.FromError(err) + Expect(ok).To(BeTrue()) + Expect(st.Code()).To(Equal(codes.InvalidArgument)) + Expect(st.Message()).To(ContainSubstring("metadata.name")) + }) + + It("Create without storage_tier fails", func() { + _, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: "test-volume", + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + SizeGib: 100, + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, + }.Build(), + }.Build(), + }.Build()) + Expect(err).To(HaveOccurred()) + st, ok := status.FromError(err) + Expect(ok).To(BeTrue()) + Expect(st.Code()).To(Equal(codes.InvalidArgument)) + Expect(st.Message()).To(ContainSubstring("storage_tier")) + }) + + It("Create without size_gib fails", func() { + _, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: "test-volume", + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, + }.Build(), + }.Build(), + }.Build()) + Expect(err).To(HaveOccurred()) + st, ok := status.FromError(err) + Expect(ok).To(BeTrue()) + Expect(st.Code()).To(Equal(codes.InvalidArgument)) + Expect(st.Message()).To(ContainSubstring("size_gib")) + }) + + It("Create without access_mode fails", func() { + _, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: "test-volume", + }.Build(), + Spec: privatev1.VolumeSpec_builder{ + StorageTier: "gold", + SizeGib: 100, + }.Build(), + }.Build(), + }.Build()) + Expect(err).To(HaveOccurred()) + st, ok := status.FromError(err) + Expect(ok).To(BeTrue()) + Expect(st.Code()).To(Equal(codes.InvalidArgument)) + Expect(st.Message()).To(ContainSubstring("access_mode")) + }) + + It("Create without spec fails", func() { + _, err := server.Create(ctx, privatev1.VolumesCreateRequest_builder{ + Object: privatev1.Volume_builder{ + Metadata: privatev1.Metadata_builder{ + Name: "test-volume", + }.Build(), + }.Build(), + }.Build()) + Expect(err).To(HaveOccurred()) + st, ok := status.FromError(err) + Expect(ok).To(BeTrue()) + Expect(st.Code()).To(Equal(codes.InvalidArgument)) + Expect(st.Message()).To(ContainSubstring("spec")) + }) + }) + Describe("Name uniqueness", func() { It("Create with duplicate active name fails", func() { createVolumeWithName("unique-name") @@ -331,7 +424,7 @@ var _ = Describe("Private volumes server", func() { Spec: privatev1.VolumeSpec_builder{ StorageTier: "gold", SizeGib: 50, - AccessMode: "ReadWriteOnce", + AccessMode: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, }.Build(), }.Build(), }.Build()) diff --git a/fulfillment-service/proto/private/osac/private/v1/storage_common_type.proto b/fulfillment-service/proto/private/osac/private/v1/storage_common_type.proto new file mode 100644 index 000000000..11ce1bf83 --- /dev/null +++ b/fulfillment-service/proto/private/osac/private/v1/storage_common_type.proto @@ -0,0 +1,28 @@ +// +// Copyright (c) 2026 Red Hat, Inc. +// +// 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. +// + +syntax = "proto3"; + +package osac.private.v1; + +// Identifies the storage protocol used by storage backends and volumes. +enum StorageProtocol { + // Protocol is unknown or has not been specified. + STORAGE_PROTOCOL_UNSPECIFIED = 0; + + // NFS (Network File System) protocol for file-based storage access. + STORAGE_PROTOCOL_NFS = 1; + + // Block storage protocol for volume-based storage access. + STORAGE_PROTOCOL_BLOCK = 2; +} diff --git a/fulfillment-service/proto/private/osac/private/v1/storage_tier_type.proto b/fulfillment-service/proto/private/osac/private/v1/storage_tier_type.proto index 3b8359b4d..8b1b0ddd9 100644 --- a/fulfillment-service/proto/private/osac/private/v1/storage_tier_type.proto +++ b/fulfillment-service/proto/private/osac/private/v1/storage_tier_type.proto @@ -16,18 +16,7 @@ syntax = "proto3"; package osac.private.v1; import "osac/private/v1/metadata_type.proto"; - -// Identifies the storage protocol used by a backend association within a storage tier. -enum StorageProtocol { - // Protocol is unknown or has not been specified. - STORAGE_PROTOCOL_UNSPECIFIED = 0; - - // NFS (Network File System) protocol for file-based storage access. - STORAGE_PROTOCOL_NFS = 1; - - // Block storage protocol for volume-based storage access. - STORAGE_PROTOCOL_BLOCK = 2; -} +import "osac/private/v1/storage_common_type.proto"; // Lifecycle states for StorageTier resources. enum StorageTierState { diff --git a/fulfillment-service/proto/private/osac/private/v1/volume_type.proto b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto index 7628fe375..e59aa8a40 100644 --- a/fulfillment-service/proto/private/osac/private/v1/volume_type.proto +++ b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto @@ -16,6 +16,26 @@ syntax = "proto3"; package osac.private.v1; import "osac/private/v1/metadata_type.proto"; +import "osac/private/v1/storage_common_type.proto"; + +// Access modes for Volume resources, matching Kubernetes PersistentVolume access modes. +// https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes +enum VolumeAccessMode { + // Access mode is unknown or has not been specified. + VOLUME_ACCESS_MODE_UNSPECIFIED = 0; + + // The volume can be mounted as read-write by a single node. + VOLUME_ACCESS_MODE_READ_WRITE_ONCE = 1; + + // The volume can be mounted as read-only by many nodes. + VOLUME_ACCESS_MODE_READ_ONLY_MANY = 2; + + // The volume can be mounted as read-write by many nodes. + VOLUME_ACCESS_MODE_READ_WRITE_MANY = 3; + + // The volume can be mounted as read-write by a single pod (requires CSI 1.5+). + VOLUME_ACCESS_MODE_READ_WRITE_ONCE_POD = 4; +} // Lifecycle states for Volume resources. enum VolumeState { @@ -92,8 +112,8 @@ message VolumeSpec { // Requested storage capacity in gibibytes (GiB). int64 size_gib = 2; - // Kubernetes access mode for the volume (e.g., "ReadWriteOnce", "ReadWriteMany"). - string access_mode = 3; + // Kubernetes access mode for the volume. + VolumeAccessMode access_mode = 3; // Reference to the PVC that triggered this volume creation. Set by the CSI driver. // Empty for API-driven volume creation. @@ -116,9 +136,9 @@ message VolumeStatus { // creation time. Visible only through the private API. string backend = 4; - // Storage protocol used for this volume (e.g., NFS, BLOCK). Resolved during tier resolution at - // creation time. Visible only through the private API. - string protocol = 5; + // Storage protocol used for this volume. Resolved during tier resolution at creation time. + // Visible only through the private API. + StorageProtocol protocol = 5; // Operator-confirmed reference to the PVC on the tenant cluster. PVCReference pvc_ref = 6; diff --git a/osac-operator/api/v1alpha1/volume_types.go b/osac-operator/api/v1alpha1/volume_types.go index 0a2178c4e..827307b89 100644 --- a/osac-operator/api/v1alpha1/volume_types.go +++ b/osac-operator/api/v1alpha1/volume_types.go @@ -35,12 +35,12 @@ type VolumeSpec struct { // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="sizeGiB is immutable" SizeGiB int64 `json:"sizeGiB"` - // AccessMode is the Kubernetes access mode for the volume - // (e.g., "ReadWriteOnce", "ReadWriteMany"). + // AccessMode is the Kubernetes access mode for the volume. + // https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes // +kubebuilder:validation:Required - // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:Enum=ReadWriteOnce;ReadOnlyMany;ReadWriteMany;ReadWriteOncePod // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="accessMode is immutable" - AccessMode string `json:"accessMode"` + AccessMode VolumeAccessMode `json:"accessMode"` // PVCRef is the reference to the PVC that triggered this volume creation. // Set by the CSI driver. Empty for API-driven volume creation. @@ -80,6 +80,27 @@ type PVReferenceType struct { Cluster string `json:"cluster"` } +// VolumeAccessMode defines valid Kubernetes PersistentVolume access modes. +// https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes +// +kubebuilder:validation:Enum=ReadWriteOnce;ReadOnlyMany;ReadWriteMany;ReadWriteOncePod +type VolumeAccessMode string + +const ( + VolumeAccessModeReadWriteOnce VolumeAccessMode = "ReadWriteOnce" + VolumeAccessModeReadOnlyMany VolumeAccessMode = "ReadOnlyMany" + VolumeAccessModeReadWriteMany VolumeAccessMode = "ReadWriteMany" + VolumeAccessModeReadWriteOncePod VolumeAccessMode = "ReadWriteOncePod" +) + +// VolumeProtocol defines valid storage protocols for volumes. +// +kubebuilder:validation:Enum=Block;NFS +type VolumeProtocol string + +const ( + VolumeProtocolBlock VolumeProtocol = "Block" + VolumeProtocolNFS VolumeProtocol = "NFS" +) + // VolumePhaseType is a valid value for .status.phase type VolumePhaseType string @@ -124,10 +145,11 @@ type VolumeStatus struct { // +kubebuilder:validation:Optional Backend string `json:"backend,omitempty"` - // Protocol is the storage protocol used for this volume (e.g., NFS, BLOCK). + // Protocol is the storage protocol used for this volume. // Resolved during tier resolution at creation time. // +kubebuilder:validation:Optional - Protocol string `json:"protocol,omitempty"` + // +kubebuilder:validation:Enum=Block;NFS + Protocol VolumeProtocol `json:"protocol,omitempty"` // PVCRef is the operator-confirmed reference to the PVC on the tenant cluster. // +kubebuilder:validation:Optional diff --git a/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml b/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml index 70b0e6d13..fa5d4a4ea 100644 --- a/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml +++ b/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml @@ -65,10 +65,20 @@ spec: description: VolumeSpec defines the desired state of Volume. properties: accessMode: + allOf: + - enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + - ReadWriteOncePod + - enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + - ReadWriteOncePod description: |- - AccessMode is the Kubernetes access mode for the volume - (e.g., "ReadWriteOnce", "ReadWriteMany"). - minLength: 1 + AccessMode is the Kubernetes access mode for the volume. + https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes type: string x-kubernetes-validations: - message: accessMode is immutable @@ -199,8 +209,15 @@ spec: - Deleting type: string protocol: + allOf: + - enum: + - Block + - NFS + - enum: + - Block + - NFS description: |- - Protocol is the storage protocol used for this volume (e.g., NFS, BLOCK). + Protocol is the storage protocol used for this volume. Resolved during tier resolution at creation time. type: string pvRef: diff --git a/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml b/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml index 712d8155f..584e1b55e 100644 --- a/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml +++ b/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml @@ -63,10 +63,20 @@ spec: description: VolumeSpec defines the desired state of Volume. properties: accessMode: + allOf: + - enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + - ReadWriteOncePod + - enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + - ReadWriteOncePod description: |- - AccessMode is the Kubernetes access mode for the volume - (e.g., "ReadWriteOnce", "ReadWriteMany"). - minLength: 1 + AccessMode is the Kubernetes access mode for the volume. + https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes type: string x-kubernetes-validations: - message: accessMode is immutable @@ -197,8 +207,15 @@ spec: - Deleting type: string protocol: + allOf: + - enum: + - Block + - NFS + - enum: + - Block + - NFS description: |- - Protocol is the storage protocol used for this volume (e.g., NFS, BLOCK). + Protocol is the storage protocol used for this volume. Resolved during tier resolution at creation time. type: string pvRef: From abdd61d99bbc7a76bcd5c410d06b3b4dce2ec083 Mon Sep 17 00:00:00 2001 From: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Date: Sat, 8 Aug 2026 17:09:06 -0400 Subject: [PATCH 5/7] OSAC-2872: add hub field to VolumeStatus proto The fulfillment-service reconciler needs to track which hub cluster hosts the Volume CR so the delete path can look up the correct hub client. Every other hub-based resource (ComputeInstance, NATGateway, Subnet, etc.) has this field for the same reason. Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Assisted-by: Cursor/Claude Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> --- .../api/osac/private/v1/volume_type.pb.go | 105 +++++++++++------- .../private/v1/volume_type_protoopaque.pb.go | 105 ++++++++++-------- .../private/osac/private/v1/volume_type.proto | 4 + 3 files changed, 127 insertions(+), 87 deletions(-) diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go index e41f7d58e..2c94c2496 100644 --- a/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go @@ -611,7 +611,10 @@ type VolumeStatus struct { // Operator-confirmed reference to the PVC on the tenant cluster. PvcRef *PVCReference `protobuf:"bytes,6,opt,name=pvc_ref,json=pvcRef,proto3" json:"pvc_ref,omitempty"` // Reference to the PV created for this volume on the tenant cluster. - PvRef *PVReference `protobuf:"bytes,7,opt,name=pv_ref,json=pvRef,proto3" json:"pv_ref,omitempty"` + PvRef *PVReference `protobuf:"bytes,7,opt,name=pv_ref,json=pvRef,proto3" json:"pv_ref,omitempty"` + // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service + // reconciler when selecting the hub. Used to look up the hub connection during delete. + Hub string `protobuf:"bytes,8,opt,name=hub,proto3" json:"hub,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -690,6 +693,13 @@ func (x *VolumeStatus) GetPvRef() *PVReference { return nil } +func (x *VolumeStatus) GetHub() string { + if x != nil { + return x.Hub + } + return "" +} + func (x *VolumeStatus) SetState(v VolumeState) { x.State = v } @@ -718,6 +728,10 @@ func (x *VolumeStatus) SetPvRef(v *PVReference) { x.PvRef = v } +func (x *VolumeStatus) SetHub(v string) { + x.Hub = v +} + func (x *VolumeStatus) HasMessage() bool { if x == nil { return false @@ -771,6 +785,9 @@ type VolumeStatus_builder struct { PvcRef *PVCReference // Reference to the PV created for this volume on the tenant cluster. PvRef *PVReference + // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service + // reconciler when selecting the hub. Used to look up the hub connection during delete. + Hub string } func (b0 VolumeStatus_builder) Build() *VolumeStatus { @@ -784,6 +801,7 @@ func (b0 VolumeStatus_builder) Build() *VolumeStatus { x.Protocol = b.Protocol x.PvcRef = b.PvcRef x.PvRef = b.PvRef + x.Hub = b.Hub return m0 } @@ -832,7 +850,7 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, - 0x22, 0xdc, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x22, 0xee, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, @@ -853,47 +871,48 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, - 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, - 0xd9, 0x01, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, - 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, - 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, - 0x12, 0x25, 0x0a, 0x21, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, - 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, - 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, 0x4d, - 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, - 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x03, 0x12, - 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, - 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, - 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, - 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, - 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, - 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, - 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, - 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, - 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, - 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, - 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, - 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x66, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x68, 0x75, 0x62, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x2a, 0xd9, 0x01, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, + 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, + 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, + 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, + 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, + 0x4c, 0x59, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, + 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, + 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, + 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, + 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, + 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, + 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, + 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, + 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, + 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, + 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, + 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, + 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, + 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 2) diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go index 42597642a..7b8d10a47 100644 --- a/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go @@ -588,6 +588,7 @@ type VolumeStatus struct { xxx_hidden_Protocol StorageProtocol `protobuf:"varint,5,opt,name=protocol,proto3,enum=osac.private.v1.StorageProtocol"` xxx_hidden_PvcRef *PVCReference `protobuf:"bytes,6,opt,name=pvc_ref,json=pvcRef,proto3"` xxx_hidden_PvRef *PVReference `protobuf:"bytes,7,opt,name=pv_ref,json=pvRef,proto3"` + xxx_hidden_Hub string `protobuf:"bytes,8,opt,name=hub,proto3"` XXX_raceDetectHookData protoimpl.RaceDetectHookData XXX_presence [1]uint32 unknownFields protoimpl.UnknownFields @@ -671,13 +672,20 @@ func (x *VolumeStatus) GetPvRef() *PVReference { return nil } +func (x *VolumeStatus) GetHub() string { + if x != nil { + return x.xxx_hidden_Hub + } + return "" +} + func (x *VolumeStatus) SetState(v VolumeState) { x.xxx_hidden_State = v } func (x *VolumeStatus) SetMessage(v string) { x.xxx_hidden_Message = &v - protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 7) + protoimpl.X.SetPresent(&(x.XXX_presence[0]), 1, 8) } func (x *VolumeStatus) SetVendorVolumeId(v string) { @@ -700,6 +708,10 @@ func (x *VolumeStatus) SetPvRef(v *PVReference) { x.xxx_hidden_PvRef = v } +func (x *VolumeStatus) SetHub(v string) { + x.xxx_hidden_Hub = v +} + func (x *VolumeStatus) HasMessage() bool { if x == nil { return false @@ -754,6 +766,9 @@ type VolumeStatus_builder struct { PvcRef *PVCReference // Reference to the PV created for this volume on the tenant cluster. PvRef *PVReference + // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service + // reconciler when selecting the hub. Used to look up the hub connection during delete. + Hub string } func (b0 VolumeStatus_builder) Build() *VolumeStatus { @@ -762,7 +777,7 @@ func (b0 VolumeStatus_builder) Build() *VolumeStatus { _, _ = b, x x.xxx_hidden_State = b.State if b.Message != nil { - protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 7) + protoimpl.X.SetPresentNonAtomic(&(x.XXX_presence[0]), 1, 8) x.xxx_hidden_Message = b.Message } x.xxx_hidden_VendorVolumeId = b.VendorVolumeId @@ -770,6 +785,7 @@ func (b0 VolumeStatus_builder) Build() *VolumeStatus { x.xxx_hidden_Protocol = b.Protocol x.xxx_hidden_PvcRef = b.PvcRef x.xxx_hidden_PvRef = b.PvRef + x.xxx_hidden_Hub = b.Hub return m0 } @@ -818,7 +834,7 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, - 0x22, 0xdc, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x22, 0xee, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, @@ -839,47 +855,48 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, - 0x52, 0x65, 0x66, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, - 0xd9, 0x01, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, - 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, - 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, - 0x12, 0x25, 0x0a, 0x21, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, - 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, - 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, 0x4d, - 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, - 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x03, 0x12, - 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, - 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, - 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, - 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, - 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, - 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, - 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, - 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, - 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, - 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, - 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, - 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x66, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x68, 0x75, 0x62, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x2a, 0xd9, 0x01, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, + 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, + 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, + 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, + 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, + 0x4c, 0x59, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, + 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, + 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, + 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, + 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, + 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, + 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, + 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, + 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, + 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, + 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, + 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, + 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, + 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, + 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 2) diff --git a/fulfillment-service/proto/private/osac/private/v1/volume_type.proto b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto index e59aa8a40..c19f802f9 100644 --- a/fulfillment-service/proto/private/osac/private/v1/volume_type.proto +++ b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto @@ -145,4 +145,8 @@ message VolumeStatus { // Reference to the PV created for this volume on the tenant cluster. PVReference pv_ref = 7; + + // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service + // reconciler when selecting the hub. Used to look up the hub connection during delete. + string hub = 8; } From 8548617085251bcbccfa95058d18111e3082bf46 Mon Sep 17 00:00:00 2001 From: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Date: Sat, 8 Aug 2026 22:48:04 -0400 Subject: [PATCH 6/7] OSAC-2872: reorder hub field in VolumeStatus, add pvcRef removal guard Move hub from field 8 to field 6 in VolumeStatus proto, grouping it with the other system-resolved fields (vendor_volume_id, backend, protocol) and before the reference fields (pvc_ref, pv_ref). Add a spec-level CEL transition rule on VolumeSpec that prevents pvcRef from being removed once set. The existing field-level rule (self == oldSelf) prevents value changes but is skipped when the field is absent. The new rule (!has(oldSelf.pvcRef) || has(self.pvcRef)) blocks removal, completing the immutability guarantee. Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Assisted-by: Cursor/Claude Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> --- .../api/osac/private/v1/volume_type.pb.go | 241 +++++++++--------- .../private/v1/volume_type_protoopaque.pb.go | 237 ++++++++--------- .../private/osac/private/v1/volume_type.proto | 19 +- osac-operator/api/v1alpha1/volume_types.go | 1 + .../templates/osac.openshift.io_volumes.yaml | 3 + .../crd/bases/osac.openshift.io_volumes.yaml | 3 + 6 files changed, 261 insertions(+), 243 deletions(-) diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go index 2c94c2496..c337786d8 100644 --- a/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go @@ -22,6 +22,7 @@ package privatev1 import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -608,13 +609,13 @@ type VolumeStatus struct { // Storage protocol used for this volume. Resolved during tier resolution at creation time. // Visible only through the private API. Protocol StorageProtocol `protobuf:"varint,5,opt,name=protocol,proto3,enum=osac.private.v1.StorageProtocol" json:"protocol,omitempty"` - // Operator-confirmed reference to the PVC on the tenant cluster. - PvcRef *PVCReference `protobuf:"bytes,6,opt,name=pvc_ref,json=pvcRef,proto3" json:"pvc_ref,omitempty"` - // Reference to the PV created for this volume on the tenant cluster. - PvRef *PVReference `protobuf:"bytes,7,opt,name=pv_ref,json=pvRef,proto3" json:"pv_ref,omitempty"` // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service // reconciler when selecting the hub. Used to look up the hub connection during delete. - Hub string `protobuf:"bytes,8,opt,name=hub,proto3" json:"hub,omitempty"` + Hub string `protobuf:"bytes,6,opt,name=hub,proto3" json:"hub,omitempty"` + // Operator-confirmed reference to the PVC on the tenant cluster. + PvcRef *PVCReference `protobuf:"bytes,7,opt,name=pvc_ref,json=pvcRef,proto3" json:"pvc_ref,omitempty"` + // Reference to the PV created for this volume on the tenant cluster. + PvRef *PVReference `protobuf:"bytes,8,opt,name=pv_ref,json=pvRef,proto3" json:"pv_ref,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -679,6 +680,13 @@ func (x *VolumeStatus) GetProtocol() StorageProtocol { return StorageProtocol_STORAGE_PROTOCOL_UNSPECIFIED } +func (x *VolumeStatus) GetHub() string { + if x != nil { + return x.Hub + } + return "" +} + func (x *VolumeStatus) GetPvcRef() *PVCReference { if x != nil { return x.PvcRef @@ -693,13 +701,6 @@ func (x *VolumeStatus) GetPvRef() *PVReference { return nil } -func (x *VolumeStatus) GetHub() string { - if x != nil { - return x.Hub - } - return "" -} - func (x *VolumeStatus) SetState(v VolumeState) { x.State = v } @@ -720,6 +721,10 @@ func (x *VolumeStatus) SetProtocol(v StorageProtocol) { x.Protocol = v } +func (x *VolumeStatus) SetHub(v string) { + x.Hub = v +} + func (x *VolumeStatus) SetPvcRef(v *PVCReference) { x.PvcRef = v } @@ -728,10 +733,6 @@ func (x *VolumeStatus) SetPvRef(v *PVReference) { x.PvRef = v } -func (x *VolumeStatus) SetHub(v string) { - x.Hub = v -} - func (x *VolumeStatus) HasMessage() bool { if x == nil { return false @@ -781,13 +782,13 @@ type VolumeStatus_builder struct { // Storage protocol used for this volume. Resolved during tier resolution at creation time. // Visible only through the private API. Protocol StorageProtocol + // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service + // reconciler when selecting the hub. Used to look up the hub connection during delete. + Hub string // Operator-confirmed reference to the PVC on the tenant cluster. PvcRef *PVCReference // Reference to the PV created for this volume on the tenant cluster. PvRef *PVReference - // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service - // reconciler when selecting the hub. Used to look up the hub connection during delete. - Hub string } func (b0 VolumeStatus_builder) Build() *VolumeStatus { @@ -799,9 +800,9 @@ func (b0 VolumeStatus_builder) Build() *VolumeStatus { x.VendorVolumeId = b.VendorVolumeId x.Backend = b.Backend x.Protocol = b.Protocol + x.Hub = b.Hub x.PvcRef = b.PvcRef x.PvRef = b.PvRef - x.Hub = b.Hub return m0 } @@ -811,108 +812,112 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x0a, 0x21, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0xb7, 0x01, - 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, - 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, + 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x3b, 0x0a, + 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0xb7, 0x01, 0x0a, 0x06, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x04, + 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x7a, - 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x69, 0x7a, - 0x65, 0x47, 0x69, 0x62, 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0xe2, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x2a, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, + 0x22, 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x42, 0x07, 0xba, 0x48, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x07, 0x73, 0x69, 0x7a, 0x65, + 0x47, 0x69, 0x62, 0x12, 0x4c, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, + 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x22, 0xee, 0x02, 0x0a, 0x0c, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, - 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, - 0x22, 0xee, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, - 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, - 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, - 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, - 0x52, 0x65, 0x66, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x68, 0x75, 0x62, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x2a, 0xd9, 0x01, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, - 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, + 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, + 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, + 0x10, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x68, 0x75, + 0x62, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, 0x0a, 0x06, 0x70, 0x76, 0x5f, + 0x72, 0x65, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, 0x52, 0x65, 0x66, 0x42, 0x0a, + 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0xd9, 0x01, 0x0a, 0x10, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, + 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, + 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, + 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x5f, 0x4d, 0x41, 0x4e, 0x59, + 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, + 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, - 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, - 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, - 0x4c, 0x59, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, - 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, - 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, - 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, - 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, - 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, - 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, - 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, - 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, - 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, - 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, - 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, - 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, - 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, - 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, - 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, - 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, - 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, + 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, + 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, + 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, + 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, + 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, }) var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 2) diff --git a/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go index 7b8d10a47..24b313ead 100644 --- a/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go @@ -22,6 +22,7 @@ package privatev1 import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -586,9 +587,9 @@ type VolumeStatus struct { xxx_hidden_VendorVolumeId string `protobuf:"bytes,3,opt,name=vendor_volume_id,json=vendorVolumeId,proto3"` xxx_hidden_Backend string `protobuf:"bytes,4,opt,name=backend,proto3"` xxx_hidden_Protocol StorageProtocol `protobuf:"varint,5,opt,name=protocol,proto3,enum=osac.private.v1.StorageProtocol"` - xxx_hidden_PvcRef *PVCReference `protobuf:"bytes,6,opt,name=pvc_ref,json=pvcRef,proto3"` - xxx_hidden_PvRef *PVReference `protobuf:"bytes,7,opt,name=pv_ref,json=pvRef,proto3"` - xxx_hidden_Hub string `protobuf:"bytes,8,opt,name=hub,proto3"` + xxx_hidden_Hub string `protobuf:"bytes,6,opt,name=hub,proto3"` + xxx_hidden_PvcRef *PVCReference `protobuf:"bytes,7,opt,name=pvc_ref,json=pvcRef,proto3"` + xxx_hidden_PvRef *PVReference `protobuf:"bytes,8,opt,name=pv_ref,json=pvRef,proto3"` XXX_raceDetectHookData protoimpl.RaceDetectHookData XXX_presence [1]uint32 unknownFields protoimpl.UnknownFields @@ -658,6 +659,13 @@ func (x *VolumeStatus) GetProtocol() StorageProtocol { return StorageProtocol_STORAGE_PROTOCOL_UNSPECIFIED } +func (x *VolumeStatus) GetHub() string { + if x != nil { + return x.xxx_hidden_Hub + } + return "" +} + func (x *VolumeStatus) GetPvcRef() *PVCReference { if x != nil { return x.xxx_hidden_PvcRef @@ -672,13 +680,6 @@ func (x *VolumeStatus) GetPvRef() *PVReference { return nil } -func (x *VolumeStatus) GetHub() string { - if x != nil { - return x.xxx_hidden_Hub - } - return "" -} - func (x *VolumeStatus) SetState(v VolumeState) { x.xxx_hidden_State = v } @@ -700,6 +701,10 @@ func (x *VolumeStatus) SetProtocol(v StorageProtocol) { x.xxx_hidden_Protocol = v } +func (x *VolumeStatus) SetHub(v string) { + x.xxx_hidden_Hub = v +} + func (x *VolumeStatus) SetPvcRef(v *PVCReference) { x.xxx_hidden_PvcRef = v } @@ -708,10 +713,6 @@ func (x *VolumeStatus) SetPvRef(v *PVReference) { x.xxx_hidden_PvRef = v } -func (x *VolumeStatus) SetHub(v string) { - x.xxx_hidden_Hub = v -} - func (x *VolumeStatus) HasMessage() bool { if x == nil { return false @@ -762,13 +763,13 @@ type VolumeStatus_builder struct { // Storage protocol used for this volume. Resolved during tier resolution at creation time. // Visible only through the private API. Protocol StorageProtocol + // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service + // reconciler when selecting the hub. Used to look up the hub connection during delete. + Hub string // Operator-confirmed reference to the PVC on the tenant cluster. PvcRef *PVCReference // Reference to the PV created for this volume on the tenant cluster. PvRef *PVReference - // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service - // reconciler when selecting the hub. Used to look up the hub connection during delete. - Hub string } func (b0 VolumeStatus_builder) Build() *VolumeStatus { @@ -783,9 +784,9 @@ func (b0 VolumeStatus_builder) Build() *VolumeStatus { x.xxx_hidden_VendorVolumeId = b.VendorVolumeId x.xxx_hidden_Backend = b.Backend x.xxx_hidden_Protocol = b.Protocol + x.xxx_hidden_Hub = b.Hub x.xxx_hidden_PvcRef = b.PvcRef x.xxx_hidden_PvRef = b.PvRef - x.xxx_hidden_Hub = b.Hub return m0 } @@ -795,108 +796,112 @@ var file_osac_private_v1_volume_type_proto_rawDesc = string([]byte{ 0x0a, 0x21, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0xb7, 0x01, - 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, - 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x2f, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x23, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, + 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x5a, 0x0a, 0x0c, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x3b, 0x0a, + 0x0b, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0xb7, 0x01, 0x0a, 0x06, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x04, + 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x73, 0x61, + 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x35, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, - 0x12, 0x35, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x7a, - 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x69, 0x7a, - 0x65, 0x47, 0x69, 0x62, 0x12, 0x42, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, - 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0xe2, 0x01, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, + 0x70, 0x65, 0x63, 0x12, 0x2a, 0x0a, 0x0c, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x54, 0x69, 0x65, 0x72, 0x12, + 0x22, 0x0a, 0x08, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x42, 0x07, 0xba, 0x48, 0x04, 0x22, 0x02, 0x20, 0x00, 0x52, 0x07, 0x73, 0x69, 0x7a, 0x65, + 0x47, 0x69, 0x62, 0x12, 0x4c, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, + 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x22, 0xee, 0x02, 0x0a, 0x0c, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, - 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, - 0x22, 0xee, 0x02, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, - 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, - 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, - 0x0a, 0x06, 0x70, 0x76, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x56, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, - 0x52, 0x65, 0x66, 0x12, 0x10, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x68, 0x75, 0x62, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x2a, 0xd9, 0x01, 0x0a, 0x10, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, - 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, + 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1d, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, + 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, + 0x64, 0x12, 0x3c, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, + 0x10, 0x0a, 0x03, 0x68, 0x75, 0x62, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x68, 0x75, + 0x62, 0x12, 0x36, 0x0a, 0x07, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x06, 0x70, 0x76, 0x63, 0x52, 0x65, 0x66, 0x12, 0x33, 0x0a, 0x06, 0x70, 0x76, 0x5f, + 0x72, 0x65, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x73, 0x61, 0x63, + 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x70, 0x76, 0x52, 0x65, 0x66, 0x42, 0x0a, + 0x0a, 0x08, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2a, 0xd9, 0x01, 0x0a, 0x10, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x22, 0x0a, 0x1e, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, + 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, + 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, + 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x5f, 0x4d, 0x41, 0x4e, 0x59, + 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, + 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, - 0x10, 0x01, 0x12, 0x25, 0x0a, 0x21, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, - 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, - 0x4c, 0x59, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x56, 0x4f, 0x4c, - 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, - 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x10, - 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, - 0x53, 0x53, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, - 0x54, 0x45, 0x5f, 0x4f, 0x4e, 0x43, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, - 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, - 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, - 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, - 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, - 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, - 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, - 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, - 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, - 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, - 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, - 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, - 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x04, 0x2a, 0xb0, 0x01, 0x0a, 0x0b, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, + 0x1a, 0x0a, 0x16, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x56, + 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, + 0x18, 0x0a, 0x14, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x42, 0xdf, 0x01, 0x0a, 0x13, 0x63, 0x6f, + 0x6d, 0x2e, 0x6f, 0x73, 0x61, 0x63, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x76, + 0x31, 0x42, 0x0f, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x2f, 0x6f, 0x73, + 0x61, 0x63, 0x2f, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x73, 0x61, 0x63, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x4f, 0x50, 0x58, 0xaa, 0x02, 0x0f, 0x4f, 0x73, 0x61, 0x63, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x73, 0x61, 0x63, 0x5c, 0x50, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x73, 0x61, 0x63, 0x5c, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x4f, 0x73, 0x61, 0x63, 0x3a, 0x3a, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, }) var file_osac_private_v1_volume_type_proto_enumTypes = make([]protoimpl.EnumInfo, 2) diff --git a/fulfillment-service/proto/private/osac/private/v1/volume_type.proto b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto index c19f802f9..371dba67f 100644 --- a/fulfillment-service/proto/private/osac/private/v1/volume_type.proto +++ b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto @@ -15,6 +15,7 @@ syntax = "proto3"; package osac.private.v1; +import "buf/validate/validate.proto"; import "osac/private/v1/metadata_type.proto"; import "osac/private/v1/storage_common_type.proto"; @@ -107,13 +108,13 @@ message Volume { // Defines the desired configuration for a Volume. All fields are immutable after creation. message VolumeSpec { // Name of the StorageTier that determines which backend and protocol serve this volume. - string storage_tier = 1; + string storage_tier = 1 [(buf.validate.field).string.min_len = 1]; // Requested storage capacity in gibibytes (GiB). - int64 size_gib = 2; + int64 size_gib = 2 [(buf.validate.field).int64.gt = 0]; // Kubernetes access mode for the volume. - VolumeAccessMode access_mode = 3; + VolumeAccessMode access_mode = 3 [(buf.validate.field).enum.defined_only = true]; // Reference to the PVC that triggered this volume creation. Set by the CSI driver. // Empty for API-driven volume creation. @@ -140,13 +141,13 @@ message VolumeStatus { // Visible only through the private API. StorageProtocol protocol = 5; + // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service + // reconciler when selecting the hub. Used to look up the hub connection during delete. + string hub = 6; + // Operator-confirmed reference to the PVC on the tenant cluster. - PVCReference pvc_ref = 6; + PVCReference pvc_ref = 7; // Reference to the PV created for this volume on the tenant cluster. - PVReference pv_ref = 7; - - // Identifier of the hub cluster where the Volume CR is created. Set by the fulfillment-service - // reconciler when selecting the hub. Used to look up the hub connection during delete. - string hub = 8; + PVReference pv_ref = 8; } diff --git a/osac-operator/api/v1alpha1/volume_types.go b/osac-operator/api/v1alpha1/volume_types.go index 827307b89..de06b72aa 100644 --- a/osac-operator/api/v1alpha1/volume_types.go +++ b/osac-operator/api/v1alpha1/volume_types.go @@ -21,6 +21,7 @@ import ( ) // VolumeSpec defines the desired state of Volume. +// +kubebuilder:validation:XValidation:rule="!has(oldSelf.pvcRef) || has(self.pvcRef)",message="pvcRef cannot be removed once set" type VolumeSpec struct { // StorageTier is the name of the StorageTier that determines which backend // and protocol serve this volume. diff --git a/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml b/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml index fa5d4a4ea..4d6cff93f 100644 --- a/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml +++ b/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml @@ -130,6 +130,9 @@ spec: - sizeGiB - storageTier type: object + x-kubernetes-validations: + - message: pvcRef cannot be removed once set + rule: '!has(oldSelf.pvcRef) || has(self.pvcRef)' status: description: VolumeStatus defines the observed state of Volume. properties: diff --git a/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml b/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml index 584e1b55e..4fda5935e 100644 --- a/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml +++ b/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml @@ -128,6 +128,9 @@ spec: - sizeGiB - storageTier type: object + x-kubernetes-validations: + - message: pvcRef cannot be removed once set + rule: '!has(oldSelf.pvcRef) || has(self.pvcRef)' status: description: VolumeStatus defines the observed state of Volume. properties: From 9d9e8b25d6f289ed41147640d7eac648680aff90 Mon Sep 17 00:00:00 2001 From: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Date: Tue, 11 Aug 2026 08:34:15 -0400 Subject: [PATCH 7/7] OSAC-2872: add archived_volumes table test coverage Add Entry("archived_volumes") to the migration DescribeTable to verify the archived table is created and accepts inserts. Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> Assisted-by: Cursor/Claude Signed-off-by: akshaynadkarni <25892229+akshaynadkarni@users.noreply.github.com> --- .../95_create_volumes_tables_test.go | 28 +++++++++++++ osac-operator/api/v1alpha1/volume_names.go | 39 ------------------- 2 files changed, 28 insertions(+), 39 deletions(-) delete mode 100644 osac-operator/api/v1alpha1/volume_names.go diff --git a/fulfillment-service/internal/database/migrations/95_create_volumes_tables_test.go b/fulfillment-service/internal/database/migrations/95_create_volumes_tables_test.go index 7c2ebd9a4..d8dc1d7f0 100644 --- a/fulfillment-service/internal/database/migrations/95_create_volumes_tables_test.go +++ b/fulfillment-service/internal/database/migrations/95_create_volumes_tables_test.go @@ -51,6 +51,26 @@ var _ = DescribeMigration("Create volumes tables", func() { Entry("volumes", "volumes"), ) + It("Creates the archived_volumes table", func(ctx context.Context) { + err := tool.Migrate(ctx, 95) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into archived_volumes (id, tenant, creation_timestamp, deletion_timestamp, data) + values ($1, $2, now(), now(), $3)`, + "test-id", "system", `{}`, + ) + Expect(err).ToNot(HaveOccurred()) + + var count int + err = conn.QueryRow(ctx, + `select count(*) from archived_volumes where id = $1`, + "test-id", + ).Scan(&count) + Expect(err).ToNot(HaveOccurred()) + Expect(count).To(Equal(1)) + }) + It("Rejects invalid tenant reference", func(ctx context.Context) { err := tool.Migrate(ctx, 95) Expect(err).ToNot(HaveOccurred()) @@ -163,5 +183,13 @@ var _ = DescribeMigration("Create volumes tables", func() { Expect(err).To(HaveOccurred()) Expect(errors.As(err, &pgErr)).To(BeTrue()) Expect(pgErr.Code).To(Equal("Z0001")) + + _, err = conn.Exec(ctx, + `update volumes set project = $1 where id = $2`, + "other-project", "immutable-id", + ) + Expect(err).To(HaveOccurred()) + Expect(errors.As(err, &pgErr)).To(BeTrue()) + Expect(pgErr.Code).To(Equal("Z0001")) }) }) diff --git a/osac-operator/api/v1alpha1/volume_names.go b/osac-operator/api/v1alpha1/volume_names.go deleted file mode 100644 index 9b773388d..000000000 --- a/osac-operator/api/v1alpha1/volume_names.go +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright 2026. - -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. -*/ - -package v1alpha1 - -const ( - // VolumeNamespace is the default namespace where Volume CRs are created. - VolumeNamespace = "osac-volume" - - // VolumeLabelName is the label key for the volume name. - VolumeLabelName = "osac.openshift.io/volume" - - // VolumeLabelUUID is the label key for the fulfillment-service volume ID, - // used by the feedback controller to map Volume CRs back to inventory records. - VolumeLabelUUID = "osac.openshift.io/volume-uuid" - - // VolumeFinalizer is the finalizer managed by the Volume resource controller. - VolumeFinalizer = "osac.openshift.io/volume-finalizer" - - // VolumeFeedbackFinalizer is the finalizer managed by the Volume feedback controller. - VolumeFeedbackFinalizer = "osac.openshift.io/volume-feedback" - - // VolumeCleanupFinalizer is the finalizer added to ClusterOrder when volumes - // are created, blocking cluster deletion until volumes are processed. - VolumeCleanupFinalizer = "osac.openshift.io/volume-cleanup" -)