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/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 new file mode 100644 index 000000000..c337786d8 --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type.pb.go @@ -0,0 +1,979 @@ +// +// 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 ( + _ "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" + 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) +) + +// 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 + +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[1].Descriptor() +} + +func (VolumeState) Type() protoreflect.EnumType { + return &file_osac_private_v1_volume_type_proto_enumTypes[1] +} + +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. + 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"` + 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() VolumeAccessMode { + if x != nil { + return x.AccessMode + } + return VolumeAccessMode_VOLUME_ACCESS_MODE_UNSPECIFIED +} + +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 VolumeAccessMode) { + x.AccessMode = 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. + AccessMode VolumeAccessMode + // 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.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. 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"` + // 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,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 +} + +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() StorageProtocol { + if x != nil { + return x.Protocol + } + 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 + } + 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 StorageProtocol) { + x.Protocol = v +} + +func (x *VolumeStatus) SetHub(v string) { + x.Hub = 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. 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 +} + +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.Hub = b.Hub + 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, 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, 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, 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, + 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) +var file_osac_private_v1_volume_type_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_osac_private_v1_volume_type_proto_goTypes = []any{ + (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{ + 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() } +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_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: 2, + 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..24b313ead --- /dev/null +++ b/fulfillment-service/internal/api/osac/private/v1/volume_type_protoopaque.pb.go @@ -0,0 +1,963 @@ +// +// 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 ( + _ "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" + 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) +) + +// 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 + +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[1].Descriptor() +} + +func (VolumeState) Type() protoreflect.EnumType { + return &file_osac_private_v1_volume_type_proto_enumTypes[1] +} + +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 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 +} + +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() VolumeAccessMode { + if x != nil { + return x.xxx_hidden_AccessMode + } + return VolumeAccessMode_VOLUME_ACCESS_MODE_UNSPECIFIED +} + +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 VolumeAccessMode) { + x.xxx_hidden_AccessMode = 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. + AccessMode VolumeAccessMode + // 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_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 StorageProtocol `protobuf:"varint,5,opt,name=protocol,proto3,enum=osac.private.v1.StorageProtocol"` + 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 + 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() StorageProtocol { + if x != nil { + return x.xxx_hidden_Protocol + } + 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 + } + 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, 8) +} + +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 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 +} + +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. 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 +} + +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, 8) + 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_Hub = b.Hub + 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, 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, 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, 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, + 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) +var file_osac_private_v1_volume_type_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_osac_private_v1_volume_type_proto_goTypes = []any{ + (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{ + 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() } +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_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: 2, + 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.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/95_create_volumes_tables.up.sql b/fulfillment-service/internal/database/migrations/95_create_volumes_tables.up.sql new file mode 100644 index 000000000..014801c3f --- /dev/null +++ b/fulfillment-service/internal/database/migrations/95_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/95_create_volumes_tables_test.go b/fulfillment-service/internal/database/migrations/95_create_volumes_tables_test.go new file mode 100644 index 000000000..d8dc1d7f0 --- /dev/null +++ b/fulfillment-service/internal/database/migrations/95_create_volumes_tables_test.go @@ -0,0 +1,195 @@ +/* +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, 95) + 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("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()) + + _, 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, 95) + 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, 95) + Expect(err).ToNot(HaveOccurred()) + + _, err = conn.Exec(ctx, + `insert into tenants (id, name, tenant, data) values ($1, $2, $3, $4)`, + "tenant-2", "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, 95) + 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, 95) + 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()) + + 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")) + + _, 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/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..8261762a9 --- /dev/null +++ b/fulfillment-service/internal/rendering/tables/osac.private.v1.Volume.yaml @@ -0,0 +1,36 @@ +# +# 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: 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..20389e9fa --- /dev/null +++ b/fulfillment-service/internal/servers/private_volumes_server.go @@ -0,0 +1,176 @@ +/* +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" + 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" + "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() + + err = s.validateVolumeCreate(vol) + if err != nil { + return + } + + 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) 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) + 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..13bf1cb42 --- /dev/null +++ b/fulfillment-service/internal/servers/private_volumes_server_test.go @@ -0,0 +1,472 @@ +/* +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: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, + }.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: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, + }.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: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, + }.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( + privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE)) + 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 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().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: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, + 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: privatev1.StorageProtocol_STORAGE_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( + privatev1.StorageProtocol_STORAGE_PROTOCOL_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: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, + }.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: privatev1.VolumeAccessMode_VOLUME_ACCESS_MODE_READ_WRITE_ONCE, + }.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("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") + + _, 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: 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.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/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 new file mode 100644 index 000000000..371dba67f --- /dev/null +++ b/fulfillment-service/proto/private/osac/private/v1/volume_type.proto @@ -0,0 +1,153 @@ +// +// 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 "buf/validate/validate.proto"; +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 { + // 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 [(buf.validate.field).string.min_len = 1]; + + // Requested storage capacity in gibibytes (GiB). + int64 size_gib = 2 [(buf.validate.field).int64.gt = 0]; + + // Kubernetes access mode for the volume. + 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. + PVCReference pvc_ref = 4; +} + +// 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. Resolved during tier resolution at creation time. + // 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 = 7; + + // Reference to the PV created for this volume on the tenant cluster. + PVReference pv_ref = 8; +} 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) { + } +} 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_types.go b/osac-operator/api/v1alpha1/volume_types.go new file mode 100644 index 000000000..de06b72aa --- /dev/null +++ b/osac-operator/api/v1alpha1/volume_types.go @@ -0,0 +1,195 @@ +/* +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. +// +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. + // +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. + // https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=ReadWriteOnce;ReadOnlyMany;ReadWriteMany;ReadWriteOncePod + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="accessMode is immutable" + 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. + // +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"` +} + +// 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 + +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 + // +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. + // +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. + // Resolved during tier resolution at creation time. + // +kubebuilder:validation:Optional + // +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 + 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="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..4d6cff93f --- /dev/null +++ b/osac-operator/charts/operator-crds/templates/osac.openshift.io_volumes.yaml @@ -0,0 +1,276 @@ +{{- 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: .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: + allOf: + - enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + - ReadWriteOncePod + - enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + - ReadWriteOncePod + description: |- + 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 + 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 + 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: + 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 + 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. + enum: + - Progressing + - Ready + - Failed + - Deleting + type: string + protocol: + allOf: + - enum: + - Block + - NFS + - enum: + - Block + - NFS + description: |- + Protocol is the storage protocol used for this volume. + 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..4fda5935e --- /dev/null +++ b/osac-operator/config/crd/bases/osac.openshift.io_volumes.yaml @@ -0,0 +1,273 @@ +--- +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: .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: + allOf: + - enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + - ReadWriteOncePod + - enum: + - ReadWriteOnce + - ReadOnlyMany + - ReadWriteMany + - ReadWriteOncePod + description: |- + 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 + 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 + 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: + 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 + 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. + enum: + - Progressing + - Ready + - Failed + - Deleting + type: string + protocol: + allOf: + - enum: + - Block + - NFS + - enum: + - Block + - NFS + description: |- + Protocol is the storage protocol used for this volume. + 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: {}