From 39ee2f01ea1debd1e0af7df96025c4f0da79bbf5 Mon Sep 17 00:00:00 2001 From: Artem Chernyshev Date: Wed, 6 May 2026 20:57:10 +0300 Subject: [PATCH] feat: proxy image factory requests done by the providers through Omni Introduce the new API for creating schematics using raw YAML data. Proxied API becomes useful when Omni has auth to the image factory, or if it gets support for several image factory endpoints. Fixes: https://github.com/siderolabs/omni/issues/2787 Signed-off-by: Artem Chernyshev --- client/api/omni/management/management.pb.go | 428 ++++++++++-------- .../api/omni/management/management.pb.gw.go | 66 +++ client/api/omni/management/management.proto | 5 + .../api/omni/management/management_grpc.pb.go | 38 ++ .../omni/management/management_vtproto.pb.go | 179 ++++++++ client/pkg/client/management/management.go | 9 + client/pkg/clusterimport/client.go | 4 +- client/pkg/infra/imagefactory/client.go | 40 +- client/pkg/infra/infra.go | 23 +- .../src/api/omni/management/management.pb.ts | 7 + internal/backend/grpc/schematics.go | 24 + 11 files changed, 614 insertions(+), 209 deletions(-) diff --git a/client/api/omni/management/management.pb.go b/client/api/omni/management/management.pb.go index e1b36417..cc24eee8 100644 --- a/client/api/omni/management/management.pb.go +++ b/client/api/omni/management/management.pb.go @@ -1502,6 +1502,50 @@ func (x *CreateSchematicRequest) GetBootloader() SchematicBootloader { return SchematicBootloader_BOOT_AUTO } +type CreateSchematicFromRawRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RawSchematic []byte `protobuf:"bytes,1,opt,name=raw_schematic,json=rawSchematic,proto3" json:"raw_schematic,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateSchematicFromRawRequest) Reset() { + *x = CreateSchematicFromRawRequest{} + mi := &file_omni_management_management_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateSchematicFromRawRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateSchematicFromRawRequest) ProtoMessage() {} + +func (x *CreateSchematicFromRawRequest) ProtoReflect() protoreflect.Message { + mi := &file_omni_management_management_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateSchematicFromRawRequest.ProtoReflect.Descriptor instead. +func (*CreateSchematicFromRawRequest) Descriptor() ([]byte, []int) { + return file_omni_management_management_proto_rawDescGZIP(), []int{19} +} + +func (x *CreateSchematicFromRawRequest) GetRawSchematic() []byte { + if x != nil { + return x.RawSchematic + } + return nil +} + type CreateSchematicResponse struct { state protoimpl.MessageState `protogen:"open.v1"` SchematicId string `protobuf:"bytes,1,opt,name=schematic_id,json=schematicId,proto3" json:"schematic_id,omitempty"` @@ -1514,7 +1558,7 @@ type CreateSchematicResponse struct { func (x *CreateSchematicResponse) Reset() { *x = CreateSchematicResponse{} - mi := &file_omni_management_management_proto_msgTypes[19] + mi := &file_omni_management_management_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1526,7 +1570,7 @@ func (x *CreateSchematicResponse) String() string { func (*CreateSchematicResponse) ProtoMessage() {} func (x *CreateSchematicResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[19] + mi := &file_omni_management_management_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1539,7 +1583,7 @@ func (x *CreateSchematicResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateSchematicResponse.ProtoReflect.Descriptor instead. func (*CreateSchematicResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{19} + return file_omni_management_management_proto_rawDescGZIP(), []int{20} } func (x *CreateSchematicResponse) GetSchematicId() string { @@ -1579,7 +1623,7 @@ type GetSupportBundleRequest struct { func (x *GetSupportBundleRequest) Reset() { *x = GetSupportBundleRequest{} - mi := &file_omni_management_management_proto_msgTypes[20] + mi := &file_omni_management_management_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1591,7 +1635,7 @@ func (x *GetSupportBundleRequest) String() string { func (*GetSupportBundleRequest) ProtoMessage() {} func (x *GetSupportBundleRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[20] + mi := &file_omni_management_management_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1604,7 +1648,7 @@ func (x *GetSupportBundleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSupportBundleRequest.ProtoReflect.Descriptor instead. func (*GetSupportBundleRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{20} + return file_omni_management_management_proto_rawDescGZIP(), []int{21} } func (x *GetSupportBundleRequest) GetCluster() string { @@ -1624,7 +1668,7 @@ type GetSupportBundleResponse struct { func (x *GetSupportBundleResponse) Reset() { *x = GetSupportBundleResponse{} - mi := &file_omni_management_management_proto_msgTypes[21] + mi := &file_omni_management_management_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1636,7 +1680,7 @@ func (x *GetSupportBundleResponse) String() string { func (*GetSupportBundleResponse) ProtoMessage() {} func (x *GetSupportBundleResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[21] + mi := &file_omni_management_management_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1649,7 +1693,7 @@ func (x *GetSupportBundleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSupportBundleResponse.ProtoReflect.Descriptor instead. func (*GetSupportBundleResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{21} + return file_omni_management_management_proto_rawDescGZIP(), []int{22} } func (x *GetSupportBundleResponse) GetProgress() *GetSupportBundleResponse_Progress { @@ -1685,7 +1729,7 @@ type ReadAuditLogRequest struct { func (x *ReadAuditLogRequest) Reset() { *x = ReadAuditLogRequest{} - mi := &file_omni_management_management_proto_msgTypes[22] + mi := &file_omni_management_management_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1697,7 +1741,7 @@ func (x *ReadAuditLogRequest) String() string { func (*ReadAuditLogRequest) ProtoMessage() {} func (x *ReadAuditLogRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[22] + mi := &file_omni_management_management_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1710,7 +1754,7 @@ func (x *ReadAuditLogRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadAuditLogRequest.ProtoReflect.Descriptor instead. func (*ReadAuditLogRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{22} + return file_omni_management_management_proto_rawDescGZIP(), []int{23} } func (x *ReadAuditLogRequest) GetStartTime() string { @@ -1792,7 +1836,7 @@ type ReadAuditLogResponse struct { func (x *ReadAuditLogResponse) Reset() { *x = ReadAuditLogResponse{} - mi := &file_omni_management_management_proto_msgTypes[23] + mi := &file_omni_management_management_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1804,7 +1848,7 @@ func (x *ReadAuditLogResponse) String() string { func (*ReadAuditLogResponse) ProtoMessage() {} func (x *ReadAuditLogResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[23] + mi := &file_omni_management_management_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1817,7 +1861,7 @@ func (x *ReadAuditLogResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReadAuditLogResponse.ProtoReflect.Descriptor instead. func (*ReadAuditLogResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{23} + return file_omni_management_management_proto_rawDescGZIP(), []int{24} } func (x *ReadAuditLogResponse) GetAuditLog() []byte { @@ -1837,7 +1881,7 @@ type ValidateJsonSchemaRequest struct { func (x *ValidateJsonSchemaRequest) Reset() { *x = ValidateJsonSchemaRequest{} - mi := &file_omni_management_management_proto_msgTypes[24] + mi := &file_omni_management_management_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1849,7 +1893,7 @@ func (x *ValidateJsonSchemaRequest) String() string { func (*ValidateJsonSchemaRequest) ProtoMessage() {} func (x *ValidateJsonSchemaRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[24] + mi := &file_omni_management_management_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1862,7 +1906,7 @@ func (x *ValidateJsonSchemaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateJsonSchemaRequest.ProtoReflect.Descriptor instead. func (*ValidateJsonSchemaRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{24} + return file_omni_management_management_proto_rawDescGZIP(), []int{25} } func (x *ValidateJsonSchemaRequest) GetData() string { @@ -1888,7 +1932,7 @@ type ValidateJsonSchemaResponse struct { func (x *ValidateJsonSchemaResponse) Reset() { *x = ValidateJsonSchemaResponse{} - mi := &file_omni_management_management_proto_msgTypes[25] + mi := &file_omni_management_management_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1900,7 +1944,7 @@ func (x *ValidateJsonSchemaResponse) String() string { func (*ValidateJsonSchemaResponse) ProtoMessage() {} func (x *ValidateJsonSchemaResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[25] + mi := &file_omni_management_management_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1913,7 +1957,7 @@ func (x *ValidateJsonSchemaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateJsonSchemaResponse.ProtoReflect.Descriptor instead. func (*ValidateJsonSchemaResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{25} + return file_omni_management_management_proto_rawDescGZIP(), []int{26} } func (x *ValidateJsonSchemaResponse) GetErrors() []*ValidateJsonSchemaResponse_Error { @@ -1933,7 +1977,7 @@ type MaintenanceUpgradeRequest struct { func (x *MaintenanceUpgradeRequest) Reset() { *x = MaintenanceUpgradeRequest{} - mi := &file_omni_management_management_proto_msgTypes[26] + mi := &file_omni_management_management_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1945,7 +1989,7 @@ func (x *MaintenanceUpgradeRequest) String() string { func (*MaintenanceUpgradeRequest) ProtoMessage() {} func (x *MaintenanceUpgradeRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[26] + mi := &file_omni_management_management_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1958,7 +2002,7 @@ func (x *MaintenanceUpgradeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MaintenanceUpgradeRequest.ProtoReflect.Descriptor instead. func (*MaintenanceUpgradeRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{26} + return file_omni_management_management_proto_rawDescGZIP(), []int{27} } func (x *MaintenanceUpgradeRequest) GetMachineId() string { @@ -1983,7 +2027,7 @@ type MaintenanceUpgradeResponse struct { func (x *MaintenanceUpgradeResponse) Reset() { *x = MaintenanceUpgradeResponse{} - mi := &file_omni_management_management_proto_msgTypes[27] + mi := &file_omni_management_management_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1995,7 +2039,7 @@ func (x *MaintenanceUpgradeResponse) String() string { func (*MaintenanceUpgradeResponse) ProtoMessage() {} func (x *MaintenanceUpgradeResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[27] + mi := &file_omni_management_management_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2008,7 +2052,7 @@ func (x *MaintenanceUpgradeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MaintenanceUpgradeResponse.ProtoReflect.Descriptor instead. func (*MaintenanceUpgradeResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{27} + return file_omni_management_management_proto_rawDescGZIP(), []int{28} } type GetMachineJoinConfigRequest struct { @@ -2021,7 +2065,7 @@ type GetMachineJoinConfigRequest struct { func (x *GetMachineJoinConfigRequest) Reset() { *x = GetMachineJoinConfigRequest{} - mi := &file_omni_management_management_proto_msgTypes[28] + mi := &file_omni_management_management_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2033,7 +2077,7 @@ func (x *GetMachineJoinConfigRequest) String() string { func (*GetMachineJoinConfigRequest) ProtoMessage() {} func (x *GetMachineJoinConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[28] + mi := &file_omni_management_management_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2046,7 +2090,7 @@ func (x *GetMachineJoinConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMachineJoinConfigRequest.ProtoReflect.Descriptor instead. func (*GetMachineJoinConfigRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{28} + return file_omni_management_management_proto_rawDescGZIP(), []int{29} } func (x *GetMachineJoinConfigRequest) GetUseGrpcTunnel() bool { @@ -2073,7 +2117,7 @@ type GetMachineJoinConfigResponse struct { func (x *GetMachineJoinConfigResponse) Reset() { *x = GetMachineJoinConfigResponse{} - mi := &file_omni_management_management_proto_msgTypes[29] + mi := &file_omni_management_management_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2085,7 +2129,7 @@ func (x *GetMachineJoinConfigResponse) String() string { func (*GetMachineJoinConfigResponse) ProtoMessage() {} func (x *GetMachineJoinConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[29] + mi := &file_omni_management_management_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2098,7 +2142,7 @@ func (x *GetMachineJoinConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMachineJoinConfigResponse.ProtoReflect.Descriptor instead. func (*GetMachineJoinConfigResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{29} + return file_omni_management_management_proto_rawDescGZIP(), []int{30} } func (x *GetMachineJoinConfigResponse) GetKernelArgs() []string { @@ -2124,7 +2168,7 @@ type GenJoinTokenResponse struct { func (x *GenJoinTokenResponse) Reset() { *x = GenJoinTokenResponse{} - mi := &file_omni_management_management_proto_msgTypes[30] + mi := &file_omni_management_management_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2136,7 +2180,7 @@ func (x *GenJoinTokenResponse) String() string { func (*GenJoinTokenResponse) ProtoMessage() {} func (x *GenJoinTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[30] + mi := &file_omni_management_management_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2149,7 +2193,7 @@ func (x *GenJoinTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GenJoinTokenResponse.ProtoReflect.Descriptor instead. func (*GenJoinTokenResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{30} + return file_omni_management_management_proto_rawDescGZIP(), []int{31} } func (x *GenJoinTokenResponse) GetToken() string { @@ -2169,7 +2213,7 @@ type CreateJoinTokenRequest struct { func (x *CreateJoinTokenRequest) Reset() { *x = CreateJoinTokenRequest{} - mi := &file_omni_management_management_proto_msgTypes[31] + mi := &file_omni_management_management_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2181,7 +2225,7 @@ func (x *CreateJoinTokenRequest) String() string { func (*CreateJoinTokenRequest) ProtoMessage() {} func (x *CreateJoinTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[31] + mi := &file_omni_management_management_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2194,7 +2238,7 @@ func (x *CreateJoinTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateJoinTokenRequest.ProtoReflect.Descriptor instead. func (*CreateJoinTokenRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{31} + return file_omni_management_management_proto_rawDescGZIP(), []int{32} } func (x *CreateJoinTokenRequest) GetName() string { @@ -2220,7 +2264,7 @@ type CreateJoinTokenResponse struct { func (x *CreateJoinTokenResponse) Reset() { *x = CreateJoinTokenResponse{} - mi := &file_omni_management_management_proto_msgTypes[32] + mi := &file_omni_management_management_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2276,7 @@ func (x *CreateJoinTokenResponse) String() string { func (*CreateJoinTokenResponse) ProtoMessage() {} func (x *CreateJoinTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[32] + mi := &file_omni_management_management_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,7 +2289,7 @@ func (x *CreateJoinTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateJoinTokenResponse.ProtoReflect.Descriptor instead. func (*CreateJoinTokenResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{32} + return file_omni_management_management_proto_rawDescGZIP(), []int{33} } func (x *CreateJoinTokenResponse) GetId() string { @@ -2264,7 +2308,7 @@ type ResetNodeUniqueTokenRequest struct { func (x *ResetNodeUniqueTokenRequest) Reset() { *x = ResetNodeUniqueTokenRequest{} - mi := &file_omni_management_management_proto_msgTypes[33] + mi := &file_omni_management_management_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2276,7 +2320,7 @@ func (x *ResetNodeUniqueTokenRequest) String() string { func (*ResetNodeUniqueTokenRequest) ProtoMessage() {} func (x *ResetNodeUniqueTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[33] + mi := &file_omni_management_management_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2289,7 +2333,7 @@ func (x *ResetNodeUniqueTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetNodeUniqueTokenRequest.ProtoReflect.Descriptor instead. func (*ResetNodeUniqueTokenRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{33} + return file_omni_management_management_proto_rawDescGZIP(), []int{34} } func (x *ResetNodeUniqueTokenRequest) GetId() string { @@ -2307,7 +2351,7 @@ type ResetNodeUniqueTokenResponse struct { func (x *ResetNodeUniqueTokenResponse) Reset() { *x = ResetNodeUniqueTokenResponse{} - mi := &file_omni_management_management_proto_msgTypes[34] + mi := &file_omni_management_management_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2319,7 +2363,7 @@ func (x *ResetNodeUniqueTokenResponse) String() string { func (*ResetNodeUniqueTokenResponse) ProtoMessage() {} func (x *ResetNodeUniqueTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[34] + mi := &file_omni_management_management_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2332,7 +2376,7 @@ func (x *ResetNodeUniqueTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetNodeUniqueTokenResponse.ProtoReflect.Descriptor instead. func (*ResetNodeUniqueTokenResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{34} + return file_omni_management_management_proto_rawDescGZIP(), []int{35} } type CreateUserRequest struct { @@ -2345,7 +2389,7 @@ type CreateUserRequest struct { func (x *CreateUserRequest) Reset() { *x = CreateUserRequest{} - mi := &file_omni_management_management_proto_msgTypes[35] + mi := &file_omni_management_management_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2357,7 +2401,7 @@ func (x *CreateUserRequest) String() string { func (*CreateUserRequest) ProtoMessage() {} func (x *CreateUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[35] + mi := &file_omni_management_management_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2370,7 +2414,7 @@ func (x *CreateUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateUserRequest.ProtoReflect.Descriptor instead. func (*CreateUserRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{35} + return file_omni_management_management_proto_rawDescGZIP(), []int{36} } func (x *CreateUserRequest) GetEmail() string { @@ -2396,7 +2440,7 @@ type CreateUserResponse struct { func (x *CreateUserResponse) Reset() { *x = CreateUserResponse{} - mi := &file_omni_management_management_proto_msgTypes[36] + mi := &file_omni_management_management_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2408,7 +2452,7 @@ func (x *CreateUserResponse) String() string { func (*CreateUserResponse) ProtoMessage() {} func (x *CreateUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[36] + mi := &file_omni_management_management_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2421,7 +2465,7 @@ func (x *CreateUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateUserResponse.ProtoReflect.Descriptor instead. func (*CreateUserResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{36} + return file_omni_management_management_proto_rawDescGZIP(), []int{37} } func (x *CreateUserResponse) GetUserId() string { @@ -2441,7 +2485,7 @@ type UpdateUserRequest struct { func (x *UpdateUserRequest) Reset() { *x = UpdateUserRequest{} - mi := &file_omni_management_management_proto_msgTypes[37] + mi := &file_omni_management_management_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2453,7 +2497,7 @@ func (x *UpdateUserRequest) String() string { func (*UpdateUserRequest) ProtoMessage() {} func (x *UpdateUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[37] + mi := &file_omni_management_management_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2466,7 +2510,7 @@ func (x *UpdateUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateUserRequest.ProtoReflect.Descriptor instead. func (*UpdateUserRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{37} + return file_omni_management_management_proto_rawDescGZIP(), []int{38} } func (x *UpdateUserRequest) GetEmail() string { @@ -2492,7 +2536,7 @@ type DestroyUserRequest struct { func (x *DestroyUserRequest) Reset() { *x = DestroyUserRequest{} - mi := &file_omni_management_management_proto_msgTypes[38] + mi := &file_omni_management_management_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2504,7 +2548,7 @@ func (x *DestroyUserRequest) String() string { func (*DestroyUserRequest) ProtoMessage() {} func (x *DestroyUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[38] + mi := &file_omni_management_management_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2517,7 +2561,7 @@ func (x *DestroyUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DestroyUserRequest.ProtoReflect.Descriptor instead. func (*DestroyUserRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{38} + return file_omni_management_management_proto_rawDescGZIP(), []int{39} } func (x *DestroyUserRequest) GetEmail() string { @@ -2537,7 +2581,7 @@ type MachinePowerOffRequest struct { func (x *MachinePowerOffRequest) Reset() { *x = MachinePowerOffRequest{} - mi := &file_omni_management_management_proto_msgTypes[39] + mi := &file_omni_management_management_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2549,7 +2593,7 @@ func (x *MachinePowerOffRequest) String() string { func (*MachinePowerOffRequest) ProtoMessage() {} func (x *MachinePowerOffRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[39] + mi := &file_omni_management_management_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2562,7 +2606,7 @@ func (x *MachinePowerOffRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachinePowerOffRequest.ProtoReflect.Descriptor instead. func (*MachinePowerOffRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{39} + return file_omni_management_management_proto_rawDescGZIP(), []int{40} } func (x *MachinePowerOffRequest) GetMachineId() string { @@ -2580,7 +2624,7 @@ type MachinePowerOffResponse struct { func (x *MachinePowerOffResponse) Reset() { *x = MachinePowerOffResponse{} - mi := &file_omni_management_management_proto_msgTypes[40] + mi := &file_omni_management_management_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2592,7 +2636,7 @@ func (x *MachinePowerOffResponse) String() string { func (*MachinePowerOffResponse) ProtoMessage() {} func (x *MachinePowerOffResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[40] + mi := &file_omni_management_management_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2605,7 +2649,7 @@ func (x *MachinePowerOffResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MachinePowerOffResponse.ProtoReflect.Descriptor instead. func (*MachinePowerOffResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{40} + return file_omni_management_management_proto_rawDescGZIP(), []int{41} } type MachinePowerOnRequest struct { @@ -2618,7 +2662,7 @@ type MachinePowerOnRequest struct { func (x *MachinePowerOnRequest) Reset() { *x = MachinePowerOnRequest{} - mi := &file_omni_management_management_proto_msgTypes[41] + mi := &file_omni_management_management_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2630,7 +2674,7 @@ func (x *MachinePowerOnRequest) String() string { func (*MachinePowerOnRequest) ProtoMessage() {} func (x *MachinePowerOnRequest) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[41] + mi := &file_omni_management_management_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2643,7 +2687,7 @@ func (x *MachinePowerOnRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachinePowerOnRequest.ProtoReflect.Descriptor instead. func (*MachinePowerOnRequest) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{41} + return file_omni_management_management_proto_rawDescGZIP(), []int{42} } func (x *MachinePowerOnRequest) GetMachineId() string { @@ -2661,7 +2705,7 @@ type MachinePowerOnResponse struct { func (x *MachinePowerOnResponse) Reset() { *x = MachinePowerOnResponse{} - mi := &file_omni_management_management_proto_msgTypes[42] + mi := &file_omni_management_management_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2673,7 +2717,7 @@ func (x *MachinePowerOnResponse) String() string { func (*MachinePowerOnResponse) ProtoMessage() {} func (x *MachinePowerOnResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[42] + mi := &file_omni_management_management_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2686,7 +2730,7 @@ func (x *MachinePowerOnResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MachinePowerOnResponse.ProtoReflect.Descriptor instead. func (*MachinePowerOnResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{42} + return file_omni_management_management_proto_rawDescGZIP(), []int{43} } type ListUsersResponse struct { @@ -2698,7 +2742,7 @@ type ListUsersResponse struct { func (x *ListUsersResponse) Reset() { *x = ListUsersResponse{} - mi := &file_omni_management_management_proto_msgTypes[43] + mi := &file_omni_management_management_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2710,7 +2754,7 @@ func (x *ListUsersResponse) String() string { func (*ListUsersResponse) ProtoMessage() {} func (x *ListUsersResponse) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[43] + mi := &file_omni_management_management_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2723,7 +2767,7 @@ func (x *ListUsersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUsersResponse.ProtoReflect.Descriptor instead. func (*ListUsersResponse) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{43} + return file_omni_management_management_proto_rawDescGZIP(), []int{44} } func (x *ListUsersResponse) GetUsers() []*ListUsersResponse_User { @@ -2745,7 +2789,7 @@ type ListServiceAccountsResponse_ServiceAccount struct { func (x *ListServiceAccountsResponse_ServiceAccount) Reset() { *x = ListServiceAccountsResponse_ServiceAccount{} - mi := &file_omni_management_management_proto_msgTypes[44] + mi := &file_omni_management_management_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2757,7 +2801,7 @@ func (x *ListServiceAccountsResponse_ServiceAccount) String() string { func (*ListServiceAccountsResponse_ServiceAccount) ProtoMessage() {} func (x *ListServiceAccountsResponse_ServiceAccount) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[44] + mi := &file_omni_management_management_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2814,7 +2858,7 @@ type ListServiceAccountsResponse_ServiceAccount_PgpPublicKey struct { func (x *ListServiceAccountsResponse_ServiceAccount_PgpPublicKey) Reset() { *x = ListServiceAccountsResponse_ServiceAccount_PgpPublicKey{} - mi := &file_omni_management_management_proto_msgTypes[45] + mi := &file_omni_management_management_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2826,7 +2870,7 @@ func (x *ListServiceAccountsResponse_ServiceAccount_PgpPublicKey) String() strin func (*ListServiceAccountsResponse_ServiceAccount_PgpPublicKey) ProtoMessage() {} func (x *ListServiceAccountsResponse_ServiceAccount_PgpPublicKey) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[45] + mi := &file_omni_management_management_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2888,7 +2932,7 @@ type CreateSchematicRequest_Overlay struct { func (x *CreateSchematicRequest_Overlay) Reset() { *x = CreateSchematicRequest_Overlay{} - mi := &file_omni_management_management_proto_msgTypes[46] + mi := &file_omni_management_management_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2900,7 +2944,7 @@ func (x *CreateSchematicRequest_Overlay) String() string { func (*CreateSchematicRequest_Overlay) ProtoMessage() {} func (x *CreateSchematicRequest_Overlay) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[46] + mi := &file_omni_management_management_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2950,7 +2994,7 @@ type GetSupportBundleResponse_Progress struct { func (x *GetSupportBundleResponse_Progress) Reset() { *x = GetSupportBundleResponse_Progress{} - mi := &file_omni_management_management_proto_msgTypes[48] + mi := &file_omni_management_management_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2962,7 +3006,7 @@ func (x *GetSupportBundleResponse_Progress) String() string { func (*GetSupportBundleResponse_Progress) ProtoMessage() {} func (x *GetSupportBundleResponse_Progress) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[48] + mi := &file_omni_management_management_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2975,7 +3019,7 @@ func (x *GetSupportBundleResponse_Progress) ProtoReflect() protoreflect.Message // Deprecated: Use GetSupportBundleResponse_Progress.ProtoReflect.Descriptor instead. func (*GetSupportBundleResponse_Progress) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{21, 0} + return file_omni_management_management_proto_rawDescGZIP(), []int{22, 0} } func (x *GetSupportBundleResponse_Progress) GetSource() string { @@ -3025,7 +3069,7 @@ type ValidateJsonSchemaResponse_Error struct { func (x *ValidateJsonSchemaResponse_Error) Reset() { *x = ValidateJsonSchemaResponse_Error{} - mi := &file_omni_management_management_proto_msgTypes[49] + mi := &file_omni_management_management_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3037,7 +3081,7 @@ func (x *ValidateJsonSchemaResponse_Error) String() string { func (*ValidateJsonSchemaResponse_Error) ProtoMessage() {} func (x *ValidateJsonSchemaResponse_Error) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[49] + mi := &file_omni_management_management_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3050,7 +3094,7 @@ func (x *ValidateJsonSchemaResponse_Error) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateJsonSchemaResponse_Error.ProtoReflect.Descriptor instead. func (*ValidateJsonSchemaResponse_Error) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{25, 0} + return file_omni_management_management_proto_rawDescGZIP(), []int{26, 0} } func (x *ValidateJsonSchemaResponse_Error) GetErrors() []*ValidateJsonSchemaResponse_Error { @@ -3094,7 +3138,7 @@ type ListUsersResponse_User struct { func (x *ListUsersResponse_User) Reset() { *x = ListUsersResponse_User{} - mi := &file_omni_management_management_proto_msgTypes[50] + mi := &file_omni_management_management_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3106,7 +3150,7 @@ func (x *ListUsersResponse_User) String() string { func (*ListUsersResponse_User) ProtoMessage() {} func (x *ListUsersResponse_User) ProtoReflect() protoreflect.Message { - mi := &file_omni_management_management_proto_msgTypes[50] + mi := &file_omni_management_management_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3119,7 +3163,7 @@ func (x *ListUsersResponse_User) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUsersResponse_User.ProtoReflect.Descriptor instead. func (*ListUsersResponse_User) Descriptor() ([]byte, []int) { - return file_omni_management_management_proto_rawDescGZIP(), []int{43, 0} + return file_omni_management_management_proto_rawDescGZIP(), []int{44, 0} } func (x *ListUsersResponse_User) GetId() string { @@ -3284,7 +3328,9 @@ const file_omni_management_management_proto_rawDesc = "" + "\x18SiderolinkGRPCTunnelMode\x12\b\n" + "\x04AUTO\x10\x00\x12\f\n" + "\bDISABLED\x10\x01\x12\v\n" + - "\aENABLED\x10\x02\"\xaa\x01\n" + + "\aENABLED\x10\x02\"D\n" + + "\x1dCreateSchematicFromRawRequest\x12#\n" + + "\rraw_schematic\x18\x01 \x01(\fR\frawSchematic\"\xaa\x01\n" + "\x17CreateSchematicResponse\x12!\n" + "\fschematic_id\x18\x01 \x01(\tR\vschematicId\x12\x17\n" + "\apxe_url\x18\x02 \x01(\tR\x06pxeUrl\x12.\n" + @@ -3411,7 +3457,7 @@ const file_omni_management_management_proto_rawDesc = "" + "\x12AuditLogOrderByDir\x12&\n" + "\"AUDIT_LOG_ORDER_BY_DIR_UNSPECIFIED\x10\x00\x12\x1e\n" + "\x1aAUDIT_LOG_ORDER_BY_DIR_ASC\x10\x01\x12\x1f\n" + - "\x1bAUDIT_LOG_ORDER_BY_DIR_DESC\x10\x022\xd9\x11\n" + + "\x1bAUDIT_LOG_ORDER_BY_DIR_DESC\x10\x022\xc3\x12\n" + "\x11ManagementService\x12K\n" + "\n" + "Kubeconfig\x12\x1d.management.KubeconfigRequest\x1a\x1e.management.KubeconfigResponse\x12N\n" + @@ -3427,7 +3473,8 @@ const file_omni_management_management_proto_rawDesc = "" + "\x15DestroyServiceAccount\x12(.management.DestroyServiceAccountRequest\x1a\x16.google.protobuf.Empty\x12{\n" + "\x1aKubernetesUpgradePreChecks\x12-.management.KubernetesUpgradePreChecksRequest\x1a..management.KubernetesUpgradePreChecksResponse\x12r\n" + "\x17KubernetesSyncManifests\x12).management.KubernetesSyncManifestRequest\x1a*.management.KubernetesSyncManifestResponse0\x01\x12Z\n" + - "\x0fCreateSchematic\x12\".management.CreateSchematicRequest\x1a#.management.CreateSchematicResponse\x12_\n" + + "\x0fCreateSchematic\x12\".management.CreateSchematicRequest\x1a#.management.CreateSchematicResponse\x12h\n" + + "\x16CreateSchematicFromRaw\x12).management.CreateSchematicFromRawRequest\x1a#.management.CreateSchematicResponse\x12_\n" + "\x10GetSupportBundle\x12#.management.GetSupportBundleRequest\x1a$.management.GetSupportBundleResponse0\x01\x12S\n" + "\fReadAuditLog\x12\x1f.management.ReadAuditLogRequest\x1a .management.ReadAuditLogResponse0\x01\x12c\n" + "\x12MaintenanceUpgrade\x12%.management.MaintenanceUpgradeRequest\x1a&.management.MaintenanceUpgradeResponse\x12i\n" + @@ -3456,7 +3503,7 @@ func file_omni_management_management_proto_rawDescGZIP() []byte { } var file_omni_management_management_proto_enumTypes = make([]protoimpl.EnumInfo, 7) -var file_omni_management_management_proto_msgTypes = make([]protoimpl.MessageInfo, 52) +var file_omni_management_management_proto_msgTypes = make([]protoimpl.MessageInfo, 53) var file_omni_management_management_proto_goTypes = []any{ (SchematicBootloader)(0), // 0: management.SchematicBootloader (AuditLogEventType)(0), // 1: management.AuditLogEventType @@ -3484,120 +3531,123 @@ var file_omni_management_management_proto_goTypes = []any{ (*KubernetesSyncManifestRequest)(nil), // 23: management.KubernetesSyncManifestRequest (*KubernetesSyncManifestResponse)(nil), // 24: management.KubernetesSyncManifestResponse (*CreateSchematicRequest)(nil), // 25: management.CreateSchematicRequest - (*CreateSchematicResponse)(nil), // 26: management.CreateSchematicResponse - (*GetSupportBundleRequest)(nil), // 27: management.GetSupportBundleRequest - (*GetSupportBundleResponse)(nil), // 28: management.GetSupportBundleResponse - (*ReadAuditLogRequest)(nil), // 29: management.ReadAuditLogRequest - (*ReadAuditLogResponse)(nil), // 30: management.ReadAuditLogResponse - (*ValidateJsonSchemaRequest)(nil), // 31: management.ValidateJsonSchemaRequest - (*ValidateJsonSchemaResponse)(nil), // 32: management.ValidateJsonSchemaResponse - (*MaintenanceUpgradeRequest)(nil), // 33: management.MaintenanceUpgradeRequest - (*MaintenanceUpgradeResponse)(nil), // 34: management.MaintenanceUpgradeResponse - (*GetMachineJoinConfigRequest)(nil), // 35: management.GetMachineJoinConfigRequest - (*GetMachineJoinConfigResponse)(nil), // 36: management.GetMachineJoinConfigResponse - (*GenJoinTokenResponse)(nil), // 37: management.GenJoinTokenResponse - (*CreateJoinTokenRequest)(nil), // 38: management.CreateJoinTokenRequest - (*CreateJoinTokenResponse)(nil), // 39: management.CreateJoinTokenResponse - (*ResetNodeUniqueTokenRequest)(nil), // 40: management.ResetNodeUniqueTokenRequest - (*ResetNodeUniqueTokenResponse)(nil), // 41: management.ResetNodeUniqueTokenResponse - (*CreateUserRequest)(nil), // 42: management.CreateUserRequest - (*CreateUserResponse)(nil), // 43: management.CreateUserResponse - (*UpdateUserRequest)(nil), // 44: management.UpdateUserRequest - (*DestroyUserRequest)(nil), // 45: management.DestroyUserRequest - (*MachinePowerOffRequest)(nil), // 46: management.MachinePowerOffRequest - (*MachinePowerOffResponse)(nil), // 47: management.MachinePowerOffResponse - (*MachinePowerOnRequest)(nil), // 48: management.MachinePowerOnRequest - (*MachinePowerOnResponse)(nil), // 49: management.MachinePowerOnResponse - (*ListUsersResponse)(nil), // 50: management.ListUsersResponse - (*ListServiceAccountsResponse_ServiceAccount)(nil), // 51: management.ListServiceAccountsResponse.ServiceAccount - (*ListServiceAccountsResponse_ServiceAccount_PgpPublicKey)(nil), // 52: management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey - (*CreateSchematicRequest_Overlay)(nil), // 53: management.CreateSchematicRequest.Overlay - nil, // 54: management.CreateSchematicRequest.MetaValuesEntry - (*GetSupportBundleResponse_Progress)(nil), // 55: management.GetSupportBundleResponse.Progress - (*ValidateJsonSchemaResponse_Error)(nil), // 56: management.ValidateJsonSchemaResponse.Error - (*ListUsersResponse_User)(nil), // 57: management.ListUsersResponse.User - nil, // 58: management.ListUsersResponse.User.SamlLabelsEntry - (*durationpb.Duration)(nil), // 59: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 60: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 61: google.protobuf.Empty - (*common.Data)(nil), // 62: common.Data + (*CreateSchematicFromRawRequest)(nil), // 26: management.CreateSchematicFromRawRequest + (*CreateSchematicResponse)(nil), // 27: management.CreateSchematicResponse + (*GetSupportBundleRequest)(nil), // 28: management.GetSupportBundleRequest + (*GetSupportBundleResponse)(nil), // 29: management.GetSupportBundleResponse + (*ReadAuditLogRequest)(nil), // 30: management.ReadAuditLogRequest + (*ReadAuditLogResponse)(nil), // 31: management.ReadAuditLogResponse + (*ValidateJsonSchemaRequest)(nil), // 32: management.ValidateJsonSchemaRequest + (*ValidateJsonSchemaResponse)(nil), // 33: management.ValidateJsonSchemaResponse + (*MaintenanceUpgradeRequest)(nil), // 34: management.MaintenanceUpgradeRequest + (*MaintenanceUpgradeResponse)(nil), // 35: management.MaintenanceUpgradeResponse + (*GetMachineJoinConfigRequest)(nil), // 36: management.GetMachineJoinConfigRequest + (*GetMachineJoinConfigResponse)(nil), // 37: management.GetMachineJoinConfigResponse + (*GenJoinTokenResponse)(nil), // 38: management.GenJoinTokenResponse + (*CreateJoinTokenRequest)(nil), // 39: management.CreateJoinTokenRequest + (*CreateJoinTokenResponse)(nil), // 40: management.CreateJoinTokenResponse + (*ResetNodeUniqueTokenRequest)(nil), // 41: management.ResetNodeUniqueTokenRequest + (*ResetNodeUniqueTokenResponse)(nil), // 42: management.ResetNodeUniqueTokenResponse + (*CreateUserRequest)(nil), // 43: management.CreateUserRequest + (*CreateUserResponse)(nil), // 44: management.CreateUserResponse + (*UpdateUserRequest)(nil), // 45: management.UpdateUserRequest + (*DestroyUserRequest)(nil), // 46: management.DestroyUserRequest + (*MachinePowerOffRequest)(nil), // 47: management.MachinePowerOffRequest + (*MachinePowerOffResponse)(nil), // 48: management.MachinePowerOffResponse + (*MachinePowerOnRequest)(nil), // 49: management.MachinePowerOnRequest + (*MachinePowerOnResponse)(nil), // 50: management.MachinePowerOnResponse + (*ListUsersResponse)(nil), // 51: management.ListUsersResponse + (*ListServiceAccountsResponse_ServiceAccount)(nil), // 52: management.ListServiceAccountsResponse.ServiceAccount + (*ListServiceAccountsResponse_ServiceAccount_PgpPublicKey)(nil), // 53: management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey + (*CreateSchematicRequest_Overlay)(nil), // 54: management.CreateSchematicRequest.Overlay + nil, // 55: management.CreateSchematicRequest.MetaValuesEntry + (*GetSupportBundleResponse_Progress)(nil), // 56: management.GetSupportBundleResponse.Progress + (*ValidateJsonSchemaResponse_Error)(nil), // 57: management.ValidateJsonSchemaResponse.Error + (*ListUsersResponse_User)(nil), // 58: management.ListUsersResponse.User + nil, // 59: management.ListUsersResponse.User.SamlLabelsEntry + (*durationpb.Duration)(nil), // 60: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 61: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 62: google.protobuf.Empty + (*common.Data)(nil), // 63: common.Data } var file_omni_management_management_proto_depIdxs = []int32{ - 51, // 0: management.ListServiceAccountsResponse.service_accounts:type_name -> management.ListServiceAccountsResponse.ServiceAccount - 59, // 1: management.KubeconfigRequest.service_account_ttl:type_name -> google.protobuf.Duration + 52, // 0: management.ListServiceAccountsResponse.service_accounts:type_name -> management.ListServiceAccountsResponse.ServiceAccount + 60, // 1: management.KubeconfigRequest.service_account_ttl:type_name -> google.protobuf.Duration 4, // 2: management.KubernetesSSAOptions.inventory_policy:type_name -> management.KubernetesSSAOptions.InventoryPolicy - 59, // 3: management.KubernetesSSAOptions.reconcile_timeout:type_name -> google.protobuf.Duration + 60, // 3: management.KubernetesSSAOptions.reconcile_timeout:type_name -> google.protobuf.Duration 22, // 4: management.KubernetesSyncManifestRequest.ssa:type_name -> management.KubernetesSSAOptions 5, // 5: management.KubernetesSyncManifestResponse.response_type:type_name -> management.KubernetesSyncManifestResponse.ResponseType - 54, // 6: management.CreateSchematicRequest.meta_values:type_name -> management.CreateSchematicRequest.MetaValuesEntry + 55, // 6: management.CreateSchematicRequest.meta_values:type_name -> management.CreateSchematicRequest.MetaValuesEntry 6, // 7: management.CreateSchematicRequest.siderolink_grpc_tunnel_mode:type_name -> management.CreateSchematicRequest.SiderolinkGRPCTunnelMode - 53, // 8: management.CreateSchematicRequest.overlay:type_name -> management.CreateSchematicRequest.Overlay + 54, // 8: management.CreateSchematicRequest.overlay:type_name -> management.CreateSchematicRequest.Overlay 0, // 9: management.CreateSchematicRequest.bootloader:type_name -> management.SchematicBootloader - 55, // 10: management.GetSupportBundleResponse.progress:type_name -> management.GetSupportBundleResponse.Progress + 56, // 10: management.GetSupportBundleResponse.progress:type_name -> management.GetSupportBundleResponse.Progress 2, // 11: management.ReadAuditLogRequest.order_by_field:type_name -> management.AuditLogOrderByField 3, // 12: management.ReadAuditLogRequest.order_by_dir:type_name -> management.AuditLogOrderByDir 1, // 13: management.ReadAuditLogRequest.event_type:type_name -> management.AuditLogEventType - 56, // 14: management.ValidateJsonSchemaResponse.errors:type_name -> management.ValidateJsonSchemaResponse.Error - 60, // 15: management.CreateJoinTokenRequest.expiration_time:type_name -> google.protobuf.Timestamp - 57, // 16: management.ListUsersResponse.users:type_name -> management.ListUsersResponse.User - 52, // 17: management.ListServiceAccountsResponse.ServiceAccount.pgp_public_keys:type_name -> management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey - 60, // 18: management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey.expiration:type_name -> google.protobuf.Timestamp - 60, // 19: management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey.created:type_name -> google.protobuf.Timestamp - 60, // 20: management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey.last_used:type_name -> google.protobuf.Timestamp - 56, // 21: management.ValidateJsonSchemaResponse.Error.errors:type_name -> management.ValidateJsonSchemaResponse.Error - 58, // 22: management.ListUsersResponse.User.saml_labels:type_name -> management.ListUsersResponse.User.SamlLabelsEntry + 57, // 14: management.ValidateJsonSchemaResponse.errors:type_name -> management.ValidateJsonSchemaResponse.Error + 61, // 15: management.CreateJoinTokenRequest.expiration_time:type_name -> google.protobuf.Timestamp + 58, // 16: management.ListUsersResponse.users:type_name -> management.ListUsersResponse.User + 53, // 17: management.ListServiceAccountsResponse.ServiceAccount.pgp_public_keys:type_name -> management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey + 61, // 18: management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey.expiration:type_name -> google.protobuf.Timestamp + 61, // 19: management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey.created:type_name -> google.protobuf.Timestamp + 61, // 20: management.ListServiceAccountsResponse.ServiceAccount.PgpPublicKey.last_used:type_name -> google.protobuf.Timestamp + 57, // 21: management.ValidateJsonSchemaResponse.Error.errors:type_name -> management.ValidateJsonSchemaResponse.Error + 59, // 22: management.ListUsersResponse.User.saml_labels:type_name -> management.ListUsersResponse.User.SamlLabelsEntry 19, // 23: management.ManagementService.Kubeconfig:input_type -> management.KubeconfigRequest 12, // 24: management.ManagementService.Talosconfig:input_type -> management.TalosconfigRequest - 61, // 25: management.ManagementService.Omniconfig:input_type -> google.protobuf.Empty + 62, // 25: management.ManagementService.Omniconfig:input_type -> google.protobuf.Empty 10, // 26: management.ManagementService.MachineLogs:input_type -> management.MachineLogsRequest 11, // 27: management.ManagementService.ValidateConfig:input_type -> management.ValidateConfigRequest - 31, // 28: management.ManagementService.ValidateJSONSchema:input_type -> management.ValidateJsonSchemaRequest + 32, // 28: management.ManagementService.ValidateJSONSchema:input_type -> management.ValidateJsonSchemaRequest 13, // 29: management.ManagementService.CreateServiceAccount:input_type -> management.CreateServiceAccountRequest 15, // 30: management.ManagementService.RenewServiceAccount:input_type -> management.RenewServiceAccountRequest - 61, // 31: management.ManagementService.ListServiceAccounts:input_type -> google.protobuf.Empty + 62, // 31: management.ManagementService.ListServiceAccounts:input_type -> google.protobuf.Empty 17, // 32: management.ManagementService.DestroyServiceAccount:input_type -> management.DestroyServiceAccountRequest 20, // 33: management.ManagementService.KubernetesUpgradePreChecks:input_type -> management.KubernetesUpgradePreChecksRequest 23, // 34: management.ManagementService.KubernetesSyncManifests:input_type -> management.KubernetesSyncManifestRequest 25, // 35: management.ManagementService.CreateSchematic:input_type -> management.CreateSchematicRequest - 27, // 36: management.ManagementService.GetSupportBundle:input_type -> management.GetSupportBundleRequest - 29, // 37: management.ManagementService.ReadAuditLog:input_type -> management.ReadAuditLogRequest - 33, // 38: management.ManagementService.MaintenanceUpgrade:input_type -> management.MaintenanceUpgradeRequest - 35, // 39: management.ManagementService.GetMachineJoinConfig:input_type -> management.GetMachineJoinConfigRequest - 38, // 40: management.ManagementService.CreateJoinToken:input_type -> management.CreateJoinTokenRequest - 40, // 41: management.ManagementService.ResetNodeUniqueToken:input_type -> management.ResetNodeUniqueTokenRequest - 42, // 42: management.ManagementService.CreateUser:input_type -> management.CreateUserRequest - 61, // 43: management.ManagementService.ListUsers:input_type -> google.protobuf.Empty - 44, // 44: management.ManagementService.UpdateUser:input_type -> management.UpdateUserRequest - 45, // 45: management.ManagementService.DestroyUser:input_type -> management.DestroyUserRequest - 46, // 46: management.ManagementService.MachinePowerOff:input_type -> management.MachinePowerOffRequest - 48, // 47: management.ManagementService.MachinePowerOn:input_type -> management.MachinePowerOnRequest - 7, // 48: management.ManagementService.Kubeconfig:output_type -> management.KubeconfigResponse - 8, // 49: management.ManagementService.Talosconfig:output_type -> management.TalosconfigResponse - 9, // 50: management.ManagementService.Omniconfig:output_type -> management.OmniconfigResponse - 62, // 51: management.ManagementService.MachineLogs:output_type -> common.Data - 61, // 52: management.ManagementService.ValidateConfig:output_type -> google.protobuf.Empty - 32, // 53: management.ManagementService.ValidateJSONSchema:output_type -> management.ValidateJsonSchemaResponse - 14, // 54: management.ManagementService.CreateServiceAccount:output_type -> management.CreateServiceAccountResponse - 16, // 55: management.ManagementService.RenewServiceAccount:output_type -> management.RenewServiceAccountResponse - 18, // 56: management.ManagementService.ListServiceAccounts:output_type -> management.ListServiceAccountsResponse - 61, // 57: management.ManagementService.DestroyServiceAccount:output_type -> google.protobuf.Empty - 21, // 58: management.ManagementService.KubernetesUpgradePreChecks:output_type -> management.KubernetesUpgradePreChecksResponse - 24, // 59: management.ManagementService.KubernetesSyncManifests:output_type -> management.KubernetesSyncManifestResponse - 26, // 60: management.ManagementService.CreateSchematic:output_type -> management.CreateSchematicResponse - 28, // 61: management.ManagementService.GetSupportBundle:output_type -> management.GetSupportBundleResponse - 30, // 62: management.ManagementService.ReadAuditLog:output_type -> management.ReadAuditLogResponse - 34, // 63: management.ManagementService.MaintenanceUpgrade:output_type -> management.MaintenanceUpgradeResponse - 36, // 64: management.ManagementService.GetMachineJoinConfig:output_type -> management.GetMachineJoinConfigResponse - 39, // 65: management.ManagementService.CreateJoinToken:output_type -> management.CreateJoinTokenResponse - 41, // 66: management.ManagementService.ResetNodeUniqueToken:output_type -> management.ResetNodeUniqueTokenResponse - 43, // 67: management.ManagementService.CreateUser:output_type -> management.CreateUserResponse - 50, // 68: management.ManagementService.ListUsers:output_type -> management.ListUsersResponse - 61, // 69: management.ManagementService.UpdateUser:output_type -> google.protobuf.Empty - 61, // 70: management.ManagementService.DestroyUser:output_type -> google.protobuf.Empty - 47, // 71: management.ManagementService.MachinePowerOff:output_type -> management.MachinePowerOffResponse - 49, // 72: management.ManagementService.MachinePowerOn:output_type -> management.MachinePowerOnResponse - 48, // [48:73] is the sub-list for method output_type - 23, // [23:48] is the sub-list for method input_type + 26, // 36: management.ManagementService.CreateSchematicFromRaw:input_type -> management.CreateSchematicFromRawRequest + 28, // 37: management.ManagementService.GetSupportBundle:input_type -> management.GetSupportBundleRequest + 30, // 38: management.ManagementService.ReadAuditLog:input_type -> management.ReadAuditLogRequest + 34, // 39: management.ManagementService.MaintenanceUpgrade:input_type -> management.MaintenanceUpgradeRequest + 36, // 40: management.ManagementService.GetMachineJoinConfig:input_type -> management.GetMachineJoinConfigRequest + 39, // 41: management.ManagementService.CreateJoinToken:input_type -> management.CreateJoinTokenRequest + 41, // 42: management.ManagementService.ResetNodeUniqueToken:input_type -> management.ResetNodeUniqueTokenRequest + 43, // 43: management.ManagementService.CreateUser:input_type -> management.CreateUserRequest + 62, // 44: management.ManagementService.ListUsers:input_type -> google.protobuf.Empty + 45, // 45: management.ManagementService.UpdateUser:input_type -> management.UpdateUserRequest + 46, // 46: management.ManagementService.DestroyUser:input_type -> management.DestroyUserRequest + 47, // 47: management.ManagementService.MachinePowerOff:input_type -> management.MachinePowerOffRequest + 49, // 48: management.ManagementService.MachinePowerOn:input_type -> management.MachinePowerOnRequest + 7, // 49: management.ManagementService.Kubeconfig:output_type -> management.KubeconfigResponse + 8, // 50: management.ManagementService.Talosconfig:output_type -> management.TalosconfigResponse + 9, // 51: management.ManagementService.Omniconfig:output_type -> management.OmniconfigResponse + 63, // 52: management.ManagementService.MachineLogs:output_type -> common.Data + 62, // 53: management.ManagementService.ValidateConfig:output_type -> google.protobuf.Empty + 33, // 54: management.ManagementService.ValidateJSONSchema:output_type -> management.ValidateJsonSchemaResponse + 14, // 55: management.ManagementService.CreateServiceAccount:output_type -> management.CreateServiceAccountResponse + 16, // 56: management.ManagementService.RenewServiceAccount:output_type -> management.RenewServiceAccountResponse + 18, // 57: management.ManagementService.ListServiceAccounts:output_type -> management.ListServiceAccountsResponse + 62, // 58: management.ManagementService.DestroyServiceAccount:output_type -> google.protobuf.Empty + 21, // 59: management.ManagementService.KubernetesUpgradePreChecks:output_type -> management.KubernetesUpgradePreChecksResponse + 24, // 60: management.ManagementService.KubernetesSyncManifests:output_type -> management.KubernetesSyncManifestResponse + 27, // 61: management.ManagementService.CreateSchematic:output_type -> management.CreateSchematicResponse + 27, // 62: management.ManagementService.CreateSchematicFromRaw:output_type -> management.CreateSchematicResponse + 29, // 63: management.ManagementService.GetSupportBundle:output_type -> management.GetSupportBundleResponse + 31, // 64: management.ManagementService.ReadAuditLog:output_type -> management.ReadAuditLogResponse + 35, // 65: management.ManagementService.MaintenanceUpgrade:output_type -> management.MaintenanceUpgradeResponse + 37, // 66: management.ManagementService.GetMachineJoinConfig:output_type -> management.GetMachineJoinConfigResponse + 40, // 67: management.ManagementService.CreateJoinToken:output_type -> management.CreateJoinTokenResponse + 42, // 68: management.ManagementService.ResetNodeUniqueToken:output_type -> management.ResetNodeUniqueTokenResponse + 44, // 69: management.ManagementService.CreateUser:output_type -> management.CreateUserResponse + 51, // 70: management.ManagementService.ListUsers:output_type -> management.ListUsersResponse + 62, // 71: management.ManagementService.UpdateUser:output_type -> google.protobuf.Empty + 62, // 72: management.ManagementService.DestroyUser:output_type -> google.protobuf.Empty + 48, // 73: management.ManagementService.MachinePowerOff:output_type -> management.MachinePowerOffResponse + 50, // 74: management.ManagementService.MachinePowerOn:output_type -> management.MachinePowerOnResponse + 49, // [49:75] is the sub-list for method output_type + 23, // [23:49] is the sub-list for method input_type 23, // [23:23] is the sub-list for extension type_name 23, // [23:23] is the sub-list for extension extendee 0, // [0:23] is the sub-list for field type_name @@ -3614,7 +3664,7 @@ func file_omni_management_management_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_omni_management_management_proto_rawDesc), len(file_omni_management_management_proto_rawDesc)), NumEnums: 7, - NumMessages: 52, + NumMessages: 53, NumExtensions: 0, NumServices: 1, }, diff --git a/client/api/omni/management/management.pb.gw.go b/client/api/omni/management/management.pb.gw.go index 1c389af8..75e29416 100644 --- a/client/api/omni/management/management.pb.gw.go +++ b/client/api/omni/management/management.pb.gw.go @@ -379,6 +379,33 @@ func local_request_ManagementService_CreateSchematic_0(ctx context.Context, mars return msg, metadata, err } +func request_ManagementService_CreateSchematicFromRaw_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq CreateSchematicFromRawRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + msg, err := client.CreateSchematicFromRaw(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_ManagementService_CreateSchematicFromRaw_0(ctx context.Context, marshaler runtime.Marshaler, server ManagementServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq CreateSchematicFromRawRequest + metadata runtime.ServerMetadata + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.CreateSchematicFromRaw(ctx, &protoReq) + return msg, metadata, err +} + func request_ManagementService_GetSupportBundle_0(ctx context.Context, marshaler runtime.Marshaler, client ManagementServiceClient, req *http.Request, pathParams map[string]string) (ManagementService_GetSupportBundleClient, runtime.ServerMetadata, error) { var ( protoReq GetSupportBundleRequest @@ -935,6 +962,26 @@ func RegisterManagementServiceHandlerServer(ctx context.Context, mux *runtime.Se } forward_ManagementService_CreateSchematic_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_ManagementService_CreateSchematicFromRaw_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, "/management.ManagementService/CreateSchematicFromRaw", runtime.WithHTTPPathPattern("/management.ManagementService/CreateSchematicFromRaw")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_ManagementService_CreateSchematicFromRaw_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_ManagementService_CreateSchematicFromRaw_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPost, pattern_ManagementService_GetSupportBundle_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") @@ -1410,6 +1457,23 @@ func RegisterManagementServiceHandlerClient(ctx context.Context, mux *runtime.Se } forward_ManagementService_CreateSchematic_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_ManagementService_CreateSchematicFromRaw_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, "/management.ManagementService/CreateSchematicFromRaw", runtime.WithHTTPPathPattern("/management.ManagementService/CreateSchematicFromRaw")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_ManagementService_CreateSchematicFromRaw_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_ManagementService_CreateSchematicFromRaw_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPost, pattern_ManagementService_GetSupportBundle_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1631,6 +1695,7 @@ var ( pattern_ManagementService_KubernetesUpgradePreChecks_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"management.ManagementService", "KubernetesUpgradePreChecks"}, "")) pattern_ManagementService_KubernetesSyncManifests_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"management.ManagementService", "KubernetesSyncManifests"}, "")) pattern_ManagementService_CreateSchematic_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"management.ManagementService", "CreateSchematic"}, "")) + pattern_ManagementService_CreateSchematicFromRaw_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"management.ManagementService", "CreateSchematicFromRaw"}, "")) pattern_ManagementService_GetSupportBundle_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"management.ManagementService", "GetSupportBundle"}, "")) pattern_ManagementService_ReadAuditLog_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"management.ManagementService", "ReadAuditLog"}, "")) pattern_ManagementService_MaintenanceUpgrade_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"management.ManagementService", "MaintenanceUpgrade"}, "")) @@ -1659,6 +1724,7 @@ var ( forward_ManagementService_KubernetesUpgradePreChecks_0 = runtime.ForwardResponseMessage forward_ManagementService_KubernetesSyncManifests_0 = runtime.ForwardResponseStream forward_ManagementService_CreateSchematic_0 = runtime.ForwardResponseMessage + forward_ManagementService_CreateSchematicFromRaw_0 = runtime.ForwardResponseMessage forward_ManagementService_GetSupportBundle_0 = runtime.ForwardResponseStream forward_ManagementService_ReadAuditLog_0 = runtime.ForwardResponseStream forward_ManagementService_MaintenanceUpgrade_0 = runtime.ForwardResponseMessage diff --git a/client/api/omni/management/management.proto b/client/api/omni/management/management.proto index 8c16651b..e9fb5ee1 100644 --- a/client/api/omni/management/management.proto +++ b/client/api/omni/management/management.proto @@ -175,6 +175,10 @@ message CreateSchematicRequest { SchematicBootloader bootloader = 10; } +message CreateSchematicFromRawRequest { + bytes raw_schematic = 1; +} + message CreateSchematicResponse { string schematic_id = 1; string pxe_url = 2; @@ -356,6 +360,7 @@ service ManagementService { rpc KubernetesUpgradePreChecks(KubernetesUpgradePreChecksRequest) returns (KubernetesUpgradePreChecksResponse); rpc KubernetesSyncManifests(KubernetesSyncManifestRequest) returns (stream KubernetesSyncManifestResponse); rpc CreateSchematic(CreateSchematicRequest) returns (CreateSchematicResponse); + rpc CreateSchematicFromRaw(CreateSchematicFromRawRequest) returns (CreateSchematicResponse); rpc GetSupportBundle(GetSupportBundleRequest) returns (stream GetSupportBundleResponse); rpc ReadAuditLog(ReadAuditLogRequest) returns (stream ReadAuditLogResponse); rpc MaintenanceUpgrade(MaintenanceUpgradeRequest) returns (MaintenanceUpgradeResponse); diff --git a/client/api/omni/management/management_grpc.pb.go b/client/api/omni/management/management_grpc.pb.go index 38f65608..f153ccd6 100644 --- a/client/api/omni/management/management_grpc.pb.go +++ b/client/api/omni/management/management_grpc.pb.go @@ -35,6 +35,7 @@ const ( ManagementService_KubernetesUpgradePreChecks_FullMethodName = "/management.ManagementService/KubernetesUpgradePreChecks" ManagementService_KubernetesSyncManifests_FullMethodName = "/management.ManagementService/KubernetesSyncManifests" ManagementService_CreateSchematic_FullMethodName = "/management.ManagementService/CreateSchematic" + ManagementService_CreateSchematicFromRaw_FullMethodName = "/management.ManagementService/CreateSchematicFromRaw" ManagementService_GetSupportBundle_FullMethodName = "/management.ManagementService/GetSupportBundle" ManagementService_ReadAuditLog_FullMethodName = "/management.ManagementService/ReadAuditLog" ManagementService_MaintenanceUpgrade_FullMethodName = "/management.ManagementService/MaintenanceUpgrade" @@ -66,6 +67,7 @@ type ManagementServiceClient interface { KubernetesUpgradePreChecks(ctx context.Context, in *KubernetesUpgradePreChecksRequest, opts ...grpc.CallOption) (*KubernetesUpgradePreChecksResponse, error) KubernetesSyncManifests(ctx context.Context, in *KubernetesSyncManifestRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[KubernetesSyncManifestResponse], error) CreateSchematic(ctx context.Context, in *CreateSchematicRequest, opts ...grpc.CallOption) (*CreateSchematicResponse, error) + CreateSchematicFromRaw(ctx context.Context, in *CreateSchematicFromRawRequest, opts ...grpc.CallOption) (*CreateSchematicResponse, error) GetSupportBundle(ctx context.Context, in *GetSupportBundleRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[GetSupportBundleResponse], error) ReadAuditLog(ctx context.Context, in *ReadAuditLogRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[ReadAuditLogResponse], error) MaintenanceUpgrade(ctx context.Context, in *MaintenanceUpgradeRequest, opts ...grpc.CallOption) (*MaintenanceUpgradeResponse, error) @@ -236,6 +238,16 @@ func (c *managementServiceClient) CreateSchematic(ctx context.Context, in *Creat return out, nil } +func (c *managementServiceClient) CreateSchematicFromRaw(ctx context.Context, in *CreateSchematicFromRawRequest, opts ...grpc.CallOption) (*CreateSchematicResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(CreateSchematicResponse) + err := c.cc.Invoke(ctx, ManagementService_CreateSchematicFromRaw_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *managementServiceClient) GetSupportBundle(ctx context.Context, in *GetSupportBundleRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[GetSupportBundleResponse], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &ManagementService_ServiceDesc.Streams[2], ManagementService_GetSupportBundle_FullMethodName, cOpts...) @@ -391,6 +403,7 @@ type ManagementServiceServer interface { KubernetesUpgradePreChecks(context.Context, *KubernetesUpgradePreChecksRequest) (*KubernetesUpgradePreChecksResponse, error) KubernetesSyncManifests(*KubernetesSyncManifestRequest, grpc.ServerStreamingServer[KubernetesSyncManifestResponse]) error CreateSchematic(context.Context, *CreateSchematicRequest) (*CreateSchematicResponse, error) + CreateSchematicFromRaw(context.Context, *CreateSchematicFromRawRequest) (*CreateSchematicResponse, error) GetSupportBundle(*GetSupportBundleRequest, grpc.ServerStreamingServer[GetSupportBundleResponse]) error ReadAuditLog(*ReadAuditLogRequest, grpc.ServerStreamingServer[ReadAuditLogResponse]) error MaintenanceUpgrade(context.Context, *MaintenanceUpgradeRequest) (*MaintenanceUpgradeResponse, error) @@ -452,6 +465,9 @@ func (UnimplementedManagementServiceServer) KubernetesSyncManifests(*KubernetesS func (UnimplementedManagementServiceServer) CreateSchematic(context.Context, *CreateSchematicRequest) (*CreateSchematicResponse, error) { return nil, status.Error(codes.Unimplemented, "method CreateSchematic not implemented") } +func (UnimplementedManagementServiceServer) CreateSchematicFromRaw(context.Context, *CreateSchematicFromRawRequest) (*CreateSchematicResponse, error) { + return nil, status.Error(codes.Unimplemented, "method CreateSchematicFromRaw not implemented") +} func (UnimplementedManagementServiceServer) GetSupportBundle(*GetSupportBundleRequest, grpc.ServerStreamingServer[GetSupportBundleResponse]) error { return status.Error(codes.Unimplemented, "method GetSupportBundle not implemented") } @@ -729,6 +745,24 @@ func _ManagementService_CreateSchematic_Handler(srv interface{}, ctx context.Con return interceptor(ctx, in, info, handler) } +func _ManagementService_CreateSchematicFromRaw_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSchematicFromRawRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ManagementServiceServer).CreateSchematicFromRaw(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ManagementService_CreateSchematicFromRaw_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ManagementServiceServer).CreateSchematicFromRaw(ctx, req.(*CreateSchematicFromRawRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ManagementService_GetSupportBundle_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(GetSupportBundleRequest) if err := stream.RecvMsg(m); err != nil { @@ -982,6 +1016,10 @@ var ManagementService_ServiceDesc = grpc.ServiceDesc{ MethodName: "CreateSchematic", Handler: _ManagementService_CreateSchematic_Handler, }, + { + MethodName: "CreateSchematicFromRaw", + Handler: _ManagementService_CreateSchematicFromRaw_Handler, + }, { MethodName: "MaintenanceUpgrade", Handler: _ManagementService_MaintenanceUpgrade_Handler, diff --git a/client/api/omni/management/management_vtproto.pb.go b/client/api/omni/management/management_vtproto.pb.go index 0afcfc8c..1465d1cc 100644 --- a/client/api/omni/management/management_vtproto.pb.go +++ b/client/api/omni/management/management_vtproto.pb.go @@ -485,6 +485,27 @@ func (m *CreateSchematicRequest) CloneMessageVT() proto.Message { return m.CloneVT() } +func (m *CreateSchematicFromRawRequest) CloneVT() *CreateSchematicFromRawRequest { + if m == nil { + return (*CreateSchematicFromRawRequest)(nil) + } + r := new(CreateSchematicFromRawRequest) + if rhs := m.RawSchematic; rhs != nil { + tmpBytes := make([]byte, len(rhs)) + copy(tmpBytes, rhs) + r.RawSchematic = tmpBytes + } + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *CreateSchematicFromRawRequest) CloneMessageVT() proto.Message { + return m.CloneVT() +} + func (m *CreateSchematicResponse) CloneVT() *CreateSchematicResponse { if m == nil { return (*CreateSchematicResponse)(nil) @@ -1620,6 +1641,25 @@ func (this *CreateSchematicRequest) EqualMessageVT(thatMsg proto.Message) bool { } return this.EqualVT(that) } +func (this *CreateSchematicFromRawRequest) EqualVT(that *CreateSchematicFromRawRequest) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + if string(this.RawSchematic) != string(that.RawSchematic) { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *CreateSchematicFromRawRequest) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*CreateSchematicFromRawRequest) + if !ok { + return false + } + return this.EqualVT(that) +} func (this *CreateSchematicResponse) EqualVT(that *CreateSchematicResponse) bool { if this == that { return true @@ -3533,6 +3573,46 @@ func (m *CreateSchematicRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error return len(dAtA) - i, nil } +func (m *CreateSchematicFromRawRequest) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CreateSchematicFromRawRequest) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *CreateSchematicFromRawRequest) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + if len(m.RawSchematic) > 0 { + i -= len(m.RawSchematic) + copy(dAtA[i:], m.RawSchematic) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.RawSchematic))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *CreateSchematicResponse) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -5341,6 +5421,20 @@ func (m *CreateSchematicRequest) SizeVT() (n int) { return n } +func (m *CreateSchematicFromRawRequest) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.RawSchematic) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + n += len(m.unknownFields) + return n +} + func (m *CreateSchematicResponse) SizeVT() (n int) { if m == nil { return 0 @@ -8884,6 +8978,91 @@ func (m *CreateSchematicRequest) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *CreateSchematicFromRawRequest) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CreateSchematicFromRawRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CreateSchematicFromRawRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RawSchematic", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RawSchematic = append(m.RawSchematic[:0], dAtA[iNdEx:postIndex]...) + if m.RawSchematic == nil { + m.RawSchematic = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *CreateSchematicResponse) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/client/pkg/client/management/management.go b/client/pkg/client/management/management.go index 03861940..7d388072 100644 --- a/client/pkg/client/management/management.go +++ b/client/pkg/client/management/management.go @@ -154,6 +154,15 @@ func (client *Client) CreateSchematic(ctx context.Context, req *management.Creat return schematic, nil } +// CreateSchematicFromRaw creates a schematic from the raw schematic string using the image factory. +func (client *Client) CreateSchematicFromRaw(ctx context.Context, schematic []byte) (*management.CreateSchematicResponse, error) { + req := &management.CreateSchematicFromRawRequest{ + RawSchematic: schematic, + } + + return client.conn.CreateSchematicFromRaw(ctx, req) +} + // CreateServiceAccount creates a service account and returns the public key ID. func (client *Client) CreateServiceAccount(ctx context.Context, name, armoredPGPPublicKey, role string, useUserRole bool) (string, error) { resp, err := client.conn.CreateServiceAccount(ctx, &management.CreateServiceAccountRequest{ diff --git a/client/pkg/clusterimport/client.go b/client/pkg/clusterimport/client.go index ba8ac5a8..a5c40a68 100644 --- a/client/pkg/clusterimport/client.go +++ b/client/pkg/clusterimport/client.go @@ -256,7 +256,7 @@ func BuildTalosClient(ctx context.Context, config, context, sideroV1KeysDir stri } // BuildImageFactoryClient builds an Image Factory client using the Image Factory base url from Omni configuration. -func BuildImageFactoryClient(ctx context.Context, omniState state.State) (*imagefactory.Client, error) { +func BuildImageFactoryClient(ctx context.Context, omniState state.State) (*imagefactory.DirectClient, error) { featuresConfig, err := safe.ReaderGetByID[*omni.FeaturesConfig](ctx, omniState, omni.FeaturesConfigID) if err != nil { return nil, fmt.Errorf("error reading features config %q: %w", omniState, err) @@ -266,7 +266,7 @@ func BuildImageFactoryClient(ctx context.Context, omniState state.State) (*image return nil, fmt.Errorf("image factory base URL is empty") } - c, err := imagefactory.NewClient(imagefactory.ClientOptions{FactoryEndpoint: featuresConfig.TypedSpec().Value.ImageFactoryBaseUrl}) + c, err := imagefactory.NewDirectClient(imagefactory.ClientOptions{FactoryEndpoint: featuresConfig.TypedSpec().Value.ImageFactoryBaseUrl}) if err != nil { return nil, fmt.Errorf("failed to set up image factory client: %w", err) } diff --git a/client/pkg/infra/imagefactory/client.go b/client/pkg/infra/imagefactory/client.go index 45288bc3..b2f58e67 100644 --- a/client/pkg/infra/imagefactory/client.go +++ b/client/pkg/infra/imagefactory/client.go @@ -12,11 +12,12 @@ import ( "github.com/siderolabs/image-factory/pkg/client" "github.com/siderolabs/image-factory/pkg/schematic" + omniclient "github.com/siderolabs/omni/client/pkg/client" "github.com/siderolabs/omni/client/pkg/constants" ) -// Client goes directly to the image factory using the provided endpoint (or default one). -type Client struct { +// DirectClient goes directly to the image factory using the provided endpoint (or default one). +type DirectClient struct { client *client.Client } @@ -26,7 +27,7 @@ type ClientOptions struct { } // EnsureSchematic creates the schematic in the image factory. -func (se Client) EnsureSchematic(ctx context.Context, schematic schematic.Schematic) (string, error) { +func (se DirectClient) EnsureSchematic(ctx context.Context, schematic schematic.Schematic) (string, error) { schematicID, err := schematic.ID() if err != nil { return "", fmt.Errorf("failed to generate schematic ID: %w", err) @@ -42,8 +43,8 @@ func (se Client) EnsureSchematic(ctx context.Context, schematic schematic.Schema return schematicID, nil } -// NewClient creates new Omni based image factory client. -func NewClient(options ClientOptions) (*Client, error) { +// NewDirectClient creates new Omni based image factory client. +func NewDirectClient(options ClientOptions) (*DirectClient, error) { if options.FactoryEndpoint == "" { options.FactoryEndpoint = constants.ImageFactoryBaseURL } @@ -53,7 +54,34 @@ func NewClient(options ClientOptions) (*Client, error) { return nil, err } - return &Client{ + return &DirectClient{ client: client, }, nil } + +// ProxiedClient is the image factory client which proxies the requests through Omni API. +type ProxiedClient struct { + client *omniclient.Client +} + +// NewProxiedClient creates new proxied image factory client. +func NewProxiedClient(client *omniclient.Client) (*ProxiedClient, error) { + return &ProxiedClient{ + client: client, + }, nil +} + +// EnsureSchematic creates the schematic in the image factory through Omni API. +func (pc *ProxiedClient) EnsureSchematic(ctx context.Context, schematic schematic.Schematic) (string, error) { + data, err := schematic.Marshal() + if err != nil { + return "", fmt.Errorf("failed to marshal schematic: %w", err) + } + + resp, err := pc.client.Management().CreateSchematicFromRaw(ctx, data) + if err != nil { + return "", fmt.Errorf("failed to create schematic through Omni API: %w", err) + } + + return resp.GetSchematicId(), nil +} diff --git a/client/pkg/infra/infra.go b/client/pkg/infra/infra.go index 9ce7c977..bd0685f3 100644 --- a/client/pkg/infra/infra.go +++ b/client/pkg/infra/infra.go @@ -27,7 +27,6 @@ import ( "github.com/siderolabs/omni/client/pkg/infra/internal/resources" "github.com/siderolabs/omni/client/pkg/infra/provision" "github.com/siderolabs/omni/client/pkg/omni/resources/infra" - omnires "github.com/siderolabs/omni/client/pkg/omni/resources/omni" ) // ProviderConfig defines the schema, human-readable provider name and description. @@ -105,36 +104,36 @@ func (provider *Provider[T]) Run(ctx context.Context, logger *zap.Logger, opts . omni.WithProviderID(provider.id), )) + var ( + c *client.Client + err error + ) + switch { case options.state != nil: st = options.state case options.omniEndpoint != "": - client, err := client.New(options.omniEndpoint, options.clientOptions...) + c, err = client.New(options.omniEndpoint, options.clientOptions...) if err != nil { return err } - state, err := NewState(client) + var state *State + + state, err = NewState(c) if err != nil { return err } - defer client.Close() //nolint:errcheck + defer c.Close() //nolint:errcheck st = state.State() default: return fmt.Errorf("invalid infra provider configuration: either WithOmniEndpoint or WithState option should be used") } - features, err := safe.ReaderGetByID[*omnires.FeaturesConfig](ctx, st, omnires.FeaturesConfigID) - if err != nil { - return err - } - if options.imageFactory == nil { - options.imageFactory, err = imagefactory.NewClient(imagefactory.ClientOptions{ - FactoryEndpoint: features.TypedSpec().Value.ImageFactoryBaseUrl, - }) + options.imageFactory, err = imagefactory.NewProxiedClient(c) if err != nil { return err } diff --git a/frontend/src/api/omni/management/management.pb.ts b/frontend/src/api/omni/management/management.pb.ts index 7f137d04..7bf0c98a 100644 --- a/frontend/src/api/omni/management/management.pb.ts +++ b/frontend/src/api/omni/management/management.pb.ts @@ -191,6 +191,10 @@ export type CreateSchematicRequest = { bootloader?: SchematicBootloader } +export type CreateSchematicFromRawRequest = { + raw_schematic?: Uint8Array +} + export type CreateSchematicResponse = { schematic_id?: string pxe_url?: string @@ -370,6 +374,9 @@ export class ManagementService { static CreateSchematic(req: CreateSchematicRequest, ...options: fm.fetchOption[]): Promise { return fm.fetchReq("POST", `/management.ManagementService/CreateSchematic`, req, ...options) } + static CreateSchematicFromRaw(req: CreateSchematicFromRawRequest, ...options: fm.fetchOption[]): Promise { + return fm.fetchReq("POST", `/management.ManagementService/CreateSchematicFromRaw`, req, ...options) + } static GetSupportBundle(req: GetSupportBundleRequest, entityNotifier: fm.NotifyStreamEntityArrival, ...options: fm.fetchOption[]): Promise { return fm.fetchStreamingRequest("POST", `/management.ManagementService/GetSupportBundle`, req, entityNotifier, ...options) } diff --git a/internal/backend/grpc/schematics.go b/internal/backend/grpc/schematics.go index 249a84e3..040c581d 100644 --- a/internal/backend/grpc/schematics.go +++ b/internal/backend/grpc/schematics.go @@ -124,6 +124,30 @@ func (s *managementServer) CreateSchematic(ctx context.Context, request *managem }, nil } +// CreateSchematicFromRaw implements managementServer. +func (s *managementServer) CreateSchematicFromRaw(ctx context.Context, request *management.CreateSchematicFromRawRequest) (*management.CreateSchematicResponse, error) { + if _, err := auth.CheckGRPC(ctx, auth.WithValidSignature(true)); err != nil { + return nil, err + } + + var schematicRequest schematic.Schematic + + if err := yaml.Unmarshal(request.RawSchematic, &schematicRequest); err != nil { + return nil, fmt.Errorf("failed to unmarshal raw schematic: %w", err) + } + + s.logger.Info("ensure schematic from raw", zap.Reflect("schematic", schematicRequest)) + + schematicInfo, err := s.imageFactoryClient.EnsureSchematic(ctx, schematicRequest) + if err != nil { + return nil, fmt.Errorf("failed to ensure schematic: %w", err) + } + + return &management.CreateSchematicResponse{ + SchematicId: schematicInfo.FullID, + }, nil +} + func (s *managementServer) getOverlay(ctx context.Context, req *management.CreateSchematicRequest) (schematic.Overlay, error) { if !quirks.New(req.TalosVersion).SupportsOverlay() { return schematic.Overlay{}, nil