From 9dafb82e5419d96a8ccd80306c255b5f28332a58 Mon Sep 17 00:00:00 2001 From: Patrice Breton Date: Mon, 13 Apr 2026 09:30:37 -0700 Subject: [PATCH 01/10] feat: add iPXE script template and new variant of operating system Signed-off-by: Patrice Breton --- api/pkg/api/handler/instance.go | 47 +- api/pkg/api/handler/instance_test.go | 2 +- api/pkg/api/handler/instancebatch.go | 16 +- api/pkg/api/handler/ipxetemplate.go | 323 + api/pkg/api/handler/ipxetemplate_test.go | 637 + api/pkg/api/handler/operatingsystem.go | 1063 +- .../handler/operatingsystem_ownership_test.go | 760 + api/pkg/api/handler/operatingsystem_test.go | 20 +- api/pkg/api/handler/site.go | 39 + api/pkg/api/handler/util/common/common.go | 8 - api/pkg/api/model/ipxetemplate.go | 83 + api/pkg/api/model/operatingsystem.go | 466 +- api/pkg/api/routes.go | 11 + api/pkg/api/routes_test.go | 1 + db/pkg/db/model/ipxetemplate.go | 389 + db/pkg/db/model/ipxetemplate_test.go | 371 + db/pkg/db/model/operatingsystem.go | 413 +- db/pkg/db/model/operatingsystem_test.go | 1717 +- .../model/operatingsystemsiteassociation.go | 7 + .../20260306120000_ipxe_template.go | 91 + .../20260310100000_os_definition.go | 71 + db/pkg/migrations/20260320100000_os_scope.go | 54 + .../20260321100000_ossa_core_status.go | 53 + openapi/spec.yaml | 535 +- sdk/standard/api_ipxe_template.go | 338 + sdk/standard/api_operating_system.go | 10 +- sdk/standard/client.go | 3 + sdk/standard/model_ipxe_template.go | 459 + sdk/standard/model_ipxe_template_artifact.go | 359 + sdk/standard/model_ipxe_template_parameter.go | 186 + sdk/standard/model_operating_system.go | 172 +- .../model_operating_system_create_request.go | 174 +- .../model_operating_system_update_request.go | 124 +- .../managers/ipxetemplate/access.go | 41 + .../components/managers/ipxetemplate/cron.go | 65 + .../components/managers/ipxetemplate/init.go | 37 + .../managers/ipxetemplate/publisher.go | 54 + .../managers/ipxetemplate/subscriber.go | 26 + site-agent/pkg/components/managers/manager.go | 4 + .../pkg/components/managers/manageraccess.go | 6 + .../managers/managerapi/ipxetemplate_api.go | 33 + .../managers/managerapi/managerapi.go | 1 + .../managers/operatingsystem/cron.go | 49 +- .../managers/operatingsystem/publisher.go | 18 +- .../managers/operatingsystem/subscriber.go | 40 +- .../managers/workflow/orchestrator.go | 3 + .../managertypes/workflow/workflowtypes.go | 2 + site-workflow/pkg/activity/instance_test.go | 16 +- site-workflow/pkg/activity/ipxetemplate.go | 99 + .../pkg/activity/ipxetemplate_test.go | 110 + site-workflow/pkg/activity/operatingsystem.go | 168 + .../pkg/activity/operatingsystem_test.go | 292 + .../pkg/grpc/client/carbide_client.go | 1 - site-workflow/pkg/grpc/client/testing.go | 94 + site-workflow/pkg/workflow/instance_test.go | 28 +- site-workflow/pkg/workflow/ipxetemplate.go | 60 + .../pkg/workflow/ipxetemplate_test.go | 77 + site-workflow/pkg/workflow/operatingsystem.go | 119 + .../workflows/v1/common_carbide.pb.go | 98 +- .../workflows/v1/forge_carbide.pb.go | 13386 +++++++++------- .../workflows/v1/forge_carbide_grpc.pb.go | 1248 +- .../workflows/v1/common_carbide.proto | 8 + .../workflows/v1/forge_carbide.proto | 311 +- .../site-agent/workflows/v1/inventory.proto | 28 + workflow/cmd/workflow/main.go | 24 + .../pkg/activity/ipxetemplate/ipxetemplate.go | 216 + .../ipxetemplate/ipxetemplate_test.go | 370 + .../operatingsystem/operatingsystem.go | 382 + .../operatingsystem/operatingsystem_test.go | 275 +- workflow/pkg/activity/operatingsystem/push.go | 527 + workflow/pkg/util/testing.go | 36 +- workflow/pkg/workflow/ipxetemplate/update.go | 82 + .../pkg/workflow/ipxetemplate/update_test.go | 104 + workflow/pkg/workflow/operatingsystem/sync.go | 94 + .../pkg/workflow/operatingsystem/update.go | 52 +- 75 files changed, 20175 insertions(+), 7511 deletions(-) create mode 100644 api/pkg/api/handler/ipxetemplate.go create mode 100644 api/pkg/api/handler/ipxetemplate_test.go create mode 100644 api/pkg/api/handler/operatingsystem_ownership_test.go create mode 100644 api/pkg/api/model/ipxetemplate.go create mode 100644 db/pkg/db/model/ipxetemplate.go create mode 100644 db/pkg/db/model/ipxetemplate_test.go create mode 100644 db/pkg/migrations/20260306120000_ipxe_template.go create mode 100644 db/pkg/migrations/20260310100000_os_definition.go create mode 100644 db/pkg/migrations/20260320100000_os_scope.go create mode 100644 db/pkg/migrations/20260321100000_ossa_core_status.go create mode 100644 sdk/standard/api_ipxe_template.go create mode 100644 sdk/standard/model_ipxe_template.go create mode 100644 sdk/standard/model_ipxe_template_artifact.go create mode 100644 sdk/standard/model_ipxe_template_parameter.go create mode 100644 site-agent/pkg/components/managers/ipxetemplate/access.go create mode 100644 site-agent/pkg/components/managers/ipxetemplate/cron.go create mode 100644 site-agent/pkg/components/managers/ipxetemplate/init.go create mode 100644 site-agent/pkg/components/managers/ipxetemplate/publisher.go create mode 100644 site-agent/pkg/components/managers/ipxetemplate/subscriber.go create mode 100644 site-agent/pkg/components/managers/managerapi/ipxetemplate_api.go create mode 100644 site-workflow/pkg/activity/ipxetemplate.go create mode 100644 site-workflow/pkg/activity/ipxetemplate_test.go create mode 100644 site-workflow/pkg/workflow/ipxetemplate.go create mode 100644 site-workflow/pkg/workflow/ipxetemplate_test.go create mode 100644 workflow/pkg/activity/ipxetemplate/ipxetemplate.go create mode 100644 workflow/pkg/activity/ipxetemplate/ipxetemplate_test.go create mode 100644 workflow/pkg/activity/operatingsystem/push.go create mode 100644 workflow/pkg/workflow/ipxetemplate/update.go create mode 100644 workflow/pkg/workflow/ipxetemplate/update_test.go create mode 100644 workflow/pkg/workflow/operatingsystem/sync.go diff --git a/api/pkg/api/handler/instance.go b/api/pkg/api/handler/instance.go index 648e13e6c..690591810 100644 --- a/api/pkg/api/handler/instance.go +++ b/api/pkg/api/handler/instance.go @@ -80,7 +80,7 @@ func NewCreateInstanceHandler(dbSession *cdb.Session, tc temporalClient.Client, // apiRequest will be mutated for use in createFromParams. // osConfig will hold the struct/data for use with Temporal/Carbide calls. // Errors should be returned in the form of cutil.NewAPIErrorResponse -func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIInstanceCreateRequest, site *cdbm.Site) (*cwssaws.OperatingSystem, *uuid.UUID, *cutil.APIError) { +func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIInstanceCreateRequest, site *cdbm.Site) (*cwssaws.InstanceOperatingSystemConfig, *uuid.UUID, *cutil.APIError) { ctx := c.Request().Context() @@ -92,10 +92,10 @@ func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Conte return nil, nil, cutil.NewAPIError(http.StatusBadRequest, "Failed to validate OperatingSystem data", err) } - return &cwssaws.OperatingSystem{ + return &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: *apiRequest.AlwaysBootWithCustomIpxe, // Set by the earlier call to ValidateAndSetOperatingSystemData PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, // Set by the earlier call to ValidateAndSetOperatingSystemData - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: *apiRequest.IpxeScript, }, @@ -149,10 +149,8 @@ func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Conte logger.Warn().Str("operatingSystemId", os.ID.String()).Str("siteId", site.ID.String()).Msg("Creation of Instance with Image based Operating System is not supported for Site, ImageBasedOperatingSystem capability is not enabled") return nil, nil, cutil.NewAPIError(http.StatusBadRequest, "Creation of Instance with Image based Operating System is not supported. Site must have ImageBasedOperatingSystem capability enabled.", nil) } - } - // Confirm match between site and OS (only for Image type). - if os.Type == cdbm.OperatingSystemTypeImage { + // Confirm match between site and OS. ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(cih.dbSession) _, ossaCount, err := ossaDAO.GetAll( ctx, @@ -189,11 +187,11 @@ func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Conte // Options below should all have been set by the // earlier call to ValidateAndSetOperatingSystemData - if os.Type == cdbm.OperatingSystemTypeIPXE { - return &cwssaws.OperatingSystem{ + if cdbm.IsIPXEType(os.Type) { + return &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: *apiRequest.AlwaysBootWithCustomIpxe, PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: *apiRequest.IpxeScript, }, @@ -201,9 +199,9 @@ func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Conte UserData: apiRequest.UserData, }, osID, nil } else { - return &cwssaws.OperatingSystem{ + return &cwssaws.InstanceOperatingSystemConfig{ PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, - Variant: &cwssaws.OperatingSystem_OsImageId{ + Variant: &cwssaws.InstanceOperatingSystemConfig_OsImageId{ OsImageId: &cwssaws.UUID{ Value: os.ID.String(), }, @@ -1836,7 +1834,7 @@ func (uih UpdateInstanceHandler) handleReboot(c echo.Context, logger *zerolog.Lo // apiRequest will be mutated for use in UpdateFromParams. // osConfig will hold the struct/data for use with Temporal/Carbide calls. // Errors should be returned in the form of cutil.NewAPIErrorResponse -func (uih UpdateInstanceHandler) buildInstanceUpdateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIInstanceUpdateRequest, instance *cdbm.Instance, site *cdbm.Site) (*cwssaws.OperatingSystem, *uuid.UUID, *cutil.APIError) { +func (uih UpdateInstanceHandler) buildInstanceUpdateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIInstanceUpdateRequest, instance *cdbm.Instance, site *cdbm.Site) (*cwssaws.InstanceOperatingSystemConfig, *uuid.UUID, *cutil.APIError) { var os *cdbm.OperatingSystem var osID *uuid.UUID @@ -1851,10 +1849,10 @@ func (uih UpdateInstanceHandler) buildInstanceUpdateRequestOsConfig(c echo.Conte return nil, nil, cutil.NewAPIError(http.StatusBadRequest, "Failed to validate OperatingSystem data", err) } - return &cwssaws.OperatingSystem{ + return &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: instance.AlwaysBootWithCustomIpxe, PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, // Set by the earlier call to ValidateAndSetOperatingSystemData - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: *apiRequest.IpxeScript, }, @@ -1919,10 +1917,8 @@ func (uih UpdateInstanceHandler) buildInstanceUpdateRequestOsConfig(c echo.Conte logger.Warn().Str("operatingSystemId", os.ID.String()).Str("siteId", site.ID.String()).Msg("Instance update with Image based Operating System is not supported for Site, ImageBasedOperatingSystem capability is not enabled") return nil, nil, cutil.NewAPIError(http.StatusBadRequest, "Update of Instance with Image based Operating System is not supported. Site must have ImageBasedOperatingSystem capability enabled.", nil) } - } - // Confirm match between site and OS (only for Image type). - if os.Type == cdbm.OperatingSystemTypeImage { + // Confirm match between site and OS. ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(uih.dbSession) _, ossaCount, err := ossaDAO.GetAll( ctx, @@ -1992,21 +1988,22 @@ func (uih UpdateInstanceHandler) buildInstanceUpdateRequestOsConfig(c echo.Conte } if os != nil { - if os.Type == cdbm.OperatingSystemTypeIPXE { - return &cwssaws.OperatingSystem{ + switch { + case cdbm.IsIPXEType(os.Type): + return &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: alwaysBootWithCustomIpxe, PhoneHomeEnabled: phoneHomeEnabled, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: *ipxeScript, }, }, UserData: userData, }, osID, nil - } else if os.Type == cdbm.OperatingSystemTypeImage { - return &cwssaws.OperatingSystem{ + case os.Type == cdbm.OperatingSystemTypeImage: + return &cwssaws.InstanceOperatingSystemConfig{ PhoneHomeEnabled: phoneHomeEnabled, - Variant: &cwssaws.OperatingSystem_OsImageId{ + Variant: &cwssaws.InstanceOperatingSystemConfig_OsImageId{ OsImageId: &cwssaws.UUID{ Value: os.ID.String(), }, @@ -2016,10 +2013,10 @@ func (uih UpdateInstanceHandler) buildInstanceUpdateRequestOsConfig(c echo.Conte } } - return &cwssaws.OperatingSystem{ + return &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: alwaysBootWithCustomIpxe, PhoneHomeEnabled: phoneHomeEnabled, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: *ipxeScript, }, diff --git a/api/pkg/api/handler/instance_test.go b/api/pkg/api/handler/instance_test.go index 77f13618b..78696941c 100644 --- a/api/pkg/api/handler/instance_test.go +++ b/api/pkg/api/handler/instance_test.go @@ -328,7 +328,7 @@ func testInstanceBuildOperatingSystem(t *testing.T, dbSession *cdb.Session, name } // If iPXE, the OS should have a script set. - if osType == cdbm.OperatingSystemTypeIPXE { + if cdbm.IsIPXEType(osType) { operatingSystem.IpxeScript = cdb.GetStrPtr(common.DefaultIpxeScript) } diff --git a/api/pkg/api/handler/instancebatch.go b/api/pkg/api/handler/instancebatch.go index 4a1419167..0166e7d54 100644 --- a/api/pkg/api/handler/instancebatch.go +++ b/api/pkg/api/handler/instancebatch.go @@ -80,7 +80,7 @@ func NewBatchCreateInstanceHandler(dbSession *cdb.Session, tc temporalClient.Cli // buildBatchInstanceCreateRequestOsConfig validates and retrieves OS configuration for batch instance creation. // This mirrors the behavior of CreateInstanceHandler.buildInstanceCreateRequestOsConfig. // Returns: osConfig, osID, and error (matching single API pattern) -func (bcih BatchCreateInstanceHandler) buildBatchInstanceCreateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIBatchInstanceCreateRequest, site *cdbm.Site) (*cwssaws.OperatingSystem, *uuid.UUID, *cutil.APIError) { +func (bcih BatchCreateInstanceHandler) buildBatchInstanceCreateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIBatchInstanceCreateRequest, site *cdbm.Site) (*cwssaws.InstanceOperatingSystemConfig, *uuid.UUID, *cutil.APIError) { ctx := c.Request().Context() @@ -92,10 +92,10 @@ func (bcih BatchCreateInstanceHandler) buildBatchInstanceCreateRequestOsConfig(c return nil, nil, cutil.NewAPIError(http.StatusBadRequest, "Failed to validate OperatingSystem data", err) } - return &cwssaws.OperatingSystem{ + return &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: *apiRequest.AlwaysBootWithCustomIpxe, // Set by the earlier call to ValidateAndSetOperatingSystemData PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, // Set by the earlier call to ValidateAndSetOperatingSystemData - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: *apiRequest.IpxeScript, }, @@ -190,11 +190,11 @@ func (bcih BatchCreateInstanceHandler) buildBatchInstanceCreateRequestOsConfig(c // Options below should all have been set by the // earlier call to ValidateAndSetOperatingSystemData - if os.Type == cdbm.OperatingSystemTypeIPXE { - return &cwssaws.OperatingSystem{ + if cdbm.IsIPXEType(os.Type) { + return &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: *apiRequest.AlwaysBootWithCustomIpxe, PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: *apiRequest.IpxeScript, }, @@ -202,9 +202,9 @@ func (bcih BatchCreateInstanceHandler) buildBatchInstanceCreateRequestOsConfig(c UserData: apiRequest.UserData, }, osID, nil } else { - return &cwssaws.OperatingSystem{ + return &cwssaws.InstanceOperatingSystemConfig{ PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, - Variant: &cwssaws.OperatingSystem_OsImageId{ + Variant: &cwssaws.InstanceOperatingSystemConfig_OsImageId{ OsImageId: &cwssaws.UUID{ Value: os.ID.String(), }, diff --git a/api/pkg/api/handler/ipxetemplate.go b/api/pkg/api/handler/ipxetemplate.go new file mode 100644 index 000000000..ae259e9e3 --- /dev/null +++ b/api/pkg/api/handler/ipxetemplate.go @@ -0,0 +1,323 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package handler + +import ( + "encoding/json" + "errors" + "fmt" + "net/http" + + "github.com/NVIDIA/ncx-infra-controller-rest/api/internal/config" + "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/api/handler/util/common" + "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/api/model" + "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/api/pagination" + cerr "github.com/NVIDIA/ncx-infra-controller-rest/common/pkg/util" + sutil "github.com/NVIDIA/ncx-infra-controller-rest/common/pkg/util" + cdb "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" + cdbm "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" + "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/paginator" + cdbp "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/paginator" + "github.com/google/uuid" + "github.com/labstack/echo/v4" + "go.opentelemetry.io/otel/attribute" + tclient "go.temporal.io/sdk/client" +) + +// ~~~~~ GetAll Handler ~~~~~ // + +// GetAllIpxeTemplateHandler is the API Handler for getting all iPXE templates +type GetAllIpxeTemplateHandler struct { + dbSession *cdb.Session + tc tclient.Client + cfg *config.Config + tracerSpan *sutil.TracerSpan +} + +// NewGetAllIpxeTemplateHandler initializes and returns a new handler for getting all iPXE templates +func NewGetAllIpxeTemplateHandler(dbSession *cdb.Session, tc tclient.Client, cfg *config.Config) GetAllIpxeTemplateHandler { + return GetAllIpxeTemplateHandler{ + dbSession: dbSession, + tc: tc, + cfg: cfg, + tracerSpan: sutil.NewTracerSpan(), + } +} + +// Handle godoc +// @Summary Get all iPXE templates +// @Description Get all iPXE templates propagated from bare-metal-manager-core for a given site. Any Tenant Admin or Provider Admin/Viewer can access templates for sites they are associated with. +// @Tags iPXE Template +// @Accept json +// @Produce json +// @Security ApiKeyAuth +// @Param org path string true "Name of NGC organization" +// @Param siteId query string true "ID of Site" +// @Param scope query string false "Filter by scope ('internal' or 'public')" +// @Param pageNumber query integer false "Page number of results returned" +// @Param pageSize query integer false "Number of results per page" +// @Param orderBy query string false "Order by field" +// @Success 200 {object} []model.APIIpxeTemplate +// @Router /v2/org/{org}/carbide/ipxe-template [get] +func (h GetAllIpxeTemplateHandler) Handle(c echo.Context) error { + org, dbUser, ctx, logger, handlerSpan := common.SetupHandler("GetAll", "IpxeTemplate", c, h.tracerSpan) + if handlerSpan != nil { + defer handlerSpan.End() + } + + if dbUser == nil { + logger.Error().Msg("invalid User object found in request context") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve current user", nil) + } + + // Validate org membership + if _, err := dbUser.OrgData.GetOrgByName(org); err != nil { + logger.Warn().Msg("could not validate org membership for user, access denied") + return cerr.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) + } + + // Validate role: Provider Admins/Viewers or any Tenant Admin + infrastructureProvider, tenant, apiError := common.IsProviderOrTenant(ctx, logger, h.dbSession, org, dbUser, true, false) + if apiError != nil { + return cerr.NewAPIErrorResponse(c, apiError.Code, apiError.Message, apiError.Data) + } + + // siteId is required + siteIDStr := c.QueryParam("siteId") + if siteIDStr == "" { + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Site ID must be specified in query parameter 'siteId'", nil) + } + + site, err := common.GetSiteFromIDString(ctx, nil, siteIDStr, h.dbSession) + if err != nil { + if errors.Is(err, common.ErrInvalidID) { + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Invalid siteId in request data", nil) + } + if errors.Is(err, cdb.ErrDoesNotExist) { + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Site specified in request data does not exist", nil) + } + logger.Error().Err(err).Msg("error retrieving Site from DB") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site specified in request data, DB error", nil) + } + + // Validate site ownership — evaluate both roles independently so a mixed-role + // service account succeeds if either path authorizes the request. + providerAllowed := infrastructureProvider != nil && site.InfrastructureProviderID == infrastructureProvider.ID + + tenantAllowed := false + if !providerAllowed && tenant != nil { + taDAO := cdbm.NewTenantAccountDAO(h.dbSession) + _, taCount, serr := taDAO.GetAll(ctx, nil, cdbm.TenantAccountFilterInput{ + InfrastructureProviderID: &site.InfrastructureProviderID, + TenantIDs: []uuid.UUID{tenant.ID}, + }, cdbp.PageInput{}, []string{}) + if serr != nil { + logger.Error().Err(serr).Msg("error retrieving Tenant Account for Site") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Error retrieving Tenant Account for Site", nil) + } + tenantAllowed = taCount > 0 + } + + if !providerAllowed && !tenantAllowed { + logger.Warn().Msg("neither provider nor tenant authorization succeeded for Site access") + return cerr.NewAPIErrorResponse(c, http.StatusForbidden, "Current org is not authorized to access the Site specified in request data", nil) + } + + filterInput := cdbm.IpxeTemplateFilterInput{ + SiteIDs: []uuid.UUID{site.ID}, + } + + if tenantAllowed && !providerAllowed { + // Tenants may only see PUBLIC templates; ignore any scope query param. + filterInput.Scopes = []string{cdbm.IpxeTemplateScopePublic} + } else if scopeStr := c.QueryParam("scope"); scopeStr != "" { + filterInput.Scopes = []string{scopeStr} + } + + // Validate pagination request + pageRequest := pagination.PageRequest{} + if err = c.Bind(&pageRequest); err != nil { + logger.Warn().Err(err).Msg("error binding pagination request data into API model") + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to parse request pagination data", nil) + } + if err = pageRequest.Validate(cdbm.IpxeTemplateOrderByFields); err != nil { + logger.Warn().Err(err).Msg("error validating pagination request data") + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to validate pagination request data", err) + } + + // Get iPXE templates from DB + templateDAO := cdbm.NewIpxeTemplateDAO(h.dbSession) + templates, total, err := templateDAO.GetAll( + ctx, + nil, + filterInput, + paginator.PageInput{ + Offset: pageRequest.Offset, + Limit: pageRequest.Limit, + OrderBy: pageRequest.OrderBy, + }, + ) + if err != nil { + logger.Error().Err(err).Msg("error retrieving iPXE templates from DB") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve iPXE templates, DB error", nil) + } + + // Build response + apiTemplates := []*model.APIIpxeTemplate{} + for i := range templates { + apiTemplates = append(apiTemplates, model.NewAPIIpxeTemplate(&templates[i])) + } + + // Build pagination response header + pageResponse := pagination.NewPageResponse(*pageRequest.PageNumber, *pageRequest.PageSize, total, pageRequest.OrderByStr) + pageHeader, err := json.Marshal(pageResponse) + if err != nil { + logger.Error().Err(err).Msg("error marshaling pagination response") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to generate pagination response header", nil) + } + c.Response().Header().Set(pagination.ResponseHeaderName, string(pageHeader)) + + logger.Info().Msg("finishing API handler") + return c.JSON(http.StatusOK, apiTemplates) +} + +// ~~~~~ Get Handler ~~~~~ // + +// GetIpxeTemplateHandler is the API Handler for retrieving a single iPXE template +type GetIpxeTemplateHandler struct { + dbSession *cdb.Session + tc tclient.Client + cfg *config.Config + tracerSpan *sutil.TracerSpan +} + +// NewGetIpxeTemplateHandler initializes and returns a new handler to retrieve an iPXE template +func NewGetIpxeTemplateHandler(dbSession *cdb.Session, tc tclient.Client, cfg *config.Config) GetIpxeTemplateHandler { + return GetIpxeTemplateHandler{ + dbSession: dbSession, + tc: tc, + cfg: cfg, + tracerSpan: sutil.NewTracerSpan(), + } +} + +// Handle godoc +// @Summary Retrieve an iPXE template +// @Description Retrieve an iPXE template by its stable core ID for a given site. Any Tenant Admin or Provider Admin/Viewer can access templates for sites they are associated with. +// @Tags iPXE Template +// @Accept json +// @Produce json +// @Security ApiKeyAuth +// @Param org path string true "Name of NGC organization" +// @Param id path string true "Stable template ID (UUID from core)" +// @Param siteId query string true "ID of Site" +// @Success 200 {object} model.APIIpxeTemplate +// @Router /v2/org/{org}/carbide/ipxe-template/{id} [get] +func (h GetIpxeTemplateHandler) Handle(c echo.Context) error { + org, dbUser, ctx, logger, handlerSpan := common.SetupHandler("Get", "IpxeTemplate", c, h.tracerSpan) + if handlerSpan != nil { + defer handlerSpan.End() + } + + if dbUser == nil { + logger.Error().Msg("invalid User object found in request context") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve current user", nil) + } + + // Validate org membership + if _, err := dbUser.OrgData.GetOrgByName(org); err != nil { + logger.Warn().Msg("could not validate org membership for user, access denied") + return cerr.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) + } + + // Validate role: Provider Admins/Viewers or any Tenant Admin + infrastructureProvider, tenant, apiError := common.IsProviderOrTenant(ctx, logger, h.dbSession, org, dbUser, true, false) + if apiError != nil { + return cerr.NewAPIErrorResponse(c, apiError.Code, apiError.Message, apiError.Data) + } + + // Parse template ID from URL (this is the stable core template UUID) + templateIDStr := c.Param("id") + templateID, err := uuid.Parse(templateIDStr) + if err != nil { + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Invalid iPXE template ID: %s", templateIDStr), nil) + } + + logger = logger.With().Str("IpxeTemplate ID", templateIDStr).Logger() + h.tracerSpan.SetAttribute(handlerSpan, attribute.String("ipxe_template_id", templateIDStr), logger) + + // siteId is required to disambiguate the template across sites + siteIDStr := c.QueryParam("siteId") + if siteIDStr == "" { + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Site ID must be specified in query parameter 'siteId'", nil) + } + + site, err := common.GetSiteFromIDString(ctx, nil, siteIDStr, h.dbSession) + if err != nil { + if errors.Is(err, common.ErrInvalidID) { + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Invalid siteId in request data", nil) + } + if errors.Is(err, cdb.ErrDoesNotExist) { + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Site specified in request data does not exist", nil) + } + logger.Error().Err(err).Msg("error retrieving Site from DB") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site specified in request data, DB error", nil) + } + + // Get template from DB by (siteID, templateID) + templateDAO := cdbm.NewIpxeTemplateDAO(h.dbSession) + tmpl, err := templateDAO.GetBySiteAndTemplateID(ctx, nil, site.ID, templateID) + if err != nil { + if errors.Is(err, cdb.ErrDoesNotExist) { + return cerr.NewAPIErrorResponse(c, http.StatusNotFound, fmt.Sprintf("Could not find iPXE template with ID: %s for site: %s", templateIDStr, siteIDStr), nil) + } + logger.Error().Err(err).Msg("error retrieving iPXE template from DB") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve iPXE template, DB error", nil) + } + + // Validate site ownership — evaluate both roles independently so a mixed-role + // service account succeeds if either path authorizes the request. + providerAllowed := infrastructureProvider != nil && site.InfrastructureProviderID == infrastructureProvider.ID + + tenantAllowed := false + if !providerAllowed && tenant != nil { + taDAO := cdbm.NewTenantAccountDAO(h.dbSession) + _, taCount, serr := taDAO.GetAll(ctx, nil, cdbm.TenantAccountFilterInput{ + InfrastructureProviderID: &site.InfrastructureProviderID, + TenantIDs: []uuid.UUID{tenant.ID}, + }, cdbp.PageInput{}, []string{}) + if serr != nil { + logger.Error().Err(serr).Msg("error retrieving Tenant Account for Site") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Error retrieving Tenant Account for Site", nil) + } + tenantAllowed = taCount > 0 + } + + if !providerAllowed && !tenantAllowed { + logger.Warn().Msg("neither provider nor tenant authorization succeeded for Site access") + return cerr.NewAPIErrorResponse(c, http.StatusForbidden, "Current org is not authorized to access the iPXE template's Site", nil) + } + + if tenantAllowed && !providerAllowed && tmpl.Scope == cdbm.IpxeTemplateScopeInternal { + logger.Warn().Msg("tenant attempted to access an internal iPXE template") + return cerr.NewAPIErrorResponse(c, http.StatusForbidden, "Current org is not authorized to access this iPXE template", nil) + } + + logger.Info().Msg("finishing API handler") + return c.JSON(http.StatusOK, model.NewAPIIpxeTemplate(tmpl)) +} diff --git a/api/pkg/api/handler/ipxetemplate_test.go b/api/pkg/api/handler/ipxetemplate_test.go new file mode 100644 index 000000000..32a7ca819 --- /dev/null +++ b/api/pkg/api/handler/ipxetemplate_test.go @@ -0,0 +1,637 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package handler + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "testing" + + "github.com/NVIDIA/ncx-infra-controller-rest/api/internal/config" + "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/api/model" + cdb "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" + cdbm "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" + cdbu "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/util" + "github.com/google/uuid" + "github.com/labstack/echo/v4" + "github.com/stretchr/testify/assert" + "github.com/uptrace/bun/extra/bundebug" +) + +func testIpxeTemplateInitDB(t *testing.T) *cdb.Session { + dbSession := cdbu.GetTestDBSession(t, false) + dbSession.DB.AddQueryHook(bundebug.NewQueryHook( + bundebug.WithEnabled(false), + bundebug.FromEnv("BUNDEBUG"), + )) + return dbSession +} + +func testIpxeTemplateHandlerSetupSchema(t *testing.T, dbSession *cdb.Session) { + ctx := context.Background() + + assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.TenantAccount)(nil))) + assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.IpxeTemplate)(nil))) + assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.Tenant)(nil))) + assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.Site)(nil))) + assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.InfrastructureProvider)(nil))) +} + +type ipxeTemplateTestFixture struct { + ip *cdbm.InfrastructureProvider + site *cdbm.Site + tmpl1 *cdbm.IpxeTemplate + tmpl2 *cdbm.IpxeTemplate +} + +func testIpxeTemplateSetupTestData(t *testing.T, dbSession *cdb.Session, org string) *ipxeTemplateTestFixture { + ctx := context.Background() + + ip := &cdbm.InfrastructureProvider{ + ID: uuid.New(), + Name: "test-provider", + Org: org, + } + _, err := dbSession.DB.NewInsert().Model(ip).Exec(ctx) + assert.Nil(t, err) + + site := &cdbm.Site{ + ID: uuid.New(), + Name: "test-site", + Org: org, + InfrastructureProviderID: ip.ID, + Status: cdbm.SiteStatusRegistered, + } + _, err = dbSession.DB.NewInsert().Model(site).Exec(ctx) + assert.Nil(t, err) + + dao := cdbm.NewIpxeTemplateDAO(dbSession) + + tmpl1, err := dao.Create(ctx, nil, cdbm.IpxeTemplateCreateInput{ + TemplateID: uuid.New(), SiteID: site.ID, Name: "kernel-initrd", Scope: cdbm.IpxeTemplateScopePublic, + RequiredParams: []string{"kernel_params"}, ReservedParams: []string{"base_url"}, RequiredArtifacts: []string{"kernel"}, + }) + assert.Nil(t, err) + + tmpl2, err := dao.Create(ctx, nil, cdbm.IpxeTemplateCreateInput{ + TemplateID: uuid.New(), SiteID: site.ID, Name: "ubuntu-autoinstall", Scope: cdbm.IpxeTemplateScopePublic, + RequiredParams: []string{}, ReservedParams: []string{}, RequiredArtifacts: []string{"iso"}, + }) + assert.Nil(t, err) + + return &ipxeTemplateTestFixture{ip: ip, site: site, tmpl1: tmpl1, tmpl2: tmpl2} +} + +func createIpxeTemplateMockUser(org string) *cdbm.User { + return &cdbm.User{ + StarfleetID: cdb.GetStrPtr("test-user"), + OrgData: cdbm.OrgData{ + org: cdbm.Org{ + ID: 123, + Name: org, + DisplayName: org, + OrgType: "ENTERPRISE", + Roles: []string{"FORGE_PROVIDER_VIEWER"}, + }, + }, + } +} + +func createIpxeTemplateTenantMockUser(org string) *cdbm.User { + return &cdbm.User{ + StarfleetID: cdb.GetStrPtr("test-tenant-user"), + OrgData: cdbm.OrgData{ + org: cdbm.Org{ + ID: 456, + Name: org, + DisplayName: org, + OrgType: "ENTERPRISE", + Roles: []string{"FORGE_TENANT_ADMIN"}, + }, + }, + } +} + +func createIpxeTemplateMixedRoleMockUser(org string) *cdbm.User { + return &cdbm.User{ + StarfleetID: cdb.GetStrPtr("test-mixed-user"), + OrgData: cdbm.OrgData{ + org: cdbm.Org{ + ID: 789, + Name: org, + DisplayName: org, + OrgType: "ENTERPRISE", + Roles: []string{"FORGE_PROVIDER_VIEWER", "FORGE_TENANT_ADMIN"}, + }, + }, + } +} + +func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { + e := echo.New() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + + testIpxeTemplateHandlerSetupSchema(t, dbSession) + + ctx := context.Background() + cfg := &config.Config{} + handler := NewGetAllIpxeTemplateHandler(dbSession, nil, cfg) + + org := "test-org" + fix := testIpxeTemplateSetupTestData(t, dbSession, org) + + // Unmanaged site in a different org + unmanagedIP := &cdbm.InfrastructureProvider{ID: uuid.New(), Name: "unmanaged-provider", Org: "other-org"} + _, err := dbSession.DB.NewInsert().Model(unmanagedIP).Exec(ctx) + assert.Nil(t, err) + + unmanagedSite := &cdbm.Site{ID: uuid.New(), Name: "unmanaged-site", Org: "other-org", InfrastructureProviderID: unmanagedIP.ID, Status: cdbm.SiteStatusRegistered} + _, err = dbSession.DB.NewInsert().Model(unmanagedSite).Exec(ctx) + assert.Nil(t, err) + + // Tenant with TenantAccount (has TargetedInstanceCreation, but that is irrelevant) + tenantOrg := "test-tenant-org" + tenantWithCapability := &cdbm.Tenant{ID: uuid.New(), Name: "test-tenant", Org: tenantOrg, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} + _, err = dbSession.DB.NewInsert().Model(tenantWithCapability).Exec(ctx) + assert.Nil(t, err) + + tenantAccount := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-123", TenantID: &tenantWithCapability.ID, TenantOrg: tenantOrg, InfrastructureProviderID: fix.ip.ID, Status: "active"} + _, err = dbSession.DB.NewInsert().Model(tenantAccount).Exec(ctx) + assert.Nil(t, err) + + // Non-privileged tenant WITH TenantAccount — should succeed (no TargetedInstanceCreation required) + tenantOrgNonPriv := "test-tenant-non-priv" + tenantNonPriv := &cdbm.Tenant{ID: uuid.New(), Name: "non-priv-tenant", Org: tenantOrgNonPriv, Config: &cdbm.TenantConfig{TargetedInstanceCreation: false}} + _, err = dbSession.DB.NewInsert().Model(tenantNonPriv).Exec(ctx) + assert.Nil(t, err) + + tenantAccountNonPriv := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-np", TenantID: &tenantNonPriv.ID, TenantOrg: tenantOrgNonPriv, InfrastructureProviderID: fix.ip.ID, Status: "active"} + _, err = dbSession.DB.NewInsert().Model(tenantAccountNonPriv).Exec(ctx) + assert.Nil(t, err) + + // Tenant without TenantAccount (no site association) + tenantOrgNoCapability := "test-tenant-no-capability" + tenantWithoutCapability := &cdbm.Tenant{ID: uuid.New(), Name: "no-cap-tenant", Org: tenantOrgNoCapability, Config: &cdbm.TenantConfig{TargetedInstanceCreation: false}} + _, err = dbSession.DB.NewInsert().Model(tenantWithoutCapability).Exec(ctx) + assert.Nil(t, err) + + // Tenant with capability but no TenantAccount + tenantOrgNoAccount := "test-tenant-no-account" + tenantWithoutAccount := &cdbm.Tenant{ID: uuid.New(), Name: "no-account-tenant", Org: tenantOrgNoAccount, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} + _, err = dbSession.DB.NewInsert().Model(tenantWithoutAccount).Exec(ctx) + assert.Nil(t, err) + + // Mixed-role org: has both a provider (different from fix.ip) and a tenant + // with a TenantAccount linked to fix.ip. A mixed-role user in this org should fail + // the provider check (site belongs to fix.ip, not mixedIP) but pass via the tenant path. + mixedOrg := "mixed-role-org" + mixedIP := &cdbm.InfrastructureProvider{ID: uuid.New(), Name: "mixed-provider", Org: mixedOrg} + _, err = dbSession.DB.NewInsert().Model(mixedIP).Exec(ctx) + assert.Nil(t, err) + + mixedTenant := &cdbm.Tenant{ID: uuid.New(), Name: "mixed-tenant", Org: mixedOrg, Config: &cdbm.TenantConfig{}} + _, err = dbSession.DB.NewInsert().Model(mixedTenant).Exec(ctx) + assert.Nil(t, err) + + mixedTA := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-mixed", TenantID: &mixedTenant.ID, TenantOrg: mixedOrg, InfrastructureProviderID: fix.ip.ID, Status: "active"} + _, err = dbSession.DB.NewInsert().Model(mixedTA).Exec(ctx) + assert.Nil(t, err) + + _ = fix.tmpl1 + _ = fix.tmpl2 + _ = tenantAccount + _ = tenantAccountNonPriv + _ = tenantWithoutCapability + _ = tenantWithoutAccount + + tests := []struct { + name string + siteID string + scope string + setupContext func(c echo.Context) + expectedStatus int + checkResponseContent func(t *testing.T, body []byte) + }{ + { + name: "missing siteId returns bad request", + siteID: "", + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName") + c.SetParamValues(org) + }, + expectedStatus: http.StatusBadRequest, + }, + { + name: "successful GetAll with valid siteId", + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName") + c.SetParamValues(org) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response []*model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + assert.Len(t, response, 2) + for _, tmpl := range response { + assert.Equal(t, fix.site.ID.String(), tmpl.SiteID) + } + }, + }, + { + name: "filter by scope returns subset", + siteID: fix.site.ID.String(), + scope: cdbm.IpxeTemplateScopePublic, + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName") + c.SetParamValues(org) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response []*model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + assert.Len(t, response, 2) + }, + }, + { + name: "cannot retrieve from unmanaged site", + siteID: unmanagedSite.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName") + c.SetParamValues(org) + }, + expectedStatus: http.StatusForbidden, + }, + { + name: "missing user context returns 500", + siteID: "", + setupContext: func(c echo.Context) { + c.SetParamNames("orgName") + c.SetParamValues(org) + }, + expectedStatus: http.StatusInternalServerError, + }, + { + name: "tenant with TenantAccount can retrieve templates", + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrg)) + c.SetParamNames("orgName") + c.SetParamValues(tenantOrg) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response []*model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + assert.Len(t, response, 2) + }, + }, + { + name: "non-privileged tenant with TenantAccount can retrieve templates", + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgNonPriv)) + c.SetParamNames("orgName") + c.SetParamValues(tenantOrgNonPriv) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response []*model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + assert.Len(t, response, 2) + }, + }, + { + name: "tenant without TenantAccount is denied", + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgNoCapability)) + c.SetParamNames("orgName") + c.SetParamValues(tenantOrgNoCapability) + }, + expectedStatus: http.StatusForbidden, + }, + { + name: "tenant without TenantAccount with Provider is denied", + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgNoAccount)) + c.SetParamNames("orgName") + c.SetParamValues(tenantOrgNoAccount) + }, + expectedStatus: http.StatusForbidden, + }, + { + name: "mixed-role user fails provider check but passes tenant authorization", + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMixedRoleMockUser(mixedOrg)) + c.SetParamNames("orgName") + c.SetParamValues(mixedOrg) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response []*model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + assert.Len(t, response, 2) + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + url := "/v2/org/" + org + "/carbide/ipxe-template" + if tt.siteID != "" { + url += "?siteId=" + tt.siteID + } + if tt.scope != "" { + if tt.siteID != "" { + url += "&scope=" + tt.scope + } else { + url += "?scope=" + tt.scope + } + } + + req := httptest.NewRequest(http.MethodGet, url, nil) + req = req.WithContext(context.Background()) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + tt.setupContext(c) + + err := handler.Handle(c) + assert.Nil(t, err) + assert.Equal(t, tt.expectedStatus, rec.Code) + if tt.expectedStatus != rec.Code { + t.Errorf("Response: %v", rec.Body.String()) + } + if tt.checkResponseContent != nil && rec.Code == http.StatusOK { + tt.checkResponseContent(t, rec.Body.Bytes()) + } + }) + } +} + +func TestGetIpxeTemplateHandler_Handle(t *testing.T) { + e := echo.New() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + + testIpxeTemplateHandlerSetupSchema(t, dbSession) + + ctx := context.Background() + cfg := &config.Config{} + handler := NewGetIpxeTemplateHandler(dbSession, nil, cfg) + + org := "test-org" + fix := testIpxeTemplateSetupTestData(t, dbSession, org) + + // Unmanaged site in a different org + unmanagedIP := &cdbm.InfrastructureProvider{ID: uuid.New(), Name: "unmanaged-provider-get", Org: "other-org"} + _, err := dbSession.DB.NewInsert().Model(unmanagedIP).Exec(ctx) + assert.Nil(t, err) + + unmanagedSite := &cdbm.Site{ID: uuid.New(), Name: "unmanaged-site-get", Org: "other-org", InfrastructureProviderID: unmanagedIP.ID, Status: cdbm.SiteStatusRegistered} + _, err = dbSession.DB.NewInsert().Model(unmanagedSite).Exec(ctx) + assert.Nil(t, err) + + unmanagedTmpl, err := cdbm.NewIpxeTemplateDAO(dbSession).Create(ctx, nil, cdbm.IpxeTemplateCreateInput{ + TemplateID: uuid.New(), SiteID: unmanagedSite.ID, Name: "unmanaged-tmpl", Scope: cdbm.IpxeTemplateScopePublic, + }) + assert.Nil(t, err) + + // Tenant with TenantAccount + tenantOrg := "test-tenant-org" + tenantWithCapability := &cdbm.Tenant{ID: uuid.New(), Name: "test-tenant", Org: tenantOrg, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} + _, err = dbSession.DB.NewInsert().Model(tenantWithCapability).Exec(ctx) + assert.Nil(t, err) + + tenantAccount := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-456", TenantID: &tenantWithCapability.ID, TenantOrg: tenantOrg, InfrastructureProviderID: fix.ip.ID, Status: "active"} + _, err = dbSession.DB.NewInsert().Model(tenantAccount).Exec(ctx) + assert.Nil(t, err) + + // Non-privileged tenant WITH TenantAccount — should succeed + tenantOrgNonPrivGet := "test-tenant-non-priv-get" + tenantNonPrivGet := &cdbm.Tenant{ID: uuid.New(), Name: "non-priv-tenant-get", Org: tenantOrgNonPrivGet, Config: &cdbm.TenantConfig{TargetedInstanceCreation: false}} + _, err = dbSession.DB.NewInsert().Model(tenantNonPrivGet).Exec(ctx) + assert.Nil(t, err) + + tenantAccountNonPrivGet := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-np-get", TenantID: &tenantNonPrivGet.ID, TenantOrg: tenantOrgNonPrivGet, InfrastructureProviderID: fix.ip.ID, Status: "active"} + _, err = dbSession.DB.NewInsert().Model(tenantAccountNonPrivGet).Exec(ctx) + assert.Nil(t, err) + + // Tenant without TenantAccount (no site association) + tenantOrgNoCapability := "test-tenant-no-capability-get" + tenantWithoutCapability := &cdbm.Tenant{ID: uuid.New(), Name: "no-cap-tenant-get", Org: tenantOrgNoCapability, Config: &cdbm.TenantConfig{TargetedInstanceCreation: false}} + _, err = dbSession.DB.NewInsert().Model(tenantWithoutCapability).Exec(ctx) + assert.Nil(t, err) + + // Tenant with capability but no account + tenantOrgNoAccount := "test-tenant-no-account-get" + tenantWithoutAccount := &cdbm.Tenant{ID: uuid.New(), Name: "no-account-tenant-get", Org: tenantOrgNoAccount, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} + _, err = dbSession.DB.NewInsert().Model(tenantWithoutAccount).Exec(ctx) + assert.Nil(t, err) + + // Mixed-role org: provider check fails (site belongs to fix.ip), tenant path succeeds + mixedOrg := "mixed-role-org-get" + mixedIP := &cdbm.InfrastructureProvider{ID: uuid.New(), Name: "mixed-provider-get", Org: mixedOrg} + _, err = dbSession.DB.NewInsert().Model(mixedIP).Exec(ctx) + assert.Nil(t, err) + + mixedTenant := &cdbm.Tenant{ID: uuid.New(), Name: "mixed-tenant-get", Org: mixedOrg, Config: &cdbm.TenantConfig{}} + _, err = dbSession.DB.NewInsert().Model(mixedTenant).Exec(ctx) + assert.Nil(t, err) + + mixedTA := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-mixed-get", TenantID: &mixedTenant.ID, TenantOrg: mixedOrg, InfrastructureProviderID: fix.ip.ID, Status: "active"} + _, err = dbSession.DB.NewInsert().Model(mixedTA).Exec(ctx) + assert.Nil(t, err) + + _ = tenantAccount + _ = tenantAccountNonPrivGet + _ = tenantWithoutCapability + _ = tenantWithoutAccount + + tests := []struct { + name string + templateID string + siteID string + setupContext func(c echo.Context) + expectedStatus int + checkResponseContent func(t *testing.T, body []byte) + }{ + { + name: "successful retrieval", + templateID: fix.tmpl1.TemplateID.String(), + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName", "id") + c.SetParamValues(org, fix.tmpl1.TemplateID.String()) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + assert.Equal(t, fix.tmpl1.TemplateID.String(), response.ID) + assert.Equal(t, fix.site.ID.String(), response.SiteID) + assert.Equal(t, "kernel-initrd", response.Name) + }, + }, + { + name: "template not found", + templateID: uuid.New().String(), + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName", "id") + c.SetParamValues(org, uuid.New().String()) + }, + expectedStatus: http.StatusNotFound, + }, + { + name: "invalid uuid returns bad request", + templateID: "not-a-uuid", + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName", "id") + c.SetParamValues(org, "not-a-uuid") + }, + expectedStatus: http.StatusBadRequest, + }, + { + name: "cannot retrieve from unmanaged site", + templateID: unmanagedTmpl.TemplateID.String(), + siteID: unmanagedSite.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName", "id") + c.SetParamValues(org, unmanagedTmpl.TemplateID.String()) + }, + expectedStatus: http.StatusForbidden, + }, + { + name: "missing user context returns 500", + templateID: fix.tmpl1.ID.String(), + setupContext: func(c echo.Context) { + c.SetParamNames("orgName", "id") + c.SetParamValues(org, fix.tmpl1.ID.String()) + }, + expectedStatus: http.StatusInternalServerError, + }, + { + name: "tenant with TenantAccount can retrieve template", + templateID: fix.tmpl1.TemplateID.String(), + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrg)) + c.SetParamNames("orgName", "id") + c.SetParamValues(tenantOrg, fix.tmpl1.TemplateID.String()) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + assert.Equal(t, fix.tmpl1.TemplateID.String(), response.ID) + }, + }, + { + name: "non-privileged tenant with TenantAccount can retrieve template", + templateID: fix.tmpl1.TemplateID.String(), + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgNonPrivGet)) + c.SetParamNames("orgName", "id") + c.SetParamValues(tenantOrgNonPrivGet, fix.tmpl1.TemplateID.String()) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + assert.Equal(t, fix.tmpl1.TemplateID.String(), response.ID) + }, + }, + { + name: "tenant without TenantAccount is denied", + templateID: fix.tmpl1.TemplateID.String(), + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgNoCapability)) + c.SetParamNames("orgName", "id") + c.SetParamValues(tenantOrgNoCapability, fix.tmpl1.TemplateID.String()) + }, + expectedStatus: http.StatusForbidden, + }, + { + name: "tenant without TenantAccount with Provider is denied", + templateID: fix.tmpl1.TemplateID.String(), + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgNoAccount)) + c.SetParamNames("orgName", "id") + c.SetParamValues(tenantOrgNoAccount, fix.tmpl1.TemplateID.String()) + }, + expectedStatus: http.StatusForbidden, + }, + { + name: "mixed-role user fails provider check but passes tenant authorization", + templateID: fix.tmpl1.TemplateID.String(), + siteID: fix.site.ID.String(), + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMixedRoleMockUser(mixedOrg)) + c.SetParamNames("orgName", "id") + c.SetParamValues(mixedOrg, fix.tmpl1.TemplateID.String()) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + assert.Equal(t, fix.tmpl1.TemplateID.String(), response.ID) + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + url := "/v2/org/" + org + "/carbide/ipxe-template/" + tt.templateID + if tt.siteID != "" { + url += "?siteId=" + tt.siteID + } + req := httptest.NewRequest(http.MethodGet, url, nil) + req = req.WithContext(context.Background()) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + tt.setupContext(c) + + err := handler.Handle(c) + assert.Nil(t, err) + assert.Equal(t, tt.expectedStatus, rec.Code) + if tt.expectedStatus != rec.Code { + t.Errorf("Response: %v", rec.Body.String()) + } + if tt.checkResponseContent != nil && rec.Code == http.StatusOK { + tt.checkResponseContent(t, rec.Body.Bytes()) + } + }) + } +} diff --git a/api/pkg/api/handler/operatingsystem.go b/api/pkg/api/handler/operatingsystem.go index ab6c4081c..bc64ee33b 100644 --- a/api/pkg/api/handler/operatingsystem.go +++ b/api/pkg/api/handler/operatingsystem.go @@ -47,6 +47,7 @@ import ( cdbp "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/paginator" swe "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/error" "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/queue" + osWorkflow "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/workflow/operatingsystem" cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" ) @@ -104,38 +105,32 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) } - // Validate role, only Tenant Admins are allowed to create OperatingSystem - ok = auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) - if !ok { - logger.Warn().Msg("user does not have Tenant Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin role with org", nil) - } - - // Validate request - // Bind request data to API model + // Bind request data to API model before role check so we can inspect the OS type. apiRequest := model.APIOperatingSystemCreateRequest{} err = c.Bind(&apiRequest) if err != nil { logger.Warn().Err(err).Msg("error binding request data into API model") return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to parse request data, potentially invalid structure", nil) } - // Validate the tenant for which this OperatingSystem is being created - tenant, err := common.GetTenantForOrg(ctx, nil, csh.dbSession, org) - if err != nil { - if err == common.ErrOrgTenantNotFound { - logger.Warn().Err(err).Msg("Org does not have a Tenant associated") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Org does not have a Tenant associated", nil) + // Infer type of OS from provided parameters: + osType := model.GetOperatingSystemType(apiRequest.IpxeScript, apiRequest.IpxeTemplateId) + + // Role check: either Provider Admin or Tenant Admin can create OSes. + // Provider Admin is limited to iPXE Template-based OSes; Tenant Admin may + // create any type. Both roles are evaluated independently so a dual-role + // caller is permitted if either role authorizes the operation. When both + // allow the action, Provider Admin takes priority (provider-owned OS). + isProviderAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) + isTenantAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) + allowedByProvider := isProviderAdmin && osType == cdbm.OperatingSystemTypeTemplatedIPXE + allowedByTenant := isTenantAdmin + if !allowedByProvider && !allowedByTenant { + if isProviderAdmin { + logger.Warn().Msg("provider admin attempted to create non-template OS without tenant admin role") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only create iPXE Template-based Operating Systems", nil) } - logger.Error().Err(err).Msg("unable to retrieve tenant for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) - } - - // Default TenantID to org's Tenant when nil; validate when set - if apiRequest.TenantID == nil { - apiRequest.TenantID = cdb.GetStrPtr(tenant.ID.String()) - } else if *apiRequest.TenantID != tenant.ID.String() { - logger.Warn().Str("tenantId", *apiRequest.TenantID).Msg("TenantID in request does not match org's Tenant") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID specified in request does not match org's Tenant", nil) + logger.Warn().Msg("user has neither Provider Admin nor Tenant Admin role, access denied") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Creating Operating Systems requires Provider Admin or Tenant Admin role", nil) } // Validate request attributes @@ -152,36 +147,61 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Error validating user data in Operating System creation request", verr) } - // check for name uniqueness for the tenant, ie, tenant cannot have another os with same name - // TODO consider doing this with an advisory lock for correctness + // Resolve the tenant for this org (needed for tenant-owned OSes and for some lookups). + tenant, err := common.GetTenantForOrg(ctx, nil, csh.dbSession, org) + if err != nil { + if err == common.ErrOrgTenantNotFound { + logger.Warn().Err(err).Msg("Org does not have a Tenant associated") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Org does not have a Tenant associated", nil) + } + logger.Error().Err(err).Msg("unable to retrieve tenant for org") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) + } + // If the caller provided an explicit tenantId in the body, validate it matches the org. + // TODO: tenantId as parameter is deprecated and will need to be removed by 2026-10-01. + if apiRequest.TenantID != nil { + apiTenant, terr := common.GetTenantFromIDString(ctx, nil, *apiRequest.TenantID, csh.dbSession) + if terr != nil { + logger.Warn().Err(terr).Msg("error retrieving tenant from request") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request is not valid", nil) + } + if apiTenant.ID != tenant.ID { + logger.Warn().Msg("tenant id in request does not match tenant in org") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request does not match tenant in org", nil) + } + } + + // Look up InfrastructureProvider now if acting as provider — used for ownership assignment, + // name-uniqueness check, and site validation throughout the rest of the handler. + var ip *cdbm.InfrastructureProvider + if allowedByProvider { + ip, err = common.GetInfrastructureProviderForOrg(ctx, nil, csh.dbSession, org) + if err != nil { + logger.Error().Err(err).Msg("error retrieving Infrastructure Provider for org") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) + } + } + + // Check for name uniqueness within the owner's scope. osDAO := cdbm.NewOperatingSystemDAO(csh.dbSession) - oss, tot, err := osDAO.GetAll( - ctx, - nil, - cdbm.OperatingSystemFilterInput{ - TenantIDs: []uuid.UUID{tenant.ID}, - Names: []string{apiRequest.Name}, - }, - cdbp.PageInput{}, - nil, - ) + uniquenessFilter := cdbm.OperatingSystemFilterInput{Names: []string{apiRequest.Name}} + if allowedByProvider && ip != nil { + uniquenessFilter.InfrastructureProviderIDs = []uuid.UUID{ip.ID} + } else { + uniquenessFilter.TenantIDs = []uuid.UUID{tenant.ID} + } + oss, tot, err := osDAO.GetAll(ctx, nil, uniquenessFilter, cdbp.PageInput{}, nil) if err != nil { - logger.Error().Err(err).Msg("db error checking for name uniqueness of tenant os") + logger.Error().Err(err).Msg("db error checking for name uniqueness of os") return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to create OperatingSystem due to DB error", nil) } if tot > 0 { - logger.Warn().Str("tenantId", tenant.ID.String()).Str("name", apiRequest.Name).Msg("Operating System with same name already exists for tenant") - return cutil.NewAPIErrorResponse(c, http.StatusConflict, "Another Operating System with specified name already exists for Tenant", validation.Errors{ + logger.Warn().Str("name", apiRequest.Name).Msg("Operating System with same name already exists") + return cutil.NewAPIErrorResponse(c, http.StatusConflict, "Another Operating System with specified name already exists", validation.Errors{ "id": errors.New(oss[0].ID.String()), }) } - // check OS type from request - osType := cdbm.OperatingSystemTypeImage - if apiRequest.IpxeScript != nil { - osType = cdbm.OperatingSystemTypeIPXE - } - // Set the phoneHomeEnabled if provided in request phoneHomeEnabled := false if apiRequest.PhoneHomeEnabled != nil { @@ -199,97 +219,173 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { txCommitted := false defer common.RollbackTx(ctx, tx, &txCommitted) - // Verify or validate site - tsDAO := cdbm.NewTenantSiteDAO(csh.dbSession) + // Verify or validate site associations. + // Behaviour depends on osType, scope, and who is acting: + // - Image OS (tenant): siteIds required, validated against TenantSite + // - Image OS (provider): siteIds required, validated against provider's sites + // - Templated iPXE + scope "Global": auto-associate ALL registered provider sites + // - Templated iPXE + scope "Limited": siteIds required, validated against provider sites + // - Templated iPXE + scope "Local": no site associations (bidirectional sync via core) + // - raw iPXE: no site associations (bidirectional sync via core) rdbst := []cdbm.Site{} - sttsmap := map[uuid.UUID]*cdbm.TenantSite{} dbossd := []cdbm.StatusDetail{} + sttsmap := map[uuid.UUID]*cdbm.TenantSite{} // populated only for tenant-owned image-based OS + + isGlobal := osType == cdbm.OperatingSystemTypeTemplatedIPXE && apiRequest.Scope != nil && *apiRequest.Scope == cdbm.OperatingSystemScopeGlobal + isLimited := osType == cdbm.OperatingSystemTypeTemplatedIPXE && apiRequest.Scope != nil && *apiRequest.Scope == cdbm.OperatingSystemScopeLimited + + if osType == cdbm.OperatingSystemTypeImage || isLimited { + // Determine how to validate the sites: + // - limited-scope iPXE or provider image: sites must belong to the provider + // - tenant image: sites must be in TenantSite + isProviderSiteValidation := isLimited || (osType == cdbm.OperatingSystemTypeImage && allowedByProvider) + + var providerSiteID uuid.UUID + if isProviderSiteValidation { + if ip == nil { + // Provider site validation requires the InfrastructureProvider to be resolved. + ip, err = common.GetInfrastructureProviderForOrg(ctx, nil, csh.dbSession, org) + if err != nil { + logger.Error().Err(err).Msg("error retrieving Infrastructure Provider for org") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) + } + } + providerSiteID = ip.ID + } else { + // Tenant image: build a TenantSite map for membership validation. + tsDAO := cdbm.NewTenantSiteDAO(csh.dbSession) + tss, _, terr := tsDAO.GetAll( + ctx, + tx, + cdbm.TenantSiteFilterInput{TenantIDs: []uuid.UUID{tenant.ID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, + nil, + ) + if terr != nil { + logger.Error().Err(terr).Msg("db error retrieving TenantSite records for Tenant") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) + } + for _, ts := range tss { + cts := ts + sttsmap[ts.SiteID] = &cts + } + } - // Get all TenantSite records for the Tenant - tss, _, err := tsDAO.GetAll( - ctx, - tx, - cdbm.TenantSiteFilterInput{ - TenantIDs: []uuid.UUID{tenant.ID}, - }, - cdbp.PageInput{ - Limit: cdb.GetIntPtr(cdbp.TotalLimit), - }, - nil, - ) - if err != nil { - logger.Error().Err(err).Msg("db error retrieving TenantSite records for Tenant") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) - } - for _, ts := range tss { - cts := ts - sttsmap[ts.SiteID] = &cts - } + for _, stID := range apiRequest.SiteIDs { + site, serr := common.GetSiteFromIDString(ctx, nil, stID, csh.dbSession) + if serr != nil { + if serr == common.ErrInvalidID { + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, invalid Site ID: %s", stID), nil) + } + if serr == cdb.ErrDoesNotExist { + return cutil.NewAPIErrorResponse(c, http.StatusNotFound, fmt.Sprintf("Failed to create Operating System, could not find Site with ID: %s ", stID), nil) + } + logger.Warn().Err(serr).Str("Site ID", stID).Msg("error retrieving Site from DB by ID") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, could not retrieve Site with ID: %s, DB error", stID), nil) + } - // Validate the site for which this image based Operating System is being created - for _, stID := range apiRequest.SiteIDs { - site, serr := common.GetSiteFromIDString(ctx, nil, stID, csh.dbSession) - if serr != nil { - if serr == common.ErrInvalidID { - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, invalid Site ID: %s", stID), nil) + if site.Status != cdbm.SiteStatusRegistered { + logger.Warn().Str("siteID", site.ID.String()).Msg("Unable to associate Operating System to Site: Site is not in Registered state") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, Site: %s is not in Registered state", site.ID.String()), nil) } - if serr == cdb.ErrDoesNotExist { - return cutil.NewAPIErrorResponse(c, http.StatusNotFound, fmt.Sprintf("Failed to create Operating System, could not find Site with ID: %s ", stID), nil) + + if isProviderSiteValidation { + if site.InfrastructureProviderID != providerSiteID { + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Unable to associate Operating System with Site: %s, Site does not belong to provider", stID), nil) + } + } else { + // Tenant image: site must belong to the tenant and support image-based OS. + if _, ok := sttsmap[site.ID]; !ok { + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Unable to associate Operating System with Site: %s, Tenant does not have access to Site", stID), nil) + } + if site.Config == nil || !site.Config.ImageBasedOperatingSystem { + logger.Warn().Str("siteId", stID).Msg("Image based Operating System is not supported for Site, ImageBasedOperatingSystem capability is not enabled") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Creation of Image based Operating Systems is not supported. Site must have ImageBasedOperatingSystem capability enabled.", nil) + } } - logger.Warn().Err(serr).Str("Site ID", stID).Msg("error retrieving Site from DB by ID") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, could not retrieve Site with ID: %s, DB error", stID), nil) - } - if site.Status != cdbm.SiteStatusRegistered { - logger.Warn().Msg(fmt.Sprintf("Unable to associate Operating System to Site: %s. Site is not in Registered state", site.ID.String())) - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, Site: %s specified in request is not in Registered state", site.ID.String()), nil) + rdbst = append(rdbst, *site) } - - // Validate the TenantSite exists for current tenant and this site - _, ok := sttsmap[site.ID] - if !ok { - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Unable to associate Operating System with Site: %s, Tenant does not have access to Site", stID), nil) + } else if isGlobal { + // Global scope: auto-associate with all registered sites belonging to the provider. + if ip == nil { + ipVal, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, csh.dbSession, org) + if iperr != nil { + logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) + } + ip = ipVal } - - // Validate the Site has the ImageBasedOperatingSystem capability enabled for Image based Operating Systems - if osType == cdbm.OperatingSystemTypeImage && (site.Config == nil || !site.Config.ImageBasedOperatingSystem) { - logger.Warn().Str("siteId", stID).Msg("Image based Operating System is not supported for Site, ImageBasedOperatingSystem capability is not enabled") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Creation of Image based Operating Systems is not supported. Site must have ImageBasedOperatingSystem capability enabled.", nil) + stDAO := cdbm.NewSiteDAO(csh.dbSession) + registeredStatus := cdbm.SiteStatusRegistered + providerSites, _, sterr := stDAO.GetAll( + ctx, nil, + cdbm.SiteFilterInput{ + InfrastructureProviderIDs: []uuid.UUID{ip.ID}, + Statuses: []string{registeredStatus}, + }, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, + nil, + ) + if sterr != nil { + logger.Error().Err(sterr).Msg("error retrieving provider sites for global-scope OS") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve provider sites, DB error", nil) } - - rdbst = append(rdbst, *site) - } - - // Create status based on OS type - osStatus := cdbm.OperatingSystemStatusReady - osStatusMessage := "Operating System is ready for use" - if osType == cdbm.OperatingSystemTypeImage { - osStatus = cdbm.OperatingSystemStatusSyncing - osStatusMessage = "received Operating System creation request, syncing" + rdbst = append(rdbst, providerSites...) + } + + // Create status: Image and iPXE types all start as Syncing since the definition + // is pushed to sites asynchronously via the SynchronizeOperatingSystem workflow. + osStatus := cdbm.OperatingSystemStatusSyncing + osStatusMessage := "received Operating System creation request, syncing" + + // Assign ownership: provider-owned OSes carry InfrastructureProviderID (tenant_id=nil); + // tenant-owned OSes carry TenantID (infrastructure_provider_id=nil). + // This aligns with the sync model where OSes from carbide-core are provider-owned. + var ownerTenantID *uuid.UUID + var ownerProviderID *uuid.UUID + if allowedByProvider { + if ip == nil { + // ip may not yet be resolved if the request had no scope/sites requiring it. + ipVal, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, csh.dbSession, org) + if iperr != nil { + logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org during OS create") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) + } + ip = ipVal + } + ownerProviderID = &ip.ID + } else { + ownerTenantID = &tenant.ID } // Create the db record for Operating System osInput := cdbm.OperatingSystemCreateInput{ - Name: apiRequest.Name, - Description: apiRequest.Description, - Org: org, - TenantID: &tenant.ID, - OsType: osType, - ImageURL: apiRequest.ImageURL, - ImageSHA: apiRequest.ImageSHA, - ImageAuthType: apiRequest.ImageAuthType, - ImageAuthToken: apiRequest.ImageAuthToken, - ImageDisk: apiRequest.ImageDisk, - RootFsId: apiRequest.RootFsID, - RootFsLabel: apiRequest.RootFsLabel, - IpxeScript: apiRequest.IpxeScript, - UserData: apiRequest.UserData, - IsCloudInit: apiRequest.IsCloudInit, - AllowOverride: apiRequest.AllowOverride, - EnableBlockStorage: apiRequest.EnableBlockStorage, - PhoneHomeEnabled: phoneHomeEnabled, - Status: osStatus, - CreatedBy: dbUser.ID, + Name: apiRequest.Name, + Description: apiRequest.Description, + Org: org, + TenantID: ownerTenantID, + InfrastructureProviderID: ownerProviderID, + OsType: osType, + ImageURL: apiRequest.ImageURL, + ImageSHA: apiRequest.ImageSHA, + ImageAuthType: apiRequest.ImageAuthType, + ImageAuthToken: apiRequest.ImageAuthToken, + ImageDisk: apiRequest.ImageDisk, + RootFsId: apiRequest.RootFsID, + RootFsLabel: apiRequest.RootFsLabel, + IpxeScript: apiRequest.IpxeScript, + IpxeTemplateId: apiRequest.IpxeTemplateId, + IpxeTemplateParameters: apiRequest.IpxeTemplateParameters, + IpxeTemplateArtifacts: stripCachedURLFromArtifacts(apiRequest.IpxeTemplateArtifacts), + IpxeOsScope: apiRequest.Scope, + UserData: apiRequest.UserData, + IsCloudInit: apiRequest.IsCloudInit, + AllowOverride: apiRequest.AllowOverride, + EnableBlockStorage: apiRequest.EnableBlockStorage, + PhoneHomeEnabled: phoneHomeEnabled, + Status: osStatus, + CreatedBy: dbUser.ID, } os, err := osDAO.Create(ctx, tx, osInput) if err != nil { @@ -364,92 +460,63 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) } - // Trigger workflows to sync Image based Operating System with various Sites - for _, ossa := range dbossa { - // Get the temporal client for the site we are working with. - stc, err := csh.scp.GetClientByID(ossa.SiteID) - if err != nil { - logger.Error().Err(err).Msg("failed to retrieve Temporal client for Site") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve client for Site", nil) - } - - createOsRequest := &cwssaws.OsImageAttributes{ - Id: &cwssaws.UUID{Value: common.GetSiteOperatingSystemtID(os).String()}, - Name: &os.Name, - TenantOrganizationId: tenant.Org, - Description: os.Description, - SourceUrl: *os.ImageURL, - Digest: *os.ImageSHA, - CreateVolume: os.EnableBlockStorage, - AuthType: os.ImageAuthType, - AuthToken: os.ImageAuthToken, - RootfsId: os.RootFsID, - RootfsLabel: os.RootFsLabel, - } - - workflowOptions := temporalClient.StartWorkflowOptions{ - ID: "image-os-create-" + ossa.SiteID.String() + "-" + os.ID.String() + "-" + *ossa.Version, - WorkflowExecutionTimeout: cutil.WorkflowExecutionTimeout, - TaskQueue: queue.SiteTaskQueue, + // Trigger async workflow before committing so a failure to enqueue rolls back the transaction. + if cdbm.IsIPXEType(osType) && len(dbossa) > 0 { + wid, werr := osWorkflow.ExecuteSynchronizeOperatingSystemWorkflow(ctx, csh.tc, os.ID, osWorkflow.SyncOperationCreate) + if werr != nil { + logger.Error().Err(werr).Msg("failed to trigger SynchronizeOperatingSystem workflow for create") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to trigger Operating System synchronization workflow", nil) } - - logger.Info().Str("Site ID", ossa.SiteID.String()).Msg("triggering Image based Operating System create workflow ") - - // Add context deadlines - ctx, cancel := context.WithTimeout(ctx, cutil.WorkflowContextTimeout) - defer cancel() - - // Trigger Site workflow - we, err := stc.ExecuteWorkflow(ctx, workflowOptions, "CreateOsImage", createOsRequest) - - if err != nil { - logger.Error().Err(err).Msg("failed to synchronously start Temporal workflow to create Operating System") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed start sync workflow to create Operating System on Site: %s", err), nil) - } - - wid := we.GetID() - logger.Info().Str("Workflow ID", wid).Msg("executed synchronous create Operating System workflow") - - // Block until the workflow has completed and returned success/error. - err = we.Get(ctx, nil) - if err != nil { - var timeoutErr *tp.TimeoutError - if errors.As(err, &timeoutErr) || err == context.DeadlineExceeded || ctx.Err() != nil { - - logger.Error().Err(err).Msg("failed to create Operating System, timeout occurred executing workflow on Site.") - - // Create a new context deadlines - newctx, newcancel := context.WithTimeout(context.Background(), cutil.WorkflowContextNewAfterTimeout) - defer newcancel() - - // Initiate termination workflow - serr := stc.TerminateWorkflow(newctx, wid, "", "timeout occurred executing create Operating System workflow") - if serr != nil { - logger.Error().Err(serr).Msg("failed to execute terminate Temporal workflow for creating Operating System") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed to terminate synchronous Operating System creation workflow after timeout, Cloud and Site data may be de-synced: %s", serr), nil) - } - - logger.Info().Str("Workflow ID", wid).Msg("initiated terminate synchronous create Operating System workflow successfully") - - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed to create Operating System, timeout occurred executing workflow on Site: %s", err), nil) - } - - code, err := common.UnwrapWorkflowError(err) - logger.Error().Err(err).Msg("failed to synchronously execute Temporal workflow to create Operating System") - return cutil.NewAPIErrorResponse(c, code, fmt.Sprintf("Failed to execute sync workflow to create Operating System on Site: %s", err), nil) - } - logger.Info().Str("Workflow ID", wid).Str("Site ID", ossa.SiteID.String()).Msg("completed synchronous create Operating System workflow") + logger.Info().Str("Workflow ID", *wid).Msg("triggered async SynchronizeOperatingSystem workflow for create") } - // commit transaction + // Commit transaction. err = tx.Commit() if err != nil { logger.Error().Err(err).Msg("error committing Operating System transaction to DB") return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to create Operating System", nil) } - // set committed so, deferred cleanup functions will do nothing txCommitted = true + // Image-based OSes still use the synchronous per-site workflow pattern (post-commit). + if osType == cdbm.OperatingSystemTypeImage { + for _, ossa := range dbossa { + stc, serr := csh.scp.GetClientByID(ossa.SiteID) + if serr != nil { + logger.Error().Err(serr).Msg("failed to retrieve Temporal client for Site") + continue + } + workflowOptions := temporalClient.StartWorkflowOptions{ + ID: "image-os-create-" + ossa.SiteID.String() + "-" + os.ID.String() + "-" + *ossa.Version, + WorkflowExecutionTimeout: cutil.WorkflowExecutionTimeout, + TaskQueue: queue.SiteTaskQueue, + } + workflowInput := &cwssaws.OsImageAttributes{ + Id: &cwssaws.UUID{Value: os.ID.String()}, + Name: &os.Name, + TenantOrganizationId: tenant.Org, + Description: os.Description, + SourceUrl: *os.ImageURL, + Digest: *os.ImageSHA, + CreateVolume: os.EnableBlockStorage, + AuthType: os.ImageAuthType, + AuthToken: os.ImageAuthToken, + RootfsId: os.RootFsID, + RootfsLabel: os.RootFsLabel, + } + sctx, cancel := context.WithTimeout(ctx, cutil.WorkflowContextTimeout) + defer cancel() + we, werr := stc.ExecuteWorkflow(sctx, workflowOptions, "CreateOsImage", workflowInput) + if werr != nil { + logger.Error().Err(werr).Msg("failed to start CreateOsImage workflow") + continue + } + if werr = we.Get(sctx, nil); werr != nil { + logger.Error().Err(werr).Str("Workflow ID", we.GetID()).Msg("CreateOsImage workflow failed") + } + } + } + // create response apiOperatingSystem := model.NewAPIOperatingSystem(os, dbossd, dbossa, sttsmap) logger.Info().Msg("finishing API handler") @@ -514,11 +581,12 @@ func (gash GetAllOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) } - // Validate role, only Tenant Admins are allowed to retrieve OperatingSystems - ok = auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) - if !ok { - logger.Warn().Msg("user does not have Tenant Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin role with org", nil) + // Validate role: Tenant Admin or Provider Admin may list Operating Systems. + isTenantAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) + isProviderAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) + if !isTenantAdmin && !isProviderAdmin { + logger.Warn().Msg("user does not have Tenant Admin or Provider Admin role, access denied") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin or Provider Admin role with org", nil) } // Validate pagination request @@ -547,9 +615,21 @@ func (gash GetAllOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) } + // Both Tenant Admin and Provider Admin can see OSes belonging to their tenant and to their + // infrastructure provider. Look up the provider (best-effort: no provider = tenant-only view). + // We intentionally do NOT filter by Org here: the stored org on synced OSes reflects the + // carbide-rest tenant org at the time of sync, which is authoritative. TenantIDs already + // gives the correct per-tenant scope. + var providerID *uuid.UUID + if ip, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, gash.dbSession, org); iperr == nil { + providerID = &ip.ID + } + filter := cdbm.OperatingSystemFilterInput{ TenantIDs: []uuid.UUID{tenant.ID}, - Orgs: []string{org}, + } + if providerID != nil { + filter.InfrastructureProviderIDs = []uuid.UUID{*providerID} } // Get and validate includeRelation params @@ -572,14 +652,18 @@ func (gash GetAllOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to retrieve Site specified in query", nil) } - // Determine if tenant has access to requested site - _, err = tsDAO.GetByTenantIDAndSiteID(ctx, nil, tenant.ID, site.ID, nil) - if err != nil { - if err == cdb.ErrDoesNotExist { - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Tenant is not associated with Site specified in query", nil) + // Determine if caller has access to the requested site. + // Tenant path: TenantSite association exists. + // Provider path: site belongs to the caller's infrastructure provider. + _, tsErr := tsDAO.GetByTenantIDAndSiteID(ctx, nil, tenant.ID, site.ID, nil) + if tsErr != nil { + if tsErr != cdb.ErrDoesNotExist { + logger.Warn().Err(tsErr).Msg("error retrieving Tenant Site association from DB") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to determine if Tenant has access to Site specified in query, DB error", nil) + } + if !isProviderAdmin || providerID == nil || site.InfrastructureProviderID != *providerID { + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Caller is not associated with Site specified in query", nil) } - logger.Warn().Err(err).Msg("error retrieving Tenant Site association from DB") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to determine if Tenant has access to Site specified in query, DB error", nil) } filter.SiteIDs = append(filter.SiteIDs, site.ID) } @@ -720,10 +804,6 @@ func (gash GetAllOperatingSystemHandler) Handle(c echo.Context) error { apiOperatingSystems := []*model.APIOperatingSystem{} for _, os := range oss { - if os.Type == cdbm.OperatingSystemTypeImage { - fmt.Printf("Processing Operating System: %s, Type: %s\n", os.Name, os.Type) - } - curVal := os apiOperatingSystem := model.NewAPIOperatingSystem(&curVal, ssdMap[os.ID.String()], dbossaMap[os.ID], sttsmap) apiOperatingSystems = append(apiOperatingSystems, apiOperatingSystem) @@ -797,11 +877,11 @@ func (gsh GetOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) } - // Validate role, only Tenant Admins are allowed to retrieve OperatingSystem - ok = auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) - if !ok { - logger.Warn().Msg("user does not have Tenant Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin role with org", nil) + // Validate role: Tenant Admin or Provider Admin may retrieve a single Operating System. + if !auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) && + !auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) { + logger.Warn().Msg("user does not have Tenant Admin or Provider Admin role, access denied") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin or Provider Admin role with org", nil) } // Get and validate includeRelation params @@ -846,10 +926,22 @@ func (gsh GetOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Could not retrieve OperatingSystem to update", nil) } - // verify tenant matches - if os.TenantID == nil || tenant.ID != *os.TenantID { - logger.Warn().Msg("tenant in org does not match tenant in operating system") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Tenant for OperatingSystem in request does not match tenant in org", nil) + // Verify the caller can see this OS: it must belong to their tenant or their infrastructure provider. + ownedByTenant := os.TenantID != nil && *os.TenantID == tenant.ID + ownedByProvider := false + if os.InfrastructureProviderID != nil { + ip, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, gsh.dbSession, org) + if iperr != nil && iperr != common.ErrOrgInstrastructureProviderNotFound { + logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) + } + if iperr == nil { + ownedByProvider = *os.InfrastructureProviderID == ip.ID + } + } + if !ownedByTenant && !ownedByProvider { + logger.Warn().Msg("operating system does not belong to the tenant or provider in org") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Operating System does not belong to the tenant or infrastructure provider in org", nil) } // get status details for the response @@ -860,49 +952,46 @@ func (gsh GetOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Status Details for OperatingSystem", nil) } - dbossas := []cdbm.OperatingSystemSiteAssociation{} - sttsmap := map[uuid.UUID]*cdbm.TenantSite{} - if os.Type == cdbm.OperatingSystemTypeImage { - // Get all OperatingSystemSiteAssociations - ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(gsh.dbSession) - dbossas, _, err = ossaDAO.GetAll( - ctx, - nil, - cdbm.OperatingSystemSiteAssociationFilterInput{ - OperatingSystemIDs: []uuid.UUID{os.ID}, - }, - cdbp.PageInput{ - Limit: cdb.GetIntPtr(cdbp.TotalLimit), - }, - []string{cdbm.SiteRelationName}, - ) - if err != nil { - logger.Error().Err(err).Msg("error retrieving Operating System Site associations from DB") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) - } + // Get all OperatingSystemSiteAssociations (both Image and iPXE types may have them). + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(gsh.dbSession) + dbossas, _, err := ossaDAO.GetAll( + ctx, + nil, + cdbm.OperatingSystemSiteAssociationFilterInput{ + OperatingSystemIDs: []uuid.UUID{os.ID}, + }, + cdbp.PageInput{ + Limit: cdb.GetIntPtr(cdbp.TotalLimit), + }, + []string{cdbm.SiteRelationName}, + ) + if err != nil { + logger.Error().Err(err).Msg("error retrieving Operating System Site associations from DB") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) + } - // Get all TenantSite records for the Tenant - tsDAO := cdbm.NewTenantSiteDAO(gsh.dbSession) - tss, _, err := tsDAO.GetAll( - ctx, - nil, - cdbm.TenantSiteFilterInput{ - TenantIDs: []uuid.UUID{tenant.ID}, - }, - cdbp.PageInput{ - Limit: cdb.GetIntPtr(cdbp.TotalLimit), - }, - nil, - ) - if err != nil { - logger.Error().Err(err).Msg("db error retrieving TenantSite records for Tenant") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) - } + // Get all TenantSite records for the Tenant + sttsmap := map[uuid.UUID]*cdbm.TenantSite{} + tsDAO := cdbm.NewTenantSiteDAO(gsh.dbSession) + tss, _, err := tsDAO.GetAll( + ctx, + nil, + cdbm.TenantSiteFilterInput{ + TenantIDs: []uuid.UUID{tenant.ID}, + }, + cdbp.PageInput{ + Limit: cdb.GetIntPtr(cdbp.TotalLimit), + }, + nil, + ) + if err != nil { + logger.Error().Err(err).Msg("db error retrieving TenantSite records for Tenant") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) + } - for _, ts := range tss { - cts := ts - sttsmap[ts.SiteID] = &cts - } + for _, ts := range tss { + cts := ts + sttsmap[ts.SiteID] = &cts } // Send response @@ -965,11 +1054,12 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) } - // Validate role, only Tenant Admins are allowed to update OperatingSystem - ok = auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) - if !ok { - logger.Warn().Msg("user does not have Tenant Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin role with org", nil) + // Validate role: Tenant Admin or Provider Admin may update Operating Systems (with different ownership rules). + isTenantAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) + isProviderAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) + if !isTenantAdmin && !isProviderAdmin { + logger.Warn().Msg("user does not have Tenant Admin or Provider Admin role, access denied") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin or Provider Admin role with org", nil) } // Get os ID from URL param @@ -1029,30 +1119,58 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) } - // verify tenant matches - if os.TenantID == nil || tenant.ID != *os.TenantID { - logger.Warn().Msg("tenant in os does not belong to tenant in org") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Tenant for OperatingSystem in request does not match tenant in org", nil) + // Enforce ownership: both roles are evaluated independently so a dual-role + // caller is permitted if either role authorizes the operation. + ownedByTenant := os.TenantID != nil && *os.TenantID == tenant.ID && os.InfrastructureProviderID == nil + ownedByProvider := false + if isProviderAdmin && os.InfrastructureProviderID != nil { + ip, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, ush.dbSession, org) + if iperr != nil { + logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) + } + if *os.InfrastructureProviderID != ip.ID { + logger.Warn().Msg("provider admin cannot update operating system owned by a different provider") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only update Operating Systems owned by their own provider", nil) + } + ownedByProvider = true + } + allowedByProvider := isProviderAdmin && ownedByProvider + allowedByTenant := isTenantAdmin && ownedByTenant + if !allowedByProvider && !allowedByTenant { + if isProviderAdmin && !isTenantAdmin { + logger.Warn().Msg("provider admin cannot update tenant-owned operating system") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only update provider-owned Operating Systems", nil) + } + if isTenantAdmin && !isProviderAdmin { + logger.Warn().Msg("tenant admin cannot update provider-owned operating system") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Tenant Admin can only update their own Operating Systems", nil) + } + logger.Warn().Msg("user does not have permission to update this operating system") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Operating System does not belong to your tenant or infrastructure provider", nil) } - // check for name uniqueness for the tenant, ie, tenant cannot have another os with same name + // Check for name uniqueness within the owner's scope (provider or tenant). if apiRequest.Name != nil && *apiRequest.Name != os.Name { + uniquenessFilter := cdbm.OperatingSystemFilterInput{Names: []string{*apiRequest.Name}} + if os.InfrastructureProviderID != nil { + uniquenessFilter.InfrastructureProviderIDs = []uuid.UUID{*os.InfrastructureProviderID} + } else { + uniquenessFilter.TenantIDs = []uuid.UUID{tenant.ID} + } oss, tot, serr := osDAO.GetAll( ctx, nil, - cdbm.OperatingSystemFilterInput{ - TenantIDs: []uuid.UUID{tenant.ID}, - Names: []string{*apiRequest.Name}, - }, + uniquenessFilter, cdbp.PageInput{}, nil, ) if serr != nil { - logger.Error().Err(serr).Msg("db error checking for name uniqueness of tenant os") + logger.Error().Err(serr).Msg("db error checking for name uniqueness of os") return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to update OperatingSystem due to DB error", nil) } if tot > 0 { - return cutil.NewAPIErrorResponse(c, http.StatusConflict, "Another Operating System with specified name already exists for Tenant", validation.Errors{ + return cutil.NewAPIErrorResponse(c, http.StatusConflict, "Another Operating System with specified name already exists", validation.Errors{ "id": errors.New(oss[0].ID.String()), }) } @@ -1125,23 +1243,18 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { txCommitted := false defer common.RollbackTx(ctx, tx, &txCommitted) - // Save update status in DB - osStatus := db.GetStrPtr(cdbm.OperatingSystemStatusReady) - osStatusMessage := "Operating System has been updated and ready for use" + // Save update status in DB. + // Both Image and iPXE types go to Syncing since updates are pushed asynchronously. + osStatus := db.GetStrPtr(cdbm.OperatingSystemStatusSyncing) + osStatusMessage := "received Operating System update request, syncing" if apiRequest.IsActive != nil && !*apiRequest.IsActive { osStatus = db.GetStrPtr(cdbm.OperatingSystemStatusDeactivated) osStatusMessage = "Operating System has been deactivated" if apiRequest.DeactivationNote != nil && *apiRequest.DeactivationNote != "" { osStatusMessage += ". " + *apiRequest.DeactivationNote } - } else { - if apiRequest.IsActive != nil && *apiRequest.IsActive { - osStatusMessage = "Operating System has been reactivated and is ready for use" - } - if os.Type == cdbm.OperatingSystemTypeImage { - osStatus = db.GetStrPtr(cdbm.OperatingSystemStatusSyncing) - osStatusMessage = "received Operating System update request, syncing" - } + } else if apiRequest.IsActive != nil && *apiRequest.IsActive { + osStatusMessage = "Operating System has been reactivated, syncing" } // When switching from inactive to active, clear deactivation note @@ -1155,24 +1268,27 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { } } uos, err := osDAO.Update(ctx, tx, cdbm.OperatingSystemUpdateInput{ - OperatingSystemId: osID, - Name: apiRequest.Name, - Description: apiRequest.Description, - ImageURL: apiRequest.ImageURL, - ImageSHA: apiRequest.ImageSHA, - ImageAuthType: apiRequest.ImageAuthType, - ImageAuthToken: apiRequest.ImageAuthToken, - ImageDisk: apiRequest.ImageDisk, - RootFsId: apiRequest.RootFsID, - RootFsLabel: apiRequest.RootFsLabel, - IpxeScript: apiRequest.IpxeScript, - UserData: apiRequest.UserData, - IsCloudInit: apiRequest.IsCloudInit, - AllowOverride: apiRequest.AllowOverride, - PhoneHomeEnabled: apiRequest.PhoneHomeEnabled, - IsActive: apiRequest.IsActive, - DeactivationNote: deactivationNote, - Status: osStatus, + OperatingSystemId: osID, + Name: apiRequest.Name, + Description: apiRequest.Description, + ImageURL: apiRequest.ImageURL, + ImageSHA: apiRequest.ImageSHA, + ImageAuthType: apiRequest.ImageAuthType, + ImageAuthToken: apiRequest.ImageAuthToken, + ImageDisk: apiRequest.ImageDisk, + RootFsId: apiRequest.RootFsID, + RootFsLabel: apiRequest.RootFsLabel, + IpxeScript: apiRequest.IpxeScript, + IpxeTemplateId: apiRequest.IpxeTemplateId, + IpxeTemplateParameters: apiRequest.IpxeTemplateParameters, + IpxeTemplateArtifacts: stripCachedURLFromArtifactsPtr(apiRequest.IpxeTemplateArtifacts), + UserData: apiRequest.UserData, + IsCloudInit: apiRequest.IsCloudInit, + AllowOverride: apiRequest.AllowOverride, + PhoneHomeEnabled: apiRequest.PhoneHomeEnabled, + IsActive: apiRequest.IsActive, + DeactivationNote: deactivationNote, + Status: osStatus, }) if err != nil { logger.Error().Err(err).Msg("error updating Operating System in DB") @@ -1194,10 +1310,10 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Status Details for Operating System", nil) } - // If OS is Image based, update version too - // Retrieve Operating System Associations details - // Trigger workflows to sync Image based Operating System with various Sites - if uos.Type == cdbm.OperatingSystemTypeImage { + // Trigger workflows to sync the Operating System update with its Sites. + // Image-based OSes use UpdateOsImage; iPXE OSes use UpdateOperatingSystem to push the + // updated definition to carbide-core (the site controller). + if os.Type == cdbm.OperatingSystemTypeImage { for _, dbossa := range dbossas { _, err = ossaDAO.Update( ctx, @@ -1235,7 +1351,7 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { } updateOsRequest := &cwssaws.OsImageAttributes{ - Id: &cwssaws.UUID{Value: common.GetSiteOperatingSystemtID(uos).String()}, + Id: &cwssaws.UUID{Value: uos.ID.String()}, Name: &uos.Name, Description: uos.Description, TenantOrganizationId: tenant.Org, @@ -1254,7 +1370,7 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { TaskQueue: queue.SiteTaskQueue, } - logger.Info().Str("Site ID", dbossa.SiteID.String()).Msg("triggering Image based Operating System update workflow ") + logger.Info().Str("Site ID", dbossa.SiteID.String()).Msg("triggering Image based Operating System update workflow") // Add context deadlines ctx, cancel := context.WithTimeout(ctx, cutil.WorkflowContextTimeout) @@ -1262,7 +1378,6 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { // Trigger Site workflow we, err := stc.ExecuteWorkflow(ctx, workflowOptions, "UpdateOsImage", updateOsRequest) - if err != nil { logger.Error().Err(err).Msg("failed to synchronously start Temporal workflow to update Operating System") return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed start sync workflow to update Operating System on Site: %s", err), nil) @@ -1300,9 +1415,26 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { } logger.Info().Str("Workflow ID", wid).Str("Site ID", dbossa.SiteID.String()).Msg("completed synchronous update Operating System workflow") } + } else if cdbm.IsIPXEType(os.Type) { + // Load existing associations for the response. + dbossas, _, err = ossaDAO.GetAll(ctx, tx, + cdbm.OperatingSystemSiteAssociationFilterInput{OperatingSystemIDs: []uuid.UUID{uos.ID}}, + cdbp.PageInput{}, []string{cdbm.SiteRelationName}) + if err != nil { + logger.Error().Err(err).Msg("error retrieving Operating System Site associations from DB") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) + } + + // Trigger async workflow before committing so a failure to enqueue rolls back the transaction. + wid, werr := osWorkflow.ExecuteSynchronizeOperatingSystemWorkflow(ctx, ush.tc, uos.ID, osWorkflow.SyncOperationUpdate) + if werr != nil { + logger.Error().Err(werr).Msg("failed to trigger SynchronizeOperatingSystem workflow for update") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to trigger Operating System synchronization workflow", nil) + } + logger.Info().Str("Workflow ID", *wid).Msg("triggered async SynchronizeOperatingSystem workflow for update") } - // commit transaction + // Commit transaction. err = tx.Commit() if err != nil { logger.Error().Err(err).Msg("error updating OperatingSystem in DB") @@ -1369,11 +1501,12 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) } - // Validate role, only Tenant Admins are allowed to delete OperatingSystem - ok = auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) - if !ok { - logger.Warn().Msg("user does not have Tenant Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin role with org", nil) + // Validate role: Tenant Admin or Provider Admin may delete Operating Systems (with different ownership rules). + isTenantAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) + isProviderAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) + if !isTenantAdmin && !isProviderAdmin { + logger.Warn().Msg("user does not have Tenant Admin or Provider Admin role, access denied") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin or Provider Admin role with org", nil) } // Get operating system ID from URL param @@ -1409,33 +1542,58 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Could not retrieve Operating System to delete", nil) } - // verify tenant matches - if os.TenantID == nil || tenant.ID != *os.TenantID { - logger.Warn().Msg("tenant in os does not belong to tenant in org") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Tenant for Operating System in request does not match tenant in org", nil) + // Enforce ownership: both roles are evaluated independently so a dual-role + // caller is permitted if either role authorizes the operation. + ownedByTenantD := os.TenantID != nil && *os.TenantID == tenant.ID && os.InfrastructureProviderID == nil + ownedByProviderD := false + if isProviderAdmin && os.InfrastructureProviderID != nil { + ip, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, dsh.dbSession, org) + if iperr != nil { + logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) + } + if *os.InfrastructureProviderID != ip.ID { + logger.Warn().Msg("provider admin cannot delete operating system owned by a different provider") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only delete Operating Systems owned by their own provider", nil) + } + ownedByProviderD = true + } + allowedByProvider := isProviderAdmin && ownedByProviderD + allowedByTenant := isTenantAdmin && ownedByTenantD + if !allowedByProvider && !allowedByTenant { + if isProviderAdmin && !isTenantAdmin { + logger.Warn().Msg("provider admin cannot delete tenant-owned operating system") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only delete provider-owned Operating Systems", nil) + } + if isTenantAdmin && !isProviderAdmin { + logger.Warn().Msg("tenant admin cannot delete provider-owned operating system") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Tenant Admin can only delete their own Operating Systems", nil) + } + logger.Warn().Msg("user does not have permission to delete this operating system") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Operating System does not belong to your tenant or infrastructure provider", nil) } - // Verify if tenant associated with Site in case of Image based OS - // Verify Tenant Site Association - // Verify if Site is in Registered state + // Retrieve site associations for this Operating System (both Image and iPXE types + // may have associations that need per-site workflow propagation on delete). ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(dsh.dbSession) - ossasToDelete := []cdbm.OperatingSystemSiteAssociation{} - if os.Type == cdbm.OperatingSystemTypeImage { - ossasToDelete, _, err = ossaDAO.GetAll( - ctx, - nil, - cdbm.OperatingSystemSiteAssociationFilterInput{ - OperatingSystemIDs: []uuid.UUID{os.ID}, - }, - cdbp.PageInput{}, - []string{cdbm.SiteRelationName}, - ) - if err != nil { - logger.Error().Err(err).Msg("error retrieving Operating System Site associations from DB") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) - } + ossasToDelete, _, err := ossaDAO.GetAll( + ctx, + nil, + cdbm.OperatingSystemSiteAssociationFilterInput{ + OperatingSystemIDs: []uuid.UUID{os.ID}, + }, + cdbp.PageInput{}, + []string{cdbm.SiteRelationName}, + ) + if err != nil { + logger.Error().Err(err).Msg("error retrieving Operating System Site associations from DB") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) + } - // Verify if associated Site is not registered state + osType := os.Type + + // For image-based OS, verify all associated sites are in Registered state. + if osType == cdbm.OperatingSystemTypeImage { for _, dbosa := range ossasToDelete { if dbosa.Site.Status != cdbm.SiteStatusRegistered { logger.Warn().Msg(fmt.Sprintf("unable to delete Operating System. Site: %s. is not in Registered state", dbosa.SiteID.String())) @@ -1476,9 +1634,8 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to delete Operating System, could not acquire data store lock on Operating System", nil) } - // Verify if OS is image based - if os.Type == cdbm.OperatingSystemTypeImage { - + // Propagate the delete to associated sites (Image via DeleteOsImage, iPXE via DeleteOperatingSystem). + if len(ossasToDelete) > 0 { // Update Operating System to set status to Deleting _, err = osDAO.Update(ctx, tx, cdbm.OperatingSystemUpdateInput{OperatingSystemId: os.ID, Status: cdb.GetStrPtr(cdbm.OperatingSystemStatusDeleting)}) if err != nil { @@ -1486,118 +1643,37 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to delete Operating System", nil) } - // Create status detail sdDAO := cdbm.NewStatusDetailDAO(dsh.dbSession) - // create a status detail record for the Operating System _, err = sdDAO.CreateFromParams(ctx, tx, os.ID.String(), cdbm.OperatingSystemStatusDeleting, cdb.GetStrPtr("received request for deletion, pending processing")) if err != nil { logger.Error().Err(err).Msg("error creating Status Detail DB entry") return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to create Status Detail for Operating System", nil) } - // Update Status Deleting for Operating System Association for _, ossa := range ossasToDelete { if ossa.Status != cdbm.OperatingSystemSiteAssociationStatusDeleting { - // Update Operating System Association to set status to Deleting - _, err = ossaDAO.Update( - ctx, - tx, + _, err = ossaDAO.Update(ctx, tx, cdbm.OperatingSystemSiteAssociationUpdateInput{ OperatingSystemSiteAssociationID: ossa.ID, Status: cdb.GetStrPtr(cdbm.OperatingSystemSiteAssociationStatusDeleting), - }, - ) + }) if err != nil { logger.Error().Err(err).Msg("error updating Operating System Association in DB") return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to delete Operating Systems", nil) } - // create a status detail record for the Operating System Association _, err = sdDAO.CreateFromParams(ctx, tx, ossa.ID.String(), cdbm.OperatingSystemSiteAssociationStatusDeleting, cdb.GetStrPtr("received request for deletion, pending processing")) if err != nil { logger.Error().Err(err).Msg("error creating Status Detail DB entry") return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to create Status Detail for Operating System Association", nil) } - - // Get the temporal client for the site we are working with. - stc, err := dsh.scp.GetClientByID(ossa.SiteID) - if err != nil { - logger.Error().Err(err).Msg("failed to retrieve Temporal client for Site") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve client for Site", nil) - } - - // Prepare the delete/release request workflow object - deleteOsRequest := &cwssaws.DeleteOsImageRequest{ - Id: &cwssaws.UUID{Value: common.GetSiteOperatingSystemtID(os).String()}, - TenantOrganizationId: tenant.Org, - } - - workflowOptions := temporalClient.StartWorkflowOptions{ - ID: "image-os-delete-" + ossa.SiteID.String() + "-" + os.ID.String() + "-" + *ossa.Version, - TaskQueue: queue.SiteTaskQueue, - } - - logger.Info().Msg("triggering Operating System delete workflow") - - // Trigger Site workflow to delete Image based OperatingSystem - we, err := stc.ExecuteWorkflow(ctx, workflowOptions, "DeleteOsImage", deleteOsRequest) - if err != nil { - logger.Error().Err(err).Msg("failed to synchronously start Temporal workflow to delete Operating System") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed to start sync workflow to delete Operating System on Site: %s", err), nil) - } - - wid := we.GetID() - logger.Info().Str("Workflow ID", wid).Msg("executed synchronous delete Operating System workflow") - - // Execute the workflow synchronously - err = we.Get(ctx, nil) - // Handle skippable errors - if err != nil { - // If this was a 404 back from Carbide, we can treat the object as already having been deleted and allow things to proceed. - var applicationErr *tp.ApplicationError - if errors.As(err, &applicationErr) && applicationErr.Type() == swe.ErrTypeCarbideObjectNotFound { - logger.Warn().Msg(swe.ErrTypeCarbideObjectNotFound + " received from Site") - // Reset error to nil - err = nil - } - } - - // Check if err is still nil now that we've handled any skippable errors. - if err != nil { - var timeoutErr *tp.TimeoutError - if errors.As(err, &timeoutErr) || ctx.Err() != nil { - - logger.Error().Err(err).Msg("failed to delete Operating System, timeout occurred executing workflow on Site.") - - // Create a new context deadlines - newctx, newcancel := context.WithTimeout(context.Background(), cutil.WorkflowContextNewAfterTimeout) - defer newcancel() - - // Initiate termination workflow - serr := stc.TerminateWorkflow(newctx, wid, "", "timeout occurred executing delete Operating System workflow") - if serr != nil { - logger.Error().Err(serr).Msg("failed to terminate Temporal workflow for deleting Operating System") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed to terminate synchronous Operating System deletion workflow after timeout, Cloud and Site data may be de-synced: %s", serr), nil) - } - - logger.Info().Str("Workflow ID", wid).Msg("initiated terminate synchronous delete Operating System workflow successfully") - - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed to delete Operating System, timeout occurred executing workflow on Site: %s", err), nil) - } - - code, err := common.UnwrapWorkflowError(err) - logger.Error().Err(err).Msg("failed to synchronously execute Temporal workflow to delete Operating System") - return cutil.NewAPIErrorResponse(c, code, fmt.Sprintf("Failed to execute sync workflow to delete Operating System on Site: %s", err), nil) - } - - logger.Info().Str("Workflow ID", wid).Msg("completed synchronous delete Operating System workflow") } } } - // Delete OS if its not Image - // Delete OS if there is no Operating Site Association in case of Image based OS - if os.Type == cdbm.OperatingSystemTypeIPXE || len(ossasToDelete) == 0 { + // Soft-delete the OS if it has no site associations (legacy iPXE, or image-based with + // associations already cleaned up by the workflows above). + if len(ossasToDelete) == 0 { err = osDAO.Delete(ctx, tx, os.ID) if err != nil { logger.Error().Msg("error deleting Operating System record in DB") @@ -1605,17 +1681,128 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { } } - // commit transaction + // Trigger async workflow before committing so a failure to enqueue rolls back the transaction. + if len(ossasToDelete) > 0 && cdbm.IsIPXEType(osType) { + wid, werr := osWorkflow.ExecuteSynchronizeOperatingSystemWorkflow(ctx, dsh.tc, os.ID, osWorkflow.SyncOperationDelete) + if werr != nil { + logger.Error().Err(werr).Msg("failed to trigger SynchronizeOperatingSystem workflow for delete") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to trigger Operating System synchronization workflow", nil) + } + logger.Info().Str("Workflow ID", *wid).Msg("triggered async SynchronizeOperatingSystem workflow for delete") + } + + // Commit transaction. err = tx.Commit() if err != nil { logger.Error().Err(err).Msg("error committing Operating System transaction to DB") return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to delete Operating System", nil) } - // set committed so, deferred cleanup functions will do nothing txCommitted = true + // Image-based OSes still use the synchronous per-site workflow pattern (post-commit). + if len(ossasToDelete) > 0 && osType == cdbm.OperatingSystemTypeImage { + for _, ossa := range ossasToDelete { + if ossa.Status == cdbm.OperatingSystemSiteAssociationStatusDeleting { + continue + } + stc, serr := dsh.scp.GetClientByID(ossa.SiteID) + if serr != nil { + logger.Error().Err(serr).Msg("failed to retrieve Temporal client for Site") + continue + } + workflowOptions := temporalClient.StartWorkflowOptions{ + ID: "image-os-delete-" + ossa.SiteID.String() + "-" + os.ID.String() + "-" + *ossa.Version, + TaskQueue: queue.SiteTaskQueue, + } + deleteOsRequest := &cwssaws.DeleteOsImageRequest{ + Id: &cwssaws.UUID{Value: os.ID.String()}, + TenantOrganizationId: tenant.Org, + } + we, werr := stc.ExecuteWorkflow(ctx, workflowOptions, "DeleteOsImage", deleteOsRequest) + if werr != nil { + logger.Error().Err(werr).Msg("failed to start DeleteOsImage workflow") + continue + } + werr = we.Get(ctx, nil) + if werr != nil { + var applicationErr *tp.ApplicationError + if errors.As(werr, &applicationErr) && applicationErr.Type() == swe.ErrTypeCarbideObjectNotFound { + werr = nil + } + } + if werr != nil { + var timeoutErr *tp.TimeoutError + if errors.As(werr, &timeoutErr) { + logger.Error().Err(werr).Msg("failed to delete Operating System, timeout occurred executing workflow on Site.") + newctx := context.Background() + serr := stc.TerminateWorkflow(newctx, we.GetID(), "", "timeout occurred executing delete Operating System workflow") + if serr != nil { + logger.Error().Err(serr).Msg("failed to execute terminate Temporal workflow for deleting Operating System") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed to terminate synchronous Operating System delete workflow after timeout, Cloud and Site data may be de-synced: %s", serr), nil) + } + logger.Info().Str("Workflow ID", we.GetID()).Msg("initiated terminate synchronous delete Operating System workflow successfully") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed to delete Operating System, timeout occurred executing workflow on Site: %s", werr), nil) + } + logger.Error().Err(werr).Str("Workflow ID", we.GetID()).Msg("DeleteOsImage workflow failed") + } + } + } + // Create response logger.Info().Msg("finishing API handler") return c.String(http.StatusAccepted, "Deletion request was accepted") } + +// ipxeTemplateIdFromString converts a nullable string UUID to the proto IpxeTemplateId message. +func ipxeTemplateIdFromString(id *string) *cwssaws.IpxeTemplateId { + if id == nil { + return nil + } + return &cwssaws.IpxeTemplateId{Value: *id} +} + +// dbParamsToProto converts DB model iPXE parameters to the proto representation. +func dbParamsToProto(params []cdbm.OperatingSystemIpxeParameter) []*cwssaws.IpxeTemplateParameter { + result := make([]*cwssaws.IpxeTemplateParameter, 0, len(params)) + for _, p := range params { + result = append(result, &cwssaws.IpxeTemplateParameter{Name: p.Name, Value: p.Value}) + } + return result +} + +// dbArtifactsToProto converts DB model iPXE artifacts to the proto representation. +// CacheStrategy is stored as the proto enum's string name (e.g. "CACHE_AS_NEEDED"). +func dbArtifactsToProto(artifacts []cdbm.OperatingSystemIpxeArtifact) []*cwssaws.IpxeTemplateArtifact { + result := make([]*cwssaws.IpxeTemplateArtifact, 0, len(artifacts)) + for _, a := range artifacts { + strategy := cwssaws.IpxeTemplateArtifactCacheStrategy(cwssaws.IpxeTemplateArtifactCacheStrategy_value[a.CacheStrategy]) + result = append(result, &cwssaws.IpxeTemplateArtifact{ + Name: a.Name, + Url: a.URL, + Sha: a.SHA, + AuthType: a.AuthType, + AuthToken: a.AuthToken, + CacheStrategy: strategy, + }) + } + return result +} + +// stripCachedURLFromArtifacts returns a copy with CachedURL cleared. +// cached_url is a core-only field that must never be stored in REST. +func stripCachedURLFromArtifacts(artifacts []cdbm.OperatingSystemIpxeArtifact) []cdbm.OperatingSystemIpxeArtifact { + for i := range artifacts { + artifacts[i].CachedURL = nil + } + return artifacts +} + +// stripCachedURLFromArtifactsPtr is the pointer-to-slice variant for update requests. +func stripCachedURLFromArtifactsPtr(artifacts *[]cdbm.OperatingSystemIpxeArtifact) *[]cdbm.OperatingSystemIpxeArtifact { + if artifacts == nil { + return nil + } + stripped := stripCachedURLFromArtifacts(*artifacts) + return &stripped +} diff --git a/api/pkg/api/handler/operatingsystem_ownership_test.go b/api/pkg/api/handler/operatingsystem_ownership_test.go new file mode 100644 index 000000000..3b896d6ee --- /dev/null +++ b/api/pkg/api/handler/operatingsystem_ownership_test.go @@ -0,0 +1,760 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// This file extends operatingsystem_test.go with tests that validate the +// ownership model (TenantID vs InfrastructureProviderID) and role-based +// access-control enforcement introduced alongside the bi-directional sync +// feature. Each test function is self-contained and uses a fresh schema. +// +// Roles under test +// - ipUser — FORGE_PROVIDER_ADMIN only +// - tnUser — FORGE_TENANT_ADMIN only +// - dualUser — both roles (either role may authorize the operation) +// +// Ownership invariants verified +// - Provider Admin → InfrastructureProviderID set, TenantID nil +// - Tenant Admin → TenantID set, InfrastructureProviderID nil +// - Dual-role → permitted if either role authorizes the action; +// when both allow it, Provider Admin takes priority +// for ownership assignment +// +// Cross-ownership visibility (GetAll / GetByID) +// - Any user whose org has both a Tenant and an InfrastructureProvider +// can see OSes owned by either entity. +// +// Mutation enforcement (Update / Delete) +// - Provider Admin can mutate only provider-owned OSes. +// - Tenant Admin can mutate only tenant-owned OSes. +// - Dual-role user is permitted if either role authorizes the action. + +package handler + +import ( + "context" + "encoding/json" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/api/handler/util/common" + "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/api/model" + sc "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/client/site" + "github.com/NVIDIA/ncx-infra-controller-rest/common/pkg/otelecho" + cdb "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" + cdbm "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" + "github.com/google/uuid" + "github.com/labstack/echo/v4" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + tmocks "go.temporal.io/sdk/mocks" +) + +// ─── shared setup helpers ──────────────────────────────────────────────────── + +// ownershipTestEnv contains all DB fixtures that the ownership-related tests +// share. Each test function calls newOwnershipTestEnv and receives a freshly +// reset schema. +type ownershipTestEnv struct { + dbSession *cdb.Session + // Shared org that has both an InfrastructureProvider and a Tenant. + // Users in this org can carry either or both roles. + sharedOrg string + ip *cdbm.InfrastructureProvider + tenant *cdbm.Tenant + site *cdbm.Site // registered site belonging to ip + + // Users + ipUser *cdbm.User // FORGE_PROVIDER_ADMIN only + tnUser *cdbm.User // FORGE_TENANT_ADMIN only + dualUser *cdbm.User // both roles + + // Temporal mocks (permissive — match any workflow invocation) + tempClient *tmocks.Client + scp *sc.ClientPool +} + +func newOwnershipTestEnv(t *testing.T) *ownershipTestEnv { + t.Helper() + + dbSession := testMachineInitDB(t) + t.Cleanup(func() { dbSession.Close() }) + common.TestSetupSchema(t, dbSession) + + sharedOrg := "shared-org" + + ip := testMachineBuildInfrastructureProvider(t, dbSession, sharedOrg, "shared-ip") + require.NotNil(t, ip) + + tenant := testMachineBuildTenant(t, dbSession, sharedOrg, "shared-tenant") + require.NotNil(t, tenant) + + site := testMachineBuildSite(t, dbSession, ip, "shared-site", cdbm.SiteStatusRegistered) + require.NotNil(t, site) + + // TenantSite so tenant users can reference the site. + tnu := testMachineBuildUser(t, dbSession, uuid.NewString(), + []string{sharedOrg}, []string{"FORGE_TENANT_ADMIN"}) + ts := testBuildTenantSiteAssociation(t, dbSession, sharedOrg, tenant.ID, site.ID, tnu.ID) + require.NotNil(t, ts) + + ipUser := testMachineBuildUser(t, dbSession, uuid.NewString(), + []string{sharedOrg}, []string{"FORGE_PROVIDER_ADMIN"}) + dualUser := testMachineBuildUser(t, dbSession, uuid.NewString(), + []string{sharedOrg}, []string{"FORGE_PROVIDER_ADMIN", "FORGE_TENANT_ADMIN"}) + + // Permissive Temporal mock: accepts any ExecuteWorkflow call so that tests + // exercising the success path don't have to enumerate every signature. + wrun := &tmocks.WorkflowRun{} + wrun.On("GetID").Return("test-wf-id") + wrun.On("Get", mock.Anything, mock.Anything).Return(nil) + + tempClient := &tmocks.Client{} + tempClient.On("ExecuteWorkflow", mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything).Return(wrun, nil) + + cfg := common.GetTestConfig() + tcfg, _ := cfg.GetTemporalConfig() + scp := sc.NewClientPool(tcfg) + + // Per-site Temporal client (permissive). + siteMock := &tmocks.Client{} + siteMock.On("ExecuteWorkflow", mock.Anything, mock.Anything, mock.Anything, + mock.Anything).Return(wrun, nil) + siteMock.On("TerminateWorkflow", mock.Anything, mock.Anything, mock.Anything, + mock.Anything).Return(nil) + scp.IDClientMap[site.ID.String()] = siteMock + + return &ownershipTestEnv{ + dbSession: dbSession, + sharedOrg: sharedOrg, + ip: ip, + tenant: tenant, + site: site, + ipUser: ipUser, + tnUser: tnu, + dualUser: dualUser, + tempClient: tempClient, + scp: scp, + } +} + +// execCreateOS posts a Create request and returns the response recorder. +func (e *ownershipTestEnv) execCreateOS(t *testing.T, user *cdbm.User, body interface{}) *httptest.ResponseRecorder { + t.Helper() + + rawBody, err := json.Marshal(body) + require.NoError(t, err) + + tracer, traceCtx := otelTraceCtx(t) + + eh := echo.New() + req := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(string(rawBody))) + req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) + rec := httptest.NewRecorder() + + ec := eh.NewContext(req, rec) + ec.SetParamNames("orgName") + ec.SetParamValues(e.sharedOrg) + ec.Set("user", user) + ec.SetRequest(ec.Request().WithContext( + context.WithValue(traceCtx, otelecho.TracerKey, tracer), + )) + + cfg := common.GetTestConfig() + h := CreateOperatingSystemHandler{ + dbSession: e.dbSession, + tc: e.tempClient, + cfg: cfg, + scp: e.scp, + } + require.NoError(t, h.Handle(ec)) + return rec +} + +// otelTraceCtx returns a no-op tracer and a context for use in handler tests. +func otelTraceCtx(t *testing.T) (interface{}, context.Context) { + t.Helper() + tracer, _, ctx := common.TestCommonTraceProviderSetup(t, context.Background()) + return tracer, ctx +} + +// ─── Create: ownership assignment ──────────────────────────────────────────── + +// TestOperatingSystemHandler_Create_ProviderAndTenantOwnership verifies that +// the Create handler assigns ownership correctly based on the caller's role: +// +// - Provider Admin → InfrastructureProviderID = provider's ID, TenantID = nil +// - Tenant Admin → TenantID = tenant's ID, InfrastructureProviderID = nil +// - Dual-role user → permitted if either role authorizes the action; +// when both allow it, provider ownership takes priority +// +// The test also covers the "new" iPXE OS type (template-based with parameters +// and artifacts) to ensure those fields round-trip correctly. +func TestOperatingSystemHandler_Create_ProviderAndTenantOwnership(t *testing.T) { + env := newOwnershipTestEnv(t) + + ipxeScript := "ipxe-script-content" + templateName := "raw-ipxe" + scopeGlobal := cdbm.OperatingSystemScopeGlobal + + // template-based request reused for several sub-tests. + templateBody := model.APIOperatingSystemCreateRequest{ + Name: "tmpl-os-" + uuid.NewString(), + IpxeTemplateId: &templateName, + Scope: &scopeGlobal, + IpxeTemplateParameters: []cdbm.OperatingSystemIpxeParameter{ + {Name: "kernel_params", Value: "ip=dhcp"}, + }, + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "http://files.example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED"}, + }, + } + + tests := []struct { + name string + user *cdbm.User + body model.APIOperatingSystemCreateRequest + wantStatus int + wantProviderID *uuid.UUID // nil means we don't assert + wantTenantID *uuid.UUID // nil means we don't assert + wantProviderNil bool + wantTenantNil bool + }{ + { + name: "provider admin raw iPXE → forbidden (must use template)", + user: env.ipUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "prov-ipxe-" + uuid.NewString(), + IpxeScript: &ipxeScript, + }, + wantStatus: http.StatusForbidden, + }, + { + name: "provider admin template iPXE → provider-owned", + user: env.ipUser, + body: templateBody, + wantStatus: http.StatusCreated, + wantProviderID: &env.ip.ID, + wantTenantNil: true, + }, + { + name: "tenant admin raw iPXE → tenant-owned", + user: env.tnUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "tn-ipxe-" + uuid.NewString(), + IpxeScript: &ipxeScript, + }, + wantStatus: http.StatusCreated, + wantTenantID: &env.tenant.ID, + wantProviderNil: true, + }, + { + name: "tenant admin template iPXE → tenant-owned", + user: env.tnUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "tn-tmpl-" + uuid.NewString(), + IpxeTemplateId: &templateName, + Scope: &scopeGlobal, + IpxeTemplateParameters: []cdbm.OperatingSystemIpxeParameter{ + {Name: "kernel_params", Value: "ip=dhcp"}, + }, + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "http://files.example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED"}, + }, + }, + wantStatus: http.StatusCreated, + wantTenantID: &env.tenant.ID, + wantProviderNil: true, + }, + { + name: "dual-role user raw iPXE → tenant-owned (tenant role authorizes)", + user: env.dualUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "dual-ipxe-" + uuid.NewString(), + IpxeScript: &ipxeScript, + }, + wantStatus: http.StatusCreated, + wantTenantID: &env.tenant.ID, + wantProviderNil: true, + }, + { + name: "dual-role user template iPXE → provider-owned", + user: env.dualUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "dual-tmpl-" + uuid.NewString(), + IpxeTemplateId: &templateName, + Scope: &scopeGlobal, + IpxeTemplateParameters: []cdbm.OperatingSystemIpxeParameter{ + {Name: "kernel_params", Value: "ip=dhcp"}, + }, + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "http://files.example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED"}, + }, + }, + wantStatus: http.StatusCreated, + wantProviderID: &env.ip.ID, + wantTenantNil: true, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + rec := env.execCreateOS(t, tc.user, tc.body) + assert.Equal(t, tc.wantStatus, rec.Code, "response body: %s", rec.Body.String()) + if rec.Code != http.StatusCreated { + return + } + + var rsp model.APIOperatingSystem + require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &rsp)) + + if tc.wantProviderID != nil { + require.NotNil(t, rsp.InfrastructureProviderID, + "expected InfrastructureProviderID to be set") + assert.Equal(t, tc.wantProviderID.String(), *rsp.InfrastructureProviderID) + } + if tc.wantProviderNil { + assert.Nil(t, rsp.InfrastructureProviderID, + "expected InfrastructureProviderID to be nil") + } + if tc.wantTenantID != nil { + require.NotNil(t, rsp.TenantID, "expected TenantID to be set") + assert.Equal(t, tc.wantTenantID.String(), *rsp.TenantID) + } + if tc.wantTenantNil { + assert.Nil(t, rsp.TenantID, "expected TenantID to be nil") + } + + // Verify iPXE parameters and artifacts round-trip for template OS. + if tc.body.IpxeTemplateId != nil { + assert.Equal(t, tc.body.IpxeTemplateId, rsp.IpxeTemplateId) + if len(tc.body.IpxeTemplateParameters) > 0 { + require.Len(t, rsp.IpxeTemplateParameters, len(tc.body.IpxeTemplateParameters)) + assert.Equal(t, tc.body.IpxeTemplateParameters[0].Name, rsp.IpxeTemplateParameters[0].Name) + } + if len(tc.body.IpxeTemplateArtifacts) > 0 { + require.Len(t, rsp.IpxeTemplateArtifacts, len(tc.body.IpxeTemplateArtifacts)) + assert.Equal(t, tc.body.IpxeTemplateArtifacts[0].Name, rsp.IpxeTemplateArtifacts[0].Name) + assert.Equal(t, tc.body.IpxeTemplateArtifacts[0].URL, rsp.IpxeTemplateArtifacts[0].URL) + } + } + }) + } +} + +// ─── GetAll: cross-ownership visibility ────────────────────────────────────── + +// TestOperatingSystemHandler_GetAll_CrossOwnership verifies that any user whose +// org resolves both a Tenant and an InfrastructureProvider can see OSes owned +// by either entity in a single GetAll call. +func TestOperatingSystemHandler_GetAll_CrossOwnership(t *testing.T) { + env := newOwnershipTestEnv(t) + ctx := context.Background() + + osDAO := cdbm.NewOperatingSystemDAO(env.dbSession) + + // Seed one provider-owned OS. + provOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ + Name: "synced-from-core", + Org: env.sharedOrg, + TenantID: nil, + InfrastructureProviderID: &env.ip.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe\nchain http://boot.example.com"), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.ipUser.ID, + }) + require.NoError(t, err) + + // Seed one tenant-owned OS. + tnOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ + Name: "tenant-os", + Org: env.sharedOrg, + TenantID: &env.tenant.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.tnUser.ID, + }) + require.NoError(t, err) + + _ = provOS + _ = tnOS + + execGetAll := func(t *testing.T, user *cdbm.User) []model.APIOperatingSystem { + t.Helper() + tracer, ctx := otelTraceCtx(t) + + eh := echo.New() + req := httptest.NewRequest(http.MethodGet, "/", nil) + rec := httptest.NewRecorder() + + ec := eh.NewContext(req, rec) + ec.SetParamNames("orgName") + ec.SetParamValues(env.sharedOrg) + ec.Set("user", user) + ec.SetRequest(ec.Request().WithContext( + context.WithValue(ctx, otelecho.TracerKey, tracer), + )) + + cfg := common.GetTestConfig() + h := GetAllOperatingSystemHandler{ + dbSession: env.dbSession, + tc: env.tempClient, + cfg: cfg, + } + require.NoError(t, h.Handle(ec)) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + + var rsp []model.APIOperatingSystem + require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &rsp)) + return rsp + } + + t.Run("provider admin sees both provider-owned and tenant-owned OSes", func(t *testing.T) { + oss := execGetAll(t, env.ipUser) + assert.GreaterOrEqual(t, len(oss), 2, "expected at least the two seeded OSes") + ids := make([]string, len(oss)) + for i, o := range oss { + ids[i] = o.ID + } + assert.Contains(t, ids, provOS.ID.String()) + assert.Contains(t, ids, tnOS.ID.String()) + }) + + t.Run("tenant admin sees both provider-owned and tenant-owned OSes", func(t *testing.T) { + oss := execGetAll(t, env.tnUser) + assert.GreaterOrEqual(t, len(oss), 2) + ids := make([]string, len(oss)) + for i, o := range oss { + ids[i] = o.ID + } + assert.Contains(t, ids, provOS.ID.String()) + assert.Contains(t, ids, tnOS.ID.String()) + }) + + t.Run("dual-role user sees both provider-owned and tenant-owned OSes", func(t *testing.T) { + oss := execGetAll(t, env.dualUser) + assert.GreaterOrEqual(t, len(oss), 2) + }) +} + +// ─── GetByID: cross-ownership visibility ───────────────────────────────────── + +// TestOperatingSystemHandler_GetByID_CrossOwnership verifies that any user +// whose org has both a Tenant and a Provider can fetch an individual OS +// regardless of which entity owns it. +func TestOperatingSystemHandler_GetByID_CrossOwnership(t *testing.T) { + env := newOwnershipTestEnv(t) + ctx := context.Background() + + osDAO := cdbm.NewOperatingSystemDAO(env.dbSession) + + provOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ + Name: "prov-single", + Org: env.sharedOrg, + TenantID: nil, + InfrastructureProviderID: &env.ip.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe"), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.ipUser.ID, + }) + require.NoError(t, err) + + tnOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ + Name: "tenant-single", + Org: env.sharedOrg, + TenantID: &env.tenant.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe"), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.tnUser.ID, + }) + require.NoError(t, err) + + execGetByID := func(t *testing.T, user *cdbm.User, osID string) *httptest.ResponseRecorder { + t.Helper() + tracer, ctx := otelTraceCtx(t) + + eh := echo.New() + req := httptest.NewRequest(http.MethodGet, "/", nil) + rec := httptest.NewRecorder() + + ec := eh.NewContext(req, rec) + ec.SetParamNames("orgName", "id") + ec.SetParamValues(env.sharedOrg, osID) + ec.Set("user", user) + ec.SetRequest(ec.Request().WithContext( + context.WithValue(ctx, otelecho.TracerKey, tracer), + )) + + cfg := common.GetTestConfig() + h := GetOperatingSystemHandler{ + dbSession: env.dbSession, + tc: env.tempClient, + cfg: cfg, + } + require.NoError(t, h.Handle(ec)) + return rec + } + + t.Run("provider admin gets provider-owned OS", func(t *testing.T) { + rec := execGetByID(t, env.ipUser, provOS.ID.String()) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + }) + + t.Run("tenant admin gets provider-owned OS", func(t *testing.T) { + rec := execGetByID(t, env.tnUser, provOS.ID.String()) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + }) + + t.Run("provider admin gets tenant-owned OS", func(t *testing.T) { + rec := execGetByID(t, env.ipUser, tnOS.ID.String()) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + }) + + t.Run("tenant admin gets tenant-owned OS", func(t *testing.T) { + rec := execGetByID(t, env.tnUser, tnOS.ID.String()) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + }) + + t.Run("dual-role user gets provider-owned OS", func(t *testing.T) { + rec := execGetByID(t, env.dualUser, provOS.ID.String()) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + }) +} + +// ─── Update: role-based ownership enforcement ───────────────────────────────── + +// TestOperatingSystemHandler_Update_OwnershipEnforcement exercises the Update +// handler's role-based mutation rules: +// +// - Provider Admin can update only provider-owned OSes → 200 / 403 +// - Tenant Admin can update only tenant-owned OSes → 200 / 403 +// - Dual-role user is permitted if either role authorizes the action +func TestOperatingSystemHandler_Update_OwnershipEnforcement(t *testing.T) { + env := newOwnershipTestEnv(t) + ctx := context.Background() + + osDAO := cdbm.NewOperatingSystemDAO(env.dbSession) + + // Provider-owned iPXE OS (no site associations → no Temporal calls needed). + provOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ + Name: "prov-update-target", + Org: env.sharedOrg, + TenantID: nil, + InfrastructureProviderID: &env.ip.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.ipUser.ID, + }) + require.NoError(t, err) + + // Tenant-owned iPXE OS (no site associations). + tnOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ + Name: "tn-update-target", + Org: env.sharedOrg, + TenantID: &env.tenant.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.tnUser.ID, + }) + require.NoError(t, err) + + newScript := "updated-ipxe-script" + updateBody := model.APIOperatingSystemUpdateRequest{ + IpxeScript: &newScript, + } + rawUpdate, err := json.Marshal(updateBody) + require.NoError(t, err) + + execUpdate := func(t *testing.T, user *cdbm.User, osID string) *httptest.ResponseRecorder { + t.Helper() + tracer, ctx := otelTraceCtx(t) + + eh := echo.New() + req := httptest.NewRequest(http.MethodPut, "/", strings.NewReader(string(rawUpdate))) + req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) + rec := httptest.NewRecorder() + + ec := eh.NewContext(req, rec) + ec.SetParamNames("orgName", "id") + ec.SetParamValues(env.sharedOrg, osID) + ec.Set("user", user) + ec.SetRequest(ec.Request().WithContext( + context.WithValue(ctx, otelecho.TracerKey, tracer), + )) + + cfg := common.GetTestConfig() + h := UpdateOperatingSystemHandler{ + dbSession: env.dbSession, + tc: env.tempClient, + cfg: cfg, + scp: env.scp, + } + require.NoError(t, h.Handle(ec)) + return rec + } + + t.Run("provider admin updates provider-owned OS → 200", func(t *testing.T) { + rec := execUpdate(t, env.ipUser, provOS.ID.String()) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + }) + + t.Run("provider admin updates tenant-owned OS → 403", func(t *testing.T) { + rec := execUpdate(t, env.ipUser, tnOS.ID.String()) + assert.Equal(t, http.StatusForbidden, rec.Code, rec.Body.String()) + }) + + t.Run("tenant admin updates tenant-owned OS → 200", func(t *testing.T) { + rec := execUpdate(t, env.tnUser, tnOS.ID.String()) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + }) + + t.Run("tenant admin updates provider-owned OS → 403", func(t *testing.T) { + rec := execUpdate(t, env.tnUser, provOS.ID.String()) + assert.Equal(t, http.StatusForbidden, rec.Code, rec.Body.String()) + }) + + t.Run("dual-role user updates provider-owned OS → 200 (provider role authorizes)", func(t *testing.T) { + rec := execUpdate(t, env.dualUser, provOS.ID.String()) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + }) + + t.Run("dual-role user updates tenant-owned OS → 200 (tenant role authorizes)", func(t *testing.T) { + rec := execUpdate(t, env.dualUser, tnOS.ID.String()) + assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + }) +} + +// ─── Delete: role-based ownership enforcement ───────────────────────────────── + +// TestOperatingSystemHandler_Delete_OwnershipEnforcement exercises the Delete +// handler's role-based mutation rules. iPXE OSes without site associations +// are used so no Temporal workflow is invoked. +// +// - Provider Admin deletes provider-owned OS → 202 +// - Provider Admin deletes tenant-owned OS → 403 +// - Tenant Admin deletes tenant-owned OS → 202 +// - Tenant Admin deletes provider-owned OS → 403 +// - Dual-role user deletes provider-owned OS → 202 (provider role authorizes) +// - Dual-role user deletes tenant-owned OS → 202 (tenant role authorizes) +func TestOperatingSystemHandler_Delete_OwnershipEnforcement(t *testing.T) { + env := newOwnershipTestEnv(t) + ctx := context.Background() + + osDAO := cdbm.NewOperatingSystemDAO(env.dbSession) + + // helper: create a fresh provider-owned iPXE OS. + newProvOS := func(suffix string) *cdbm.OperatingSystem { + os, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ + Name: "prov-del-" + suffix, + Org: env.sharedOrg, + TenantID: nil, + InfrastructureProviderID: &env.ip.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.ipUser.ID, + }) + require.NoError(t, err) + return os + } + + // helper: create a fresh tenant-owned iPXE OS. + newTnOS := func(suffix string) *cdbm.OperatingSystem { + os, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ + Name: "tn-del-" + suffix, + Org: env.sharedOrg, + TenantID: &env.tenant.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.tnUser.ID, + }) + require.NoError(t, err) + return os + } + + execDelete := func(t *testing.T, user *cdbm.User, osID string) *httptest.ResponseRecorder { + t.Helper() + tracer, ctx := otelTraceCtx(t) + + eh := echo.New() + req := httptest.NewRequest(http.MethodDelete, "/", nil) + rec := httptest.NewRecorder() + + ec := eh.NewContext(req, rec) + ec.SetParamNames("orgName", "id") + ec.SetParamValues(env.sharedOrg, osID) + ec.Set("user", user) + ec.SetRequest(ec.Request().WithContext( + context.WithValue(ctx, otelecho.TracerKey, tracer), + )) + + cfg := common.GetTestConfig() + h := DeleteOperatingSystemHandler{ + dbSession: env.dbSession, + tc: env.tempClient, + cfg: cfg, + scp: env.scp, + } + require.NoError(t, h.Handle(ec)) + return rec + } + + t.Run("provider admin deletes provider-owned OS → 202", func(t *testing.T) { + os := newProvOS(uuid.NewString()) + rec := execDelete(t, env.ipUser, os.ID.String()) + assert.Equal(t, http.StatusAccepted, rec.Code, rec.Body.String()) + }) + + t.Run("provider admin deletes tenant-owned OS → 403", func(t *testing.T) { + os := newTnOS(uuid.NewString()) + rec := execDelete(t, env.ipUser, os.ID.String()) + assert.Equal(t, http.StatusForbidden, rec.Code, rec.Body.String()) + }) + + t.Run("tenant admin deletes tenant-owned OS → 202", func(t *testing.T) { + os := newTnOS(uuid.NewString()) + rec := execDelete(t, env.tnUser, os.ID.String()) + assert.Equal(t, http.StatusAccepted, rec.Code, rec.Body.String()) + }) + + t.Run("tenant admin deletes provider-owned OS → 403", func(t *testing.T) { + os := newProvOS(uuid.NewString()) + rec := execDelete(t, env.tnUser, os.ID.String()) + assert.Equal(t, http.StatusForbidden, rec.Code, rec.Body.String()) + }) + + t.Run("dual-role user deletes provider-owned OS → 202 (provider role authorizes)", func(t *testing.T) { + os := newProvOS(uuid.NewString()) + rec := execDelete(t, env.dualUser, os.ID.String()) + assert.Equal(t, http.StatusAccepted, rec.Code, rec.Body.String()) + }) + + t.Run("dual-role user deletes tenant-owned OS → 202 (tenant role authorizes)", func(t *testing.T) { + os := newTnOS(uuid.NewString()) + rec := execDelete(t, env.dualUser, os.ID.String()) + assert.Equal(t, http.StatusAccepted, rec.Code, rec.Body.String()) + }) +} diff --git a/api/pkg/api/handler/operatingsystem_test.go b/api/pkg/api/handler/operatingsystem_test.go index da805c101..0fc47b9e4 100644 --- a/api/pkg/api/handler/operatingsystem_test.go +++ b/api/pkg/api/handler/operatingsystem_test.go @@ -99,7 +99,7 @@ func TestOperatingSystemHandler_Create(t *testing.T) { cfg := common.GetTestConfig() tempClient := &tmocks.Client{} - osObj := model.APIOperatingSystemCreateRequest{Name: "test-operating-system-1", Description: cdb.GetStrPtr("test"), InfrastructureProviderID: nil, TenantID: cdb.GetStrPtr(tenant1.ID.String()), IpxeScript: cdb.GetStrPtr("ipxe"), ImageDisk: cdb.GetStrPtr("/dev/sda"), UserData: cdb.GetStrPtr(cdmu.TestCommonCloudInit), IsCloudInit: true, AllowOverride: false} + osObj := model.APIOperatingSystemCreateRequest{Name: "test-operating-system-1", Description: cdb.GetStrPtr("test"), InfrastructureProviderID: nil, TenantID: cdb.GetStrPtr(tenant1.ID.String()), IpxeScript: cdb.GetStrPtr("ipxe"), UserData: cdb.GetStrPtr(cdmu.TestCommonCloudInit), IsCloudInit: true, AllowOverride: false} okBody, err := json.Marshal(osObj) assert.Nil(t, err) @@ -156,8 +156,8 @@ func TestOperatingSystemHandler_Create(t *testing.T) { wrun.Mock.On("Get", mock.Anything, mock.Anything).Return(nil) tempClient.Mock.On("ExecuteWorkflow", mock.Anything, mock.AnythingOfType("internal.StartWorkflowOptions"), - mock.AnythingOfType("func(internal.Context, uuid.UUID, uuid.UUID) error"), mock.AnythingOfType("uuid.UUID"), - mock.AnythingOfType("uuid.UUID")).Return(wrun, nil) + mock.AnythingOfType("func(internal.Context, uuid.UUID, string) error"), mock.AnythingOfType("uuid.UUID"), + mock.AnythingOfType("string")).Return(wrun, nil) tsc.Mock.On("ExecuteWorkflow", mock.Anything, mock.AnythingOfType("internal.StartWorkflowOptions"), "CreateOsImage", mock.Anything).Return(wrun, nil) @@ -298,7 +298,7 @@ func TestOperatingSystemHandler_Create(t *testing.T) { user: tnu, expectedErr: false, expectedStatus: http.StatusCreated, - expectedOperatingSystemStatus: cdbm.OperatingSystemStatusReady, + expectedOperatingSystemStatus: cdbm.OperatingSystemStatusSyncing, expectedStatusHistoryCount: 1, verifyChildSpanner: true, }, @@ -1552,8 +1552,8 @@ func TestOperatingSystemHandler_Update(t *testing.T) { wrun.Mock.On("Get", mock.Anything, mock.Anything).Return(nil) tempClient.Mock.On("ExecuteWorkflow", mock.Anything, mock.AnythingOfType("internal.StartWorkflowOptions"), - mock.AnythingOfType("func(internal.Context, uuid.UUID, uuid.UUID) error"), mock.AnythingOfType("uuid.UUID"), - mock.AnythingOfType("uuid.UUID")).Return(wrun, nil) + mock.AnythingOfType("func(internal.Context, uuid.UUID, string) error"), mock.AnythingOfType("uuid.UUID"), + mock.AnythingOfType("string")).Return(wrun, nil) tsc.Mock.On("ExecuteWorkflow", mock.Anything, mock.AnythingOfType("internal.StartWorkflowOptions"), "UpdateOsImage", mock.Anything).Return(wrun, nil) @@ -1629,7 +1629,7 @@ func TestOperatingSystemHandler_Update(t *testing.T) { user: user, osID: os2.ID.String(), expectedErr: true, - expectedStatus: http.StatusBadRequest, + expectedStatus: http.StatusForbidden, }, { name: "error when req body doesnt bind", @@ -2085,8 +2085,8 @@ func TestOperatingSystemHandler_Delete(t *testing.T) { wrun.Mock.On("Get", mock.Anything, mock.Anything).Return(nil) tempClient.Mock.On("ExecuteWorkflow", mock.Anything, mock.AnythingOfType("internal.StartWorkflowOptions"), - mock.AnythingOfType("func(internal.Context, uuid.UUID, uuid.UUID) error"), mock.AnythingOfType("uuid.UUID"), - mock.AnythingOfType("uuid.UUID")).Return(wrun, nil) + mock.AnythingOfType("func(internal.Context, uuid.UUID, string) error"), mock.AnythingOfType("uuid.UUID"), + mock.AnythingOfType("string")).Return(wrun, nil) tsc.Mock.On("ExecuteWorkflow", mock.Anything, mock.AnythingOfType("internal.StartWorkflowOptions"), "DeleteOsImage", mock.Anything).Return(wrun, nil) @@ -2175,7 +2175,7 @@ func TestOperatingSystemHandler_Delete(t *testing.T) { user: tnu, osID: os3.ID.String(), expectedErr: true, - expectedStatus: http.StatusBadRequest, + expectedStatus: http.StatusForbidden, }, { name: "error when instance present for os", diff --git a/api/pkg/api/handler/site.go b/api/pkg/api/handler/site.go index 0e09d4b77..620ea5ef5 100644 --- a/api/pkg/api/handler/site.go +++ b/api/pkg/api/handler/site.go @@ -276,6 +276,45 @@ func (csh CreateSiteHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to create workflow namespace for Site", nil) } + // Auto-associate global-scoped iPXE OSes for this provider with the newly created site. + // This ensures that OSes marked scope="Global" are automatically available on every new site + // added to the provider without requiring the user to update each OS individually. + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(csh.dbSession) + globalOSes, _, goserr := cdbm.NewOperatingSystemDAO(csh.dbSession).GetAll( + ctx, tx, + cdbm.OperatingSystemFilterInput{ + InfrastructureProviderID: &ip.ID, + OsTypes: []string{cdbm.OperatingSystemTypeIPXE, cdbm.OperatingSystemTypeTemplatedIPXE}, + Scopes: []string{cdbm.OperatingSystemScopeGlobal}, + }, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, + nil, + ) + if goserr != nil { + logger.Error().Err(goserr).Msg("error retrieving global-scoped OSes for auto-expansion") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve global-scoped OSes, DB error", nil) + } + for _, gos := range globalOSes { + if _, aerr := ossaDAO.Create(ctx, tx, cdbm.OperatingSystemSiteAssociationCreateInput{ + OperatingSystemID: gos.ID, + SiteID: st.ID, + Status: cdbm.OperatingSystemSiteAssociationStatusSyncing, + CreatedBy: dbUser.ID, + }); aerr != nil { + logger.Error().Err(aerr).Str("osID", gos.ID.String()).Msg("Failed to auto-associate global OS with new site") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to associate global-scoped Operating Systems with new Site", nil) + } + } + if len(globalOSes) > 0 { + logger.Info().Int("count", len(globalOSes)).Msg("Auto-associated global-scoped OSes with new site") + } + + // Global-scoped OS propagation to the new site is intentionally not triggered here. + // The site is not yet in Registered state at creation time, so any workflow dispatch + // would fail or be meaningless. The SynchronizeOperatingSystem workflow (triggered on + // OS create/update) and the inventory reconciliation cycle will push the OSSAs once + // the site-agent connects and the site transitions to Registered. + err = tx.Commit() if err != nil { logger.Error().Err(err).Msg("failed to commit transaction, error creating site") diff --git a/api/pkg/api/handler/util/common/common.go b/api/pkg/api/handler/util/common/common.go index ab1caa855..d7408c5d7 100644 --- a/api/pkg/api/handler/util/common/common.go +++ b/api/pkg/api/handler/util/common/common.go @@ -119,14 +119,6 @@ func GetSiteNetworkSegmentID(s *cdbm.Subnet) *uuid.UUID { } } -func GetSiteOperatingSystemtID(o *cdbm.OperatingSystem) *uuid.UUID { - if o.ControllerOperatingSystemID != nil { - return o.ControllerOperatingSystemID - } else { - return &o.ID - } -} - // GetInfrastructureProviderForOrg gets the infrastructureProvider for org func GetInfrastructureProviderForOrg(ctx context.Context, tx *cdb.Tx, dbSession *cdb.Session, org string) (*cdbm.InfrastructureProvider, error) { ipDAO := cdbm.NewInfrastructureProviderDAO(dbSession) diff --git a/api/pkg/api/model/ipxetemplate.go b/api/pkg/api/model/ipxetemplate.go new file mode 100644 index 000000000..b03fd760e --- /dev/null +++ b/api/pkg/api/model/ipxetemplate.go @@ -0,0 +1,83 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package model + +import ( + "time" + + cdbm "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" +) + +// APIIpxeTemplate is the data structure to capture the API representation of an iPXE template +type APIIpxeTemplate struct { + // ID is the stable template UUID from core, consistent across all sites + ID string `json:"id"` + // SiteID is the ID of the Site this template was retrieved from + SiteID string `json:"siteId"` + // Name is the unique template name (e.g. "ubuntu-autoinstall", "kernel-initrd") + Name string `json:"name"` + // Template is the raw iPXE script content + Template string `json:"template"` + // RequiredParams lists the parameters that must be provided to render the template + RequiredParams []string `json:"requiredParams"` + // ReservedParams lists the parameters that are reserved by the template and cannot be user-supplied + ReservedParams []string `json:"reservedParams"` + // RequiredArtifacts lists the artifact names (e.g. "kernel", "initrd") required for the template + RequiredArtifacts []string `json:"requiredArtifacts"` + // Scope indicates the visibility of this template: "Internal" or "Public" + Scope string `json:"scope"` + // Created is the date and time the entity was created in this system + Created time.Time `json:"created"` + // Updated is the date and time the entity was last updated in this system + Updated time.Time `json:"updated"` +} + +// NewAPIIpxeTemplate accepts a DB layer IpxeTemplate object and returns an API layer object +func NewAPIIpxeTemplate(dbTemplate *cdbm.IpxeTemplate) *APIIpxeTemplate { + if dbTemplate == nil { + return nil + } + + requiredParams := dbTemplate.RequiredParams + if requiredParams == nil { + requiredParams = []string{} + } + + reservedParams := dbTemplate.ReservedParams + if reservedParams == nil { + reservedParams = []string{} + } + + requiredArtifacts := dbTemplate.RequiredArtifacts + if requiredArtifacts == nil { + requiredArtifacts = []string{} + } + + return &APIIpxeTemplate{ + ID: dbTemplate.TemplateID.String(), + SiteID: dbTemplate.SiteID.String(), + Name: dbTemplate.Name, + Template: dbTemplate.Template, + RequiredParams: requiredParams, + ReservedParams: reservedParams, + RequiredArtifacts: requiredArtifacts, + Scope: dbTemplate.Scope, + Created: dbTemplate.Created, + Updated: dbTemplate.Updated, + } +} diff --git a/api/pkg/api/model/operatingsystem.go b/api/pkg/api/model/operatingsystem.go index 3378c23c7..98f2e351f 100644 --- a/api/pkg/api/model/operatingsystem.go +++ b/api/pkg/api/model/operatingsystem.go @@ -19,13 +19,17 @@ package model import ( "errors" + "fmt" + "strings" "time" "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/api/model/util" cdb "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" cdbm "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" + cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" validation "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is" + validationis "github.com/go-ozzo/ozzo-validation/v4/is" "github.com/google/uuid" "gopkg.in/yaml.v3" ) @@ -77,38 +81,59 @@ type APIOperatingSystemCreateRequest struct { AllowOverride bool `json:"allowOverride"` // EnableBlockStorage indicates whether the Operating System image will be stored remotely via block storage EnableBlockStorage bool `json:"enableBlockStorage"` + // IpxeTemplateId is the name of the iPXE template to use (alternative to a raw ipxeScript) + IpxeTemplateId *string `json:"ipxeTemplateId"` + // IpxeTemplateParameters are the parameters to pass to the iPXE template + IpxeTemplateParameters []cdbm.OperatingSystemIpxeParameter `json:"ipxeTemplateParameters"` + // IpxeTemplateArtifacts are the artifacts (kernel, initrd, ISO, …) for the iPXE OS definition + IpxeTemplateArtifacts []cdbm.OperatingSystemIpxeArtifact `json:"ipxeTemplateArtifacts"` + // Scope controls the synchronization direction between carbide-rest and carbide-core. + // Allowed values: "Local" (single site, bidirectional), "Global" (rest→core, all sites), + // "Limited" (rest→core, specific sites listed in siteIds). + // Required for Templated iPXE Operating Systems; must be nil for all other types. + Scope *string `json:"scope"` } // Validate ensure the values passed in request are acceptable func (oscr APIOperatingSystemCreateRequest) Validate() error { - var err error - err = validation.ValidateStruct(&oscr, + err := validation.ValidateStruct(&oscr, validation.Field(&oscr.Name, validation.Required.Error(validationErrorStringLength), validation.By(util.ValidateNameCharacters), validation.Length(2, 256).Error(validationErrorStringLength)), + // TODO: InfrastructureProviderID as parameter is deprecated and will need to be removed by 2026-10-01. validation.Field(&oscr.InfrastructureProviderID, - // infrastructure provider id must be nil validation.Nil.Error(validationErrorInfrastructureProviderIDExpectNil)), + validation.Field(&oscr.TenantID, + validation.When(oscr.TenantID != nil, validationis.UUID.Error(validationErrorInvalidUUID))), ) if err != nil { return err } - // Make sure siteIds only required in case of image is OS based - if oscr.IpxeScript != nil && len(oscr.SiteIDs) > 0 { + if oscr.IpxeTemplateId != nil && strings.TrimSpace(*oscr.IpxeTemplateId) == "" { return validation.Errors{ - "siteIds": errors.New("cannot be specified for iPXE based Operating Systems"), + "ipxeTemplateId": errors.New("must not be empty"), } } - if oscr.IpxeScript != nil && oscr.ImageURL != nil { + if oscr.IpxeScript != nil && oscr.IpxeTemplateId != nil { return validation.Errors{ - "imageURL": errors.New("cannot be specified for iPXE based Operating Systems"), + "ipxeTemplateId": errors.New("ipxeScript and ipxeTemplateId are mutually exclusive"), } - } else if oscr.IpxeScript == nil && oscr.ImageURL == nil { + } + + osType := GetOperatingSystemType(oscr.IpxeScript, oscr.IpxeTemplateId) + + if osType == cdbm.OperatingSystemTypeImage && oscr.ImageURL == nil { return validation.Errors{ - validationCommonErrorField: errors.New("either imageURL or ipxeScript must be specified"), + validationCommonErrorField: errors.New("one of imageURL, ipxeScript, or ipxeTemplateId must be specified"), + } + } + + if cdbm.IsIPXEType(osType) && oscr.ImageURL != nil { + return validation.Errors{ + "imageURL": errors.New("cannot be specified for iPXE based Operating Systems"), } } @@ -118,67 +143,171 @@ func (oscr APIOperatingSystemCreateRequest) Validate() error { } } - if oscr.ImageURL != nil { - err = validation.ValidateStruct(&oscr, - validation.Field(&oscr.ImageURL, is.URL), - validation.Field(&oscr.ImageSHA, - validation.Required.Error(validationErrorValueRequired), - validation.When(oscr.ImageSHA != nil, validation.Match(util.ShaHashRegex).Error(errMsgInvalidImageSHA))), - validation.Field(&oscr.ImageAuthType, - validation.When(!(util.IsNilOrEmptyStrPtr(oscr.ImageAuthType)) && util.IsNilOrEmptyStrPtr(oscr.ImageAuthToken), - validation.Required.Error("imageAuthType cannot be specified if imageAuthToken is not specified")), - validation.When(!(util.IsNilOrEmptyStrPtr(oscr.ImageAuthType)), - validation.In(cdbm.OperatingSystemAuthTypeBasic, cdbm.OperatingSystemAuthTypeBearer).Error("imageAuthType must be Basic or Bearer")), - ), - validation.Field(&oscr.ImageAuthToken, - validation.When(!(util.IsNilOrEmptyStrPtr(oscr.ImageAuthToken)) && util.IsNilOrEmptyStrPtr(oscr.ImageAuthType), validation.Required.Error("imageAuthType must be specified when imageAuthToken is specified"))), - validation.Field(&oscr.ImageDisk, - validation.When(!(util.IsNilOrEmptyStrPtr(oscr.ImageDisk)), validation.Match(util.DiskImagePathRegex).Error(errMsgInvalidImageDiskPath))), - validation.Field(&oscr.RootFsID, - validation.When(util.IsNilOrEmptyStrPtr(oscr.RootFsLabel), validation.Required.Error(errMsgExactlyOneRootFsField)), - validation.When(!(util.IsNilOrEmptyStrPtr(oscr.RootFsLabel)), validation.Empty.Error(errMsgExactlyOneRootFsField))), - validation.Field(&oscr.RootFsLabel, - validation.When(util.IsNilOrEmptyStrPtr(oscr.RootFsID), validation.Required.Error(errMsgExactlyOneRootFsField)), - validation.When(!(util.IsNilOrEmptyStrPtr(oscr.RootFsID)), validation.Empty.Error(errMsgExactlyOneRootFsField))), - ) - if len(oscr.SiteIDs) == 0 { - return validation.Errors{ - "siteIds": errors.New("must be specified for image based Operating Systems"), - } - } else if len(oscr.SiteIDs) > 1 { - return validation.Errors{ - "siteIds": errors.New("must specify a single Site ID. Creating Image based Operating System on more than one Site is not supported"), - } + switch osType { + case cdbm.OperatingSystemTypeImage: + return oscr.validateImageOS() + case cdbm.OperatingSystemTypeIPXE: + return oscr.validateRawIpxeOS() + case cdbm.OperatingSystemTypeTemplatedIPXE: + return oscr.validateTemplatedIpxeOS() + } + + return nil +} + +func (oscr APIOperatingSystemCreateRequest) validateImageOS() error { + if len(oscr.IpxeTemplateParameters) > 0 { + return validation.Errors{ + "ipxeTemplateParameters": errors.New("cannot be specified for Image based Operating Systems"), + } + } + if len(oscr.IpxeTemplateArtifacts) > 0 { + return validation.Errors{ + "ipxeTemplateArtifacts": errors.New("cannot be specified for Image based Operating Systems"), } - } else { - err = validation.ValidateStruct(&oscr, - validation.Field(&oscr.SiteIDs, - validation.Nil.Error("siteIds cannot be specified if imageURL is not specified")), - validation.Field(&oscr.ImageSHA, - validation.Nil.Error("imageSHA cannot be specified if imageURL is not specified")), - validation.Field(&oscr.ImageAuthType, - validation.Nil.Error("imageAuthType cannot be specified if imageURL is not specified")), - validation.Field(&oscr.ImageAuthToken, - validation.Nil.Error("imageAuthToken cannot be specified if imageURL is not specified")), - validation.Field(&oscr.ImageDisk, - validation.Nil.Error("imageDisk cannot be specified if imageURL is not specified")), - validation.Field(&oscr.RootFsID, - validation.Nil.Error("rootFsID cannot be specified if imageURL is not specified")), - validation.Field(&oscr.RootFsLabel, - validation.Nil.Error("rootFsLabel cannot be specified if imageURL is not specified")), - ) } - if oscr.IpxeScript != nil { - err = validation.ValidateStruct(&oscr, - validation.Field(&oscr.IpxeScript, - validation.Required.Error(validationErrorValueRequired)), - validation.Field(&oscr.EnableBlockStorage, - validation.Empty.Error("enableBlockStorage must be false if ipxeScript is specified")), - ) + err := validation.ValidateStruct(&oscr, + validation.Field(&oscr.ImageURL, is.URL), + validation.Field(&oscr.ImageSHA, + validation.Required.Error(validationErrorValueRequired), + validation.When(oscr.ImageSHA != nil, validation.Match(util.ShaHashRegex).Error(errMsgInvalidImageSHA))), + validation.Field(&oscr.ImageAuthType, + validation.When(!(util.IsNilOrEmptyStrPtr(oscr.ImageAuthType)) && util.IsNilOrEmptyStrPtr(oscr.ImageAuthToken), + validation.Required.Error("imageAuthType cannot be specified if imageAuthToken is not specified")), + validation.When(!(util.IsNilOrEmptyStrPtr(oscr.ImageAuthType)), + validation.In(cdbm.OperatingSystemAuthTypeBasic, cdbm.OperatingSystemAuthTypeBearer).Error("imageAuthType must be Basic or Bearer")), + ), + validation.Field(&oscr.ImageAuthToken, + validation.When(!(util.IsNilOrEmptyStrPtr(oscr.ImageAuthToken)) && util.IsNilOrEmptyStrPtr(oscr.ImageAuthType), validation.Required.Error("imageAuthType must be specified when imageAuthToken is specified"))), + validation.Field(&oscr.ImageDisk, + validation.When(!(util.IsNilOrEmptyStrPtr(oscr.ImageDisk)), validation.Match(util.DiskImagePathRegex).Error(errMsgInvalidImageDiskPath))), + validation.Field(&oscr.RootFsID, + validation.When(util.IsNilOrEmptyStrPtr(oscr.RootFsLabel), validation.Required.Error(errMsgExactlyOneRootFsField)), + validation.When(!(util.IsNilOrEmptyStrPtr(oscr.RootFsLabel)), validation.Empty.Error(errMsgExactlyOneRootFsField))), + validation.Field(&oscr.RootFsLabel, + validation.When(util.IsNilOrEmptyStrPtr(oscr.RootFsID), validation.Required.Error(errMsgExactlyOneRootFsField)), + validation.When(!(util.IsNilOrEmptyStrPtr(oscr.RootFsID)), validation.Empty.Error(errMsgExactlyOneRootFsField))), + ) + if err != nil { + return err + } + + if len(oscr.SiteIDs) == 0 { + return validation.Errors{ + "siteIds": errors.New("must be specified for image based Operating Systems"), + } + } + if len(oscr.SiteIDs) > 1 { + return validation.Errors{ + "siteIds": errors.New("must specify a single Site ID. Creating Image based Operating System on more than one Site is not supported"), + } + } + + if oscr.Scope != nil { + return validation.Errors{ + "scope": errors.New("scope can only be specified for Templated iPXE Operating Systems"), + } + } + + return nil +} + +// rejectImageFields validates that image-specific fields are not set. +func (oscr APIOperatingSystemCreateRequest) rejectImageFields() error { + return validation.ValidateStruct(&oscr, + validation.Field(&oscr.ImageSHA, + validation.Nil.Error("imageSHA cannot be specified if imageURL is not specified")), + validation.Field(&oscr.ImageAuthType, + validation.Nil.Error("imageAuthType cannot be specified if imageURL is not specified")), + validation.Field(&oscr.ImageAuthToken, + validation.Nil.Error("imageAuthToken cannot be specified if imageURL is not specified")), + validation.Field(&oscr.ImageDisk, + validation.Nil.Error("imageDisk cannot be specified if imageURL is not specified")), + validation.Field(&oscr.RootFsID, + validation.Nil.Error("rootFsID cannot be specified if imageURL is not specified")), + validation.Field(&oscr.RootFsLabel, + validation.Nil.Error("rootFsLabel cannot be specified if imageURL is not specified")), + ) +} + +func (oscr APIOperatingSystemCreateRequest) validateRawIpxeOS() error { + if err := oscr.rejectImageFields(); err != nil { + return err + } + + if err := validation.ValidateStruct(&oscr, + validation.Field(&oscr.IpxeScript, + validation.Required.Error(validationErrorValueRequired)), + ); err != nil { + return err + } + + if len(oscr.IpxeTemplateParameters) > 0 { + return validation.Errors{ + "ipxeTemplateParameters": errors.New("cannot be specified for raw iPXE Operating Systems; use ipxeTemplateId for template-based OS"), + } + } + if len(oscr.IpxeTemplateArtifacts) > 0 { + return validation.Errors{ + "ipxeTemplateArtifacts": errors.New("cannot be specified for raw iPXE Operating Systems; use ipxeTemplateId for template-based OS"), + } + } + + if oscr.Scope != nil { + return validation.Errors{ + "scope": errors.New("scope can only be specified for Templated iPXE Operating Systems"), + } + } + + if len(oscr.SiteIDs) > 0 { + return validation.Errors{ + "siteIds": errors.New("siteIds cannot be specified for raw iPXE Operating Systems"), + } + } + + return nil +} + +func (oscr APIOperatingSystemCreateRequest) validateTemplatedIpxeOS() error { + if err := oscr.rejectImageFields(); err != nil { + return err + } + + if oscr.Scope == nil { + return validation.Errors{ + "scope": errors.New("scope is required for Templated iPXE Operating Systems"), + } + } + + switch *oscr.Scope { + case cdbm.OperatingSystemScopeLocal, cdbm.OperatingSystemScopeGlobal, cdbm.OperatingSystemScopeLimited: + // valid + default: + return validation.Errors{ + "scope": errors.New("scope must be one of 'Local', 'Global', or 'Limited'"), + } + } + + if len(oscr.SiteIDs) > 0 && *oscr.Scope != cdbm.OperatingSystemScopeLimited { + return validation.Errors{ + "siteIds": errors.New("siteIds can only be specified for Templated iPXE Operating Systems with scope 'Limited'"), + } + } + if *oscr.Scope == cdbm.OperatingSystemScopeLimited && len(oscr.SiteIDs) == 0 { + return validation.Errors{ + "siteIds": errors.New("at least one siteId must be specified when scope is 'Limited'"), + } + } + + if err := validateIpxeTemplateParameters(oscr.IpxeTemplateParameters); err != nil { + return err + } + if err := validateIpxeTemplateArtifacts(oscr.IpxeTemplateArtifacts); err != nil { + return err } - return err + return nil } func (oscr *APIOperatingSystemCreateRequest) ValidateAndSetUserData(phonehomeUrl string) error { @@ -272,6 +401,14 @@ type APIOperatingSystemUpdateRequest struct { IsActive *bool `json:"isActive"` // DeactivationNote is the deactivation note if any DeactivationNote *string `json:"deactivationNote"` + // IpxeTemplateId is the name of the iPXE template to use (alternative to a raw ipxeScript) + IpxeTemplateId *string `json:"ipxeTemplateId"` + // IpxeTemplateParameters are the parameters to pass to the iPXE template + IpxeTemplateParameters *[]cdbm.OperatingSystemIpxeParameter `json:"ipxeTemplateParameters"` + // IpxeTemplateArtifacts are the artifacts (kernel, initrd, ISO, …) for the iPXE OS definition + IpxeTemplateArtifacts *[]cdbm.OperatingSystemIpxeArtifact `json:"ipxeTemplateArtifacts"` + // Scope is immutable after creation. If provided, the request is rejected. + Scope *string `json:"scope"` } // Validate ensure the values passed in request are acceptable @@ -307,14 +444,26 @@ func (osur APIOperatingSystemUpdateRequest) Validate(existingOS *cdbm.OperatingS } } - if osur.IpxeScript != nil && osur.ImageURL != nil { + if osur.IpxeScript != nil && osur.IpxeTemplateId != nil { + return validation.Errors{ + "ipxeTemplateId": errors.New("ipxeScript and ipxeTemplateId are mutually exclusive"), + } + } + + if osur.IpxeTemplateId != nil && strings.TrimSpace(*osur.IpxeTemplateId) == "" { + return validation.Errors{ + "ipxeTemplateId": errors.New("must not be empty"), + } + } + + if (osur.IpxeScript != nil || osur.IpxeTemplateId != nil) && osur.ImageURL != nil { return validation.Errors{ "imageURL": errors.New("cannot be specified for iPXE based Operating Systems"), } } // verify if os created with ipxe script, if yes reject the update if imageURL provided - if existingOS.Type == cdbm.OperatingSystemTypeIPXE && osur.ImageURL != nil { + if cdbm.IsIPXEType(existingOS.Type) && osur.ImageURL != nil { return validation.Errors{ "imageURL": errors.New("unable to set image URL for iPXE based Operating System"), } @@ -322,6 +471,10 @@ func (osur APIOperatingSystemUpdateRequest) Validate(existingOS *cdbm.OperatingS return validation.Errors{ "ipxeScript": errors.New("unable to set iPXE script for image based Operating System"), } + } else if existingOS.Type == cdbm.OperatingSystemTypeImage && osur.IpxeTemplateId != nil { + return validation.Errors{ + "ipxeTemplateId": errors.New("unable to set iPXE template for image based Operating System"), + } } isImageBased := existingOS.Type == cdbm.OperatingSystemTypeImage @@ -387,7 +540,53 @@ func (osur APIOperatingSystemUpdateRequest) Validate(existingOS *cdbm.OperatingS validation.Required.Error(validationErrorValueRequired)), ) } - return err + + if osur.Scope != nil { + return validation.Errors{ + "scope": errors.New("scope cannot be changed after creation"), + } + } + + if err != nil { + return err + } + + isImageBased2 := existingOS.Type == cdbm.OperatingSystemTypeImage + isRawIpxe := existingOS.Type == cdbm.OperatingSystemTypeIPXE + + if osur.IpxeTemplateParameters != nil { + if isImageBased2 { + return validation.Errors{ + "ipxeTemplateParameters": errors.New("cannot be specified for Image based Operating Systems"), + } + } + if isRawIpxe { + return validation.Errors{ + "ipxeTemplateParameters": errors.New("cannot be specified for raw iPXE Operating Systems"), + } + } + if verr := validateIpxeTemplateParameters(*osur.IpxeTemplateParameters); verr != nil { + return verr + } + } + + if osur.IpxeTemplateArtifacts != nil { + if isImageBased2 { + return validation.Errors{ + "ipxeTemplateArtifacts": errors.New("cannot be specified for Image based Operating Systems"), + } + } + if isRawIpxe { + return validation.Errors{ + "ipxeTemplateArtifacts": errors.New("cannot be specified for raw iPXE Operating Systems"), + } + } + if verr := validateIpxeTemplateArtifacts(*osur.IpxeTemplateArtifacts); verr != nil { + return verr + } + } + + return nil } func (osur *APIOperatingSystemUpdateRequest) ValidateAndSetUserData(phonehomeUrl string, existingOS *cdbm.OperatingSystem) error { @@ -531,8 +730,14 @@ type APIOperatingSystem struct { RootFsID *string `json:"rootFsId"` // RootFsLabel is root fs id for the Operating System image type RootFsLabel *string `json:"rootFsLabel"` - // IpxeScript is the ipxe ocript for the Operating System + // IpxeScript is the ipxe script for the Operating System IpxeScript *string `json:"ipxeScript"` + // IpxeTemplateId is the name of the iPXE template used by this Operating System + IpxeTemplateId *string `json:"ipxeTemplateId"` + // IpxeTemplateParameters are the parameters passed to the iPXE template + IpxeTemplateParameters []cdbm.OperatingSystemIpxeParameter `json:"ipxeTemplateParameters"` + // IpxeTemplateArtifacts are the artifacts (kernel, initrd, ISO, …) for the iPXE OS definition + IpxeTemplateArtifacts []cdbm.OperatingSystemIpxeArtifact `json:"ipxeTemplateArtifacts"` // PhoneHomeEnabled is an attribute which is specified by user if Operating System needs to be enabled for phone home or not PhoneHomeEnabled bool `json:"phoneHomeEnabled"` // UserData is the user data for the Operating System @@ -553,6 +758,9 @@ type APIOperatingSystem struct { StatusHistory []APIStatusDetail `json:"statusHistory"` // SiteAssociations is the list of Sites associated with the Operating System SiteAssociations []APIOperatingSystemSiteAssociation `json:"siteAssociations"` + // Scope controls the synchronization direction between carbide-rest and carbide-core. + // One of "Local" (default), "Global", or "Limited". Only valid for Templated iPXE OSes. + Scope *string `json:"scope"` // CreatedAt indicates the ISO datetime string for when the entity was created Created time.Time `json:"created"` // UpdatedAt indicates the ISO datetime string for when the entity was last updated @@ -562,28 +770,32 @@ type APIOperatingSystem struct { // NewAPIOperatingSystem accepts a DB layer objects and returns an API layer object func NewAPIOperatingSystem(dbOS *cdbm.OperatingSystem, dbsds []cdbm.StatusDetail, ossas []cdbm.OperatingSystemSiteAssociation, sttsmap map[uuid.UUID]*cdbm.TenantSite) *APIOperatingSystem { apiOperatingSystem := APIOperatingSystem{ - ID: dbOS.ID.String(), - Name: dbOS.Name, - Description: dbOS.Description, - Type: &dbOS.Type, - ImageURL: dbOS.ImageURL, - ImageSHA: dbOS.ImageSHA, - ImageAuthType: dbOS.ImageAuthType, - ImageAuthToken: dbOS.ImageAuthToken, - ImageDisk: dbOS.ImageDisk, - RootFsID: dbOS.RootFsID, - RootFsLabel: dbOS.RootFsLabel, - IpxeScript: dbOS.IpxeScript, - PhoneHomeEnabled: dbOS.PhoneHomeEnabled, - UserData: dbOS.UserData, - IsCloudInit: dbOS.IsCloudInit, - AllowOverride: dbOS.AllowOverride, - EnableBlockStorage: dbOS.EnableBlockStorage, - IsActive: dbOS.IsActive, - DeactivationNote: dbOS.DeactivationNote, - Status: dbOS.Status, - Created: dbOS.Created, - Updated: dbOS.Updated, + ID: dbOS.ID.String(), + Name: dbOS.Name, + Description: dbOS.Description, + Type: &dbOS.Type, + ImageURL: dbOS.ImageURL, + ImageSHA: dbOS.ImageSHA, + ImageAuthType: dbOS.ImageAuthType, + ImageAuthToken: dbOS.ImageAuthToken, + ImageDisk: dbOS.ImageDisk, + RootFsID: dbOS.RootFsID, + RootFsLabel: dbOS.RootFsLabel, + IpxeScript: dbOS.IpxeScript, + IpxeTemplateId: dbOS.IpxeTemplateId, + IpxeTemplateParameters: dbOS.IpxeTemplateParameters, + IpxeTemplateArtifacts: dbOS.IpxeTemplateArtifacts, + PhoneHomeEnabled: dbOS.PhoneHomeEnabled, + UserData: dbOS.UserData, + IsCloudInit: dbOS.IsCloudInit, + AllowOverride: dbOS.AllowOverride, + EnableBlockStorage: dbOS.EnableBlockStorage, + IsActive: dbOS.IsActive, + DeactivationNote: dbOS.DeactivationNote, + Status: dbOS.Status, + Scope: dbOS.IpxeOsScope, + Created: dbOS.Created, + Updated: dbOS.Updated, } if dbOS.InfrastructureProviderID != nil { apiOperatingSystem.InfrastructureProviderID = cdb.GetStrPtr(dbOS.InfrastructureProviderID.String()) @@ -610,6 +822,76 @@ func NewAPIOperatingSystem(dbOS *cdbm.OperatingSystem, dbsds []cdbm.StatusDetail return &apiOperatingSystem } +// GetOperatingSystemType returns the OperatingSystem type based on the source fields. +func GetOperatingSystemType(ipxeScript, ipxeTemplateId *string) string { + if ipxeTemplateId != nil { + return cdbm.OperatingSystemTypeTemplatedIPXE + } + if ipxeScript != nil { + return cdbm.OperatingSystemTypeIPXE + } + return cdbm.OperatingSystemTypeImage +} + +// validCacheStrategies is the set of accepted CacheStrategy string values. +var validCacheStrategies = func() map[string]struct{} { + m := make(map[string]struct{}, len(cwssaws.IpxeTemplateArtifactCacheStrategy_value)) + for name := range cwssaws.IpxeTemplateArtifactCacheStrategy_value { + m[name] = struct{}{} + } + return m +}() + +func validateIpxeTemplateParameters(params []cdbm.OperatingSystemIpxeParameter) error { + for i, p := range params { + if strings.TrimSpace(p.Name) == "" { + return validation.Errors{ + "ipxeTemplateParameters": fmt.Errorf("entry %d: name is required", i), + } + } + } + return nil +} + +func validateIpxeTemplateArtifacts(artifacts []cdbm.OperatingSystemIpxeArtifact) error { + for i, a := range artifacts { + if strings.TrimSpace(a.Name) == "" { + return validation.Errors{ + "ipxeTemplateArtifacts": fmt.Errorf("entry %d: name is required", i), + } + } + if strings.TrimSpace(a.URL) == "" { + return validation.Errors{ + "ipxeTemplateArtifacts": fmt.Errorf("entry %d (%s): url is required", i, a.Name), + } + } + if _, ok := validCacheStrategies[a.CacheStrategy]; !ok { + return validation.Errors{ + "ipxeTemplateArtifacts": fmt.Errorf("entry %d (%s): cacheStrategy must be one of CACHE_AS_NEEDED, LOCAL_ONLY, CACHED_ONLY, REMOTE_ONLY", i, a.Name), + } + } + if a.AuthType != nil && *a.AuthType != "" { + at := *a.AuthType + if at != cdbm.OperatingSystemAuthTypeBasic && at != cdbm.OperatingSystemAuthTypeBearer { + return validation.Errors{ + "ipxeTemplateArtifacts": fmt.Errorf("entry %d (%s): authType must be Basic or Bearer", i, a.Name), + } + } + if a.AuthToken == nil || *a.AuthToken == "" { + return validation.Errors{ + "ipxeTemplateArtifacts": fmt.Errorf("entry %d (%s): authToken is required when authType is specified", i, a.Name), + } + } + } + if a.AuthToken != nil && *a.AuthToken != "" && (a.AuthType == nil || *a.AuthType == "") { + return validation.Errors{ + "ipxeTemplateArtifacts": fmt.Errorf("entry %d (%s): authType must be specified when authToken is provided", i, a.Name), + } + } + } + return nil +} + // APIOperatingSystemSummary is the data structure to capture API summary of an OperatingSystem type APIOperatingSystemSummary struct { // ID of the OperatingSystem diff --git a/api/pkg/api/routes.go b/api/pkg/api/routes.go index 8e9d91c94..ecdace85a 100644 --- a/api/pkg/api/routes.go +++ b/api/pkg/api/routes.go @@ -841,6 +841,17 @@ func NewAPIRoutes(dbSession *cdb.Session, tc tClient.Client, tnc tClient.Namespa Method: http.MethodGet, Handler: apiHandler.NewGetSkuHandler(dbSession, tc, cfg), }, + // iPXE Template endpoints + { + Path: apiPathPrefix + "/ipxe-template", + Method: http.MethodGet, + Handler: apiHandler.NewGetAllIpxeTemplateHandler(dbSession, tc, cfg), + }, + { + Path: apiPathPrefix + "/ipxe-template/:id", + Method: http.MethodGet, + Handler: apiHandler.NewGetIpxeTemplateHandler(dbSession, tc, cfg), + }, // Rack endpoints (RLA) { Path: apiPathPrefix + "/rack/task/:id", diff --git a/api/pkg/api/routes_test.go b/api/pkg/api/routes_test.go index f88dae68a..7f52a35e6 100644 --- a/api/pkg/api/routes_test.go +++ b/api/pkg/api/routes_test.go @@ -81,6 +81,7 @@ func TestNewAPIRoutes(t *testing.T) { "machine-validation": 11, "dpu-extension-service": 7, "sku": 2, + "ipxe-template": 2, "rack": 11, "tray": 8, "stats": 4, diff --git a/db/pkg/db/model/ipxetemplate.go b/db/pkg/db/model/ipxetemplate.go new file mode 100644 index 000000000..97b8c2aad --- /dev/null +++ b/db/pkg/db/model/ipxetemplate.go @@ -0,0 +1,389 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package model + +import ( + "context" + "database/sql" + "time" + + "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" + "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/paginator" + stracer "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/tracer" + "github.com/google/uuid" + "github.com/uptrace/bun" +) + +const ( + // IpxeTemplateRelationName is the relation name for the IpxeTemplate model + IpxeTemplateRelationName = "IpxeTemplate" + // IpxeTemplateOrderByCreated is the field name for ordering by created timestamp + IpxeTemplateOrderByCreated = "created" + // ipxeTemplateOrderByUpdated is the field name for ordering by updated timestamp + ipxeTemplateOrderByUpdated = "updated" + // IpxeTemplateOrderByName is the field name for ordering by name + IpxeTemplateOrderByName = "name" + // IpxeTemplateOrderByDefault is the default field for ordering + IpxeTemplateOrderByDefault = IpxeTemplateOrderByName + + // IpxeTemplateScopeInternal represents an internal-only template + IpxeTemplateScopeInternal = "Internal" + // IpxeTemplateScopePublic represents a public template + IpxeTemplateScopePublic = "Public" +) + +var ( + // IpxeTemplateOrderByFields is a list of valid order by fields for the IpxeTemplate model + IpxeTemplateOrderByFields = []string{IpxeTemplateOrderByCreated, ipxeTemplateOrderByUpdated, IpxeTemplateOrderByName} + // IpxeTemplateRelatedEntities is a list of valid relation by fields for the IpxeTemplate model + IpxeTemplateRelatedEntities = map[string]bool{ + SiteRelationName: true, + } +) + +// IpxeTemplate represents an iPXE script template propagated from bare-metal-manager-core +type IpxeTemplate struct { + bun.BaseModel `bun:"table:ipxe_template,alias:ipxet"` + + ID uuid.UUID `bun:"id,pk,type:uuid"` + TemplateID uuid.UUID `bun:"template_id,type:uuid,notnull"` // Stable UUID from core, consistent across all sites + SiteID uuid.UUID `bun:"site_id,type:uuid,notnull"` + Site *Site `bun:"rel:belongs-to,join:site_id=id"` + Name string `bun:"name,notnull"` + Template string `bun:"template,notnull,default:''"` + RequiredParams []string `bun:"required_params,type:text[],default:'{}'"` + ReservedParams []string `bun:"reserved_params,type:text[],default:'{}'"` + RequiredArtifacts []string `bun:"required_artifacts,type:text[],default:'{}'"` + Scope string `bun:"scope,notnull"` + Created time.Time `bun:"created,nullzero,notnull,default:current_timestamp"` + Updated time.Time `bun:"updated,nullzero,notnull,default:current_timestamp"` +} + +// IpxeTemplateCreateInput are input parameters for the Create method +type IpxeTemplateCreateInput struct { + TemplateID uuid.UUID + SiteID uuid.UUID + Name string + Template string + RequiredParams []string + ReservedParams []string + RequiredArtifacts []string + Scope string +} + +// IpxeTemplateUpdateInput are input parameters for the Update method +type IpxeTemplateUpdateInput struct { + ID uuid.UUID + Name string + Template string + RequiredParams []string + ReservedParams []string + RequiredArtifacts []string + Scope string +} + +// IpxeTemplateFilterInput are input parameters for the filter/GetAll method +type IpxeTemplateFilterInput struct { + SiteIDs []uuid.UUID + Names []string + Scopes []string +} + +var _ bun.BeforeAppendModelHook = (*IpxeTemplate)(nil) + +// BeforeAppendModel is a hook called before the model is appended to the query +func (it *IpxeTemplate) BeforeAppendModel(ctx context.Context, query bun.Query) error { + switch query.(type) { + case *bun.InsertQuery: + it.Created = db.GetCurTime() + it.Updated = db.GetCurTime() + case *bun.UpdateQuery: + it.Updated = db.GetCurTime() + } + return nil +} + +var _ bun.BeforeCreateTableHook = (*IpxeTemplate)(nil) + +// BeforeCreateTable is a hook called before the table is created +func (it *IpxeTemplate) BeforeCreateTable(ctx context.Context, query *bun.CreateTableQuery) error { + query.ForeignKey(`("site_id") REFERENCES "site" ("id")`) + return nil +} + +// IpxeTemplateDAO is an interface for interacting with the IpxeTemplate model +type IpxeTemplateDAO interface { + // Create inserts a new iPXE template row + Create(ctx context.Context, tx *db.Tx, input IpxeTemplateCreateInput) (*IpxeTemplate, error) + // Update updates an existing iPXE template row + Update(ctx context.Context, tx *db.Tx, input IpxeTemplateUpdateInput) (*IpxeTemplate, error) + // Delete removes an iPXE template row by ID + Delete(ctx context.Context, tx *db.Tx, id uuid.UUID) error + // GetAll returns all rows matching the filter and page inputs + GetAll(ctx context.Context, tx *db.Tx, filter IpxeTemplateFilterInput, page paginator.PageInput) ([]IpxeTemplate, int, error) + // Get returns the row for the specified ID + Get(ctx context.Context, tx *db.Tx, id uuid.UUID) (*IpxeTemplate, error) + // GetBySiteAndName returns the row for the specified site and template name + GetBySiteAndName(ctx context.Context, tx *db.Tx, siteID uuid.UUID, name string) (*IpxeTemplate, error) + // GetBySiteAndTemplateID returns the row for the specified site and core template ID + GetBySiteAndTemplateID(ctx context.Context, tx *db.Tx, siteID uuid.UUID, templateID uuid.UUID) (*IpxeTemplate, error) + // GetAnyByTemplateID returns any single row matching the core template ID (across all sites). + // Returns db.ErrDoesNotExist if no row exists. + GetAnyByTemplateID(ctx context.Context, tx *db.Tx, templateID uuid.UUID) (*IpxeTemplate, error) +} + +// IpxeTemplateSQLDAO is an implementation of the IpxeTemplateDAO interface +type IpxeTemplateSQLDAO struct { + dbSession *db.Session + IpxeTemplateDAO + tracerSpan *stracer.TracerSpan +} + +// Create inserts a new IpxeTemplate from the given parameters +func (itd IpxeTemplateSQLDAO) Create(ctx context.Context, tx *db.Tx, input IpxeTemplateCreateInput) (*IpxeTemplate, error) { + ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.Create") + if span != nil { + defer span.End() + } + + it := &IpxeTemplate{ + ID: uuid.New(), + TemplateID: input.TemplateID, + SiteID: input.SiteID, + Name: input.Name, + Template: input.Template, + RequiredParams: input.RequiredParams, + ReservedParams: input.ReservedParams, + RequiredArtifacts: input.RequiredArtifacts, + Scope: input.Scope, + } + + _, err := db.GetIDB(tx, itd.dbSession).NewInsert().Model(it).Exec(ctx) + if err != nil { + return nil, err + } + + return itd.Get(ctx, tx, it.ID) +} + +// Get returns an IpxeTemplate by ID +// Returns db.ErrDoesNotExist if the record is not found +func (itd IpxeTemplateSQLDAO) Get(ctx context.Context, tx *db.Tx, id uuid.UUID) (*IpxeTemplate, error) { + ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.Get") + if span != nil { + defer span.End() + itd.tracerSpan.SetAttribute(span, "id", id) + } + + it := &IpxeTemplate{} + + err := db.GetIDB(tx, itd.dbSession).NewSelect().Model(it).Where("ipxet.id = ?", id).Scan(ctx) + if err != nil { + if err == sql.ErrNoRows { + return nil, db.ErrDoesNotExist + } + return nil, err + } + + return it, nil +} + +// GetBySiteAndName returns an IpxeTemplate by site ID and template name +// Returns db.ErrDoesNotExist if the record is not found +func (itd IpxeTemplateSQLDAO) GetBySiteAndName(ctx context.Context, tx *db.Tx, siteID uuid.UUID, name string) (*IpxeTemplate, error) { + ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.GetBySiteAndName") + if span != nil { + defer span.End() + itd.tracerSpan.SetAttribute(span, "site_id", siteID) + itd.tracerSpan.SetAttribute(span, "name", name) + } + + it := &IpxeTemplate{} + + err := db.GetIDB(tx, itd.dbSession).NewSelect().Model(it). + Where("ipxet.site_id = ?", siteID). + Where("ipxet.name = ?", name). + Scan(ctx) + if err != nil { + if err == sql.ErrNoRows { + return nil, db.ErrDoesNotExist + } + return nil, err + } + + return it, nil +} + +// GetBySiteAndTemplateID returns an IpxeTemplate by site ID and core template ID +// Returns db.ErrDoesNotExist if the record is not found +func (itd IpxeTemplateSQLDAO) GetBySiteAndTemplateID(ctx context.Context, tx *db.Tx, siteID uuid.UUID, templateID uuid.UUID) (*IpxeTemplate, error) { + ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.GetBySiteAndTemplateID") + if span != nil { + defer span.End() + itd.tracerSpan.SetAttribute(span, "site_id", siteID) + itd.tracerSpan.SetAttribute(span, "template_id", templateID) + } + + it := &IpxeTemplate{} + + err := db.GetIDB(tx, itd.dbSession).NewSelect().Model(it). + Where("ipxet.site_id = ?", siteID). + Where("ipxet.template_id = ?", templateID). + Scan(ctx) + if err != nil { + if err == sql.ErrNoRows { + return nil, db.ErrDoesNotExist + } + return nil, err + } + + return it, nil +} + +// GetAnyByTemplateID returns any single row matching the core template ID across all sites. +// Returns db.ErrDoesNotExist if no row exists. +func (itd IpxeTemplateSQLDAO) GetAnyByTemplateID(ctx context.Context, tx *db.Tx, templateID uuid.UUID) (*IpxeTemplate, error) { + ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.GetAnyByTemplateID") + if span != nil { + defer span.End() + itd.tracerSpan.SetAttribute(span, "template_id", templateID) + } + + it := &IpxeTemplate{} + + err := db.GetIDB(tx, itd.dbSession).NewSelect().Model(it). + Where("ipxet.template_id = ?", templateID). + Limit(1). + Scan(ctx) + if err != nil { + if err == sql.ErrNoRows { + return nil, db.ErrDoesNotExist + } + return nil, err + } + + return it, nil +} + +// setQueryWithFilter populates the lookup query based on the specified filter +func (itd IpxeTemplateSQLDAO) setQueryWithFilter(filter IpxeTemplateFilterInput, query *bun.SelectQuery, span *stracer.CurrentContextSpan) (*bun.SelectQuery, error) { + if len(filter.SiteIDs) > 0 { + query = query.Where("ipxet.site_id IN (?)", bun.In(filter.SiteIDs)) + if span != nil { + itd.tracerSpan.SetAttribute(span, "site_ids", filter.SiteIDs) + } + } + + if len(filter.Names) > 0 { + query = query.Where("ipxet.name IN (?)", bun.In(filter.Names)) + if span != nil { + itd.tracerSpan.SetAttribute(span, "names", filter.Names) + } + } + + if len(filter.Scopes) > 0 { + query = query.Where("ipxet.scope IN (?)", bun.In(filter.Scopes)) + if span != nil { + itd.tracerSpan.SetAttribute(span, "scopes", filter.Scopes) + } + } + + return query, nil +} + +// GetAll returns all IpxeTemplates with optional filters +// If orderBy is nil, records are ordered by IpxeTemplateOrderByDefault in ascending order +func (itd IpxeTemplateSQLDAO) GetAll(ctx context.Context, tx *db.Tx, filter IpxeTemplateFilterInput, page paginator.PageInput) ([]IpxeTemplate, int, error) { + ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.GetAll") + if span != nil { + defer span.End() + } + + templates := []IpxeTemplate{} + + query := db.GetIDB(tx, itd.dbSession).NewSelect().Model(&templates) + + query, err := itd.setQueryWithFilter(filter, query, span) + if err != nil { + return templates, 0, err + } + + if page.OrderBy == nil { + page.OrderBy = paginator.NewDefaultOrderBy(IpxeTemplateOrderByDefault) + } + + pager, err := paginator.NewPaginator(ctx, query, page.Offset, page.Limit, page.OrderBy, IpxeTemplateOrderByFields) + if err != nil { + return nil, 0, err + } + + err = pager.Query.Limit(pager.Limit).Offset(pager.Offset).Scan(ctx) + if err != nil { + return nil, 0, err + } + + return templates, pager.Total, nil +} + +// Update updates specified fields of an existing IpxeTemplate +func (itd IpxeTemplateSQLDAO) Update(ctx context.Context, tx *db.Tx, input IpxeTemplateUpdateInput) (*IpxeTemplate, error) { + ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.Update") + if span != nil { + defer span.End() + itd.tracerSpan.SetAttribute(span, "id", input.ID) + } + + it := &IpxeTemplate{ID: input.ID} + updatedFields := []string{"name", "template", "required_params", "reserved_params", "required_artifacts", "scope", "updated"} + + it.Name = input.Name + it.Template = input.Template + it.RequiredParams = input.RequiredParams + it.ReservedParams = input.ReservedParams + it.RequiredArtifacts = input.RequiredArtifacts + it.Scope = input.Scope + + _, err := db.GetIDB(tx, itd.dbSession).NewUpdate().Model(it).Column(updatedFields...).Where("ipxet.id = ?", input.ID).Exec(ctx) + if err != nil { + return nil, err + } + + return itd.Get(ctx, tx, it.ID) +} + +// Delete removes an IpxeTemplate by ID +func (itd IpxeTemplateSQLDAO) Delete(ctx context.Context, tx *db.Tx, id uuid.UUID) error { + ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.Delete") + if span != nil { + defer span.End() + itd.tracerSpan.SetAttribute(span, "id", id) + } + + it := &IpxeTemplate{ID: id} + + _, err := db.GetIDB(tx, itd.dbSession).NewDelete().Model(it).Where("id = ?", id).Exec(ctx) + return err +} + +// NewIpxeTemplateDAO returns a new IpxeTemplateDAO +func NewIpxeTemplateDAO(dbSession *db.Session) IpxeTemplateDAO { + return &IpxeTemplateSQLDAO{ + dbSession: dbSession, + tracerSpan: stracer.NewTracerSpan(), + } +} diff --git a/db/pkg/db/model/ipxetemplate_test.go b/db/pkg/db/model/ipxetemplate_test.go new file mode 100644 index 000000000..b5ed6cfc2 --- /dev/null +++ b/db/pkg/db/model/ipxetemplate_test.go @@ -0,0 +1,371 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package model + +import ( + "context" + "testing" + + "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" + "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/paginator" + "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/util" + "github.com/google/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func testIpxeTemplateSetupSchema(t *testing.T, dbSession *db.Session) { + ctx := context.Background() + require.Nil(t, dbSession.DB.ResetModel(ctx, (*User)(nil))) + require.Nil(t, dbSession.DB.ResetModel(ctx, (*InfrastructureProvider)(nil))) + require.Nil(t, dbSession.DB.ResetModel(ctx, (*Site)(nil))) + require.Nil(t, dbSession.DB.ResetModel(ctx, (*IpxeTemplate)(nil))) + + // Add unique constraint on (site_id, name). This is applied by migration 20260306120000_ipxe_template.go + // in production; tests use ResetModel so we add it here to match. + _, err := dbSession.DB.Exec("ALTER TABLE ipxe_template DROP CONSTRAINT IF EXISTS ipxe_template_site_id_name_key") + require.Nil(t, err) + _, err = dbSession.DB.Exec("ALTER TABLE ipxe_template ADD CONSTRAINT ipxe_template_site_id_name_key UNIQUE (site_id, name)") + require.Nil(t, err) +} + +func testIpxeTemplateInitDB(t *testing.T) *db.Session { + return util.GetTestDBSession(t, false) +} + +func testIpxeTemplateCreate(ctx context.Context, t *testing.T, dao IpxeTemplateDAO, siteID uuid.UUID, name, scope string) *IpxeTemplate { + tmpl, err := dao.Create(ctx, nil, IpxeTemplateCreateInput{ + TemplateID: uuid.New(), + SiteID: siteID, + Name: name, + RequiredParams: []string{"kernel_params"}, + ReservedParams: []string{"base_url", "console"}, + RequiredArtifacts: []string{"kernel", "initrd"}, + Scope: scope, + }) + require.NoError(t, err) + require.NotNil(t, tmpl) + return tmpl +} + +func TestIpxeTemplateSQLDAO_Create(t *testing.T) { + ctx := context.Background() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + testIpxeTemplateSetupSchema(t, dbSession) + + user := TestBuildUser(t, dbSession, "test-user", "test-org", []string{"admin"}) + ip := TestBuildInfrastructureProvider(t, dbSession, "test-provider", "test-org", user) + site := TestBuildSite(t, dbSession, ip, "test-site", user) + + dao := NewIpxeTemplateDAO(dbSession) + + tests := []struct { + desc string + input IpxeTemplateCreateInput + expectError bool + }{ + { + desc: "create public template", + input: IpxeTemplateCreateInput{ + TemplateID: uuid.New(), + SiteID: site.ID, + Name: "kernel-initrd", + RequiredParams: []string{"kernel_params"}, + ReservedParams: []string{"base_url", "console"}, + RequiredArtifacts: []string{"kernel", "initrd"}, + Scope: IpxeTemplateScopePublic, + }, + }, + { + desc: "create internal template", + input: IpxeTemplateCreateInput{ + TemplateID: uuid.New(), + SiteID: site.ID, + Name: "discovery-scout-x86_64", + RequiredParams: []string{"mac", "cli_cmd", "machine_id", "server_uri"}, + ReservedParams: []string{"base_url"}, + RequiredArtifacts: []string{}, + Scope: IpxeTemplateScopeInternal, + }, + }, + } + + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + tmpl, err := dao.Create(ctx, nil, tc.input) + assert.Equal(t, tc.expectError, err != nil) + if !tc.expectError { + require.NotNil(t, tmpl) + assert.NotEqual(t, uuid.Nil, tmpl.ID) + assert.Equal(t, tc.input.SiteID, tmpl.SiteID) + assert.Equal(t, tc.input.Name, tmpl.Name) + assert.Equal(t, tc.input.Scope, tmpl.Scope) + assert.Equal(t, tc.input.RequiredParams, tmpl.RequiredParams) + assert.Equal(t, tc.input.ReservedParams, tmpl.ReservedParams) + assert.Equal(t, tc.input.RequiredArtifacts, tmpl.RequiredArtifacts) + } + }) + } +} + +func TestIpxeTemplateSQLDAO_Get(t *testing.T) { + ctx := context.Background() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + testIpxeTemplateSetupSchema(t, dbSession) + + user := TestBuildUser(t, dbSession, "test-user", "test-org", []string{"admin"}) + ip := TestBuildInfrastructureProvider(t, dbSession, "test-provider", "test-org", user) + site := TestBuildSite(t, dbSession, ip, "test-site", user) + + dao := NewIpxeTemplateDAO(dbSession) + created := testIpxeTemplateCreate(ctx, t, dao, site.ID, "kernel-initrd", IpxeTemplateScopePublic) + + tests := []struct { + desc string + id uuid.UUID + expectError bool + }{ + {desc: "existing template", id: created.ID}, + {desc: "not found", id: uuid.New(), expectError: true}, + } + + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + got, err := dao.Get(ctx, nil, tc.id) + assert.Equal(t, tc.expectError, err != nil) + if !tc.expectError { + require.NotNil(t, got) + assert.Equal(t, tc.id, got.ID) + assert.Equal(t, "kernel-initrd", got.Name) + } + }) + } +} + +func TestIpxeTemplateSQLDAO_GetBySiteAndName(t *testing.T) { + ctx := context.Background() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + testIpxeTemplateSetupSchema(t, dbSession) + + user := TestBuildUser(t, dbSession, "test-user", "test-org", []string{"admin"}) + ip := TestBuildInfrastructureProvider(t, dbSession, "test-provider", "test-org", user) + site := TestBuildSite(t, dbSession, ip, "test-site", user) + + dao := NewIpxeTemplateDAO(dbSession) + testIpxeTemplateCreate(ctx, t, dao, site.ID, "ubuntu-autoinstall", IpxeTemplateScopePublic) + + tests := []struct { + desc string + siteID uuid.UUID + name string + expectError bool + }{ + {desc: "existing template", siteID: site.ID, name: "ubuntu-autoinstall"}, + {desc: "wrong name", siteID: site.ID, name: "does-not-exist", expectError: true}, + {desc: "wrong site", siteID: uuid.New(), name: "ubuntu-autoinstall", expectError: true}, + } + + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + got, err := dao.GetBySiteAndName(ctx, nil, tc.siteID, tc.name) + assert.Equal(t, tc.expectError, err != nil) + if !tc.expectError { + require.NotNil(t, got) + assert.Equal(t, tc.name, got.Name) + assert.Equal(t, tc.siteID, got.SiteID) + } + }) + } +} + +func TestIpxeTemplateSQLDAO_GetAll(t *testing.T) { + ctx := context.Background() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + testIpxeTemplateSetupSchema(t, dbSession) + + user := TestBuildUser(t, dbSession, "test-user", "test-org", []string{"admin"}) + ip := TestBuildInfrastructureProvider(t, dbSession, "test-provider", "test-org", user) + site := TestBuildSite(t, dbSession, ip, "test-site", user) + + dao := NewIpxeTemplateDAO(dbSession) + testIpxeTemplateCreate(ctx, t, dao, site.ID, "kernel-initrd", IpxeTemplateScopePublic) + testIpxeTemplateCreate(ctx, t, dao, site.ID, "ubuntu-autoinstall", IpxeTemplateScopePublic) + testIpxeTemplateCreate(ctx, t, dao, site.ID, "discovery-scout-x86_64", IpxeTemplateScopeInternal) + + tests := []struct { + desc string + filter IpxeTemplateFilterInput + page paginator.PageInput + expectedCount int + expectedTotal *int + }{ + {desc: "no filter returns all", expectedCount: 3, expectedTotal: db.GetIntPtr(3)}, + {desc: "filter by site", filter: IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site.ID}}, expectedCount: 3}, + {desc: "filter by name", filter: IpxeTemplateFilterInput{Names: []string{"kernel-initrd"}}, expectedCount: 1}, + {desc: "filter by scope public", filter: IpxeTemplateFilterInput{Scopes: []string{IpxeTemplateScopePublic}}, expectedCount: 2}, + {desc: "filter by scope internal", filter: IpxeTemplateFilterInput{Scopes: []string{IpxeTemplateScopeInternal}}, expectedCount: 1}, + {desc: "limit applies", page: paginator.PageInput{Offset: db.GetIntPtr(0), Limit: db.GetIntPtr(2)}, expectedCount: 2, expectedTotal: db.GetIntPtr(3)}, + {desc: "offset applies", page: paginator.PageInput{Offset: db.GetIntPtr(1)}, expectedCount: 2, expectedTotal: db.GetIntPtr(3)}, + {desc: "unknown site returns empty", filter: IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{uuid.New()}}, expectedCount: 0}, + } + + for _, tc := range tests { + t.Run(tc.desc, func(t *testing.T) { + got, total, err := dao.GetAll(ctx, nil, tc.filter, tc.page) + require.NoError(t, err) + assert.Equal(t, tc.expectedCount, len(got)) + if tc.expectedTotal != nil { + assert.Equal(t, *tc.expectedTotal, total) + } + }) + } +} + +func TestIpxeTemplateSQLDAO_Update(t *testing.T) { + ctx := context.Background() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + testIpxeTemplateSetupSchema(t, dbSession) + + user := TestBuildUser(t, dbSession, "test-user", "test-org", []string{"admin"}) + ip := TestBuildInfrastructureProvider(t, dbSession, "test-provider", "test-org", user) + site := TestBuildSite(t, dbSession, ip, "test-site", user) + + dao := NewIpxeTemplateDAO(dbSession) + created := testIpxeTemplateCreate(ctx, t, dao, site.ID, "kernel-initrd", IpxeTemplateScopeInternal) + + // Update scope and params + updated, err := dao.Update(ctx, nil, IpxeTemplateUpdateInput{ + ID: created.ID, + Name: "kernel-initrd", + RequiredParams: []string{"kernel_params", "extra_option"}, + ReservedParams: []string{"base_url"}, + RequiredArtifacts: []string{"kernel"}, + Scope: IpxeTemplateScopePublic, + }) + require.NoError(t, err) + require.NotNil(t, updated) + + assert.Equal(t, created.ID, updated.ID) + assert.Equal(t, IpxeTemplateScopePublic, updated.Scope) + assert.Equal(t, []string{"kernel_params", "extra_option"}, updated.RequiredParams) + assert.Equal(t, []string{"base_url"}, updated.ReservedParams) + assert.Equal(t, []string{"kernel"}, updated.RequiredArtifacts) + // Name and SiteID should be unchanged + assert.Equal(t, "kernel-initrd", updated.Name) + assert.Equal(t, site.ID, updated.SiteID) +} + +func TestIpxeTemplateSQLDAO_Delete(t *testing.T) { + ctx := context.Background() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + testIpxeTemplateSetupSchema(t, dbSession) + + user := TestBuildUser(t, dbSession, "test-user", "test-org", []string{"admin"}) + ip := TestBuildInfrastructureProvider(t, dbSession, "test-provider", "test-org", user) + site := TestBuildSite(t, dbSession, ip, "test-site", user) + + dao := NewIpxeTemplateDAO(dbSession) + t1 := testIpxeTemplateCreate(ctx, t, dao, site.ID, "kernel-initrd", IpxeTemplateScopePublic) + testIpxeTemplateCreate(ctx, t, dao, site.ID, "ubuntu-autoinstall", IpxeTemplateScopePublic) + + // Delete existing + err := dao.Delete(ctx, nil, t1.ID) + require.NoError(t, err) + + // Verify it's gone + _, err = dao.Get(ctx, nil, t1.ID) + assert.ErrorIs(t, err, db.ErrDoesNotExist) + + // The other template is unaffected + remaining, total, err := dao.GetAll(ctx, nil, IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site.ID}}, paginator.PageInput{}) + require.NoError(t, err) + assert.Equal(t, 1, total) + assert.Equal(t, "ubuntu-autoinstall", remaining[0].Name) + + // Delete non-existing ID is a no-op (no error) + err = dao.Delete(ctx, nil, uuid.New()) + assert.NoError(t, err) +} + +func TestIpxeTemplateSQLDAO_UniqueConstraint(t *testing.T) { + ctx := context.Background() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + testIpxeTemplateSetupSchema(t, dbSession) + + user := TestBuildUser(t, dbSession, "test-user", "test-org", []string{"admin"}) + ip := TestBuildInfrastructureProvider(t, dbSession, "test-provider", "test-org", user) + site := TestBuildSite(t, dbSession, ip, "test-site", user) + + dao := NewIpxeTemplateDAO(dbSession) + testIpxeTemplateCreate(ctx, t, dao, site.ID, "kernel-initrd", IpxeTemplateScopePublic) + + // Creating the same (name, site) again should fail + _, err := dao.Create(ctx, nil, IpxeTemplateCreateInput{ + TemplateID: uuid.New(), + SiteID: site.ID, + Name: "kernel-initrd", + Scope: IpxeTemplateScopePublic, + }) + assert.Error(t, err) + + // Same name for a different site is allowed + site2 := TestBuildSite(t, dbSession, ip, "test-site-2", user) + _, err = dao.Create(ctx, nil, IpxeTemplateCreateInput{ + TemplateID: uuid.New(), + SiteID: site2.ID, + Name: "kernel-initrd", + Scope: IpxeTemplateScopePublic, + }) + assert.NoError(t, err) +} + +func TestIpxeTemplateSQLDAO_DefaultArrayFields(t *testing.T) { + ctx := context.Background() + dbSession := testIpxeTemplateInitDB(t) + defer dbSession.Close() + testIpxeTemplateSetupSchema(t, dbSession) + + user := TestBuildUser(t, dbSession, "test-user", "test-org", []string{"admin"}) + ip := TestBuildInfrastructureProvider(t, dbSession, "test-provider", "test-org", user) + site := TestBuildSite(t, dbSession, ip, "test-site", user) + + dao := NewIpxeTemplateDAO(dbSession) + + // Create with no params/artifacts + created, err := dao.Create(ctx, nil, IpxeTemplateCreateInput{ + TemplateID: uuid.New(), + SiteID: site.ID, + Name: "ipxe-shell", + Scope: IpxeTemplateScopeInternal, + }) + require.NoError(t, err) + + // Retrieve and verify empty arrays are not nil + retrieved, err := dao.Get(ctx, nil, created.ID) + require.NoError(t, err) + assert.NotNil(t, retrieved.RequiredParams) + assert.NotNil(t, retrieved.ReservedParams) + assert.NotNil(t, retrieved.RequiredArtifacts) +} diff --git a/db/pkg/db/model/operatingsystem.go b/db/pkg/db/model/operatingsystem.go index f9147e802..4758b2942 100644 --- a/db/pkg/db/model/operatingsystem.go +++ b/db/pkg/db/model/operatingsystem.go @@ -49,8 +49,17 @@ const ( // OperatingSystemRelationName is the relation name for the OperatingSystem model OperatingSystemRelationName = "OperatingSystem" - // OperatingSystemTypeIPXE is the ipxe based OperatingSystem type + + // OperatingSystemScopeLocal is the default scope: single site, bidirectional sync, most-recently-updated wins. + OperatingSystemScopeLocal = "Local" + // OperatingSystemScopeLimited means carbide-rest is the source of truth for a fixed list of sites. + OperatingSystemScopeLimited = "Limited" + // OperatingSystemScopeGlobal means carbide-rest is the source of truth for all provider sites. + OperatingSystemScopeGlobal = "Global" + // OperatingSystemTypeIPXE is the raw iPXE script based OperatingSystem type OperatingSystemTypeIPXE = "iPXE" + // OperatingSystemTypeTemplatedIPXE is the iPXE template based OperatingSystem type + OperatingSystemTypeTemplatedIPXE = "Templated iPXE" // OperatingSystemTypeImage is the image based OperatingSystem type OperatingSystemTypeImage = "Image" @@ -83,136 +92,196 @@ var ( } //OperatingSystemsTypeMap is a list of valid type for the OperatingSystem model OperatingSystemsTypeMap = map[string]bool{ - OperatingSystemTypeIPXE: true, - OperatingSystemTypeImage: true, + OperatingSystemTypeIPXE: true, + OperatingSystemTypeTemplatedIPXE: true, + OperatingSystemTypeImage: true, } ) +// IsIPXEType returns true if the given OS type is any iPXE variant (raw script or templated). +func IsIPXEType(osType string) bool { + return osType == OperatingSystemTypeIPXE || osType == OperatingSystemTypeTemplatedIPXE +} + +// OperatingSystemIpxeParameter holds a single iPXE parameter name/value pair (stored as JSONB). +// These are only populated for iPXE-based OS definitions synced from carbide-core. +type OperatingSystemIpxeParameter struct { + Name string `json:"name"` + Value string `json:"value"` +} + +// OperatingSystemIpxeArtifact holds a single iPXE artifact descriptor (stored as JSONB). +// These are only populated for iPXE-based OS definitions synced from carbide-core. +type OperatingSystemIpxeArtifact struct { + Name string `json:"name"` + URL string `json:"url"` + SHA *string `json:"sha,omitempty"` + AuthType *string `json:"authType,omitempty"` + AuthToken *string `json:"authToken,omitempty"` + CacheStrategy string `json:"cacheStrategy"` + CachedURL *string `json:"cached_url,omitempty"` +} + // OperatingSystem describes the attributes of the operating system // that can be used on instances type OperatingSystem struct { bun.BaseModel `bun:"table:operating_system,alias:os"` - ID uuid.UUID `bun:"type:uuid,pk"` - Name string `bun:"name,notnull"` - Description *string `bun:"description"` - Org string `bun:"org,notnull"` - InfrastructureProviderID *uuid.UUID `bun:"infrastructure_provider_id,type:uuid"` - InfrastructureProvider *InfrastructureProvider `bun:"rel:belongs-to,join:infrastructure_provider_id=id"` - TenantID *uuid.UUID `bun:"tenant_id,type:uuid"` - Tenant *Tenant `bun:"rel:belongs-to,join:tenant_id=id"` - ControllerOperatingSystemID *uuid.UUID `bun:"controller_operating_system_id,type:uuid"` - Version *string `bun:"version"` - Type string `bun:"type,notnull"` - ImageURL *string `bun:"image_url"` - ImageSHA *string `bun:"image_sha"` - ImageAuthType *string `bun:"image_auth_type"` - ImageAuthToken *string `bun:"image_auth_token"` - ImageDisk *string `bun:"image_disk"` - RootFsID *string `bun:"root_fs_id"` - RootFsLabel *string `bun:"root_fs_label"` - IpxeScript *string `bun:"ipxe_script"` - UserData *string `bun:"user_data"` - IsCloudInit bool `bun:"is_cloud_init,notnull"` - AllowOverride bool `bun:"allow_override,notnull"` - EnableBlockStorage bool `bun:"enable_block_storage,notnull"` - PhoneHomeEnabled bool `bun:"phone_home_enabled,notnull"` - IsActive bool `bun:"is_active,notnull"` - DeactivationNote *string `bun:"deactivation_note"` // Note for deactivation, if any - Status string `bun:"status,notnull"` - Created time.Time `bun:"created,nullzero,notnull,default:current_timestamp"` - Updated time.Time `bun:"updated,nullzero,notnull,default:current_timestamp"` - Deleted *time.Time `bun:"deleted,soft_delete"` - CreatedBy uuid.UUID `bun:"type:uuid,notnull"` + ID uuid.UUID `bun:"type:uuid,pk"` + Name string `bun:"name,notnull"` + Description *string `bun:"description"` + Org string `bun:"org,notnull"` + InfrastructureProviderID *uuid.UUID `bun:"infrastructure_provider_id,type:uuid"` + InfrastructureProvider *InfrastructureProvider `bun:"rel:belongs-to,join:infrastructure_provider_id=id"` + TenantID *uuid.UUID `bun:"tenant_id,type:uuid"` + Tenant *Tenant `bun:"rel:belongs-to,join:tenant_id=id"` + Version *string `bun:"version"` + Type string `bun:"type,notnull"` + ImageURL *string `bun:"image_url"` + ImageSHA *string `bun:"image_sha"` + ImageAuthType *string `bun:"image_auth_type"` + ImageAuthToken *string `bun:"image_auth_token"` + ImageDisk *string `bun:"image_disk"` + RootFsID *string `bun:"root_fs_id"` + RootFsLabel *string `bun:"root_fs_label"` + IpxeScript *string `bun:"ipxe_script"` + // iPXE fields populated for OS definitions synced from carbide-core (type = iPXE) + IpxeTemplateId *string `bun:"ipxe_template_id"` + IpxeTemplateParameters []OperatingSystemIpxeParameter `bun:"ipxe_template_parameters,type:jsonb"` + IpxeTemplateArtifacts []OperatingSystemIpxeArtifact `bun:"ipxe_template_artifacts,type:jsonb"` + IpxeTemplateDefinitionHash *string `bun:"ipxe_template_definition_hash"` + // IpxeOsScope controls synchronization direction between carbide-rest and carbide-core. + // Nil / "Local" means bidirectional (most-recently-updated wins). + // "Global" and "Limited" mean carbide-rest is the source of truth. + // Only valid for Templated iPXE Operating Systems. + IpxeOsScope *string `bun:"ipxe_os_scope"` + UserData *string `bun:"user_data"` + IsCloudInit bool `bun:"is_cloud_init,notnull"` + AllowOverride bool `bun:"allow_override,notnull"` + EnableBlockStorage bool `bun:"enable_block_storage,notnull"` + PhoneHomeEnabled bool `bun:"phone_home_enabled,notnull"` + IsActive bool `bun:"is_active,notnull"` + DeactivationNote *string `bun:"deactivation_note"` // Note for deactivation, if any + Status string `bun:"status,notnull"` + Created time.Time `bun:"created,nullzero,notnull,default:current_timestamp"` + Updated time.Time `bun:"updated,nullzero,notnull,default:current_timestamp"` + Deleted *time.Time `bun:"deleted,soft_delete"` + CreatedBy uuid.UUID `bun:"type:uuid,notnull"` } // OperatingSystemCreateInput input parameters for Create method type OperatingSystemCreateInput struct { - Name string - Description *string - Org string - InfrastructureProviderID *uuid.UUID - TenantID *uuid.UUID - ControllerOperatingSystemID *uuid.UUID - Version *string - OsType string - ImageURL *string - ImageSHA *string - ImageAuthType *string - ImageAuthToken *string - ImageDisk *string - RootFsId *string - RootFsLabel *string - IpxeScript *string - UserData *string - IsCloudInit bool - AllowOverride bool - EnableBlockStorage bool - PhoneHomeEnabled bool - Status string - CreatedBy uuid.UUID + // ID optionally pre-specifies the primary key. When set (e.g. during inventory sync from + // carbide-core), the same UUID is used on both sides. When zero, a new UUID is generated. + ID uuid.UUID + Name string + Description *string + Org string + InfrastructureProviderID *uuid.UUID + TenantID *uuid.UUID + Version *string + OsType string + ImageURL *string + ImageSHA *string + ImageAuthType *string + ImageAuthToken *string + ImageDisk *string + RootFsId *string + RootFsLabel *string + IpxeScript *string + UserData *string + IsCloudInit bool + AllowOverride bool + EnableBlockStorage bool + PhoneHomeEnabled bool + // iPXE definition fields (for carbide-core synced iPXE OS definitions) + IpxeTemplateId *string + IpxeTemplateParameters []OperatingSystemIpxeParameter + IpxeTemplateArtifacts []OperatingSystemIpxeArtifact + IpxeOSHash *string + IpxeOsScope *string + Status string + CreatedBy uuid.UUID } // OperatingSystemUpdateInput input parameters for Update method type OperatingSystemUpdateInput struct { - OperatingSystemId uuid.UUID - Name *string - Description *string - Org *string - InfrastructureProviderID *uuid.UUID - TenantID *uuid.UUID - ControllerOperatingSystemID *uuid.UUID - Version *string - OsType *string - ImageURL *string - ImageSHA *string - ImageAuthType *string - ImageAuthToken *string - ImageDisk *string - RootFsId *string - RootFsLabel *string - IpxeScript *string - UserData *string - IsCloudInit *bool - AllowOverride *bool - EnableBlockStorage *bool - PhoneHomeEnabled *bool - IsActive *bool - DeactivationNote *string - Status *string + OperatingSystemId uuid.UUID + Name *string + Description *string + Org *string + InfrastructureProviderID *uuid.UUID + TenantID *uuid.UUID + Version *string + OsType *string + ImageURL *string + ImageSHA *string + ImageAuthType *string + ImageAuthToken *string + ImageDisk *string + RootFsId *string + RootFsLabel *string + IpxeScript *string + UserData *string + IsCloudInit *bool + AllowOverride *bool + EnableBlockStorage *bool + PhoneHomeEnabled *bool + IsActive *bool + DeactivationNote *string + // iPXE definition fields (for carbide-core synced iPXE OS definitions) + IpxeTemplateId *string + IpxeTemplateParameters *[]OperatingSystemIpxeParameter + IpxeTemplateArtifacts *[]OperatingSystemIpxeArtifact + IpxeOSHash *string + Scope *string + Status *string } // OperatingSystemClearInput input parameters for Clear method type OperatingSystemClearInput struct { - OperatingSystemId uuid.UUID - Description bool - InfrastructureProviderID bool - TenantID bool - ControllerOperatingSystemID bool - Version bool - ImageURL bool - ImageSHA bool - ImageAuthType bool - ImageAuthToken bool - ImageDisk bool - RootFsId bool - RootFsLabel bool - IpxeScript bool - UserData bool - DeactivationNote bool + OperatingSystemId uuid.UUID + Description bool + InfrastructureProviderID bool + TenantID bool + Version bool + ImageURL bool + ImageSHA bool + ImageAuthType bool + ImageAuthToken bool + ImageDisk bool + RootFsId bool + RootFsLabel bool + IpxeScript bool + UserData bool + DeactivationNote bool + IpxeTemplateId bool + IpxeTemplateParameters bool + IpxeTemplateArtifacts bool + IpxeOSHash bool + Scope bool } type OperatingSystemFilterInput struct { InfrastructureProviderID *uuid.UUID TenantIDs []uuid.UUID - SiteIDs []uuid.UUID - Names []string - Orgs []string - OsTypes []string - Statuses []string - SearchQuery *string - OperatingSystemIds []uuid.UUID - IsActive *bool + // InfrastructureProviderIDs, when set together with TenantIDs, widens the result set with + // an OR: the query returns OSes owned by any of the given tenants OR any of the given providers. + // When used alone (without TenantIDs) it is an AND filter like the other fields. + InfrastructureProviderIDs []uuid.UUID + SiteIDs []uuid.UUID + Names []string + Orgs []string + OsTypes []string + Statuses []string + SearchQuery *string + OperatingSystemIds []uuid.UUID + IsActive *bool + // Scopes filters by the scope field (e.g. "Global", "Limited", "Local"). + Scopes []string + // IncludeDeleted includes soft-deleted records in the result. + // Used by the inventory sync to detect and propagate deletions from carbide-core. + IncludeDeleted bool } var _ bun.BeforeAppendModelHook = (*OperatingSystem)(nil) @@ -274,34 +343,42 @@ func (ossd OperatingSystemSQLDAO) Create(ctx context.Context, tx *db.Tx, input O ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "name", input.Name) } + id := input.ID + if id == uuid.Nil { + id = uuid.New() + } os := &OperatingSystem{ - ID: uuid.New(), - Name: input.Name, - Description: input.Description, - Org: input.Org, - InfrastructureProviderID: input.InfrastructureProviderID, - TenantID: input.TenantID, - ControllerOperatingSystemID: input.ControllerOperatingSystemID, - Version: input.Version, - Type: input.OsType, - ImageURL: input.ImageURL, - ImageSHA: input.ImageSHA, - ImageAuthType: input.ImageAuthType, - ImageAuthToken: input.ImageAuthToken, - ImageDisk: input.ImageDisk, - RootFsID: input.RootFsId, - RootFsLabel: input.RootFsLabel, - IpxeScript: input.IpxeScript, - UserData: input.UserData, - IsCloudInit: input.IsCloudInit, - AllowOverride: input.AllowOverride, - EnableBlockStorage: input.EnableBlockStorage, - PhoneHomeEnabled: input.PhoneHomeEnabled, + ID: id, + Name: input.Name, + Description: input.Description, + Org: input.Org, + InfrastructureProviderID: input.InfrastructureProviderID, + TenantID: input.TenantID, + Version: input.Version, + Type: input.OsType, + ImageURL: input.ImageURL, + ImageSHA: input.ImageSHA, + ImageAuthType: input.ImageAuthType, + ImageAuthToken: input.ImageAuthToken, + ImageDisk: input.ImageDisk, + RootFsID: input.RootFsId, + RootFsLabel: input.RootFsLabel, + IpxeScript: input.IpxeScript, + UserData: input.UserData, + IsCloudInit: input.IsCloudInit, + AllowOverride: input.AllowOverride, + EnableBlockStorage: input.EnableBlockStorage, + PhoneHomeEnabled: input.PhoneHomeEnabled, // WARNING: there is a bug in 'bun' and we cannot use non-nullable AND default=true at this time: - IsActive: true, // input.IsActive, - DeactivationNote: nil, //input.DeactivationNote, - Status: input.Status, - CreatedBy: input.CreatedBy, + IsActive: true, // input.IsActive, + DeactivationNote: nil, //input.DeactivationNote, + Status: input.Status, + CreatedBy: input.CreatedBy, + IpxeTemplateId: input.IpxeTemplateId, + IpxeTemplateParameters: input.IpxeTemplateParameters, + IpxeTemplateArtifacts: input.IpxeTemplateArtifacts, + IpxeTemplateDefinitionHash: input.IpxeOSHash, + IpxeOsScope: input.IpxeOsScope, } _, err := db.GetIDB(tx, ossd.dbSession).NewInsert().Model(os).Exec(ctx) @@ -379,9 +456,23 @@ func (ossd OperatingSystemSQLDAO) GetAll(ctx context.Context, tx *db.Tx, filter query = query.Where("os.infrastructure_provider_id = ?", *filter.InfrastructureProviderID) ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "infrastructure_provider_id", filter.InfrastructureProviderID.String()) } - if filter.TenantIDs != nil { + // When both TenantIDs and InfrastructureProviderIDs are set, widen the result with OR so that + // tenant admins and provider admins can see all OSes belonging to either their tenant or their + // provider. When only TenantIDs is set it behaves as a plain AND filter (legacy behaviour). + switch { + case len(filter.TenantIDs) > 0 && len(filter.InfrastructureProviderIDs) > 0: + query = query.WhereGroup(" AND ", func(q *bun.SelectQuery) *bun.SelectQuery { + return q. + Where("os.tenant_id IN (?)", bun.In(filter.TenantIDs)). + WhereOr("os.infrastructure_provider_id IN (?)", bun.In(filter.InfrastructureProviderIDs)) + }) + ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "tenant_or_provider", filter.TenantIDs) + case len(filter.TenantIDs) > 0: query = query.Where("os.tenant_id IN (?)", bun.In(filter.TenantIDs)) ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "tenant_id", filter.TenantIDs) + case len(filter.InfrastructureProviderIDs) > 0: + query = query.Where("os.infrastructure_provider_id IN (?)", bun.In(filter.InfrastructureProviderIDs)) + ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "infrastructure_provider_ids", filter.InfrastructureProviderIDs) } if filter.OsTypes != nil { query = query.Where("os.type IN (?)", bun.In(filter.OsTypes)) @@ -417,6 +508,13 @@ func (ossd OperatingSystemSQLDAO) GetAll(ctx context.Context, tx *db.Tx, filter query = query.Where("os.is_active = ?", *filter.IsActive) ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "is_active", *filter.IsActive) } + if filter.Scopes != nil { + query = query.Where("COALESCE(os.ipxe_os_scope, 'Local') IN (?)", bun.In(filter.Scopes)) + ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "scopes", filter.Scopes) + } + if filter.IncludeDeleted { + query = query.WhereAllWithDeleted() + } for _, relation := range includeRelations { query = query.Relation(relation) @@ -483,11 +581,6 @@ func (ossd OperatingSystemSQLDAO) Update(ctx context.Context, tx *db.Tx, input O updatedFields = append(updatedFields, "tenant_id") ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "tenant_id", input.TenantID.String()) } - if input.ControllerOperatingSystemID != nil { - it.ControllerOperatingSystemID = input.ControllerOperatingSystemID - updatedFields = append(updatedFields, "controller_operating_system_id") - ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "controller_operating_system_id", input.ControllerOperatingSystemID.String()) - } if input.Version != nil { it.Version = input.Version updatedFields = append(updatedFields, "version") @@ -578,6 +671,26 @@ func (ossd OperatingSystemSQLDAO) Update(ctx context.Context, tx *db.Tx, input O updatedFields = append(updatedFields, "status") ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "status", *input.Status) } + if input.IpxeTemplateId != nil { + it.IpxeTemplateId = input.IpxeTemplateId + updatedFields = append(updatedFields, "ipxe_template_id") + } + if input.IpxeTemplateParameters != nil { + it.IpxeTemplateParameters = *input.IpxeTemplateParameters + updatedFields = append(updatedFields, "ipxe_template_parameters") + } + if input.IpxeTemplateArtifacts != nil { + it.IpxeTemplateArtifacts = *input.IpxeTemplateArtifacts + updatedFields = append(updatedFields, "ipxe_template_artifacts") + } + if input.IpxeOSHash != nil { + it.IpxeTemplateDefinitionHash = input.IpxeOSHash + updatedFields = append(updatedFields, "ipxe_template_definition_hash") + } + if input.Scope != nil { + it.IpxeOsScope = input.Scope + updatedFields = append(updatedFields, "ipxe_os_scope") + } if len(updatedFields) > 0 { updatedFields = append(updatedFields, "updated") @@ -626,10 +739,6 @@ func (ossd OperatingSystemSQLDAO) Clear(ctx context.Context, tx *db.Tx, input Op it.TenantID = nil updatedFields = append(updatedFields, "tenant_id") } - if input.ControllerOperatingSystemID { - it.ControllerOperatingSystemID = nil - updatedFields = append(updatedFields, "controller_operating_system_id") - } if input.Version { it.Version = nil updatedFields = append(updatedFields, "version") @@ -674,6 +783,26 @@ func (ossd OperatingSystemSQLDAO) Clear(ctx context.Context, tx *db.Tx, input Op it.DeactivationNote = nil updatedFields = append(updatedFields, "deactivation_note") } + if input.IpxeTemplateId { + it.IpxeTemplateId = nil + updatedFields = append(updatedFields, "ipxe_template_id") + } + if input.IpxeTemplateParameters { + it.IpxeTemplateParameters = nil + updatedFields = append(updatedFields, "ipxe_template_parameters") + } + if input.IpxeTemplateArtifacts { + it.IpxeTemplateArtifacts = nil + updatedFields = append(updatedFields, "ipxe_template_artifacts") + } + if input.IpxeOSHash { + it.IpxeTemplateDefinitionHash = nil + updatedFields = append(updatedFields, "ipxe_template_definition_hash") + } + if input.Scope { + it.IpxeOsScope = nil + updatedFields = append(updatedFields, "ipxe_os_scope") + } if len(updatedFields) > 0 { updatedFields = append(updatedFields, "updated") diff --git a/db/pkg/db/model/operatingsystem_test.go b/db/pkg/db/model/operatingsystem_test.go index 8b57620c3..769d57144 100644 --- a/db/pkg/db/model/operatingsystem_test.go +++ b/db/pkg/db/model/operatingsystem_test.go @@ -169,29 +169,28 @@ func TestOperatingSystemSQLDAO_Create(t *testing.T) { for _, i := range tc.its { os, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: i.Name, - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: i.InfrastructureProviderID, - TenantID: i.TenantID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "ipxe", - ImageURL: db.GetStrPtr("imageURL"), - ImageSHA: db.GetStrPtr("imageSHA"), - ImageAuthType: db.GetStrPtr("imageAuthType"), - ImageAuthToken: db.GetStrPtr("imageAuthToken"), - ImageDisk: db.GetStrPtr("imageDisk"), - RootFsId: db.GetStrPtr("rootFsId"), - RootFsLabel: db.GetStrPtr("rootFsLabel"), - IpxeScript: db.GetStrPtr("ipxeScript"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: i.PhoneHomeEnabled, - Status: OperatingSystemStatusPending, - CreatedBy: i.CreatedBy, + Name: i.Name, + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: i.InfrastructureProviderID, + TenantID: i.TenantID, + Version: db.GetStrPtr("version"), + OsType: "ipxe", + ImageURL: db.GetStrPtr("imageURL"), + ImageSHA: db.GetStrPtr("imageSHA"), + ImageAuthType: db.GetStrPtr("imageAuthType"), + ImageAuthToken: db.GetStrPtr("imageAuthToken"), + ImageDisk: db.GetStrPtr("imageDisk"), + RootFsId: db.GetStrPtr("rootFsId"), + RootFsLabel: db.GetStrPtr("rootFsLabel"), + IpxeScript: db.GetStrPtr("ipxeScript"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: i.PhoneHomeEnabled, + Status: OperatingSystemStatusPending, + CreatedBy: i.CreatedBy, }, ) assert.Equal(t, tc.expectError, err != nil) @@ -218,53 +217,50 @@ func TestOperatingSystemSQLDAO_GetByID(t *testing.T) { tenant := testOperatingSystemBuildTenant(t, dbSession, "testTenant") user := testOperatingSystemBuildUser(t, dbSession, "testUser") ossd := NewOperatingSystemDAO(dbSession) - dummyUUID := uuid.New() os1, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "test1", - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: &ip.ID, - TenantID: &tenant.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "ipxe", - ImageURL: db.GetStrPtr("imageURL"), - IpxeScript: db.GetStrPtr("ipxeScript"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: false, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "test1", + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: &ip.ID, + TenantID: &tenant.ID, + Version: db.GetStrPtr("version"), + OsType: "ipxe", + ImageURL: db.GetStrPtr("imageURL"), + IpxeScript: db.GetStrPtr("ipxeScript"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: false, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) assert.NotNil(t, os1) os2, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "test2", - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: nil, - TenantID: nil, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "image", - ImageURL: db.GetStrPtr("imageURL"), - ImageSHA: db.GetStrPtr("imageSHA"), - ImageAuthType: db.GetStrPtr("imageAuthType"), - ImageAuthToken: db.GetStrPtr("imageAuthToken"), - ImageDisk: db.GetStrPtr("imageDisk"), - RootFsId: db.GetStrPtr("rootFsId"), - RootFsLabel: db.GetStrPtr("rootFsLabel"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: false, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "test2", + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: nil, + TenantID: nil, + Version: db.GetStrPtr("version"), + OsType: "image", + ImageURL: db.GetStrPtr("imageURL"), + ImageSHA: db.GetStrPtr("imageSHA"), + ImageAuthType: db.GetStrPtr("imageAuthType"), + ImageAuthToken: db.GetStrPtr("imageAuthToken"), + ImageDisk: db.GetStrPtr("imageDisk"), + RootFsId: db.GetStrPtr("rootFsId"), + RootFsLabel: db.GetStrPtr("rootFsLabel"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: false, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) assert.NotNil(t, os2) @@ -388,22 +384,21 @@ func TestOperatingSystemSQLDAO_GetAll(t *testing.T) { if i%2 == 0 { os, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: fmt.Sprintf("os-%v", i), - Description: db.GetStrPtr("Test Description"), - Org: tenant1.Org, - InfrastructureProviderID: nil, - TenantID: &tenant1.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: OperatingSystemTypeImage, - ImageURL: db.GetStrPtr("imageURL"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: fmt.Sprintf("os-%v", i), + Description: db.GetStrPtr("Test Description"), + Org: tenant1.Org, + InfrastructureProviderID: nil, + TenantID: &tenant1.ID, + Version: db.GetStrPtr("version"), + OsType: OperatingSystemTypeImage, + ImageURL: db.GetStrPtr("imageURL"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) ossTenant1 = append(ossTenant1, *os) @@ -420,23 +415,22 @@ func TestOperatingSystemSQLDAO_GetAll(t *testing.T) { } else { _, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: fmt.Sprintf("os-%v", i), - Description: db.GetStrPtr("description"), - Org: tenant2.Org, - InfrastructureProviderID: nil, - TenantID: &tenant2.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: OperatingSystemTypeIPXE, - ImageURL: db.GetStrPtr("iPXE"), - IpxeScript: db.GetStrPtr("ipxeScript"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: false, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: fmt.Sprintf("os-%v", i), + Description: db.GetStrPtr("description"), + Org: tenant2.Org, + InfrastructureProviderID: nil, + TenantID: &tenant2.ID, + Version: db.GetStrPtr("version"), + OsType: OperatingSystemTypeIPXE, + ImageURL: db.GetStrPtr("iPXE"), + IpxeScript: db.GetStrPtr("ipxeScript"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: false, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) } @@ -449,72 +443,69 @@ func TestOperatingSystemSQLDAO_GetAll(t *testing.T) { ossasSite2 := []OperatingSystemSiteAssociation{} ossasSite3 := []OperatingSystemSiteAssociation{} - joinIpxeOss := []OperatingSystem{} + joinIpxeScripts := []OperatingSystem{} // iPXE image 1 os, _ := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "ipxe-os-1", - Description: db.GetStrPtr("description"), - Org: tenant4.Org, - InfrastructureProviderID: nil, - TenantID: &tenant4.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: OperatingSystemTypeIPXE, - ImageURL: db.GetStrPtr("iPXE"), - IpxeScript: db.GetStrPtr("ipxeScript"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: false, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "ipxe-os-1", + Description: db.GetStrPtr("description"), + Org: tenant4.Org, + InfrastructureProviderID: nil, + TenantID: &tenant4.ID, + Version: db.GetStrPtr("version"), + OsType: OperatingSystemTypeIPXE, + ImageURL: db.GetStrPtr("iPXE"), + IpxeScript: db.GetStrPtr("ipxeScript"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: false, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) - joinIpxeOss = append(joinIpxeOss, *os) + joinIpxeScripts = append(joinIpxeScripts, *os) // iPXE image 2 os, _ = ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "ipxe-os-2", - Description: db.GetStrPtr("description"), - Org: tenant4.Org, - InfrastructureProviderID: nil, - TenantID: &tenant4.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: OperatingSystemTypeIPXE, - ImageURL: db.GetStrPtr("iPXE"), - IpxeScript: db.GetStrPtr("ipxeScript"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: false, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "ipxe-os-2", + Description: db.GetStrPtr("description"), + Org: tenant4.Org, + InfrastructureProviderID: nil, + TenantID: &tenant4.ID, + Version: db.GetStrPtr("version"), + OsType: OperatingSystemTypeIPXE, + ImageURL: db.GetStrPtr("iPXE"), + IpxeScript: db.GetStrPtr("ipxeScript"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: false, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) - joinIpxeOss = append(joinIpxeOss, *os) + joinIpxeScripts = append(joinIpxeScripts, *os) // OS Image 1 for site2 os, _ = ossd.Create(ctx, nil, OperatingSystemCreateInput{ - Name: "image-os-1", - Description: db.GetStrPtr("Test Description"), - Org: tenant4.Org, - InfrastructureProviderID: nil, - TenantID: &tenant4.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: OperatingSystemTypeImage, - ImageURL: db.GetStrPtr("imageURL"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "image-os-1", + Description: db.GetStrPtr("Test Description"), + Org: tenant4.Org, + InfrastructureProviderID: nil, + TenantID: &tenant4.ID, + Version: db.GetStrPtr("version"), + OsType: OperatingSystemTypeImage, + ImageURL: db.GetStrPtr("imageURL"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) ossa, _ := ossaDAO.Create(ctx, nil, OperatingSystemSiteAssociationCreateInput{ OperatingSystemID: os.ID, @@ -526,22 +517,21 @@ func TestOperatingSystemSQLDAO_GetAll(t *testing.T) { // OS Image 2 for site2 os, _ = ossd.Create(ctx, nil, OperatingSystemCreateInput{ - Name: "image-os-2", - Description: db.GetStrPtr("Test Description"), - Org: tenant4.Org, - InfrastructureProviderID: nil, - TenantID: &tenant4.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: OperatingSystemTypeImage, - ImageURL: db.GetStrPtr("imageURL"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "image-os-2", + Description: db.GetStrPtr("Test Description"), + Org: tenant4.Org, + InfrastructureProviderID: nil, + TenantID: &tenant4.ID, + Version: db.GetStrPtr("version"), + OsType: OperatingSystemTypeImage, + ImageURL: db.GetStrPtr("imageURL"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) ossa, _ = ossaDAO.Create(ctx, nil, OperatingSystemSiteAssociationCreateInput{ OperatingSystemID: os.ID, @@ -553,22 +543,21 @@ func TestOperatingSystemSQLDAO_GetAll(t *testing.T) { // OS Image 3 for site3 os, _ = ossd.Create(ctx, nil, OperatingSystemCreateInput{ - Name: "image-os-3", - Description: db.GetStrPtr("Test Description"), - Org: tenant4.Org, - InfrastructureProviderID: nil, - TenantID: &tenant4.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: OperatingSystemTypeImage, - ImageURL: db.GetStrPtr("imageURL"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "image-os-3", + Description: db.GetStrPtr("Test Description"), + Org: tenant4.Org, + InfrastructureProviderID: nil, + TenantID: &tenant4.ID, + Version: db.GetStrPtr("version"), + OsType: OperatingSystemTypeImage, + ImageURL: db.GetStrPtr("imageURL"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) ossa, _ = ossaDAO.Create(ctx, nil, OperatingSystemSiteAssociationCreateInput{ OperatingSystemID: os.ID, @@ -781,7 +770,7 @@ func TestOperatingSystemSQLDAO_GetAll(t *testing.T) { siteIDs: []uuid.UUID{site.ID}, searchQuery: nil, expectedCount: paginator.DefaultLimit, - expectedTotal: db.GetIntPtr(totalCount + len(joinIpxeOss)), + expectedTotal: db.GetIntPtr(totalCount + len(joinIpxeScripts)), expectedError: false, }, { @@ -836,8 +825,8 @@ func TestOperatingSystemSQLDAO_GetAll(t *testing.T) { tenantIDs: nil, osNames: nil, osTypes: []string{OperatingSystemTypeIPXE}, - expectedCount: totalCount/2 + len(joinIpxeOss), - expectedTotal: db.GetIntPtr(totalCount/2 + len(joinIpxeOss)), + expectedCount: totalCount/2 + len(joinIpxeScripts), + expectedTotal: db.GetIntPtr(totalCount/2 + len(joinIpxeScripts)), expectedError: false, }, { @@ -918,8 +907,8 @@ func TestOperatingSystemSQLDAO_GetAll(t *testing.T) { siteIDs: []uuid.UUID{site3.ID}, osTypes: nil, searchQuery: nil, - expectedCount: len(joinIpxeOss) + len(ossasSite3), - expectedTotal: db.GetIntPtr(len(joinIpxeOss) + len(ossasSite3)), + expectedCount: len(joinIpxeScripts) + len(ossasSite3), + expectedTotal: db.GetIntPtr(len(joinIpxeScripts) + len(ossasSite3)), expectedError: false, }, { @@ -994,74 +983,69 @@ func TestOperatingSystemSQLDAO_Update(t *testing.T) { tenant2 := testOperatingSystemBuildTenant(t, dbSession, "testTenant2") user := testOperatingSystemBuildUser(t, dbSession, "testUser") ossd := NewOperatingSystemDAO(dbSession) - dummyUUID := uuid.New() - updatedUUID := uuid.New() os1tenant1, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "os1", - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: &ip.ID, - TenantID: &tenant1.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "ipxe", - ImageURL: db.GetStrPtr("imageURL"), - ImageSHA: db.GetStrPtr("imageSHA"), - ImageAuthType: db.GetStrPtr("imageAuthType"), - ImageAuthToken: db.GetStrPtr("imageAuthToken"), - ImageDisk: db.GetStrPtr("imageDisk"), - RootFsId: db.GetStrPtr("rootFsId"), - RootFsLabel: db.GetStrPtr("rootFsLabel"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "os1", + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: &ip.ID, + TenantID: &tenant1.ID, + Version: db.GetStrPtr("version"), + OsType: "ipxe", + ImageURL: db.GetStrPtr("imageURL"), + ImageSHA: db.GetStrPtr("imageSHA"), + ImageAuthType: db.GetStrPtr("imageAuthType"), + ImageAuthToken: db.GetStrPtr("imageAuthToken"), + ImageDisk: db.GetStrPtr("imageDisk"), + RootFsId: db.GetStrPtr("rootFsId"), + RootFsLabel: db.GetStrPtr("rootFsLabel"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) assert.NotNil(t, os1tenant1) os2tenant1, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "os2tenant1", - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: &ip.ID, - TenantID: &tenant1.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "ipxe", - IpxeScript: db.GetStrPtr("ipxeScript"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: false, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "os2tenant1", + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: &ip.ID, + TenantID: &tenant1.ID, + Version: db.GetStrPtr("version"), + OsType: "ipxe", + IpxeScript: db.GetStrPtr("ipxeScript"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: false, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) assert.NotNil(t, os2tenant1) os1tenant2, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "os1", - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: &ip.ID, - TenantID: &tenant2.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "ipxe", - IpxeScript: db.GetStrPtr("ipxeScript"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: false, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "os1", + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: &ip.ID, + TenantID: &tenant2.ID, + Version: db.GetStrPtr("version"), + OsType: "ipxe", + IpxeScript: db.GetStrPtr("ipxeScript"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: false, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) assert.NotNil(t, os1tenant2) @@ -1079,234 +1063,225 @@ func TestOperatingSystemSQLDAO_Update(t *testing.T) { desc string os *OperatingSystem - paramName *string - paramDescription *string - paramOrg *string - paramInfrastructureProviderID *uuid.UUID - paramTenantID *uuid.UUID - paramControllerOperatingSystemID *uuid.UUID - paramVersion *string - paramType *string - paramImageURL *string - paramImageSHA *string - paramImageAuthType *string - paramImageAuthToken *string - paramImageDisk *string - paramRootFsID *string - paramRootFsLabel *string - paramIpxeScript *string - paramUserData *string - paramIsCloudInit *bool - paramAllowOverride *bool - paramEnableBlockStorage *bool - paramPhoneHomeEnabled *bool - paramIsActive *bool - paramDeactivationNote *string - paramStatus *string - - expectedName *string - expectedDescription *string - expectedOrg *string - expectedInfrastructureProviderID *uuid.UUID - expectedTenantID *uuid.UUID - expectedControllerOperatingSystemID *uuid.UUID - expectedVersion *string - expectedType *string - expectedImageURL *string - expectedImageSHA *string - expectedImageAuthType *string - expectedImageAuthToken *string - expectedImageDisk *string - expectedRootFsID *string - expectedRootFsLabel *string - expectedIpxeScript *string - expectedUserData *string - expectedIsCloudInit *bool - expectedAllowOverride *bool - expectedEnableBlockStorage *bool - expectPhoneHomeEnabled *bool - expectedIsActive *bool - expectedDeactivationNote *string - expectedStatus *string - verifyChildSpanner bool + paramName *string + paramDescription *string + paramOrg *string + paramInfrastructureProviderID *uuid.UUID + paramTenantID *uuid.UUID + paramVersion *string + paramType *string + paramImageURL *string + paramImageSHA *string + paramImageAuthType *string + paramImageAuthToken *string + paramImageDisk *string + paramRootFsID *string + paramRootFsLabel *string + paramIpxeScript *string + paramUserData *string + paramIsCloudInit *bool + paramAllowOverride *bool + paramEnableBlockStorage *bool + paramPhoneHomeEnabled *bool + paramIsActive *bool + paramDeactivationNote *string + paramStatus *string + + expectedName *string + expectedDescription *string + expectedOrg *string + expectedInfrastructureProviderID *uuid.UUID + expectedTenantID *uuid.UUID + expectedVersion *string + expectedType *string + expectedImageURL *string + expectedImageSHA *string + expectedImageAuthType *string + expectedImageAuthToken *string + expectedImageDisk *string + expectedRootFsID *string + expectedRootFsLabel *string + expectedIpxeScript *string + expectedUserData *string + expectedIsCloudInit *bool + expectedAllowOverride *bool + expectedEnableBlockStorage *bool + expectPhoneHomeEnabled *bool + expectedIsActive *bool + expectedDeactivationNote *string + expectedStatus *string + verifyChildSpanner bool }{ { desc: "can update string fields: name, description, org, version, imageurl, imageSHA, imageAuthType, imageAuthToken, imageDisk, rootFsID, rootFsLabel, ipxescript, userdata, status", os: os1tenant1, - paramName: db.GetStrPtr("updatedName"), - paramDescription: db.GetStrPtr("updatedDescription"), - paramOrg: db.GetStrPtr("updatedOrg"), - paramInfrastructureProviderID: nil, - paramTenantID: nil, - paramControllerOperatingSystemID: nil, - paramVersion: db.GetStrPtr("updatedVersion"), - paramType: db.GetStrPtr("updatedType"), - paramImageURL: db.GetStrPtr("updatedImageURL"), - paramImageSHA: db.GetStrPtr("updatedImageSHA"), - paramImageAuthType: db.GetStrPtr("updatedImageAuthType"), - paramImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), - paramImageDisk: db.GetStrPtr("updatedImageDisk"), - paramRootFsID: db.GetStrPtr("updatedRootFsID"), - paramRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), - paramIpxeScript: db.GetStrPtr("updatedIpxeScript"), - paramUserData: db.GetStrPtr("updatedUserData"), - paramIsCloudInit: nil, - paramAllowOverride: nil, - paramEnableBlockStorage: nil, - paramPhoneHomeEnabled: nil, - paramStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), - - expectedName: db.GetStrPtr("updatedName"), - expectedDescription: db.GetStrPtr("updatedDescription"), - expectedOrg: db.GetStrPtr("updatedOrg"), - expectedInfrastructureProviderID: os1tenant1.InfrastructureProviderID, - expectedTenantID: os1tenant1.TenantID, - expectedControllerOperatingSystemID: os1tenant1.ControllerOperatingSystemID, - expectedVersion: db.GetStrPtr("updatedVersion"), - expectedType: db.GetStrPtr("updatedType"), - expectedImageURL: db.GetStrPtr("updatedImageURL"), - expectedImageSHA: db.GetStrPtr("updatedImageSHA"), - expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), - expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), - expectedImageDisk: db.GetStrPtr("updatedImageDisk"), - expectedRootFsID: db.GetStrPtr("updatedRootFsID"), - expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), - expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), - expectedUserData: db.GetStrPtr("updatedUserData"), - expectedIsCloudInit: &os1tenant1.IsCloudInit, - expectedAllowOverride: &os1tenant1.AllowOverride, - expectedEnableBlockStorage: &os1tenant1.EnableBlockStorage, - expectPhoneHomeEnabled: &os1tenant1.PhoneHomeEnabled, - expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), - verifyChildSpanner: true, + paramName: db.GetStrPtr("updatedName"), + paramDescription: db.GetStrPtr("updatedDescription"), + paramOrg: db.GetStrPtr("updatedOrg"), + paramInfrastructureProviderID: nil, + paramTenantID: nil, + paramVersion: db.GetStrPtr("updatedVersion"), + paramType: db.GetStrPtr("updatedType"), + paramImageURL: db.GetStrPtr("updatedImageURL"), + paramImageSHA: db.GetStrPtr("updatedImageSHA"), + paramImageAuthType: db.GetStrPtr("updatedImageAuthType"), + paramImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), + paramImageDisk: db.GetStrPtr("updatedImageDisk"), + paramRootFsID: db.GetStrPtr("updatedRootFsID"), + paramRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), + paramIpxeScript: db.GetStrPtr("updatedIpxeScript"), + paramUserData: db.GetStrPtr("updatedUserData"), + paramIsCloudInit: nil, + paramAllowOverride: nil, + paramEnableBlockStorage: nil, + paramPhoneHomeEnabled: nil, + paramStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), + + expectedName: db.GetStrPtr("updatedName"), + expectedDescription: db.GetStrPtr("updatedDescription"), + expectedOrg: db.GetStrPtr("updatedOrg"), + expectedInfrastructureProviderID: os1tenant1.InfrastructureProviderID, + expectedTenantID: os1tenant1.TenantID, + expectedVersion: db.GetStrPtr("updatedVersion"), + expectedType: db.GetStrPtr("updatedType"), + expectedImageURL: db.GetStrPtr("updatedImageURL"), + expectedImageSHA: db.GetStrPtr("updatedImageSHA"), + expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), + expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), + expectedImageDisk: db.GetStrPtr("updatedImageDisk"), + expectedRootFsID: db.GetStrPtr("updatedRootFsID"), + expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), + expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), + expectedUserData: db.GetStrPtr("updatedUserData"), + expectedIsCloudInit: &os1tenant1.IsCloudInit, + expectedAllowOverride: &os1tenant1.AllowOverride, + expectedEnableBlockStorage: &os1tenant1.EnableBlockStorage, + expectPhoneHomeEnabled: &os1tenant1.PhoneHomeEnabled, + expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), + verifyChildSpanner: true, }, { desc: "can update uuid fields: infrastructureproviderid, tenantid, controlleroperatingsystemid", os: os1tenant1, - paramName: nil, - paramDescription: nil, - paramOrg: nil, - paramInfrastructureProviderID: &updatedIP.ID, - paramTenantID: &updatedTenant.ID, - paramControllerOperatingSystemID: &updatedUUID, - paramVersion: nil, - paramType: nil, - paramImageURL: nil, - paramImageSHA: nil, - paramImageAuthType: nil, - paramImageAuthToken: nil, - paramImageDisk: nil, - paramRootFsID: nil, - paramRootFsLabel: nil, - paramIpxeScript: nil, - paramUserData: nil, - paramIsCloudInit: nil, - paramAllowOverride: nil, - paramEnableBlockStorage: nil, - paramPhoneHomeEnabled: nil, - paramStatus: nil, - - expectedName: db.GetStrPtr("updatedName"), - expectedDescription: db.GetStrPtr("updatedDescription"), - expectedOrg: db.GetStrPtr("updatedOrg"), - expectedInfrastructureProviderID: &updatedIP.ID, - expectedTenantID: &updatedTenant.ID, - expectedControllerOperatingSystemID: &updatedUUID, - expectedVersion: db.GetStrPtr("updatedVersion"), - expectedType: db.GetStrPtr("updatedType"), - expectedImageURL: db.GetStrPtr("updatedImageURL"), - expectedImageSHA: db.GetStrPtr("updatedImageSHA"), - expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), - expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), - expectedImageDisk: db.GetStrPtr("updatedImageDisk"), - expectedRootFsID: db.GetStrPtr("updatedRootFsID"), - expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), - expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), - expectedUserData: db.GetStrPtr("updatedUserData"), - expectedIsCloudInit: &os1tenant1.IsCloudInit, - expectedAllowOverride: &os1tenant1.AllowOverride, - expectedEnableBlockStorage: &os1tenant1.EnableBlockStorage, - expectPhoneHomeEnabled: &os1tenant1.PhoneHomeEnabled, - expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), + paramName: nil, + paramDescription: nil, + paramOrg: nil, + paramInfrastructureProviderID: &updatedIP.ID, + paramTenantID: &updatedTenant.ID, + paramVersion: nil, + paramType: nil, + paramImageURL: nil, + paramImageSHA: nil, + paramImageAuthType: nil, + paramImageAuthToken: nil, + paramImageDisk: nil, + paramRootFsID: nil, + paramRootFsLabel: nil, + paramIpxeScript: nil, + paramUserData: nil, + paramIsCloudInit: nil, + paramAllowOverride: nil, + paramEnableBlockStorage: nil, + paramPhoneHomeEnabled: nil, + paramStatus: nil, + + expectedName: db.GetStrPtr("updatedName"), + expectedDescription: db.GetStrPtr("updatedDescription"), + expectedOrg: db.GetStrPtr("updatedOrg"), + expectedInfrastructureProviderID: &updatedIP.ID, + expectedTenantID: &updatedTenant.ID, + expectedVersion: db.GetStrPtr("updatedVersion"), + expectedType: db.GetStrPtr("updatedType"), + expectedImageURL: db.GetStrPtr("updatedImageURL"), + expectedImageSHA: db.GetStrPtr("updatedImageSHA"), + expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), + expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), + expectedImageDisk: db.GetStrPtr("updatedImageDisk"), + expectedRootFsID: db.GetStrPtr("updatedRootFsID"), + expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), + expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), + expectedUserData: db.GetStrPtr("updatedUserData"), + expectedIsCloudInit: &os1tenant1.IsCloudInit, + expectedAllowOverride: &os1tenant1.AllowOverride, + expectedEnableBlockStorage: &os1tenant1.EnableBlockStorage, + expectPhoneHomeEnabled: &os1tenant1.PhoneHomeEnabled, + expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), }, { desc: "can update bool fields: iscloudinit, allowcloudinit, isblockstorage", os: os1tenant1, - paramName: nil, - paramDescription: nil, - paramOrg: nil, - paramInfrastructureProviderID: nil, - paramTenantID: nil, - paramControllerOperatingSystemID: nil, - paramVersion: nil, - paramType: nil, - paramImageURL: nil, - paramImageSHA: nil, - paramImageAuthType: nil, - paramImageAuthToken: nil, - paramImageDisk: nil, - paramRootFsID: nil, - paramRootFsLabel: nil, - paramIpxeScript: nil, - paramUserData: nil, - paramIsCloudInit: &updatedIsCloudInit, - paramAllowOverride: &updatedAllowOverride, - paramEnableBlockStorage: &updatedEnableBlockStorage, - paramPhoneHomeEnabled: &updatedPhoneHomeEnabled, - paramStatus: nil, - - expectedName: db.GetStrPtr("updatedName"), - expectedDescription: db.GetStrPtr("updatedDescription"), - expectedOrg: db.GetStrPtr("updatedOrg"), - expectedInfrastructureProviderID: &updatedIP.ID, - expectedTenantID: &updatedTenant.ID, - expectedControllerOperatingSystemID: &updatedUUID, - expectedVersion: db.GetStrPtr("updatedVersion"), - expectedType: db.GetStrPtr("updatedType"), - expectedImageURL: db.GetStrPtr("updatedImageURL"), - expectedImageSHA: db.GetStrPtr("updatedImageSHA"), - expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), - expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), - expectedImageDisk: db.GetStrPtr("updatedImageDisk"), - expectedRootFsID: db.GetStrPtr("updatedRootFsID"), - expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), - expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), - expectedUserData: db.GetStrPtr("updatedUserData"), - expectedIsCloudInit: &updatedIsCloudInit, - expectedAllowOverride: &updatedAllowOverride, - expectedEnableBlockStorage: &updatedEnableBlockStorage, - expectPhoneHomeEnabled: &updatedEnableBlockStorage, - expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), + paramName: nil, + paramDescription: nil, + paramOrg: nil, + paramInfrastructureProviderID: nil, + paramTenantID: nil, + paramVersion: nil, + paramType: nil, + paramImageURL: nil, + paramImageSHA: nil, + paramImageAuthType: nil, + paramImageAuthToken: nil, + paramImageDisk: nil, + paramRootFsID: nil, + paramRootFsLabel: nil, + paramIpxeScript: nil, + paramUserData: nil, + paramIsCloudInit: &updatedIsCloudInit, + paramAllowOverride: &updatedAllowOverride, + paramEnableBlockStorage: &updatedEnableBlockStorage, + paramPhoneHomeEnabled: &updatedPhoneHomeEnabled, + paramStatus: nil, + + expectedName: db.GetStrPtr("updatedName"), + expectedDescription: db.GetStrPtr("updatedDescription"), + expectedOrg: db.GetStrPtr("updatedOrg"), + expectedInfrastructureProviderID: &updatedIP.ID, + expectedTenantID: &updatedTenant.ID, + expectedVersion: db.GetStrPtr("updatedVersion"), + expectedType: db.GetStrPtr("updatedType"), + expectedImageURL: db.GetStrPtr("updatedImageURL"), + expectedImageSHA: db.GetStrPtr("updatedImageSHA"), + expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), + expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), + expectedImageDisk: db.GetStrPtr("updatedImageDisk"), + expectedRootFsID: db.GetStrPtr("updatedRootFsID"), + expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), + expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), + expectedUserData: db.GetStrPtr("updatedUserData"), + expectedIsCloudInit: &updatedIsCloudInit, + expectedAllowOverride: &updatedAllowOverride, + expectedEnableBlockStorage: &updatedEnableBlockStorage, + expectPhoneHomeEnabled: &updatedEnableBlockStorage, + expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), }, { desc: "ok when no fields are updated", os: os1tenant1, - expectedName: db.GetStrPtr("updatedName"), - expectedDescription: db.GetStrPtr("updatedDescription"), - expectedOrg: db.GetStrPtr("updatedOrg"), - expectedInfrastructureProviderID: &updatedIP.ID, - expectedTenantID: &updatedTenant.ID, - expectedControllerOperatingSystemID: &updatedUUID, - expectedVersion: db.GetStrPtr("updatedVersion"), - expectedType: db.GetStrPtr("updatedType"), - expectedImageURL: db.GetStrPtr("updatedImageURL"), - expectedImageSHA: db.GetStrPtr("updatedImageSHA"), - expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), - expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), - expectedImageDisk: db.GetStrPtr("updatedImageDisk"), - expectedRootFsID: db.GetStrPtr("updatedRootFsID"), - expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), - expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), - expectedUserData: db.GetStrPtr("updatedUserData"), - expectedIsCloudInit: &updatedIsCloudInit, - expectedAllowOverride: &updatedAllowOverride, - expectedEnableBlockStorage: &updatedEnableBlockStorage, - expectPhoneHomeEnabled: &updatedPhoneHomeEnabled, - expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), + expectedName: db.GetStrPtr("updatedName"), + expectedDescription: db.GetStrPtr("updatedDescription"), + expectedOrg: db.GetStrPtr("updatedOrg"), + expectedInfrastructureProviderID: &updatedIP.ID, + expectedTenantID: &updatedTenant.ID, + expectedVersion: db.GetStrPtr("updatedVersion"), + expectedType: db.GetStrPtr("updatedType"), + expectedImageURL: db.GetStrPtr("updatedImageURL"), + expectedImageSHA: db.GetStrPtr("updatedImageSHA"), + expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), + expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), + expectedImageDisk: db.GetStrPtr("updatedImageDisk"), + expectedRootFsID: db.GetStrPtr("updatedRootFsID"), + expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), + expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), + expectedUserData: db.GetStrPtr("updatedUserData"), + expectedIsCloudInit: &updatedIsCloudInit, + expectedAllowOverride: &updatedAllowOverride, + expectedEnableBlockStorage: &updatedEnableBlockStorage, + expectPhoneHomeEnabled: &updatedPhoneHomeEnabled, + expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), }, { desc: "can update isActive from true to false", @@ -1314,60 +1289,58 @@ func TestOperatingSystemSQLDAO_Update(t *testing.T) { paramIsActive: &updatedIsActive, paramDeactivationNote: &updatedDeactivationNote, - expectedName: db.GetStrPtr("updatedName"), - expectedDescription: db.GetStrPtr("updatedDescription"), - expectedOrg: db.GetStrPtr("updatedOrg"), - expectedInfrastructureProviderID: &updatedIP.ID, - expectedTenantID: &updatedTenant.ID, - expectedControllerOperatingSystemID: &updatedUUID, - expectedVersion: db.GetStrPtr("updatedVersion"), - expectedType: db.GetStrPtr("updatedType"), - expectedImageURL: db.GetStrPtr("updatedImageURL"), - expectedImageSHA: db.GetStrPtr("updatedImageSHA"), - expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), - expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), - expectedImageDisk: db.GetStrPtr("updatedImageDisk"), - expectedRootFsID: db.GetStrPtr("updatedRootFsID"), - expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), - expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), - expectedUserData: db.GetStrPtr("updatedUserData"), - expectedIsCloudInit: &updatedIsCloudInit, - expectedAllowOverride: &updatedAllowOverride, - expectedEnableBlockStorage: &updatedEnableBlockStorage, - expectPhoneHomeEnabled: &updatedPhoneHomeEnabled, - expectedIsActive: &updatedIsActive, - expectedDeactivationNote: &updatedDeactivationNote, - expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), + expectedName: db.GetStrPtr("updatedName"), + expectedDescription: db.GetStrPtr("updatedDescription"), + expectedOrg: db.GetStrPtr("updatedOrg"), + expectedInfrastructureProviderID: &updatedIP.ID, + expectedTenantID: &updatedTenant.ID, + expectedVersion: db.GetStrPtr("updatedVersion"), + expectedType: db.GetStrPtr("updatedType"), + expectedImageURL: db.GetStrPtr("updatedImageURL"), + expectedImageSHA: db.GetStrPtr("updatedImageSHA"), + expectedImageAuthType: db.GetStrPtr("updatedImageAuthType"), + expectedImageAuthToken: db.GetStrPtr("updatedImageAuthToken"), + expectedImageDisk: db.GetStrPtr("updatedImageDisk"), + expectedRootFsID: db.GetStrPtr("updatedRootFsID"), + expectedRootFsLabel: db.GetStrPtr("updatedRootFsLabel"), + expectedIpxeScript: db.GetStrPtr("updatedIpxeScript"), + expectedUserData: db.GetStrPtr("updatedUserData"), + expectedIsCloudInit: &updatedIsCloudInit, + expectedAllowOverride: &updatedAllowOverride, + expectedEnableBlockStorage: &updatedEnableBlockStorage, + expectPhoneHomeEnabled: &updatedPhoneHomeEnabled, + expectedIsActive: &updatedIsActive, + expectedDeactivationNote: &updatedDeactivationNote, + expectedStatus: db.GetStrPtr(OperatingSystemStatusProvisioning), }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { input := OperatingSystemUpdateInput{ - OperatingSystemId: tc.os.ID, - Name: tc.paramName, - Description: tc.paramDescription, - Org: tc.paramOrg, - InfrastructureProviderID: tc.paramInfrastructureProviderID, - TenantID: tc.paramTenantID, - ControllerOperatingSystemID: tc.paramControllerOperatingSystemID, - Version: tc.paramVersion, - OsType: tc.paramType, - ImageURL: tc.paramImageURL, - ImageSHA: tc.paramImageSHA, - ImageAuthType: tc.paramImageAuthType, - ImageAuthToken: tc.paramImageAuthToken, - ImageDisk: tc.paramImageDisk, - RootFsId: tc.paramRootFsID, - RootFsLabel: tc.paramRootFsLabel, - IpxeScript: tc.paramIpxeScript, - UserData: tc.paramUserData, - IsCloudInit: tc.paramIsCloudInit, - AllowOverride: tc.paramAllowOverride, - EnableBlockStorage: tc.paramEnableBlockStorage, - PhoneHomeEnabled: tc.paramPhoneHomeEnabled, - IsActive: tc.paramIsActive, - DeactivationNote: tc.paramDeactivationNote, - Status: tc.paramStatus, + OperatingSystemId: tc.os.ID, + Name: tc.paramName, + Description: tc.paramDescription, + Org: tc.paramOrg, + InfrastructureProviderID: tc.paramInfrastructureProviderID, + TenantID: tc.paramTenantID, + Version: tc.paramVersion, + OsType: tc.paramType, + ImageURL: tc.paramImageURL, + ImageSHA: tc.paramImageSHA, + ImageAuthType: tc.paramImageAuthType, + ImageAuthToken: tc.paramImageAuthToken, + ImageDisk: tc.paramImageDisk, + RootFsId: tc.paramRootFsID, + RootFsLabel: tc.paramRootFsLabel, + IpxeScript: tc.paramIpxeScript, + UserData: tc.paramUserData, + IsCloudInit: tc.paramIsCloudInit, + AllowOverride: tc.paramAllowOverride, + EnableBlockStorage: tc.paramEnableBlockStorage, + PhoneHomeEnabled: tc.paramPhoneHomeEnabled, + IsActive: tc.paramIsActive, + DeactivationNote: tc.paramDeactivationNote, + Status: tc.paramStatus, } got, err := ossd.Update(ctx, nil, input) assert.Nil(t, err) @@ -1388,10 +1361,6 @@ func TestOperatingSystemSQLDAO_Update(t *testing.T) { if tc.expectedTenantID != nil { assert.Equal(t, *tc.expectedTenantID, *got.TenantID) } - assert.Equal(t, tc.expectedControllerOperatingSystemID == nil, got.ControllerOperatingSystemID == nil) - if tc.expectedControllerOperatingSystemID != nil { - assert.Equal(t, *tc.expectedControllerOperatingSystemID, *got.ControllerOperatingSystemID) - } assert.Equal(t, tc.expectedVersion == nil, got.Version == nil) if tc.expectedVersion != nil { assert.Equal(t, *tc.expectedVersion, *got.Version) @@ -1468,80 +1437,76 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { tenant2 := testOperatingSystemBuildTenant(t, dbSession, "testTenant2") user := testOperatingSystemBuildUser(t, dbSession, "testUser") ossd := NewOperatingSystemDAO(dbSession) - dummyUUID := uuid.New() os1tenant1, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "os1", - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: &ip.ID, - TenantID: &tenant1.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "image", - ImageURL: db.GetStrPtr("imageURL"), - ImageSHA: db.GetStrPtr("imageSHA"), - ImageAuthType: db.GetStrPtr("imageAuthType"), - ImageAuthToken: db.GetStrPtr("imageAuthToken"), - ImageDisk: db.GetStrPtr("imageDisk"), - RootFsId: db.GetStrPtr("rootFsId"), - RootFsLabel: db.GetStrPtr("rootFsLabel"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "os1", + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: &ip.ID, + TenantID: &tenant1.ID, + Version: db.GetStrPtr("version"), + OsType: "image", + ImageURL: db.GetStrPtr("imageURL"), + ImageSHA: db.GetStrPtr("imageSHA"), + ImageAuthType: db.GetStrPtr("imageAuthType"), + ImageAuthToken: db.GetStrPtr("imageAuthToken"), + ImageDisk: db.GetStrPtr("imageDisk"), + RootFsId: db.GetStrPtr("rootFsId"), + RootFsLabel: db.GetStrPtr("rootFsLabel"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) assert.NotNil(t, os1tenant1) os2tenant1, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "os2tenant1", - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: &ip.ID, - TenantID: &tenant1.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "ipxe", - ImageURL: db.GetStrPtr("imageURL"), - IpxeScript: db.GetStrPtr("ipxeScript"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "os2tenant1", + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: &ip.ID, + TenantID: &tenant1.ID, + Version: db.GetStrPtr("version"), + OsType: "ipxe", + ImageURL: db.GetStrPtr("imageURL"), + IpxeScript: db.GetStrPtr("ipxeScript"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) assert.NotNil(t, os2tenant1) os1tenant2, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "os1", - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: &ip.ID, - TenantID: &tenant2.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "image", - ImageURL: db.GetStrPtr("imageURL"), - ImageSHA: db.GetStrPtr("imageSHA"), - ImageAuthType: db.GetStrPtr("imageAuthType"), - ImageAuthToken: db.GetStrPtr("imageAuthToken"), - ImageDisk: db.GetStrPtr("imageDisk"), - RootFsId: db.GetStrPtr("rootFsId"), - RootFsLabel: db.GetStrPtr("rootFsLabel"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "os1", + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: &ip.ID, + TenantID: &tenant2.ID, + Version: db.GetStrPtr("version"), + OsType: "image", + ImageURL: db.GetStrPtr("imageURL"), + ImageSHA: db.GetStrPtr("imageSHA"), + ImageAuthType: db.GetStrPtr("imageAuthType"), + ImageAuthToken: db.GetStrPtr("imageAuthToken"), + ImageDisk: db.GetStrPtr("imageDisk"), + RootFsId: db.GetStrPtr("rootFsId"), + RootFsLabel: db.GetStrPtr("rootFsLabel"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) assert.NotNil(t, os1tenant2) @@ -1550,39 +1515,37 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { _, _, ctx = testCommonTraceProviderSetup(t, ctx) tests := []struct { - desc string - os *OperatingSystem - paramDescription bool - paramInfrastructureProviderID bool - paramTenantID bool - paramControllerOperatingSystemID bool - paramVersion bool - paramImageURL bool - paramImageSHA bool - paramImageAuthType bool - paramImageAuthToken bool - paramImageDisk bool - paramRootFsID bool - paramRootFsLabel bool - paramIpxeScript bool - paramUserData bool - - expectedDescription *string - expectedInfrastructureProviderID *uuid.UUID - expectedTenantID *uuid.UUID - expectedControllerOperatingSystemID *uuid.UUID - expectedVersion *string - expectedImageURL *string - expectedImageSHA *string - expectedImageAuthType *string - expectedImageAuthToken *string - expectedImageDisk *string - expectedRootFsID *string - expectedRootFsLabel *string - expectedIpxeScript *string - expectedUserData *string - expectedUpdate bool - verifyChildSpanner bool + desc string + os *OperatingSystem + paramDescription bool + paramInfrastructureProviderID bool + paramTenantID bool + paramVersion bool + paramImageURL bool + paramImageSHA bool + paramImageAuthType bool + paramImageAuthToken bool + paramImageDisk bool + paramRootFsID bool + paramRootFsLabel bool + paramIpxeScript bool + paramUserData bool + + expectedDescription *string + expectedInfrastructureProviderID *uuid.UUID + expectedTenantID *uuid.UUID + expectedVersion *string + expectedImageURL *string + expectedImageSHA *string + expectedImageAuthType *string + expectedImageAuthToken *string + expectedImageDisk *string + expectedRootFsID *string + expectedRootFsLabel *string + expectedIpxeScript *string + expectedUserData *string + expectedUpdate bool + verifyChildSpanner bool }{ { desc: "can clear description", @@ -1590,22 +1553,21 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramDescription: true, - expectedDescription: nil, - expectedInfrastructureProviderID: os1tenant1.InfrastructureProviderID, - expectedTenantID: os1tenant1.TenantID, - expectedControllerOperatingSystemID: os1tenant1.ControllerOperatingSystemID, - expectedVersion: os1tenant1.Version, - expectedImageURL: os1tenant1.ImageURL, - expectedImageSHA: os1tenant1.ImageSHA, - expectedImageAuthType: os1tenant1.ImageAuthType, - expectedImageAuthToken: os1tenant1.ImageAuthToken, - expectedImageDisk: os1tenant1.ImageDisk, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, - verifyChildSpanner: true, + expectedDescription: nil, + expectedInfrastructureProviderID: os1tenant1.InfrastructureProviderID, + expectedTenantID: os1tenant1.TenantID, + expectedVersion: os1tenant1.Version, + expectedImageURL: os1tenant1.ImageURL, + expectedImageSHA: os1tenant1.ImageSHA, + expectedImageAuthType: os1tenant1.ImageAuthType, + expectedImageAuthToken: os1tenant1.ImageAuthToken, + expectedImageDisk: os1tenant1.ImageDisk, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, + verifyChildSpanner: true, }, { desc: "can clear InfrastructureProviderID", @@ -1613,21 +1575,20 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramInfrastructureProviderID: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: os1tenant1.TenantID, - expectedControllerOperatingSystemID: os1tenant1.ControllerOperatingSystemID, - expectedVersion: os1tenant1.Version, - expectedImageURL: os1tenant1.ImageURL, - expectedImageSHA: os1tenant1.ImageSHA, - expectedImageAuthType: os1tenant1.ImageAuthType, - expectedImageAuthToken: os1tenant1.ImageAuthToken, - expectedImageDisk: os1tenant1.ImageDisk, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: os1tenant1.TenantID, + expectedVersion: os1tenant1.Version, + expectedImageURL: os1tenant1.ImageURL, + expectedImageSHA: os1tenant1.ImageSHA, + expectedImageAuthType: os1tenant1.ImageAuthType, + expectedImageAuthToken: os1tenant1.ImageAuthToken, + expectedImageDisk: os1tenant1.ImageDisk, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear TenantID", @@ -1635,43 +1596,39 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramTenantID: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: os1tenant1.ControllerOperatingSystemID, - expectedVersion: os1tenant1.Version, - expectedImageURL: os1tenant1.ImageURL, - expectedImageSHA: os1tenant1.ImageSHA, - expectedImageAuthType: os1tenant1.ImageAuthType, - expectedImageAuthToken: os1tenant1.ImageAuthToken, - expectedImageDisk: os1tenant1.ImageDisk, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, - }, - { - desc: "can clear ControllerOperatingSystemID", + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: os1tenant1.Version, + expectedImageURL: os1tenant1.ImageURL, + expectedImageSHA: os1tenant1.ImageSHA, + expectedImageAuthType: os1tenant1.ImageAuthType, + expectedImageAuthToken: os1tenant1.ImageAuthToken, + expectedImageDisk: os1tenant1.ImageDisk, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, + }, + { + desc: "can run clear with no flags set", os: os1tenant1, - paramControllerOperatingSystemID: true, - - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: os1tenant1.Version, - expectedImageURL: os1tenant1.ImageURL, - expectedImageSHA: os1tenant1.ImageSHA, - expectedImageAuthType: os1tenant1.ImageAuthType, - expectedImageAuthToken: os1tenant1.ImageAuthToken, - expectedImageDisk: os1tenant1.ImageDisk, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: os1tenant1.Version, + expectedImageURL: os1tenant1.ImageURL, + expectedImageSHA: os1tenant1.ImageSHA, + expectedImageAuthType: os1tenant1.ImageAuthType, + expectedImageAuthToken: os1tenant1.ImageAuthToken, + expectedImageDisk: os1tenant1.ImageDisk, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear version", @@ -1679,21 +1636,20 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramVersion: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: os1tenant1.ImageURL, - expectedImageSHA: os1tenant1.ImageSHA, - expectedImageAuthType: os1tenant1.ImageAuthType, - expectedImageAuthToken: os1tenant1.ImageAuthToken, - expectedImageDisk: os1tenant1.ImageDisk, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: os1tenant1.ImageURL, + expectedImageSHA: os1tenant1.ImageSHA, + expectedImageAuthType: os1tenant1.ImageAuthType, + expectedImageAuthToken: os1tenant1.ImageAuthToken, + expectedImageDisk: os1tenant1.ImageDisk, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear ImageURL", @@ -1701,21 +1657,20 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramImageURL: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedImageSHA: os1tenant1.ImageSHA, - expectedImageAuthType: os1tenant1.ImageAuthType, - expectedImageAuthToken: os1tenant1.ImageAuthToken, - expectedImageDisk: os1tenant1.ImageDisk, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedImageSHA: os1tenant1.ImageSHA, + expectedImageAuthType: os1tenant1.ImageAuthType, + expectedImageAuthToken: os1tenant1.ImageAuthToken, + expectedImageDisk: os1tenant1.ImageDisk, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear ImageSHA", @@ -1723,21 +1678,20 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramImageSHA: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedImageSHA: nil, - expectedImageAuthType: os1tenant1.ImageAuthType, - expectedImageAuthToken: os1tenant1.ImageAuthToken, - expectedImageDisk: os1tenant1.ImageDisk, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedImageSHA: nil, + expectedImageAuthType: os1tenant1.ImageAuthType, + expectedImageAuthToken: os1tenant1.ImageAuthToken, + expectedImageDisk: os1tenant1.ImageDisk, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear ImageAuthType", @@ -1745,21 +1699,20 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramImageAuthType: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedImageSHA: nil, - expectedImageAuthType: nil, - expectedImageAuthToken: os1tenant1.ImageAuthToken, - expectedImageDisk: os1tenant1.ImageDisk, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedImageSHA: nil, + expectedImageAuthType: nil, + expectedImageAuthToken: os1tenant1.ImageAuthToken, + expectedImageDisk: os1tenant1.ImageDisk, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear ImageAuthToken", @@ -1767,21 +1720,20 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramImageAuthToken: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedImageSHA: nil, - expectedImageAuthType: nil, - expectedImageAuthToken: nil, - expectedImageDisk: os1tenant1.ImageDisk, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedImageSHA: nil, + expectedImageAuthType: nil, + expectedImageAuthToken: nil, + expectedImageDisk: os1tenant1.ImageDisk, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear ImageDisk", @@ -1789,21 +1741,20 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramImageDisk: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedImageSHA: nil, - expectedImageAuthType: nil, - expectedImageAuthToken: nil, - expectedImageDisk: nil, - expectedRootFsID: os1tenant1.RootFsID, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedImageSHA: nil, + expectedImageAuthType: nil, + expectedImageAuthToken: nil, + expectedImageDisk: nil, + expectedRootFsID: os1tenant1.RootFsID, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear RootFsId", @@ -1811,21 +1762,20 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramRootFsID: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedImageSHA: nil, - expectedImageAuthType: nil, - expectedImageAuthToken: nil, - expectedImageDisk: nil, - expectedRootFsID: nil, - expectedRootFsLabel: os1tenant1.RootFsLabel, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedImageSHA: nil, + expectedImageAuthType: nil, + expectedImageAuthToken: nil, + expectedImageDisk: nil, + expectedRootFsID: nil, + expectedRootFsLabel: os1tenant1.RootFsLabel, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear RootFsLabel", @@ -1833,21 +1783,20 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramRootFsLabel: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedImageSHA: nil, - expectedImageAuthType: nil, - expectedImageAuthToken: nil, - expectedImageDisk: nil, - expectedRootFsID: nil, - expectedRootFsLabel: nil, - expectedIpxeScript: os1tenant1.IpxeScript, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedImageSHA: nil, + expectedImageAuthType: nil, + expectedImageAuthToken: nil, + expectedImageDisk: nil, + expectedRootFsID: nil, + expectedRootFsLabel: nil, + expectedIpxeScript: os1tenant1.IpxeScript, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear IpxeScript", @@ -1855,15 +1804,14 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramIpxeScript: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedIpxeScript: nil, - expectedUserData: os1tenant1.UserData, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedIpxeScript: nil, + expectedUserData: os1tenant1.UserData, + expectedUpdate: true, }, { desc: "can clear UserData", @@ -1871,96 +1819,91 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { paramUserData: true, - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedImageSHA: nil, - expectedImageAuthType: nil, - expectedImageAuthToken: nil, - expectedImageDisk: nil, - expectedRootFsID: nil, - expectedRootFsLabel: nil, - expectedIpxeScript: nil, - expectedUserData: nil, - expectedUpdate: true, + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedImageSHA: nil, + expectedImageAuthType: nil, + expectedImageAuthToken: nil, + expectedImageDisk: nil, + expectedRootFsID: nil, + expectedRootFsLabel: nil, + expectedIpxeScript: nil, + expectedUserData: nil, + expectedUpdate: true, }, { desc: "can clear multiple fields at once", os: os1tenant2, - paramDescription: true, - paramInfrastructureProviderID: true, - paramTenantID: true, - paramControllerOperatingSystemID: true, - paramVersion: true, - paramImageURL: true, - paramImageSHA: true, - paramImageAuthType: true, - paramImageAuthToken: true, - paramImageDisk: true, - paramRootFsID: true, - paramRootFsLabel: true, - paramIpxeScript: true, - paramUserData: true, - - expectedDescription: nil, - expectedInfrastructureProviderID: nil, - expectedTenantID: nil, - expectedControllerOperatingSystemID: nil, - expectedVersion: nil, - expectedImageURL: nil, - expectedImageSHA: nil, - expectedImageAuthType: nil, - expectedImageAuthToken: nil, - expectedImageDisk: nil, - expectedRootFsID: nil, - expectedRootFsLabel: nil, - expectedIpxeScript: nil, - expectedUserData: nil, - expectedUpdate: true, + paramDescription: true, + paramInfrastructureProviderID: true, + paramTenantID: true, + paramVersion: true, + paramImageURL: true, + paramImageSHA: true, + paramImageAuthType: true, + paramImageAuthToken: true, + paramImageDisk: true, + paramRootFsID: true, + paramRootFsLabel: true, + paramIpxeScript: true, + paramUserData: true, + + expectedDescription: nil, + expectedInfrastructureProviderID: nil, + expectedTenantID: nil, + expectedVersion: nil, + expectedImageURL: nil, + expectedImageSHA: nil, + expectedImageAuthType: nil, + expectedImageAuthToken: nil, + expectedImageDisk: nil, + expectedRootFsID: nil, + expectedRootFsLabel: nil, + expectedIpxeScript: nil, + expectedUserData: nil, + expectedUpdate: true, }, { desc: "nop when no cleared fields are specified", os: os2tenant1, - expectedDescription: os2tenant1.Description, - expectedInfrastructureProviderID: os2tenant1.InfrastructureProviderID, - expectedTenantID: os2tenant1.TenantID, - expectedControllerOperatingSystemID: os2tenant1.ControllerOperatingSystemID, - expectedVersion: os2tenant1.Version, - expectedImageURL: os2tenant1.ImageURL, - expectedImageSHA: os2tenant1.ImageSHA, - expectedImageAuthType: os2tenant1.ImageAuthType, - expectedImageAuthToken: os2tenant1.ImageAuthToken, - expectedImageDisk: os2tenant1.ImageDisk, - expectedRootFsID: os2tenant1.RootFsID, - expectedRootFsLabel: os2tenant1.RootFsLabel, - expectedIpxeScript: os2tenant1.IpxeScript, - expectedUserData: os2tenant1.UserData, - expectedUpdate: false, + expectedDescription: os2tenant1.Description, + expectedInfrastructureProviderID: os2tenant1.InfrastructureProviderID, + expectedTenantID: os2tenant1.TenantID, + expectedVersion: os2tenant1.Version, + expectedImageURL: os2tenant1.ImageURL, + expectedImageSHA: os2tenant1.ImageSHA, + expectedImageAuthType: os2tenant1.ImageAuthType, + expectedImageAuthToken: os2tenant1.ImageAuthToken, + expectedImageDisk: os2tenant1.ImageDisk, + expectedRootFsID: os2tenant1.RootFsID, + expectedRootFsLabel: os2tenant1.RootFsLabel, + expectedIpxeScript: os2tenant1.IpxeScript, + expectedUserData: os2tenant1.UserData, + expectedUpdate: false, }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { input := OperatingSystemClearInput{ - OperatingSystemId: tc.os.ID, - Description: tc.paramDescription, - InfrastructureProviderID: tc.paramInfrastructureProviderID, - TenantID: tc.paramTenantID, - ControllerOperatingSystemID: tc.paramControllerOperatingSystemID, - Version: tc.paramVersion, - ImageURL: tc.paramImageURL, - ImageSHA: tc.paramImageSHA, - ImageAuthType: tc.paramImageAuthType, - ImageAuthToken: tc.paramImageAuthToken, - ImageDisk: tc.paramImageDisk, - RootFsId: tc.paramRootFsID, - RootFsLabel: tc.paramRootFsLabel, - IpxeScript: tc.paramIpxeScript, - UserData: tc.paramUserData, + OperatingSystemId: tc.os.ID, + Description: tc.paramDescription, + InfrastructureProviderID: tc.paramInfrastructureProviderID, + TenantID: tc.paramTenantID, + Version: tc.paramVersion, + ImageURL: tc.paramImageURL, + ImageSHA: tc.paramImageSHA, + ImageAuthType: tc.paramImageAuthType, + ImageAuthToken: tc.paramImageAuthToken, + ImageDisk: tc.paramImageDisk, + RootFsId: tc.paramRootFsID, + RootFsLabel: tc.paramRootFsLabel, + IpxeScript: tc.paramIpxeScript, + UserData: tc.paramUserData, } tmp, err := ossd.Clear(ctx, nil, input) assert.Nil(t, err) @@ -1977,10 +1920,6 @@ func TestOperatingSystemSQLDAO_Clear(t *testing.T) { if tc.expectedTenantID != nil { assert.Equal(t, *tc.expectedTenantID, *tmp.TenantID) } - assert.Equal(t, tc.expectedControllerOperatingSystemID == nil, tmp.ControllerOperatingSystemID == nil) - if tc.expectedControllerOperatingSystemID != nil { - assert.Equal(t, *tc.expectedControllerOperatingSystemID, *tmp.ControllerOperatingSystemID) - } assert.Equal(t, tc.expectedVersion == nil, tmp.Version == nil) if tc.expectedVersion != nil { assert.Equal(t, *tc.expectedVersion, *tmp.Version) @@ -2044,26 +1983,24 @@ func TestOperatingSystemSQLDAO_Delete(t *testing.T) { tenant := testOperatingSystemBuildTenant(t, dbSession, "testTenant") user := testOperatingSystemBuildUser(t, dbSession, "testUser") ossd := NewOperatingSystemDAO(dbSession) - dummyUUID := uuid.New() os1, err := ossd.Create( ctx, nil, OperatingSystemCreateInput{ - Name: "os1", - Description: db.GetStrPtr("description"), - Org: "testOrg", - InfrastructureProviderID: &ip.ID, - TenantID: &tenant.ID, - ControllerOperatingSystemID: &dummyUUID, - Version: db.GetStrPtr("version"), - OsType: "ipxe", - ImageURL: db.GetStrPtr("imageURL"), - IpxeScript: db.GetStrPtr("ipxeScript"), - UserData: db.GetStrPtr("userData"), - IsCloudInit: true, - AllowOverride: true, - EnableBlockStorage: true, - PhoneHomeEnabled: true, - Status: OperatingSystemStatusPending, - CreatedBy: user.ID, + Name: "os1", + Description: db.GetStrPtr("description"), + Org: "testOrg", + InfrastructureProviderID: &ip.ID, + TenantID: &tenant.ID, + Version: db.GetStrPtr("version"), + OsType: "ipxe", + ImageURL: db.GetStrPtr("imageURL"), + IpxeScript: db.GetStrPtr("ipxeScript"), + UserData: db.GetStrPtr("userData"), + IsCloudInit: true, + AllowOverride: true, + EnableBlockStorage: true, + PhoneHomeEnabled: true, + Status: OperatingSystemStatusPending, + CreatedBy: user.ID, }) assert.Nil(t, err) assert.NotNil(t, os1) diff --git a/db/pkg/db/model/operatingsystemsiteassociation.go b/db/pkg/db/model/operatingsystemsiteassociation.go index 912fadb17..618c28b06 100644 --- a/db/pkg/db/model/operatingsystemsiteassociation.go +++ b/db/pkg/db/model/operatingsystemsiteassociation.go @@ -83,6 +83,7 @@ type OperatingSystemSiteAssociation struct { Site *Site `bun:"rel:belongs-to,join:site_id=id"` Version *string `bun:"version"` Status string `bun:"status,notnull"` + ControllerState *string `bun:"controller_state"` IsMissingOnSite bool `bun:"is_missing_on_site,notnull"` Created time.Time `bun:"created,nullzero,notnull,default:current_timestamp"` Updated time.Time `bun:"updated,nullzero,notnull,default:current_timestamp"` @@ -106,6 +107,7 @@ type OperatingSystemSiteAssociationUpdateInput struct { SiteID *uuid.UUID Version *string Status *string + ControllerState *string IsMissingOnSite *bool } @@ -413,6 +415,11 @@ func (ossasd OperatingSystemSiteAssociationSQLDAO) Update( updatedFields = append(updatedFields, "is_missing_on_site") ossasd.tracerSpan.SetAttribute(OperatingSystemSiteAssociationDAOSpan, "is_missing_on_site", *input.IsMissingOnSite) } + if input.ControllerState != nil { + ossa.ControllerState = input.ControllerState + updatedFields = append(updatedFields, "controller_state") + ossasd.tracerSpan.SetAttribute(OperatingSystemSiteAssociationDAOSpan, "controller_state", *input.ControllerState) + } if len(updatedFields) > 0 { updatedFields = append(updatedFields, "updated") diff --git a/db/pkg/migrations/20260306120000_ipxe_template.go b/db/pkg/migrations/20260306120000_ipxe_template.go new file mode 100644 index 000000000..b1e2c5bfd --- /dev/null +++ b/db/pkg/migrations/20260306120000_ipxe_template.go @@ -0,0 +1,91 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package migrations + +import ( + "context" + "database/sql" + "fmt" + + "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" + "github.com/uptrace/bun" +) + +func init() { + Migrations.MustRegister(func(ctx context.Context, db *bun.DB) error { + tx, terr := db.BeginTx(ctx, &sql.TxOptions{}) + if terr != nil { + handlePanic(terr, "failed to begin transaction") + } + + // create ipxe_template table + _, err := tx.NewCreateTable().Model((*model.IpxeTemplate)(nil)).IfNotExists().Exec(ctx) + handleError(tx, err) + + // template column + _, err = tx.Exec("ALTER TABLE ipxe_template ADD COLUMN IF NOT EXISTS template TEXT NOT NULL DEFAULT ''") + handleError(tx, err) + + // unique constraint to prevent duplicate templates per site + _, err = tx.Exec("ALTER TABLE ipxe_template DROP CONSTRAINT IF EXISTS ipxe_template_site_id_name_key") + handleError(tx, err) + _, err = tx.Exec("ALTER TABLE ipxe_template ADD CONSTRAINT ipxe_template_site_id_name_key UNIQUE (site_id, name)") + handleError(tx, err) + + // index for site_id + _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_site_id_idx") + handleError(tx, err) + _, err = tx.Exec("CREATE INDEX ipxe_template_site_id_idx ON ipxe_template(site_id)") + handleError(tx, err) + + // index for name + _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_name_idx") + handleError(tx, err) + _, err = tx.Exec("CREATE INDEX ipxe_template_name_idx ON ipxe_template(name)") + handleError(tx, err) + + // index for scope + _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_scope_idx") + handleError(tx, err) + _, err = tx.Exec("CREATE INDEX ipxe_template_scope_idx ON ipxe_template(scope)") + handleError(tx, err) + + // index for created + _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_created_idx") + handleError(tx, err) + _, err = tx.Exec("CREATE INDEX ipxe_template_created_idx ON ipxe_template(created)") + handleError(tx, err) + + // index for updated + _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_updated_idx") + handleError(tx, err) + _, err = tx.Exec("CREATE INDEX ipxe_template_updated_idx ON ipxe_template(updated)") + handleError(tx, err) + + terr = tx.Commit() + if terr != nil { + handlePanic(terr, "failed to commit transaction") + } + + fmt.Print(" [up migration] ") + return nil + }, func(ctx context.Context, db *bun.DB) error { + fmt.Print(" [down migration] No action taken") + return nil + }) +} diff --git a/db/pkg/migrations/20260310100000_os_definition.go b/db/pkg/migrations/20260310100000_os_definition.go new file mode 100644 index 000000000..6188313d9 --- /dev/null +++ b/db/pkg/migrations/20260310100000_os_definition.go @@ -0,0 +1,71 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package migrations + +import ( + "context" + "database/sql" + "fmt" + + "github.com/uptrace/bun" +) + +func init() { + Migrations.MustRegister(func(ctx context.Context, db *bun.DB) error { + tx, terr := db.BeginTx(ctx, &sql.TxOptions{}) + if terr != nil { + handlePanic(terr, "failed to begin transaction") + } + + // Add iPXE definition columns to the operating_system table. + // These fields are populated for OS definitions synced from carbide-core (type = iPXE). + // The primary key (id) is shared between carbide-core and carbide-rest: both sides use + // the same UUID, enforced by the inventory sync workflows. + + _, err := tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_id TEXT NULL") + handleError(tx, err) + + _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_parameters JSONB NULL") + handleError(tx, err) + + _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_artifacts JSONB NULL") + handleError(tx, err) + + _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_definition_hash TEXT NULL") + handleError(tx, err) + + // controller_operating_system_id is no longer needed: the primary key is the same on + // both sides, so drop the column and its index if they still exist. + _, err = tx.Exec("DROP INDEX IF EXISTS operating_system_controller_os_id_idx") + handleError(tx, err) + + _, err = tx.Exec("ALTER TABLE operating_system DROP COLUMN IF EXISTS controller_operating_system_id") + handleError(tx, err) + + terr = tx.Commit() + if terr != nil { + handlePanic(terr, "failed to commit transaction") + } + + fmt.Print(" [up migration] ") + return nil + }, func(ctx context.Context, db *bun.DB) error { + fmt.Print(" [down migration] No action taken") + return nil + }) +} diff --git a/db/pkg/migrations/20260320100000_os_scope.go b/db/pkg/migrations/20260320100000_os_scope.go new file mode 100644 index 000000000..268156117 --- /dev/null +++ b/db/pkg/migrations/20260320100000_os_scope.go @@ -0,0 +1,54 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package migrations + +import ( + "context" + "database/sql" + "fmt" + + "github.com/uptrace/bun" +) + +func init() { + Migrations.MustRegister(func(ctx context.Context, db *bun.DB) error { + tx, terr := db.BeginTx(ctx, &sql.TxOptions{}) + if terr != nil { + handlePanic(terr, "failed to begin transaction") + } + + // Add scope column to operating_system. + // Controls the synchronization direction for iPXE-based OSes between carbide-rest and carbide-core: + // local (default) – bidirectional, most-recently-updated wins + // global – carbide-rest is source of truth for all provider sites + // limited – carbide-rest is source of truth for a fixed list of sites + _, err := tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_os_scope TEXT NULL") + handleError(tx, err) + + terr = tx.Commit() + if terr != nil { + handlePanic(terr, "failed to commit transaction") + } + + fmt.Print(" [up migration] ") + return nil + }, func(ctx context.Context, db *bun.DB) error { + fmt.Print(" [down migration] No action taken") + return nil + }) +} diff --git a/db/pkg/migrations/20260321100000_ossa_core_status.go b/db/pkg/migrations/20260321100000_ossa_core_status.go new file mode 100644 index 000000000..c0ad2d129 --- /dev/null +++ b/db/pkg/migrations/20260321100000_ossa_core_status.go @@ -0,0 +1,53 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package migrations + +import ( + "context" + "database/sql" + "fmt" + + "github.com/uptrace/bun" +) + +func init() { + Migrations.MustRegister(func(ctx context.Context, db *bun.DB) error { + tx, terr := db.BeginTx(ctx, &sql.TxOptions{}) + if terr != nil { + handlePanic(terr, "failed to begin transaction") + } + + // Stores the per-site operational status reported by carbide-core (TenantState). + // Used by global/limited-scoped OSes to compute an aggregate status: + // all sites READY -> OS status = READY + // any site not READY -> OS status = PROVISIONING + _, err := tx.Exec("ALTER TABLE operating_system_site_association ADD COLUMN IF NOT EXISTS controller_state TEXT NULL") + handleError(tx, err) + + terr = tx.Commit() + if terr != nil { + handlePanic(terr, "failed to commit transaction") + } + + fmt.Print(" [up migration] ") + return nil + }, func(ctx context.Context, db *bun.DB) error { + fmt.Print(" [down migration] No action taken") + return nil + }) +} diff --git a/openapi/spec.yaml b/openapi/spec.yaml index a8e450b18..2e11026c0 100644 --- a/openapi/spec.yaml +++ b/openapi/spec.yaml @@ -183,6 +183,11 @@ tags: - name: Operating System description: |- Operating Systems in NICo are typically iPXE scripts that are used to boot Machines. + - name: iPXE Template + description: |- + iPXE Templates are boot script templates propagated from bare-metal-manager-core. They are read-only in the REST API. + + Templates define the iPXE boot script structure with variable placeholders for parameters and artifact references. They can be used when creating iPXE template-based Operating System definitions. - name: Instance Type description: |- Instance Types allow grouping Machines into a pool defined by their capabilities. Providers can then allocate a portion of the Instance Type pool to a Tenant. @@ -7540,6 +7545,10 @@ paths: imageDisk: /dev/sda rootFsId: 6c2ac315-3040-4728-94eb-b66d320206c1 ipxeScript: null + ipxeTemplateId: null + ipxeTemplateParameters: [] + ipxeTemplateArtifacts: [] + scope: null userData: null isCloudInit: true phoneHomeEnabled: false @@ -7603,6 +7612,10 @@ paths: initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell + ipxeTemplateId: null + ipxeTemplateParameters: [] + ipxeTemplateArtifacts: [] + scope: null userData: |- #cloud-config autoinstall: @@ -7624,6 +7637,56 @@ paths: imageUrl: null rootFsId: null rootFsLabel: null + siteAssociations: [] + isActive: true + deactivationNote: null + status: Pending + statusHistory: + - status: Pending + message: 'Request received, pending processing' + created: '2019-08-24T14:15:22Z' + updated: '2019-08-24T14:15:22Z' + created: '2019-08-24T14:15:22Z' + updated: '2019-08-24T14:15:22Z' + iPXE Template OS (global scope): + value: + - id: 7a1b2c3d-e4f5-6789-abcd-ef0123456789 + name: ubuntu-autoinstall-24.04 + description: Ubuntu 24.04 via iPXE template autoinstall + infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e + tenantId: null + type: Templated iPXE + ipxeScript: null + ipxeTemplateId: + ipxeTemplateParameters: + - name: kernel_args + value: console=ttyS0,115200n8 + ipxeTemplateArtifacts: + - name: kernel + url: 'https://releases.ubuntu.com/24.04/netboot/amd64/linux' + sha: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 + cacheStrategy: CACHE_AS_NEEDED + - name: initrd + url: 'https://releases.ubuntu.com/24.04/netboot/amd64/initrd' + sha: d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 + cacheStrategy: CACHE_AS_NEEDED + - name: autoinstall + url: 'http://install.example.com/autoinstall.yaml' + sha: 3c363836cf4e16666669a25da280a1865c2d2874c6e9e3460c40db9b5a811528 + cacheStrategy: REMOTE_ONLY + scope: Global + userData: null + isCloudInit: false + phoneHomeEnabled: false + allowOverride: false + imageAuthToken: null + imageAuthType: null + imageDisk: null + imageSha: null + imageUrl: null + rootFsId: null + rootFsLabel: null + siteAssociations: [] isActive: true deactivationNote: null status: Pending @@ -7660,6 +7723,7 @@ paths: enum: - Image - iPXE + - Templated iPXE in: query name: type description: Filter Operating Systems by Type @@ -7736,6 +7800,10 @@ paths: initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell + ipxeTemplateId: null + ipxeTemplateParameters: [] + ipxeTemplateArtifacts: [] + scope: null userData: |- #cloud-config autoinstall: @@ -7768,6 +7836,55 @@ paths: updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' + iPXE Template OS (global scope): + value: + id: 7a1b2c3d-e4f5-6789-abcd-ef0123456789 + name: ubuntu-autoinstall-24.04 + description: Ubuntu 24.04 via iPXE template autoinstall + infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e + tenantId: null + type: Templated iPXE + ipxeScript: null + ipxeTemplateId: + ipxeTemplateParameters: + - name: kernel_args + value: console=ttyS0,115200n8 + ipxeTemplateArtifacts: + - name: kernel + url: 'https://releases.ubuntu.com/24.04/netboot/amd64/linux' + sha: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 + cacheStrategy: CACHE_AS_NEEDED + - name: initrd + url: 'https://releases.ubuntu.com/24.04/netboot/amd64/initrd' + sha: d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 + cacheStrategy: CACHE_AS_NEEDED + - name: autoinstall + url: 'http://install.example.com/autoinstall.yaml' + sha: 3c363836cf4e16666669a25da280a1865c2d2874c6e9e3460c40db9b5a811528 + cacheStrategy: REMOTE_ONLY + scope: Global + userData: null + isCloudInit: false + phoneHomeEnabled: false + allowOverride: false + imageAuthToken: null + imageAuthType: null + imageDisk: null + imageSha: null + imageUrl: null + rootFsId: null + rootFsLabel: null + siteAssociations: [] + isActive: true + deactivationNote: null + status: Pending + statusHistory: + - status: Pending + message: 'Request received, pending processing' + created: '2019-08-24T14:15:22Z' + updated: '2019-08-24T14:15:22Z' + created: '2019-08-24T14:15:22Z' + updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': @@ -7775,13 +7892,17 @@ paths: description: |- Create an Operating System for the org. - Either `infrastructureProviderId` or `tenantId` must be provided in request data. Both cannot be provided at the same time. + Either `infrastructureProviderId` or `tenantId` must be provided in request data. Both cannot be provided at the same time. For iPXE template-based OS definitions, Provider Admin may omit `tenantId` and have ownership resolved automatically. If `infrastructureProviderId` is provided in request data, then org must have an Infrastructure Provider entity and its ID should match the query param value. User must have `FORGE_PROVIDER_ADMIN` role. If `tenantId` is provided in request data, then org must have a Tenant entity and its ID should match the query param value. User must have `FORGE_TENANT_ADMIN` role. - Only Tenants are allowed to create Operating System for MVP. + Provider Admins can create iPXE template-based Operating Systems (using `ipxeTemplateId`). Tenants can create iPXE script-based or Image-based Operating Systems. + + `ipxeScript`, `ipxeTemplateId`, and `imageUrl` are mutually exclusive — only one may be specified. When `ipxeTemplateId` is used, `ipxeTemplateParameters` and `ipxeTemplateArtifacts` can be provided to configure the template. + + The `scope` field is required for Templated iPXE OSes and controls synchronization direction: `Local` (bidirectional), `Global` (rest-to-core for all sites), or `Limited` (rest-to-core for sites in `siteIds`). Must not be specified for other OS types. requestBody: content: application/json: @@ -7831,6 +7952,31 @@ paths: isCloudInit: true phoneHomeEnabled: false allowOverride: false + iPXE Template OS (global scope): + value: + name: ubuntu-autoinstall-24.04 + description: Ubuntu 24.04 via iPXE template autoinstall + ipxeTemplateId: + ipxeTemplateParameters: + - name: kernel_args + value: console=ttyS0,115200n8 + ipxeTemplateArtifacts: + - name: kernel + url: 'https://releases.ubuntu.com/24.04/netboot/amd64/linux' + sha: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 + cacheStrategy: CACHE_AS_NEEDED + - name: initrd + url: 'https://releases.ubuntu.com/24.04/netboot/amd64/initrd' + sha: d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 + cacheStrategy: CACHE_AS_NEEDED + - name: autoinstall + url: 'http://install.example.com/autoinstall.yaml' + sha: 3c363836cf4e16666669a25da280a1865c2d2874c6e9e3460c40db9b5a811528 + cacheStrategy: REMOTE_ONLY + scope: Global + isCloudInit: false + phoneHomeEnabled: false + allowOverride: false tags: - Operating System '/v2/org/{org}/carbide/operating-system/{operatingSystemId}': @@ -7875,6 +8021,10 @@ paths: rootFsId: 6c2ac315-3040-4728-94eb-b66d320206c1 rootFsLabel: null ipxeScript: null + ipxeTemplateId: null + ipxeTemplateParameters: [] + ipxeTemplateArtifacts: [] + scope: null userData: null isCloudInit: true phoneHomeEnabled: false @@ -7938,6 +8088,10 @@ paths: initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell + ipxeTemplateId: null + ipxeTemplateParameters: [] + ipxeTemplateArtifacts: [] + scope: null userData: |- #cloud-config autoinstall: @@ -8029,6 +8183,10 @@ paths: initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell + ipxeTemplateId: null + ipxeTemplateParameters: [] + ipxeTemplateArtifacts: [] + scope: null userData: |- #cloud-config autoinstall: @@ -8071,6 +8229,8 @@ paths: If the Operating System has `infrastructureProviderId` set, then org must have an Infrastructure Provider entity and its ID should match the Operating System Infrastructure Provider ID. User must have `FORGE_PROVIDER_ADMIN` authorization role. Provider must own the Operating System. If the Operating System has `tenantId` set, then org must have a Tenant entity and its ID should match the Operating System Tenant ID. User must have `FORGE_TENANT_ADMIN` role. Tenant must own the Operating System. + + The `type` and `scope` of an Operating System cannot be changed after creation. tags: - Operating System requestBody: @@ -8084,6 +8244,169 @@ paths: name: ubuntu-22.04-lts description: Ubuntu 22.04 LTS allowOverride: true + '/v2/org/{org}/carbide/ipxe-template': + parameters: + - schema: + type: string + name: org + in: path + required: true + description: Name of the Org + get: + summary: Retrieve all iPXE Templates + tags: + - iPXE Template + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/IpxeTemplate' + examples: + example-1: + value: + - id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + siteId: 4b36152c-f48d-4bcc-a722-0fd8e2ad209a + name: ubuntu-autoinstall + template: |- + #!ipxe + kernel {{.kernel}} autoinstall ds=nocloud-net + initrd {{.initrd}} + boot || imgfree + shell + requiredParams: + - hostname + reservedParams: + - kernel + - initrd + requiredArtifacts: + - kernel + - initrd + scope: Public + created: '2025-10-15T10:30:00Z' + updated: '2025-10-15T10:30:00Z' + headers: + X-Pagination: + schema: + type: string + example: '{"pageNumber":1,"pageSize":20,"total":5,"orderBy": "CREATED_DESC"}' + description: Pagination result in JSON format + '400': + $ref: '#/components/responses/ValidationError' + '403': + $ref: '#/components/responses/ForbiddenError' + operationId: get-all-ipxe-template + description: |- + Retrieve all iPXE templates propagated from bare-metal-manager-core for a given site. + + The `siteId` query parameter is required. Templates are propagated one-way from core and are read-only. + + Provider Admins/Viewers can access templates for their provider's sites. Tenant Admins with TargetedInstanceCreation capability can access templates for sites they have a Tenant Account on. + parameters: + - schema: + type: string + format: uuid + in: query + name: siteId + required: true + description: ID of the Site whose templates to retrieve + - schema: + type: string + enum: + - Internal + - Public + in: query + name: scope + description: Filter templates by scope + - schema: + type: integer + example: 1 + default: 1 + minimum: 1 + in: query + name: pageNumber + description: Page number for pagination query + - schema: + type: integer + minimum: 1 + maximum: 100 + example: 20 + in: query + name: pageSize + description: Page size for pagination query + - schema: + type: string + enum: + - NAME_ASC + - NAME_DESC + - CREATED_ASC + - CREATED_DESC + - UPDATED_ASC + - UPDATED_DESC + in: query + name: orderBy + description: Ordering for pagination query + '/v2/org/{org}/carbide/ipxe-template/{id}': + parameters: + - schema: + type: string + name: org + in: path + required: true + description: Name of the Org + - schema: + type: string + format: uuid + name: id + in: path + required: true + description: ID of the iPXE Template + get: + summary: Retrieve iPXE Template + tags: + - iPXE Template + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/IpxeTemplate' + examples: + example-1: + value: + id: a1b2c3d4-e5f6-7890-abcd-ef1234567890 + siteId: 4b36152c-f48d-4bcc-a722-0fd8e2ad209a + name: ubuntu-autoinstall + template: |- + #!ipxe + kernel {{.kernel}} autoinstall ds=nocloud-net + initrd {{.initrd}} + boot || imgfree + shell + requiredParams: + - hostname + reservedParams: + - kernel + - initrd + requiredArtifacts: + - kernel + - initrd + scope: Public + created: '2025-10-15T10:30:00Z' + updated: '2025-10-15T10:30:00Z' + '403': + $ref: '#/components/responses/ForbiddenError' + '404': + $ref: '#/components/responses/NotFoundError' + operationId: get-ipxe-template + description: |- + Retrieve an iPXE template by ID. + + Provider Admins/Viewers can access templates for their provider's sites. Tenant Admins with TargetedInstanceCreation capability can access templates for sites they have a Tenant Account on. '/v2/org/{org}/carbide/machine': parameters: - schema: @@ -13857,12 +14180,17 @@ components: description: Ubuntu 22.04 infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 + type: iPXE ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell + ipxeTemplateId: null + ipxeTemplateParameters: [] + ipxeTemplateArtifacts: [] + scope: null userData: |- #cloud-config autoinstall: @@ -13882,6 +14210,14 @@ components: isActive: true deactivationNote: null allowOverride: false + imageAuthToken: null + imageAuthType: null + imageDisk: null + imageSha: null + imageUrl: null + rootFsId: null + rootFsLabel: null + siteAssociations: [] status: Pending statusHistory: - status: Pending @@ -13904,6 +14240,10 @@ components: rootFsId: 6c2ac315-3040-4728-94eb-b66d320206c1 rootFsLabel: null ipxeScript: null + ipxeTemplateId: null + ipxeTemplateParameters: [] + ipxeTemplateArtifacts: [] + scope: null userData: null isCloudInit: true phoneHomeEnabled: false @@ -13956,12 +14296,17 @@ components: description: Ubuntu 22.04 infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 + type: iPXE ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell + ipxeTemplateId: null + ipxeTemplateParameters: [] + ipxeTemplateArtifacts: [] + scope: null userData: |- #cloud-config autoinstall: @@ -13981,6 +14326,14 @@ components: isActive: false deactivationNote: 'iPXE script is referencing a URL that is unreachable, needs to be researched' allowOverride: false + imageAuthToken: null + imageAuthType: null + imageDisk: null + imageSha: null + imageUrl: null + rootFsId: null + rootFsLabel: null + siteAssociations: [] status: Deactivated statusHistory: - status: Deactivated @@ -14027,8 +14380,9 @@ components: type: string description: Type of the Operating System enum: - - iPXE - Image + - iPXE + - Templated iPXE imageUrl: type: - string @@ -14069,7 +14423,31 @@ components: type: - string - 'null' - description: 'iPXE script or URL, only applicable for iPXE based Operating System' + description: 'iPXE script or URL, only applicable for iPXE based Operating System. Mutually exclusive with ipxeTemplateId' + ipxeTemplateId: + type: + - string + - 'null' + description: 'Name of the iPXE template used by this Operating System. Mutually exclusive with ipxeScript' + ipxeTemplateParameters: + type: array + description: Parameters passed to the iPXE template for variable substitution + items: + $ref: '#/components/schemas/IpxeTemplateParameter' + ipxeTemplateArtifacts: + type: array + description: 'Artifacts (kernel, initrd, etc.) for the iPXE OS definition' + items: + $ref: '#/components/schemas/IpxeTemplateArtifact' + scope: + type: + - string + - 'null' + description: 'Synchronization scope. Required for Templated iPXE Operating Systems; nil for all other types' + enum: + - Local + - Global + - Limited userData: type: - string @@ -14235,12 +14613,36 @@ components: items: type: string format: uuid - description: 'Specified only one Site if an Operating System is Image based, more than one Site is not supported"' + description: 'For Image-based OS, specify exactly one Site. For limited-scope Templated iPXE OS, specify the target provider sites' ipxeScript: type: - string - 'null' - description: 'iPXE script or URL, only applicable for iPXE based OS. Cannot be specified if imageUrl is specified' + description: 'iPXE script or URL, only applicable for iPXE based OS. Mutually exclusive with ipxeTemplateId and imageUrl' + ipxeTemplateId: + type: + - string + - 'null' + description: 'Name of an iPXE template to use. Mutually exclusive with ipxeScript and imageUrl. Only Provider Admin can create template-based OSes' + ipxeTemplateParameters: + type: array + description: Parameters to pass to the iPXE template for variable substitution + items: + $ref: '#/components/schemas/IpxeTemplateParameter' + ipxeTemplateArtifacts: + type: array + description: 'Artifacts (kernel, initrd, etc.) required for the iPXE OS definition' + items: + $ref: '#/components/schemas/IpxeTemplateArtifact' + scope: + type: + - string + - 'null' + description: 'Synchronization scope. Required for Templated iPXE OS (when ipxeTemplateId is specified); must not be set for other types' + enum: + - Local + - Global + - Limited imageUrl: type: - string @@ -14333,7 +14735,22 @@ components: type: - string - 'null' - description: 'iPXE script or URL, only applicable for iPXE based OS. Cannot be specified if imageUrl is specified' + description: 'iPXE script or URL, only applicable for iPXE based OS. Mutually exclusive with ipxeTemplateId and imageUrl' + ipxeTemplateId: + type: + - string + - 'null' + description: Name of an iPXE template to use. Mutually exclusive with ipxeScript and imageUrl + ipxeTemplateParameters: + type: array + description: Parameters to pass to the iPXE template. If omitted the existing parameters are kept; if set to an empty array the parameters are cleared + items: + $ref: '#/components/schemas/IpxeTemplateParameter' + ipxeTemplateArtifacts: + type: array + description: 'Artifacts for the iPXE OS definition. If omitted the existing artifacts are kept; if set to an empty array the artifacts are cleared' + items: + $ref: '#/components/schemas/IpxeTemplateArtifact' imageUrl: type: - string @@ -14400,6 +14817,110 @@ components: - string - 'null' description: Optional deactivation note if OS is inactive + IpxeTemplateParameter: + title: IpxeTemplateParameter + type: object + description: A key-value parameter passed to an iPXE template for variable substitution + properties: + name: + type: string + description: Parameter name referenced in the iPXE template + value: + type: string + description: Parameter value substituted into the iPXE template + required: + - name + - value + IpxeTemplateArtifact: + title: IpxeTemplateArtifact + type: object + description: 'An artifact (kernel, initrd, ISO, etc.) required by an iPXE OS definition' + properties: + name: + type: string + description: 'Artifact identifier referenced by the iPXE template (e.g. kernel, initrd)' + url: + type: string + format: uri + description: Remote URL from where the artifact can be retrieved + sha: + type: + - string + - 'null' + description: SHA hash of the artifact for integrity verification + authType: + type: + - string + - 'null' + description: 'Authentication type for the artifact URL (e.g. Basic, Bearer)' + authToken: + type: + - string + - 'null' + description: Auth token to retrieve the artifact from the URL + cacheStrategy: + type: string + description: Strategy for caching the artifact on sites + enum: + - CACHE_AS_NEEDED + - LOCAL_ONLY + - CACHED_ONLY + - REMOTE_ONLY + required: + - name + - url + - cacheStrategy + IpxeTemplate: + title: IpxeTemplate + type: object + description: An iPXE boot template that can be used to create template-based Operating System definitions + properties: + id: + type: string + format: uuid + description: Stable template UUID from core, consistent across all sites + readOnly: true + siteId: + type: string + format: uuid + description: ID of the Site this template was retrieved from + name: + type: string + description: 'Unique template name (e.g. ubuntu-autoinstall, kernel-initrd)' + template: + type: string + description: Raw iPXE script content with template variables + requiredParams: + type: array + description: Parameters that must be provided to render the template + items: + type: string + reservedParams: + type: array + description: Parameters reserved by the template that cannot be user-supplied + items: + type: string + requiredArtifacts: + type: array + description: 'Artifact names (e.g. kernel, initrd) required for the template' + items: + type: string + scope: + type: string + description: 'Visibility of this template: Internal or Public' + enum: + - Internal + - Public + created: + type: string + format: date-time + description: Date/time when the template was created + readOnly: true + updated: + type: string + format: date-time + description: Date/time when the template was last updated + readOnly: true InstanceType: title: InstanceType type: object diff --git a/sdk/standard/api_ipxe_template.go b/sdk/standard/api_ipxe_template.go new file mode 100644 index 000000000..1f6c39c4e --- /dev/null +++ b/sdk/standard/api_ipxe_template.go @@ -0,0 +1,338 @@ +/* +NCX Infra Controller REST API + +NCX Infra Controller REST API allows users to create and manage resources e.g. VPC, Subnets, Instances across all connected NCX Infra Controller datacenters, also referred to as Sites. + +API version: 1.2.1 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package standard + +import ( + "bytes" + "context" + "io" + "net/http" + "net/url" + "strings" +) + +// IPXETemplateAPIService IPXETemplateAPI service +type IPXETemplateAPIService service + +type ApiGetAllIpxeTemplateRequest struct { + ctx context.Context + ApiService *IPXETemplateAPIService + siteId *string + org string + scope *string + pageNumber *int32 + pageSize *int32 + orderBy *string +} + +// ID of the Site whose templates to retrieve +func (r ApiGetAllIpxeTemplateRequest) SiteId(siteId string) ApiGetAllIpxeTemplateRequest { + r.siteId = &siteId + return r +} + +// Filter templates by scope +func (r ApiGetAllIpxeTemplateRequest) Scope(scope string) ApiGetAllIpxeTemplateRequest { + r.scope = &scope + return r +} + +// Page number for pagination query +func (r ApiGetAllIpxeTemplateRequest) PageNumber(pageNumber int32) ApiGetAllIpxeTemplateRequest { + r.pageNumber = &pageNumber + return r +} + +// Page size for pagination query +func (r ApiGetAllIpxeTemplateRequest) PageSize(pageSize int32) ApiGetAllIpxeTemplateRequest { + r.pageSize = &pageSize + return r +} + +// Ordering for pagination query +func (r ApiGetAllIpxeTemplateRequest) OrderBy(orderBy string) ApiGetAllIpxeTemplateRequest { + r.orderBy = &orderBy + return r +} + +func (r ApiGetAllIpxeTemplateRequest) Execute() ([]IpxeTemplate, *http.Response, error) { + return r.ApiService.GetAllIpxeTemplateExecute(r) +} + +/* +GetAllIpxeTemplate Retrieve all iPXE Templates + +Retrieve all iPXE templates propagated from bare-metal-manager-core for a given site. + +The `siteId` query parameter is required. Templates are propagated one-way from core and are read-only. + +Provider Admins/Viewers can access templates for their provider's sites. Tenant Admins with TargetedInstanceCreation capability can access templates for sites they have a Tenant Account on. + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param org Name of the Org + @return ApiGetAllIpxeTemplateRequest +*/ +func (a *IPXETemplateAPIService) GetAllIpxeTemplate(ctx context.Context, org string) ApiGetAllIpxeTemplateRequest { + return ApiGetAllIpxeTemplateRequest{ + ApiService: a, + ctx: ctx, + org: org, + } +} + +// Execute executes the request +// +// @return []IpxeTemplate +func (a *IPXETemplateAPIService) GetAllIpxeTemplateExecute(r ApiGetAllIpxeTemplateRequest) ([]IpxeTemplate, *http.Response, error) { + var ( + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []IpxeTemplate + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "IPXETemplateAPIService.GetAllIpxeTemplate") + if err != nil { + return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/v2/org/{org}/carbide/ipxe-template" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", url.PathEscape(parameterValueToString(r.org, "org")), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + if r.siteId == nil { + return localVarReturnValue, nil, reportError("siteId is required and must be specified") + } + + parameterAddToHeaderOrQuery(localVarQueryParams, "siteId", r.siteId, "form", "") + if r.scope != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "scope", r.scope, "form", "") + } + if r.pageNumber != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "pageNumber", r.pageNumber, "form", "") + } else { + var defaultValue int32 = 1 + parameterAddToHeaderOrQuery(localVarQueryParams, "pageNumber", defaultValue, "form", "") + r.pageNumber = &defaultValue + } + if r.pageSize != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "pageSize", r.pageSize, "form", "") + } + if r.orderBy != nil { + parameterAddToHeaderOrQuery(localVarQueryParams, "orderBy", r.orderBy, "form", "") + } + // to determine the Content-Type header + localVarHTTPContentTypes := []string{} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + if localVarHTTPResponse.StatusCode == 400 { + var v CarbideAPIError + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarReturnValue, localVarHTTPResponse, newErr + } + if localVarHTTPResponse.StatusCode == 403 { + var v CarbideAPIError + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: err.Error(), + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + return localVarReturnValue, localVarHTTPResponse, nil +} + +type ApiGetIpxeTemplateRequest struct { + ctx context.Context + ApiService *IPXETemplateAPIService + org string + id string +} + +func (r ApiGetIpxeTemplateRequest) Execute() (*IpxeTemplate, *http.Response, error) { + return r.ApiService.GetIpxeTemplateExecute(r) +} + +/* +GetIpxeTemplate Retrieve iPXE Template + +Retrieve an iPXE template by ID. + +Provider Admins/Viewers can access templates for their provider's sites. Tenant Admins with TargetedInstanceCreation capability can access templates for sites they have a Tenant Account on. + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param org Name of the Org + @param id ID of the iPXE Template + @return ApiGetIpxeTemplateRequest +*/ +func (a *IPXETemplateAPIService) GetIpxeTemplate(ctx context.Context, org string, id string) ApiGetIpxeTemplateRequest { + return ApiGetIpxeTemplateRequest{ + ApiService: a, + ctx: ctx, + org: org, + id: id, + } +} + +// Execute executes the request +// +// @return IpxeTemplate +func (a *IPXETemplateAPIService) GetIpxeTemplateExecute(r ApiGetIpxeTemplateRequest) (*IpxeTemplate, *http.Response, error) { + var ( + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *IpxeTemplate + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "IPXETemplateAPIService.GetIpxeTemplate") + if err != nil { + return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/v2/org/{org}/carbide/ipxe-template/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"org"+"}", url.PathEscape(parameterValueToString(r.org, "org")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", url.PathEscape(parameterValueToString(r.id, "id")), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + if localVarHTTPResponse.StatusCode == 403 { + var v CarbideAPIError + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarReturnValue, localVarHTTPResponse, newErr + } + if localVarHTTPResponse.StatusCode == 404 { + var v CarbideAPIError + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: err.Error(), + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + return localVarReturnValue, localVarHTTPResponse, nil +} diff --git a/sdk/standard/api_operating_system.go b/sdk/standard/api_operating_system.go index 85b0cb5a2..8848ddb18 100644 --- a/sdk/standard/api_operating_system.go +++ b/sdk/standard/api_operating_system.go @@ -43,13 +43,17 @@ CreateOperatingSystem Create Operating System Create an Operating System for the org. -Either `infrastructureProviderId` or `tenantId` must be provided in request data. Both cannot be provided at the same time. +Either `infrastructureProviderId` or `tenantId` must be provided in request data. Both cannot be provided at the same time. For iPXE template-based OS definitions, Provider Admin may omit `tenantId` and have ownership resolved automatically. If `infrastructureProviderId` is provided in request data, then org must have an Infrastructure Provider entity and its ID should match the query param value. User must have `FORGE_PROVIDER_ADMIN` role. If `tenantId` is provided in request data, then org must have a Tenant entity and its ID should match the query param value. User must have `FORGE_TENANT_ADMIN` role. -Only Tenants are allowed to create Operating System for MVP. +Provider Admins can create iPXE template-based Operating Systems (using `ipxeTemplateId`). Tenants can create iPXE script-based or Image-based Operating Systems. + +`ipxeScript`, `ipxeTemplateId`, and `imageUrl` are mutually exclusive — only one may be specified. When `ipxeTemplateId` is used, `ipxeTemplateParameters` and `ipxeTemplateArtifacts` can be provided to configure the template. + +The `scope` field is required for Templated iPXE OSes and controls synchronization direction: `Local` (bidirectional), `Global` (rest-to-core for all sites), or `Limited` (rest-to-core for sites in `siteIds`). Must not be specified for other OS types. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @param org Name of the Org @@ -633,6 +637,8 @@ If the Operating System has `infrastructureProviderId` set, then org must have a If the Operating System has `tenantId` set, then org must have a Tenant entity and its ID should match the Operating System Tenant ID. User must have `FORGE_TENANT_ADMIN` role. Tenant must own the Operating System. +The `type` and `scope` of an Operating System cannot be changed after creation. + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @param org Name of the Org @param operatingSystemId ID of the Operating System diff --git a/sdk/standard/client.go b/sdk/standard/client.go index 3894953bd..39994ab31 100644 --- a/sdk/standard/client.go +++ b/sdk/standard/client.go @@ -62,6 +62,8 @@ type APIClient struct { IPBlockAPI *IPBlockAPIService + IPXETemplateAPI *IPXETemplateAPIService + InfiniBandPartitionAPI *InfiniBandPartitionAPIService InfrastructureProviderAPI *InfrastructureProviderAPIService @@ -132,6 +134,7 @@ func NewAPIClient(cfg *Configuration) *APIClient { c.ExpectedPowerShelfAPI = (*ExpectedPowerShelfAPIService)(&c.common) c.ExpectedSwitchAPI = (*ExpectedSwitchAPIService)(&c.common) c.IPBlockAPI = (*IPBlockAPIService)(&c.common) + c.IPXETemplateAPI = (*IPXETemplateAPIService)(&c.common) c.InfiniBandPartitionAPI = (*InfiniBandPartitionAPIService)(&c.common) c.InfrastructureProviderAPI = (*InfrastructureProviderAPIService)(&c.common) c.InstanceAPI = (*InstanceAPIService)(&c.common) diff --git a/sdk/standard/model_ipxe_template.go b/sdk/standard/model_ipxe_template.go new file mode 100644 index 000000000..bd6a21941 --- /dev/null +++ b/sdk/standard/model_ipxe_template.go @@ -0,0 +1,459 @@ +/* +NCX Infra Controller REST API + +NCX Infra Controller REST API allows users to create and manage resources e.g. VPC, Subnets, Instances across all connected NCX Infra Controller datacenters, also referred to as Sites. + +API version: 1.2.1 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package standard + +import ( + "encoding/json" + "time" +) + +// checks if the IpxeTemplate type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &IpxeTemplate{} + +// IpxeTemplate An iPXE boot template that can be used to create template-based Operating System definitions +type IpxeTemplate struct { + // Stable template UUID from core, consistent across all sites + Id *string `json:"id,omitempty"` + // ID of the Site this template was retrieved from + SiteId *string `json:"siteId,omitempty"` + // Unique template name (e.g. ubuntu-autoinstall, kernel-initrd) + Name *string `json:"name,omitempty"` + // Raw iPXE script content with template variables + Template *string `json:"template,omitempty"` + // Parameters that must be provided to render the template + RequiredParams []string `json:"requiredParams,omitempty"` + // Parameters reserved by the template that cannot be user-supplied + ReservedParams []string `json:"reservedParams,omitempty"` + // Artifact names (e.g. kernel, initrd) required for the template + RequiredArtifacts []string `json:"requiredArtifacts,omitempty"` + // Visibility of this template: Internal or Public + Scope *string `json:"scope,omitempty"` + // Date/time when the template was created + Created *time.Time `json:"created,omitempty"` + // Date/time when the template was last updated + Updated *time.Time `json:"updated,omitempty"` +} + +// NewIpxeTemplate instantiates a new IpxeTemplate object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewIpxeTemplate() *IpxeTemplate { + this := IpxeTemplate{} + return &this +} + +// NewIpxeTemplateWithDefaults instantiates a new IpxeTemplate object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewIpxeTemplateWithDefaults() *IpxeTemplate { + this := IpxeTemplate{} + return &this +} + +// GetId returns the Id field value if set, zero value otherwise. +func (o *IpxeTemplate) GetId() string { + if o == nil || IsNil(o.Id) { + var ret string + return ret + } + return *o.Id +} + +// GetIdOk returns a tuple with the Id field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetIdOk() (*string, bool) { + if o == nil || IsNil(o.Id) { + return nil, false + } + return o.Id, true +} + +// HasId returns a boolean if a field has been set. +func (o *IpxeTemplate) HasId() bool { + if o != nil && !IsNil(o.Id) { + return true + } + + return false +} + +// SetId gets a reference to the given string and assigns it to the Id field. +func (o *IpxeTemplate) SetId(v string) { + o.Id = &v +} + +// GetSiteId returns the SiteId field value if set, zero value otherwise. +func (o *IpxeTemplate) GetSiteId() string { + if o == nil || IsNil(o.SiteId) { + var ret string + return ret + } + return *o.SiteId +} + +// GetSiteIdOk returns a tuple with the SiteId field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetSiteIdOk() (*string, bool) { + if o == nil || IsNil(o.SiteId) { + return nil, false + } + return o.SiteId, true +} + +// HasSiteId returns a boolean if a field has been set. +func (o *IpxeTemplate) HasSiteId() bool { + if o != nil && !IsNil(o.SiteId) { + return true + } + + return false +} + +// SetSiteId gets a reference to the given string and assigns it to the SiteId field. +func (o *IpxeTemplate) SetSiteId(v string) { + o.SiteId = &v +} + +// GetName returns the Name field value if set, zero value otherwise. +func (o *IpxeTemplate) GetName() string { + if o == nil || IsNil(o.Name) { + var ret string + return ret + } + return *o.Name +} + +// GetNameOk returns a tuple with the Name field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetNameOk() (*string, bool) { + if o == nil || IsNil(o.Name) { + return nil, false + } + return o.Name, true +} + +// HasName returns a boolean if a field has been set. +func (o *IpxeTemplate) HasName() bool { + if o != nil && !IsNil(o.Name) { + return true + } + + return false +} + +// SetName gets a reference to the given string and assigns it to the Name field. +func (o *IpxeTemplate) SetName(v string) { + o.Name = &v +} + +// GetTemplate returns the Template field value if set, zero value otherwise. +func (o *IpxeTemplate) GetTemplate() string { + if o == nil || IsNil(o.Template) { + var ret string + return ret + } + return *o.Template +} + +// GetTemplateOk returns a tuple with the Template field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetTemplateOk() (*string, bool) { + if o == nil || IsNil(o.Template) { + return nil, false + } + return o.Template, true +} + +// HasTemplate returns a boolean if a field has been set. +func (o *IpxeTemplate) HasTemplate() bool { + if o != nil && !IsNil(o.Template) { + return true + } + + return false +} + +// SetTemplate gets a reference to the given string and assigns it to the Template field. +func (o *IpxeTemplate) SetTemplate(v string) { + o.Template = &v +} + +// GetRequiredParams returns the RequiredParams field value if set, zero value otherwise. +func (o *IpxeTemplate) GetRequiredParams() []string { + if o == nil || IsNil(o.RequiredParams) { + var ret []string + return ret + } + return o.RequiredParams +} + +// GetRequiredParamsOk returns a tuple with the RequiredParams field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetRequiredParamsOk() ([]string, bool) { + if o == nil || IsNil(o.RequiredParams) { + return nil, false + } + return o.RequiredParams, true +} + +// HasRequiredParams returns a boolean if a field has been set. +func (o *IpxeTemplate) HasRequiredParams() bool { + if o != nil && !IsNil(o.RequiredParams) { + return true + } + + return false +} + +// SetRequiredParams gets a reference to the given []string and assigns it to the RequiredParams field. +func (o *IpxeTemplate) SetRequiredParams(v []string) { + o.RequiredParams = v +} + +// GetReservedParams returns the ReservedParams field value if set, zero value otherwise. +func (o *IpxeTemplate) GetReservedParams() []string { + if o == nil || IsNil(o.ReservedParams) { + var ret []string + return ret + } + return o.ReservedParams +} + +// GetReservedParamsOk returns a tuple with the ReservedParams field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetReservedParamsOk() ([]string, bool) { + if o == nil || IsNil(o.ReservedParams) { + return nil, false + } + return o.ReservedParams, true +} + +// HasReservedParams returns a boolean if a field has been set. +func (o *IpxeTemplate) HasReservedParams() bool { + if o != nil && !IsNil(o.ReservedParams) { + return true + } + + return false +} + +// SetReservedParams gets a reference to the given []string and assigns it to the ReservedParams field. +func (o *IpxeTemplate) SetReservedParams(v []string) { + o.ReservedParams = v +} + +// GetRequiredArtifacts returns the RequiredArtifacts field value if set, zero value otherwise. +func (o *IpxeTemplate) GetRequiredArtifacts() []string { + if o == nil || IsNil(o.RequiredArtifacts) { + var ret []string + return ret + } + return o.RequiredArtifacts +} + +// GetRequiredArtifactsOk returns a tuple with the RequiredArtifacts field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetRequiredArtifactsOk() ([]string, bool) { + if o == nil || IsNil(o.RequiredArtifacts) { + return nil, false + } + return o.RequiredArtifacts, true +} + +// HasRequiredArtifacts returns a boolean if a field has been set. +func (o *IpxeTemplate) HasRequiredArtifacts() bool { + if o != nil && !IsNil(o.RequiredArtifacts) { + return true + } + + return false +} + +// SetRequiredArtifacts gets a reference to the given []string and assigns it to the RequiredArtifacts field. +func (o *IpxeTemplate) SetRequiredArtifacts(v []string) { + o.RequiredArtifacts = v +} + +// GetScope returns the Scope field value if set, zero value otherwise. +func (o *IpxeTemplate) GetScope() string { + if o == nil || IsNil(o.Scope) { + var ret string + return ret + } + return *o.Scope +} + +// GetScopeOk returns a tuple with the Scope field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetScopeOk() (*string, bool) { + if o == nil || IsNil(o.Scope) { + return nil, false + } + return o.Scope, true +} + +// HasScope returns a boolean if a field has been set. +func (o *IpxeTemplate) HasScope() bool { + if o != nil && !IsNil(o.Scope) { + return true + } + + return false +} + +// SetScope gets a reference to the given string and assigns it to the Scope field. +func (o *IpxeTemplate) SetScope(v string) { + o.Scope = &v +} + +// GetCreated returns the Created field value if set, zero value otherwise. +func (o *IpxeTemplate) GetCreated() time.Time { + if o == nil || IsNil(o.Created) { + var ret time.Time + return ret + } + return *o.Created +} + +// GetCreatedOk returns a tuple with the Created field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetCreatedOk() (*time.Time, bool) { + if o == nil || IsNil(o.Created) { + return nil, false + } + return o.Created, true +} + +// HasCreated returns a boolean if a field has been set. +func (o *IpxeTemplate) HasCreated() bool { + if o != nil && !IsNil(o.Created) { + return true + } + + return false +} + +// SetCreated gets a reference to the given time.Time and assigns it to the Created field. +func (o *IpxeTemplate) SetCreated(v time.Time) { + o.Created = &v +} + +// GetUpdated returns the Updated field value if set, zero value otherwise. +func (o *IpxeTemplate) GetUpdated() time.Time { + if o == nil || IsNil(o.Updated) { + var ret time.Time + return ret + } + return *o.Updated +} + +// GetUpdatedOk returns a tuple with the Updated field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *IpxeTemplate) GetUpdatedOk() (*time.Time, bool) { + if o == nil || IsNil(o.Updated) { + return nil, false + } + return o.Updated, true +} + +// HasUpdated returns a boolean if a field has been set. +func (o *IpxeTemplate) HasUpdated() bool { + if o != nil && !IsNil(o.Updated) { + return true + } + + return false +} + +// SetUpdated gets a reference to the given time.Time and assigns it to the Updated field. +func (o *IpxeTemplate) SetUpdated(v time.Time) { + o.Updated = &v +} + +func (o IpxeTemplate) MarshalJSON() ([]byte, error) { + toSerialize, err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o IpxeTemplate) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Id) { + toSerialize["id"] = o.Id + } + if !IsNil(o.SiteId) { + toSerialize["siteId"] = o.SiteId + } + if !IsNil(o.Name) { + toSerialize["name"] = o.Name + } + if !IsNil(o.Template) { + toSerialize["template"] = o.Template + } + if !IsNil(o.RequiredParams) { + toSerialize["requiredParams"] = o.RequiredParams + } + if !IsNil(o.ReservedParams) { + toSerialize["reservedParams"] = o.ReservedParams + } + if !IsNil(o.RequiredArtifacts) { + toSerialize["requiredArtifacts"] = o.RequiredArtifacts + } + if !IsNil(o.Scope) { + toSerialize["scope"] = o.Scope + } + if !IsNil(o.Created) { + toSerialize["created"] = o.Created + } + if !IsNil(o.Updated) { + toSerialize["updated"] = o.Updated + } + return toSerialize, nil +} + +type NullableIpxeTemplate struct { + value *IpxeTemplate + isSet bool +} + +func (v NullableIpxeTemplate) Get() *IpxeTemplate { + return v.value +} + +func (v *NullableIpxeTemplate) Set(val *IpxeTemplate) { + v.value = val + v.isSet = true +} + +func (v NullableIpxeTemplate) IsSet() bool { + return v.isSet +} + +func (v *NullableIpxeTemplate) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableIpxeTemplate(val *IpxeTemplate) *NullableIpxeTemplate { + return &NullableIpxeTemplate{value: val, isSet: true} +} + +func (v NullableIpxeTemplate) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableIpxeTemplate) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} diff --git a/sdk/standard/model_ipxe_template_artifact.go b/sdk/standard/model_ipxe_template_artifact.go new file mode 100644 index 000000000..4a2716485 --- /dev/null +++ b/sdk/standard/model_ipxe_template_artifact.go @@ -0,0 +1,359 @@ +/* +NCX Infra Controller REST API + +NCX Infra Controller REST API allows users to create and manage resources e.g. VPC, Subnets, Instances across all connected NCX Infra Controller datacenters, also referred to as Sites. + +API version: 1.2.1 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package standard + +import ( + "bytes" + "encoding/json" + "fmt" +) + +// checks if the IpxeTemplateArtifact type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &IpxeTemplateArtifact{} + +// IpxeTemplateArtifact An artifact (kernel, initrd, ISO, etc.) required by an iPXE OS definition +type IpxeTemplateArtifact struct { + // Artifact identifier referenced by the iPXE template (e.g. kernel, initrd) + Name string `json:"name"` + // Remote URL from where the artifact can be retrieved + Url string `json:"url"` + // SHA hash of the artifact for integrity verification + Sha NullableString `json:"sha,omitempty"` + // Authentication type for the artifact URL (e.g. Basic, Bearer) + AuthType NullableString `json:"authType,omitempty"` + // Auth token to retrieve the artifact from the URL + AuthToken NullableString `json:"authToken,omitempty"` + // Strategy for caching the artifact on sites + CacheStrategy string `json:"cacheStrategy"` +} + +type _IpxeTemplateArtifact IpxeTemplateArtifact + +// NewIpxeTemplateArtifact instantiates a new IpxeTemplateArtifact object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewIpxeTemplateArtifact(name string, url string, cacheStrategy string) *IpxeTemplateArtifact { + this := IpxeTemplateArtifact{} + this.Name = name + this.Url = url + this.CacheStrategy = cacheStrategy + return &this +} + +// NewIpxeTemplateArtifactWithDefaults instantiates a new IpxeTemplateArtifact object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewIpxeTemplateArtifactWithDefaults() *IpxeTemplateArtifact { + this := IpxeTemplateArtifact{} + return &this +} + +// GetName returns the Name field value +func (o *IpxeTemplateArtifact) GetName() string { + if o == nil { + var ret string + return ret + } + + return o.Name +} + +// GetNameOk returns a tuple with the Name field value +// and a boolean to check if the value has been set. +func (o *IpxeTemplateArtifact) GetNameOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.Name, true +} + +// SetName sets field value +func (o *IpxeTemplateArtifact) SetName(v string) { + o.Name = v +} + +// GetUrl returns the Url field value +func (o *IpxeTemplateArtifact) GetUrl() string { + if o == nil { + var ret string + return ret + } + + return o.Url +} + +// GetUrlOk returns a tuple with the Url field value +// and a boolean to check if the value has been set. +func (o *IpxeTemplateArtifact) GetUrlOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.Url, true +} + +// SetUrl sets field value +func (o *IpxeTemplateArtifact) SetUrl(v string) { + o.Url = v +} + +// GetSha returns the Sha field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *IpxeTemplateArtifact) GetSha() string { + if o == nil || IsNil(o.Sha.Get()) { + var ret string + return ret + } + return *o.Sha.Get() +} + +// GetShaOk returns a tuple with the Sha field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *IpxeTemplateArtifact) GetShaOk() (*string, bool) { + if o == nil { + return nil, false + } + return o.Sha.Get(), o.Sha.IsSet() +} + +// HasSha returns a boolean if a field has been set. +func (o *IpxeTemplateArtifact) HasSha() bool { + if o != nil && o.Sha.IsSet() { + return true + } + + return false +} + +// SetSha gets a reference to the given NullableString and assigns it to the Sha field. +func (o *IpxeTemplateArtifact) SetSha(v string) { + o.Sha.Set(&v) +} + +// SetShaNil sets the value for Sha to be an explicit nil +func (o *IpxeTemplateArtifact) SetShaNil() { + o.Sha.Set(nil) +} + +// UnsetSha ensures that no value is present for Sha, not even an explicit nil +func (o *IpxeTemplateArtifact) UnsetSha() { + o.Sha.Unset() +} + +// GetAuthType returns the AuthType field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *IpxeTemplateArtifact) GetAuthType() string { + if o == nil || IsNil(o.AuthType.Get()) { + var ret string + return ret + } + return *o.AuthType.Get() +} + +// GetAuthTypeOk returns a tuple with the AuthType field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *IpxeTemplateArtifact) GetAuthTypeOk() (*string, bool) { + if o == nil { + return nil, false + } + return o.AuthType.Get(), o.AuthType.IsSet() +} + +// HasAuthType returns a boolean if a field has been set. +func (o *IpxeTemplateArtifact) HasAuthType() bool { + if o != nil && o.AuthType.IsSet() { + return true + } + + return false +} + +// SetAuthType gets a reference to the given NullableString and assigns it to the AuthType field. +func (o *IpxeTemplateArtifact) SetAuthType(v string) { + o.AuthType.Set(&v) +} + +// SetAuthTypeNil sets the value for AuthType to be an explicit nil +func (o *IpxeTemplateArtifact) SetAuthTypeNil() { + o.AuthType.Set(nil) +} + +// UnsetAuthType ensures that no value is present for AuthType, not even an explicit nil +func (o *IpxeTemplateArtifact) UnsetAuthType() { + o.AuthType.Unset() +} + +// GetAuthToken returns the AuthToken field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *IpxeTemplateArtifact) GetAuthToken() string { + if o == nil || IsNil(o.AuthToken.Get()) { + var ret string + return ret + } + return *o.AuthToken.Get() +} + +// GetAuthTokenOk returns a tuple with the AuthToken field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *IpxeTemplateArtifact) GetAuthTokenOk() (*string, bool) { + if o == nil { + return nil, false + } + return o.AuthToken.Get(), o.AuthToken.IsSet() +} + +// HasAuthToken returns a boolean if a field has been set. +func (o *IpxeTemplateArtifact) HasAuthToken() bool { + if o != nil && o.AuthToken.IsSet() { + return true + } + + return false +} + +// SetAuthToken gets a reference to the given NullableString and assigns it to the AuthToken field. +func (o *IpxeTemplateArtifact) SetAuthToken(v string) { + o.AuthToken.Set(&v) +} + +// SetAuthTokenNil sets the value for AuthToken to be an explicit nil +func (o *IpxeTemplateArtifact) SetAuthTokenNil() { + o.AuthToken.Set(nil) +} + +// UnsetAuthToken ensures that no value is present for AuthToken, not even an explicit nil +func (o *IpxeTemplateArtifact) UnsetAuthToken() { + o.AuthToken.Unset() +} + +// GetCacheStrategy returns the CacheStrategy field value +func (o *IpxeTemplateArtifact) GetCacheStrategy() string { + if o == nil { + var ret string + return ret + } + + return o.CacheStrategy +} + +// GetCacheStrategyOk returns a tuple with the CacheStrategy field value +// and a boolean to check if the value has been set. +func (o *IpxeTemplateArtifact) GetCacheStrategyOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.CacheStrategy, true +} + +// SetCacheStrategy sets field value +func (o *IpxeTemplateArtifact) SetCacheStrategy(v string) { + o.CacheStrategy = v +} + +func (o IpxeTemplateArtifact) MarshalJSON() ([]byte, error) { + toSerialize, err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o IpxeTemplateArtifact) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + toSerialize["name"] = o.Name + toSerialize["url"] = o.Url + if o.Sha.IsSet() { + toSerialize["sha"] = o.Sha.Get() + } + if o.AuthType.IsSet() { + toSerialize["authType"] = o.AuthType.Get() + } + if o.AuthToken.IsSet() { + toSerialize["authToken"] = o.AuthToken.Get() + } + toSerialize["cacheStrategy"] = o.CacheStrategy + return toSerialize, nil +} + +func (o *IpxeTemplateArtifact) UnmarshalJSON(data []byte) (err error) { + // This validates that all required properties are included in the JSON object + // by unmarshalling the object into a generic map with string keys and checking + // that every required field exists as a key in the generic map. + requiredProperties := []string{ + "name", + "url", + "cacheStrategy", + } + + allProperties := make(map[string]interface{}) + + err = json.Unmarshal(data, &allProperties) + + if err != nil { + return err + } + + for _, requiredProperty := range requiredProperties { + if _, exists := allProperties[requiredProperty]; !exists { + return fmt.Errorf("no value given for required property %v", requiredProperty) + } + } + + varIpxeTemplateArtifact := _IpxeTemplateArtifact{} + + decoder := json.NewDecoder(bytes.NewReader(data)) + decoder.DisallowUnknownFields() + err = decoder.Decode(&varIpxeTemplateArtifact) + + if err != nil { + return err + } + + *o = IpxeTemplateArtifact(varIpxeTemplateArtifact) + + return err +} + +type NullableIpxeTemplateArtifact struct { + value *IpxeTemplateArtifact + isSet bool +} + +func (v NullableIpxeTemplateArtifact) Get() *IpxeTemplateArtifact { + return v.value +} + +func (v *NullableIpxeTemplateArtifact) Set(val *IpxeTemplateArtifact) { + v.value = val + v.isSet = true +} + +func (v NullableIpxeTemplateArtifact) IsSet() bool { + return v.isSet +} + +func (v *NullableIpxeTemplateArtifact) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableIpxeTemplateArtifact(val *IpxeTemplateArtifact) *NullableIpxeTemplateArtifact { + return &NullableIpxeTemplateArtifact{value: val, isSet: true} +} + +func (v NullableIpxeTemplateArtifact) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableIpxeTemplateArtifact) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} diff --git a/sdk/standard/model_ipxe_template_parameter.go b/sdk/standard/model_ipxe_template_parameter.go new file mode 100644 index 000000000..ed8e9649f --- /dev/null +++ b/sdk/standard/model_ipxe_template_parameter.go @@ -0,0 +1,186 @@ +/* +NCX Infra Controller REST API + +NCX Infra Controller REST API allows users to create and manage resources e.g. VPC, Subnets, Instances across all connected NCX Infra Controller datacenters, also referred to as Sites. + +API version: 1.2.1 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package standard + +import ( + "bytes" + "encoding/json" + "fmt" +) + +// checks if the IpxeTemplateParameter type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &IpxeTemplateParameter{} + +// IpxeTemplateParameter A key-value parameter passed to an iPXE template for variable substitution +type IpxeTemplateParameter struct { + // Parameter name referenced in the iPXE template + Name string `json:"name"` + // Parameter value substituted into the iPXE template + Value string `json:"value"` +} + +type _IpxeTemplateParameter IpxeTemplateParameter + +// NewIpxeTemplateParameter instantiates a new IpxeTemplateParameter object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewIpxeTemplateParameter(name string, value string) *IpxeTemplateParameter { + this := IpxeTemplateParameter{} + this.Name = name + this.Value = value + return &this +} + +// NewIpxeTemplateParameterWithDefaults instantiates a new IpxeTemplateParameter object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewIpxeTemplateParameterWithDefaults() *IpxeTemplateParameter { + this := IpxeTemplateParameter{} + return &this +} + +// GetName returns the Name field value +func (o *IpxeTemplateParameter) GetName() string { + if o == nil { + var ret string + return ret + } + + return o.Name +} + +// GetNameOk returns a tuple with the Name field value +// and a boolean to check if the value has been set. +func (o *IpxeTemplateParameter) GetNameOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.Name, true +} + +// SetName sets field value +func (o *IpxeTemplateParameter) SetName(v string) { + o.Name = v +} + +// GetValue returns the Value field value +func (o *IpxeTemplateParameter) GetValue() string { + if o == nil { + var ret string + return ret + } + + return o.Value +} + +// GetValueOk returns a tuple with the Value field value +// and a boolean to check if the value has been set. +func (o *IpxeTemplateParameter) GetValueOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.Value, true +} + +// SetValue sets field value +func (o *IpxeTemplateParameter) SetValue(v string) { + o.Value = v +} + +func (o IpxeTemplateParameter) MarshalJSON() ([]byte, error) { + toSerialize, err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o IpxeTemplateParameter) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + toSerialize["name"] = o.Name + toSerialize["value"] = o.Value + return toSerialize, nil +} + +func (o *IpxeTemplateParameter) UnmarshalJSON(data []byte) (err error) { + // This validates that all required properties are included in the JSON object + // by unmarshalling the object into a generic map with string keys and checking + // that every required field exists as a key in the generic map. + requiredProperties := []string{ + "name", + "value", + } + + allProperties := make(map[string]interface{}) + + err = json.Unmarshal(data, &allProperties) + + if err != nil { + return err + } + + for _, requiredProperty := range requiredProperties { + if _, exists := allProperties[requiredProperty]; !exists { + return fmt.Errorf("no value given for required property %v", requiredProperty) + } + } + + varIpxeTemplateParameter := _IpxeTemplateParameter{} + + decoder := json.NewDecoder(bytes.NewReader(data)) + decoder.DisallowUnknownFields() + err = decoder.Decode(&varIpxeTemplateParameter) + + if err != nil { + return err + } + + *o = IpxeTemplateParameter(varIpxeTemplateParameter) + + return err +} + +type NullableIpxeTemplateParameter struct { + value *IpxeTemplateParameter + isSet bool +} + +func (v NullableIpxeTemplateParameter) Get() *IpxeTemplateParameter { + return v.value +} + +func (v *NullableIpxeTemplateParameter) Set(val *IpxeTemplateParameter) { + v.value = val + v.isSet = true +} + +func (v NullableIpxeTemplateParameter) IsSet() bool { + return v.isSet +} + +func (v *NullableIpxeTemplateParameter) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableIpxeTemplateParameter(val *IpxeTemplateParameter) *NullableIpxeTemplateParameter { + return &NullableIpxeTemplateParameter{value: val, isSet: true} +} + +func (v NullableIpxeTemplateParameter) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableIpxeTemplateParameter) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} diff --git a/sdk/standard/model_operating_system.go b/sdk/standard/model_operating_system.go index da51d69f4..ceb215e08 100644 --- a/sdk/standard/model_operating_system.go +++ b/sdk/standard/model_operating_system.go @@ -46,8 +46,16 @@ type OperatingSystem struct { RootFsId NullableString `json:"rootFsId,omitempty"` // Root filesystem label, only applicable for image based Operating System RootFsLabel NullableString `json:"rootFsLabel,omitempty"` - // iPXE script or URL, only applicable for iPXE based Operating System + // iPXE script or URL, only applicable for iPXE based Operating System. Mutually exclusive with ipxeTemplateId IpxeScript NullableString `json:"ipxeScript,omitempty"` + // Name of the iPXE template used by this Operating System. Mutually exclusive with ipxeScript + IpxeTemplateId NullableString `json:"ipxeTemplateId,omitempty"` + // Parameters passed to the iPXE template for variable substitution + IpxeTemplateParameters []IpxeTemplateParameter `json:"ipxeTemplateParameters,omitempty"` + // Artifacts (kernel, initrd, etc.) for the iPXE OS definition + IpxeTemplateArtifacts []IpxeTemplateArtifact `json:"ipxeTemplateArtifacts,omitempty"` + // Synchronization scope. Required for Templated iPXE Operating Systems; nil for all other types + Scope NullableString `json:"scope,omitempty"` // User data for the Operating System UserData NullableString `json:"userData,omitempty"` // Specified when the Operating System is Cloud Init based @@ -647,6 +655,156 @@ func (o *OperatingSystem) UnsetIpxeScript() { o.IpxeScript.Unset() } +// GetIpxeTemplateId returns the IpxeTemplateId field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *OperatingSystem) GetIpxeTemplateId() string { + if o == nil || IsNil(o.IpxeTemplateId.Get()) { + var ret string + return ret + } + return *o.IpxeTemplateId.Get() +} + +// GetIpxeTemplateIdOk returns a tuple with the IpxeTemplateId field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *OperatingSystem) GetIpxeTemplateIdOk() (*string, bool) { + if o == nil { + return nil, false + } + return o.IpxeTemplateId.Get(), o.IpxeTemplateId.IsSet() +} + +// HasIpxeTemplateId returns a boolean if a field has been set. +func (o *OperatingSystem) HasIpxeTemplateId() bool { + if o != nil && o.IpxeTemplateId.IsSet() { + return true + } + + return false +} + +// SetIpxeTemplateId gets a reference to the given NullableString and assigns it to the IpxeTemplateId field. +func (o *OperatingSystem) SetIpxeTemplateId(v string) { + o.IpxeTemplateId.Set(&v) +} + +// SetIpxeTemplateIdNil sets the value for IpxeTemplateId to be an explicit nil +func (o *OperatingSystem) SetIpxeTemplateIdNil() { + o.IpxeTemplateId.Set(nil) +} + +// UnsetIpxeTemplateId ensures that no value is present for IpxeTemplateId, not even an explicit nil +func (o *OperatingSystem) UnsetIpxeTemplateId() { + o.IpxeTemplateId.Unset() +} + +// GetIpxeTemplateParameters returns the IpxeTemplateParameters field value if set, zero value otherwise. +func (o *OperatingSystem) GetIpxeTemplateParameters() []IpxeTemplateParameter { + if o == nil || IsNil(o.IpxeTemplateParameters) { + var ret []IpxeTemplateParameter + return ret + } + return o.IpxeTemplateParameters +} + +// GetIpxeTemplateParametersOk returns a tuple with the IpxeTemplateParameters field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *OperatingSystem) GetIpxeTemplateParametersOk() ([]IpxeTemplateParameter, bool) { + if o == nil || IsNil(o.IpxeTemplateParameters) { + return nil, false + } + return o.IpxeTemplateParameters, true +} + +// HasIpxeTemplateParameters returns a boolean if a field has been set. +func (o *OperatingSystem) HasIpxeTemplateParameters() bool { + if o != nil && !IsNil(o.IpxeTemplateParameters) { + return true + } + + return false +} + +// SetIpxeTemplateParameters gets a reference to the given []IpxeTemplateParameter and assigns it to the IpxeTemplateParameters field. +func (o *OperatingSystem) SetIpxeTemplateParameters(v []IpxeTemplateParameter) { + o.IpxeTemplateParameters = v +} + +// GetIpxeTemplateArtifacts returns the IpxeTemplateArtifacts field value if set, zero value otherwise. +func (o *OperatingSystem) GetIpxeTemplateArtifacts() []IpxeTemplateArtifact { + if o == nil || IsNil(o.IpxeTemplateArtifacts) { + var ret []IpxeTemplateArtifact + return ret + } + return o.IpxeTemplateArtifacts +} + +// GetIpxeTemplateArtifactsOk returns a tuple with the IpxeTemplateArtifacts field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *OperatingSystem) GetIpxeTemplateArtifactsOk() ([]IpxeTemplateArtifact, bool) { + if o == nil || IsNil(o.IpxeTemplateArtifacts) { + return nil, false + } + return o.IpxeTemplateArtifacts, true +} + +// HasIpxeTemplateArtifacts returns a boolean if a field has been set. +func (o *OperatingSystem) HasIpxeTemplateArtifacts() bool { + if o != nil && !IsNil(o.IpxeTemplateArtifacts) { + return true + } + + return false +} + +// SetIpxeTemplateArtifacts gets a reference to the given []IpxeTemplateArtifact and assigns it to the IpxeTemplateArtifacts field. +func (o *OperatingSystem) SetIpxeTemplateArtifacts(v []IpxeTemplateArtifact) { + o.IpxeTemplateArtifacts = v +} + +// GetScope returns the Scope field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *OperatingSystem) GetScope() string { + if o == nil || IsNil(o.Scope.Get()) { + var ret string + return ret + } + return *o.Scope.Get() +} + +// GetScopeOk returns a tuple with the Scope field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *OperatingSystem) GetScopeOk() (*string, bool) { + if o == nil { + return nil, false + } + return o.Scope.Get(), o.Scope.IsSet() +} + +// HasScope returns a boolean if a field has been set. +func (o *OperatingSystem) HasScope() bool { + if o != nil && o.Scope.IsSet() { + return true + } + + return false +} + +// SetScope gets a reference to the given NullableString and assigns it to the Scope field. +func (o *OperatingSystem) SetScope(v string) { + o.Scope.Set(&v) +} + +// SetScopeNil sets the value for Scope to be an explicit nil +func (o *OperatingSystem) SetScopeNil() { + o.Scope.Set(nil) +} + +// UnsetScope ensures that no value is present for Scope, not even an explicit nil +func (o *OperatingSystem) UnsetScope() { + o.Scope.Unset() +} + // GetUserData returns the UserData field value if set, zero value otherwise (both if not set or set to explicit null). func (o *OperatingSystem) GetUserData() string { if o == nil || IsNil(o.UserData.Get()) { @@ -1073,6 +1231,18 @@ func (o OperatingSystem) ToMap() (map[string]interface{}, error) { if o.IpxeScript.IsSet() { toSerialize["ipxeScript"] = o.IpxeScript.Get() } + if o.IpxeTemplateId.IsSet() { + toSerialize["ipxeTemplateId"] = o.IpxeTemplateId.Get() + } + if !IsNil(o.IpxeTemplateParameters) { + toSerialize["ipxeTemplateParameters"] = o.IpxeTemplateParameters + } + if !IsNil(o.IpxeTemplateArtifacts) { + toSerialize["ipxeTemplateArtifacts"] = o.IpxeTemplateArtifacts + } + if o.Scope.IsSet() { + toSerialize["scope"] = o.Scope.Get() + } if o.UserData.IsSet() { toSerialize["userData"] = o.UserData.Get() } diff --git a/sdk/standard/model_operating_system_create_request.go b/sdk/standard/model_operating_system_create_request.go index d5e1915e4..5f10b8ab6 100644 --- a/sdk/standard/model_operating_system_create_request.go +++ b/sdk/standard/model_operating_system_create_request.go @@ -31,10 +31,18 @@ type OperatingSystemCreateRequest struct { // Deprecated: Tenant is now inferred from org membership. // Deprecated TenantId NullableString `json:"tenantId,omitempty"` - // Specified only one Site if an Operating System is Image based, more than one Site is not supported\" + // For Image-based OS, specify exactly one Site. For limited-scope Templated iPXE OS, specify the target provider sites SiteIds []string `json:"siteIds,omitempty"` - // iPXE script or URL, only applicable for iPXE based OS. Cannot be specified if imageUrl is specified + // iPXE script or URL, only applicable for iPXE based OS. Mutually exclusive with ipxeTemplateId and imageUrl IpxeScript NullableString `json:"ipxeScript,omitempty"` + // Name of an iPXE template to use. Mutually exclusive with ipxeScript and imageUrl. Only Provider Admin can create template-based OSes + IpxeTemplateId NullableString `json:"ipxeTemplateId,omitempty"` + // Parameters to pass to the iPXE template for variable substitution + IpxeTemplateParameters []IpxeTemplateParameter `json:"ipxeTemplateParameters,omitempty"` + // Artifacts (kernel, initrd, etc.) required for the iPXE OS definition + IpxeTemplateArtifacts []IpxeTemplateArtifact `json:"ipxeTemplateArtifacts,omitempty"` + // Synchronization scope. Required for Templated iPXE OS (when ipxeTemplateId is specified); must not be set for other types + Scope NullableString `json:"scope,omitempty"` // Original URL from where the Operating System image can be retreived from, required for image based OS. Cannot be specified if ipxeScript is specified ImageUrl NullableString `json:"imageUrl,omitempty"` // SHA hash of the image file, required for image based OS @@ -302,6 +310,156 @@ func (o *OperatingSystemCreateRequest) UnsetIpxeScript() { o.IpxeScript.Unset() } +// GetIpxeTemplateId returns the IpxeTemplateId field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *OperatingSystemCreateRequest) GetIpxeTemplateId() string { + if o == nil || IsNil(o.IpxeTemplateId.Get()) { + var ret string + return ret + } + return *o.IpxeTemplateId.Get() +} + +// GetIpxeTemplateIdOk returns a tuple with the IpxeTemplateId field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *OperatingSystemCreateRequest) GetIpxeTemplateIdOk() (*string, bool) { + if o == nil { + return nil, false + } + return o.IpxeTemplateId.Get(), o.IpxeTemplateId.IsSet() +} + +// HasIpxeTemplateId returns a boolean if a field has been set. +func (o *OperatingSystemCreateRequest) HasIpxeTemplateId() bool { + if o != nil && o.IpxeTemplateId.IsSet() { + return true + } + + return false +} + +// SetIpxeTemplateId gets a reference to the given NullableString and assigns it to the IpxeTemplateId field. +func (o *OperatingSystemCreateRequest) SetIpxeTemplateId(v string) { + o.IpxeTemplateId.Set(&v) +} + +// SetIpxeTemplateIdNil sets the value for IpxeTemplateId to be an explicit nil +func (o *OperatingSystemCreateRequest) SetIpxeTemplateIdNil() { + o.IpxeTemplateId.Set(nil) +} + +// UnsetIpxeTemplateId ensures that no value is present for IpxeTemplateId, not even an explicit nil +func (o *OperatingSystemCreateRequest) UnsetIpxeTemplateId() { + o.IpxeTemplateId.Unset() +} + +// GetIpxeTemplateParameters returns the IpxeTemplateParameters field value if set, zero value otherwise. +func (o *OperatingSystemCreateRequest) GetIpxeTemplateParameters() []IpxeTemplateParameter { + if o == nil || IsNil(o.IpxeTemplateParameters) { + var ret []IpxeTemplateParameter + return ret + } + return o.IpxeTemplateParameters +} + +// GetIpxeTemplateParametersOk returns a tuple with the IpxeTemplateParameters field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *OperatingSystemCreateRequest) GetIpxeTemplateParametersOk() ([]IpxeTemplateParameter, bool) { + if o == nil || IsNil(o.IpxeTemplateParameters) { + return nil, false + } + return o.IpxeTemplateParameters, true +} + +// HasIpxeTemplateParameters returns a boolean if a field has been set. +func (o *OperatingSystemCreateRequest) HasIpxeTemplateParameters() bool { + if o != nil && !IsNil(o.IpxeTemplateParameters) { + return true + } + + return false +} + +// SetIpxeTemplateParameters gets a reference to the given []IpxeTemplateParameter and assigns it to the IpxeTemplateParameters field. +func (o *OperatingSystemCreateRequest) SetIpxeTemplateParameters(v []IpxeTemplateParameter) { + o.IpxeTemplateParameters = v +} + +// GetIpxeTemplateArtifacts returns the IpxeTemplateArtifacts field value if set, zero value otherwise. +func (o *OperatingSystemCreateRequest) GetIpxeTemplateArtifacts() []IpxeTemplateArtifact { + if o == nil || IsNil(o.IpxeTemplateArtifacts) { + var ret []IpxeTemplateArtifact + return ret + } + return o.IpxeTemplateArtifacts +} + +// GetIpxeTemplateArtifactsOk returns a tuple with the IpxeTemplateArtifacts field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *OperatingSystemCreateRequest) GetIpxeTemplateArtifactsOk() ([]IpxeTemplateArtifact, bool) { + if o == nil || IsNil(o.IpxeTemplateArtifacts) { + return nil, false + } + return o.IpxeTemplateArtifacts, true +} + +// HasIpxeTemplateArtifacts returns a boolean if a field has been set. +func (o *OperatingSystemCreateRequest) HasIpxeTemplateArtifacts() bool { + if o != nil && !IsNil(o.IpxeTemplateArtifacts) { + return true + } + + return false +} + +// SetIpxeTemplateArtifacts gets a reference to the given []IpxeTemplateArtifact and assigns it to the IpxeTemplateArtifacts field. +func (o *OperatingSystemCreateRequest) SetIpxeTemplateArtifacts(v []IpxeTemplateArtifact) { + o.IpxeTemplateArtifacts = v +} + +// GetScope returns the Scope field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *OperatingSystemCreateRequest) GetScope() string { + if o == nil || IsNil(o.Scope.Get()) { + var ret string + return ret + } + return *o.Scope.Get() +} + +// GetScopeOk returns a tuple with the Scope field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *OperatingSystemCreateRequest) GetScopeOk() (*string, bool) { + if o == nil { + return nil, false + } + return o.Scope.Get(), o.Scope.IsSet() +} + +// HasScope returns a boolean if a field has been set. +func (o *OperatingSystemCreateRequest) HasScope() bool { + if o != nil && o.Scope.IsSet() { + return true + } + + return false +} + +// SetScope gets a reference to the given NullableString and assigns it to the Scope field. +func (o *OperatingSystemCreateRequest) SetScope(v string) { + o.Scope.Set(&v) +} + +// SetScopeNil sets the value for Scope to be an explicit nil +func (o *OperatingSystemCreateRequest) SetScopeNil() { + o.Scope.Set(nil) +} + +// UnsetScope ensures that no value is present for Scope, not even an explicit nil +func (o *OperatingSystemCreateRequest) UnsetScope() { + o.Scope.Unset() +} + // GetImageUrl returns the ImageUrl field value if set, zero value otherwise (both if not set or set to explicit null). func (o *OperatingSystemCreateRequest) GetImageUrl() string { if o == nil || IsNil(o.ImageUrl.Get()) { @@ -779,6 +937,18 @@ func (o OperatingSystemCreateRequest) ToMap() (map[string]interface{}, error) { if o.IpxeScript.IsSet() { toSerialize["ipxeScript"] = o.IpxeScript.Get() } + if o.IpxeTemplateId.IsSet() { + toSerialize["ipxeTemplateId"] = o.IpxeTemplateId.Get() + } + if !IsNil(o.IpxeTemplateParameters) { + toSerialize["ipxeTemplateParameters"] = o.IpxeTemplateParameters + } + if !IsNil(o.IpxeTemplateArtifacts) { + toSerialize["ipxeTemplateArtifacts"] = o.IpxeTemplateArtifacts + } + if o.Scope.IsSet() { + toSerialize["scope"] = o.Scope.Get() + } if o.ImageUrl.IsSet() { toSerialize["imageUrl"] = o.ImageUrl.Get() } diff --git a/sdk/standard/model_operating_system_update_request.go b/sdk/standard/model_operating_system_update_request.go index 134e40596..ff751c8aa 100644 --- a/sdk/standard/model_operating_system_update_request.go +++ b/sdk/standard/model_operating_system_update_request.go @@ -23,8 +23,14 @@ type OperatingSystemUpdateRequest struct { Name NullableString `json:"name,omitempty"` // Optional description of the Operating System Description NullableString `json:"description,omitempty"` - // iPXE script or URL, only applicable for iPXE based OS. Cannot be specified if imageUrl is specified + // iPXE script or URL, only applicable for iPXE based OS. Mutually exclusive with ipxeTemplateId and imageUrl IpxeScript NullableString `json:"ipxeScript,omitempty"` + // Name of an iPXE template to use. Mutually exclusive with ipxeScript and imageUrl + IpxeTemplateId NullableString `json:"ipxeTemplateId,omitempty"` + // Parameters to pass to the iPXE template. If omitted the existing parameters are kept; if set to an empty array the parameters are cleared + IpxeTemplateParameters []IpxeTemplateParameter `json:"ipxeTemplateParameters,omitempty"` + // Artifacts for the iPXE OS definition. If omitted the existing artifacts are kept; if set to an empty array the artifacts are cleared + IpxeTemplateArtifacts []IpxeTemplateArtifact `json:"ipxeTemplateArtifacts,omitempty"` // Original URL from where the Operating System image can be retreived from, required for image based OS ImageUrl NullableString `json:"imageUrl,omitempty"` // SHA hash of the image file, required for image based OS @@ -199,6 +205,113 @@ func (o *OperatingSystemUpdateRequest) UnsetIpxeScript() { o.IpxeScript.Unset() } +// GetIpxeTemplateId returns the IpxeTemplateId field value if set, zero value otherwise (both if not set or set to explicit null). +func (o *OperatingSystemUpdateRequest) GetIpxeTemplateId() string { + if o == nil || IsNil(o.IpxeTemplateId.Get()) { + var ret string + return ret + } + return *o.IpxeTemplateId.Get() +} + +// GetIpxeTemplateIdOk returns a tuple with the IpxeTemplateId field value if set, nil otherwise +// and a boolean to check if the value has been set. +// NOTE: If the value is an explicit nil, `nil, true` will be returned +func (o *OperatingSystemUpdateRequest) GetIpxeTemplateIdOk() (*string, bool) { + if o == nil { + return nil, false + } + return o.IpxeTemplateId.Get(), o.IpxeTemplateId.IsSet() +} + +// HasIpxeTemplateId returns a boolean if a field has been set. +func (o *OperatingSystemUpdateRequest) HasIpxeTemplateId() bool { + if o != nil && o.IpxeTemplateId.IsSet() { + return true + } + + return false +} + +// SetIpxeTemplateId gets a reference to the given NullableString and assigns it to the IpxeTemplateId field. +func (o *OperatingSystemUpdateRequest) SetIpxeTemplateId(v string) { + o.IpxeTemplateId.Set(&v) +} + +// SetIpxeTemplateIdNil sets the value for IpxeTemplateId to be an explicit nil +func (o *OperatingSystemUpdateRequest) SetIpxeTemplateIdNil() { + o.IpxeTemplateId.Set(nil) +} + +// UnsetIpxeTemplateId ensures that no value is present for IpxeTemplateId, not even an explicit nil +func (o *OperatingSystemUpdateRequest) UnsetIpxeTemplateId() { + o.IpxeTemplateId.Unset() +} + +// GetIpxeTemplateParameters returns the IpxeTemplateParameters field value if set, zero value otherwise. +func (o *OperatingSystemUpdateRequest) GetIpxeTemplateParameters() []IpxeTemplateParameter { + if o == nil || IsNil(o.IpxeTemplateParameters) { + var ret []IpxeTemplateParameter + return ret + } + return o.IpxeTemplateParameters +} + +// GetIpxeTemplateParametersOk returns a tuple with the IpxeTemplateParameters field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *OperatingSystemUpdateRequest) GetIpxeTemplateParametersOk() ([]IpxeTemplateParameter, bool) { + if o == nil || IsNil(o.IpxeTemplateParameters) { + return nil, false + } + return o.IpxeTemplateParameters, true +} + +// HasIpxeTemplateParameters returns a boolean if a field has been set. +func (o *OperatingSystemUpdateRequest) HasIpxeTemplateParameters() bool { + if o != nil && !IsNil(o.IpxeTemplateParameters) { + return true + } + + return false +} + +// SetIpxeTemplateParameters gets a reference to the given []IpxeTemplateParameter and assigns it to the IpxeTemplateParameters field. +func (o *OperatingSystemUpdateRequest) SetIpxeTemplateParameters(v []IpxeTemplateParameter) { + o.IpxeTemplateParameters = v +} + +// GetIpxeTemplateArtifacts returns the IpxeTemplateArtifacts field value if set, zero value otherwise. +func (o *OperatingSystemUpdateRequest) GetIpxeTemplateArtifacts() []IpxeTemplateArtifact { + if o == nil || IsNil(o.IpxeTemplateArtifacts) { + var ret []IpxeTemplateArtifact + return ret + } + return o.IpxeTemplateArtifacts +} + +// GetIpxeTemplateArtifactsOk returns a tuple with the IpxeTemplateArtifacts field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *OperatingSystemUpdateRequest) GetIpxeTemplateArtifactsOk() ([]IpxeTemplateArtifact, bool) { + if o == nil || IsNil(o.IpxeTemplateArtifacts) { + return nil, false + } + return o.IpxeTemplateArtifacts, true +} + +// HasIpxeTemplateArtifacts returns a boolean if a field has been set. +func (o *OperatingSystemUpdateRequest) HasIpxeTemplateArtifacts() bool { + if o != nil && !IsNil(o.IpxeTemplateArtifacts) { + return true + } + + return false +} + +// SetIpxeTemplateArtifacts gets a reference to the given []IpxeTemplateArtifact and assigns it to the IpxeTemplateArtifacts field. +func (o *OperatingSystemUpdateRequest) SetIpxeTemplateArtifacts(v []IpxeTemplateArtifact) { + o.IpxeTemplateArtifacts = v +} + // GetImageUrl returns the ImageUrl field value if set, zero value otherwise (both if not set or set to explicit null). func (o *OperatingSystemUpdateRequest) GetImageUrl() string { if o == nil || IsNil(o.ImageUrl.Get()) { @@ -777,6 +890,15 @@ func (o OperatingSystemUpdateRequest) ToMap() (map[string]interface{}, error) { if o.IpxeScript.IsSet() { toSerialize["ipxeScript"] = o.IpxeScript.Get() } + if o.IpxeTemplateId.IsSet() { + toSerialize["ipxeTemplateId"] = o.IpxeTemplateId.Get() + } + if !IsNil(o.IpxeTemplateParameters) { + toSerialize["ipxeTemplateParameters"] = o.IpxeTemplateParameters + } + if !IsNil(o.IpxeTemplateArtifacts) { + toSerialize["ipxeTemplateArtifacts"] = o.IpxeTemplateArtifacts + } if o.ImageUrl.IsSet() { toSerialize["imageUrl"] = o.ImageUrl.Get() } diff --git a/site-agent/pkg/components/managers/ipxetemplate/access.go b/site-agent/pkg/components/managers/ipxetemplate/access.go new file mode 100644 index 000000000..0dc59ef46 --- /dev/null +++ b/site-agent/pkg/components/managers/ipxetemplate/access.go @@ -0,0 +1,41 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ipxetemplate + +import ( + Manager "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/managerapi" + "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/datatypes/elektratypes" +) + +// ManagerAccess - access to all managers +var ManagerAccess *Manager.ManagerAccess + +// API - all API interface +type API struct{} + +// NewIpxeTemplateManager - returns a new instance of IpxeTemplate manager +func NewIpxeTemplateManager(superForge *elektratypes.Elektra, superAPI *Manager.ManagerAPI, superConf *Manager.ManagerConf) *API { + ManagerAccess = &Manager.ManagerAccess{ + Data: &Manager.ManagerData{ + EB: superForge, + }, + API: superAPI, + Conf: superConf, + } + return &API{} +} diff --git a/site-agent/pkg/components/managers/ipxetemplate/cron.go b/site-agent/pkg/components/managers/ipxetemplate/cron.go new file mode 100644 index 000000000..316c121ac --- /dev/null +++ b/site-agent/pkg/components/managers/ipxetemplate/cron.go @@ -0,0 +1,65 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ipxetemplate + +import ( + "context" + + "go.temporal.io/sdk/client" + + sww "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/workflow" +) + +const ( + // InventoryDefaultSchedule is the default schedule for iPXE template inventory discovery + InventoryDefaultSchedule = "@every 3m" +) + +// RegisterCron schedules the periodic DiscoverIpxeTemplateInventory workflow +func (api *API) RegisterCron() error { + ManagerAccess.Data.EB.Log.Info().Msg("IpxeTemplate: Registering Inventory Discovery Cron") + + workflowID := "inventory-ipxetemplate-" + ManagerAccess.Conf.EB.Temporal.TemporalSubscribeNamespace + + cronSchedule := InventoryDefaultSchedule + if ManagerAccess.Conf.EB.Temporal.TemporalInventorySchedule != "" { + cronSchedule = ManagerAccess.Conf.EB.Temporal.TemporalInventorySchedule + } + + ManagerAccess.Data.EB.Log.Info().Str("Schedule", cronSchedule).Msg("IpxeTemplate: Inventory Discovery Cron Schedule") + + workflowOptions := client.StartWorkflowOptions{ + ID: workflowID, + TaskQueue: ManagerAccess.Conf.EB.Temporal.TemporalSubscribeQueue, + CronSchedule: cronSchedule, + } + + we, err := ManagerAccess.Data.EB.Managers.Workflow.Temporal.Subscriber.ExecuteWorkflow( + context.Background(), + workflowOptions, + sww.DiscoverIpxeTemplateInventory, + ) + if err != nil { + ManagerAccess.Data.EB.Log.Error().Err(err).Msg("IpxeTemplate: Error registering Inventory Discovery Cron") + return err + } + + ManagerAccess.Data.EB.Log.Info().Interface("Workflow ID", we.GetID()).Msg("IpxeTemplate: successfully registered Inventory Discovery Cron") + + return nil +} diff --git a/site-agent/pkg/components/managers/ipxetemplate/init.go b/site-agent/pkg/components/managers/ipxetemplate/init.go new file mode 100644 index 000000000..3028a38ed --- /dev/null +++ b/site-agent/pkg/components/managers/ipxetemplate/init.go @@ -0,0 +1,37 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ipxetemplate + +import "fmt" + +// Init initializes the IpxeTemplate manager +func (api *API) Init() { + ManagerAccess.Data.EB.Log.Info().Msg("IpxeTemplate: Initializing IpxeTemplate API") +} + +// GetState returns the current state of the IpxeTemplate manager +func (api *API) GetState() []string { + state := ManagerAccess.Data.EB.Managers.Workflow.IpxeTemplateState + var strs []string + strs = append(strs, fmt.Sprintln("ipxe_template_workflow_started", state.WflowStarted.Load())) + strs = append(strs, fmt.Sprintln("ipxe_template_workflow_activity_failed", state.WflowActFail.Load())) + strs = append(strs, fmt.Sprintln("ipxe_template_workflow_activity_succeeded", state.WflowActSucc.Load())) + strs = append(strs, fmt.Sprintln("ipxe_template_workflow_publishing_failed", state.WflowPubFail.Load())) + strs = append(strs, fmt.Sprintln("ipxe_template_workflow_publishing_succeeded", state.WflowPubSucc.Load())) + return strs +} diff --git a/site-agent/pkg/components/managers/ipxetemplate/publisher.go b/site-agent/pkg/components/managers/ipxetemplate/publisher.go new file mode 100644 index 000000000..da7f4c24d --- /dev/null +++ b/site-agent/pkg/components/managers/ipxetemplate/publisher.go @@ -0,0 +1,54 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ipxetemplate + +import ( + "fmt" + + "github.com/google/uuid" + + swa "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/activity" + sww "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/workflow" +) + +// RegisterPublisher registers the IpxeTemplate workflows and activities with the Temporal worker +func (api *API) RegisterPublisher() error { + ManagerAccess.Data.EB.Log.Info().Msg("IpxeTemplate: Registering the publishers") + + // Register the DiscoverIpxeTemplateInventory workflow + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterWorkflow(sww.DiscoverIpxeTemplateInventory) + ManagerAccess.Data.EB.Log.Info().Msg("IpxeTemplate: successfully registered the DiscoverIpxeTemplateInventory workflow") + + // Register the DiscoverIpxeTemplateInventory activity + siteID, err := uuid.Parse(ManagerAccess.Conf.EB.Temporal.ClusterID) + if err != nil { + return fmt.Errorf("IpxeTemplate: invalid ClusterID %q: %w", ManagerAccess.Conf.EB.Temporal.ClusterID, err) + } + inventoryManager := swa.NewManageIpxeTemplateInventory(swa.ManageInventoryConfig{ + SiteID: siteID, + CarbideAtomicClient: ManagerAccess.Data.EB.Managers.Carbide.Client, + TemporalPublishClient: ManagerAccess.Data.EB.Managers.Workflow.Temporal.Publisher, + TemporalPublishQueue: ManagerAccess.Conf.EB.Temporal.TemporalPublishQueue, + }) + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(inventoryManager.DiscoverIpxeTemplateInventory) + ManagerAccess.Data.EB.Log.Info().Msg("IpxeTemplate: successfully registered the DiscoverIpxeTemplateInventory activity") + + _ = api.RegisterCron() + + return nil +} diff --git a/site-agent/pkg/components/managers/ipxetemplate/subscriber.go b/site-agent/pkg/components/managers/ipxetemplate/subscriber.go new file mode 100644 index 000000000..1321f3826 --- /dev/null +++ b/site-agent/pkg/components/managers/ipxetemplate/subscriber.go @@ -0,0 +1,26 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ipxetemplate + +// RegisterSubscriber registers the IpxeTemplate workflows/activities with the Temporal client. +// IpxeTemplate is read-only (propagated from bare-metal-manager-core), so no CRUD workflows are registered. +func (api *API) RegisterSubscriber() error { + ManagerAccess.Data.EB.Log.Info().Msg("IpxeTemplate: Registering the subscribers") + ManagerAccess.Data.EB.Log.Info().Msg("IpxeTemplate: No CRUD workflows for IpxeTemplate (read-only resource)") + return nil +} diff --git a/site-agent/pkg/components/managers/manager.go b/site-agent/pkg/components/managers/manager.go index 14c3160af..cef6f7e80 100644 --- a/site-agent/pkg/components/managers/manager.go +++ b/site-agent/pkg/components/managers/manager.go @@ -37,6 +37,7 @@ import ( "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/infinibandpartition" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/instance" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/instancetype" + "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/ipxetemplate" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/machine" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/managerapi" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/networksecuritygroup" @@ -81,6 +82,7 @@ func NewAPIHandlers() { ExpectedPowerShelf: &expectedpowershelf.API{}, ExpectedSwitch: &expectedswitch.API{}, SKU: &sku.API{}, + IpxeTemplate: &ipxetemplate.API{}, DpuExtensionService: &dpuextensionservice.API{}, NVLinkLogicalPartition: &nvlinklogicalpartition.API{}, RLA: &rla.API{}, @@ -125,6 +127,7 @@ func (Managers *Manager) NewInstance() { Managers.ExpectedPowerShelf() Managers.ExpectedSwitch() Managers.SKU() + Managers.IpxeTemplate() Managers.DpuExtensionService() Managers.NVLinkLogicalPartition() Managers.RLA() @@ -173,6 +176,7 @@ func (Managers *Manager) Init() { Managers.ExpectedPowerShelf().Init() Managers.ExpectedSwitch().Init() Managers.SKU().Init() + Managers.IpxeTemplate().Init() Managers.DpuExtensionService().Init() Managers.NVLinkLogicalPartition().Init() Managers.RLA().Init() diff --git a/site-agent/pkg/components/managers/manageraccess.go b/site-agent/pkg/components/managers/manageraccess.go index 7335e7ba9..3c376ccf9 100644 --- a/site-agent/pkg/components/managers/manageraccess.go +++ b/site-agent/pkg/components/managers/manageraccess.go @@ -27,6 +27,7 @@ import ( "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/infinibandpartition" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/instance" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/instancetype" + "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/ipxetemplate" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/machine" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/machinevalidation" "github.com/NVIDIA/ncx-infra-controller-rest/site-agent/pkg/components/managers/managerapi" @@ -158,6 +159,11 @@ func (m *Manager) SKU() *sku.API { return sku.NewSKUManager(m.Data.EB, m.API, m.Conf) } +// IpxeTemplate - Add IpxeTemplate Manager instance here +func (m *Manager) IpxeTemplate() *ipxetemplate.API { + return ipxetemplate.NewIpxeTemplateManager(m.Data.EB, m.API, m.Conf) +} + // DpuExtensionService - Add DPU Extension Service Manager instance here func (m *Manager) DpuExtensionService() *dpuextensionservice.API { return dpuextensionservice.NewDpuExtensionServiceManager(m.Data.EB, m.API, m.Conf) diff --git a/site-agent/pkg/components/managers/managerapi/ipxetemplate_api.go b/site-agent/pkg/components/managers/managerapi/ipxetemplate_api.go new file mode 100644 index 000000000..a243b5f4f --- /dev/null +++ b/site-agent/pkg/components/managers/managerapi/ipxetemplate_api.go @@ -0,0 +1,33 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package managerapi + +// IpxeTemplateExpansion - IpxeTemplate Expansion +type IpxeTemplateExpansion interface{} + +// IpxeTemplateInterface - interface to IpxeTemplate +type IpxeTemplateInterface interface { + // List all the apis of IpxeTemplate here + Init() + RegisterSubscriber() error + RegisterPublisher() error + RegisterCron() error + + GetState() []string + IpxeTemplateExpansion +} diff --git a/site-agent/pkg/components/managers/managerapi/managerapi.go b/site-agent/pkg/components/managers/managerapi/managerapi.go index 7ff72861a..b3ebb2e37 100644 --- a/site-agent/pkg/components/managers/managerapi/managerapi.go +++ b/site-agent/pkg/components/managers/managerapi/managerapi.go @@ -61,6 +61,7 @@ type ManagerAPI struct { ExpectedPowerShelf ExpectedPowerShelfInterface ExpectedSwitch ExpectedSwitchInterface SKU SKUInterface + IpxeTemplate IpxeTemplateInterface DpuExtensionService DpuExtensionServiceInterface NVLinkLogicalPartition NVLinkLogicalPartitionInterface RLA RLAInterface diff --git a/site-agent/pkg/components/managers/operatingsystem/cron.go b/site-agent/pkg/components/managers/operatingsystem/cron.go index 4df414c7e..d4e6087fe 100644 --- a/site-agent/pkg/components/managers/operatingsystem/cron.go +++ b/site-agent/pkg/components/managers/operatingsystem/cron.go @@ -36,9 +36,16 @@ const ( InventoryDefaultSchedule = "@every 3m" ) -// RegisterCron - Register Cron +// RegisterCron - Register Crons for OsImage and OperatingSystem inventory discovery func (api *API) RegisterCron() error { - // Validate the OS Image config later + if err := api.registerOsImageCron(); err != nil { + return err + } + return api.registerOperatingSystemCron() +} + +// registerOsImageCron schedules the periodic DiscoverOsImageInventory workflow +func (api *API) registerOsImageCron() error { ManagerAccess.Data.EB.Log.Info().Msg("OS Image: Registering Inventory Collect/Publish cron") workflowID := "inventory-os-image-" + ManagerAccess.Conf.EB.Temporal.TemporalSubscribeNamespace @@ -73,6 +80,44 @@ func (api *API) RegisterCron() error { } ManagerAccess.Data.EB.Log.Info().Interface("Workflow ID", wid).Msg("OS Image: successfully registered Inventory Collect/Publish cron") + return nil +} + +// registerOperatingSystemCron schedules the periodic DiscoverOperatingSystemInventory workflow +func (api *API) registerOperatingSystemCron() error { + ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Registering Inventory Collect/Publish cron") + + workflowID := "inventory-operating-system-" + ManagerAccess.Conf.EB.Temporal.TemporalSubscribeNamespace + + cronSchedule := InventoryDefaultSchedule + if ManagerAccess.Conf.EB.Temporal.TemporalInventorySchedule != "" { + cronSchedule = ManagerAccess.Conf.EB.Temporal.TemporalInventorySchedule + } + + ManagerAccess.Data.EB.Log.Info().Str("Schedule", cronSchedule).Msg("OperatingSystem: Inventory Collect/Publish cron schedule") + + workflowOptions := client.StartWorkflowOptions{ + ID: workflowID, + TaskQueue: ManagerAccess.Conf.EB.Temporal.TemporalSubscribeQueue, + CronSchedule: cronSchedule, + } + + we, err := ManagerAccess.Data.EB.Managers.Workflow.Temporal.Subscriber.ExecuteWorkflow( + context.Background(), + workflowOptions, + sww.DiscoverOperatingSystemInventory, + ) + + if err != nil { + ManagerAccess.Data.EB.Log.Error().Err(err).Msg("OperatingSystem: Error registering Inventory Collect/Publish cron") + return err + } + + wid := "" + if !ManagerAccess.Data.EB.Conf.UtMode { + wid = we.GetID() + } + ManagerAccess.Data.EB.Log.Info().Interface("Workflow ID", wid).Msg("OperatingSystem: successfully registered Inventory Collect/Publish cron") return nil } diff --git a/site-agent/pkg/components/managers/operatingsystem/publisher.go b/site-agent/pkg/components/managers/operatingsystem/publisher.go index aa9c6b3af..d0fac4129 100644 --- a/site-agent/pkg/components/managers/operatingsystem/publisher.go +++ b/site-agent/pkg/components/managers/operatingsystem/publisher.go @@ -24,7 +24,8 @@ import ( sww "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/workflow" ) -// RegisterPublisher registers OperatingSystem inventory workflow and activity with Temporal +// RegisterPublisher registers the OsImage and OperatingSystem inventory +// workflows and activities with Temporal. func (api *API) RegisterPublisher() error { ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Registering inventory workflow and activity") @@ -45,6 +46,21 @@ func (api *API) RegisterPublisher() error { ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osImageInventoryManager.DiscoverOsImageInventory) ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Successfully registered DiscoverOsImageInventory activity") + // Collect and Publish OperatingSystem Inventory workflow (OS definitions from carbide-core) + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterWorkflow(sww.DiscoverOperatingSystemInventory) + ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: successfully registered DiscoverOperatingSystemInventory workflow") + + // Register OperatingSystem activity for discovering and publishing OperatingSystem Inventory + OperatingSystemInventoryManager := swa.NewManageOperatingSystemInventory(swa.ManageInventoryConfig{ + SiteID: uuid.MustParse(ManagerAccess.Conf.EB.Temporal.ClusterID), + CarbideAtomicClient: ManagerAccess.Data.EB.Managers.Carbide.Client, + TemporalPublishClient: ManagerAccess.Data.EB.Managers.Workflow.Temporal.Publisher, + TemporalPublishQueue: ManagerAccess.Conf.EB.Temporal.TemporalPublishQueue, + }) + + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(OperatingSystemInventoryManager.DiscoverOperatingSystemInventory) + ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: successfully registered DiscoverOperatingSystemInventory activity") + api.RegisterCron() return nil } diff --git a/site-agent/pkg/components/managers/operatingsystem/subscriber.go b/site-agent/pkg/components/managers/operatingsystem/subscriber.go index 8449c3a57..af98a81a7 100644 --- a/site-agent/pkg/components/managers/operatingsystem/subscriber.go +++ b/site-agent/pkg/components/managers/operatingsystem/subscriber.go @@ -22,38 +22,50 @@ import ( sww "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/workflow" ) -// RegisterSubscriber registers OperatingSystem CRUD workflows and activities with Temporal +// RegisterSubscriber registers the OsImage and OperatingSystem CRUD +// workflows/activities with the Temporal client. func (api *API) RegisterSubscriber() error { ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Registering CRUD workflows and activities") - // Register workflows + osManager := swa.NewManageOperatingSystem(ManagerAccess.Data.EB.Managers.Carbide.Client) - // Register CreateOsImage workflow + // ── OsImage workflows (cloud-managed image catalog pushed to site) ───────────────── ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterWorkflow(sww.CreateOsImage) ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Successfully registered CreateOsImage workflow") - // Register UpdateOsImage workflow ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterWorkflow(sww.UpdateOsImage) ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Successfully registered UpdateOsImage workflow") - // Register DeleteOsImage workflow ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterWorkflow(sww.DeleteOsImage) ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Successfully registered DeleteOsImage workflow") - // Register activities - osImageManager := swa.NewManageOperatingSystem(ManagerAccess.Data.EB.Managers.Carbide.Client) - - // Register CreateOsImageOnSite - ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osImageManager.CreateOsImageOnSite) + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osManager.CreateOsImageOnSite) ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Successfully registered CreateOsImageOnSite activity") - // Register UpdateOsImageOnSite - ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osImageManager.UpdateOsImageOnSite) + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osManager.UpdateOsImageOnSite) ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Successfully registered UpdateOsImageOnSite activity") - // Register DeleteOsImageOnSite - ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osImageManager.DeleteOsImageOnSite) + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osManager.DeleteOsImageOnSite) ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: Successfully registered DeleteOsImageOnSite activity") + // ── OperatingSystem workflows (bi-directional: carbide-rest ↔ carbide-core) ──────── + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterWorkflow(sww.CreateOperatingSystem) + ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: successfully registered the CreateOperatingSystem workflow") + + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterWorkflow(sww.UpdateOperatingSystem) + ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: successfully registered the UpdateOperatingSystem workflow") + + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterWorkflow(sww.DeleteOperatingSystem) + ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: successfully registered the DeleteOperatingSystem workflow") + + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osManager.CreateOperatingSystemOnSite) + ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: successfully registered CreateOperatingSystemOnSite activity") + + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osManager.UpdateOperatingSystemOnSite) + ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: successfully registered UpdateOperatingSystemOnSite activity") + + ManagerAccess.Data.EB.Managers.Workflow.Temporal.Worker.RegisterActivity(osManager.DeleteOperatingSystemOnSite) + ManagerAccess.Data.EB.Log.Info().Msg("OperatingSystem: successfully registered DeleteOperatingSystemOnSite activity") + return nil } diff --git a/site-agent/pkg/components/managers/workflow/orchestrator.go b/site-agent/pkg/components/managers/workflow/orchestrator.go index 50c5d3ea2..bb7628ddd 100644 --- a/site-agent/pkg/components/managers/workflow/orchestrator.go +++ b/site-agent/pkg/components/managers/workflow/orchestrator.go @@ -283,6 +283,9 @@ func workflowOrchestrator() error { ManagerAccess.API.SKU.RegisterSubscriber() ManagerAccess.API.SKU.RegisterPublisher() + ManagerAccess.API.IpxeTemplate.RegisterSubscriber() + ManagerAccess.API.IpxeTemplate.RegisterPublisher() + ManagerAccess.API.DpuExtensionService.RegisterSubscriber() ManagerAccess.API.DpuExtensionService.RegisterPublisher() diff --git a/site-agent/pkg/datatypes/managertypes/workflow/workflowtypes.go b/site-agent/pkg/datatypes/managertypes/workflow/workflowtypes.go index c1967e0f7..1381dc544 100644 --- a/site-agent/pkg/datatypes/managertypes/workflow/workflowtypes.go +++ b/site-agent/pkg/datatypes/managertypes/workflow/workflowtypes.go @@ -75,6 +75,7 @@ type Workflow struct { ExpectedPowerShelfState *MgrState ExpectedSwitchState *MgrState SKUState *MgrState + IpxeTemplateState *MgrState DpuExtensionServiceState *MgrState NVLinkLogicalPartitionState *MgrState VpcPeeringState *MgrState @@ -108,6 +109,7 @@ func NewWorkflowInstance() *Workflow { ExpectedPowerShelfState: &MgrState{}, ExpectedSwitchState: &MgrState{}, SKUState: &MgrState{}, + IpxeTemplateState: &MgrState{}, DpuExtensionServiceState: &MgrState{}, NVLinkLogicalPartitionState: &MgrState{}, VpcPeeringState: &MgrState{}, diff --git a/site-workflow/pkg/activity/instance_test.go b/site-workflow/pkg/activity/instance_test.go index 6813895ec..a32926ec3 100644 --- a/site-workflow/pkg/activity/instance_test.go +++ b/site-workflow/pkg/activity/instance_test.go @@ -76,9 +76,9 @@ func TestManageInstance_UpdateInstanceConfigOnSite(t *testing.T) { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, @@ -149,9 +149,9 @@ func TestManageInstance_CreateInstanceOnSiteOnSite(t *testing.T) { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, @@ -230,9 +230,9 @@ func TestManageInstance_CreateInstancesOnSite(t *testing.T) { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, @@ -254,9 +254,9 @@ func TestManageInstance_CreateInstancesOnSite(t *testing.T) { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, diff --git a/site-workflow/pkg/activity/ipxetemplate.go b/site-workflow/pkg/activity/ipxetemplate.go new file mode 100644 index 000000000..1fe7a92fd --- /dev/null +++ b/site-workflow/pkg/activity/ipxetemplate.go @@ -0,0 +1,99 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package activity + +import ( + "context" + "fmt" + + cClient "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/grpc/client" + cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" + "github.com/rs/zerolog/log" + tClient "go.temporal.io/sdk/client" + "google.golang.org/protobuf/types/known/timestamppb" +) + +// ManageIpxeTemplateInventory is an activity wrapper for iPXE template inventory collection and publishing +type ManageIpxeTemplateInventory struct { + config ManageInventoryConfig +} + +// DiscoverIpxeTemplateInventory is an activity to collect iPXE template inventory from the Site Controller +// and publish it to the cloud Temporal queue +func (mii *ManageIpxeTemplateInventory) DiscoverIpxeTemplateInventory(ctx context.Context) error { + logger := log.With().Str("Activity", "DiscoverIpxeTemplateInventory").Logger() + logger.Info().Msg("Starting activity") + + workflowOptions := tClient.StartWorkflowOptions{ + ID: fmt.Sprintf("update-ipxetemplate-inventory-%s", mii.config.SiteID.String()), + TaskQueue: mii.config.TemporalPublishQueue, + } + workflowName := "UpdateIpxeTemplateInventory" + + carbideClient := mii.config.CarbideAtomicClient.GetClient() + if carbideClient == nil { + return cClient.ErrClientNotConnected + } + forgeClient := carbideClient.Carbide() + + result, err := forgeClient.ListIpxeTemplates(ctx, &cwssaws.ListIpxeTemplatesRequest{}) + if err != nil { + logger.Warn().Err(err).Msg("Failed to retrieve iPXE templates from Site Controller") + inventory := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_FAILED, + StatusMsg: err.Error(), + Timestamp: timestamppb.Now(), + } + if _, execErr := mii.config.TemporalPublishClient.ExecuteWorkflow(ctx, workflowOptions, workflowName, mii.config.SiteID, inventory); execErr != nil { + logger.Error().Err(execErr).Msg("Failed to publish inventory error to Cloud") + return execErr + } + return err + } + + // Only propagate PUBLIC templates to REST (core is source of truth, one-way sync). + var publicTemplates []*cwssaws.IpxeTemplate + for _, t := range result.Templates { + if t.Scope == cwssaws.IpxeTemplateScope_PUBLIC { + publicTemplates = append(publicTemplates, t) + } + } + + inventory := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + StatusMsg: "Successfully retrieved from Site Controller", + Timestamp: timestamppb.Now(), + Templates: publicTemplates, + } + + if _, err = mii.config.TemporalPublishClient.ExecuteWorkflow(ctx, workflowOptions, workflowName, mii.config.SiteID, inventory); err != nil { + logger.Error().Err(err).Msg("Failed to publish iPXE template inventory to Cloud") + return err + } + + logger.Info().Msgf("Published %d public iPXE templates to Cloud (filtered from %d total)", len(publicTemplates), len(result.Templates)) + logger.Info().Msg("Completed activity") + return nil +} + +// NewManageIpxeTemplateInventory returns a ManageIpxeTemplateInventory activity +func NewManageIpxeTemplateInventory(config ManageInventoryConfig) ManageIpxeTemplateInventory { + return ManageIpxeTemplateInventory{ + config: config, + } +} diff --git a/site-workflow/pkg/activity/ipxetemplate_test.go b/site-workflow/pkg/activity/ipxetemplate_test.go new file mode 100644 index 000000000..dacbbe015 --- /dev/null +++ b/site-workflow/pkg/activity/ipxetemplate_test.go @@ -0,0 +1,110 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package activity + +import ( + "context" + "testing" + + cClient "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/grpc/client" + cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" + "github.com/google/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + tmocks "go.temporal.io/sdk/mocks" +) + +func TestManageIpxeTemplateInventory_DiscoverIpxeTemplateInventory_NilClient(t *testing.T) { + // Simulate the case where the gRPC client is not yet connected (nil). + // Before the fix this caused a nil pointer dereference panic. + carbideAtomicClient := cClient.NewCarbideAtomicClient(&cClient.CarbideClientConfig{}) + // deliberately do NOT swap in a real client — value stays nil + + tc := &tmocks.Client{} + + manageInstance := NewManageIpxeTemplateInventory(ManageInventoryConfig{ + SiteID: uuid.New(), + CarbideAtomicClient: carbideAtomicClient, + TemporalPublishClient: tc, + TemporalPublishQueue: "test-queue", + }) + + err := manageInstance.DiscoverIpxeTemplateInventory(context.Background()) + assert.ErrorIs(t, err, cClient.ErrClientNotConnected) + tc.AssertNumberOfCalls(t, "ExecuteWorkflow", 0) +} + +func TestManageIpxeTemplateInventory_DiscoverIpxeTemplateInventory(t *testing.T) { + mockCarbide := cClient.NewMockCarbideClient() + + carbideAtomicClient := cClient.NewCarbideAtomicClient(&cClient.CarbideClientConfig{}) + carbideAtomicClient.SwapClient(mockCarbide) + + wid := "test-workflow-id" + wrun := &tmocks.WorkflowRun{} + wrun.On("GetID").Return(wid) + + tests := []struct { + name string + siteID uuid.UUID + wantCount int + expectedCalls int + }{ + { + name: "empty iPXE template inventory", + siteID: uuid.New(), + wantCount: 0, + expectedCalls: 1, + }, + { + name: "non-empty iPXE template inventory", + siteID: uuid.New(), + wantCount: 3, + expectedCalls: 1, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tc := &tmocks.Client{} + tc.Mock.On("ExecuteWorkflow", mock.Anything, mock.AnythingOfType("internal.StartWorkflowOptions"), + mock.AnythingOfType("string"), mock.AnythingOfType("uuid.UUID"), mock.Anything).Return(wrun, nil) + + manageInstance := NewManageIpxeTemplateInventory(ManageInventoryConfig{ + SiteID: tt.siteID, + CarbideAtomicClient: carbideAtomicClient, + TemporalPublishClient: tc, + TemporalPublishQueue: "test-queue", + }) + + ctx := context.Background() + ctx = context.WithValue(ctx, "wantCount", tt.wantCount) + + err := manageInstance.DiscoverIpxeTemplateInventory(ctx) + assert.NoError(t, err) + + tc.AssertNumberOfCalls(t, "ExecuteWorkflow", tt.expectedCalls) + + // Validate the inventory payload + inventory, ok := tc.Calls[0].Arguments[4].(*cwssaws.IpxeTemplateInventory) + assert.True(t, ok) + assert.Equal(t, cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, inventory.InventoryStatus) + assert.Equal(t, tt.wantCount, len(inventory.Templates)) + }) + } +} diff --git a/site-workflow/pkg/activity/operatingsystem.go b/site-workflow/pkg/activity/operatingsystem.go index 790843d0d..6eedb2994 100644 --- a/site-workflow/pkg/activity/operatingsystem.go +++ b/site-workflow/pkg/activity/operatingsystem.go @@ -20,6 +20,7 @@ package activity import ( "context" "errors" + "fmt" "time" swe "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/error" @@ -27,6 +28,7 @@ import ( cClient "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/grpc/client" cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" "github.com/rs/zerolog/log" + tClient "go.temporal.io/sdk/client" "go.temporal.io/sdk/temporal" "google.golang.org/protobuf/types/known/timestamppb" @@ -243,3 +245,169 @@ func osImageFindFallback(ctx context.Context, carbideClient *cClient.CarbideClie return ids, items.GetImages(), nil } + +// ManageOperatingSystemInventory is an activity wrapper for Operating System inventory collection and publishing +type ManageOperatingSystemInventory struct { + config ManageInventoryConfig +} + +// DiscoverOperatingSystemInventory collects Operating System inventory from carbide-core and publishes +// it to the cloud Temporal queue for reconciliation with the operating_system table. +func (m *ManageOperatingSystemInventory) DiscoverOperatingSystemInventory(ctx context.Context) error { + logger := log.With().Str("Activity", "DiscoverOperatingSystemInventory").Logger() + logger.Info().Msg("Starting activity") + + workflowOptions := tClient.StartWorkflowOptions{ + ID: fmt.Sprintf("update-operating-system-inventory-%s", m.config.SiteID.String()), + TaskQueue: m.config.TemporalPublishQueue, + } + workflowName := "UpdateOperatingSystemInventory" + + carbideClient := m.config.CarbideAtomicClient.GetClient() + if carbideClient == nil { + return cClient.ErrClientNotConnected + } + forgeClient := carbideClient.Carbide() + + publishError := func(msg string, cause error) error { + inv := &cwssaws.OperatingSystemInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_FAILED, + StatusMsg: cause.Error(), + Timestamp: timestamppb.Now(), + } + if _, execErr := m.config.TemporalPublishClient.ExecuteWorkflow(context.Background(), workflowOptions, workflowName, m.config.SiteID, inv); execErr != nil { + logger.Error().Err(execErr).Msg("Failed to publish inventory error to Cloud") + return execErr + } + return cause + } + + // Step 1: fetch all active OS definition IDs from carbide-core. + idList, err := forgeClient.FindOperatingSystemIds(ctx, &cwssaws.OperatingSystemSearchFilter{}) + if err != nil { + logger.Warn().Err(err).Msg("Failed to retrieve OS definition IDs from carbide-core") + return publishError("Failed to retrieve OS definition IDs from carbide-core", err) + } + + // Step 2: fetch full definitions for all returned IDs. + var osDefs []*cwssaws.OperatingSystem + if len(idList.GetIds()) > 0 { + osList, ferr := forgeClient.FindOperatingSystemsByIds(ctx, &cwssaws.OperatingSystemsByIdsRequest{ + Ids: idList.GetIds(), + }) + if ferr != nil { + logger.Warn().Err(ferr).Msg("Failed to retrieve OS definitions by IDs from carbide-core") + return publishError("Failed to retrieve OS definitions by IDs from carbide-core", ferr) + } + osDefs = osList.GetOperatingSystems() + } + + inventory := &cwssaws.OperatingSystemInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + StatusMsg: "Successfully retrieved from carbide-core", + Timestamp: timestamppb.Now(), + OperatingSystems: osDefs, + } + + if _, err = m.config.TemporalPublishClient.ExecuteWorkflow(context.Background(), workflowOptions, workflowName, m.config.SiteID, inventory); err != nil { + logger.Error().Err(err).Msg("Failed to publish OS definition inventory to Cloud") + return err + } + + logger.Info().Msgf("Published %d Operating Systems to Cloud", len(osDefs)) + logger.Info().Msg("Completed activity") + return nil +} + +// NewManageOperatingSystemInventory returns a ManageOperatingSystemInventory activity +func NewManageOperatingSystemInventory(config ManageInventoryConfig) ManageOperatingSystemInventory { + return ManageOperatingSystemInventory{config: config} +} + +// CreateOperatingSystemOnSite creates an Operating System in carbide-core via gRPC. +// request.Id must be pre-set to the carbide-rest primary key so both sides share the same UUID. +func (mos *ManageOperatingSystem) CreateOperatingSystemOnSite(ctx context.Context, request *cwssaws.CreateOperatingSystemRequest) (string, error) { + logger := log.With().Str("Activity", "CreateOperatingSystemOnSite").Logger() + logger.Info().Msg("Starting activity") + + if request == nil { + err := errors.New("received empty create OS definition request") + return "", temporal.NewNonRetryableApplicationError(err.Error(), swe.ErrTypeInvalidRequest, err) + } + if request.Name == "" { + err := errors.New("received create OS definition request missing Name") + return "", temporal.NewNonRetryableApplicationError(err.Error(), swe.ErrTypeInvalidRequest, err) + } + + carbideClient := mos.CarbideAtomicClient.GetClient() + if carbideClient == nil { + return "", client.ErrClientNotConnected + } + + if _, err := carbideClient.Carbide().CreateOperatingSystem(ctx, request); err != nil { + logger.Warn().Err(err).Msg("Failed to create Operating System in carbide-core") + return "", swe.WrapErr(err) + } + + idStr := request.GetId().GetValue() + logger.Info().Str("ID", idStr).Msg("Completed activity") + return idStr, nil +} + +// UpdateOperatingSystemOnSite updates an existing Operating System in carbide-core via gRPC +func (mos *ManageOperatingSystem) UpdateOperatingSystemOnSite(ctx context.Context, request *cwssaws.UpdateOperatingSystemRequest) error { + logger := log.With().Str("Activity", "UpdateOperatingSystemOnSite").Logger() + logger.Info().Msg("Starting activity") + + if request == nil { + err := errors.New("received empty update OS definition request") + return temporal.NewNonRetryableApplicationError(err.Error(), swe.ErrTypeInvalidRequest, err) + } + if request.GetId().GetValue() == "" { + err := errors.New("received update OS definition request missing ID") + return temporal.NewNonRetryableApplicationError(err.Error(), swe.ErrTypeInvalidRequest, err) + } + + carbideClient := mos.CarbideAtomicClient.GetClient() + if carbideClient == nil { + return client.ErrClientNotConnected + } + + _, err := carbideClient.Carbide().UpdateOperatingSystem(ctx, request) + if err != nil { + logger.Warn().Err(err).Msg("Failed to update Operating System in carbide-core") + return swe.WrapErr(err) + } + + logger.Info().Msg("Completed activity") + return nil +} + +// DeleteOperatingSystemOnSite deletes an Operating System from carbide-core via gRPC +func (mos *ManageOperatingSystem) DeleteOperatingSystemOnSite(ctx context.Context, request *cwssaws.DeleteOperatingSystemRequest) error { + logger := log.With().Str("Activity", "DeleteOperatingSystemOnSite").Logger() + logger.Info().Msg("Starting activity") + + if request == nil { + err := errors.New("received empty delete OS definition request") + return temporal.NewNonRetryableApplicationError(err.Error(), swe.ErrTypeInvalidRequest, err) + } + if request.GetId().GetValue() == "" { + err := errors.New("received delete OS definition request missing ID") + return temporal.NewNonRetryableApplicationError(err.Error(), swe.ErrTypeInvalidRequest, err) + } + + carbideClient := mos.CarbideAtomicClient.GetClient() + if carbideClient == nil { + return client.ErrClientNotConnected + } + + _, err := carbideClient.Carbide().DeleteOperatingSystem(ctx, request) + if err != nil { + logger.Warn().Err(err).Msg("Failed to delete Operating System from carbide-core") + return swe.WrapErr(err) + } + + logger.Info().Msg("Completed activity") + return nil +} diff --git a/site-workflow/pkg/activity/operatingsystem_test.go b/site-workflow/pkg/activity/operatingsystem_test.go index 0cd776517..41e014903 100644 --- a/site-workflow/pkg/activity/operatingsystem_test.go +++ b/site-workflow/pkg/activity/operatingsystem_test.go @@ -306,6 +306,298 @@ func TestManageOsImage_DeleteOsImageOnSite(t *testing.T) { } } +func TestManageOperatingSystem_CreateOperatingSystemOnSite(t *testing.T) { + mockCarbide := cClient.NewMockCarbideClient() + carbideAtomicClient := cClient.NewCarbideAtomicClient(&cClient.CarbideClientConfig{}) + carbideAtomicClient.SwapClient(mockCarbide) + + validID := &cwssaws.OperatingSystemId{Value: uuid.NewString()} + + type fields struct { + CarbideAtomicClient *cClient.CarbideAtomicClient + } + type args struct { + ctx context.Context + request *cwssaws.CreateOperatingSystemRequest + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + { + name: "success - creates OS in carbide-core", + fields: fields{CarbideAtomicClient: carbideAtomicClient}, + args: args{ + ctx: context.Background(), + request: &cwssaws.CreateOperatingSystemRequest{ + Id: validID, + Name: "test-os", + TenantOrganizationId: "TestOrg", + }, + }, + wantErr: false, + }, + { + name: "fails - nil request", + fields: fields{CarbideAtomicClient: carbideAtomicClient}, + args: args{ + ctx: context.Background(), + request: nil, + }, + wantErr: true, + }, + { + name: "fails - missing Name", + fields: fields{CarbideAtomicClient: carbideAtomicClient}, + args: args{ + ctx: context.Background(), + request: &cwssaws.CreateOperatingSystemRequest{ + Id: validID, + TenantOrganizationId: "TestOrg", + }, + }, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mos := NewManageOperatingSystem(tt.fields.CarbideAtomicClient) + _, err := mos.CreateOperatingSystemOnSite(tt.args.ctx, tt.args.request) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + } + }) + } +} + +func TestManageOperatingSystem_UpdateOperatingSystemOnSite(t *testing.T) { + mockCarbide := cClient.NewMockCarbideClient() + carbideAtomicClient := cClient.NewCarbideAtomicClient(&cClient.CarbideClientConfig{}) + carbideAtomicClient.SwapClient(mockCarbide) + + validID := &cwssaws.OperatingSystemId{Value: uuid.NewString()} + + type fields struct { + CarbideAtomicClient *cClient.CarbideAtomicClient + } + type args struct { + ctx context.Context + request *cwssaws.UpdateOperatingSystemRequest + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + { + name: "success - updates OS in carbide-core", + fields: fields{CarbideAtomicClient: carbideAtomicClient}, + args: args{ + ctx: context.Background(), + request: &cwssaws.UpdateOperatingSystemRequest{ + Id: validID, + }, + }, + wantErr: false, + }, + { + name: "fails - nil request", + fields: fields{CarbideAtomicClient: carbideAtomicClient}, + args: args{ + ctx: context.Background(), + request: nil, + }, + wantErr: true, + }, + { + name: "fails - missing ID", + fields: fields{CarbideAtomicClient: carbideAtomicClient}, + args: args{ + ctx: context.Background(), + request: &cwssaws.UpdateOperatingSystemRequest{}, + }, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mos := NewManageOperatingSystem(tt.fields.CarbideAtomicClient) + err := mos.UpdateOperatingSystemOnSite(tt.args.ctx, tt.args.request) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + } + }) + } +} + +func TestManageOperatingSystem_DeleteOperatingSystemOnSite(t *testing.T) { + mockCarbide := cClient.NewMockCarbideClient() + carbideAtomicClient := cClient.NewCarbideAtomicClient(&cClient.CarbideClientConfig{}) + carbideAtomicClient.SwapClient(mockCarbide) + + validID := &cwssaws.OperatingSystemId{Value: uuid.NewString()} + + type fields struct { + CarbideAtomicClient *cClient.CarbideAtomicClient + } + type args struct { + ctx context.Context + request *cwssaws.DeleteOperatingSystemRequest + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + { + name: "success - deletes OS from carbide-core", + fields: fields{CarbideAtomicClient: carbideAtomicClient}, + args: args{ + ctx: context.Background(), + request: &cwssaws.DeleteOperatingSystemRequest{ + Id: validID, + }, + }, + wantErr: false, + }, + { + name: "fails - nil request", + fields: fields{CarbideAtomicClient: carbideAtomicClient}, + args: args{ + ctx: context.Background(), + request: nil, + }, + wantErr: true, + }, + { + name: "fails - missing ID", + fields: fields{CarbideAtomicClient: carbideAtomicClient}, + args: args{ + ctx: context.Background(), + request: &cwssaws.DeleteOperatingSystemRequest{}, + }, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + mos := NewManageOperatingSystem(tt.fields.CarbideAtomicClient) + err := mos.DeleteOperatingSystemOnSite(tt.args.ctx, tt.args.request) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + } + }) + } +} + +func TestManageOperatingSystemInventory_DiscoverOperatingSystemInventory(t *testing.T) { + mockCarbide := cClient.NewMockCarbideClient() + carbideAtomicClient := cClient.NewCarbideAtomicClient(&cClient.CarbideClientConfig{}) + carbideAtomicClient.SwapClient(mockCarbide) + + wid := "test-os-workflow-id" + wrun := &tmocks.WorkflowRun{} + wrun.On("GetID").Return(wid) + + type fields struct { + siteID uuid.UUID + carbideAtomicClient *cClient.CarbideAtomicClient + publishQueue string + } + type args struct { + wantOSCount int + wantError error + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + { + name: "success - empty inventory published", + fields: fields{ + siteID: uuid.New(), + carbideAtomicClient: carbideAtomicClient, + publishQueue: "test-queue", + }, + args: args{wantOSCount: 0}, + wantErr: false, + }, + { + name: "success - non-empty inventory published", + fields: fields{ + siteID: uuid.New(), + carbideAtomicClient: carbideAtomicClient, + publishQueue: "test-queue", + }, + args: args{wantOSCount: 5}, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tc := &tmocks.Client{} + tc.Mock.On("ExecuteWorkflow", mock.Anything, mock.AnythingOfType("internal.StartWorkflowOptions"), + mock.AnythingOfType("string"), mock.AnythingOfType("uuid.UUID"), mock.Anything).Return(wrun, nil) + + inv := NewManageOperatingSystemInventory(ManageInventoryConfig{ + SiteID: tt.fields.siteID, + CarbideAtomicClient: tt.fields.carbideAtomicClient, + TemporalPublishClient: tc, + TemporalPublishQueue: tt.fields.publishQueue, + }) + + ctx := context.Background() + ctx = context.WithValue(ctx, "wantCount", tt.args.wantOSCount) + + err := inv.DiscoverOperatingSystemInventory(ctx) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + tc.AssertCalled(t, "ExecuteWorkflow", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything) + + inventory, ok := tc.Calls[0].Arguments[4].(*cwssaws.OperatingSystemInventory) + assert.True(t, ok, "expected OperatingSystemInventory argument") + assert.Equal(t, cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, inventory.GetInventoryStatus()) + assert.Len(t, inventory.GetOperatingSystems(), tt.args.wantOSCount) + } + }) + } +} + +func TestManageOperatingSystemInventory_DiscoverOperatingSystemInventory_NilClient(t *testing.T) { + // Simulate the case where the gRPC client is not yet connected (nil). + // Before the fix this caused a nil pointer dereference panic. + carbideAtomicClient := cClient.NewCarbideAtomicClient(&cClient.CarbideClientConfig{}) + // deliberately do NOT swap in a real client — value stays nil + + tc := &tmocks.Client{} + + inv := NewManageOperatingSystemInventory(ManageInventoryConfig{ + SiteID: uuid.New(), + CarbideAtomicClient: carbideAtomicClient, + TemporalPublishClient: tc, + TemporalPublishQueue: "test-queue", + }) + + err := inv.DiscoverOperatingSystemInventory(context.Background()) + assert.ErrorIs(t, err, cClient.ErrClientNotConnected) + tc.AssertNumberOfCalls(t, "ExecuteWorkflow", 0) +} + func TestManageOsImageInventory_DiscoverOsImageInventory(t *testing.T) { mockCarbide := cClient.NewMockCarbideClient() diff --git a/site-workflow/pkg/grpc/client/carbide_client.go b/site-workflow/pkg/grpc/client/carbide_client.go index ccc9469d6..3d5c4ab8a 100644 --- a/site-workflow/pkg/grpc/client/carbide_client.go +++ b/site-workflow/pkg/grpc/client/carbide_client.go @@ -214,7 +214,6 @@ func NewCarbideClient(config *CarbideClientConfig) (client *CarbideClient, err e log.Error().Err(err).Msg("CarbideClient: failed to get version from server") return nil, fmt.Errorf("CarbideClient: failed to get version from server: %w", err) } - log.Info().Msg("CarbideClient: successfully connected to server") return client, nil diff --git a/site-workflow/pkg/grpc/client/testing.go b/site-workflow/pkg/grpc/client/testing.go index f805c0a7d..8768a01f6 100644 --- a/site-workflow/pkg/grpc/client/testing.go +++ b/site-workflow/pkg/grpc/client/testing.go @@ -1220,6 +1220,100 @@ func (c *MockForgeClient) GetAllExpectedSwitchesLinked(ctx context.Context, in * return out, nil } +/* iPXE Template mock methods */ +func (c *MockForgeClient) ListIpxeTemplates(ctx context.Context, in *wflows.ListIpxeTemplatesRequest, opts ...grpc.CallOption) (*wflows.IpxeTemplateList, error) { + if err, ok := ctx.Value("wantError").(error); ok { + return nil, err + } + + out := &wflows.IpxeTemplateList{} + + count, ok := ctx.Value("wantCount").(int) + if ok { + for i := 0; i < count; i++ { + out.Templates = append(out.Templates, &wflows.IpxeTemplate{ + Name: fmt.Sprintf("template-%d", i), + Scope: wflows.IpxeTemplateScope_PUBLIC, + }) + } + } + + return out, nil +} + +/* OS Definition mock methods */ +func (c *MockForgeClient) FindOperatingSystemIds(ctx context.Context, in *wflows.OperatingSystemSearchFilter, opts ...grpc.CallOption) (*wflows.OperatingSystemIdList, error) { + if err, ok := ctx.Value("wantError").(error); ok { + return nil, err + } + + out := &wflows.OperatingSystemIdList{} + count, ok := ctx.Value("wantCount").(int) + if ok { + for i := 0; i < count; i++ { + out.Ids = append(out.Ids, &wflows.OperatingSystemId{Value: uuid.New().String()}) + } + } + return out, nil +} + +func (c *MockForgeClient) FindOperatingSystemsByIds(ctx context.Context, in *wflows.OperatingSystemsByIdsRequest, opts ...grpc.CallOption) (*wflows.OperatingSystemList, error) { + if err, ok := ctx.Value("wantError").(error); ok { + return nil, err + } + + out := &wflows.OperatingSystemList{} + for i, id := range in.GetIds() { + out.OperatingSystems = append(out.OperatingSystems, &wflows.OperatingSystem{ + Id: id, + Name: fmt.Sprintf("os-definition-%d", i), + TenantOrganizationId: "TestOrg", + Type: wflows.OperatingSystemType_OS_TYPE_IPXE, + }) + } + return out, nil +} + +func (c *MockForgeClient) GetOperatingSystem(ctx context.Context, in *wflows.OperatingSystemId, opts ...grpc.CallOption) (*wflows.OperatingSystem, error) { + if err, ok := ctx.Value("wantError").(error); ok { + return nil, err + } + return &wflows.OperatingSystem{ + Id: &wflows.OperatingSystemId{Value: in.GetValue()}, + Name: "mock-os", + Type: wflows.OperatingSystemType_OS_TYPE_IPXE, + }, nil +} + +func (c *MockForgeClient) CreateOperatingSystem(ctx context.Context, in *wflows.CreateOperatingSystemRequest, opts ...grpc.CallOption) (*wflows.OperatingSystem, error) { + if err, ok := ctx.Value("wantError").(error); ok { + return nil, err + } + return &wflows.OperatingSystem{ + Id: in.GetId(), + Name: in.GetName(), + Type: wflows.OperatingSystemType_OS_TYPE_IPXE, + }, nil +} + +func (c *MockForgeClient) UpdateOperatingSystem(ctx context.Context, in *wflows.UpdateOperatingSystemRequest, opts ...grpc.CallOption) (*wflows.OperatingSystem, error) { + if err, ok := ctx.Value("wantError").(error); ok { + return nil, err + } + return &wflows.OperatingSystem{ + Id: in.GetId(), + Name: in.GetName(), + Type: wflows.OperatingSystemType_OS_TYPE_IPXE, + }, nil +} + +func (c *MockForgeClient) DeleteOperatingSystem(ctx context.Context, in *wflows.DeleteOperatingSystemRequest, opts ...grpc.CallOption) (*wflows.DeleteOperatingSystemResponse, error) { + if err, ok := ctx.Value("wantError").(error); ok { + return nil, err + } + return &wflows.DeleteOperatingSystemResponse{}, nil +} + /* SKU mock methods */ func (c *MockForgeClient) FindSkusByIds(ctx context.Context, in *wflows.SkusByIdsRequest, opts ...grpc.CallOption) (*wflows.SkuList, error) { err, ok := ctx.Value("wantError").(error) diff --git a/site-workflow/pkg/workflow/instance_test.go b/site-workflow/pkg/workflow/instance_test.go index 1b39eabf7..a0f3fcf1c 100644 --- a/site-workflow/pkg/workflow/instance_test.go +++ b/site-workflow/pkg/workflow/instance_test.go @@ -69,9 +69,9 @@ func (s *UpdateInstanceTestSuite) Test_UpdateInstance_Success() { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, @@ -112,9 +112,9 @@ func (s *UpdateInstanceTestSuite) Test_UpdateInstance_Failure() { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, @@ -176,9 +176,9 @@ func (s *CreateInstanceV2TestSuite) Test_CreateInstanceV2_Success() { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, @@ -219,9 +219,9 @@ func (s *CreateInstanceV2TestSuite) Test_CreateInstanceV2_Failure() { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, @@ -289,9 +289,9 @@ func (s *CreateInstancesTestSuite) Test_CreateInstances_Success() { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, @@ -313,9 +313,9 @@ func (s *CreateInstancesTestSuite) Test_CreateInstances_Success() { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, @@ -362,9 +362,9 @@ func (s *CreateInstancesTestSuite) Test_CreateInstances_Failure() { }, }, Config: &cwssaws.InstanceConfig{ - Os: &cwssaws.OperatingSystem{ + Os: &cwssaws.InstanceOperatingSystemConfig{ RunProvisioningInstructionsOnEveryBoot: true, - Variant: &cwssaws.OperatingSystem_Ipxe{ + Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ Ipxe: &cwssaws.InlineIpxe{ IpxeScript: ipxeScript, }, diff --git a/site-workflow/pkg/workflow/ipxetemplate.go b/site-workflow/pkg/workflow/ipxetemplate.go new file mode 100644 index 000000000..5557b183b --- /dev/null +++ b/site-workflow/pkg/workflow/ipxetemplate.go @@ -0,0 +1,60 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package workflow + +import ( + "time" + + "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/activity" + "github.com/rs/zerolog/log" + "go.temporal.io/sdk/temporal" + "go.temporal.io/sdk/workflow" +) + +// DiscoverIpxeTemplateInventory is a workflow that triggers iPXE template inventory collection from +// the Site Controller and publishes it to the cloud +func DiscoverIpxeTemplateInventory(ctx workflow.Context) error { + logger := log.With().Str("Workflow", "DiscoverIpxeTemplateInventory").Logger() + + logger.Info().Msg("Starting workflow") + + retrypolicy := &temporal.RetryPolicy{ + InitialInterval: 2 * time.Second, + BackoffCoefficient: 2.0, + MaximumInterval: 10 * time.Second, + // Executed every 3 minutes, so we don't want too many retry attempts + MaximumAttempts: 2, + } + options := workflow.ActivityOptions{ + StartToCloseTimeout: 2 * time.Minute, + RetryPolicy: retrypolicy, + } + + ctx = workflow.WithActivityOptions(ctx, options) + + var inventoryManager activity.ManageIpxeTemplateInventory + + err := workflow.ExecuteActivity(ctx, inventoryManager.DiscoverIpxeTemplateInventory).Get(ctx, nil) + if err != nil { + logger.Error().Err(err).Str("Activity", "DiscoverIpxeTemplateInventory").Msg("Failed to execute activity from workflow") + return err + } + + logger.Info().Msg("Completing workflow") + return nil +} diff --git a/site-workflow/pkg/workflow/ipxetemplate_test.go b/site-workflow/pkg/workflow/ipxetemplate_test.go new file mode 100644 index 000000000..d5e4692a8 --- /dev/null +++ b/site-workflow/pkg/workflow/ipxetemplate_test.go @@ -0,0 +1,77 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package workflow + +import ( + "errors" + "testing" + + iActivity "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/activity" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" + "go.temporal.io/sdk/temporal" + "go.temporal.io/sdk/testsuite" +) + +type InventoryIpxeTemplateTestSuite struct { + suite.Suite + testsuite.WorkflowTestSuite + + env *testsuite.TestWorkflowEnvironment +} + +func (s *InventoryIpxeTemplateTestSuite) SetupTest() { + s.env = s.NewTestWorkflowEnvironment() +} + +func (s *InventoryIpxeTemplateTestSuite) AfterTest(suiteName, testName string) { + s.env.AssertExpectations(s.T()) +} + +func (s *InventoryIpxeTemplateTestSuite) Test_DiscoverIpxeTemplateInventory_Success() { + var inventoryManager iActivity.ManageIpxeTemplateInventory + + s.env.RegisterActivity(inventoryManager.DiscoverIpxeTemplateInventory) + s.env.OnActivity(inventoryManager.DiscoverIpxeTemplateInventory, mock.Anything).Return(nil) + + s.env.ExecuteWorkflow(DiscoverIpxeTemplateInventory) + s.True(s.env.IsWorkflowCompleted()) + s.NoError(s.env.GetWorkflowError()) +} + +func (s *InventoryIpxeTemplateTestSuite) Test_DiscoverIpxeTemplateInventory_ActivityFails() { + var inventoryManager iActivity.ManageIpxeTemplateInventory + + errMsg := "Site Controller communication error" + + s.env.RegisterActivity(inventoryManager.DiscoverIpxeTemplateInventory) + s.env.OnActivity(inventoryManager.DiscoverIpxeTemplateInventory, mock.Anything).Return(errors.New(errMsg)) + + s.env.ExecuteWorkflow(DiscoverIpxeTemplateInventory) + s.True(s.env.IsWorkflowCompleted()) + err := s.env.GetWorkflowError() + s.Error(err) + + var applicationErr *temporal.ApplicationError + s.True(errors.As(err, &applicationErr)) + s.Equal(errMsg, applicationErr.Error()) +} + +func TestInventoryIpxeTemplateTestSuite(t *testing.T) { + suite.Run(t, new(InventoryIpxeTemplateTestSuite)) +} diff --git a/site-workflow/pkg/workflow/operatingsystem.go b/site-workflow/pkg/workflow/operatingsystem.go index 5c8553a45..90042c9d4 100644 --- a/site-workflow/pkg/workflow/operatingsystem.go +++ b/site-workflow/pkg/workflow/operatingsystem.go @@ -172,3 +172,122 @@ func DiscoverOsImageInventory(ctx workflow.Context) error { return nil } + +// DiscoverOperatingSystemInventory triggers Operating System inventory collection from carbide-core +// and publishes it to the cloud for reconciliation with the operating_system table. +func DiscoverOperatingSystemInventory(ctx workflow.Context) error { + logger := log.With().Str("Workflow", "DiscoverOperatingSystemInventory").Logger() + logger.Info().Msg("Starting workflow") + + retrypolicy := &temporal.RetryPolicy{ + InitialInterval: 2 * time.Second, + BackoffCoefficient: 2.0, + MaximumInterval: 10 * time.Second, + MaximumAttempts: 2, + } + options := workflow.ActivityOptions{ + StartToCloseTimeout: 2 * time.Minute, + RetryPolicy: retrypolicy, + } + ctx = workflow.WithActivityOptions(ctx, options) + + var inventoryManager activity.ManageOperatingSystemInventory + + err := workflow.ExecuteActivity(ctx, inventoryManager.DiscoverOperatingSystemInventory).Get(ctx, nil) + if err != nil { + logger.Error().Err(err).Str("Activity", "DiscoverOperatingSystemInventory").Msg("Failed to execute activity from workflow") + return err + } + + logger.Info().Msg("Completing workflow") + return nil +} + +// CreateOperatingSystem pushes a new Operating System to carbide-core. +// request.Id must equal the carbide-rest primary key; carbide-core stores the same UUID. +func CreateOperatingSystem(ctx workflow.Context, request *cwssaws.CreateOperatingSystemRequest) (string, error) { + logger := log.With().Str("Workflow", "CreateOperatingSystem").Logger() + logger.Info().Msg("Starting workflow") + + retrypolicy := &temporal.RetryPolicy{ + InitialInterval: 1 * time.Second, + BackoffCoefficient: 2.0, + MaximumInterval: 10 * time.Second, + MaximumAttempts: 2, + } + options := workflow.ActivityOptions{ + StartToCloseTimeout: 2 * time.Minute, + RetryPolicy: retrypolicy, + } + ctx = workflow.WithActivityOptions(ctx, options) + + var osManager activity.ManageOperatingSystem + var id string + + err := workflow.ExecuteActivity(ctx, osManager.CreateOperatingSystemOnSite, request).Get(ctx, &id) + if err != nil { + logger.Error().Err(err).Str("Activity", "CreateOperatingSystemOnSite").Msg("Failed to execute activity from workflow") + return "", err + } + + logger.Info().Str("ID", id).Msg("Completing workflow") + return id, nil +} + +// UpdateOperatingSystem updates an existing Operating System in carbide-core. +func UpdateOperatingSystem(ctx workflow.Context, request *cwssaws.UpdateOperatingSystemRequest) error { + logger := log.With().Str("Workflow", "UpdateOperatingSystem").Logger() + logger.Info().Msg("Starting workflow") + + retrypolicy := &temporal.RetryPolicy{ + InitialInterval: 1 * time.Second, + BackoffCoefficient: 2.0, + MaximumInterval: 10 * time.Second, + MaximumAttempts: 2, + } + options := workflow.ActivityOptions{ + StartToCloseTimeout: 2 * time.Minute, + RetryPolicy: retrypolicy, + } + ctx = workflow.WithActivityOptions(ctx, options) + + var osManager activity.ManageOperatingSystem + + err := workflow.ExecuteActivity(ctx, osManager.UpdateOperatingSystemOnSite, request).Get(ctx, nil) + if err != nil { + logger.Error().Err(err).Str("Activity", "UpdateOperatingSystemOnSite").Msg("Failed to execute activity from workflow") + return err + } + + logger.Info().Msg("Completing workflow") + return nil +} + +// DeleteOperatingSystem soft-deletes an Operating System in carbide-core. +func DeleteOperatingSystem(ctx workflow.Context, request *cwssaws.DeleteOperatingSystemRequest) error { + logger := log.With().Str("Workflow", "DeleteOperatingSystem").Logger() + logger.Info().Msg("Starting workflow") + + retrypolicy := &temporal.RetryPolicy{ + InitialInterval: 1 * time.Second, + BackoffCoefficient: 2.0, + MaximumInterval: 10 * time.Second, + MaximumAttempts: 2, + } + options := workflow.ActivityOptions{ + StartToCloseTimeout: 2 * time.Minute, + RetryPolicy: retrypolicy, + } + ctx = workflow.WithActivityOptions(ctx, options) + + var osManager activity.ManageOperatingSystem + + err := workflow.ExecuteActivity(ctx, osManager.DeleteOperatingSystemOnSite, request).Get(ctx, nil) + if err != nil { + logger.Error().Err(err).Str("Activity", "DeleteOperatingSystemOnSite").Msg("Failed to execute activity from workflow") + return err + } + + logger.Info().Msg("Completing workflow") + return nil +} diff --git a/workflow-schema/schema/site-agent/workflows/v1/common_carbide.pb.go b/workflow-schema/schema/site-agent/workflows/v1/common_carbide.pb.go index 87cc3c0cc..b7869bc68 100644 --- a/workflow-schema/schema/site-agent/workflows/v1/common_carbide.pb.go +++ b/workflow-schema/schema/site-agent/workflows/v1/common_carbide.pb.go @@ -1173,6 +1173,94 @@ func (x *ComputeAllocationId) GetValue() string { return "" } +type OperatingSystemId struct { + state protoimpl.MessageState `protogen:"open.v1"` + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OperatingSystemId) Reset() { + *x = OperatingSystemId{} + mi := &file_common_carbide_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OperatingSystemId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OperatingSystemId) ProtoMessage() {} + +func (x *OperatingSystemId) ProtoReflect() protoreflect.Message { + mi := &file_common_carbide_proto_msgTypes[24] + 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 OperatingSystemId.ProtoReflect.Descriptor instead. +func (*OperatingSystemId) Descriptor() ([]byte, []int) { + return file_common_carbide_proto_rawDescGZIP(), []int{24} +} + +func (x *OperatingSystemId) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +type IpxeTemplateId struct { + state protoimpl.MessageState `protogen:"open.v1"` + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *IpxeTemplateId) Reset() { + *x = IpxeTemplateId{} + mi := &file_common_carbide_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IpxeTemplateId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IpxeTemplateId) ProtoMessage() {} + +func (x *IpxeTemplateId) ProtoReflect() protoreflect.Message { + mi := &file_common_carbide_proto_msgTypes[25] + 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 IpxeTemplateId.ProtoReflect.Descriptor instead. +func (*IpxeTemplateId) Descriptor() ([]byte, []int) { + return file_common_carbide_proto_rawDescGZIP(), []int{25} +} + +func (x *IpxeTemplateId) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + var File_common_carbide_proto protoreflect.FileDescriptor const file_common_carbide_proto_rawDesc = "" + @@ -1230,6 +1318,10 @@ const file_common_carbide_proto_rawDesc = "" + "\x0eNVLinkDomainId\x12\x14\n" + "\x05value\x18\x01 \x01(\tR\x05value\"+\n" + "\x13ComputeAllocationId\x12\x14\n" + + "\x05value\x18\x01 \x01(\tR\x05value\")\n" + + "\x11OperatingSystemId\x12\x14\n" + + "\x05value\x18\x01 \x01(\tR\x05value\"&\n" + + "\x0eIpxeTemplateId\x12\x14\n" + "\x05value\x18\x01 \x01(\tR\x05value*\x9e\x02\n" + "\x12SystemPowerControl\x12 \n" + "\x1cSYSTEM_POWER_CONTROL_UNKNOWN\x10\x00\x12\x1b\n" + @@ -1253,7 +1345,7 @@ func file_common_carbide_proto_rawDescGZIP() []byte { } var file_common_carbide_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_common_carbide_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_common_carbide_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_common_carbide_proto_goTypes = []any{ (SystemPowerControl)(0), // 0: common.SystemPowerControl (*MachineId)(nil), // 1: common.MachineId @@ -1280,6 +1372,8 @@ var file_common_carbide_proto_goTypes = []any{ (*NVLinkLogicalPartitionId)(nil), // 22: common.NVLinkLogicalPartitionId (*NVLinkDomainId)(nil), // 23: common.NVLinkDomainId (*ComputeAllocationId)(nil), // 24: common.ComputeAllocationId + (*OperatingSystemId)(nil), // 25: common.OperatingSystemId + (*IpxeTemplateId)(nil), // 26: common.IpxeTemplateId } var file_common_carbide_proto_depIdxs = []int32{ 1, // 0: common.MachineIdList.machine_ids:type_name -> common.MachineId @@ -1301,7 +1395,7 @@ func file_common_carbide_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_common_carbide_proto_rawDesc), len(file_common_carbide_proto_rawDesc)), NumEnums: 1, - NumMessages: 24, + NumMessages: 26, NumExtensions: 0, NumServices: 0, }, diff --git a/workflow-schema/schema/site-agent/workflows/v1/forge_carbide.pb.go b/workflow-schema/schema/site-agent/workflows/v1/forge_carbide.pb.go index e3e394896..7780f2214 100644 --- a/workflow-schema/schema/site-agent/workflows/v1/forge_carbide.pb.go +++ b/workflow-schema/schema/site-agent/workflows/v1/forge_carbide.pb.go @@ -165,6 +165,7 @@ const ( CredentialType_RootBmcByMacAddress CredentialType = 8 CredentialType_BmcForgeAdminByMacAddress CredentialType = 9 CredentialType_NmxM CredentialType = 10 + CredentialType_BgpSiteWideLeafPassword CredentialType = 11 ) // Enum value maps for CredentialType. @@ -181,6 +182,7 @@ var ( 8: "RootBmcByMacAddress", 9: "BmcForgeAdminByMacAddress", 10: "NmxM", + 11: "BgpSiteWideLeafPassword", } CredentialType_value = map[string]int32{ "HostBMC": 0, @@ -194,6 +196,7 @@ var ( "RootBmcByMacAddress": 8, "BmcForgeAdminByMacAddress": 9, "NmxM": 10, + "BgpSiteWideLeafPassword": 11, } ) @@ -589,6 +592,106 @@ func (NetworkSegmentFlag) EnumDescriptor() ([]byte, []int) { return file_forge_carbide_proto_rawDescGZIP(), []int{8} } +// Artifact cache strategy +type IpxeTemplateArtifactCacheStrategy int32 + +const ( + IpxeTemplateArtifactCacheStrategy_CACHE_AS_NEEDED IpxeTemplateArtifactCacheStrategy = 0 // Download and cache artifact locally if possible + IpxeTemplateArtifactCacheStrategy_LOCAL_ONLY IpxeTemplateArtifactCacheStrategy = 1 // Artifact URL provided is only usable locally: site specific, no caching applicable. + IpxeTemplateArtifactCacheStrategy_CACHED_ONLY IpxeTemplateArtifactCacheStrategy = 2 // Artifact URL must be cached locally or is unusable + IpxeTemplateArtifactCacheStrategy_REMOTE_ONLY IpxeTemplateArtifactCacheStrategy = 3 // Always fetch from remote URL, never cache locally +) + +// Enum value maps for IpxeTemplateArtifactCacheStrategy. +var ( + IpxeTemplateArtifactCacheStrategy_name = map[int32]string{ + 0: "CACHE_AS_NEEDED", + 1: "LOCAL_ONLY", + 2: "CACHED_ONLY", + 3: "REMOTE_ONLY", + } + IpxeTemplateArtifactCacheStrategy_value = map[string]int32{ + "CACHE_AS_NEEDED": 0, + "LOCAL_ONLY": 1, + "CACHED_ONLY": 2, + "REMOTE_ONLY": 3, + } +) + +func (x IpxeTemplateArtifactCacheStrategy) Enum() *IpxeTemplateArtifactCacheStrategy { + p := new(IpxeTemplateArtifactCacheStrategy) + *p = x + return p +} + +func (x IpxeTemplateArtifactCacheStrategy) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IpxeTemplateArtifactCacheStrategy) Descriptor() protoreflect.EnumDescriptor { + return file_forge_carbide_proto_enumTypes[9].Descriptor() +} + +func (IpxeTemplateArtifactCacheStrategy) Type() protoreflect.EnumType { + return &file_forge_carbide_proto_enumTypes[9] +} + +func (x IpxeTemplateArtifactCacheStrategy) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IpxeTemplateArtifactCacheStrategy.Descriptor instead. +func (IpxeTemplateArtifactCacheStrategy) EnumDescriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{9} +} + +// Scope for iPXE script templates. +type IpxeTemplateScope int32 + +const ( + IpxeTemplateScope_INTERNAL IpxeTemplateScope = 0 // Carbide-core usage only + IpxeTemplateScope_PUBLIC IpxeTemplateScope = 1 // Usable by tenant +) + +// Enum value maps for IpxeTemplateScope. +var ( + IpxeTemplateScope_name = map[int32]string{ + 0: "INTERNAL", + 1: "PUBLIC", + } + IpxeTemplateScope_value = map[string]int32{ + "INTERNAL": 0, + "PUBLIC": 1, + } +) + +func (x IpxeTemplateScope) Enum() *IpxeTemplateScope { + p := new(IpxeTemplateScope) + *p = x + return p +} + +func (x IpxeTemplateScope) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IpxeTemplateScope) Descriptor() protoreflect.EnumDescriptor { + return file_forge_carbide_proto_enumTypes[10].Descriptor() +} + +func (IpxeTemplateScope) Type() protoreflect.EnumType { + return &file_forge_carbide_proto_enumTypes[10] +} + +func (x IpxeTemplateScope) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IpxeTemplateScope.Descriptor instead. +func (IpxeTemplateScope) EnumDescriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{10} +} + // Enum defining different categories of issues that can be reported during instance release type IssueCategory int32 @@ -629,11 +732,11 @@ func (x IssueCategory) String() string { } func (IssueCategory) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[9].Descriptor() + return file_forge_carbide_proto_enumTypes[11].Descriptor() } func (IssueCategory) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[9] + return &file_forge_carbide_proto_enumTypes[11] } func (x IssueCategory) Number() protoreflect.EnumNumber { @@ -642,7 +745,7 @@ func (x IssueCategory) Number() protoreflect.EnumNumber { // Deprecated: Use IssueCategory.Descriptor instead. func (IssueCategory) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{9} + return file_forge_carbide_proto_rawDescGZIP(), []int{11} } type AssignStaticAddressStatus int32 @@ -678,11 +781,11 @@ func (x AssignStaticAddressStatus) String() string { } func (AssignStaticAddressStatus) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[10].Descriptor() + return file_forge_carbide_proto_enumTypes[12].Descriptor() } func (AssignStaticAddressStatus) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[10] + return &file_forge_carbide_proto_enumTypes[12] } func (x AssignStaticAddressStatus) Number() protoreflect.EnumNumber { @@ -691,7 +794,7 @@ func (x AssignStaticAddressStatus) Number() protoreflect.EnumNumber { // Deprecated: Use AssignStaticAddressStatus.Descriptor instead. func (AssignStaticAddressStatus) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{10} + return file_forge_carbide_proto_rawDescGZIP(), []int{12} } type RemoveStaticAddressStatus int32 @@ -724,11 +827,11 @@ func (x RemoveStaticAddressStatus) String() string { } func (RemoveStaticAddressStatus) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[11].Descriptor() + return file_forge_carbide_proto_enumTypes[13].Descriptor() } func (RemoveStaticAddressStatus) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[11] + return &file_forge_carbide_proto_enumTypes[13] } func (x RemoveStaticAddressStatus) Number() protoreflect.EnumNumber { @@ -737,7 +840,7 @@ func (x RemoveStaticAddressStatus) Number() protoreflect.EnumNumber { // Deprecated: Use RemoveStaticAddressStatus.Descriptor instead. func (RemoveStaticAddressStatus) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{11} + return file_forge_carbide_proto_rawDescGZIP(), []int{13} } type MachineType int32 @@ -776,11 +879,11 @@ func (x MachineType) String() string { } func (MachineType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[12].Descriptor() + return file_forge_carbide_proto_enumTypes[14].Descriptor() } func (MachineType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[12] + return &file_forge_carbide_proto_enumTypes[14] } func (x MachineType) Number() protoreflect.EnumNumber { @@ -789,7 +892,7 @@ func (x MachineType) Number() protoreflect.EnumNumber { // Deprecated: Use MachineType.Descriptor instead. func (MachineType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{12} + return file_forge_carbide_proto_rawDescGZIP(), []int{14} } // Describes how a machine can connect to network segments. @@ -827,11 +930,11 @@ func (x InstanceNetworkSegmentMembershipType) String() string { } func (InstanceNetworkSegmentMembershipType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[13].Descriptor() + return file_forge_carbide_proto_enumTypes[15].Descriptor() } func (InstanceNetworkSegmentMembershipType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[13] + return &file_forge_carbide_proto_enumTypes[15] } func (x InstanceNetworkSegmentMembershipType) Number() protoreflect.EnumNumber { @@ -840,7 +943,7 @@ func (x InstanceNetworkSegmentMembershipType) Number() protoreflect.EnumNumber { // Deprecated: Use InstanceNetworkSegmentMembershipType.Descriptor instead. func (InstanceNetworkSegmentMembershipType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{13} + return file_forge_carbide_proto_rawDescGZIP(), []int{15} } type ControllerStateOutcome int32 @@ -882,11 +985,11 @@ func (x ControllerStateOutcome) String() string { } func (ControllerStateOutcome) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[14].Descriptor() + return file_forge_carbide_proto_enumTypes[16].Descriptor() } func (ControllerStateOutcome) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[14] + return &file_forge_carbide_proto_enumTypes[16] } func (x ControllerStateOutcome) Number() protoreflect.EnumNumber { @@ -895,7 +998,7 @@ func (x ControllerStateOutcome) Number() protoreflect.EnumNumber { // Deprecated: Use ControllerStateOutcome.Descriptor instead. func (ControllerStateOutcome) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{14} + return file_forge_carbide_proto_rawDescGZIP(), []int{16} } type SyncState int32 @@ -930,11 +1033,11 @@ func (x SyncState) String() string { } func (SyncState) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[15].Descriptor() + return file_forge_carbide_proto_enumTypes[17].Descriptor() } func (SyncState) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[15] + return &file_forge_carbide_proto_enumTypes[17] } func (x SyncState) Number() protoreflect.EnumNumber { @@ -943,7 +1046,7 @@ func (x SyncState) Number() protoreflect.EnumNumber { // Deprecated: Use SyncState.Descriptor instead. func (SyncState) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{15} + return file_forge_carbide_proto_rawDescGZIP(), []int{17} } type MachineArchitecture int32 @@ -976,11 +1079,11 @@ func (x MachineArchitecture) String() string { } func (MachineArchitecture) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[16].Descriptor() + return file_forge_carbide_proto_enumTypes[18].Descriptor() } func (MachineArchitecture) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[16] + return &file_forge_carbide_proto_enumTypes[18] } func (x MachineArchitecture) Number() protoreflect.EnumNumber { @@ -989,7 +1092,7 @@ func (x MachineArchitecture) Number() protoreflect.EnumNumber { // Deprecated: Use MachineArchitecture.Descriptor instead. func (MachineArchitecture) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{16} + return file_forge_carbide_proto_rawDescGZIP(), []int{18} } type InterfaceAssociationType int32 @@ -1028,11 +1131,11 @@ func (x InterfaceAssociationType) String() string { } func (InterfaceAssociationType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[17].Descriptor() + return file_forge_carbide_proto_enumTypes[19].Descriptor() } func (InterfaceAssociationType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[17] + return &file_forge_carbide_proto_enumTypes[19] } func (x InterfaceAssociationType) Number() protoreflect.EnumNumber { @@ -1041,7 +1144,7 @@ func (x InterfaceAssociationType) Number() protoreflect.EnumNumber { // Deprecated: Use InterfaceAssociationType.Descriptor instead. func (InterfaceAssociationType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{17} + return file_forge_carbide_proto_rawDescGZIP(), []int{19} } type ExpireDhcpLeaseStatus int32 @@ -1074,11 +1177,11 @@ func (x ExpireDhcpLeaseStatus) String() string { } func (ExpireDhcpLeaseStatus) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[18].Descriptor() + return file_forge_carbide_proto_enumTypes[20].Descriptor() } func (ExpireDhcpLeaseStatus) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[18] + return &file_forge_carbide_proto_enumTypes[20] } func (x ExpireDhcpLeaseStatus) Number() protoreflect.EnumNumber { @@ -1087,7 +1190,7 @@ func (x ExpireDhcpLeaseStatus) Number() protoreflect.EnumNumber { // Deprecated: Use ExpireDhcpLeaseStatus.Descriptor instead. func (ExpireDhcpLeaseStatus) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{18} + return file_forge_carbide_proto_rawDescGZIP(), []int{20} } type UserRoles int32 @@ -1126,11 +1229,11 @@ func (x UserRoles) String() string { } func (UserRoles) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[19].Descriptor() + return file_forge_carbide_proto_enumTypes[21].Descriptor() } func (UserRoles) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[19] + return &file_forge_carbide_proto_enumTypes[21] } func (x UserRoles) Number() protoreflect.EnumNumber { @@ -1139,7 +1242,7 @@ func (x UserRoles) Number() protoreflect.EnumNumber { // Deprecated: Use UserRoles.Descriptor instead. func (UserRoles) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{19} + return file_forge_carbide_proto_rawDescGZIP(), []int{21} } type MachineHardwareInfoUpdateType int32 @@ -1169,11 +1272,11 @@ func (x MachineHardwareInfoUpdateType) String() string { } func (MachineHardwareInfoUpdateType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[20].Descriptor() + return file_forge_carbide_proto_enumTypes[22].Descriptor() } func (MachineHardwareInfoUpdateType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[20] + return &file_forge_carbide_proto_enumTypes[22] } func (x MachineHardwareInfoUpdateType) Number() protoreflect.EnumNumber { @@ -1182,7 +1285,7 @@ func (x MachineHardwareInfoUpdateType) Number() protoreflect.EnumNumber { // Deprecated: Use MachineHardwareInfoUpdateType.Descriptor instead. func (MachineHardwareInfoUpdateType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{20} + return file_forge_carbide_proto_rawDescGZIP(), []int{22} } type ManagedHostQuarantineMode int32 @@ -1212,11 +1315,11 @@ func (x ManagedHostQuarantineMode) String() string { } func (ManagedHostQuarantineMode) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[21].Descriptor() + return file_forge_carbide_proto_enumTypes[23].Descriptor() } func (ManagedHostQuarantineMode) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[21] + return &file_forge_carbide_proto_enumTypes[23] } func (x ManagedHostQuarantineMode) Number() protoreflect.EnumNumber { @@ -1225,7 +1328,7 @@ func (x ManagedHostQuarantineMode) Number() protoreflect.EnumNumber { // Deprecated: Use ManagedHostQuarantineMode.Descriptor instead. func (ManagedHostQuarantineMode) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{21} + return file_forge_carbide_proto_rawDescGZIP(), []int{23} } type VpcIsolationBehaviorType int32 @@ -1261,11 +1364,11 @@ func (x VpcIsolationBehaviorType) String() string { } func (VpcIsolationBehaviorType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[22].Descriptor() + return file_forge_carbide_proto_enumTypes[24].Descriptor() } func (VpcIsolationBehaviorType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[22] + return &file_forge_carbide_proto_enumTypes[24] } func (x VpcIsolationBehaviorType) Number() protoreflect.EnumNumber { @@ -1274,7 +1377,7 @@ func (x VpcIsolationBehaviorType) Number() protoreflect.EnumNumber { // Deprecated: Use VpcIsolationBehaviorType.Descriptor instead. func (VpcIsolationBehaviorType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{22} + return file_forge_carbide_proto_rawDescGZIP(), []int{24} } type AgentUpgradePolicy int32 @@ -1310,11 +1413,11 @@ func (x AgentUpgradePolicy) String() string { } func (AgentUpgradePolicy) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[23].Descriptor() + return file_forge_carbide_proto_enumTypes[25].Descriptor() } func (AgentUpgradePolicy) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[23] + return &file_forge_carbide_proto_enumTypes[25] } func (x AgentUpgradePolicy) Number() protoreflect.EnumNumber { @@ -1323,7 +1426,7 @@ func (x AgentUpgradePolicy) Number() protoreflect.EnumNumber { // Deprecated: Use AgentUpgradePolicy.Descriptor instead. func (AgentUpgradePolicy) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{23} + return file_forge_carbide_proto_rawDescGZIP(), []int{25} } type LockdownAction int32 @@ -1356,11 +1459,11 @@ func (x LockdownAction) String() string { } func (LockdownAction) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[24].Descriptor() + return file_forge_carbide_proto_enumTypes[26].Descriptor() } func (LockdownAction) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[24] + return &file_forge_carbide_proto_enumTypes[26] } func (x LockdownAction) Number() protoreflect.EnumNumber { @@ -1369,7 +1472,7 @@ func (x LockdownAction) Number() protoreflect.EnumNumber { // Deprecated: Use LockdownAction.Descriptor instead. func (LockdownAction) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{24} + return file_forge_carbide_proto_rawDescGZIP(), []int{26} } type BMCRequestType int32 @@ -1402,11 +1505,11 @@ func (x BMCRequestType) String() string { } func (BMCRequestType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[25].Descriptor() + return file_forge_carbide_proto_enumTypes[27].Descriptor() } func (BMCRequestType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[25] + return &file_forge_carbide_proto_enumTypes[27] } func (x BMCRequestType) Number() protoreflect.EnumNumber { @@ -1415,7 +1518,7 @@ func (x BMCRequestType) Number() protoreflect.EnumNumber { // Deprecated: Use BMCRequestType.Descriptor instead. func (BMCRequestType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{25} + return file_forge_carbide_proto_rawDescGZIP(), []int{27} } // Specifies whether a network interface is physical network function (PF) @@ -1451,11 +1554,11 @@ func (x InterfaceFunctionType) String() string { } func (InterfaceFunctionType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[26].Descriptor() + return file_forge_carbide_proto_enumTypes[28].Descriptor() } func (InterfaceFunctionType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[26] + return &file_forge_carbide_proto_enumTypes[28] } func (x InterfaceFunctionType) Number() protoreflect.EnumNumber { @@ -1464,7 +1567,7 @@ func (x InterfaceFunctionType) Number() protoreflect.EnumNumber { // Deprecated: Use InterfaceFunctionType.Descriptor instead. func (InterfaceFunctionType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{26} + return file_forge_carbide_proto_rawDescGZIP(), []int{28} } type OverrideMode int32 @@ -1503,11 +1606,11 @@ func (x OverrideMode) String() string { } func (OverrideMode) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[27].Descriptor() + return file_forge_carbide_proto_enumTypes[29].Descriptor() } func (OverrideMode) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[27] + return &file_forge_carbide_proto_enumTypes[29] } func (x OverrideMode) Number() protoreflect.EnumNumber { @@ -1516,7 +1619,7 @@ func (x OverrideMode) Number() protoreflect.EnumNumber { // Deprecated: Use OverrideMode.Descriptor instead. func (OverrideMode) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{27} + return file_forge_carbide_proto_rawDescGZIP(), []int{29} } type ResourcePoolType int32 @@ -1555,11 +1658,11 @@ func (x ResourcePoolType) String() string { } func (ResourcePoolType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[28].Descriptor() + return file_forge_carbide_proto_enumTypes[30].Descriptor() } func (ResourcePoolType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[28] + return &file_forge_carbide_proto_enumTypes[30] } func (x ResourcePoolType) Number() protoreflect.EnumNumber { @@ -1568,7 +1671,7 @@ func (x ResourcePoolType) Number() protoreflect.EnumNumber { // Deprecated: Use ResourcePoolType.Descriptor instead. func (ResourcePoolType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{28} + return file_forge_carbide_proto_rawDescGZIP(), []int{30} } type MaintenanceOperation int32 @@ -1601,11 +1704,11 @@ func (x MaintenanceOperation) String() string { } func (MaintenanceOperation) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[29].Descriptor() + return file_forge_carbide_proto_enumTypes[31].Descriptor() } func (MaintenanceOperation) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[29] + return &file_forge_carbide_proto_enumTypes[31] } func (x MaintenanceOperation) Number() protoreflect.EnumNumber { @@ -1614,7 +1717,7 @@ func (x MaintenanceOperation) Number() protoreflect.EnumNumber { // Deprecated: Use MaintenanceOperation.Descriptor instead. func (MaintenanceOperation) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{29} + return file_forge_carbide_proto_rawDescGZIP(), []int{31} } type ConfigSetting int32 @@ -1653,11 +1756,11 @@ func (x ConfigSetting) String() string { } func (ConfigSetting) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[30].Descriptor() + return file_forge_carbide_proto_enumTypes[32].Descriptor() } func (ConfigSetting) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[30] + return &file_forge_carbide_proto_enumTypes[32] } func (x ConfigSetting) Number() protoreflect.EnumNumber { @@ -1666,7 +1769,7 @@ func (x ConfigSetting) Number() protoreflect.EnumNumber { // Deprecated: Use ConfigSetting.Descriptor instead. func (ConfigSetting) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{30} + return file_forge_carbide_proto_rawDescGZIP(), []int{32} } // See IpType for protobuf's C++ scoping rule explanation @@ -1715,11 +1818,11 @@ func (x UuidType) String() string { } func (UuidType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[31].Descriptor() + return file_forge_carbide_proto_enumTypes[33].Descriptor() } func (UuidType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[31] + return &file_forge_carbide_proto_enumTypes[33] } func (x UuidType) Number() protoreflect.EnumNumber { @@ -1728,7 +1831,7 @@ func (x UuidType) Number() protoreflect.EnumNumber { // Deprecated: Use UuidType.Descriptor instead. func (UuidType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{31} + return file_forge_carbide_proto_rawDescGZIP(), []int{33} } type MacOwner int32 @@ -1767,11 +1870,11 @@ func (x MacOwner) String() string { } func (MacOwner) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[32].Descriptor() + return file_forge_carbide_proto_enumTypes[34].Descriptor() } func (MacOwner) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[32] + return &file_forge_carbide_proto_enumTypes[34] } func (x MacOwner) Number() protoreflect.EnumNumber { @@ -1780,7 +1883,7 @@ func (x MacOwner) Number() protoreflect.EnumNumber { // Deprecated: Use MacOwner.Descriptor instead. func (MacOwner) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{32} + return file_forge_carbide_proto_rawDescGZIP(), []int{34} } type UpdateInitiator int32 @@ -1813,11 +1916,11 @@ func (x UpdateInitiator) String() string { } func (UpdateInitiator) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[33].Descriptor() + return file_forge_carbide_proto_enumTypes[35].Descriptor() } func (UpdateInitiator) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[33] + return &file_forge_carbide_proto_enumTypes[35] } func (x UpdateInitiator) Number() protoreflect.EnumNumber { @@ -1826,7 +1929,7 @@ func (x UpdateInitiator) Number() protoreflect.EnumNumber { // Deprecated: Use UpdateInitiator.Descriptor instead. func (UpdateInitiator) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{33} + return file_forge_carbide_proto_rawDescGZIP(), []int{35} } // The things `forge-admin-cli ip find` searches. @@ -1859,6 +1962,12 @@ const ( // DB records specifically say their source type is `admin`. IpType_IpTypeRouteServerFromAdminApi IpType = 10 IpType_IpTypeDpaInterface IpType = 11 + // IpTypeStaticBmcIp are BMC IPs that were statically assigned via + // ExpectedMachine.bmc_ip_address, ExpectedPowerShelf.bmc_ip_address, + // ExpectedSwitch.bmc_ip_address, or operator static assignment + // (AllocationType::Static / static-assignments segment), as opposed to + // a normal DHCP allocation. + IpType_IpTypeStaticBmcIp IpType = 12 ) // Enum value maps for IpType. @@ -1876,6 +1985,7 @@ var ( 9: "IpTypeRouteServerFromConfigFile", 10: "IpTypeRouteServerFromAdminApi", 11: "IpTypeDpaInterface", + 12: "IpTypeStaticBmcIp", } IpType_value = map[string]int32{ "IpTypeStaticDataDhcpServer": 0, @@ -1890,6 +2000,7 @@ var ( "IpTypeRouteServerFromConfigFile": 9, "IpTypeRouteServerFromAdminApi": 10, "IpTypeDpaInterface": 11, + "IpTypeStaticBmcIp": 12, } ) @@ -1904,11 +2015,11 @@ func (x IpType) String() string { } func (IpType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[34].Descriptor() + return file_forge_carbide_proto_enumTypes[36].Descriptor() } func (IpType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[34] + return &file_forge_carbide_proto_enumTypes[36] } func (x IpType) Number() protoreflect.EnumNumber { @@ -1917,7 +2028,7 @@ func (x IpType) Number() protoreflect.EnumNumber { // Deprecated: Use IpType.Descriptor instead. func (IpType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{34} + return file_forge_carbide_proto_rawDescGZIP(), []int{36} } // RouteServerSourceType maps to the RouteServerSourceType @@ -1953,11 +2064,11 @@ func (x RouteServerSourceType) String() string { } func (RouteServerSourceType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[35].Descriptor() + return file_forge_carbide_proto_enumTypes[37].Descriptor() } func (RouteServerSourceType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[35] + return &file_forge_carbide_proto_enumTypes[37] } func (x RouteServerSourceType) Number() protoreflect.EnumNumber { @@ -1966,7 +2077,7 @@ func (x RouteServerSourceType) Number() protoreflect.EnumNumber { // Deprecated: Use RouteServerSourceType.Descriptor instead. func (RouteServerSourceType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{35} + return file_forge_carbide_proto_rawDescGZIP(), []int{37} } type OsImageStatus int32 @@ -2013,11 +2124,11 @@ func (x OsImageStatus) String() string { } func (OsImageStatus) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[36].Descriptor() + return file_forge_carbide_proto_enumTypes[38].Descriptor() } func (OsImageStatus) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[36] + return &file_forge_carbide_proto_enumTypes[38] } func (x OsImageStatus) Number() protoreflect.EnumNumber { @@ -2026,7 +2137,7 @@ func (x OsImageStatus) Number() protoreflect.EnumNumber { // Deprecated: Use OsImageStatus.Descriptor instead. func (OsImageStatus) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{36} + return file_forge_carbide_proto_rawDescGZIP(), []int{38} } // WARNING: Site proto declares these enums inside `MachineValidationStatus`. This is not compilable to protobuf so we move the enums to the top level @@ -2057,11 +2168,11 @@ func (x MachineValidationStarted) String() string { } func (MachineValidationStarted) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[37].Descriptor() + return file_forge_carbide_proto_enumTypes[39].Descriptor() } func (MachineValidationStarted) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[37] + return &file_forge_carbide_proto_enumTypes[39] } func (x MachineValidationStarted) Number() protoreflect.EnumNumber { @@ -2070,7 +2181,7 @@ func (x MachineValidationStarted) Number() protoreflect.EnumNumber { // Deprecated: Use MachineValidationStarted.Descriptor instead. func (MachineValidationStarted) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{37} + return file_forge_carbide_proto_rawDescGZIP(), []int{39} } // WARNING: Site proto declares these enums inside `MachineValidationStatus`. This is not compilable to protobuf so we move the enums to the top level @@ -2101,11 +2212,11 @@ func (x MachineValidationInProgress) String() string { } func (MachineValidationInProgress) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[38].Descriptor() + return file_forge_carbide_proto_enumTypes[40].Descriptor() } func (MachineValidationInProgress) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[38] + return &file_forge_carbide_proto_enumTypes[40] } func (x MachineValidationInProgress) Number() protoreflect.EnumNumber { @@ -2114,7 +2225,7 @@ func (x MachineValidationInProgress) Number() protoreflect.EnumNumber { // Deprecated: Use MachineValidationInProgress.Descriptor instead. func (MachineValidationInProgress) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{38} + return file_forge_carbide_proto_rawDescGZIP(), []int{40} } // WARNING: Site proto declares these enums inside `MachineValidationStatus`. This is not compilable to protobuf so we move the enums to the top level @@ -2151,11 +2262,11 @@ func (x MachineValidationCompleted) String() string { } func (MachineValidationCompleted) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[39].Descriptor() + return file_forge_carbide_proto_enumTypes[41].Descriptor() } func (MachineValidationCompleted) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[39] + return &file_forge_carbide_proto_enumTypes[41] } func (x MachineValidationCompleted) Number() protoreflect.EnumNumber { @@ -2164,7 +2275,7 @@ func (x MachineValidationCompleted) Number() protoreflect.EnumNumber { // Deprecated: Use MachineValidationCompleted.Descriptor instead. func (MachineValidationCompleted) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{39} + return file_forge_carbide_proto_rawDescGZIP(), []int{41} } type MachineCapabilityDeviceType int32 @@ -2200,11 +2311,11 @@ func (x MachineCapabilityDeviceType) String() string { } func (MachineCapabilityDeviceType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[40].Descriptor() + return file_forge_carbide_proto_enumTypes[42].Descriptor() } func (MachineCapabilityDeviceType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[40] + return &file_forge_carbide_proto_enumTypes[42] } func (x MachineCapabilityDeviceType) Number() protoreflect.EnumNumber { @@ -2213,7 +2324,7 @@ func (x MachineCapabilityDeviceType) Number() protoreflect.EnumNumber { // Deprecated: Use MachineCapabilityDeviceType.Descriptor instead. func (MachineCapabilityDeviceType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{40} + return file_forge_carbide_proto_rawDescGZIP(), []int{42} } // These match the current set of distinct @@ -2266,11 +2377,11 @@ func (x MachineCapabilityType) String() string { } func (MachineCapabilityType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[41].Descriptor() + return file_forge_carbide_proto_enumTypes[43].Descriptor() } func (MachineCapabilityType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[41] + return &file_forge_carbide_proto_enumTypes[43] } func (x MachineCapabilityType) Number() protoreflect.EnumNumber { @@ -2279,7 +2390,7 @@ func (x MachineCapabilityType) Number() protoreflect.EnumNumber { // Deprecated: Use MachineCapabilityType.Descriptor instead. func (MachineCapabilityType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{41} + return file_forge_carbide_proto_rawDescGZIP(), []int{43} } type NetworkSecurityGroupSource int32 @@ -2318,11 +2429,11 @@ func (x NetworkSecurityGroupSource) String() string { } func (NetworkSecurityGroupSource) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[42].Descriptor() + return file_forge_carbide_proto_enumTypes[44].Descriptor() } func (NetworkSecurityGroupSource) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[42] + return &file_forge_carbide_proto_enumTypes[44] } func (x NetworkSecurityGroupSource) Number() protoreflect.EnumNumber { @@ -2331,7 +2442,7 @@ func (x NetworkSecurityGroupSource) Number() protoreflect.EnumNumber { // Deprecated: Use NetworkSecurityGroupSource.Descriptor instead. func (NetworkSecurityGroupSource) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{42} + return file_forge_carbide_proto_rawDescGZIP(), []int{44} } type NetworkSecurityGroupPropagationStatus int32 @@ -2373,11 +2484,11 @@ func (x NetworkSecurityGroupPropagationStatus) String() string { } func (NetworkSecurityGroupPropagationStatus) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[43].Descriptor() + return file_forge_carbide_proto_enumTypes[45].Descriptor() } func (NetworkSecurityGroupPropagationStatus) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[43] + return &file_forge_carbide_proto_enumTypes[45] } func (x NetworkSecurityGroupPropagationStatus) Number() protoreflect.EnumNumber { @@ -2386,7 +2497,7 @@ func (x NetworkSecurityGroupPropagationStatus) Number() protoreflect.EnumNumber // Deprecated: Use NetworkSecurityGroupPropagationStatus.Descriptor instead. func (NetworkSecurityGroupPropagationStatus) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{43} + return file_forge_carbide_proto_rawDescGZIP(), []int{45} } type NetworkSecurityGroupRuleDirection int32 @@ -2422,11 +2533,11 @@ func (x NetworkSecurityGroupRuleDirection) String() string { } func (NetworkSecurityGroupRuleDirection) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[44].Descriptor() + return file_forge_carbide_proto_enumTypes[46].Descriptor() } func (NetworkSecurityGroupRuleDirection) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[44] + return &file_forge_carbide_proto_enumTypes[46] } func (x NetworkSecurityGroupRuleDirection) Number() protoreflect.EnumNumber { @@ -2435,7 +2546,7 @@ func (x NetworkSecurityGroupRuleDirection) Number() protoreflect.EnumNumber { // Deprecated: Use NetworkSecurityGroupRuleDirection.Descriptor instead. func (NetworkSecurityGroupRuleDirection) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{44} + return file_forge_carbide_proto_rawDescGZIP(), []int{46} } type NetworkSecurityGroupRuleProtocol int32 @@ -2480,11 +2591,11 @@ func (x NetworkSecurityGroupRuleProtocol) String() string { } func (NetworkSecurityGroupRuleProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[45].Descriptor() + return file_forge_carbide_proto_enumTypes[47].Descriptor() } func (NetworkSecurityGroupRuleProtocol) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[45] + return &file_forge_carbide_proto_enumTypes[47] } func (x NetworkSecurityGroupRuleProtocol) Number() protoreflect.EnumNumber { @@ -2493,7 +2604,7 @@ func (x NetworkSecurityGroupRuleProtocol) Number() protoreflect.EnumNumber { // Deprecated: Use NetworkSecurityGroupRuleProtocol.Descriptor instead. func (NetworkSecurityGroupRuleProtocol) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{45} + return file_forge_carbide_proto_rawDescGZIP(), []int{47} } type NetworkSecurityGroupRuleAction int32 @@ -2529,11 +2640,11 @@ func (x NetworkSecurityGroupRuleAction) String() string { } func (NetworkSecurityGroupRuleAction) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[46].Descriptor() + return file_forge_carbide_proto_enumTypes[48].Descriptor() } func (NetworkSecurityGroupRuleAction) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[46] + return &file_forge_carbide_proto_enumTypes[48] } func (x NetworkSecurityGroupRuleAction) Number() protoreflect.EnumNumber { @@ -2542,7 +2653,7 @@ func (x NetworkSecurityGroupRuleAction) Number() protoreflect.EnumNumber { // Deprecated: Use NetworkSecurityGroupRuleAction.Descriptor instead. func (NetworkSecurityGroupRuleAction) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{46} + return file_forge_carbide_proto_rawDescGZIP(), []int{48} } type PowerState int32 @@ -2578,11 +2689,11 @@ func (x PowerState) String() string { } func (PowerState) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[47].Descriptor() + return file_forge_carbide_proto_enumTypes[49].Descriptor() } func (PowerState) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[47] + return &file_forge_carbide_proto_enumTypes[49] } func (x PowerState) Number() protoreflect.EnumNumber { @@ -2591,7 +2702,169 @@ func (x PowerState) Number() protoreflect.EnumNumber { // Deprecated: Use PowerState.Descriptor instead. func (PowerState) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{47} + return file_forge_carbide_proto_rawDescGZIP(), []int{49} +} + +type RackHardwareType int32 + +const ( + RackHardwareType_RACK_HARDWARE_TYPE_UNSPECIFIED RackHardwareType = 0 + RackHardwareType_RACK_HARDWARE_TYPE_DSX_GB200NVL_36X1 RackHardwareType = 1 + RackHardwareType_RACK_HARDWARE_TYPE_DSX_GB200NVL_36X2 RackHardwareType = 2 + RackHardwareType_RACK_HARDWARE_TYPE_DSX_GB200NVL_72X1 RackHardwareType = 3 +) + +// Enum value maps for RackHardwareType. +var ( + RackHardwareType_name = map[int32]string{ + 0: "RACK_HARDWARE_TYPE_UNSPECIFIED", + 1: "RACK_HARDWARE_TYPE_DSX_GB200NVL_36X1", + 2: "RACK_HARDWARE_TYPE_DSX_GB200NVL_36X2", + 3: "RACK_HARDWARE_TYPE_DSX_GB200NVL_72X1", + } + RackHardwareType_value = map[string]int32{ + "RACK_HARDWARE_TYPE_UNSPECIFIED": 0, + "RACK_HARDWARE_TYPE_DSX_GB200NVL_36X1": 1, + "RACK_HARDWARE_TYPE_DSX_GB200NVL_36X2": 2, + "RACK_HARDWARE_TYPE_DSX_GB200NVL_72X1": 3, + } +) + +func (x RackHardwareType) Enum() *RackHardwareType { + p := new(RackHardwareType) + *p = x + return p +} + +func (x RackHardwareType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RackHardwareType) Descriptor() protoreflect.EnumDescriptor { + return file_forge_carbide_proto_enumTypes[50].Descriptor() +} + +func (RackHardwareType) Type() protoreflect.EnumType { + return &file_forge_carbide_proto_enumTypes[50] +} + +func (x RackHardwareType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RackHardwareType.Descriptor instead. +func (RackHardwareType) EnumDescriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{50} +} + +type RackHardwareTopology int32 + +const ( + RackHardwareTopology_RACK_HARDWARE_TOPOLOGY_UNSPECIFIED RackHardwareTopology = 0 + RackHardwareTopology_RACK_HARDWARE_TOPOLOGY_GB200_NVL36R1_C2G4 RackHardwareTopology = 1 + RackHardwareTopology_RACK_HARDWARE_TOPOLOGY_GB300_NVL36R1_C2G4 RackHardwareTopology = 2 + RackHardwareTopology_RACK_HARDWARE_TOPOLOGY_GB200_NVL72R1_C2G4 RackHardwareTopology = 3 + RackHardwareTopology_RACK_HARDWARE_TOPOLOGY_GB300_NVL72R1_C2G4 RackHardwareTopology = 4 + RackHardwareTopology_RACK_HARDWARE_TOPOLOGY_VR_NVL8R1_C2G4_RTF RackHardwareTopology = 5 + RackHardwareTopology_RACK_HARDWARE_TOPOLOGY_VR_NVL72R1_C2G4 RackHardwareTopology = 6 +) + +// Enum value maps for RackHardwareTopology. +var ( + RackHardwareTopology_name = map[int32]string{ + 0: "RACK_HARDWARE_TOPOLOGY_UNSPECIFIED", + 1: "RACK_HARDWARE_TOPOLOGY_GB200_NVL36R1_C2G4", + 2: "RACK_HARDWARE_TOPOLOGY_GB300_NVL36R1_C2G4", + 3: "RACK_HARDWARE_TOPOLOGY_GB200_NVL72R1_C2G4", + 4: "RACK_HARDWARE_TOPOLOGY_GB300_NVL72R1_C2G4", + 5: "RACK_HARDWARE_TOPOLOGY_VR_NVL8R1_C2G4_RTF", + 6: "RACK_HARDWARE_TOPOLOGY_VR_NVL72R1_C2G4", + } + RackHardwareTopology_value = map[string]int32{ + "RACK_HARDWARE_TOPOLOGY_UNSPECIFIED": 0, + "RACK_HARDWARE_TOPOLOGY_GB200_NVL36R1_C2G4": 1, + "RACK_HARDWARE_TOPOLOGY_GB300_NVL36R1_C2G4": 2, + "RACK_HARDWARE_TOPOLOGY_GB200_NVL72R1_C2G4": 3, + "RACK_HARDWARE_TOPOLOGY_GB300_NVL72R1_C2G4": 4, + "RACK_HARDWARE_TOPOLOGY_VR_NVL8R1_C2G4_RTF": 5, + "RACK_HARDWARE_TOPOLOGY_VR_NVL72R1_C2G4": 6, + } +) + +func (x RackHardwareTopology) Enum() *RackHardwareTopology { + p := new(RackHardwareTopology) + *p = x + return p +} + +func (x RackHardwareTopology) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RackHardwareTopology) Descriptor() protoreflect.EnumDescriptor { + return file_forge_carbide_proto_enumTypes[51].Descriptor() +} + +func (RackHardwareTopology) Type() protoreflect.EnumType { + return &file_forge_carbide_proto_enumTypes[51] +} + +func (x RackHardwareTopology) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RackHardwareTopology.Descriptor instead. +func (RackHardwareTopology) EnumDescriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{51} +} + +type RackHardwareClass int32 + +const ( + RackHardwareClass_RACK_HARDWARE_CLASS_UNSPECIFIED RackHardwareClass = 0 + RackHardwareClass_RACK_HARDWARE_CLASS_DEV RackHardwareClass = 1 + RackHardwareClass_RACK_HARDWARE_CLASS_PROD RackHardwareClass = 2 +) + +// Enum value maps for RackHardwareClass. +var ( + RackHardwareClass_name = map[int32]string{ + 0: "RACK_HARDWARE_CLASS_UNSPECIFIED", + 1: "RACK_HARDWARE_CLASS_DEV", + 2: "RACK_HARDWARE_CLASS_PROD", + } + RackHardwareClass_value = map[string]int32{ + "RACK_HARDWARE_CLASS_UNSPECIFIED": 0, + "RACK_HARDWARE_CLASS_DEV": 1, + "RACK_HARDWARE_CLASS_PROD": 2, + } +) + +func (x RackHardwareClass) Enum() *RackHardwareClass { + p := new(RackHardwareClass) + *p = x + return p +} + +func (x RackHardwareClass) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RackHardwareClass) Descriptor() protoreflect.EnumDescriptor { + return file_forge_carbide_proto_enumTypes[52].Descriptor() +} + +func (RackHardwareClass) Type() protoreflect.EnumType { + return &file_forge_carbide_proto_enumTypes[52] +} + +func (x RackHardwareClass) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RackHardwareClass.Descriptor instead. +func (RackHardwareClass) EnumDescriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{52} } // put some sample rack manager commands in for now @@ -2643,11 +2916,11 @@ func (x RackManagerForgeCmd) String() string { } func (RackManagerForgeCmd) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[48].Descriptor() + return file_forge_carbide_proto_enumTypes[53].Descriptor() } func (RackManagerForgeCmd) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[48] + return &file_forge_carbide_proto_enumTypes[53] } func (x RackManagerForgeCmd) Number() protoreflect.EnumNumber { @@ -2656,7 +2929,7 @@ func (x RackManagerForgeCmd) Number() protoreflect.EnumNumber { // Deprecated: Use RackManagerForgeCmd.Descriptor instead. func (RackManagerForgeCmd) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{48} + return file_forge_carbide_proto_rawDescGZIP(), []int{53} } type TrimTableTarget int32 @@ -2686,11 +2959,11 @@ func (x TrimTableTarget) String() string { } func (TrimTableTarget) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[49].Descriptor() + return file_forge_carbide_proto_enumTypes[54].Descriptor() } func (TrimTableTarget) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[49] + return &file_forge_carbide_proto_enumTypes[54] } func (x TrimTableTarget) Number() protoreflect.EnumNumber { @@ -2699,7 +2972,7 @@ func (x TrimTableTarget) Number() protoreflect.EnumNumber { // Deprecated: Use TrimTableTarget.Descriptor instead. func (TrimTableTarget) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{49} + return file_forge_carbide_proto_rawDescGZIP(), []int{54} } // DPU Extension Service Types and Messages @@ -2730,11 +3003,11 @@ func (x DpuExtensionServiceType) String() string { } func (DpuExtensionServiceType) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[50].Descriptor() + return file_forge_carbide_proto_enumTypes[55].Descriptor() } func (DpuExtensionServiceType) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[50] + return &file_forge_carbide_proto_enumTypes[55] } func (x DpuExtensionServiceType) Number() protoreflect.EnumNumber { @@ -2743,7 +3016,7 @@ func (x DpuExtensionServiceType) Number() protoreflect.EnumNumber { // Deprecated: Use DpuExtensionServiceType.Descriptor instead. func (DpuExtensionServiceType) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{50} + return file_forge_carbide_proto_rawDescGZIP(), []int{55} } type DpuExtensionServiceDeploymentStatus int32 @@ -2791,11 +3064,11 @@ func (x DpuExtensionServiceDeploymentStatus) String() string { } func (DpuExtensionServiceDeploymentStatus) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[51].Descriptor() + return file_forge_carbide_proto_enumTypes[56].Descriptor() } func (DpuExtensionServiceDeploymentStatus) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[51] + return &file_forge_carbide_proto_enumTypes[56] } func (x DpuExtensionServiceDeploymentStatus) Number() protoreflect.EnumNumber { @@ -2804,7 +3077,7 @@ func (x DpuExtensionServiceDeploymentStatus) Number() protoreflect.EnumNumber { // Deprecated: Use DpuExtensionServiceDeploymentStatus.Descriptor instead. func (DpuExtensionServiceDeploymentStatus) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{51} + return file_forge_carbide_proto_rawDescGZIP(), []int{56} } // ScoutStreamErrorStatus is an internal code to set to help @@ -2836,11 +3109,11 @@ func (x ScoutStreamErrorStatus) String() string { } func (ScoutStreamErrorStatus) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[52].Descriptor() + return file_forge_carbide_proto_enumTypes[57].Descriptor() } func (ScoutStreamErrorStatus) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[52] + return &file_forge_carbide_proto_enumTypes[57] } func (x ScoutStreamErrorStatus) Number() protoreflect.EnumNumber { @@ -2849,7 +3122,62 @@ func (x ScoutStreamErrorStatus) Number() protoreflect.EnumNumber { // Deprecated: Use ScoutStreamErrorStatus.Descriptor instead. func (ScoutStreamErrorStatus) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{52} + return file_forge_carbide_proto_rawDescGZIP(), []int{57} +} + +type RoutingProfileType int32 + +const ( + RoutingProfileType_ROUTING_PROFILE_TYPE_EXTERNAL RoutingProfileType = 0 // Default to least privileged + RoutingProfileType_ROUTING_PROFILE_TYPE_ADMIN RoutingProfileType = 1 + RoutingProfileType_ROUTING_PROFILE_TYPE_INTERNAL RoutingProfileType = 2 + RoutingProfileType_ROUTING_PROFILE_TYPE_PRIVILEGED_INTERNAL RoutingProfileType = 3 + RoutingProfileType_ROUTING_PROFILE_TYPE_MAINTENANCE RoutingProfileType = 4 +) + +// Enum value maps for RoutingProfileType. +var ( + RoutingProfileType_name = map[int32]string{ + 0: "ROUTING_PROFILE_TYPE_EXTERNAL", + 1: "ROUTING_PROFILE_TYPE_ADMIN", + 2: "ROUTING_PROFILE_TYPE_INTERNAL", + 3: "ROUTING_PROFILE_TYPE_PRIVILEGED_INTERNAL", + 4: "ROUTING_PROFILE_TYPE_MAINTENANCE", + } + RoutingProfileType_value = map[string]int32{ + "ROUTING_PROFILE_TYPE_EXTERNAL": 0, + "ROUTING_PROFILE_TYPE_ADMIN": 1, + "ROUTING_PROFILE_TYPE_INTERNAL": 2, + "ROUTING_PROFILE_TYPE_PRIVILEGED_INTERNAL": 3, + "ROUTING_PROFILE_TYPE_MAINTENANCE": 4, + } +) + +func (x RoutingProfileType) Enum() *RoutingProfileType { + p := new(RoutingProfileType) + *p = x + return p +} + +func (x RoutingProfileType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RoutingProfileType) Descriptor() protoreflect.EnumDescriptor { + return file_forge_carbide_proto_enumTypes[58].Descriptor() +} + +func (RoutingProfileType) Type() protoreflect.EnumType { + return &file_forge_carbide_proto_enumTypes[58] +} + +func (x RoutingProfileType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RoutingProfileType.Descriptor instead. +func (RoutingProfileType) EnumDescriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{58} } type ComponentManagerStatusCode int32 @@ -2894,11 +3222,11 @@ func (x ComponentManagerStatusCode) String() string { } func (ComponentManagerStatusCode) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[53].Descriptor() + return file_forge_carbide_proto_enumTypes[59].Descriptor() } func (ComponentManagerStatusCode) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[53] + return &file_forge_carbide_proto_enumTypes[59] } func (x ComponentManagerStatusCode) Number() protoreflect.EnumNumber { @@ -2907,7 +3235,7 @@ func (x ComponentManagerStatusCode) Number() protoreflect.EnumNumber { // Deprecated: Use ComponentManagerStatusCode.Descriptor instead. func (ComponentManagerStatusCode) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{53} + return file_forge_carbide_proto_rawDescGZIP(), []int{59} } type FirmwareUpdateState int32 @@ -2955,11 +3283,11 @@ func (x FirmwareUpdateState) String() string { } func (FirmwareUpdateState) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[54].Descriptor() + return file_forge_carbide_proto_enumTypes[60].Descriptor() } func (FirmwareUpdateState) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[54] + return &file_forge_carbide_proto_enumTypes[60] } func (x FirmwareUpdateState) Number() protoreflect.EnumNumber { @@ -2968,7 +3296,7 @@ func (x FirmwareUpdateState) Number() protoreflect.EnumNumber { // Deprecated: Use FirmwareUpdateState.Descriptor instead. func (FirmwareUpdateState) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{54} + return file_forge_carbide_proto_rawDescGZIP(), []int{60} } type NvSwitchComponent int32 @@ -3010,11 +3338,11 @@ func (x NvSwitchComponent) String() string { } func (NvSwitchComponent) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[55].Descriptor() + return file_forge_carbide_proto_enumTypes[61].Descriptor() } func (NvSwitchComponent) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[55] + return &file_forge_carbide_proto_enumTypes[61] } func (x NvSwitchComponent) Number() protoreflect.EnumNumber { @@ -3023,7 +3351,7 @@ func (x NvSwitchComponent) Number() protoreflect.EnumNumber { // Deprecated: Use NvSwitchComponent.Descriptor instead. func (NvSwitchComponent) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{55} + return file_forge_carbide_proto_rawDescGZIP(), []int{61} } type PowerShelfComponent int32 @@ -3059,11 +3387,11 @@ func (x PowerShelfComponent) String() string { } func (PowerShelfComponent) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[56].Descriptor() + return file_forge_carbide_proto_enumTypes[62].Descriptor() } func (PowerShelfComponent) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[56] + return &file_forge_carbide_proto_enumTypes[62] } func (x PowerShelfComponent) Number() protoreflect.EnumNumber { @@ -3072,7 +3400,7 @@ func (x PowerShelfComponent) Number() protoreflect.EnumNumber { // Deprecated: Use PowerShelfComponent.Descriptor instead. func (PowerShelfComponent) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{56} + return file_forge_carbide_proto_rawDescGZIP(), []int{62} } type ComputeTrayComponent int32 @@ -3108,11 +3436,11 @@ func (x ComputeTrayComponent) String() string { } func (ComputeTrayComponent) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[57].Descriptor() + return file_forge_carbide_proto_enumTypes[63].Descriptor() } func (ComputeTrayComponent) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[57] + return &file_forge_carbide_proto_enumTypes[63] } func (x ComputeTrayComponent) Number() protoreflect.EnumNumber { @@ -3121,7 +3449,58 @@ func (x ComputeTrayComponent) Number() protoreflect.EnumNumber { // Deprecated: Use ComputeTrayComponent.Descriptor instead. func (ComputeTrayComponent) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{57} + return file_forge_carbide_proto_rawDescGZIP(), []int{63} +} + +// Operating system definition (CRUD resource, table operating_systems). +// Type of Operating System variant +type OperatingSystemType int32 + +const ( + OperatingSystemType_OS_TYPE_UNSPECIFIED OperatingSystemType = 0 + OperatingSystemType_OS_TYPE_IPXE OperatingSystemType = 1 // Raw inline iPXE script + OperatingSystemType_OS_TYPE_TEMPLATED_IPXE OperatingSystemType = 2 // iPXE OS using an iPXE template +) + +// Enum value maps for OperatingSystemType. +var ( + OperatingSystemType_name = map[int32]string{ + 0: "OS_TYPE_UNSPECIFIED", + 1: "OS_TYPE_IPXE", + 2: "OS_TYPE_TEMPLATED_IPXE", + } + OperatingSystemType_value = map[string]int32{ + "OS_TYPE_UNSPECIFIED": 0, + "OS_TYPE_IPXE": 1, + "OS_TYPE_TEMPLATED_IPXE": 2, + } +) + +func (x OperatingSystemType) Enum() *OperatingSystemType { + p := new(OperatingSystemType) + *p = x + return p +} + +func (x OperatingSystemType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (OperatingSystemType) Descriptor() protoreflect.EnumDescriptor { + return file_forge_carbide_proto_enumTypes[64].Descriptor() +} + +func (OperatingSystemType) Type() protoreflect.EnumType { + return &file_forge_carbide_proto_enumTypes[64] +} + +func (x OperatingSystemType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use OperatingSystemType.Descriptor instead. +func (OperatingSystemType) EnumDescriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{64} } type InstancePowerRequest_Operation int32 @@ -3151,11 +3530,11 @@ func (x InstancePowerRequest_Operation) String() string { } func (InstancePowerRequest_Operation) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[58].Descriptor() + return file_forge_carbide_proto_enumTypes[65].Descriptor() } func (InstancePowerRequest_Operation) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[58] + return &file_forge_carbide_proto_enumTypes[65] } func (x InstancePowerRequest_Operation) Number() protoreflect.EnumNumber { @@ -3194,11 +3573,11 @@ func (x InstanceUpdateStatus_Module) String() string { } func (InstanceUpdateStatus_Module) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[59].Descriptor() + return file_forge_carbide_proto_enumTypes[66].Descriptor() } func (InstanceUpdateStatus_Module) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[59] + return &file_forge_carbide_proto_enumTypes[66] } func (x InstanceUpdateStatus_Module) Number() protoreflect.EnumNumber { @@ -3207,7 +3586,7 @@ func (x InstanceUpdateStatus_Module) Number() protoreflect.EnumNumber { // Deprecated: Use InstanceUpdateStatus_Module.Descriptor instead. func (InstanceUpdateStatus_Module) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{176, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{179, 0} } type MachineCredentialsUpdateRequest_CredentialPurpose int32 @@ -3240,11 +3619,11 @@ func (x MachineCredentialsUpdateRequest_CredentialPurpose) String() string { } func (MachineCredentialsUpdateRequest_CredentialPurpose) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[60].Descriptor() + return file_forge_carbide_proto_enumTypes[67].Descriptor() } func (MachineCredentialsUpdateRequest_CredentialPurpose) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[60] + return &file_forge_carbide_proto_enumTypes[67] } func (x MachineCredentialsUpdateRequest_CredentialPurpose) Number() protoreflect.EnumNumber { @@ -3253,7 +3632,7 @@ func (x MachineCredentialsUpdateRequest_CredentialPurpose) Number() protoreflect // Deprecated: Use MachineCredentialsUpdateRequest_CredentialPurpose.Descriptor instead. func (MachineCredentialsUpdateRequest_CredentialPurpose) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{295, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{298, 0} } type ForgeAgentControlResponse_Action int32 @@ -3307,11 +3686,11 @@ func (x ForgeAgentControlResponse_Action) String() string { } func (ForgeAgentControlResponse_Action) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[61].Descriptor() + return file_forge_carbide_proto_enumTypes[68].Descriptor() } func (ForgeAgentControlResponse_Action) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[61] + return &file_forge_carbide_proto_enumTypes[68] } func (x ForgeAgentControlResponse_Action) Number() protoreflect.EnumNumber { @@ -3320,7 +3699,7 @@ func (x ForgeAgentControlResponse_Action) Number() protoreflect.EnumNumber { // Deprecated: Use ForgeAgentControlResponse_Action.Descriptor instead. func (ForgeAgentControlResponse_Action) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{298, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{301, 0} } type MachineCleanupInfo_CleanupResult int32 @@ -3353,11 +3732,11 @@ func (x MachineCleanupInfo_CleanupResult) String() string { } func (MachineCleanupInfo_CleanupResult) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[62].Descriptor() + return file_forge_carbide_proto_enumTypes[69].Descriptor() } func (MachineCleanupInfo_CleanupResult) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[62] + return &file_forge_carbide_proto_enumTypes[69] } func (x MachineCleanupInfo_CleanupResult) Number() protoreflect.EnumNumber { @@ -3366,7 +3745,7 @@ func (x MachineCleanupInfo_CleanupResult) Number() protoreflect.EnumNumber { // Deprecated: Use MachineCleanupInfo_CleanupResult.Descriptor instead. func (MachineCleanupInfo_CleanupResult) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{301, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{304, 0} } type DpuReprovisioningRequest_Mode int32 @@ -3402,11 +3781,11 @@ func (x DpuReprovisioningRequest_Mode) String() string { } func (DpuReprovisioningRequest_Mode) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[63].Descriptor() + return file_forge_carbide_proto_enumTypes[70].Descriptor() } func (DpuReprovisioningRequest_Mode) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[63] + return &file_forge_carbide_proto_enumTypes[70] } func (x DpuReprovisioningRequest_Mode) Number() protoreflect.EnumNumber { @@ -3415,7 +3794,7 @@ func (x DpuReprovisioningRequest_Mode) Number() protoreflect.EnumNumber { // Deprecated: Use DpuReprovisioningRequest_Mode.Descriptor instead. func (DpuReprovisioningRequest_Mode) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{371, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{374, 0} } type HostReprovisioningRequest_Mode int32 @@ -3448,11 +3827,11 @@ func (x HostReprovisioningRequest_Mode) String() string { } func (HostReprovisioningRequest_Mode) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[64].Descriptor() + return file_forge_carbide_proto_enumTypes[71].Descriptor() } func (HostReprovisioningRequest_Mode) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[64] + return &file_forge_carbide_proto_enumTypes[71] } func (x HostReprovisioningRequest_Mode) Number() protoreflect.EnumNumber { @@ -3461,7 +3840,7 @@ func (x HostReprovisioningRequest_Mode) Number() protoreflect.EnumNumber { // Deprecated: Use HostReprovisioningRequest_Mode.Descriptor instead. func (HostReprovisioningRequest_Mode) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{374, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{377, 0} } type MachineSetAutoUpdateRequest_SetAutoupdateAction int32 @@ -3497,11 +3876,11 @@ func (x MachineSetAutoUpdateRequest_SetAutoupdateAction) String() string { } func (MachineSetAutoUpdateRequest_SetAutoupdateAction) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[65].Descriptor() + return file_forge_carbide_proto_enumTypes[72].Descriptor() } func (MachineSetAutoUpdateRequest_SetAutoupdateAction) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[65] + return &file_forge_carbide_proto_enumTypes[72] } func (x MachineSetAutoUpdateRequest_SetAutoupdateAction) Number() protoreflect.EnumNumber { @@ -3510,7 +3889,7 @@ func (x MachineSetAutoUpdateRequest_SetAutoupdateAction) Number() protoreflect.E // Deprecated: Use MachineSetAutoUpdateRequest_SetAutoupdateAction.Descriptor instead. func (MachineSetAutoUpdateRequest_SetAutoupdateAction) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{425, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{431, 0} } type MachineValidationOnDemandRequest_Action int32 @@ -3543,11 +3922,11 @@ func (x MachineValidationOnDemandRequest_Action) String() string { } func (MachineValidationOnDemandRequest_Action) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[66].Descriptor() + return file_forge_carbide_proto_enumTypes[73].Descriptor() } func (MachineValidationOnDemandRequest_Action) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[66] + return &file_forge_carbide_proto_enumTypes[73] } func (x MachineValidationOnDemandRequest_Action) Number() protoreflect.EnumNumber { @@ -3556,7 +3935,7 @@ func (x MachineValidationOnDemandRequest_Action) Number() protoreflect.EnumNumbe // Deprecated: Use MachineValidationOnDemandRequest_Action.Descriptor instead. func (MachineValidationOnDemandRequest_Action) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{434, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{440, 0} } type AdminPowerControlRequest_SystemPowerControl int32 @@ -3607,11 +3986,11 @@ func (x AdminPowerControlRequest_SystemPowerControl) String() string { } func (AdminPowerControlRequest_SystemPowerControl) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[67].Descriptor() + return file_forge_carbide_proto_enumTypes[74].Descriptor() } func (AdminPowerControlRequest_SystemPowerControl) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[67] + return &file_forge_carbide_proto_enumTypes[74] } func (x AdminPowerControlRequest_SystemPowerControl) Number() protoreflect.EnumNumber { @@ -3620,7 +3999,7 @@ func (x AdminPowerControlRequest_SystemPowerControl) Number() protoreflect.EnumN // Deprecated: Use AdminPowerControlRequest_SystemPowerControl.Descriptor instead. func (AdminPowerControlRequest_SystemPowerControl) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{436, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{442, 0} } type GetRedfishJobStateResponse_RedfishJobState int32 @@ -3662,11 +4041,11 @@ func (x GetRedfishJobStateResponse_RedfishJobState) String() string { } func (GetRedfishJobStateResponse_RedfishJobState) Descriptor() protoreflect.EnumDescriptor { - return file_forge_carbide_proto_enumTypes[68].Descriptor() + return file_forge_carbide_proto_enumTypes[75].Descriptor() } func (GetRedfishJobStateResponse_RedfishJobState) Type() protoreflect.EnumType { - return &file_forge_carbide_proto_enumTypes[68] + return &file_forge_carbide_proto_enumTypes[75] } func (x GetRedfishJobStateResponse_RedfishJobState) Number() protoreflect.EnumNumber { @@ -3675,7 +4054,7 @@ func (x GetRedfishJobStateResponse_RedfishJobState) Number() protoreflect.EnumNu // Deprecated: Use GetRedfishJobStateResponse_RedfishJobState.Descriptor instead. func (GetRedfishJobStateResponse_RedfishJobState) EnumDescriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{439, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{445, 0} } type AttestationIdsRequest struct { @@ -6896,11 +7275,9 @@ type Vpc struct { Status *VpcStatus `protobuf:"bytes,14,opt,name=status,proto3,oneof" json:"status,omitempty"` // This will only be populated if the VNI was explicitly // requested during creation of the VPC. - Vni *uint32 `protobuf:"varint,15,opt,name=vni,proto3,oneof" json:"vni,omitempty"` - // The resolved routing profile type applied to this VPC. - RoutingProfileType *string `protobuf:"bytes,16,opt,name=routing_profile_type,json=routingProfileType,proto3,oneof" json:"routing_profile_type,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + Vni *uint32 `protobuf:"varint,15,opt,name=vni,proto3,oneof" json:"vni,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Vpc) Reset() { @@ -7038,13 +7415,6 @@ func (x *Vpc) GetVni() uint32 { return 0 } -func (x *Vpc) GetRoutingProfileType() string { - if x != nil && x.RoutingProfileType != nil { - return *x.RoutingProfileType - } - return "" -} - type VpcCreationRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // TODO: Remove the name field as soon as cloud codes gets updated to using metadata.name. @@ -7069,11 +7439,11 @@ type VpcCreationRequest struct { // marked for auto-assignment; otherwise, the request will be rejected. Vni *uint32 `protobuf:"varint,15,opt,name=vni,proto3,oneof" json:"vni,omitempty"` // Desired routing profile type for this VPC. - // The access tier for the requested type must be as broad or broader than + // The requested type must be equal to or less than // type of the tenant. // For example, an internal tenant can request internal or external VPCs, // but an external tenant can only request external VPCs. - RoutingProfileType *string `protobuf:"bytes,17,opt,name=routing_profile_type,json=routingProfileType,proto3,oneof" json:"routing_profile_type,omitempty"` + RoutingProfileType *RoutingProfileType `protobuf:"varint,16,opt,name=routing_profile_type,json=routingProfileType,proto3,enum=forge.RoutingProfileType,oneof" json:"routing_profile_type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7171,11 +7541,11 @@ func (x *VpcCreationRequest) GetVni() uint32 { return 0 } -func (x *VpcCreationRequest) GetRoutingProfileType() string { +func (x *VpcCreationRequest) GetRoutingProfileType() RoutingProfileType { if x != nil && x.RoutingProfileType != nil { return *x.RoutingProfileType } - return "" + return RoutingProfileType_ROUTING_PROFILE_TYPE_EXTERNAL } type VpcUpdateRequest struct { @@ -9442,7 +9812,9 @@ type PowerShelf struct { Version string `protobuf:"bytes,7,opt,name=version,proto3" json:"version,omitempty"` BmcInfo *BmcInfo `protobuf:"bytes,8,opt,name=bmc_info,json=bmcInfo,proto3" json:"bmc_info,omitempty"` // Version string for the current controller state (e.g. "V3-T1774905143273055"). - StateVersion string `protobuf:"bytes,9,opt,name=state_version,json=stateVersion,proto3" json:"state_version,omitempty"` + StateVersion string `protobuf:"bytes,9,opt,name=state_version,json=stateVersion,proto3" json:"state_version,omitempty"` + // The rack that this powershelf is associated with + RackId *RackId `protobuf:"bytes,10,opt,name=rack_id,json=rackId,proto3,oneof" json:"rack_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9540,6 +9912,13 @@ func (x *PowerShelf) GetStateVersion() string { return "" } +func (x *PowerShelf) GetRackId() *RackId { + if x != nil { + return x.RackId + } + return nil +} + type PowerShelfList struct { state protoimpl.MessageState `protogen:"open.v1"` PowerShelves []*PowerShelf `protobuf:"bytes,1,rep,name=power_shelves,json=powerShelves,proto3" json:"power_shelves,omitempty"` @@ -10690,9 +11069,11 @@ type Switch struct { ControllerState string `protobuf:"bytes,5,opt,name=controller_state,json=controllerState,proto3" json:"controller_state,omitempty"` BmcInfo *BmcInfo `protobuf:"bytes,6,opt,name=bmc_info,json=bmcInfo,proto3" json:"bmc_info,omitempty"` // Version string for the current controller state (e.g. "V3-T1774905143273055"). - StateVersion string `protobuf:"bytes,7,opt,name=state_version,json=stateVersion,proto3" json:"state_version,omitempty"` - Metadata *Metadata `protobuf:"bytes,8,opt,name=metadata,proto3" json:"metadata,omitempty"` - Version string `protobuf:"bytes,9,opt,name=version,proto3" json:"version,omitempty"` + StateVersion string `protobuf:"bytes,7,opt,name=state_version,json=stateVersion,proto3" json:"state_version,omitempty"` + Metadata *Metadata `protobuf:"bytes,8,opt,name=metadata,proto3" json:"metadata,omitempty"` + Version string `protobuf:"bytes,9,opt,name=version,proto3" json:"version,omitempty"` + // The rack that this switch is associated with + RackId *RackId `protobuf:"bytes,10,opt,name=rack_id,json=rackId,proto3,oneof" json:"rack_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -10790,6 +11171,13 @@ func (x *Switch) GetVersion() string { return "" } +func (x *Switch) GetRackId() *RackId { + if x != nil { + return x.RackId + } + return nil +} + type SwitchList struct { state protoimpl.MessageState `protogen:"open.v1"` Switches []*Switch `protobuf:"bytes,1,rep,name=switches,proto3" json:"switches,omitempty"` @@ -13343,6 +13731,256 @@ func (x *BatchInstanceAllocationResponse) GetInstances() []*Instance { return nil } +// Parameter for iPXE template substitution or kernel command line +// Can be used to replace variables in iPXE templates or add parameters to kernel command line +// Some are "well known" like 'console', others can be custom defined by users +type IpxeTemplateParameter struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of the parameter (used as variable in template) + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` // Value of the parameter + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *IpxeTemplateParameter) Reset() { + *x = IpxeTemplateParameter{} + mi := &file_forge_carbide_proto_msgTypes[157] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IpxeTemplateParameter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IpxeTemplateParameter) ProtoMessage() {} + +func (x *IpxeTemplateParameter) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[157] + 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 IpxeTemplateParameter.ProtoReflect.Descriptor instead. +func (*IpxeTemplateParameter) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{157} +} + +func (x *IpxeTemplateParameter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *IpxeTemplateParameter) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +// Remote artifact to be cached locally before booting +// Examples: kernel, initrd, rootfs, qcow-imager.efi, OS image, ... +type IpxeTemplateArtifact struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of the artifact (can be used as variable in template) + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` // Original URL for the artifact + Sha *string `protobuf:"bytes,3,opt,name=sha,proto3,oneof" json:"sha,omitempty"` // Optional SHA256 checksum for the artifact + AuthType *string `protobuf:"bytes,4,opt,name=auth_type,json=authType,proto3,oneof" json:"auth_type,omitempty"` // Auth type: "None", "Basic", "Bearer" + AuthToken *string `protobuf:"bytes,5,opt,name=auth_token,json=authToken,proto3,oneof" json:"auth_token,omitempty"` // Optional auth token for the artifact + CacheStrategy IpxeTemplateArtifactCacheStrategy `protobuf:"varint,6,opt,name=cache_strategy,json=cacheStrategy,proto3,enum=forge.IpxeTemplateArtifactCacheStrategy" json:"cache_strategy,omitempty"` // How to handle caching for this artifact + CachedUrl *string `protobuf:"bytes,7,opt,name=cached_url,json=cachedUrl,proto3,oneof" json:"cached_url,omitempty"` // Local cached URL, set by carbide-core on successful download. If present overrides 'url' at boot time. + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *IpxeTemplateArtifact) Reset() { + *x = IpxeTemplateArtifact{} + mi := &file_forge_carbide_proto_msgTypes[158] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IpxeTemplateArtifact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IpxeTemplateArtifact) ProtoMessage() {} + +func (x *IpxeTemplateArtifact) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[158] + 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 IpxeTemplateArtifact.ProtoReflect.Descriptor instead. +func (*IpxeTemplateArtifact) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{158} +} + +func (x *IpxeTemplateArtifact) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *IpxeTemplateArtifact) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *IpxeTemplateArtifact) GetSha() string { + if x != nil && x.Sha != nil { + return *x.Sha + } + return "" +} + +func (x *IpxeTemplateArtifact) GetAuthType() string { + if x != nil && x.AuthType != nil { + return *x.AuthType + } + return "" +} + +func (x *IpxeTemplateArtifact) GetAuthToken() string { + if x != nil && x.AuthToken != nil { + return *x.AuthToken + } + return "" +} + +func (x *IpxeTemplateArtifact) GetCacheStrategy() IpxeTemplateArtifactCacheStrategy { + if x != nil { + return x.CacheStrategy + } + return IpxeTemplateArtifactCacheStrategy_CACHE_AS_NEEDED +} + +func (x *IpxeTemplateArtifact) GetCachedUrl() string { + if x != nil && x.CachedUrl != nil { + return *x.CachedUrl + } + return "" +} + +// Template management messages +type IpxeTemplate struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Template string `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` + RequiredParams []string `protobuf:"bytes,3,rep,name=required_params,json=requiredParams,proto3" json:"required_params,omitempty"` // Error if these params are not provided or empty + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + ReservedParams []string `protobuf:"bytes,5,rep,name=reserved_params,json=reservedParams,proto3" json:"reserved_params,omitempty"` // Reserved for carbide-core to provide at render time + RequiredArtifacts []string `protobuf:"bytes,6,rep,name=required_artifacts,json=requiredArtifacts,proto3" json:"required_artifacts,omitempty"` // Error if these artifacts are not provided or empty + Scope IpxeTemplateScope `protobuf:"varint,7,opt,name=scope,proto3,enum=forge.IpxeTemplateScope" json:"scope,omitempty"` // INTERNAL = carbide-core only, PUBLIC = tenant-usable + Id *IpxeTemplateId `protobuf:"bytes,8,opt,name=id,proto3" json:"id,omitempty"` // Stable UUID, hardcoded in templates.yaml; consistent across all sites + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *IpxeTemplate) Reset() { + *x = IpxeTemplate{} + mi := &file_forge_carbide_proto_msgTypes[159] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IpxeTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IpxeTemplate) ProtoMessage() {} + +func (x *IpxeTemplate) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[159] + 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 IpxeTemplate.ProtoReflect.Descriptor instead. +func (*IpxeTemplate) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{159} +} + +func (x *IpxeTemplate) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *IpxeTemplate) GetTemplate() string { + if x != nil { + return x.Template + } + return "" +} + +func (x *IpxeTemplate) GetRequiredParams() []string { + if x != nil { + return x.RequiredParams + } + return nil +} + +func (x *IpxeTemplate) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *IpxeTemplate) GetReservedParams() []string { + if x != nil { + return x.ReservedParams + } + return nil +} + +func (x *IpxeTemplate) GetRequiredArtifacts() []string { + if x != nil { + return x.RequiredArtifacts + } + return nil +} + +func (x *IpxeTemplate) GetScope() IpxeTemplateScope { + if x != nil { + return x.Scope + } + return IpxeTemplateScope_INTERNAL +} + +func (x *IpxeTemplate) GetId() *IpxeTemplateId { + if x != nil { + return x.Id + } + return nil +} + // Tenant related configuration that is set once the instance is allocated // by a tenant type TenantConfig struct { @@ -13359,7 +13997,7 @@ type TenantConfig struct { func (x *TenantConfig) Reset() { *x = TenantConfig{} - mi := &file_forge_carbide_proto_msgTypes[157] + mi := &file_forge_carbide_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13371,7 +14009,7 @@ func (x *TenantConfig) String() string { func (*TenantConfig) ProtoMessage() {} func (x *TenantConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[157] + mi := &file_forge_carbide_proto_msgTypes[160] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13384,7 +14022,7 @@ func (x *TenantConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantConfig.ProtoReflect.Descriptor instead. func (*TenantConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{157} + return file_forge_carbide_proto_rawDescGZIP(), []int{160} } func (x *TenantConfig) GetTenantOrganizationId() string { @@ -13408,15 +14046,16 @@ func (x *TenantConfig) GetTenantKeysetIds() []string { return nil } -type OperatingSystem struct { +type InstanceOperatingSystemConfig struct { state protoimpl.MessageState `protogen:"open.v1"` // Contains the operating system definition based on the variant of operating system // // Types that are valid to be assigned to Variant: // - // *OperatingSystem_Ipxe - // *OperatingSystem_OsImageId - Variant isOperatingSystem_Variant `protobuf_oneof:"variant"` + // *InstanceOperatingSystemConfig_Ipxe + // *InstanceOperatingSystemConfig_OsImageId + // *InstanceOperatingSystemConfig_OperatingSystemId + Variant isInstanceOperatingSystemConfig_Variant `protobuf_oneof:"variant"` // If this flag is set to `true` the instance will not transition to a Ready state until // InstancePhoneHomeLastContact is updated PhoneHomeEnabled bool `protobuf:"varint,11,opt,name=phone_home_enabled,json=phoneHomeEnabled,proto3" json:"phone_home_enabled,omitempty"` @@ -13445,21 +14084,21 @@ type OperatingSystem struct { sizeCache protoimpl.SizeCache } -func (x *OperatingSystem) Reset() { - *x = OperatingSystem{} - mi := &file_forge_carbide_proto_msgTypes[158] +func (x *InstanceOperatingSystemConfig) Reset() { + *x = InstanceOperatingSystemConfig{} + mi := &file_forge_carbide_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *OperatingSystem) String() string { +func (x *InstanceOperatingSystemConfig) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OperatingSystem) ProtoMessage() {} +func (*InstanceOperatingSystemConfig) ProtoMessage() {} -func (x *OperatingSystem) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[158] +func (x *InstanceOperatingSystemConfig) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[161] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13470,72 +14109,89 @@ func (x *OperatingSystem) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OperatingSystem.ProtoReflect.Descriptor instead. -func (*OperatingSystem) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{158} +// Deprecated: Use InstanceOperatingSystemConfig.ProtoReflect.Descriptor instead. +func (*InstanceOperatingSystemConfig) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{161} } -func (x *OperatingSystem) GetVariant() isOperatingSystem_Variant { +func (x *InstanceOperatingSystemConfig) GetVariant() isInstanceOperatingSystemConfig_Variant { if x != nil { return x.Variant } return nil } -func (x *OperatingSystem) GetIpxe() *InlineIpxe { +func (x *InstanceOperatingSystemConfig) GetIpxe() *InlineIpxe { if x != nil { - if x, ok := x.Variant.(*OperatingSystem_Ipxe); ok { + if x, ok := x.Variant.(*InstanceOperatingSystemConfig_Ipxe); ok { return x.Ipxe } } return nil } -func (x *OperatingSystem) GetOsImageId() *UUID { +func (x *InstanceOperatingSystemConfig) GetOsImageId() *UUID { if x != nil { - if x, ok := x.Variant.(*OperatingSystem_OsImageId); ok { + if x, ok := x.Variant.(*InstanceOperatingSystemConfig_OsImageId); ok { return x.OsImageId } } return nil } -func (x *OperatingSystem) GetPhoneHomeEnabled() bool { +func (x *InstanceOperatingSystemConfig) GetOperatingSystemId() *OperatingSystemId { + if x != nil { + if x, ok := x.Variant.(*InstanceOperatingSystemConfig_OperatingSystemId); ok { + return x.OperatingSystemId + } + } + return nil +} + +func (x *InstanceOperatingSystemConfig) GetPhoneHomeEnabled() bool { if x != nil { return x.PhoneHomeEnabled } return false } -func (x *OperatingSystem) GetRunProvisioningInstructionsOnEveryBoot() bool { +func (x *InstanceOperatingSystemConfig) GetRunProvisioningInstructionsOnEveryBoot() bool { if x != nil { return x.RunProvisioningInstructionsOnEveryBoot } return false } -func (x *OperatingSystem) GetUserData() string { +func (x *InstanceOperatingSystemConfig) GetUserData() string { if x != nil && x.UserData != nil { return *x.UserData } return "" } -type isOperatingSystem_Variant interface { - isOperatingSystem_Variant() +type isInstanceOperatingSystemConfig_Variant interface { + isInstanceOperatingSystemConfig_Variant() } -type OperatingSystem_Ipxe struct { +type InstanceOperatingSystemConfig_Ipxe struct { Ipxe *InlineIpxe `protobuf:"bytes,1,opt,name=ipxe,proto3,oneof"` } -type OperatingSystem_OsImageId struct { +type InstanceOperatingSystemConfig_OsImageId struct { OsImageId *UUID `protobuf:"bytes,2,opt,name=os_image_id,json=osImageId,proto3,oneof"` } -func (*OperatingSystem_Ipxe) isOperatingSystem_Variant() {} +type InstanceOperatingSystemConfig_OperatingSystemId struct { + // Reference any operating system definition by ID (any variant except OS image). + // On read the actual variant (iPXE / ipxe_os_definition) is resolved from the row. + OperatingSystemId *OperatingSystemId `protobuf:"bytes,4,opt,name=operating_system_id,json=operatingSystemId,proto3,oneof"` +} + +func (*InstanceOperatingSystemConfig_Ipxe) isInstanceOperatingSystemConfig_Variant() {} + +func (*InstanceOperatingSystemConfig_OsImageId) isInstanceOperatingSystemConfig_Variant() {} -func (*OperatingSystem_OsImageId) isOperatingSystem_Variant() {} +func (*InstanceOperatingSystemConfig_OperatingSystemId) isInstanceOperatingSystemConfig_Variant() {} type InlineIpxe struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -13543,7 +14199,7 @@ type InlineIpxe struct { IpxeScript string `protobuf:"bytes,1,opt,name=ipxe_script,json=ipxeScript,proto3" json:"ipxe_script,omitempty"` // Optional user-data that is associated with the iPXE script // This can be a cloud-init script - // Deprecated, use OperatingSystem user_data field + // Deprecated, use InstanceOperatingSystemConfig user_data field UserData *string `protobuf:"bytes,2,opt,name=user_data,json=userData,proto3,oneof" json:"user_data,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -13551,7 +14207,7 @@ type InlineIpxe struct { func (x *InlineIpxe) Reset() { *x = InlineIpxe{} - mi := &file_forge_carbide_proto_msgTypes[159] + mi := &file_forge_carbide_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13563,7 +14219,7 @@ func (x *InlineIpxe) String() string { func (*InlineIpxe) ProtoMessage() {} func (x *InlineIpxe) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[159] + mi := &file_forge_carbide_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13576,7 +14232,7 @@ func (x *InlineIpxe) ProtoReflect() protoreflect.Message { // Deprecated: Use InlineIpxe.ProtoReflect.Descriptor instead. func (*InlineIpxe) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{159} + return file_forge_carbide_proto_rawDescGZIP(), []int{162} } func (x *InlineIpxe) GetIpxeScript() string { @@ -13602,7 +14258,7 @@ type InstanceConfig struct { // change no version field is required. Tenant *TenantConfig `protobuf:"bytes,1,opt,name=tenant,proto3" json:"tenant,omitempty"` // Operating system. This is required if no operating system reference is provided - Os *OperatingSystem `protobuf:"bytes,2,opt,name=os,proto3" json:"os,omitempty"` + Os *InstanceOperatingSystemConfig `protobuf:"bytes,2,opt,name=os,proto3" json:"os,omitempty"` // Configures instance networking configurations Network *InstanceNetworkConfig `protobuf:"bytes,11,opt,name=network,proto3" json:"network,omitempty"` // Configures instance infiniband configurations. @@ -13621,7 +14277,7 @@ type InstanceConfig struct { func (x *InstanceConfig) Reset() { *x = InstanceConfig{} - mi := &file_forge_carbide_proto_msgTypes[160] + mi := &file_forge_carbide_proto_msgTypes[163] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13633,7 +14289,7 @@ func (x *InstanceConfig) String() string { func (*InstanceConfig) ProtoMessage() {} func (x *InstanceConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[160] + mi := &file_forge_carbide_proto_msgTypes[163] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13646,7 +14302,7 @@ func (x *InstanceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceConfig.ProtoReflect.Descriptor instead. func (*InstanceConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{160} + return file_forge_carbide_proto_rawDescGZIP(), []int{163} } func (x *InstanceConfig) GetTenant() *TenantConfig { @@ -13656,7 +14312,7 @@ func (x *InstanceConfig) GetTenant() *TenantConfig { return nil } -func (x *InstanceConfig) GetOs() *OperatingSystem { +func (x *InstanceConfig) GetOs() *InstanceOperatingSystemConfig { if x != nil { return x.Os } @@ -13709,7 +14365,7 @@ type InstanceNetworkConfig struct { func (x *InstanceNetworkConfig) Reset() { *x = InstanceNetworkConfig{} - mi := &file_forge_carbide_proto_msgTypes[161] + mi := &file_forge_carbide_proto_msgTypes[164] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13721,7 +14377,7 @@ func (x *InstanceNetworkConfig) String() string { func (*InstanceNetworkConfig) ProtoMessage() {} func (x *InstanceNetworkConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[161] + mi := &file_forge_carbide_proto_msgTypes[164] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13734,7 +14390,7 @@ func (x *InstanceNetworkConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceNetworkConfig.ProtoReflect.Descriptor instead. func (*InstanceNetworkConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{161} + return file_forge_carbide_proto_rawDescGZIP(), []int{164} } func (x *InstanceNetworkConfig) GetInterfaces() []*InstanceInterfaceConfig { @@ -13755,7 +14411,7 @@ type InstanceInfinibandConfig struct { func (x *InstanceInfinibandConfig) Reset() { *x = InstanceInfinibandConfig{} - mi := &file_forge_carbide_proto_msgTypes[162] + mi := &file_forge_carbide_proto_msgTypes[165] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13767,7 +14423,7 @@ func (x *InstanceInfinibandConfig) String() string { func (*InstanceInfinibandConfig) ProtoMessage() {} func (x *InstanceInfinibandConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[162] + mi := &file_forge_carbide_proto_msgTypes[165] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13780,7 +14436,7 @@ func (x *InstanceInfinibandConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceInfinibandConfig.ProtoReflect.Descriptor instead. func (*InstanceInfinibandConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{162} + return file_forge_carbide_proto_rawDescGZIP(), []int{165} } func (x *InstanceInfinibandConfig) GetIbInterfaces() []*InstanceIBInterfaceConfig { @@ -13800,7 +14456,7 @@ type InstanceDpuExtensionServiceConfig struct { func (x *InstanceDpuExtensionServiceConfig) Reset() { *x = InstanceDpuExtensionServiceConfig{} - mi := &file_forge_carbide_proto_msgTypes[163] + mi := &file_forge_carbide_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13812,7 +14468,7 @@ func (x *InstanceDpuExtensionServiceConfig) String() string { func (*InstanceDpuExtensionServiceConfig) ProtoMessage() {} func (x *InstanceDpuExtensionServiceConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[163] + mi := &file_forge_carbide_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13825,7 +14481,7 @@ func (x *InstanceDpuExtensionServiceConfig) ProtoReflect() protoreflect.Message // Deprecated: Use InstanceDpuExtensionServiceConfig.ProtoReflect.Descriptor instead. func (*InstanceDpuExtensionServiceConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{163} + return file_forge_carbide_proto_rawDescGZIP(), []int{166} } func (x *InstanceDpuExtensionServiceConfig) GetServiceId() string { @@ -13852,7 +14508,7 @@ type InstanceDpuExtensionServicesConfig struct { func (x *InstanceDpuExtensionServicesConfig) Reset() { *x = InstanceDpuExtensionServicesConfig{} - mi := &file_forge_carbide_proto_msgTypes[164] + mi := &file_forge_carbide_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13864,7 +14520,7 @@ func (x *InstanceDpuExtensionServicesConfig) String() string { func (*InstanceDpuExtensionServicesConfig) ProtoMessage() {} func (x *InstanceDpuExtensionServicesConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[164] + mi := &file_forge_carbide_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13877,7 +14533,7 @@ func (x *InstanceDpuExtensionServicesConfig) ProtoReflect() protoreflect.Message // Deprecated: Use InstanceDpuExtensionServicesConfig.ProtoReflect.Descriptor instead. func (*InstanceDpuExtensionServicesConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{164} + return file_forge_carbide_proto_rawDescGZIP(), []int{167} } func (x *InstanceDpuExtensionServicesConfig) GetServiceConfigs() []*InstanceDpuExtensionServiceConfig { @@ -13898,7 +14554,7 @@ type InstanceNVLinkConfig struct { func (x *InstanceNVLinkConfig) Reset() { *x = InstanceNVLinkConfig{} - mi := &file_forge_carbide_proto_msgTypes[165] + mi := &file_forge_carbide_proto_msgTypes[168] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13910,7 +14566,7 @@ func (x *InstanceNVLinkConfig) String() string { func (*InstanceNVLinkConfig) ProtoMessage() {} func (x *InstanceNVLinkConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[165] + mi := &file_forge_carbide_proto_msgTypes[168] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13923,7 +14579,7 @@ func (x *InstanceNVLinkConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceNVLinkConfig.ProtoReflect.Descriptor instead. func (*InstanceNVLinkConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{165} + return file_forge_carbide_proto_rawDescGZIP(), []int{168} } func (x *InstanceNVLinkConfig) GetGpuConfigs() []*InstanceNVLinkGpuConfig { @@ -13944,14 +14600,14 @@ type InstanceOperatingSystemUpdateRequest struct { // a `ConcurrentModificationError`. IfVersionMatch *string `protobuf:"bytes,2,opt,name=if_version_match,json=ifVersionMatch,proto3,oneof" json:"if_version_match,omitempty"` // Operating system. This is required if no operating system reference is provided - Os *OperatingSystem `protobuf:"bytes,3,opt,name=os,proto3" json:"os,omitempty"` + Os *InstanceOperatingSystemConfig `protobuf:"bytes,3,opt,name=os,proto3" json:"os,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *InstanceOperatingSystemUpdateRequest) Reset() { *x = InstanceOperatingSystemUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[166] + mi := &file_forge_carbide_proto_msgTypes[169] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13963,7 +14619,7 @@ func (x *InstanceOperatingSystemUpdateRequest) String() string { func (*InstanceOperatingSystemUpdateRequest) ProtoMessage() {} func (x *InstanceOperatingSystemUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[166] + mi := &file_forge_carbide_proto_msgTypes[169] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13976,7 +14632,7 @@ func (x *InstanceOperatingSystemUpdateRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use InstanceOperatingSystemUpdateRequest.ProtoReflect.Descriptor instead. func (*InstanceOperatingSystemUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{166} + return file_forge_carbide_proto_rawDescGZIP(), []int{169} } func (x *InstanceOperatingSystemUpdateRequest) GetInstanceId() *InstanceId { @@ -13993,7 +14649,7 @@ func (x *InstanceOperatingSystemUpdateRequest) GetIfVersionMatch() string { return "" } -func (x *InstanceOperatingSystemUpdateRequest) GetOs() *OperatingSystem { +func (x *InstanceOperatingSystemUpdateRequest) GetOs() *InstanceOperatingSystemConfig { if x != nil { return x.Os } @@ -14020,7 +14676,7 @@ type InstanceConfigUpdateRequest struct { func (x *InstanceConfigUpdateRequest) Reset() { *x = InstanceConfigUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[167] + mi := &file_forge_carbide_proto_msgTypes[170] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14032,7 +14688,7 @@ func (x *InstanceConfigUpdateRequest) String() string { func (*InstanceConfigUpdateRequest) ProtoMessage() {} func (x *InstanceConfigUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[167] + mi := &file_forge_carbide_proto_msgTypes[170] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14045,7 +14701,7 @@ func (x *InstanceConfigUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceConfigUpdateRequest.ProtoReflect.Descriptor instead. func (*InstanceConfigUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{167} + return file_forge_carbide_proto_rawDescGZIP(), []int{170} } func (x *InstanceConfigUpdateRequest) GetInstanceId() *InstanceId { @@ -14102,7 +14758,7 @@ type InstanceStatus struct { func (x *InstanceStatus) Reset() { *x = InstanceStatus{} - mi := &file_forge_carbide_proto_msgTypes[168] + mi := &file_forge_carbide_proto_msgTypes[171] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14114,7 +14770,7 @@ func (x *InstanceStatus) String() string { func (*InstanceStatus) ProtoMessage() {} func (x *InstanceStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[168] + mi := &file_forge_carbide_proto_msgTypes[171] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14127,7 +14783,7 @@ func (x *InstanceStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceStatus.ProtoReflect.Descriptor instead. func (*InstanceStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{168} + return file_forge_carbide_proto_rawDescGZIP(), []int{171} } func (x *InstanceStatus) GetTenant() *InstanceTenantStatus { @@ -14211,7 +14867,7 @@ type InstanceNetworkStatus struct { func (x *InstanceNetworkStatus) Reset() { *x = InstanceNetworkStatus{} - mi := &file_forge_carbide_proto_msgTypes[169] + mi := &file_forge_carbide_proto_msgTypes[172] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14223,7 +14879,7 @@ func (x *InstanceNetworkStatus) String() string { func (*InstanceNetworkStatus) ProtoMessage() {} func (x *InstanceNetworkStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[169] + mi := &file_forge_carbide_proto_msgTypes[172] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14236,7 +14892,7 @@ func (x *InstanceNetworkStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceNetworkStatus.ProtoReflect.Descriptor instead. func (*InstanceNetworkStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{169} + return file_forge_carbide_proto_rawDescGZIP(), []int{172} } func (x *InstanceNetworkStatus) GetInterfaces() []*InstanceInterfaceStatus { @@ -14278,7 +14934,7 @@ type InstanceInfinibandStatus struct { func (x *InstanceInfinibandStatus) Reset() { *x = InstanceInfinibandStatus{} - mi := &file_forge_carbide_proto_msgTypes[170] + mi := &file_forge_carbide_proto_msgTypes[173] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14290,7 +14946,7 @@ func (x *InstanceInfinibandStatus) String() string { func (*InstanceInfinibandStatus) ProtoMessage() {} func (x *InstanceInfinibandStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[170] + mi := &file_forge_carbide_proto_msgTypes[173] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14303,7 +14959,7 @@ func (x *InstanceInfinibandStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceInfinibandStatus.ProtoReflect.Descriptor instead. func (*InstanceInfinibandStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{170} + return file_forge_carbide_proto_rawDescGZIP(), []int{173} } func (x *InstanceInfinibandStatus) GetIbInterfaces() []*InstanceIBInterfaceStatus { @@ -14332,7 +14988,7 @@ type DpuExtensionServiceStatus struct { func (x *DpuExtensionServiceStatus) Reset() { *x = DpuExtensionServiceStatus{} - mi := &file_forge_carbide_proto_msgTypes[171] + mi := &file_forge_carbide_proto_msgTypes[174] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14344,7 +15000,7 @@ func (x *DpuExtensionServiceStatus) String() string { func (*DpuExtensionServiceStatus) ProtoMessage() {} func (x *DpuExtensionServiceStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[171] + mi := &file_forge_carbide_proto_msgTypes[174] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14357,7 +15013,7 @@ func (x *DpuExtensionServiceStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionServiceStatus.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{171} + return file_forge_carbide_proto_rawDescGZIP(), []int{174} } func (x *DpuExtensionServiceStatus) GetDpuMachineId() *MachineId { @@ -14401,7 +15057,7 @@ type InstanceDpuExtensionServiceStatus struct { func (x *InstanceDpuExtensionServiceStatus) Reset() { *x = InstanceDpuExtensionServiceStatus{} - mi := &file_forge_carbide_proto_msgTypes[172] + mi := &file_forge_carbide_proto_msgTypes[175] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14413,7 +15069,7 @@ func (x *InstanceDpuExtensionServiceStatus) String() string { func (*InstanceDpuExtensionServiceStatus) ProtoMessage() {} func (x *InstanceDpuExtensionServiceStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[172] + mi := &file_forge_carbide_proto_msgTypes[175] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14426,7 +15082,7 @@ func (x *InstanceDpuExtensionServiceStatus) ProtoReflect() protoreflect.Message // Deprecated: Use InstanceDpuExtensionServiceStatus.ProtoReflect.Descriptor instead. func (*InstanceDpuExtensionServiceStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{172} + return file_forge_carbide_proto_rawDescGZIP(), []int{175} } func (x *InstanceDpuExtensionServiceStatus) GetServiceId() string { @@ -14475,7 +15131,7 @@ type InstanceDpuExtensionServicesStatus struct { func (x *InstanceDpuExtensionServicesStatus) Reset() { *x = InstanceDpuExtensionServicesStatus{} - mi := &file_forge_carbide_proto_msgTypes[173] + mi := &file_forge_carbide_proto_msgTypes[176] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14487,7 +15143,7 @@ func (x *InstanceDpuExtensionServicesStatus) String() string { func (*InstanceDpuExtensionServicesStatus) ProtoMessage() {} func (x *InstanceDpuExtensionServicesStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[173] + mi := &file_forge_carbide_proto_msgTypes[176] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14500,7 +15156,7 @@ func (x *InstanceDpuExtensionServicesStatus) ProtoReflect() protoreflect.Message // Deprecated: Use InstanceDpuExtensionServicesStatus.ProtoReflect.Descriptor instead. func (*InstanceDpuExtensionServicesStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{173} + return file_forge_carbide_proto_rawDescGZIP(), []int{176} } func (x *InstanceDpuExtensionServicesStatus) GetDpuExtensionServices() []*InstanceDpuExtensionServiceStatus { @@ -14527,7 +15183,7 @@ type InstanceNVLinkStatus struct { func (x *InstanceNVLinkStatus) Reset() { *x = InstanceNVLinkStatus{} - mi := &file_forge_carbide_proto_msgTypes[174] + mi := &file_forge_carbide_proto_msgTypes[177] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14539,7 +15195,7 @@ func (x *InstanceNVLinkStatus) String() string { func (*InstanceNVLinkStatus) ProtoMessage() {} func (x *InstanceNVLinkStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[174] + mi := &file_forge_carbide_proto_msgTypes[177] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14552,7 +15208,7 @@ func (x *InstanceNVLinkStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceNVLinkStatus.ProtoReflect.Descriptor instead. func (*InstanceNVLinkStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{174} + return file_forge_carbide_proto_rawDescGZIP(), []int{177} } func (x *InstanceNVLinkStatus) GetGpuStatuses() []*InstanceNVLinkGpuStatus { @@ -14616,7 +15272,7 @@ type Instance struct { func (x *Instance) Reset() { *x = Instance{} - mi := &file_forge_carbide_proto_msgTypes[175] + mi := &file_forge_carbide_proto_msgTypes[178] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14628,7 +15284,7 @@ func (x *Instance) String() string { func (*Instance) ProtoMessage() {} func (x *Instance) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[175] + mi := &file_forge_carbide_proto_msgTypes[178] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14641,7 +15297,7 @@ func (x *Instance) ProtoReflect() protoreflect.Message { // Deprecated: Use Instance.ProtoReflect.Descriptor instead. func (*Instance) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{175} + return file_forge_carbide_proto_rawDescGZIP(), []int{178} } func (x *Instance) GetId() *InstanceId { @@ -14741,7 +15397,7 @@ type InstanceUpdateStatus struct { func (x *InstanceUpdateStatus) Reset() { *x = InstanceUpdateStatus{} - mi := &file_forge_carbide_proto_msgTypes[176] + mi := &file_forge_carbide_proto_msgTypes[179] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14753,7 +15409,7 @@ func (x *InstanceUpdateStatus) String() string { func (*InstanceUpdateStatus) ProtoMessage() {} func (x *InstanceUpdateStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[176] + mi := &file_forge_carbide_proto_msgTypes[179] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14766,7 +15422,7 @@ func (x *InstanceUpdateStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceUpdateStatus.ProtoReflect.Descriptor instead. func (*InstanceUpdateStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{176} + return file_forge_carbide_proto_rawDescGZIP(), []int{179} } func (x *InstanceUpdateStatus) GetModule() InstanceUpdateStatus_Module { @@ -14845,7 +15501,7 @@ type InstanceInterfaceConfig struct { func (x *InstanceInterfaceConfig) Reset() { *x = InstanceInterfaceConfig{} - mi := &file_forge_carbide_proto_msgTypes[177] + mi := &file_forge_carbide_proto_msgTypes[180] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -14857,7 +15513,7 @@ func (x *InstanceInterfaceConfig) String() string { func (*InstanceInterfaceConfig) ProtoMessage() {} func (x *InstanceInterfaceConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[177] + mi := &file_forge_carbide_proto_msgTypes[180] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14870,7 +15526,7 @@ func (x *InstanceInterfaceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceInterfaceConfig.ProtoReflect.Descriptor instead. func (*InstanceInterfaceConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{177} + return file_forge_carbide_proto_rawDescGZIP(), []int{180} } func (x *InstanceInterfaceConfig) GetFunctionType() InterfaceFunctionType { @@ -14989,7 +15645,7 @@ type InstanceIBInterfaceConfig struct { func (x *InstanceIBInterfaceConfig) Reset() { *x = InstanceIBInterfaceConfig{} - mi := &file_forge_carbide_proto_msgTypes[178] + mi := &file_forge_carbide_proto_msgTypes[181] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15001,7 +15657,7 @@ func (x *InstanceIBInterfaceConfig) String() string { func (*InstanceIBInterfaceConfig) ProtoMessage() {} func (x *InstanceIBInterfaceConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[178] + mi := &file_forge_carbide_proto_msgTypes[181] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15014,7 +15670,7 @@ func (x *InstanceIBInterfaceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceIBInterfaceConfig.ProtoReflect.Descriptor instead. func (*InstanceIBInterfaceConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{178} + return file_forge_carbide_proto_rawDescGZIP(), []int{181} } func (x *InstanceIBInterfaceConfig) GetDevice() string { @@ -15092,7 +15748,7 @@ type InstanceInterfaceStatus struct { func (x *InstanceInterfaceStatus) Reset() { *x = InstanceInterfaceStatus{} - mi := &file_forge_carbide_proto_msgTypes[179] + mi := &file_forge_carbide_proto_msgTypes[182] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15104,7 +15760,7 @@ func (x *InstanceInterfaceStatus) String() string { func (*InstanceInterfaceStatus) ProtoMessage() {} func (x *InstanceInterfaceStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[179] + mi := &file_forge_carbide_proto_msgTypes[182] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15117,7 +15773,7 @@ func (x *InstanceInterfaceStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceInterfaceStatus.ProtoReflect.Descriptor instead. func (*InstanceInterfaceStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{179} + return file_forge_carbide_proto_rawDescGZIP(), []int{182} } func (x *InstanceInterfaceStatus) GetVirtualFunctionId() uint32 { @@ -15189,7 +15845,7 @@ type InstanceIBInterfaceStatus struct { func (x *InstanceIBInterfaceStatus) Reset() { *x = InstanceIBInterfaceStatus{} - mi := &file_forge_carbide_proto_msgTypes[180] + mi := &file_forge_carbide_proto_msgTypes[183] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15201,7 +15857,7 @@ func (x *InstanceIBInterfaceStatus) String() string { func (*InstanceIBInterfaceStatus) ProtoMessage() {} func (x *InstanceIBInterfaceStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[180] + mi := &file_forge_carbide_proto_msgTypes[183] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15214,7 +15870,7 @@ func (x *InstanceIBInterfaceStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceIBInterfaceStatus.ProtoReflect.Descriptor instead. func (*InstanceIBInterfaceStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{180} + return file_forge_carbide_proto_rawDescGZIP(), []int{183} } func (x *InstanceIBInterfaceStatus) GetPfGuid() string { @@ -15253,7 +15909,7 @@ type InstanceNVLinkGpuStatus struct { func (x *InstanceNVLinkGpuStatus) Reset() { *x = InstanceNVLinkGpuStatus{} - mi := &file_forge_carbide_proto_msgTypes[181] + mi := &file_forge_carbide_proto_msgTypes[184] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15265,7 +15921,7 @@ func (x *InstanceNVLinkGpuStatus) String() string { func (*InstanceNVLinkGpuStatus) ProtoMessage() {} func (x *InstanceNVLinkGpuStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[181] + mi := &file_forge_carbide_proto_msgTypes[184] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15278,7 +15934,7 @@ func (x *InstanceNVLinkGpuStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceNVLinkGpuStatus.ProtoReflect.Descriptor instead. func (*InstanceNVLinkGpuStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{181} + return file_forge_carbide_proto_rawDescGZIP(), []int{184} } func (x *InstanceNVLinkGpuStatus) GetGpuGuid() string { @@ -15314,7 +15970,7 @@ type InstanceNVLinkGpuConfig struct { func (x *InstanceNVLinkGpuConfig) Reset() { *x = InstanceNVLinkGpuConfig{} - mi := &file_forge_carbide_proto_msgTypes[182] + mi := &file_forge_carbide_proto_msgTypes[185] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15326,7 +15982,7 @@ func (x *InstanceNVLinkGpuConfig) String() string { func (*InstanceNVLinkGpuConfig) ProtoMessage() {} func (x *InstanceNVLinkGpuConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[182] + mi := &file_forge_carbide_proto_msgTypes[185] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15339,7 +15995,7 @@ func (x *InstanceNVLinkGpuConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceNVLinkGpuConfig.ProtoReflect.Descriptor instead. func (*InstanceNVLinkGpuConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{182} + return file_forge_carbide_proto_rawDescGZIP(), []int{185} } func (x *InstanceNVLinkGpuConfig) GetDeviceInstance() uint32 { @@ -15365,7 +16021,7 @@ type InstancePhoneHomeLastContactRequest struct { func (x *InstancePhoneHomeLastContactRequest) Reset() { *x = InstancePhoneHomeLastContactRequest{} - mi := &file_forge_carbide_proto_msgTypes[183] + mi := &file_forge_carbide_proto_msgTypes[186] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15377,7 +16033,7 @@ func (x *InstancePhoneHomeLastContactRequest) String() string { func (*InstancePhoneHomeLastContactRequest) ProtoMessage() {} func (x *InstancePhoneHomeLastContactRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[183] + mi := &file_forge_carbide_proto_msgTypes[186] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15390,7 +16046,7 @@ func (x *InstancePhoneHomeLastContactRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use InstancePhoneHomeLastContactRequest.ProtoReflect.Descriptor instead. func (*InstancePhoneHomeLastContactRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{183} + return file_forge_carbide_proto_rawDescGZIP(), []int{186} } func (x *InstancePhoneHomeLastContactRequest) GetInstanceId() *InstanceId { @@ -15409,7 +16065,7 @@ type InstancePhoneHomeLastContactResponse struct { func (x *InstancePhoneHomeLastContactResponse) Reset() { *x = InstancePhoneHomeLastContactResponse{} - mi := &file_forge_carbide_proto_msgTypes[184] + mi := &file_forge_carbide_proto_msgTypes[187] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15421,7 +16077,7 @@ func (x *InstancePhoneHomeLastContactResponse) String() string { func (*InstancePhoneHomeLastContactResponse) ProtoMessage() {} func (x *InstancePhoneHomeLastContactResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[184] + mi := &file_forge_carbide_proto_msgTypes[187] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15434,7 +16090,7 @@ func (x *InstancePhoneHomeLastContactResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use InstancePhoneHomeLastContactResponse.ProtoReflect.Descriptor instead. func (*InstancePhoneHomeLastContactResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{184} + return file_forge_carbide_proto_rawDescGZIP(), []int{187} } func (x *InstancePhoneHomeLastContactResponse) GetTimestamp() *timestamppb.Timestamp { @@ -15456,7 +16112,7 @@ type Issue struct { func (x *Issue) Reset() { *x = Issue{} - mi := &file_forge_carbide_proto_msgTypes[185] + mi := &file_forge_carbide_proto_msgTypes[188] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15468,7 +16124,7 @@ func (x *Issue) String() string { func (*Issue) ProtoMessage() {} func (x *Issue) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[185] + mi := &file_forge_carbide_proto_msgTypes[188] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15481,7 +16137,7 @@ func (x *Issue) ProtoReflect() protoreflect.Message { // Deprecated: Use Issue.ProtoReflect.Descriptor instead. func (*Issue) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{185} + return file_forge_carbide_proto_rawDescGZIP(), []int{188} } func (x *Issue) GetCategory() IssueCategory { @@ -15518,7 +16174,7 @@ type InstanceReleaseRequest struct { func (x *InstanceReleaseRequest) Reset() { *x = InstanceReleaseRequest{} - mi := &file_forge_carbide_proto_msgTypes[186] + mi := &file_forge_carbide_proto_msgTypes[189] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15530,7 +16186,7 @@ func (x *InstanceReleaseRequest) String() string { func (*InstanceReleaseRequest) ProtoMessage() {} func (x *InstanceReleaseRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[186] + mi := &file_forge_carbide_proto_msgTypes[189] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15543,7 +16199,7 @@ func (x *InstanceReleaseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceReleaseRequest.ProtoReflect.Descriptor instead. func (*InstanceReleaseRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{186} + return file_forge_carbide_proto_rawDescGZIP(), []int{189} } func (x *InstanceReleaseRequest) GetId() *InstanceId { @@ -15575,7 +16231,7 @@ type InstanceReleaseResult struct { func (x *InstanceReleaseResult) Reset() { *x = InstanceReleaseResult{} - mi := &file_forge_carbide_proto_msgTypes[187] + mi := &file_forge_carbide_proto_msgTypes[190] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15587,7 +16243,7 @@ func (x *InstanceReleaseResult) String() string { func (*InstanceReleaseResult) ProtoMessage() {} func (x *InstanceReleaseResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[187] + mi := &file_forge_carbide_proto_msgTypes[190] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15600,7 +16256,7 @@ func (x *InstanceReleaseResult) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceReleaseResult.ProtoReflect.Descriptor instead. func (*InstanceReleaseResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{187} + return file_forge_carbide_proto_rawDescGZIP(), []int{190} } type MachinesByIdsRequest struct { @@ -15613,7 +16269,7 @@ type MachinesByIdsRequest struct { func (x *MachinesByIdsRequest) Reset() { *x = MachinesByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[188] + mi := &file_forge_carbide_proto_msgTypes[191] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15625,7 +16281,7 @@ func (x *MachinesByIdsRequest) String() string { func (*MachinesByIdsRequest) ProtoMessage() {} func (x *MachinesByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[188] + mi := &file_forge_carbide_proto_msgTypes[191] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15638,7 +16294,7 @@ func (x *MachinesByIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachinesByIdsRequest.ProtoReflect.Descriptor instead. func (*MachinesByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{188} + return file_forge_carbide_proto_rawDescGZIP(), []int{191} } func (x *MachinesByIdsRequest) GetMachineIds() []*MachineId { @@ -15678,7 +16334,7 @@ type MachineSearchConfig struct { func (x *MachineSearchConfig) Reset() { *x = MachineSearchConfig{} - mi := &file_forge_carbide_proto_msgTypes[189] + mi := &file_forge_carbide_proto_msgTypes[192] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15690,7 +16346,7 @@ func (x *MachineSearchConfig) String() string { func (*MachineSearchConfig) ProtoMessage() {} func (x *MachineSearchConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[189] + mi := &file_forge_carbide_proto_msgTypes[192] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15703,7 +16359,7 @@ func (x *MachineSearchConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineSearchConfig.ProtoReflect.Descriptor instead. func (*MachineSearchConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{189} + return file_forge_carbide_proto_rawDescGZIP(), []int{192} } func (x *MachineSearchConfig) GetIncludeDpus() bool { @@ -15792,7 +16448,7 @@ type MachineStateHistoriesRequest struct { func (x *MachineStateHistoriesRequest) Reset() { *x = MachineStateHistoriesRequest{} - mi := &file_forge_carbide_proto_msgTypes[190] + mi := &file_forge_carbide_proto_msgTypes[193] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15804,7 +16460,7 @@ func (x *MachineStateHistoriesRequest) String() string { func (*MachineStateHistoriesRequest) ProtoMessage() {} func (x *MachineStateHistoriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[190] + mi := &file_forge_carbide_proto_msgTypes[193] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15817,7 +16473,7 @@ func (x *MachineStateHistoriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineStateHistoriesRequest.ProtoReflect.Descriptor instead. func (*MachineStateHistoriesRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{190} + return file_forge_carbide_proto_rawDescGZIP(), []int{193} } func (x *MachineStateHistoriesRequest) GetMachineIds() []*MachineId { @@ -15837,7 +16493,7 @@ type MachineStateHistories struct { func (x *MachineStateHistories) Reset() { *x = MachineStateHistories{} - mi := &file_forge_carbide_proto_msgTypes[191] + mi := &file_forge_carbide_proto_msgTypes[194] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15849,7 +16505,7 @@ func (x *MachineStateHistories) String() string { func (*MachineStateHistories) ProtoMessage() {} func (x *MachineStateHistories) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[191] + mi := &file_forge_carbide_proto_msgTypes[194] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15862,7 +16518,7 @@ func (x *MachineStateHistories) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineStateHistories.ProtoReflect.Descriptor instead. func (*MachineStateHistories) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{191} + return file_forge_carbide_proto_rawDescGZIP(), []int{194} } func (x *MachineStateHistories) GetHistories() map[string]*MachineStateHistoryRecords { @@ -15882,7 +16538,7 @@ type MachineStateHistoryRecords struct { func (x *MachineStateHistoryRecords) Reset() { *x = MachineStateHistoryRecords{} - mi := &file_forge_carbide_proto_msgTypes[192] + mi := &file_forge_carbide_proto_msgTypes[195] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15894,7 +16550,7 @@ func (x *MachineStateHistoryRecords) String() string { func (*MachineStateHistoryRecords) ProtoMessage() {} func (x *MachineStateHistoryRecords) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[192] + mi := &file_forge_carbide_proto_msgTypes[195] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15907,7 +16563,7 @@ func (x *MachineStateHistoryRecords) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineStateHistoryRecords.ProtoReflect.Descriptor instead. func (*MachineStateHistoryRecords) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{192} + return file_forge_carbide_proto_rawDescGZIP(), []int{195} } func (x *MachineStateHistoryRecords) GetRecords() []*MachineEvent { @@ -15930,7 +16586,7 @@ type MachineHealthHistoriesRequest struct { func (x *MachineHealthHistoriesRequest) Reset() { *x = MachineHealthHistoriesRequest{} - mi := &file_forge_carbide_proto_msgTypes[193] + mi := &file_forge_carbide_proto_msgTypes[196] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -15942,7 +16598,7 @@ func (x *MachineHealthHistoriesRequest) String() string { func (*MachineHealthHistoriesRequest) ProtoMessage() {} func (x *MachineHealthHistoriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[193] + mi := &file_forge_carbide_proto_msgTypes[196] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -15955,7 +16611,7 @@ func (x *MachineHealthHistoriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineHealthHistoriesRequest.ProtoReflect.Descriptor instead. func (*MachineHealthHistoriesRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{193} + return file_forge_carbide_proto_rawDescGZIP(), []int{196} } func (x *MachineHealthHistoriesRequest) GetMachineIds() []*MachineId { @@ -15989,7 +16645,7 @@ type HealthHistories struct { func (x *HealthHistories) Reset() { *x = HealthHistories{} - mi := &file_forge_carbide_proto_msgTypes[194] + mi := &file_forge_carbide_proto_msgTypes[197] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16001,7 +16657,7 @@ func (x *HealthHistories) String() string { func (*HealthHistories) ProtoMessage() {} func (x *HealthHistories) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[194] + mi := &file_forge_carbide_proto_msgTypes[197] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16014,7 +16670,7 @@ func (x *HealthHistories) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthHistories.ProtoReflect.Descriptor instead. func (*HealthHistories) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{194} + return file_forge_carbide_proto_rawDescGZIP(), []int{197} } func (x *HealthHistories) GetHistories() map[string]*HealthHistoryRecords { @@ -16034,7 +16690,7 @@ type HealthHistoryRecords struct { func (x *HealthHistoryRecords) Reset() { *x = HealthHistoryRecords{} - mi := &file_forge_carbide_proto_msgTypes[195] + mi := &file_forge_carbide_proto_msgTypes[198] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16046,7 +16702,7 @@ func (x *HealthHistoryRecords) String() string { func (*HealthHistoryRecords) ProtoMessage() {} func (x *HealthHistoryRecords) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[195] + mi := &file_forge_carbide_proto_msgTypes[198] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16059,7 +16715,7 @@ func (x *HealthHistoryRecords) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthHistoryRecords.ProtoReflect.Descriptor instead. func (*HealthHistoryRecords) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{195} + return file_forge_carbide_proto_rawDescGZIP(), []int{198} } func (x *HealthHistoryRecords) GetRecords() []*HealthHistoryRecord { @@ -16082,7 +16738,7 @@ type HealthHistoryRecord struct { func (x *HealthHistoryRecord) Reset() { *x = HealthHistoryRecord{} - mi := &file_forge_carbide_proto_msgTypes[196] + mi := &file_forge_carbide_proto_msgTypes[199] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16094,7 +16750,7 @@ func (x *HealthHistoryRecord) String() string { func (*HealthHistoryRecord) ProtoMessage() {} func (x *HealthHistoryRecord) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[196] + mi := &file_forge_carbide_proto_msgTypes[199] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16107,7 +16763,7 @@ func (x *HealthHistoryRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthHistoryRecord.ProtoReflect.Descriptor instead. func (*HealthHistoryRecord) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{196} + return file_forge_carbide_proto_rawDescGZIP(), []int{199} } func (x *HealthHistoryRecord) GetHealth() *HealthReport { @@ -16133,7 +16789,7 @@ type TenantByOrganizationIdsRequest struct { func (x *TenantByOrganizationIdsRequest) Reset() { *x = TenantByOrganizationIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[197] + mi := &file_forge_carbide_proto_msgTypes[200] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16145,7 +16801,7 @@ func (x *TenantByOrganizationIdsRequest) String() string { func (*TenantByOrganizationIdsRequest) ProtoMessage() {} func (x *TenantByOrganizationIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[197] + mi := &file_forge_carbide_proto_msgTypes[200] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16158,7 +16814,7 @@ func (x *TenantByOrganizationIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantByOrganizationIdsRequest.ProtoReflect.Descriptor instead. func (*TenantByOrganizationIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{197} + return file_forge_carbide_proto_rawDescGZIP(), []int{200} } func (x *TenantByOrganizationIdsRequest) GetOrganizationIds() []string { @@ -16177,7 +16833,7 @@ type TenantSearchFilter struct { func (x *TenantSearchFilter) Reset() { *x = TenantSearchFilter{} - mi := &file_forge_carbide_proto_msgTypes[198] + mi := &file_forge_carbide_proto_msgTypes[201] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16189,7 +16845,7 @@ func (x *TenantSearchFilter) String() string { func (*TenantSearchFilter) ProtoMessage() {} func (x *TenantSearchFilter) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[198] + mi := &file_forge_carbide_proto_msgTypes[201] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16202,7 +16858,7 @@ func (x *TenantSearchFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantSearchFilter.ProtoReflect.Descriptor instead. func (*TenantSearchFilter) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{198} + return file_forge_carbide_proto_rawDescGZIP(), []int{201} } func (x *TenantSearchFilter) GetTenantOrganizationName() string { @@ -16221,7 +16877,7 @@ type TenantList struct { func (x *TenantList) Reset() { *x = TenantList{} - mi := &file_forge_carbide_proto_msgTypes[199] + mi := &file_forge_carbide_proto_msgTypes[202] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16233,7 +16889,7 @@ func (x *TenantList) String() string { func (*TenantList) ProtoMessage() {} func (x *TenantList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[199] + mi := &file_forge_carbide_proto_msgTypes[202] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16246,7 +16902,7 @@ func (x *TenantList) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantList.ProtoReflect.Descriptor instead. func (*TenantList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{199} + return file_forge_carbide_proto_rawDescGZIP(), []int{202} } func (x *TenantList) GetTenants() []*Tenant { @@ -16265,7 +16921,7 @@ type TenantOrganizationIdList struct { func (x *TenantOrganizationIdList) Reset() { *x = TenantOrganizationIdList{} - mi := &file_forge_carbide_proto_msgTypes[200] + mi := &file_forge_carbide_proto_msgTypes[203] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16277,7 +16933,7 @@ func (x *TenantOrganizationIdList) String() string { func (*TenantOrganizationIdList) ProtoMessage() {} func (x *TenantOrganizationIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[200] + mi := &file_forge_carbide_proto_msgTypes[203] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16290,7 +16946,7 @@ func (x *TenantOrganizationIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantOrganizationIdList.ProtoReflect.Descriptor instead. func (*TenantOrganizationIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{200} + return file_forge_carbide_proto_rawDescGZIP(), []int{203} } func (x *TenantOrganizationIdList) GetTenantOrganizationIds() []string { @@ -16309,7 +16965,7 @@ type InterfaceList struct { func (x *InterfaceList) Reset() { *x = InterfaceList{} - mi := &file_forge_carbide_proto_msgTypes[201] + mi := &file_forge_carbide_proto_msgTypes[204] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16321,7 +16977,7 @@ func (x *InterfaceList) String() string { func (*InterfaceList) ProtoMessage() {} func (x *InterfaceList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[201] + mi := &file_forge_carbide_proto_msgTypes[204] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16334,7 +16990,7 @@ func (x *InterfaceList) ProtoReflect() protoreflect.Message { // Deprecated: Use InterfaceList.ProtoReflect.Descriptor instead. func (*InterfaceList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{201} + return file_forge_carbide_proto_rawDescGZIP(), []int{204} } func (x *InterfaceList) GetInterfaces() []*MachineInterface { @@ -16353,7 +17009,7 @@ type MachineList struct { func (x *MachineList) Reset() { *x = MachineList{} - mi := &file_forge_carbide_proto_msgTypes[202] + mi := &file_forge_carbide_proto_msgTypes[205] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16365,7 +17021,7 @@ func (x *MachineList) String() string { func (*MachineList) ProtoMessage() {} func (x *MachineList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[202] + mi := &file_forge_carbide_proto_msgTypes[205] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16378,7 +17034,7 @@ func (x *MachineList) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineList.ProtoReflect.Descriptor instead. func (*MachineList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{202} + return file_forge_carbide_proto_rawDescGZIP(), []int{205} } func (x *MachineList) GetMachines() []*Machine { @@ -16397,7 +17053,7 @@ type InterfaceDeleteQuery struct { func (x *InterfaceDeleteQuery) Reset() { *x = InterfaceDeleteQuery{} - mi := &file_forge_carbide_proto_msgTypes[203] + mi := &file_forge_carbide_proto_msgTypes[206] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16409,7 +17065,7 @@ func (x *InterfaceDeleteQuery) String() string { func (*InterfaceDeleteQuery) ProtoMessage() {} func (x *InterfaceDeleteQuery) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[203] + mi := &file_forge_carbide_proto_msgTypes[206] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16422,7 +17078,7 @@ func (x *InterfaceDeleteQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use InterfaceDeleteQuery.ProtoReflect.Descriptor instead. func (*InterfaceDeleteQuery) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{203} + return file_forge_carbide_proto_rawDescGZIP(), []int{206} } func (x *InterfaceDeleteQuery) GetId() *MachineInterfaceId { @@ -16442,7 +17098,7 @@ type InterfaceSearchQuery struct { func (x *InterfaceSearchQuery) Reset() { *x = InterfaceSearchQuery{} - mi := &file_forge_carbide_proto_msgTypes[204] + mi := &file_forge_carbide_proto_msgTypes[207] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16454,7 +17110,7 @@ func (x *InterfaceSearchQuery) String() string { func (*InterfaceSearchQuery) ProtoMessage() {} func (x *InterfaceSearchQuery) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[204] + mi := &file_forge_carbide_proto_msgTypes[207] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16467,7 +17123,7 @@ func (x *InterfaceSearchQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use InterfaceSearchQuery.ProtoReflect.Descriptor instead. func (*InterfaceSearchQuery) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{204} + return file_forge_carbide_proto_rawDescGZIP(), []int{207} } func (x *InterfaceSearchQuery) GetId() *MachineInterfaceId { @@ -16494,7 +17150,7 @@ type AssignStaticAddressRequest struct { func (x *AssignStaticAddressRequest) Reset() { *x = AssignStaticAddressRequest{} - mi := &file_forge_carbide_proto_msgTypes[205] + mi := &file_forge_carbide_proto_msgTypes[208] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16506,7 +17162,7 @@ func (x *AssignStaticAddressRequest) String() string { func (*AssignStaticAddressRequest) ProtoMessage() {} func (x *AssignStaticAddressRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[205] + mi := &file_forge_carbide_proto_msgTypes[208] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16519,7 +17175,7 @@ func (x *AssignStaticAddressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignStaticAddressRequest.ProtoReflect.Descriptor instead. func (*AssignStaticAddressRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{205} + return file_forge_carbide_proto_rawDescGZIP(), []int{208} } func (x *AssignStaticAddressRequest) GetInterfaceId() *MachineInterfaceId { @@ -16547,7 +17203,7 @@ type AssignStaticAddressResponse struct { func (x *AssignStaticAddressResponse) Reset() { *x = AssignStaticAddressResponse{} - mi := &file_forge_carbide_proto_msgTypes[206] + mi := &file_forge_carbide_proto_msgTypes[209] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16559,7 +17215,7 @@ func (x *AssignStaticAddressResponse) String() string { func (*AssignStaticAddressResponse) ProtoMessage() {} func (x *AssignStaticAddressResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[206] + mi := &file_forge_carbide_proto_msgTypes[209] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16572,7 +17228,7 @@ func (x *AssignStaticAddressResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignStaticAddressResponse.ProtoReflect.Descriptor instead. func (*AssignStaticAddressResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{206} + return file_forge_carbide_proto_rawDescGZIP(), []int{209} } func (x *AssignStaticAddressResponse) GetInterfaceId() *MachineInterfaceId { @@ -16606,7 +17262,7 @@ type RemoveStaticAddressRequest struct { func (x *RemoveStaticAddressRequest) Reset() { *x = RemoveStaticAddressRequest{} - mi := &file_forge_carbide_proto_msgTypes[207] + mi := &file_forge_carbide_proto_msgTypes[210] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16618,7 +17274,7 @@ func (x *RemoveStaticAddressRequest) String() string { func (*RemoveStaticAddressRequest) ProtoMessage() {} func (x *RemoveStaticAddressRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[207] + mi := &file_forge_carbide_proto_msgTypes[210] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16631,7 +17287,7 @@ func (x *RemoveStaticAddressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveStaticAddressRequest.ProtoReflect.Descriptor instead. func (*RemoveStaticAddressRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{207} + return file_forge_carbide_proto_rawDescGZIP(), []int{210} } func (x *RemoveStaticAddressRequest) GetInterfaceId() *MachineInterfaceId { @@ -16659,7 +17315,7 @@ type RemoveStaticAddressResponse struct { func (x *RemoveStaticAddressResponse) Reset() { *x = RemoveStaticAddressResponse{} - mi := &file_forge_carbide_proto_msgTypes[208] + mi := &file_forge_carbide_proto_msgTypes[211] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16671,7 +17327,7 @@ func (x *RemoveStaticAddressResponse) String() string { func (*RemoveStaticAddressResponse) ProtoMessage() {} func (x *RemoveStaticAddressResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[208] + mi := &file_forge_carbide_proto_msgTypes[211] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16684,7 +17340,7 @@ func (x *RemoveStaticAddressResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveStaticAddressResponse.ProtoReflect.Descriptor instead. func (*RemoveStaticAddressResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{208} + return file_forge_carbide_proto_rawDescGZIP(), []int{211} } func (x *RemoveStaticAddressResponse) GetInterfaceId() *MachineInterfaceId { @@ -16717,7 +17373,7 @@ type FindInterfaceAddressesRequest struct { func (x *FindInterfaceAddressesRequest) Reset() { *x = FindInterfaceAddressesRequest{} - mi := &file_forge_carbide_proto_msgTypes[209] + mi := &file_forge_carbide_proto_msgTypes[212] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16729,7 +17385,7 @@ func (x *FindInterfaceAddressesRequest) String() string { func (*FindInterfaceAddressesRequest) ProtoMessage() {} func (x *FindInterfaceAddressesRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[209] + mi := &file_forge_carbide_proto_msgTypes[212] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16742,7 +17398,7 @@ func (x *FindInterfaceAddressesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindInterfaceAddressesRequest.ProtoReflect.Descriptor instead. func (*FindInterfaceAddressesRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{209} + return file_forge_carbide_proto_rawDescGZIP(), []int{212} } func (x *FindInterfaceAddressesRequest) GetInterfaceId() *MachineInterfaceId { @@ -16762,7 +17418,7 @@ type InterfaceAddress struct { func (x *InterfaceAddress) Reset() { *x = InterfaceAddress{} - mi := &file_forge_carbide_proto_msgTypes[210] + mi := &file_forge_carbide_proto_msgTypes[213] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16774,7 +17430,7 @@ func (x *InterfaceAddress) String() string { func (*InterfaceAddress) ProtoMessage() {} func (x *InterfaceAddress) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[210] + mi := &file_forge_carbide_proto_msgTypes[213] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16787,7 +17443,7 @@ func (x *InterfaceAddress) ProtoReflect() protoreflect.Message { // Deprecated: Use InterfaceAddress.ProtoReflect.Descriptor instead. func (*InterfaceAddress) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{210} + return file_forge_carbide_proto_rawDescGZIP(), []int{213} } func (x *InterfaceAddress) GetAddress() string { @@ -16814,7 +17470,7 @@ type FindInterfaceAddressesResponse struct { func (x *FindInterfaceAddressesResponse) Reset() { *x = FindInterfaceAddressesResponse{} - mi := &file_forge_carbide_proto_msgTypes[211] + mi := &file_forge_carbide_proto_msgTypes[214] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16826,7 +17482,7 @@ func (x *FindInterfaceAddressesResponse) String() string { func (*FindInterfaceAddressesResponse) ProtoMessage() {} func (x *FindInterfaceAddressesResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[211] + mi := &file_forge_carbide_proto_msgTypes[214] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16839,7 +17495,7 @@ func (x *FindInterfaceAddressesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindInterfaceAddressesResponse.ProtoReflect.Descriptor instead. func (*FindInterfaceAddressesResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{211} + return file_forge_carbide_proto_rawDescGZIP(), []int{214} } func (x *FindInterfaceAddressesResponse) GetInterfaceId() *MachineInterfaceId { @@ -16869,7 +17525,7 @@ type BmcInfo struct { func (x *BmcInfo) Reset() { *x = BmcInfo{} - mi := &file_forge_carbide_proto_msgTypes[212] + mi := &file_forge_carbide_proto_msgTypes[215] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -16881,7 +17537,7 @@ func (x *BmcInfo) String() string { func (*BmcInfo) ProtoMessage() {} func (x *BmcInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[212] + mi := &file_forge_carbide_proto_msgTypes[215] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -16894,7 +17550,7 @@ func (x *BmcInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use BmcInfo.ProtoReflect.Descriptor instead. func (*BmcInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{212} + return file_forge_carbide_proto_rawDescGZIP(), []int{215} } func (x *BmcInfo) GetIp() string { @@ -17000,14 +17656,15 @@ type Machine struct { UpdateComplete bool `protobuf:"varint,42,opt,name=update_complete,json=updateComplete,proto3" json:"update_complete,omitempty"` NvlinkInfo *MachineNVLinkInfo `protobuf:"bytes,43,opt,name=nvlink_info,json=nvlinkInfo,proto3,oneof" json:"nvlink_info,omitempty"` NvlinkStatusObservation *MachineNVLinkStatusObservation `protobuf:"bytes,44,opt,name=nvlink_status_observation,json=nvlinkStatusObservation,proto3,oneof" json:"nvlink_status_observation,omitempty"` - RackId *RackId `protobuf:"bytes,45,opt,name=rack_id,json=rackId,proto3,oneof" json:"rack_id,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // The rack that this machine is associated with + RackId *RackId `protobuf:"bytes,45,opt,name=rack_id,json=rackId,proto3,oneof" json:"rack_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Machine) Reset() { *x = Machine{} - mi := &file_forge_carbide_proto_msgTypes[213] + mi := &file_forge_carbide_proto_msgTypes[216] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17019,7 +17676,7 @@ func (x *Machine) String() string { func (*Machine) ProtoMessage() {} func (x *Machine) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[213] + mi := &file_forge_carbide_proto_msgTypes[216] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17032,7 +17689,7 @@ func (x *Machine) ProtoReflect() protoreflect.Message { // Deprecated: Use Machine.ProtoReflect.Descriptor instead. func (*Machine) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{213} + return file_forge_carbide_proto_rawDescGZIP(), []int{216} } func (x *Machine) GetId() *MachineId { @@ -17316,7 +17973,7 @@ type InstanceNetworkRestrictions struct { func (x *InstanceNetworkRestrictions) Reset() { *x = InstanceNetworkRestrictions{} - mi := &file_forge_carbide_proto_msgTypes[214] + mi := &file_forge_carbide_proto_msgTypes[217] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17328,7 +17985,7 @@ func (x *InstanceNetworkRestrictions) String() string { func (*InstanceNetworkRestrictions) ProtoMessage() {} func (x *InstanceNetworkRestrictions) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[214] + mi := &file_forge_carbide_proto_msgTypes[217] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17341,7 +17998,7 @@ func (x *InstanceNetworkRestrictions) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceNetworkRestrictions.ProtoReflect.Descriptor instead. func (*InstanceNetworkRestrictions) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{214} + return file_forge_carbide_proto_rawDescGZIP(), []int{217} } func (x *InstanceNetworkRestrictions) GetNetworkSegmentMembershipType() InstanceNetworkSegmentMembershipType { @@ -17376,7 +18033,7 @@ type MachineMetadataUpdateRequest struct { func (x *MachineMetadataUpdateRequest) Reset() { *x = MachineMetadataUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[215] + mi := &file_forge_carbide_proto_msgTypes[218] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17388,7 +18045,7 @@ func (x *MachineMetadataUpdateRequest) String() string { func (*MachineMetadataUpdateRequest) ProtoMessage() {} func (x *MachineMetadataUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[215] + mi := &file_forge_carbide_proto_msgTypes[218] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17401,7 +18058,7 @@ func (x *MachineMetadataUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineMetadataUpdateRequest.ProtoReflect.Descriptor instead. func (*MachineMetadataUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{215} + return file_forge_carbide_proto_rawDescGZIP(), []int{218} } func (x *MachineMetadataUpdateRequest) GetMachineId() *MachineId { @@ -17442,7 +18099,7 @@ type RackMetadataUpdateRequest struct { func (x *RackMetadataUpdateRequest) Reset() { *x = RackMetadataUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[216] + mi := &file_forge_carbide_proto_msgTypes[219] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17454,7 +18111,7 @@ func (x *RackMetadataUpdateRequest) String() string { func (*RackMetadataUpdateRequest) ProtoMessage() {} func (x *RackMetadataUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[216] + mi := &file_forge_carbide_proto_msgTypes[219] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17467,7 +18124,7 @@ func (x *RackMetadataUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RackMetadataUpdateRequest.ProtoReflect.Descriptor instead. func (*RackMetadataUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{216} + return file_forge_carbide_proto_rawDescGZIP(), []int{219} } func (x *RackMetadataUpdateRequest) GetRackId() *RackId { @@ -17508,7 +18165,7 @@ type SwitchMetadataUpdateRequest struct { func (x *SwitchMetadataUpdateRequest) Reset() { *x = SwitchMetadataUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[217] + mi := &file_forge_carbide_proto_msgTypes[220] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17520,7 +18177,7 @@ func (x *SwitchMetadataUpdateRequest) String() string { func (*SwitchMetadataUpdateRequest) ProtoMessage() {} func (x *SwitchMetadataUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[217] + mi := &file_forge_carbide_proto_msgTypes[220] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17533,7 +18190,7 @@ func (x *SwitchMetadataUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SwitchMetadataUpdateRequest.ProtoReflect.Descriptor instead. func (*SwitchMetadataUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{217} + return file_forge_carbide_proto_rawDescGZIP(), []int{220} } func (x *SwitchMetadataUpdateRequest) GetSwitchId() *SwitchId { @@ -17574,7 +18231,7 @@ type PowerShelfMetadataUpdateRequest struct { func (x *PowerShelfMetadataUpdateRequest) Reset() { *x = PowerShelfMetadataUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[218] + mi := &file_forge_carbide_proto_msgTypes[221] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17586,7 +18243,7 @@ func (x *PowerShelfMetadataUpdateRequest) String() string { func (*PowerShelfMetadataUpdateRequest) ProtoMessage() {} func (x *PowerShelfMetadataUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[218] + mi := &file_forge_carbide_proto_msgTypes[221] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17599,7 +18256,7 @@ func (x *PowerShelfMetadataUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PowerShelfMetadataUpdateRequest.ProtoReflect.Descriptor instead. func (*PowerShelfMetadataUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{218} + return file_forge_carbide_proto_rawDescGZIP(), []int{221} } func (x *PowerShelfMetadataUpdateRequest) GetPowerShelfId() *PowerShelfId { @@ -17633,7 +18290,7 @@ type DpuAgentInventoryReport struct { func (x *DpuAgentInventoryReport) Reset() { *x = DpuAgentInventoryReport{} - mi := &file_forge_carbide_proto_msgTypes[219] + mi := &file_forge_carbide_proto_msgTypes[222] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17645,7 +18302,7 @@ func (x *DpuAgentInventoryReport) String() string { func (*DpuAgentInventoryReport) ProtoMessage() {} func (x *DpuAgentInventoryReport) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[219] + mi := &file_forge_carbide_proto_msgTypes[222] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17658,7 +18315,7 @@ func (x *DpuAgentInventoryReport) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuAgentInventoryReport.ProtoReflect.Descriptor instead. func (*DpuAgentInventoryReport) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{219} + return file_forge_carbide_proto_rawDescGZIP(), []int{222} } func (x *DpuAgentInventoryReport) GetMachineId() *MachineId { @@ -17685,7 +18342,7 @@ type MachineComponentInventory struct { func (x *MachineComponentInventory) Reset() { *x = MachineComponentInventory{} - mi := &file_forge_carbide_proto_msgTypes[220] + mi := &file_forge_carbide_proto_msgTypes[223] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17697,7 +18354,7 @@ func (x *MachineComponentInventory) String() string { func (*MachineComponentInventory) ProtoMessage() {} func (x *MachineComponentInventory) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[220] + mi := &file_forge_carbide_proto_msgTypes[223] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17710,7 +18367,7 @@ func (x *MachineComponentInventory) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineComponentInventory.ProtoReflect.Descriptor instead. func (*MachineComponentInventory) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{220} + return file_forge_carbide_proto_rawDescGZIP(), []int{223} } func (x *MachineComponentInventory) GetComponents() []*MachineInventorySoftwareComponent { @@ -17731,7 +18388,7 @@ type MachineInventorySoftwareComponent struct { func (x *MachineInventorySoftwareComponent) Reset() { *x = MachineInventorySoftwareComponent{} - mi := &file_forge_carbide_proto_msgTypes[221] + mi := &file_forge_carbide_proto_msgTypes[224] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17743,7 +18400,7 @@ func (x *MachineInventorySoftwareComponent) String() string { func (*MachineInventorySoftwareComponent) ProtoMessage() {} func (x *MachineInventorySoftwareComponent) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[221] + mi := &file_forge_carbide_proto_msgTypes[224] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17756,7 +18413,7 @@ func (x *MachineInventorySoftwareComponent) ProtoReflect() protoreflect.Message // Deprecated: Use MachineInventorySoftwareComponent.ProtoReflect.Descriptor instead. func (*MachineInventorySoftwareComponent) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{221} + return file_forge_carbide_proto_rawDescGZIP(), []int{224} } func (x *MachineInventorySoftwareComponent) GetName() string { @@ -17791,7 +18448,7 @@ type HealthOverrideOrigin struct { func (x *HealthOverrideOrigin) Reset() { *x = HealthOverrideOrigin{} - mi := &file_forge_carbide_proto_msgTypes[222] + mi := &file_forge_carbide_proto_msgTypes[225] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17803,7 +18460,7 @@ func (x *HealthOverrideOrigin) String() string { func (*HealthOverrideOrigin) ProtoMessage() {} func (x *HealthOverrideOrigin) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[222] + mi := &file_forge_carbide_proto_msgTypes[225] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17816,7 +18473,7 @@ func (x *HealthOverrideOrigin) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthOverrideOrigin.ProtoReflect.Descriptor instead. func (*HealthOverrideOrigin) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{222} + return file_forge_carbide_proto_rawDescGZIP(), []int{225} } func (x *HealthOverrideOrigin) GetMode() OverrideMode { @@ -17845,7 +18502,7 @@ type ControllerStateReason struct { func (x *ControllerStateReason) Reset() { *x = ControllerStateReason{} - mi := &file_forge_carbide_proto_msgTypes[223] + mi := &file_forge_carbide_proto_msgTypes[226] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17857,7 +18514,7 @@ func (x *ControllerStateReason) String() string { func (*ControllerStateReason) ProtoMessage() {} func (x *ControllerStateReason) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[223] + mi := &file_forge_carbide_proto_msgTypes[226] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17870,7 +18527,7 @@ func (x *ControllerStateReason) ProtoReflect() protoreflect.Message { // Deprecated: Use ControllerStateReason.ProtoReflect.Descriptor instead. func (*ControllerStateReason) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{223} + return file_forge_carbide_proto_rawDescGZIP(), []int{226} } func (x *ControllerStateReason) GetOutcome() ControllerStateOutcome { @@ -17905,7 +18562,7 @@ type ControllerStateSourceReference struct { func (x *ControllerStateSourceReference) Reset() { *x = ControllerStateSourceReference{} - mi := &file_forge_carbide_proto_msgTypes[224] + mi := &file_forge_carbide_proto_msgTypes[227] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17917,7 +18574,7 @@ func (x *ControllerStateSourceReference) String() string { func (*ControllerStateSourceReference) ProtoMessage() {} func (x *ControllerStateSourceReference) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[224] + mi := &file_forge_carbide_proto_msgTypes[227] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17930,7 +18587,7 @@ func (x *ControllerStateSourceReference) ProtoReflect() protoreflect.Message { // Deprecated: Use ControllerStateSourceReference.ProtoReflect.Descriptor instead. func (*ControllerStateSourceReference) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{224} + return file_forge_carbide_proto_rawDescGZIP(), []int{227} } func (x *ControllerStateSourceReference) GetFile() string { @@ -17964,7 +18621,7 @@ type StateSla struct { func (x *StateSla) Reset() { *x = StateSla{} - mi := &file_forge_carbide_proto_msgTypes[225] + mi := &file_forge_carbide_proto_msgTypes[228] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -17976,7 +18633,7 @@ func (x *StateSla) String() string { func (*StateSla) ProtoMessage() {} func (x *StateSla) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[225] + mi := &file_forge_carbide_proto_msgTypes[228] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -17989,7 +18646,7 @@ func (x *StateSla) ProtoReflect() protoreflect.Message { // Deprecated: Use StateSla.ProtoReflect.Descriptor instead. func (*StateSla) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{225} + return file_forge_carbide_proto_rawDescGZIP(), []int{228} } func (x *StateSla) GetSla() *durationpb.Duration { @@ -18019,7 +18676,7 @@ type InstanceTenantStatus struct { func (x *InstanceTenantStatus) Reset() { *x = InstanceTenantStatus{} - mi := &file_forge_carbide_proto_msgTypes[226] + mi := &file_forge_carbide_proto_msgTypes[229] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18031,7 +18688,7 @@ func (x *InstanceTenantStatus) String() string { func (*InstanceTenantStatus) ProtoMessage() {} func (x *InstanceTenantStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[226] + mi := &file_forge_carbide_proto_msgTypes[229] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18044,7 +18701,7 @@ func (x *InstanceTenantStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceTenantStatus.ProtoReflect.Descriptor instead. func (*InstanceTenantStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{226} + return file_forge_carbide_proto_rawDescGZIP(), []int{229} } func (x *InstanceTenantStatus) GetState() TenantState { @@ -18075,7 +18732,7 @@ type MachineEvent struct { func (x *MachineEvent) Reset() { *x = MachineEvent{} - mi := &file_forge_carbide_proto_msgTypes[227] + mi := &file_forge_carbide_proto_msgTypes[230] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18087,7 +18744,7 @@ func (x *MachineEvent) String() string { func (*MachineEvent) ProtoMessage() {} func (x *MachineEvent) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[227] + mi := &file_forge_carbide_proto_msgTypes[230] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18100,7 +18757,7 @@ func (x *MachineEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineEvent.ProtoReflect.Descriptor instead. func (*MachineEvent) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{227} + return file_forge_carbide_proto_rawDescGZIP(), []int{230} } func (x *MachineEvent) GetEvent() string { @@ -18148,7 +18805,7 @@ type MachineInterface struct { func (x *MachineInterface) Reset() { *x = MachineInterface{} - mi := &file_forge_carbide_proto_msgTypes[228] + mi := &file_forge_carbide_proto_msgTypes[231] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18160,7 +18817,7 @@ func (x *MachineInterface) String() string { func (*MachineInterface) ProtoMessage() {} func (x *MachineInterface) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[228] + mi := &file_forge_carbide_proto_msgTypes[231] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18173,7 +18830,7 @@ func (x *MachineInterface) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineInterface.ProtoReflect.Descriptor instead. func (*MachineInterface) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{228} + return file_forge_carbide_proto_rawDescGZIP(), []int{231} } func (x *MachineInterface) GetId() *MachineInterfaceId { @@ -18301,7 +18958,7 @@ type InfinibandStatusObservation struct { func (x *InfinibandStatusObservation) Reset() { *x = InfinibandStatusObservation{} - mi := &file_forge_carbide_proto_msgTypes[229] + mi := &file_forge_carbide_proto_msgTypes[232] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18313,7 +18970,7 @@ func (x *InfinibandStatusObservation) String() string { func (*InfinibandStatusObservation) ProtoMessage() {} func (x *InfinibandStatusObservation) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[229] + mi := &file_forge_carbide_proto_msgTypes[232] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18326,7 +18983,7 @@ func (x *InfinibandStatusObservation) ProtoReflect() protoreflect.Message { // Deprecated: Use InfinibandStatusObservation.ProtoReflect.Descriptor instead. func (*InfinibandStatusObservation) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{229} + return file_forge_carbide_proto_rawDescGZIP(), []int{232} } func (x *InfinibandStatusObservation) GetIbInterfaces() []*MachineIbInterface { @@ -18378,7 +19035,7 @@ type MachineIbInterface struct { func (x *MachineIbInterface) Reset() { *x = MachineIbInterface{} - mi := &file_forge_carbide_proto_msgTypes[230] + mi := &file_forge_carbide_proto_msgTypes[233] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18390,7 +19047,7 @@ func (x *MachineIbInterface) String() string { func (*MachineIbInterface) ProtoMessage() {} func (x *MachineIbInterface) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[230] + mi := &file_forge_carbide_proto_msgTypes[233] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18403,7 +19060,7 @@ func (x *MachineIbInterface) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineIbInterface.ProtoReflect.Descriptor instead. func (*MachineIbInterface) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{230} + return file_forge_carbide_proto_rawDescGZIP(), []int{233} } func (x *MachineIbInterface) GetPfGuid() string { @@ -18463,7 +19120,7 @@ type DhcpDiscovery struct { func (x *DhcpDiscovery) Reset() { *x = DhcpDiscovery{} - mi := &file_forge_carbide_proto_msgTypes[231] + mi := &file_forge_carbide_proto_msgTypes[234] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18475,7 +19132,7 @@ func (x *DhcpDiscovery) String() string { func (*DhcpDiscovery) ProtoMessage() {} func (x *DhcpDiscovery) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[231] + mi := &file_forge_carbide_proto_msgTypes[234] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18488,7 +19145,7 @@ func (x *DhcpDiscovery) ProtoReflect() protoreflect.Message { // Deprecated: Use DhcpDiscovery.ProtoReflect.Descriptor instead. func (*DhcpDiscovery) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{231} + return file_forge_carbide_proto_rawDescGZIP(), []int{234} } func (x *DhcpDiscovery) GetMacAddress() string { @@ -18549,7 +19206,7 @@ type ExpireDhcpLeaseRequest struct { func (x *ExpireDhcpLeaseRequest) Reset() { *x = ExpireDhcpLeaseRequest{} - mi := &file_forge_carbide_proto_msgTypes[232] + mi := &file_forge_carbide_proto_msgTypes[235] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18561,7 +19218,7 @@ func (x *ExpireDhcpLeaseRequest) String() string { func (*ExpireDhcpLeaseRequest) ProtoMessage() {} func (x *ExpireDhcpLeaseRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[232] + mi := &file_forge_carbide_proto_msgTypes[235] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18574,7 +19231,7 @@ func (x *ExpireDhcpLeaseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpireDhcpLeaseRequest.ProtoReflect.Descriptor instead. func (*ExpireDhcpLeaseRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{232} + return file_forge_carbide_proto_rawDescGZIP(), []int{235} } func (x *ExpireDhcpLeaseRequest) GetIpAddress() string { @@ -18594,7 +19251,7 @@ type ExpireDhcpLeaseResponse struct { func (x *ExpireDhcpLeaseResponse) Reset() { *x = ExpireDhcpLeaseResponse{} - mi := &file_forge_carbide_proto_msgTypes[233] + mi := &file_forge_carbide_proto_msgTypes[236] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18606,7 +19263,7 @@ func (x *ExpireDhcpLeaseResponse) String() string { func (*ExpireDhcpLeaseResponse) ProtoMessage() {} func (x *ExpireDhcpLeaseResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[233] + mi := &file_forge_carbide_proto_msgTypes[236] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18619,7 +19276,7 @@ func (x *ExpireDhcpLeaseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpireDhcpLeaseResponse.ProtoReflect.Descriptor instead. func (*ExpireDhcpLeaseResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{233} + return file_forge_carbide_proto_rawDescGZIP(), []int{236} } func (x *ExpireDhcpLeaseResponse) GetIpAddress() string { @@ -18657,7 +19314,7 @@ type DhcpRecord struct { func (x *DhcpRecord) Reset() { *x = DhcpRecord{} - mi := &file_forge_carbide_proto_msgTypes[234] + mi := &file_forge_carbide_proto_msgTypes[237] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18669,7 +19326,7 @@ func (x *DhcpRecord) String() string { func (*DhcpRecord) ProtoMessage() {} func (x *DhcpRecord) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[234] + mi := &file_forge_carbide_proto_msgTypes[237] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18682,7 +19339,7 @@ func (x *DhcpRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use DhcpRecord.ProtoReflect.Descriptor instead. func (*DhcpRecord) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{234} + return file_forge_carbide_proto_rawDescGZIP(), []int{237} } func (x *DhcpRecord) GetMachineId() *MachineId { @@ -18778,7 +19435,7 @@ type NetworkSegmentList struct { func (x *NetworkSegmentList) Reset() { *x = NetworkSegmentList{} - mi := &file_forge_carbide_proto_msgTypes[235] + mi := &file_forge_carbide_proto_msgTypes[238] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18790,7 +19447,7 @@ func (x *NetworkSegmentList) String() string { func (*NetworkSegmentList) ProtoMessage() {} func (x *NetworkSegmentList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[235] + mi := &file_forge_carbide_proto_msgTypes[238] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18803,7 +19460,7 @@ func (x *NetworkSegmentList) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkSegmentList.ProtoReflect.Descriptor instead. func (*NetworkSegmentList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{235} + return file_forge_carbide_proto_rawDescGZIP(), []int{238} } func (x *NetworkSegmentList) GetNetworkSegments() []*NetworkSegment { @@ -18823,7 +19480,7 @@ type SSHKeyValidationRequest struct { func (x *SSHKeyValidationRequest) Reset() { *x = SSHKeyValidationRequest{} - mi := &file_forge_carbide_proto_msgTypes[236] + mi := &file_forge_carbide_proto_msgTypes[239] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18835,7 +19492,7 @@ func (x *SSHKeyValidationRequest) String() string { func (*SSHKeyValidationRequest) ProtoMessage() {} func (x *SSHKeyValidationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[236] + mi := &file_forge_carbide_proto_msgTypes[239] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18848,7 +19505,7 @@ func (x *SSHKeyValidationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SSHKeyValidationRequest.ProtoReflect.Descriptor instead. func (*SSHKeyValidationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{236} + return file_forge_carbide_proto_rawDescGZIP(), []int{239} } func (x *SSHKeyValidationRequest) GetUser() string { @@ -18875,7 +19532,7 @@ type SSHKeyValidationResponse struct { func (x *SSHKeyValidationResponse) Reset() { *x = SSHKeyValidationResponse{} - mi := &file_forge_carbide_proto_msgTypes[237] + mi := &file_forge_carbide_proto_msgTypes[240] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18887,7 +19544,7 @@ func (x *SSHKeyValidationResponse) String() string { func (*SSHKeyValidationResponse) ProtoMessage() {} func (x *SSHKeyValidationResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[237] + mi := &file_forge_carbide_proto_msgTypes[240] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18900,7 +19557,7 @@ func (x *SSHKeyValidationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SSHKeyValidationResponse.ProtoReflect.Descriptor instead. func (*SSHKeyValidationResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{237} + return file_forge_carbide_proto_rawDescGZIP(), []int{240} } func (x *SSHKeyValidationResponse) GetIsAuthenticated() bool { @@ -18926,7 +19583,7 @@ type GetBmcCredentialsRequest struct { func (x *GetBmcCredentialsRequest) Reset() { *x = GetBmcCredentialsRequest{} - mi := &file_forge_carbide_proto_msgTypes[238] + mi := &file_forge_carbide_proto_msgTypes[241] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18938,7 +19595,7 @@ func (x *GetBmcCredentialsRequest) String() string { func (*GetBmcCredentialsRequest) ProtoMessage() {} func (x *GetBmcCredentialsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[238] + mi := &file_forge_carbide_proto_msgTypes[241] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18951,7 +19608,7 @@ func (x *GetBmcCredentialsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBmcCredentialsRequest.ProtoReflect.Descriptor instead. func (*GetBmcCredentialsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{238} + return file_forge_carbide_proto_rawDescGZIP(), []int{241} } func (x *GetBmcCredentialsRequest) GetMacAddr() string { @@ -18970,7 +19627,7 @@ type GetBmcCredentialsResponse struct { func (x *GetBmcCredentialsResponse) Reset() { *x = GetBmcCredentialsResponse{} - mi := &file_forge_carbide_proto_msgTypes[239] + mi := &file_forge_carbide_proto_msgTypes[242] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -18982,7 +19639,7 @@ func (x *GetBmcCredentialsResponse) String() string { func (*GetBmcCredentialsResponse) ProtoMessage() {} func (x *GetBmcCredentialsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[239] + mi := &file_forge_carbide_proto_msgTypes[242] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -18995,7 +19652,7 @@ func (x *GetBmcCredentialsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBmcCredentialsResponse.ProtoReflect.Descriptor instead. func (*GetBmcCredentialsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{239} + return file_forge_carbide_proto_rawDescGZIP(), []int{242} } func (x *GetBmcCredentialsResponse) GetCredentials() *BmcCredentials { @@ -19018,7 +19675,7 @@ type BmcCredentials struct { func (x *BmcCredentials) Reset() { *x = BmcCredentials{} - mi := &file_forge_carbide_proto_msgTypes[240] + mi := &file_forge_carbide_proto_msgTypes[243] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19030,7 +19687,7 @@ func (x *BmcCredentials) String() string { func (*BmcCredentials) ProtoMessage() {} func (x *BmcCredentials) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[240] + mi := &file_forge_carbide_proto_msgTypes[243] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19043,7 +19700,7 @@ func (x *BmcCredentials) ProtoReflect() protoreflect.Message { // Deprecated: Use BmcCredentials.ProtoReflect.Descriptor instead. func (*BmcCredentials) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{240} + return file_forge_carbide_proto_rawDescGZIP(), []int{243} } func (x *BmcCredentials) GetType() isBmcCredentials_Type { @@ -19095,7 +19752,7 @@ type GetSiteExplorationRequest struct { func (x *GetSiteExplorationRequest) Reset() { *x = GetSiteExplorationRequest{} - mi := &file_forge_carbide_proto_msgTypes[241] + mi := &file_forge_carbide_proto_msgTypes[244] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19107,7 +19764,7 @@ func (x *GetSiteExplorationRequest) String() string { func (*GetSiteExplorationRequest) ProtoMessage() {} func (x *GetSiteExplorationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[241] + mi := &file_forge_carbide_proto_msgTypes[244] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19120,7 +19777,7 @@ func (x *GetSiteExplorationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSiteExplorationRequest.ProtoReflect.Descriptor instead. func (*GetSiteExplorationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{241} + return file_forge_carbide_proto_rawDescGZIP(), []int{244} } type ClearSiteExplorationErrorRequest struct { @@ -19133,7 +19790,7 @@ type ClearSiteExplorationErrorRequest struct { func (x *ClearSiteExplorationErrorRequest) Reset() { *x = ClearSiteExplorationErrorRequest{} - mi := &file_forge_carbide_proto_msgTypes[242] + mi := &file_forge_carbide_proto_msgTypes[245] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19145,7 +19802,7 @@ func (x *ClearSiteExplorationErrorRequest) String() string { func (*ClearSiteExplorationErrorRequest) ProtoMessage() {} func (x *ClearSiteExplorationErrorRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[242] + mi := &file_forge_carbide_proto_msgTypes[245] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19158,7 +19815,7 @@ func (x *ClearSiteExplorationErrorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClearSiteExplorationErrorRequest.ProtoReflect.Descriptor instead. func (*ClearSiteExplorationErrorRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{242} + return file_forge_carbide_proto_rawDescGZIP(), []int{245} } func (x *ClearSiteExplorationErrorRequest) GetIpAddress() string { @@ -19181,7 +19838,7 @@ type ReExploreEndpointRequest struct { func (x *ReExploreEndpointRequest) Reset() { *x = ReExploreEndpointRequest{} - mi := &file_forge_carbide_proto_msgTypes[243] + mi := &file_forge_carbide_proto_msgTypes[246] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19193,7 +19850,7 @@ func (x *ReExploreEndpointRequest) String() string { func (*ReExploreEndpointRequest) ProtoMessage() {} func (x *ReExploreEndpointRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[243] + mi := &file_forge_carbide_proto_msgTypes[246] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19206,7 +19863,7 @@ func (x *ReExploreEndpointRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReExploreEndpointRequest.ProtoReflect.Descriptor instead. func (*ReExploreEndpointRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{243} + return file_forge_carbide_proto_rawDescGZIP(), []int{246} } func (x *ReExploreEndpointRequest) GetIpAddress() string { @@ -19233,7 +19890,7 @@ type DeleteExploredEndpointRequest struct { func (x *DeleteExploredEndpointRequest) Reset() { *x = DeleteExploredEndpointRequest{} - mi := &file_forge_carbide_proto_msgTypes[244] + mi := &file_forge_carbide_proto_msgTypes[247] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19245,7 +19902,7 @@ func (x *DeleteExploredEndpointRequest) String() string { func (*DeleteExploredEndpointRequest) ProtoMessage() {} func (x *DeleteExploredEndpointRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[244] + mi := &file_forge_carbide_proto_msgTypes[247] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19258,7 +19915,7 @@ func (x *DeleteExploredEndpointRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteExploredEndpointRequest.ProtoReflect.Descriptor instead. func (*DeleteExploredEndpointRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{244} + return file_forge_carbide_proto_rawDescGZIP(), []int{247} } func (x *DeleteExploredEndpointRequest) GetIpAddress() string { @@ -19280,7 +19937,7 @@ type PauseExploredEndpointRemediationRequest struct { func (x *PauseExploredEndpointRemediationRequest) Reset() { *x = PauseExploredEndpointRemediationRequest{} - mi := &file_forge_carbide_proto_msgTypes[245] + mi := &file_forge_carbide_proto_msgTypes[248] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19292,7 +19949,7 @@ func (x *PauseExploredEndpointRemediationRequest) String() string { func (*PauseExploredEndpointRemediationRequest) ProtoMessage() {} func (x *PauseExploredEndpointRemediationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[245] + mi := &file_forge_carbide_proto_msgTypes[248] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19305,7 +19962,7 @@ func (x *PauseExploredEndpointRemediationRequest) ProtoReflect() protoreflect.Me // Deprecated: Use PauseExploredEndpointRemediationRequest.ProtoReflect.Descriptor instead. func (*PauseExploredEndpointRemediationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{245} + return file_forge_carbide_proto_rawDescGZIP(), []int{248} } func (x *PauseExploredEndpointRemediationRequest) GetIpAddress() string { @@ -19334,7 +19991,7 @@ type DeleteExploredEndpointResponse struct { func (x *DeleteExploredEndpointResponse) Reset() { *x = DeleteExploredEndpointResponse{} - mi := &file_forge_carbide_proto_msgTypes[246] + mi := &file_forge_carbide_proto_msgTypes[249] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19346,7 +20003,7 @@ func (x *DeleteExploredEndpointResponse) String() string { func (*DeleteExploredEndpointResponse) ProtoMessage() {} func (x *DeleteExploredEndpointResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[246] + mi := &file_forge_carbide_proto_msgTypes[249] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19359,7 +20016,7 @@ func (x *DeleteExploredEndpointResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteExploredEndpointResponse.ProtoReflect.Descriptor instead. func (*DeleteExploredEndpointResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{246} + return file_forge_carbide_proto_rawDescGZIP(), []int{249} } func (x *DeleteExploredEndpointResponse) GetDeleted() bool { @@ -19388,7 +20045,7 @@ type BmcEndpointRequest struct { func (x *BmcEndpointRequest) Reset() { *x = BmcEndpointRequest{} - mi := &file_forge_carbide_proto_msgTypes[247] + mi := &file_forge_carbide_proto_msgTypes[250] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19400,7 +20057,7 @@ func (x *BmcEndpointRequest) String() string { func (*BmcEndpointRequest) ProtoMessage() {} func (x *BmcEndpointRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[247] + mi := &file_forge_carbide_proto_msgTypes[250] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19413,7 +20070,7 @@ func (x *BmcEndpointRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BmcEndpointRequest.ProtoReflect.Descriptor instead. func (*BmcEndpointRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{247} + return file_forge_carbide_proto_rawDescGZIP(), []int{250} } func (x *BmcEndpointRequest) GetIpAddress() string { @@ -19446,7 +20103,7 @@ type SshTimeoutConfig struct { func (x *SshTimeoutConfig) Reset() { *x = SshTimeoutConfig{} - mi := &file_forge_carbide_proto_msgTypes[248] + mi := &file_forge_carbide_proto_msgTypes[251] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19458,7 +20115,7 @@ func (x *SshTimeoutConfig) String() string { func (*SshTimeoutConfig) ProtoMessage() {} func (x *SshTimeoutConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[248] + mi := &file_forge_carbide_proto_msgTypes[251] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19471,7 +20128,7 @@ func (x *SshTimeoutConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SshTimeoutConfig.ProtoReflect.Descriptor instead. func (*SshTimeoutConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{248} + return file_forge_carbide_proto_rawDescGZIP(), []int{251} } func (x *SshTimeoutConfig) GetTcpConnectionTimeout() uint64 { @@ -19512,7 +20169,7 @@ type SshRequest struct { func (x *SshRequest) Reset() { *x = SshRequest{} - mi := &file_forge_carbide_proto_msgTypes[249] + mi := &file_forge_carbide_proto_msgTypes[252] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19524,7 +20181,7 @@ func (x *SshRequest) String() string { func (*SshRequest) ProtoMessage() {} func (x *SshRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[249] + mi := &file_forge_carbide_proto_msgTypes[252] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19537,7 +20194,7 @@ func (x *SshRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SshRequest.ProtoReflect.Descriptor instead. func (*SshRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{249} + return file_forge_carbide_proto_rawDescGZIP(), []int{252} } func (x *SshRequest) GetEndpointRequest() *BmcEndpointRequest { @@ -19559,7 +20216,7 @@ type CopyBfbToDpuRshimRequest struct { func (x *CopyBfbToDpuRshimRequest) Reset() { *x = CopyBfbToDpuRshimRequest{} - mi := &file_forge_carbide_proto_msgTypes[250] + mi := &file_forge_carbide_proto_msgTypes[253] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19571,7 +20228,7 @@ func (x *CopyBfbToDpuRshimRequest) String() string { func (*CopyBfbToDpuRshimRequest) ProtoMessage() {} func (x *CopyBfbToDpuRshimRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[250] + mi := &file_forge_carbide_proto_msgTypes[253] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19584,7 +20241,7 @@ func (x *CopyBfbToDpuRshimRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CopyBfbToDpuRshimRequest.ProtoReflect.Descriptor instead. func (*CopyBfbToDpuRshimRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{250} + return file_forge_carbide_proto_rawDescGZIP(), []int{253} } func (x *CopyBfbToDpuRshimRequest) GetSshRequest() *SshRequest { @@ -19614,7 +20271,7 @@ type UpdateMachineHardwareInfoRequest struct { func (x *UpdateMachineHardwareInfoRequest) Reset() { *x = UpdateMachineHardwareInfoRequest{} - mi := &file_forge_carbide_proto_msgTypes[251] + mi := &file_forge_carbide_proto_msgTypes[254] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19626,7 +20283,7 @@ func (x *UpdateMachineHardwareInfoRequest) String() string { func (*UpdateMachineHardwareInfoRequest) ProtoMessage() {} func (x *UpdateMachineHardwareInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[251] + mi := &file_forge_carbide_proto_msgTypes[254] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19639,7 +20296,7 @@ func (x *UpdateMachineHardwareInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateMachineHardwareInfoRequest.ProtoReflect.Descriptor instead. func (*UpdateMachineHardwareInfoRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{251} + return file_forge_carbide_proto_rawDescGZIP(), []int{254} } func (x *UpdateMachineHardwareInfoRequest) GetMachineId() *MachineId { @@ -19672,7 +20329,7 @@ type MachineHardwareInfo struct { func (x *MachineHardwareInfo) Reset() { *x = MachineHardwareInfo{} - mi := &file_forge_carbide_proto_msgTypes[252] + mi := &file_forge_carbide_proto_msgTypes[255] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19684,7 +20341,7 @@ func (x *MachineHardwareInfo) String() string { func (*MachineHardwareInfo) ProtoMessage() {} func (x *MachineHardwareInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[252] + mi := &file_forge_carbide_proto_msgTypes[255] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19697,7 +20354,7 @@ func (x *MachineHardwareInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineHardwareInfo.ProtoReflect.Descriptor instead. func (*MachineHardwareInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{252} + return file_forge_carbide_proto_rawDescGZIP(), []int{255} } func (x *MachineHardwareInfo) GetGpus() []*Gpu { @@ -19716,7 +20373,7 @@ type ManagedHostNetworkConfigRequest struct { func (x *ManagedHostNetworkConfigRequest) Reset() { *x = ManagedHostNetworkConfigRequest{} - mi := &file_forge_carbide_proto_msgTypes[253] + mi := &file_forge_carbide_proto_msgTypes[256] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19728,7 +20385,7 @@ func (x *ManagedHostNetworkConfigRequest) String() string { func (*ManagedHostNetworkConfigRequest) ProtoMessage() {} func (x *ManagedHostNetworkConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[253] + mi := &file_forge_carbide_proto_msgTypes[256] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19741,7 +20398,7 @@ func (x *ManagedHostNetworkConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ManagedHostNetworkConfigRequest.ProtoReflect.Descriptor instead. func (*ManagedHostNetworkConfigRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{253} + return file_forge_carbide_proto_rawDescGZIP(), []int{256} } func (x *ManagedHostNetworkConfigRequest) GetDpuMachineId() *MachineId { @@ -19858,13 +20515,16 @@ type ManagedHostNetworkConfigResponse struct { // will still use the dynamically allocated VNI for deriving // route-targets. SiteGlobalVpcVni *uint32 `protobuf:"varint,117,opt,name=site_global_vpc_vni,json=siteGlobalVpcVni,proto3,oneof" json:"site_global_vpc_vni,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // The password the DPU should use when configuring a + // BGP session with the its TOR + BgpLeafSessionPassword *string `protobuf:"bytes,118,opt,name=bgp_leaf_session_password,json=bgpLeafSessionPassword,proto3,oneof" json:"bgp_leaf_session_password,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ManagedHostNetworkConfigResponse) Reset() { *x = ManagedHostNetworkConfigResponse{} - mi := &file_forge_carbide_proto_msgTypes[254] + mi := &file_forge_carbide_proto_msgTypes[257] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -19876,7 +20536,7 @@ func (x *ManagedHostNetworkConfigResponse) String() string { func (*ManagedHostNetworkConfigResponse) ProtoMessage() {} func (x *ManagedHostNetworkConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[254] + mi := &file_forge_carbide_proto_msgTypes[257] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -19889,7 +20549,7 @@ func (x *ManagedHostNetworkConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ManagedHostNetworkConfigResponse.ProtoReflect.Descriptor instead. func (*ManagedHostNetworkConfigResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{254} + return file_forge_carbide_proto_rawDescGZIP(), []int{257} } func (x *ManagedHostNetworkConfigResponse) GetAsn() uint32 { @@ -20144,6 +20804,13 @@ func (x *ManagedHostNetworkConfigResponse) GetSiteGlobalVpcVni() uint32 { return 0 } +func (x *ManagedHostNetworkConfigResponse) GetBgpLeafSessionPassword() string { + if x != nil && x.BgpLeafSessionPassword != nil { + return *x.BgpLeafSessionPassword + } + return "" +} + type TrafficInterceptConfig struct { state protoimpl.MessageState `protogen:"open.v1"` // Optional IP to be used for a VTEP for an additional @@ -20161,7 +20828,7 @@ type TrafficInterceptConfig struct { func (x *TrafficInterceptConfig) Reset() { *x = TrafficInterceptConfig{} - mi := &file_forge_carbide_proto_msgTypes[255] + mi := &file_forge_carbide_proto_msgTypes[258] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20173,7 +20840,7 @@ func (x *TrafficInterceptConfig) String() string { func (*TrafficInterceptConfig) ProtoMessage() {} func (x *TrafficInterceptConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[255] + mi := &file_forge_carbide_proto_msgTypes[258] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20186,7 +20853,7 @@ func (x *TrafficInterceptConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use TrafficInterceptConfig.ProtoReflect.Descriptor instead. func (*TrafficInterceptConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{255} + return file_forge_carbide_proto_rawDescGZIP(), []int{258} } func (x *TrafficInterceptConfig) GetAdditionalOverlayVtepIp() string { @@ -20238,7 +20905,7 @@ type TrafficInterceptBridging struct { func (x *TrafficInterceptBridging) Reset() { *x = TrafficInterceptBridging{} - mi := &file_forge_carbide_proto_msgTypes[256] + mi := &file_forge_carbide_proto_msgTypes[259] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20250,7 +20917,7 @@ func (x *TrafficInterceptBridging) String() string { func (*TrafficInterceptBridging) ProtoMessage() {} func (x *TrafficInterceptBridging) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[256] + mi := &file_forge_carbide_proto_msgTypes[259] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20263,7 +20930,7 @@ func (x *TrafficInterceptBridging) ProtoReflect() protoreflect.Message { // Deprecated: Use TrafficInterceptBridging.ProtoReflect.Descriptor instead. func (*TrafficInterceptBridging) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{256} + return file_forge_carbide_proto_rawDescGZIP(), []int{259} } func (x *TrafficInterceptBridging) GetInternalBridgeRoutingPrefix() string { @@ -20324,7 +20991,7 @@ type ManagedHostDpuExtensionServiceConfig struct { func (x *ManagedHostDpuExtensionServiceConfig) Reset() { *x = ManagedHostDpuExtensionServiceConfig{} - mi := &file_forge_carbide_proto_msgTypes[257] + mi := &file_forge_carbide_proto_msgTypes[260] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20336,7 +21003,7 @@ func (x *ManagedHostDpuExtensionServiceConfig) String() string { func (*ManagedHostDpuExtensionServiceConfig) ProtoMessage() {} func (x *ManagedHostDpuExtensionServiceConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[257] + mi := &file_forge_carbide_proto_msgTypes[260] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20349,7 +21016,7 @@ func (x *ManagedHostDpuExtensionServiceConfig) ProtoReflect() protoreflect.Messa // Deprecated: Use ManagedHostDpuExtensionServiceConfig.ProtoReflect.Descriptor instead. func (*ManagedHostDpuExtensionServiceConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{257} + return file_forge_carbide_proto_rawDescGZIP(), []int{260} } func (x *ManagedHostDpuExtensionServiceConfig) GetServiceId() string { @@ -20418,7 +21085,7 @@ type ManagedHostQuarantineState struct { func (x *ManagedHostQuarantineState) Reset() { *x = ManagedHostQuarantineState{} - mi := &file_forge_carbide_proto_msgTypes[258] + mi := &file_forge_carbide_proto_msgTypes[261] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20430,7 +21097,7 @@ func (x *ManagedHostQuarantineState) String() string { func (*ManagedHostQuarantineState) ProtoMessage() {} func (x *ManagedHostQuarantineState) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[258] + mi := &file_forge_carbide_proto_msgTypes[261] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20443,7 +21110,7 @@ func (x *ManagedHostQuarantineState) ProtoReflect() protoreflect.Message { // Deprecated: Use ManagedHostQuarantineState.ProtoReflect.Descriptor instead. func (*ManagedHostQuarantineState) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{258} + return file_forge_carbide_proto_rawDescGZIP(), []int{261} } func (x *ManagedHostQuarantineState) GetMode() ManagedHostQuarantineMode { @@ -20469,7 +21136,7 @@ type GetManagedHostQuarantineStateRequest struct { func (x *GetManagedHostQuarantineStateRequest) Reset() { *x = GetManagedHostQuarantineStateRequest{} - mi := &file_forge_carbide_proto_msgTypes[259] + mi := &file_forge_carbide_proto_msgTypes[262] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20481,7 +21148,7 @@ func (x *GetManagedHostQuarantineStateRequest) String() string { func (*GetManagedHostQuarantineStateRequest) ProtoMessage() {} func (x *GetManagedHostQuarantineStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[259] + mi := &file_forge_carbide_proto_msgTypes[262] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20494,7 +21161,7 @@ func (x *GetManagedHostQuarantineStateRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use GetManagedHostQuarantineStateRequest.ProtoReflect.Descriptor instead. func (*GetManagedHostQuarantineStateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{259} + return file_forge_carbide_proto_rawDescGZIP(), []int{262} } func (x *GetManagedHostQuarantineStateRequest) GetMachineId() *MachineId { @@ -20513,7 +21180,7 @@ type GetManagedHostQuarantineStateResponse struct { func (x *GetManagedHostQuarantineStateResponse) Reset() { *x = GetManagedHostQuarantineStateResponse{} - mi := &file_forge_carbide_proto_msgTypes[260] + mi := &file_forge_carbide_proto_msgTypes[263] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20525,7 +21192,7 @@ func (x *GetManagedHostQuarantineStateResponse) String() string { func (*GetManagedHostQuarantineStateResponse) ProtoMessage() {} func (x *GetManagedHostQuarantineStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[260] + mi := &file_forge_carbide_proto_msgTypes[263] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20538,7 +21205,7 @@ func (x *GetManagedHostQuarantineStateResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use GetManagedHostQuarantineStateResponse.ProtoReflect.Descriptor instead. func (*GetManagedHostQuarantineStateResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{260} + return file_forge_carbide_proto_rawDescGZIP(), []int{263} } func (x *GetManagedHostQuarantineStateResponse) GetQuarantineState() *ManagedHostQuarantineState { @@ -20558,7 +21225,7 @@ type SetManagedHostQuarantineStateRequest struct { func (x *SetManagedHostQuarantineStateRequest) Reset() { *x = SetManagedHostQuarantineStateRequest{} - mi := &file_forge_carbide_proto_msgTypes[261] + mi := &file_forge_carbide_proto_msgTypes[264] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20570,7 +21237,7 @@ func (x *SetManagedHostQuarantineStateRequest) String() string { func (*SetManagedHostQuarantineStateRequest) ProtoMessage() {} func (x *SetManagedHostQuarantineStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[261] + mi := &file_forge_carbide_proto_msgTypes[264] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20583,7 +21250,7 @@ func (x *SetManagedHostQuarantineStateRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use SetManagedHostQuarantineStateRequest.ProtoReflect.Descriptor instead. func (*SetManagedHostQuarantineStateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{261} + return file_forge_carbide_proto_rawDescGZIP(), []int{264} } func (x *SetManagedHostQuarantineStateRequest) GetMachineId() *MachineId { @@ -20609,7 +21276,7 @@ type SetManagedHostQuarantineStateResponse struct { func (x *SetManagedHostQuarantineStateResponse) Reset() { *x = SetManagedHostQuarantineStateResponse{} - mi := &file_forge_carbide_proto_msgTypes[262] + mi := &file_forge_carbide_proto_msgTypes[265] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20621,7 +21288,7 @@ func (x *SetManagedHostQuarantineStateResponse) String() string { func (*SetManagedHostQuarantineStateResponse) ProtoMessage() {} func (x *SetManagedHostQuarantineStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[262] + mi := &file_forge_carbide_proto_msgTypes[265] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20634,7 +21301,7 @@ func (x *SetManagedHostQuarantineStateResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use SetManagedHostQuarantineStateResponse.ProtoReflect.Descriptor instead. func (*SetManagedHostQuarantineStateResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{262} + return file_forge_carbide_proto_rawDescGZIP(), []int{265} } func (x *SetManagedHostQuarantineStateResponse) GetPriorQuarantineState() *ManagedHostQuarantineState { @@ -20653,7 +21320,7 @@ type ClearManagedHostQuarantineStateRequest struct { func (x *ClearManagedHostQuarantineStateRequest) Reset() { *x = ClearManagedHostQuarantineStateRequest{} - mi := &file_forge_carbide_proto_msgTypes[263] + mi := &file_forge_carbide_proto_msgTypes[266] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20665,7 +21332,7 @@ func (x *ClearManagedHostQuarantineStateRequest) String() string { func (*ClearManagedHostQuarantineStateRequest) ProtoMessage() {} func (x *ClearManagedHostQuarantineStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[263] + mi := &file_forge_carbide_proto_msgTypes[266] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20678,7 +21345,7 @@ func (x *ClearManagedHostQuarantineStateRequest) ProtoReflect() protoreflect.Mes // Deprecated: Use ClearManagedHostQuarantineStateRequest.ProtoReflect.Descriptor instead. func (*ClearManagedHostQuarantineStateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{263} + return file_forge_carbide_proto_rawDescGZIP(), []int{266} } func (x *ClearManagedHostQuarantineStateRequest) GetMachineId() *MachineId { @@ -20697,7 +21364,7 @@ type ClearManagedHostQuarantineStateResponse struct { func (x *ClearManagedHostQuarantineStateResponse) Reset() { *x = ClearManagedHostQuarantineStateResponse{} - mi := &file_forge_carbide_proto_msgTypes[264] + mi := &file_forge_carbide_proto_msgTypes[267] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20709,7 +21376,7 @@ func (x *ClearManagedHostQuarantineStateResponse) String() string { func (*ClearManagedHostQuarantineStateResponse) ProtoMessage() {} func (x *ClearManagedHostQuarantineStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[264] + mi := &file_forge_carbide_proto_msgTypes[267] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20722,7 +21389,7 @@ func (x *ClearManagedHostQuarantineStateResponse) ProtoReflect() protoreflect.Me // Deprecated: Use ClearManagedHostQuarantineStateResponse.ProtoReflect.Descriptor instead. func (*ClearManagedHostQuarantineStateResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{264} + return file_forge_carbide_proto_rawDescGZIP(), []int{267} } func (x *ClearManagedHostQuarantineStateResponse) GetPriorQuarantineState() *ManagedHostQuarantineState { @@ -20744,7 +21411,7 @@ type ManagedHostNetworkConfig struct { func (x *ManagedHostNetworkConfig) Reset() { *x = ManagedHostNetworkConfig{} - mi := &file_forge_carbide_proto_msgTypes[265] + mi := &file_forge_carbide_proto_msgTypes[268] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20756,7 +21423,7 @@ func (x *ManagedHostNetworkConfig) String() string { func (*ManagedHostNetworkConfig) ProtoMessage() {} func (x *ManagedHostNetworkConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[265] + mi := &file_forge_carbide_proto_msgTypes[268] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20769,7 +21436,7 @@ func (x *ManagedHostNetworkConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ManagedHostNetworkConfig.ProtoReflect.Descriptor instead. func (*ManagedHostNetworkConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{265} + return file_forge_carbide_proto_rawDescGZIP(), []int{268} } func (x *ManagedHostNetworkConfig) GetLoopbackIp() string { @@ -20877,7 +21544,7 @@ type FlatInterfaceConfig struct { func (x *FlatInterfaceConfig) Reset() { *x = FlatInterfaceConfig{} - mi := &file_forge_carbide_proto_msgTypes[266] + mi := &file_forge_carbide_proto_msgTypes[269] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -20889,7 +21556,7 @@ func (x *FlatInterfaceConfig) String() string { func (*FlatInterfaceConfig) ProtoMessage() {} func (x *FlatInterfaceConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[266] + mi := &file_forge_carbide_proto_msgTypes[269] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -20902,7 +21569,7 @@ func (x *FlatInterfaceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use FlatInterfaceConfig.ProtoReflect.Descriptor instead. func (*FlatInterfaceConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{266} + return file_forge_carbide_proto_rawDescGZIP(), []int{269} } func (x *FlatInterfaceConfig) GetFunctionType() InterfaceFunctionType { @@ -21058,7 +21725,7 @@ type FlatInterfaceNetworkSecurityGroupConfig struct { func (x *FlatInterfaceNetworkSecurityGroupConfig) Reset() { *x = FlatInterfaceNetworkSecurityGroupConfig{} - mi := &file_forge_carbide_proto_msgTypes[267] + mi := &file_forge_carbide_proto_msgTypes[270] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21070,7 +21737,7 @@ func (x *FlatInterfaceNetworkSecurityGroupConfig) String() string { func (*FlatInterfaceNetworkSecurityGroupConfig) ProtoMessage() {} func (x *FlatInterfaceNetworkSecurityGroupConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[267] + mi := &file_forge_carbide_proto_msgTypes[270] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21083,7 +21750,7 @@ func (x *FlatInterfaceNetworkSecurityGroupConfig) ProtoReflect() protoreflect.Me // Deprecated: Use FlatInterfaceNetworkSecurityGroupConfig.ProtoReflect.Descriptor instead. func (*FlatInterfaceNetworkSecurityGroupConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{267} + return file_forge_carbide_proto_rawDescGZIP(), []int{270} } func (x *FlatInterfaceNetworkSecurityGroupConfig) GetId() string { @@ -21129,7 +21796,7 @@ type ManagedHostNetworkStatusRequest struct { func (x *ManagedHostNetworkStatusRequest) Reset() { *x = ManagedHostNetworkStatusRequest{} - mi := &file_forge_carbide_proto_msgTypes[268] + mi := &file_forge_carbide_proto_msgTypes[271] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21141,7 +21808,7 @@ func (x *ManagedHostNetworkStatusRequest) String() string { func (*ManagedHostNetworkStatusRequest) ProtoMessage() {} func (x *ManagedHostNetworkStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[268] + mi := &file_forge_carbide_proto_msgTypes[271] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21154,7 +21821,7 @@ func (x *ManagedHostNetworkStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ManagedHostNetworkStatusRequest.ProtoReflect.Descriptor instead. func (*ManagedHostNetworkStatusRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{268} + return file_forge_carbide_proto_rawDescGZIP(), []int{271} } type ManagedHostNetworkStatusResponse struct { @@ -21166,7 +21833,7 @@ type ManagedHostNetworkStatusResponse struct { func (x *ManagedHostNetworkStatusResponse) Reset() { *x = ManagedHostNetworkStatusResponse{} - mi := &file_forge_carbide_proto_msgTypes[269] + mi := &file_forge_carbide_proto_msgTypes[272] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21178,7 +21845,7 @@ func (x *ManagedHostNetworkStatusResponse) String() string { func (*ManagedHostNetworkStatusResponse) ProtoMessage() {} func (x *ManagedHostNetworkStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[269] + mi := &file_forge_carbide_proto_msgTypes[272] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21191,7 +21858,7 @@ func (x *ManagedHostNetworkStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ManagedHostNetworkStatusResponse.ProtoReflect.Descriptor instead. func (*ManagedHostNetworkStatusResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{269} + return file_forge_carbide_proto_rawDescGZIP(), []int{272} } func (x *ManagedHostNetworkStatusResponse) GetAll() []*DpuNetworkStatus { @@ -21213,7 +21880,7 @@ type DpuAgentUpgradeCheckRequest struct { func (x *DpuAgentUpgradeCheckRequest) Reset() { *x = DpuAgentUpgradeCheckRequest{} - mi := &file_forge_carbide_proto_msgTypes[270] + mi := &file_forge_carbide_proto_msgTypes[273] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21225,7 +21892,7 @@ func (x *DpuAgentUpgradeCheckRequest) String() string { func (*DpuAgentUpgradeCheckRequest) ProtoMessage() {} func (x *DpuAgentUpgradeCheckRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[270] + mi := &file_forge_carbide_proto_msgTypes[273] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21238,7 +21905,7 @@ func (x *DpuAgentUpgradeCheckRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuAgentUpgradeCheckRequest.ProtoReflect.Descriptor instead. func (*DpuAgentUpgradeCheckRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{270} + return file_forge_carbide_proto_rawDescGZIP(), []int{273} } func (x *DpuAgentUpgradeCheckRequest) GetMachineId() string { @@ -21280,7 +21947,7 @@ type DpuAgentUpgradeCheckResponse struct { func (x *DpuAgentUpgradeCheckResponse) Reset() { *x = DpuAgentUpgradeCheckResponse{} - mi := &file_forge_carbide_proto_msgTypes[271] + mi := &file_forge_carbide_proto_msgTypes[274] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21292,7 +21959,7 @@ func (x *DpuAgentUpgradeCheckResponse) String() string { func (*DpuAgentUpgradeCheckResponse) ProtoMessage() {} func (x *DpuAgentUpgradeCheckResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[271] + mi := &file_forge_carbide_proto_msgTypes[274] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21305,7 +21972,7 @@ func (x *DpuAgentUpgradeCheckResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuAgentUpgradeCheckResponse.ProtoReflect.Descriptor instead. func (*DpuAgentUpgradeCheckResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{271} + return file_forge_carbide_proto_rawDescGZIP(), []int{274} } func (x *DpuAgentUpgradeCheckResponse) GetShouldUpgrade() bool { @@ -21338,7 +22005,7 @@ type DpuAgentUpgradePolicyRequest struct { func (x *DpuAgentUpgradePolicyRequest) Reset() { *x = DpuAgentUpgradePolicyRequest{} - mi := &file_forge_carbide_proto_msgTypes[272] + mi := &file_forge_carbide_proto_msgTypes[275] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21350,7 +22017,7 @@ func (x *DpuAgentUpgradePolicyRequest) String() string { func (*DpuAgentUpgradePolicyRequest) ProtoMessage() {} func (x *DpuAgentUpgradePolicyRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[272] + mi := &file_forge_carbide_proto_msgTypes[275] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21363,7 +22030,7 @@ func (x *DpuAgentUpgradePolicyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuAgentUpgradePolicyRequest.ProtoReflect.Descriptor instead. func (*DpuAgentUpgradePolicyRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{272} + return file_forge_carbide_proto_rawDescGZIP(), []int{275} } func (x *DpuAgentUpgradePolicyRequest) GetNewPolicy() AgentUpgradePolicy { @@ -21385,7 +22052,7 @@ type DpuAgentUpgradePolicyResponse struct { func (x *DpuAgentUpgradePolicyResponse) Reset() { *x = DpuAgentUpgradePolicyResponse{} - mi := &file_forge_carbide_proto_msgTypes[273] + mi := &file_forge_carbide_proto_msgTypes[276] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21397,7 +22064,7 @@ func (x *DpuAgentUpgradePolicyResponse) String() string { func (*DpuAgentUpgradePolicyResponse) ProtoMessage() {} func (x *DpuAgentUpgradePolicyResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[273] + mi := &file_forge_carbide_proto_msgTypes[276] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21410,7 +22077,7 @@ func (x *DpuAgentUpgradePolicyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuAgentUpgradePolicyResponse.ProtoReflect.Descriptor instead. func (*DpuAgentUpgradePolicyResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{273} + return file_forge_carbide_proto_rawDescGZIP(), []int{276} } func (x *DpuAgentUpgradePolicyResponse) GetActivePolicy() AgentUpgradePolicy { @@ -21445,7 +22112,7 @@ type AdminForceDeleteMachineRequest struct { func (x *AdminForceDeleteMachineRequest) Reset() { *x = AdminForceDeleteMachineRequest{} - mi := &file_forge_carbide_proto_msgTypes[274] + mi := &file_forge_carbide_proto_msgTypes[277] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21457,7 +22124,7 @@ func (x *AdminForceDeleteMachineRequest) String() string { func (*AdminForceDeleteMachineRequest) ProtoMessage() {} func (x *AdminForceDeleteMachineRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[274] + mi := &file_forge_carbide_proto_msgTypes[277] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21470,7 +22137,7 @@ func (x *AdminForceDeleteMachineRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminForceDeleteMachineRequest.ProtoReflect.Descriptor instead. func (*AdminForceDeleteMachineRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{274} + return file_forge_carbide_proto_rawDescGZIP(), []int{277} } func (x *AdminForceDeleteMachineRequest) GetHostQuery() string { @@ -21540,7 +22207,7 @@ type AdminForceDeleteMachineResponse struct { func (x *AdminForceDeleteMachineResponse) Reset() { *x = AdminForceDeleteMachineResponse{} - mi := &file_forge_carbide_proto_msgTypes[275] + mi := &file_forge_carbide_proto_msgTypes[278] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21552,7 +22219,7 @@ func (x *AdminForceDeleteMachineResponse) String() string { func (*AdminForceDeleteMachineResponse) ProtoMessage() {} func (x *AdminForceDeleteMachineResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[275] + mi := &file_forge_carbide_proto_msgTypes[278] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21565,7 +22232,7 @@ func (x *AdminForceDeleteMachineResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminForceDeleteMachineResponse.ProtoReflect.Descriptor instead. func (*AdminForceDeleteMachineResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{275} + return file_forge_carbide_proto_rawDescGZIP(), []int{278} } func (x *AdminForceDeleteMachineResponse) GetAllDone() bool { @@ -21716,7 +22383,7 @@ type DisableSecureBootResponse struct { func (x *DisableSecureBootResponse) Reset() { *x = DisableSecureBootResponse{} - mi := &file_forge_carbide_proto_msgTypes[276] + mi := &file_forge_carbide_proto_msgTypes[279] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21728,7 +22395,7 @@ func (x *DisableSecureBootResponse) String() string { func (*DisableSecureBootResponse) ProtoMessage() {} func (x *DisableSecureBootResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[276] + mi := &file_forge_carbide_proto_msgTypes[279] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21741,7 +22408,7 @@ func (x *DisableSecureBootResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DisableSecureBootResponse.ProtoReflect.Descriptor instead. func (*DisableSecureBootResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{276} + return file_forge_carbide_proto_rawDescGZIP(), []int{279} } type LockdownRequest struct { @@ -21755,7 +22422,7 @@ type LockdownRequest struct { func (x *LockdownRequest) Reset() { *x = LockdownRequest{} - mi := &file_forge_carbide_proto_msgTypes[277] + mi := &file_forge_carbide_proto_msgTypes[280] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21767,7 +22434,7 @@ func (x *LockdownRequest) String() string { func (*LockdownRequest) ProtoMessage() {} func (x *LockdownRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[277] + mi := &file_forge_carbide_proto_msgTypes[280] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21780,7 +22447,7 @@ func (x *LockdownRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LockdownRequest.ProtoReflect.Descriptor instead. func (*LockdownRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{277} + return file_forge_carbide_proto_rawDescGZIP(), []int{280} } func (x *LockdownRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -21812,7 +22479,7 @@ type LockdownResponse struct { func (x *LockdownResponse) Reset() { *x = LockdownResponse{} - mi := &file_forge_carbide_proto_msgTypes[278] + mi := &file_forge_carbide_proto_msgTypes[281] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21824,7 +22491,7 @@ func (x *LockdownResponse) String() string { func (*LockdownResponse) ProtoMessage() {} func (x *LockdownResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[278] + mi := &file_forge_carbide_proto_msgTypes[281] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21837,7 +22504,7 @@ func (x *LockdownResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LockdownResponse.ProtoReflect.Descriptor instead. func (*LockdownResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{278} + return file_forge_carbide_proto_rawDescGZIP(), []int{281} } type LockdownStatusRequest struct { @@ -21850,7 +22517,7 @@ type LockdownStatusRequest struct { func (x *LockdownStatusRequest) Reset() { *x = LockdownStatusRequest{} - mi := &file_forge_carbide_proto_msgTypes[279] + mi := &file_forge_carbide_proto_msgTypes[282] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21862,7 +22529,7 @@ func (x *LockdownStatusRequest) String() string { func (*LockdownStatusRequest) ProtoMessage() {} func (x *LockdownStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[279] + mi := &file_forge_carbide_proto_msgTypes[282] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21875,7 +22542,7 @@ func (x *LockdownStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LockdownStatusRequest.ProtoReflect.Descriptor instead. func (*LockdownStatusRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{279} + return file_forge_carbide_proto_rawDescGZIP(), []int{282} } func (x *LockdownStatusRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -21902,7 +22569,7 @@ type MachineSetupStatusRequest struct { func (x *MachineSetupStatusRequest) Reset() { *x = MachineSetupStatusRequest{} - mi := &file_forge_carbide_proto_msgTypes[280] + mi := &file_forge_carbide_proto_msgTypes[283] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21914,7 +22581,7 @@ func (x *MachineSetupStatusRequest) String() string { func (*MachineSetupStatusRequest) ProtoMessage() {} func (x *MachineSetupStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[280] + mi := &file_forge_carbide_proto_msgTypes[283] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21927,7 +22594,7 @@ func (x *MachineSetupStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineSetupStatusRequest.ProtoReflect.Descriptor instead. func (*MachineSetupStatusRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{280} + return file_forge_carbide_proto_rawDescGZIP(), []int{283} } func (x *MachineSetupStatusRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -21955,7 +22622,7 @@ type MachineSetupRequest struct { func (x *MachineSetupRequest) Reset() { *x = MachineSetupRequest{} - mi := &file_forge_carbide_proto_msgTypes[281] + mi := &file_forge_carbide_proto_msgTypes[284] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -21967,7 +22634,7 @@ func (x *MachineSetupRequest) String() string { func (*MachineSetupRequest) ProtoMessage() {} func (x *MachineSetupRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[281] + mi := &file_forge_carbide_proto_msgTypes[284] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -21980,7 +22647,7 @@ func (x *MachineSetupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineSetupRequest.ProtoReflect.Descriptor instead. func (*MachineSetupRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{281} + return file_forge_carbide_proto_rawDescGZIP(), []int{284} } func (x *MachineSetupRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -22012,7 +22679,7 @@ type MachineSetupResponse struct { func (x *MachineSetupResponse) Reset() { *x = MachineSetupResponse{} - mi := &file_forge_carbide_proto_msgTypes[282] + mi := &file_forge_carbide_proto_msgTypes[285] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22024,7 +22691,7 @@ func (x *MachineSetupResponse) String() string { func (*MachineSetupResponse) ProtoMessage() {} func (x *MachineSetupResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[282] + mi := &file_forge_carbide_proto_msgTypes[285] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22037,7 +22704,7 @@ func (x *MachineSetupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineSetupResponse.ProtoReflect.Descriptor instead. func (*MachineSetupResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{282} + return file_forge_carbide_proto_rawDescGZIP(), []int{285} } type SetDpuFirstBootOrderRequest struct { @@ -22051,7 +22718,7 @@ type SetDpuFirstBootOrderRequest struct { func (x *SetDpuFirstBootOrderRequest) Reset() { *x = SetDpuFirstBootOrderRequest{} - mi := &file_forge_carbide_proto_msgTypes[283] + mi := &file_forge_carbide_proto_msgTypes[286] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22063,7 +22730,7 @@ func (x *SetDpuFirstBootOrderRequest) String() string { func (*SetDpuFirstBootOrderRequest) ProtoMessage() {} func (x *SetDpuFirstBootOrderRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[283] + mi := &file_forge_carbide_proto_msgTypes[286] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22076,7 +22743,7 @@ func (x *SetDpuFirstBootOrderRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetDpuFirstBootOrderRequest.ProtoReflect.Descriptor instead. func (*SetDpuFirstBootOrderRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{283} + return file_forge_carbide_proto_rawDescGZIP(), []int{286} } func (x *SetDpuFirstBootOrderRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -22108,7 +22775,7 @@ type SetDpuFirstBootOrderResponse struct { func (x *SetDpuFirstBootOrderResponse) Reset() { *x = SetDpuFirstBootOrderResponse{} - mi := &file_forge_carbide_proto_msgTypes[284] + mi := &file_forge_carbide_proto_msgTypes[287] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22120,7 +22787,7 @@ func (x *SetDpuFirstBootOrderResponse) String() string { func (*SetDpuFirstBootOrderResponse) ProtoMessage() {} func (x *SetDpuFirstBootOrderResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[284] + mi := &file_forge_carbide_proto_msgTypes[287] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22133,7 +22800,7 @@ func (x *SetDpuFirstBootOrderResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetDpuFirstBootOrderResponse.ProtoReflect.Descriptor instead. func (*SetDpuFirstBootOrderResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{284} + return file_forge_carbide_proto_rawDescGZIP(), []int{287} } // Must provide either machine_id or ip/mac pair @@ -22147,7 +22814,7 @@ type AdminRebootRequest struct { func (x *AdminRebootRequest) Reset() { *x = AdminRebootRequest{} - mi := &file_forge_carbide_proto_msgTypes[285] + mi := &file_forge_carbide_proto_msgTypes[288] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22159,7 +22826,7 @@ func (x *AdminRebootRequest) String() string { func (*AdminRebootRequest) ProtoMessage() {} func (x *AdminRebootRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[285] + mi := &file_forge_carbide_proto_msgTypes[288] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22172,7 +22839,7 @@ func (x *AdminRebootRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminRebootRequest.ProtoReflect.Descriptor instead. func (*AdminRebootRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{285} + return file_forge_carbide_proto_rawDescGZIP(), []int{288} } func (x *AdminRebootRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -22197,7 +22864,7 @@ type AdminRebootResponse struct { func (x *AdminRebootResponse) Reset() { *x = AdminRebootResponse{} - mi := &file_forge_carbide_proto_msgTypes[286] + mi := &file_forge_carbide_proto_msgTypes[289] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22209,7 +22876,7 @@ func (x *AdminRebootResponse) String() string { func (*AdminRebootResponse) ProtoMessage() {} func (x *AdminRebootResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[286] + mi := &file_forge_carbide_proto_msgTypes[289] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22222,7 +22889,7 @@ func (x *AdminRebootResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminRebootResponse.ProtoReflect.Descriptor instead. func (*AdminRebootResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{286} + return file_forge_carbide_proto_rawDescGZIP(), []int{289} } // Must provide either machine_id or ip/mac pair @@ -22237,7 +22904,7 @@ type AdminBmcResetRequest struct { func (x *AdminBmcResetRequest) Reset() { *x = AdminBmcResetRequest{} - mi := &file_forge_carbide_proto_msgTypes[287] + mi := &file_forge_carbide_proto_msgTypes[290] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22249,7 +22916,7 @@ func (x *AdminBmcResetRequest) String() string { func (*AdminBmcResetRequest) ProtoMessage() {} func (x *AdminBmcResetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[287] + mi := &file_forge_carbide_proto_msgTypes[290] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22262,7 +22929,7 @@ func (x *AdminBmcResetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminBmcResetRequest.ProtoReflect.Descriptor instead. func (*AdminBmcResetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{287} + return file_forge_carbide_proto_rawDescGZIP(), []int{290} } func (x *AdminBmcResetRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -22294,7 +22961,7 @@ type AdminBmcResetResponse struct { func (x *AdminBmcResetResponse) Reset() { *x = AdminBmcResetResponse{} - mi := &file_forge_carbide_proto_msgTypes[288] + mi := &file_forge_carbide_proto_msgTypes[291] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22306,7 +22973,7 @@ func (x *AdminBmcResetResponse) String() string { func (*AdminBmcResetResponse) ProtoMessage() {} func (x *AdminBmcResetResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[288] + mi := &file_forge_carbide_proto_msgTypes[291] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22319,7 +22986,7 @@ func (x *AdminBmcResetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminBmcResetResponse.ProtoReflect.Descriptor instead. func (*AdminBmcResetResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{288} + return file_forge_carbide_proto_rawDescGZIP(), []int{291} } type EnableInfiniteBootRequest struct { @@ -22332,7 +22999,7 @@ type EnableInfiniteBootRequest struct { func (x *EnableInfiniteBootRequest) Reset() { *x = EnableInfiniteBootRequest{} - mi := &file_forge_carbide_proto_msgTypes[289] + mi := &file_forge_carbide_proto_msgTypes[292] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22344,7 +23011,7 @@ func (x *EnableInfiniteBootRequest) String() string { func (*EnableInfiniteBootRequest) ProtoMessage() {} func (x *EnableInfiniteBootRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[289] + mi := &file_forge_carbide_proto_msgTypes[292] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22357,7 +23024,7 @@ func (x *EnableInfiniteBootRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnableInfiniteBootRequest.ProtoReflect.Descriptor instead. func (*EnableInfiniteBootRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{289} + return file_forge_carbide_proto_rawDescGZIP(), []int{292} } func (x *EnableInfiniteBootRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -22382,7 +23049,7 @@ type EnableInfiniteBootResponse struct { func (x *EnableInfiniteBootResponse) Reset() { *x = EnableInfiniteBootResponse{} - mi := &file_forge_carbide_proto_msgTypes[290] + mi := &file_forge_carbide_proto_msgTypes[293] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22394,7 +23061,7 @@ func (x *EnableInfiniteBootResponse) String() string { func (*EnableInfiniteBootResponse) ProtoMessage() {} func (x *EnableInfiniteBootResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[290] + mi := &file_forge_carbide_proto_msgTypes[293] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22407,7 +23074,7 @@ func (x *EnableInfiniteBootResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EnableInfiniteBootResponse.ProtoReflect.Descriptor instead. func (*EnableInfiniteBootResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{290} + return file_forge_carbide_proto_rawDescGZIP(), []int{293} } type IsInfiniteBootEnabledRequest struct { @@ -22420,7 +23087,7 @@ type IsInfiniteBootEnabledRequest struct { func (x *IsInfiniteBootEnabledRequest) Reset() { *x = IsInfiniteBootEnabledRequest{} - mi := &file_forge_carbide_proto_msgTypes[291] + mi := &file_forge_carbide_proto_msgTypes[294] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22432,7 +23099,7 @@ func (x *IsInfiniteBootEnabledRequest) String() string { func (*IsInfiniteBootEnabledRequest) ProtoMessage() {} func (x *IsInfiniteBootEnabledRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[291] + mi := &file_forge_carbide_proto_msgTypes[294] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22445,7 +23112,7 @@ func (x *IsInfiniteBootEnabledRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IsInfiniteBootEnabledRequest.ProtoReflect.Descriptor instead. func (*IsInfiniteBootEnabledRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{291} + return file_forge_carbide_proto_rawDescGZIP(), []int{294} } func (x *IsInfiniteBootEnabledRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -22471,7 +23138,7 @@ type IsInfiniteBootEnabledResponse struct { func (x *IsInfiniteBootEnabledResponse) Reset() { *x = IsInfiniteBootEnabledResponse{} - mi := &file_forge_carbide_proto_msgTypes[292] + mi := &file_forge_carbide_proto_msgTypes[295] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22483,7 +23150,7 @@ func (x *IsInfiniteBootEnabledResponse) String() string { func (*IsInfiniteBootEnabledResponse) ProtoMessage() {} func (x *IsInfiniteBootEnabledResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[292] + mi := &file_forge_carbide_proto_msgTypes[295] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22496,7 +23163,7 @@ func (x *IsInfiniteBootEnabledResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IsInfiniteBootEnabledResponse.ProtoReflect.Descriptor instead. func (*IsInfiniteBootEnabledResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{292} + return file_forge_carbide_proto_rawDescGZIP(), []int{295} } func (x *IsInfiniteBootEnabledResponse) GetIsEnabled() bool { @@ -22520,7 +23187,7 @@ type BMCMetaDataGetRequest struct { func (x *BMCMetaDataGetRequest) Reset() { *x = BMCMetaDataGetRequest{} - mi := &file_forge_carbide_proto_msgTypes[293] + mi := &file_forge_carbide_proto_msgTypes[296] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22532,7 +23199,7 @@ func (x *BMCMetaDataGetRequest) String() string { func (*BMCMetaDataGetRequest) ProtoMessage() {} func (x *BMCMetaDataGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[293] + mi := &file_forge_carbide_proto_msgTypes[296] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22545,7 +23212,7 @@ func (x *BMCMetaDataGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BMCMetaDataGetRequest.ProtoReflect.Descriptor instead. func (*BMCMetaDataGetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{293} + return file_forge_carbide_proto_rawDescGZIP(), []int{296} } func (x *BMCMetaDataGetRequest) GetMachineId() *MachineId { @@ -22592,7 +23259,7 @@ type BMCMetaDataGetResponse struct { func (x *BMCMetaDataGetResponse) Reset() { *x = BMCMetaDataGetResponse{} - mi := &file_forge_carbide_proto_msgTypes[294] + mi := &file_forge_carbide_proto_msgTypes[297] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22604,7 +23271,7 @@ func (x *BMCMetaDataGetResponse) String() string { func (*BMCMetaDataGetResponse) ProtoMessage() {} func (x *BMCMetaDataGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[294] + mi := &file_forge_carbide_proto_msgTypes[297] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22617,7 +23284,7 @@ func (x *BMCMetaDataGetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BMCMetaDataGetResponse.ProtoReflect.Descriptor instead. func (*BMCMetaDataGetResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{294} + return file_forge_carbide_proto_rawDescGZIP(), []int{297} } func (x *BMCMetaDataGetResponse) GetIp() string { @@ -22687,7 +23354,7 @@ type MachineCredentialsUpdateRequest struct { func (x *MachineCredentialsUpdateRequest) Reset() { *x = MachineCredentialsUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[295] + mi := &file_forge_carbide_proto_msgTypes[298] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22699,7 +23366,7 @@ func (x *MachineCredentialsUpdateRequest) String() string { func (*MachineCredentialsUpdateRequest) ProtoMessage() {} func (x *MachineCredentialsUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[295] + mi := &file_forge_carbide_proto_msgTypes[298] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22712,7 +23379,7 @@ func (x *MachineCredentialsUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCredentialsUpdateRequest.ProtoReflect.Descriptor instead. func (*MachineCredentialsUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{295} + return file_forge_carbide_proto_rawDescGZIP(), []int{298} } func (x *MachineCredentialsUpdateRequest) GetMachineId() *MachineId { @@ -22744,7 +23411,7 @@ type MachineCredentialsUpdateResponse struct { func (x *MachineCredentialsUpdateResponse) Reset() { *x = MachineCredentialsUpdateResponse{} - mi := &file_forge_carbide_proto_msgTypes[296] + mi := &file_forge_carbide_proto_msgTypes[299] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22756,7 +23423,7 @@ func (x *MachineCredentialsUpdateResponse) String() string { func (*MachineCredentialsUpdateResponse) ProtoMessage() {} func (x *MachineCredentialsUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[296] + mi := &file_forge_carbide_proto_msgTypes[299] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22769,7 +23436,7 @@ func (x *MachineCredentialsUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCredentialsUpdateResponse.ProtoReflect.Descriptor instead. func (*MachineCredentialsUpdateResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{296} + return file_forge_carbide_proto_rawDescGZIP(), []int{299} } type ForgeAgentControlRequest struct { @@ -22781,7 +23448,7 @@ type ForgeAgentControlRequest struct { func (x *ForgeAgentControlRequest) Reset() { *x = ForgeAgentControlRequest{} - mi := &file_forge_carbide_proto_msgTypes[297] + mi := &file_forge_carbide_proto_msgTypes[300] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22793,7 +23460,7 @@ func (x *ForgeAgentControlRequest) String() string { func (*ForgeAgentControlRequest) ProtoMessage() {} func (x *ForgeAgentControlRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[297] + mi := &file_forge_carbide_proto_msgTypes[300] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22806,7 +23473,7 @@ func (x *ForgeAgentControlRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ForgeAgentControlRequest.ProtoReflect.Descriptor instead. func (*ForgeAgentControlRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{297} + return file_forge_carbide_proto_rawDescGZIP(), []int{300} } func (x *ForgeAgentControlRequest) GetMachineId() *MachineId { @@ -22826,7 +23493,7 @@ type ForgeAgentControlResponse struct { func (x *ForgeAgentControlResponse) Reset() { *x = ForgeAgentControlResponse{} - mi := &file_forge_carbide_proto_msgTypes[298] + mi := &file_forge_carbide_proto_msgTypes[301] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22838,7 +23505,7 @@ func (x *ForgeAgentControlResponse) String() string { func (*ForgeAgentControlResponse) ProtoMessage() {} func (x *ForgeAgentControlResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[298] + mi := &file_forge_carbide_proto_msgTypes[301] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22851,7 +23518,7 @@ func (x *ForgeAgentControlResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ForgeAgentControlResponse.ProtoReflect.Descriptor instead. func (*ForgeAgentControlResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{298} + return file_forge_carbide_proto_rawDescGZIP(), []int{301} } func (x *ForgeAgentControlResponse) GetAction() ForgeAgentControlResponse_Action { @@ -22882,7 +23549,7 @@ type MachineDiscoveryInfo struct { func (x *MachineDiscoveryInfo) Reset() { *x = MachineDiscoveryInfo{} - mi := &file_forge_carbide_proto_msgTypes[299] + mi := &file_forge_carbide_proto_msgTypes[302] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22894,7 +23561,7 @@ func (x *MachineDiscoveryInfo) String() string { func (*MachineDiscoveryInfo) ProtoMessage() {} func (x *MachineDiscoveryInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[299] + mi := &file_forge_carbide_proto_msgTypes[302] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22907,7 +23574,7 @@ func (x *MachineDiscoveryInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineDiscoveryInfo.ProtoReflect.Descriptor instead. func (*MachineDiscoveryInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{299} + return file_forge_carbide_proto_rawDescGZIP(), []int{302} } func (x *MachineDiscoveryInfo) GetMachineInterfaceId() *MachineInterfaceId { @@ -22959,7 +23626,7 @@ type MachineDiscoveryCompletedRequest struct { func (x *MachineDiscoveryCompletedRequest) Reset() { *x = MachineDiscoveryCompletedRequest{} - mi := &file_forge_carbide_proto_msgTypes[300] + mi := &file_forge_carbide_proto_msgTypes[303] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -22971,7 +23638,7 @@ func (x *MachineDiscoveryCompletedRequest) String() string { func (*MachineDiscoveryCompletedRequest) ProtoMessage() {} func (x *MachineDiscoveryCompletedRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[300] + mi := &file_forge_carbide_proto_msgTypes[303] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -22984,7 +23651,7 @@ func (x *MachineDiscoveryCompletedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineDiscoveryCompletedRequest.ProtoReflect.Descriptor instead. func (*MachineDiscoveryCompletedRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{300} + return file_forge_carbide_proto_rawDescGZIP(), []int{303} } func (x *MachineDiscoveryCompletedRequest) GetMachineId() *MachineId { @@ -23012,7 +23679,7 @@ type MachineCleanupInfo struct { func (x *MachineCleanupInfo) Reset() { *x = MachineCleanupInfo{} - mi := &file_forge_carbide_proto_msgTypes[301] + mi := &file_forge_carbide_proto_msgTypes[304] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23024,7 +23691,7 @@ func (x *MachineCleanupInfo) String() string { func (*MachineCleanupInfo) ProtoMessage() {} func (x *MachineCleanupInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[301] + mi := &file_forge_carbide_proto_msgTypes[304] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23037,7 +23704,7 @@ func (x *MachineCleanupInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCleanupInfo.ProtoReflect.Descriptor instead. func (*MachineCleanupInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{301} + return file_forge_carbide_proto_rawDescGZIP(), []int{304} } func (x *MachineCleanupInfo) GetMachineId() *MachineId { @@ -23093,7 +23760,7 @@ type MachineCertificate struct { func (x *MachineCertificate) Reset() { *x = MachineCertificate{} - mi := &file_forge_carbide_proto_msgTypes[302] + mi := &file_forge_carbide_proto_msgTypes[305] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23105,7 +23772,7 @@ func (x *MachineCertificate) String() string { func (*MachineCertificate) ProtoMessage() {} func (x *MachineCertificate) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[302] + mi := &file_forge_carbide_proto_msgTypes[305] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23118,7 +23785,7 @@ func (x *MachineCertificate) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCertificate.ProtoReflect.Descriptor instead. func (*MachineCertificate) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{302} + return file_forge_carbide_proto_rawDescGZIP(), []int{305} } func (x *MachineCertificate) GetPublicKey() []byte { @@ -23150,7 +23817,7 @@ type MachineCertificateRenewRequest struct { func (x *MachineCertificateRenewRequest) Reset() { *x = MachineCertificateRenewRequest{} - mi := &file_forge_carbide_proto_msgTypes[303] + mi := &file_forge_carbide_proto_msgTypes[306] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23162,7 +23829,7 @@ func (x *MachineCertificateRenewRequest) String() string { func (*MachineCertificateRenewRequest) ProtoMessage() {} func (x *MachineCertificateRenewRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[303] + mi := &file_forge_carbide_proto_msgTypes[306] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23175,7 +23842,7 @@ func (x *MachineCertificateRenewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCertificateRenewRequest.ProtoReflect.Descriptor instead. func (*MachineCertificateRenewRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{303} + return file_forge_carbide_proto_rawDescGZIP(), []int{306} } type MachineCertificateResult struct { @@ -23188,7 +23855,7 @@ type MachineCertificateResult struct { func (x *MachineCertificateResult) Reset() { *x = MachineCertificateResult{} - mi := &file_forge_carbide_proto_msgTypes[304] + mi := &file_forge_carbide_proto_msgTypes[307] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23200,7 +23867,7 @@ func (x *MachineCertificateResult) String() string { func (*MachineCertificateResult) ProtoMessage() {} func (x *MachineCertificateResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[304] + mi := &file_forge_carbide_proto_msgTypes[307] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23213,7 +23880,7 @@ func (x *MachineCertificateResult) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCertificateResult.ProtoReflect.Descriptor instead. func (*MachineCertificateResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{304} + return file_forge_carbide_proto_rawDescGZIP(), []int{307} } func (x *MachineCertificateResult) GetMachineCertificate() *MachineCertificate { @@ -23239,7 +23906,7 @@ type MachineDiscoveryResult struct { func (x *MachineDiscoveryResult) Reset() { *x = MachineDiscoveryResult{} - mi := &file_forge_carbide_proto_msgTypes[305] + mi := &file_forge_carbide_proto_msgTypes[308] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23251,7 +23918,7 @@ func (x *MachineDiscoveryResult) String() string { func (*MachineDiscoveryResult) ProtoMessage() {} func (x *MachineDiscoveryResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[305] + mi := &file_forge_carbide_proto_msgTypes[308] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23264,7 +23931,7 @@ func (x *MachineDiscoveryResult) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineDiscoveryResult.ProtoReflect.Descriptor instead. func (*MachineDiscoveryResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{305} + return file_forge_carbide_proto_rawDescGZIP(), []int{308} } func (x *MachineDiscoveryResult) GetMachineId() *MachineId { @@ -23303,7 +23970,7 @@ type MachineDiscoveryCompletedResponse struct { func (x *MachineDiscoveryCompletedResponse) Reset() { *x = MachineDiscoveryCompletedResponse{} - mi := &file_forge_carbide_proto_msgTypes[306] + mi := &file_forge_carbide_proto_msgTypes[309] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23315,7 +23982,7 @@ func (x *MachineDiscoveryCompletedResponse) String() string { func (*MachineDiscoveryCompletedResponse) ProtoMessage() {} func (x *MachineDiscoveryCompletedResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[306] + mi := &file_forge_carbide_proto_msgTypes[309] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23328,7 +23995,7 @@ func (x *MachineDiscoveryCompletedResponse) ProtoReflect() protoreflect.Message // Deprecated: Use MachineDiscoveryCompletedResponse.ProtoReflect.Descriptor instead. func (*MachineDiscoveryCompletedResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{306} + return file_forge_carbide_proto_rawDescGZIP(), []int{309} } type MachineCleanupResult struct { @@ -23339,7 +24006,7 @@ type MachineCleanupResult struct { func (x *MachineCleanupResult) Reset() { *x = MachineCleanupResult{} - mi := &file_forge_carbide_proto_msgTypes[307] + mi := &file_forge_carbide_proto_msgTypes[310] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23351,7 +24018,7 @@ func (x *MachineCleanupResult) String() string { func (*MachineCleanupResult) ProtoMessage() {} func (x *MachineCleanupResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[307] + mi := &file_forge_carbide_proto_msgTypes[310] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23364,7 +24031,7 @@ func (x *MachineCleanupResult) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCleanupResult.ProtoReflect.Descriptor instead. func (*MachineCleanupResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{307} + return file_forge_carbide_proto_rawDescGZIP(), []int{310} } type ForgeScoutErrorReport struct { @@ -23382,7 +24049,7 @@ type ForgeScoutErrorReport struct { func (x *ForgeScoutErrorReport) Reset() { *x = ForgeScoutErrorReport{} - mi := &file_forge_carbide_proto_msgTypes[308] + mi := &file_forge_carbide_proto_msgTypes[311] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23394,7 +24061,7 @@ func (x *ForgeScoutErrorReport) String() string { func (*ForgeScoutErrorReport) ProtoMessage() {} func (x *ForgeScoutErrorReport) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[308] + mi := &file_forge_carbide_proto_msgTypes[311] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23407,7 +24074,7 @@ func (x *ForgeScoutErrorReport) ProtoReflect() protoreflect.Message { // Deprecated: Use ForgeScoutErrorReport.ProtoReflect.Descriptor instead. func (*ForgeScoutErrorReport) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{308} + return file_forge_carbide_proto_rawDescGZIP(), []int{311} } func (x *ForgeScoutErrorReport) GetMachineId() *MachineId { @@ -23439,7 +24106,7 @@ type ForgeScoutErrorReportResult struct { func (x *ForgeScoutErrorReportResult) Reset() { *x = ForgeScoutErrorReportResult{} - mi := &file_forge_carbide_proto_msgTypes[309] + mi := &file_forge_carbide_proto_msgTypes[312] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23451,7 +24118,7 @@ func (x *ForgeScoutErrorReportResult) String() string { func (*ForgeScoutErrorReportResult) ProtoMessage() {} func (x *ForgeScoutErrorReportResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[309] + mi := &file_forge_carbide_proto_msgTypes[312] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23464,7 +24131,7 @@ func (x *ForgeScoutErrorReportResult) ProtoReflect() protoreflect.Message { // Deprecated: Use ForgeScoutErrorReportResult.ProtoReflect.Descriptor instead. func (*ForgeScoutErrorReportResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{309} + return file_forge_carbide_proto_rawDescGZIP(), []int{312} } type PxeInstructionRequest struct { @@ -23478,7 +24145,7 @@ type PxeInstructionRequest struct { func (x *PxeInstructionRequest) Reset() { *x = PxeInstructionRequest{} - mi := &file_forge_carbide_proto_msgTypes[310] + mi := &file_forge_carbide_proto_msgTypes[313] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23490,7 +24157,7 @@ func (x *PxeInstructionRequest) String() string { func (*PxeInstructionRequest) ProtoMessage() {} func (x *PxeInstructionRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[310] + mi := &file_forge_carbide_proto_msgTypes[313] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23503,7 +24170,7 @@ func (x *PxeInstructionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PxeInstructionRequest.ProtoReflect.Descriptor instead. func (*PxeInstructionRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{310} + return file_forge_carbide_proto_rawDescGZIP(), []int{313} } func (x *PxeInstructionRequest) GetArch() MachineArchitecture { @@ -23528,15 +24195,22 @@ func (x *PxeInstructionRequest) GetProduct() string { } type PxeInstructions struct { - state protoimpl.MessageState `protogen:"open.v1"` - PxeScript string `protobuf:"bytes,1,opt,name=pxe_script,json=pxeScript,proto3" json:"pxe_script,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PxeScript string `protobuf:"bytes,1,opt,name=pxe_script,json=pxeScript,proto3" json:"pxe_script,omitempty"` + // URL overrides for external clients (e.g. on the static-assignments + // segment). When set, carbide-pxe uses these instead of its global + // env var URLs, allowing external hosts to reach services via an + // alternate hostname or IP that they can resolve. + ApiUrlOverride *string `protobuf:"bytes,2,opt,name=api_url_override,json=apiUrlOverride,proto3,oneof" json:"api_url_override,omitempty"` + PxeUrlOverride *string `protobuf:"bytes,3,opt,name=pxe_url_override,json=pxeUrlOverride,proto3,oneof" json:"pxe_url_override,omitempty"` + StaticPxeUrlOverride *string `protobuf:"bytes,4,opt,name=static_pxe_url_override,json=staticPxeUrlOverride,proto3,oneof" json:"static_pxe_url_override,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PxeInstructions) Reset() { *x = PxeInstructions{} - mi := &file_forge_carbide_proto_msgTypes[311] + mi := &file_forge_carbide_proto_msgTypes[314] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23548,7 +24222,7 @@ func (x *PxeInstructions) String() string { func (*PxeInstructions) ProtoMessage() {} func (x *PxeInstructions) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[311] + mi := &file_forge_carbide_proto_msgTypes[314] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23561,7 +24235,7 @@ func (x *PxeInstructions) ProtoReflect() protoreflect.Message { // Deprecated: Use PxeInstructions.ProtoReflect.Descriptor instead. func (*PxeInstructions) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{311} + return file_forge_carbide_proto_rawDescGZIP(), []int{314} } func (x *PxeInstructions) GetPxeScript() string { @@ -23571,6 +24245,27 @@ func (x *PxeInstructions) GetPxeScript() string { return "" } +func (x *PxeInstructions) GetApiUrlOverride() string { + if x != nil && x.ApiUrlOverride != nil { + return *x.ApiUrlOverride + } + return "" +} + +func (x *PxeInstructions) GetPxeUrlOverride() string { + if x != nil && x.PxeUrlOverride != nil { + return *x.PxeUrlOverride + } + return "" +} + +func (x *PxeInstructions) GetStaticPxeUrlOverride() string { + if x != nil && x.StaticPxeUrlOverride != nil { + return *x.StaticPxeUrlOverride + } + return "" +} + type CloudInitDiscoveryInstructions struct { state protoimpl.MessageState `protogen:"open.v1"` MachineInterface *MachineInterface `protobuf:"bytes,1,opt,name=machine_interface,json=machineInterface,proto3" json:"machine_interface,omitempty"` @@ -23594,7 +24289,7 @@ type CloudInitDiscoveryInstructions struct { func (x *CloudInitDiscoveryInstructions) Reset() { *x = CloudInitDiscoveryInstructions{} - mi := &file_forge_carbide_proto_msgTypes[312] + mi := &file_forge_carbide_proto_msgTypes[315] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23606,7 +24301,7 @@ func (x *CloudInitDiscoveryInstructions) String() string { func (*CloudInitDiscoveryInstructions) ProtoMessage() {} func (x *CloudInitDiscoveryInstructions) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[312] + mi := &file_forge_carbide_proto_msgTypes[315] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23619,7 +24314,7 @@ func (x *CloudInitDiscoveryInstructions) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudInitDiscoveryInstructions.ProtoReflect.Descriptor instead. func (*CloudInitDiscoveryInstructions) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{312} + return file_forge_carbide_proto_rawDescGZIP(), []int{315} } func (x *CloudInitDiscoveryInstructions) GetMachineInterface() *MachineInterface { @@ -23696,7 +24391,7 @@ type CloudInitMetaData struct { func (x *CloudInitMetaData) Reset() { *x = CloudInitMetaData{} - mi := &file_forge_carbide_proto_msgTypes[313] + mi := &file_forge_carbide_proto_msgTypes[316] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23708,7 +24403,7 @@ func (x *CloudInitMetaData) String() string { func (*CloudInitMetaData) ProtoMessage() {} func (x *CloudInitMetaData) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[313] + mi := &file_forge_carbide_proto_msgTypes[316] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23721,7 +24416,7 @@ func (x *CloudInitMetaData) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudInitMetaData.ProtoReflect.Descriptor instead. func (*CloudInitMetaData) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{313} + return file_forge_carbide_proto_rawDescGZIP(), []int{316} } func (x *CloudInitMetaData) GetInstanceId() string { @@ -23754,7 +24449,7 @@ type CloudInitInstructionsRequest struct { func (x *CloudInitInstructionsRequest) Reset() { *x = CloudInitInstructionsRequest{} - mi := &file_forge_carbide_proto_msgTypes[314] + mi := &file_forge_carbide_proto_msgTypes[317] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23766,7 +24461,7 @@ func (x *CloudInitInstructionsRequest) String() string { func (*CloudInitInstructionsRequest) ProtoMessage() {} func (x *CloudInitInstructionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[314] + mi := &file_forge_carbide_proto_msgTypes[317] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23779,7 +24474,7 @@ func (x *CloudInitInstructionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudInitInstructionsRequest.ProtoReflect.Descriptor instead. func (*CloudInitInstructionsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{314} + return file_forge_carbide_proto_rawDescGZIP(), []int{317} } func (x *CloudInitInstructionsRequest) GetIp() string { @@ -23794,13 +24489,19 @@ type CloudInitInstructions struct { CustomCloudInit *string `protobuf:"bytes,1,opt,name=custom_cloud_init,json=customCloudInit,proto3,oneof" json:"custom_cloud_init,omitempty"` DiscoveryInstructions *CloudInitDiscoveryInstructions `protobuf:"bytes,2,opt,name=discovery_instructions,json=discoveryInstructions,proto3,oneof" json:"discovery_instructions,omitempty"` Metadata *CloudInitMetaData `protobuf:"bytes,3,opt,name=metadata,proto3,oneof" json:"metadata,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // URL overrides for external clients (e.g. on the static-assignments + // segment). When set, carbide-pxe uses these instead of its global + // env var URLs, allowing external hosts to reach services via an + // alternate hostname or IP that they can resolve. + ApiUrlOverride *string `protobuf:"bytes,4,opt,name=api_url_override,json=apiUrlOverride,proto3,oneof" json:"api_url_override,omitempty"` + PxeUrlOverride *string `protobuf:"bytes,5,opt,name=pxe_url_override,json=pxeUrlOverride,proto3,oneof" json:"pxe_url_override,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CloudInitInstructions) Reset() { *x = CloudInitInstructions{} - mi := &file_forge_carbide_proto_msgTypes[315] + mi := &file_forge_carbide_proto_msgTypes[318] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23812,7 +24513,7 @@ func (x *CloudInitInstructions) String() string { func (*CloudInitInstructions) ProtoMessage() {} func (x *CloudInitInstructions) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[315] + mi := &file_forge_carbide_proto_msgTypes[318] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23825,7 +24526,7 @@ func (x *CloudInitInstructions) ProtoReflect() protoreflect.Message { // Deprecated: Use CloudInitInstructions.ProtoReflect.Descriptor instead. func (*CloudInitInstructions) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{315} + return file_forge_carbide_proto_rawDescGZIP(), []int{318} } func (x *CloudInitInstructions) GetCustomCloudInit() string { @@ -23849,6 +24550,20 @@ func (x *CloudInitInstructions) GetMetadata() *CloudInitMetaData { return nil } +func (x *CloudInitInstructions) GetApiUrlOverride() string { + if x != nil && x.ApiUrlOverride != nil { + return *x.ApiUrlOverride + } + return "" +} + +func (x *CloudInitInstructions) GetPxeUrlOverride() string { + if x != nil && x.PxeUrlOverride != nil { + return *x.PxeUrlOverride + } + return "" +} + // What forge-dpu-agent reports. Will grow over time. type DpuNetworkStatus struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -23879,7 +24594,7 @@ type DpuNetworkStatus struct { func (x *DpuNetworkStatus) Reset() { *x = DpuNetworkStatus{} - mi := &file_forge_carbide_proto_msgTypes[316] + mi := &file_forge_carbide_proto_msgTypes[319] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -23891,7 +24606,7 @@ func (x *DpuNetworkStatus) String() string { func (*DpuNetworkStatus) ProtoMessage() {} func (x *DpuNetworkStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[316] + mi := &file_forge_carbide_proto_msgTypes[319] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -23904,7 +24619,7 @@ func (x *DpuNetworkStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuNetworkStatus.ProtoReflect.Descriptor instead. func (*DpuNetworkStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{316} + return file_forge_carbide_proto_rawDescGZIP(), []int{319} } func (x *DpuNetworkStatus) GetDpuMachineId() *MachineId { @@ -24022,7 +24737,7 @@ type LastDhcpRequest struct { func (x *LastDhcpRequest) Reset() { *x = LastDhcpRequest{} - mi := &file_forge_carbide_proto_msgTypes[317] + mi := &file_forge_carbide_proto_msgTypes[320] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24034,7 +24749,7 @@ func (x *LastDhcpRequest) String() string { func (*LastDhcpRequest) ProtoMessage() {} func (x *LastDhcpRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[317] + mi := &file_forge_carbide_proto_msgTypes[320] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24047,7 +24762,7 @@ func (x *LastDhcpRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LastDhcpRequest.ProtoReflect.Descriptor instead. func (*LastDhcpRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{317} + return file_forge_carbide_proto_rawDescGZIP(), []int{320} } func (x *LastDhcpRequest) GetHostInterfaceId() *MachineInterfaceId { @@ -24081,7 +24796,7 @@ type DpuExtensionServiceStatusObservation struct { func (x *DpuExtensionServiceStatusObservation) Reset() { *x = DpuExtensionServiceStatusObservation{} - mi := &file_forge_carbide_proto_msgTypes[318] + mi := &file_forge_carbide_proto_msgTypes[321] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24093,7 +24808,7 @@ func (x *DpuExtensionServiceStatusObservation) String() string { func (*DpuExtensionServiceStatusObservation) ProtoMessage() {} func (x *DpuExtensionServiceStatusObservation) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[318] + mi := &file_forge_carbide_proto_msgTypes[321] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24106,7 +24821,7 @@ func (x *DpuExtensionServiceStatusObservation) ProtoReflect() protoreflect.Messa // Deprecated: Use DpuExtensionServiceStatusObservation.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceStatusObservation) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{318} + return file_forge_carbide_proto_rawDescGZIP(), []int{321} } func (x *DpuExtensionServiceStatusObservation) GetServiceId() string { @@ -24177,7 +24892,7 @@ type DpuExtensionServiceComponent struct { func (x *DpuExtensionServiceComponent) Reset() { *x = DpuExtensionServiceComponent{} - mi := &file_forge_carbide_proto_msgTypes[319] + mi := &file_forge_carbide_proto_msgTypes[322] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24189,7 +24904,7 @@ func (x *DpuExtensionServiceComponent) String() string { func (*DpuExtensionServiceComponent) ProtoMessage() {} func (x *DpuExtensionServiceComponent) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[319] + mi := &file_forge_carbide_proto_msgTypes[322] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24202,7 +24917,7 @@ func (x *DpuExtensionServiceComponent) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionServiceComponent.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceComponent) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{319} + return file_forge_carbide_proto_rawDescGZIP(), []int{322} } func (x *DpuExtensionServiceComponent) GetName() string { @@ -24242,7 +24957,7 @@ type OptionalHealthReport struct { func (x *OptionalHealthReport) Reset() { *x = OptionalHealthReport{} - mi := &file_forge_carbide_proto_msgTypes[320] + mi := &file_forge_carbide_proto_msgTypes[323] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24254,7 +24969,7 @@ func (x *OptionalHealthReport) String() string { func (*OptionalHealthReport) ProtoMessage() {} func (x *OptionalHealthReport) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[320] + mi := &file_forge_carbide_proto_msgTypes[323] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24267,7 +24982,7 @@ func (x *OptionalHealthReport) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalHealthReport.ProtoReflect.Descriptor instead. func (*OptionalHealthReport) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{320} + return file_forge_carbide_proto_rawDescGZIP(), []int{323} } func (x *OptionalHealthReport) GetReport() *HealthReport { @@ -24287,7 +25002,7 @@ type HealthReportOverride struct { func (x *HealthReportOverride) Reset() { *x = HealthReportOverride{} - mi := &file_forge_carbide_proto_msgTypes[321] + mi := &file_forge_carbide_proto_msgTypes[324] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24299,7 +25014,7 @@ func (x *HealthReportOverride) String() string { func (*HealthReportOverride) ProtoMessage() {} func (x *HealthReportOverride) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[321] + mi := &file_forge_carbide_proto_msgTypes[324] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24312,7 +25027,7 @@ func (x *HealthReportOverride) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthReportOverride.ProtoReflect.Descriptor instead. func (*HealthReportOverride) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{321} + return file_forge_carbide_proto_rawDescGZIP(), []int{324} } func (x *HealthReportOverride) GetReport() *HealthReport { @@ -24339,7 +25054,7 @@ type InsertHealthReportOverrideRequest struct { func (x *InsertHealthReportOverrideRequest) Reset() { *x = InsertHealthReportOverrideRequest{} - mi := &file_forge_carbide_proto_msgTypes[322] + mi := &file_forge_carbide_proto_msgTypes[325] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24351,7 +25066,7 @@ func (x *InsertHealthReportOverrideRequest) String() string { func (*InsertHealthReportOverrideRequest) ProtoMessage() {} func (x *InsertHealthReportOverrideRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[322] + mi := &file_forge_carbide_proto_msgTypes[325] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24364,7 +25079,7 @@ func (x *InsertHealthReportOverrideRequest) ProtoReflect() protoreflect.Message // Deprecated: Use InsertHealthReportOverrideRequest.ProtoReflect.Descriptor instead. func (*InsertHealthReportOverrideRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{322} + return file_forge_carbide_proto_rawDescGZIP(), []int{325} } func (x *InsertHealthReportOverrideRequest) GetMachineId() *MachineId { @@ -24393,7 +25108,7 @@ type InsertRackHealthReportOverrideRequest struct { func (x *InsertRackHealthReportOverrideRequest) Reset() { *x = InsertRackHealthReportOverrideRequest{} - mi := &file_forge_carbide_proto_msgTypes[323] + mi := &file_forge_carbide_proto_msgTypes[326] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24405,7 +25120,7 @@ func (x *InsertRackHealthReportOverrideRequest) String() string { func (*InsertRackHealthReportOverrideRequest) ProtoMessage() {} func (x *InsertRackHealthReportOverrideRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[323] + mi := &file_forge_carbide_proto_msgTypes[326] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24418,7 +25133,7 @@ func (x *InsertRackHealthReportOverrideRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use InsertRackHealthReportOverrideRequest.ProtoReflect.Descriptor instead. func (*InsertRackHealthReportOverrideRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{323} + return file_forge_carbide_proto_rawDescGZIP(), []int{326} } func (x *InsertRackHealthReportOverrideRequest) GetRackId() *RackId { @@ -24447,7 +25162,7 @@ type RemoveRackHealthReportOverrideRequest struct { func (x *RemoveRackHealthReportOverrideRequest) Reset() { *x = RemoveRackHealthReportOverrideRequest{} - mi := &file_forge_carbide_proto_msgTypes[324] + mi := &file_forge_carbide_proto_msgTypes[327] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24459,7 +25174,7 @@ func (x *RemoveRackHealthReportOverrideRequest) String() string { func (*RemoveRackHealthReportOverrideRequest) ProtoMessage() {} func (x *RemoveRackHealthReportOverrideRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[324] + mi := &file_forge_carbide_proto_msgTypes[327] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24472,7 +25187,7 @@ func (x *RemoveRackHealthReportOverrideRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use RemoveRackHealthReportOverrideRequest.ProtoReflect.Descriptor instead. func (*RemoveRackHealthReportOverrideRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{324} + return file_forge_carbide_proto_rawDescGZIP(), []int{327} } func (x *RemoveRackHealthReportOverrideRequest) GetRackId() *RackId { @@ -24499,7 +25214,7 @@ type ListRackHealthReportOverridesRequest struct { func (x *ListRackHealthReportOverridesRequest) Reset() { *x = ListRackHealthReportOverridesRequest{} - mi := &file_forge_carbide_proto_msgTypes[325] + mi := &file_forge_carbide_proto_msgTypes[328] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24511,7 +25226,7 @@ func (x *ListRackHealthReportOverridesRequest) String() string { func (*ListRackHealthReportOverridesRequest) ProtoMessage() {} func (x *ListRackHealthReportOverridesRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[325] + mi := &file_forge_carbide_proto_msgTypes[328] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24524,7 +25239,7 @@ func (x *ListRackHealthReportOverridesRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use ListRackHealthReportOverridesRequest.ProtoReflect.Descriptor instead. func (*ListRackHealthReportOverridesRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{325} + return file_forge_carbide_proto_rawDescGZIP(), []int{328} } func (x *ListRackHealthReportOverridesRequest) GetRackId() *RackId { @@ -24543,7 +25258,7 @@ type ListHealthReportOverrideResponse struct { func (x *ListHealthReportOverrideResponse) Reset() { *x = ListHealthReportOverrideResponse{} - mi := &file_forge_carbide_proto_msgTypes[326] + mi := &file_forge_carbide_proto_msgTypes[329] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24555,7 +25270,7 @@ func (x *ListHealthReportOverrideResponse) String() string { func (*ListHealthReportOverrideResponse) ProtoMessage() {} func (x *ListHealthReportOverrideResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[326] + mi := &file_forge_carbide_proto_msgTypes[329] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24568,7 +25283,7 @@ func (x *ListHealthReportOverrideResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHealthReportOverrideResponse.ProtoReflect.Descriptor instead. func (*ListHealthReportOverrideResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{326} + return file_forge_carbide_proto_rawDescGZIP(), []int{329} } func (x *ListHealthReportOverrideResponse) GetOverrides() []*HealthReportOverride { @@ -24588,7 +25303,7 @@ type RemoveHealthReportOverrideRequest struct { func (x *RemoveHealthReportOverrideRequest) Reset() { *x = RemoveHealthReportOverrideRequest{} - mi := &file_forge_carbide_proto_msgTypes[327] + mi := &file_forge_carbide_proto_msgTypes[330] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24600,7 +25315,7 @@ func (x *RemoveHealthReportOverrideRequest) String() string { func (*RemoveHealthReportOverrideRequest) ProtoMessage() {} func (x *RemoveHealthReportOverrideRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[327] + mi := &file_forge_carbide_proto_msgTypes[330] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24613,7 +25328,7 @@ func (x *RemoveHealthReportOverrideRequest) ProtoReflect() protoreflect.Message // Deprecated: Use RemoveHealthReportOverrideRequest.ProtoReflect.Descriptor instead. func (*RemoveHealthReportOverrideRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{327} + return file_forge_carbide_proto_rawDescGZIP(), []int{330} } func (x *RemoveHealthReportOverrideRequest) GetMachineId() *MachineId { @@ -24669,7 +25384,7 @@ type InstanceInterfaceStatusObservation struct { func (x *InstanceInterfaceStatusObservation) Reset() { *x = InstanceInterfaceStatusObservation{} - mi := &file_forge_carbide_proto_msgTypes[328] + mi := &file_forge_carbide_proto_msgTypes[331] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24681,7 +25396,7 @@ func (x *InstanceInterfaceStatusObservation) String() string { func (*InstanceInterfaceStatusObservation) ProtoMessage() {} func (x *InstanceInterfaceStatusObservation) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[328] + mi := &file_forge_carbide_proto_msgTypes[331] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24694,7 +25409,7 @@ func (x *InstanceInterfaceStatusObservation) ProtoReflect() protoreflect.Message // Deprecated: Use InstanceInterfaceStatusObservation.ProtoReflect.Descriptor instead. func (*InstanceInterfaceStatusObservation) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{328} + return file_forge_carbide_proto_rawDescGZIP(), []int{331} } func (x *InstanceInterfaceStatusObservation) GetFunctionType() InterfaceFunctionType { @@ -24765,7 +25480,7 @@ type FabricInterfaceData struct { func (x *FabricInterfaceData) Reset() { *x = FabricInterfaceData{} - mi := &file_forge_carbide_proto_msgTypes[329] + mi := &file_forge_carbide_proto_msgTypes[332] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24777,7 +25492,7 @@ func (x *FabricInterfaceData) String() string { func (*FabricInterfaceData) ProtoMessage() {} func (x *FabricInterfaceData) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[329] + mi := &file_forge_carbide_proto_msgTypes[332] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24790,7 +25505,7 @@ func (x *FabricInterfaceData) ProtoReflect() protoreflect.Message { // Deprecated: Use FabricInterfaceData.ProtoReflect.Descriptor instead. func (*FabricInterfaceData) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{329} + return file_forge_carbide_proto_rawDescGZIP(), []int{332} } func (x *FabricInterfaceData) GetInterfaceName() string { @@ -24822,7 +25537,7 @@ type LinkData struct { func (x *LinkData) Reset() { *x = LinkData{} - mi := &file_forge_carbide_proto_msgTypes[330] + mi := &file_forge_carbide_proto_msgTypes[333] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24834,7 +25549,7 @@ func (x *LinkData) String() string { func (*LinkData) ProtoMessage() {} func (x *LinkData) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[330] + mi := &file_forge_carbide_proto_msgTypes[333] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24847,7 +25562,7 @@ func (x *LinkData) ProtoReflect() protoreflect.Message { // Deprecated: Use LinkData.ProtoReflect.Descriptor instead. func (*LinkData) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{330} + return file_forge_carbide_proto_rawDescGZIP(), []int{333} } func (x *LinkData) GetLinkType() string { @@ -24897,15 +25612,15 @@ type Tenant struct { OrganizationId string `protobuf:"bytes,1,opt,name=organization_id,json=organizationId,proto3" json:"organization_id,omitempty"` Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` // this string is used to verify that the client has the most updated "view" of a keyset when attempting to modify it - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` - RoutingProfileType *string `protobuf:"bytes,5,opt,name=routing_profile_type,json=routingProfileType,proto3,oneof" json:"routing_profile_type,omitempty"` + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + RoutingProfileType *RoutingProfileType `protobuf:"varint,4,opt,name=routing_profile_type,json=routingProfileType,proto3,enum=forge.RoutingProfileType,oneof" json:"routing_profile_type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Tenant) Reset() { *x = Tenant{} - mi := &file_forge_carbide_proto_msgTypes[331] + mi := &file_forge_carbide_proto_msgTypes[334] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24917,7 +25632,7 @@ func (x *Tenant) String() string { func (*Tenant) ProtoMessage() {} func (x *Tenant) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[331] + mi := &file_forge_carbide_proto_msgTypes[334] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24930,7 +25645,7 @@ func (x *Tenant) ProtoReflect() protoreflect.Message { // Deprecated: Use Tenant.ProtoReflect.Descriptor instead. func (*Tenant) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{331} + return file_forge_carbide_proto_rawDescGZIP(), []int{334} } func (x *Tenant) GetOrganizationId() string { @@ -24954,26 +25669,26 @@ func (x *Tenant) GetVersion() string { return "" } -func (x *Tenant) GetRoutingProfileType() string { +func (x *Tenant) GetRoutingProfileType() RoutingProfileType { if x != nil && x.RoutingProfileType != nil { return *x.RoutingProfileType } - return "" + return RoutingProfileType_ROUTING_PROFILE_TYPE_EXTERNAL } type CreateTenantRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // this organization ID must be globally unique - OrganizationId string `protobuf:"bytes,1,opt,name=organization_id,json=organizationId,proto3" json:"organization_id,omitempty"` - Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` - RoutingProfileType *string `protobuf:"bytes,4,opt,name=routing_profile_type,json=routingProfileType,proto3,oneof" json:"routing_profile_type,omitempty"` + OrganizationId string `protobuf:"bytes,1,opt,name=organization_id,json=organizationId,proto3" json:"organization_id,omitempty"` + Metadata *Metadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` + RoutingProfileType *RoutingProfileType `protobuf:"varint,3,opt,name=routing_profile_type,json=routingProfileType,proto3,enum=forge.RoutingProfileType,oneof" json:"routing_profile_type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CreateTenantRequest) Reset() { *x = CreateTenantRequest{} - mi := &file_forge_carbide_proto_msgTypes[332] + mi := &file_forge_carbide_proto_msgTypes[335] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -24985,7 +25700,7 @@ func (x *CreateTenantRequest) String() string { func (*CreateTenantRequest) ProtoMessage() {} func (x *CreateTenantRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[332] + mi := &file_forge_carbide_proto_msgTypes[335] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -24998,7 +25713,7 @@ func (x *CreateTenantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTenantRequest.ProtoReflect.Descriptor instead. func (*CreateTenantRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{332} + return file_forge_carbide_proto_rawDescGZIP(), []int{335} } func (x *CreateTenantRequest) GetOrganizationId() string { @@ -25015,11 +25730,11 @@ func (x *CreateTenantRequest) GetMetadata() *Metadata { return nil } -func (x *CreateTenantRequest) GetRoutingProfileType() string { +func (x *CreateTenantRequest) GetRoutingProfileType() RoutingProfileType { if x != nil && x.RoutingProfileType != nil { return *x.RoutingProfileType } - return "" + return RoutingProfileType_ROUTING_PROFILE_TYPE_EXTERNAL } type CreateTenantResponse struct { @@ -25031,7 +25746,7 @@ type CreateTenantResponse struct { func (x *CreateTenantResponse) Reset() { *x = CreateTenantResponse{} - mi := &file_forge_carbide_proto_msgTypes[333] + mi := &file_forge_carbide_proto_msgTypes[336] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25043,7 +25758,7 @@ func (x *CreateTenantResponse) String() string { func (*CreateTenantResponse) ProtoMessage() {} func (x *CreateTenantResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[333] + mi := &file_forge_carbide_proto_msgTypes[336] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25056,7 +25771,7 @@ func (x *CreateTenantResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTenantResponse.ProtoReflect.Descriptor instead. func (*CreateTenantResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{333} + return file_forge_carbide_proto_rawDescGZIP(), []int{336} } func (x *CreateTenantResponse) GetTenant() *Tenant { @@ -25074,14 +25789,14 @@ type UpdateTenantRequest struct { // otherwise it will return a concurrency related error. IfVersionMatch *string `protobuf:"bytes,3,opt,name=if_version_match,json=ifVersionMatch,proto3,oneof" json:"if_version_match,omitempty"` // Updating will only be allowed if the tenant has no active VPCs - RoutingProfileType *string `protobuf:"bytes,5,opt,name=routing_profile_type,json=routingProfileType,proto3,oneof" json:"routing_profile_type,omitempty"` + RoutingProfileType *RoutingProfileType `protobuf:"varint,4,opt,name=routing_profile_type,json=routingProfileType,proto3,enum=forge.RoutingProfileType,oneof" json:"routing_profile_type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *UpdateTenantRequest) Reset() { *x = UpdateTenantRequest{} - mi := &file_forge_carbide_proto_msgTypes[334] + mi := &file_forge_carbide_proto_msgTypes[337] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25093,7 +25808,7 @@ func (x *UpdateTenantRequest) String() string { func (*UpdateTenantRequest) ProtoMessage() {} func (x *UpdateTenantRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[334] + mi := &file_forge_carbide_proto_msgTypes[337] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25106,7 +25821,7 @@ func (x *UpdateTenantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTenantRequest.ProtoReflect.Descriptor instead. func (*UpdateTenantRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{334} + return file_forge_carbide_proto_rawDescGZIP(), []int{337} } func (x *UpdateTenantRequest) GetOrganizationId() string { @@ -25130,11 +25845,11 @@ func (x *UpdateTenantRequest) GetIfVersionMatch() string { return "" } -func (x *UpdateTenantRequest) GetRoutingProfileType() string { +func (x *UpdateTenantRequest) GetRoutingProfileType() RoutingProfileType { if x != nil && x.RoutingProfileType != nil { return *x.RoutingProfileType } - return "" + return RoutingProfileType_ROUTING_PROFILE_TYPE_EXTERNAL } type UpdateTenantResponse struct { @@ -25147,7 +25862,7 @@ type UpdateTenantResponse struct { func (x *UpdateTenantResponse) Reset() { *x = UpdateTenantResponse{} - mi := &file_forge_carbide_proto_msgTypes[335] + mi := &file_forge_carbide_proto_msgTypes[338] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25159,7 +25874,7 @@ func (x *UpdateTenantResponse) String() string { func (*UpdateTenantResponse) ProtoMessage() {} func (x *UpdateTenantResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[335] + mi := &file_forge_carbide_proto_msgTypes[338] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25172,7 +25887,7 @@ func (x *UpdateTenantResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTenantResponse.ProtoReflect.Descriptor instead. func (*UpdateTenantResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{335} + return file_forge_carbide_proto_rawDescGZIP(), []int{338} } func (x *UpdateTenantResponse) GetTenant() *Tenant { @@ -25191,7 +25906,7 @@ type FindTenantRequest struct { func (x *FindTenantRequest) Reset() { *x = FindTenantRequest{} - mi := &file_forge_carbide_proto_msgTypes[336] + mi := &file_forge_carbide_proto_msgTypes[339] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25203,7 +25918,7 @@ func (x *FindTenantRequest) String() string { func (*FindTenantRequest) ProtoMessage() {} func (x *FindTenantRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[336] + mi := &file_forge_carbide_proto_msgTypes[339] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25216,7 +25931,7 @@ func (x *FindTenantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindTenantRequest.ProtoReflect.Descriptor instead. func (*FindTenantRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{336} + return file_forge_carbide_proto_rawDescGZIP(), []int{339} } func (x *FindTenantRequest) GetTenantOrganizationId() string { @@ -25235,7 +25950,7 @@ type FindTenantResponse struct { func (x *FindTenantResponse) Reset() { *x = FindTenantResponse{} - mi := &file_forge_carbide_proto_msgTypes[337] + mi := &file_forge_carbide_proto_msgTypes[340] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25247,7 +25962,7 @@ func (x *FindTenantResponse) String() string { func (*FindTenantResponse) ProtoMessage() {} func (x *FindTenantResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[337] + mi := &file_forge_carbide_proto_msgTypes[340] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25260,7 +25975,7 @@ func (x *FindTenantResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindTenantResponse.ProtoReflect.Descriptor instead. func (*FindTenantResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{337} + return file_forge_carbide_proto_rawDescGZIP(), []int{340} } func (x *FindTenantResponse) GetTenant() *Tenant { @@ -25283,7 +25998,7 @@ type TenantKeysetIdentifier struct { func (x *TenantKeysetIdentifier) Reset() { *x = TenantKeysetIdentifier{} - mi := &file_forge_carbide_proto_msgTypes[338] + mi := &file_forge_carbide_proto_msgTypes[341] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25295,7 +26010,7 @@ func (x *TenantKeysetIdentifier) String() string { func (*TenantKeysetIdentifier) ProtoMessage() {} func (x *TenantKeysetIdentifier) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[338] + mi := &file_forge_carbide_proto_msgTypes[341] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25308,7 +26023,7 @@ func (x *TenantKeysetIdentifier) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantKeysetIdentifier.ProtoReflect.Descriptor instead. func (*TenantKeysetIdentifier) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{338} + return file_forge_carbide_proto_rawDescGZIP(), []int{341} } func (x *TenantKeysetIdentifier) GetOrganizationId() string { @@ -25335,7 +26050,7 @@ type TenantPublicKey struct { func (x *TenantPublicKey) Reset() { *x = TenantPublicKey{} - mi := &file_forge_carbide_proto_msgTypes[339] + mi := &file_forge_carbide_proto_msgTypes[342] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25347,7 +26062,7 @@ func (x *TenantPublicKey) String() string { func (*TenantPublicKey) ProtoMessage() {} func (x *TenantPublicKey) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[339] + mi := &file_forge_carbide_proto_msgTypes[342] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25360,7 +26075,7 @@ func (x *TenantPublicKey) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantPublicKey.ProtoReflect.Descriptor instead. func (*TenantPublicKey) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{339} + return file_forge_carbide_proto_rawDescGZIP(), []int{342} } func (x *TenantPublicKey) GetPublicKey() string { @@ -25386,7 +26101,7 @@ type TenantKeysetContent struct { func (x *TenantKeysetContent) Reset() { *x = TenantKeysetContent{} - mi := &file_forge_carbide_proto_msgTypes[340] + mi := &file_forge_carbide_proto_msgTypes[343] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25398,7 +26113,7 @@ func (x *TenantKeysetContent) String() string { func (*TenantKeysetContent) ProtoMessage() {} func (x *TenantKeysetContent) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[340] + mi := &file_forge_carbide_proto_msgTypes[343] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25411,7 +26126,7 @@ func (x *TenantKeysetContent) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantKeysetContent.ProtoReflect.Descriptor instead. func (*TenantKeysetContent) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{340} + return file_forge_carbide_proto_rawDescGZIP(), []int{343} } func (x *TenantKeysetContent) GetPublicKeys() []*TenantPublicKey { @@ -25433,7 +26148,7 @@ type TenantKeyset struct { func (x *TenantKeyset) Reset() { *x = TenantKeyset{} - mi := &file_forge_carbide_proto_msgTypes[341] + mi := &file_forge_carbide_proto_msgTypes[344] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25445,7 +26160,7 @@ func (x *TenantKeyset) String() string { func (*TenantKeyset) ProtoMessage() {} func (x *TenantKeyset) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[341] + mi := &file_forge_carbide_proto_msgTypes[344] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25458,7 +26173,7 @@ func (x *TenantKeyset) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantKeyset.ProtoReflect.Descriptor instead. func (*TenantKeyset) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{341} + return file_forge_carbide_proto_rawDescGZIP(), []int{344} } func (x *TenantKeyset) GetKeysetIdentifier() *TenantKeysetIdentifier { @@ -25497,7 +26212,7 @@ type CreateTenantKeysetRequest struct { func (x *CreateTenantKeysetRequest) Reset() { *x = CreateTenantKeysetRequest{} - mi := &file_forge_carbide_proto_msgTypes[342] + mi := &file_forge_carbide_proto_msgTypes[345] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25509,7 +26224,7 @@ func (x *CreateTenantKeysetRequest) String() string { func (*CreateTenantKeysetRequest) ProtoMessage() {} func (x *CreateTenantKeysetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[342] + mi := &file_forge_carbide_proto_msgTypes[345] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25522,7 +26237,7 @@ func (x *CreateTenantKeysetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTenantKeysetRequest.ProtoReflect.Descriptor instead. func (*CreateTenantKeysetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{342} + return file_forge_carbide_proto_rawDescGZIP(), []int{345} } func (x *CreateTenantKeysetRequest) GetKeysetIdentifier() *TenantKeysetIdentifier { @@ -25555,7 +26270,7 @@ type CreateTenantKeysetResponse struct { func (x *CreateTenantKeysetResponse) Reset() { *x = CreateTenantKeysetResponse{} - mi := &file_forge_carbide_proto_msgTypes[343] + mi := &file_forge_carbide_proto_msgTypes[346] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25567,7 +26282,7 @@ func (x *CreateTenantKeysetResponse) String() string { func (*CreateTenantKeysetResponse) ProtoMessage() {} func (x *CreateTenantKeysetResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[343] + mi := &file_forge_carbide_proto_msgTypes[346] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25580,7 +26295,7 @@ func (x *CreateTenantKeysetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTenantKeysetResponse.ProtoReflect.Descriptor instead. func (*CreateTenantKeysetResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{343} + return file_forge_carbide_proto_rawDescGZIP(), []int{346} } func (x *CreateTenantKeysetResponse) GetKeyset() *TenantKeyset { @@ -25599,7 +26314,7 @@ type TenantKeySetList struct { func (x *TenantKeySetList) Reset() { *x = TenantKeySetList{} - mi := &file_forge_carbide_proto_msgTypes[344] + mi := &file_forge_carbide_proto_msgTypes[347] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25611,7 +26326,7 @@ func (x *TenantKeySetList) String() string { func (*TenantKeySetList) ProtoMessage() {} func (x *TenantKeySetList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[344] + mi := &file_forge_carbide_proto_msgTypes[347] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25624,7 +26339,7 @@ func (x *TenantKeySetList) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantKeySetList.ProtoReflect.Descriptor instead. func (*TenantKeySetList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{344} + return file_forge_carbide_proto_rawDescGZIP(), []int{347} } func (x *TenantKeySetList) GetKeyset() []*TenantKeyset { @@ -25652,7 +26367,7 @@ type UpdateTenantKeysetRequest struct { func (x *UpdateTenantKeysetRequest) Reset() { *x = UpdateTenantKeysetRequest{} - mi := &file_forge_carbide_proto_msgTypes[345] + mi := &file_forge_carbide_proto_msgTypes[348] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25664,7 +26379,7 @@ func (x *UpdateTenantKeysetRequest) String() string { func (*UpdateTenantKeysetRequest) ProtoMessage() {} func (x *UpdateTenantKeysetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[345] + mi := &file_forge_carbide_proto_msgTypes[348] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25677,7 +26392,7 @@ func (x *UpdateTenantKeysetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTenantKeysetRequest.ProtoReflect.Descriptor instead. func (*UpdateTenantKeysetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{345} + return file_forge_carbide_proto_rawDescGZIP(), []int{348} } func (x *UpdateTenantKeysetRequest) GetKeysetIdentifier() *TenantKeysetIdentifier { @@ -25716,7 +26431,7 @@ type UpdateTenantKeysetResponse struct { func (x *UpdateTenantKeysetResponse) Reset() { *x = UpdateTenantKeysetResponse{} - mi := &file_forge_carbide_proto_msgTypes[346] + mi := &file_forge_carbide_proto_msgTypes[349] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25728,7 +26443,7 @@ func (x *UpdateTenantKeysetResponse) String() string { func (*UpdateTenantKeysetResponse) ProtoMessage() {} func (x *UpdateTenantKeysetResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[346] + mi := &file_forge_carbide_proto_msgTypes[349] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25741,7 +26456,7 @@ func (x *UpdateTenantKeysetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTenantKeysetResponse.ProtoReflect.Descriptor instead. func (*UpdateTenantKeysetResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{346} + return file_forge_carbide_proto_rawDescGZIP(), []int{349} } type DeleteTenantKeysetRequest struct { @@ -25753,7 +26468,7 @@ type DeleteTenantKeysetRequest struct { func (x *DeleteTenantKeysetRequest) Reset() { *x = DeleteTenantKeysetRequest{} - mi := &file_forge_carbide_proto_msgTypes[347] + mi := &file_forge_carbide_proto_msgTypes[350] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25765,7 +26480,7 @@ func (x *DeleteTenantKeysetRequest) String() string { func (*DeleteTenantKeysetRequest) ProtoMessage() {} func (x *DeleteTenantKeysetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[347] + mi := &file_forge_carbide_proto_msgTypes[350] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25778,7 +26493,7 @@ func (x *DeleteTenantKeysetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTenantKeysetRequest.ProtoReflect.Descriptor instead. func (*DeleteTenantKeysetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{347} + return file_forge_carbide_proto_rawDescGZIP(), []int{350} } func (x *DeleteTenantKeysetRequest) GetKeysetIdentifier() *TenantKeysetIdentifier { @@ -25796,7 +26511,7 @@ type DeleteTenantKeysetResponse struct { func (x *DeleteTenantKeysetResponse) Reset() { *x = DeleteTenantKeysetResponse{} - mi := &file_forge_carbide_proto_msgTypes[348] + mi := &file_forge_carbide_proto_msgTypes[351] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25808,7 +26523,7 @@ func (x *DeleteTenantKeysetResponse) String() string { func (*DeleteTenantKeysetResponse) ProtoMessage() {} func (x *DeleteTenantKeysetResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[348] + mi := &file_forge_carbide_proto_msgTypes[351] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25821,7 +26536,7 @@ func (x *DeleteTenantKeysetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTenantKeysetResponse.ProtoReflect.Descriptor instead. func (*DeleteTenantKeysetResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{348} + return file_forge_carbide_proto_rawDescGZIP(), []int{351} } type TenantKeysetSearchFilter struct { @@ -25833,7 +26548,7 @@ type TenantKeysetSearchFilter struct { func (x *TenantKeysetSearchFilter) Reset() { *x = TenantKeysetSearchFilter{} - mi := &file_forge_carbide_proto_msgTypes[349] + mi := &file_forge_carbide_proto_msgTypes[352] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25845,7 +26560,7 @@ func (x *TenantKeysetSearchFilter) String() string { func (*TenantKeysetSearchFilter) ProtoMessage() {} func (x *TenantKeysetSearchFilter) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[349] + mi := &file_forge_carbide_proto_msgTypes[352] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25858,7 +26573,7 @@ func (x *TenantKeysetSearchFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantKeysetSearchFilter.ProtoReflect.Descriptor instead. func (*TenantKeysetSearchFilter) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{349} + return file_forge_carbide_proto_rawDescGZIP(), []int{352} } func (x *TenantKeysetSearchFilter) GetTenantOrgId() string { @@ -25877,7 +26592,7 @@ type TenantKeysetIdList struct { func (x *TenantKeysetIdList) Reset() { *x = TenantKeysetIdList{} - mi := &file_forge_carbide_proto_msgTypes[350] + mi := &file_forge_carbide_proto_msgTypes[353] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25889,7 +26604,7 @@ func (x *TenantKeysetIdList) String() string { func (*TenantKeysetIdList) ProtoMessage() {} func (x *TenantKeysetIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[350] + mi := &file_forge_carbide_proto_msgTypes[353] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25902,7 +26617,7 @@ func (x *TenantKeysetIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantKeysetIdList.ProtoReflect.Descriptor instead. func (*TenantKeysetIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{350} + return file_forge_carbide_proto_rawDescGZIP(), []int{353} } func (x *TenantKeysetIdList) GetKeysetIds() []*TenantKeysetIdentifier { @@ -25922,7 +26637,7 @@ type TenantKeysetsByIdsRequest struct { func (x *TenantKeysetsByIdsRequest) Reset() { *x = TenantKeysetsByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[351] + mi := &file_forge_carbide_proto_msgTypes[354] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25934,7 +26649,7 @@ func (x *TenantKeysetsByIdsRequest) String() string { func (*TenantKeysetsByIdsRequest) ProtoMessage() {} func (x *TenantKeysetsByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[351] + mi := &file_forge_carbide_proto_msgTypes[354] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -25947,7 +26662,7 @@ func (x *TenantKeysetsByIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TenantKeysetsByIdsRequest.ProtoReflect.Descriptor instead. func (*TenantKeysetsByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{351} + return file_forge_carbide_proto_rawDescGZIP(), []int{354} } func (x *TenantKeysetsByIdsRequest) GetKeysetIds() []*TenantKeysetIdentifier { @@ -25979,7 +26694,7 @@ type ValidateTenantPublicKeyRequest struct { func (x *ValidateTenantPublicKeyRequest) Reset() { *x = ValidateTenantPublicKeyRequest{} - mi := &file_forge_carbide_proto_msgTypes[352] + mi := &file_forge_carbide_proto_msgTypes[355] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -25991,7 +26706,7 @@ func (x *ValidateTenantPublicKeyRequest) String() string { func (*ValidateTenantPublicKeyRequest) ProtoMessage() {} func (x *ValidateTenantPublicKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[352] + mi := &file_forge_carbide_proto_msgTypes[355] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26004,7 +26719,7 @@ func (x *ValidateTenantPublicKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateTenantPublicKeyRequest.ProtoReflect.Descriptor instead. func (*ValidateTenantPublicKeyRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{352} + return file_forge_carbide_proto_rawDescGZIP(), []int{355} } func (x *ValidateTenantPublicKeyRequest) GetInstanceId() string { @@ -26030,7 +26745,7 @@ type ValidateTenantPublicKeyResponse struct { func (x *ValidateTenantPublicKeyResponse) Reset() { *x = ValidateTenantPublicKeyResponse{} - mi := &file_forge_carbide_proto_msgTypes[353] + mi := &file_forge_carbide_proto_msgTypes[356] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26042,7 +26757,7 @@ func (x *ValidateTenantPublicKeyResponse) String() string { func (*ValidateTenantPublicKeyResponse) ProtoMessage() {} func (x *ValidateTenantPublicKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[353] + mi := &file_forge_carbide_proto_msgTypes[356] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26055,7 +26770,7 @@ func (x *ValidateTenantPublicKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateTenantPublicKeyResponse.ProtoReflect.Descriptor instead. func (*ValidateTenantPublicKeyResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{353} + return file_forge_carbide_proto_rawDescGZIP(), []int{356} } type ListResourcePoolsRequest struct { @@ -26067,7 +26782,7 @@ type ListResourcePoolsRequest struct { func (x *ListResourcePoolsRequest) Reset() { *x = ListResourcePoolsRequest{} - mi := &file_forge_carbide_proto_msgTypes[354] + mi := &file_forge_carbide_proto_msgTypes[357] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26079,7 +26794,7 @@ func (x *ListResourcePoolsRequest) String() string { func (*ListResourcePoolsRequest) ProtoMessage() {} func (x *ListResourcePoolsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[354] + mi := &file_forge_carbide_proto_msgTypes[357] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26092,7 +26807,7 @@ func (x *ListResourcePoolsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListResourcePoolsRequest.ProtoReflect.Descriptor instead. func (*ListResourcePoolsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{354} + return file_forge_carbide_proto_rawDescGZIP(), []int{357} } func (x *ListResourcePoolsRequest) GetAutoAssignable() bool { @@ -26111,7 +26826,7 @@ type ResourcePools struct { func (x *ResourcePools) Reset() { *x = ResourcePools{} - mi := &file_forge_carbide_proto_msgTypes[355] + mi := &file_forge_carbide_proto_msgTypes[358] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26123,7 +26838,7 @@ func (x *ResourcePools) String() string { func (*ResourcePools) ProtoMessage() {} func (x *ResourcePools) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[355] + mi := &file_forge_carbide_proto_msgTypes[358] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26136,7 +26851,7 @@ func (x *ResourcePools) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourcePools.ProtoReflect.Descriptor instead. func (*ResourcePools) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{355} + return file_forge_carbide_proto_rawDescGZIP(), []int{358} } func (x *ResourcePools) GetPools() []*ResourcePool { @@ -26159,7 +26874,7 @@ type ResourcePool struct { func (x *ResourcePool) Reset() { *x = ResourcePool{} - mi := &file_forge_carbide_proto_msgTypes[356] + mi := &file_forge_carbide_proto_msgTypes[359] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26171,7 +26886,7 @@ func (x *ResourcePool) String() string { func (*ResourcePool) ProtoMessage() {} func (x *ResourcePool) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[356] + mi := &file_forge_carbide_proto_msgTypes[359] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26184,7 +26899,7 @@ func (x *ResourcePool) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourcePool.ProtoReflect.Descriptor instead. func (*ResourcePool) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{356} + return file_forge_carbide_proto_rawDescGZIP(), []int{359} } func (x *ResourcePool) GetName() string { @@ -26232,7 +26947,7 @@ type GrowResourcePoolRequest struct { func (x *GrowResourcePoolRequest) Reset() { *x = GrowResourcePoolRequest{} - mi := &file_forge_carbide_proto_msgTypes[357] + mi := &file_forge_carbide_proto_msgTypes[360] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26244,7 +26959,7 @@ func (x *GrowResourcePoolRequest) String() string { func (*GrowResourcePoolRequest) ProtoMessage() {} func (x *GrowResourcePoolRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[357] + mi := &file_forge_carbide_proto_msgTypes[360] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26257,7 +26972,7 @@ func (x *GrowResourcePoolRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrowResourcePoolRequest.ProtoReflect.Descriptor instead. func (*GrowResourcePoolRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{357} + return file_forge_carbide_proto_rawDescGZIP(), []int{360} } func (x *GrowResourcePoolRequest) GetText() string { @@ -26275,7 +26990,7 @@ type GrowResourcePoolResponse struct { func (x *GrowResourcePoolResponse) Reset() { *x = GrowResourcePoolResponse{} - mi := &file_forge_carbide_proto_msgTypes[358] + mi := &file_forge_carbide_proto_msgTypes[361] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26287,7 +27002,7 @@ func (x *GrowResourcePoolResponse) String() string { func (*GrowResourcePoolResponse) ProtoMessage() {} func (x *GrowResourcePoolResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[358] + mi := &file_forge_carbide_proto_msgTypes[361] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26300,7 +27015,7 @@ func (x *GrowResourcePoolResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GrowResourcePoolResponse.ProtoReflect.Descriptor instead. func (*GrowResourcePoolResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{358} + return file_forge_carbide_proto_rawDescGZIP(), []int{361} } type Range struct { @@ -26313,7 +27028,7 @@ type Range struct { func (x *Range) Reset() { *x = Range{} - mi := &file_forge_carbide_proto_msgTypes[359] + mi := &file_forge_carbide_proto_msgTypes[362] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26325,7 +27040,7 @@ func (x *Range) String() string { func (*Range) ProtoMessage() {} func (x *Range) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[359] + mi := &file_forge_carbide_proto_msgTypes[362] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26338,7 +27053,7 @@ func (x *Range) ProtoReflect() protoreflect.Message { // Deprecated: Use Range.ProtoReflect.Descriptor instead. func (*Range) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{359} + return file_forge_carbide_proto_rawDescGZIP(), []int{362} } func (x *Range) GetStart() string { @@ -26365,7 +27080,7 @@ type MigrateVpcVniResponse struct { func (x *MigrateVpcVniResponse) Reset() { *x = MigrateVpcVniResponse{} - mi := &file_forge_carbide_proto_msgTypes[360] + mi := &file_forge_carbide_proto_msgTypes[363] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26377,7 +27092,7 @@ func (x *MigrateVpcVniResponse) String() string { func (*MigrateVpcVniResponse) ProtoMessage() {} func (x *MigrateVpcVniResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[360] + mi := &file_forge_carbide_proto_msgTypes[363] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26390,7 +27105,7 @@ func (x *MigrateVpcVniResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MigrateVpcVniResponse.ProtoReflect.Descriptor instead. func (*MigrateVpcVniResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{360} + return file_forge_carbide_proto_rawDescGZIP(), []int{363} } func (x *MigrateVpcVniResponse) GetUpdatedCount() uint32 { @@ -26420,7 +27135,7 @@ type MaintenanceRequest struct { func (x *MaintenanceRequest) Reset() { *x = MaintenanceRequest{} - mi := &file_forge_carbide_proto_msgTypes[361] + mi := &file_forge_carbide_proto_msgTypes[364] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26432,7 +27147,7 @@ func (x *MaintenanceRequest) String() string { func (*MaintenanceRequest) ProtoMessage() {} func (x *MaintenanceRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[361] + mi := &file_forge_carbide_proto_msgTypes[364] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26445,7 +27160,7 @@ func (x *MaintenanceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MaintenanceRequest.ProtoReflect.Descriptor instead. func (*MaintenanceRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{361} + return file_forge_carbide_proto_rawDescGZIP(), []int{364} } func (x *MaintenanceRequest) GetOperation() MaintenanceOperation { @@ -26480,7 +27195,7 @@ type SetDynamicConfigRequest struct { func (x *SetDynamicConfigRequest) Reset() { *x = SetDynamicConfigRequest{} - mi := &file_forge_carbide_proto_msgTypes[362] + mi := &file_forge_carbide_proto_msgTypes[365] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26492,7 +27207,7 @@ func (x *SetDynamicConfigRequest) String() string { func (*SetDynamicConfigRequest) ProtoMessage() {} func (x *SetDynamicConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[362] + mi := &file_forge_carbide_proto_msgTypes[365] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26505,7 +27220,7 @@ func (x *SetDynamicConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetDynamicConfigRequest.ProtoReflect.Descriptor instead. func (*SetDynamicConfigRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{362} + return file_forge_carbide_proto_rawDescGZIP(), []int{365} } func (x *SetDynamicConfigRequest) GetSetting() ConfigSetting { @@ -26538,7 +27253,7 @@ type FindIpAddressRequest struct { func (x *FindIpAddressRequest) Reset() { *x = FindIpAddressRequest{} - mi := &file_forge_carbide_proto_msgTypes[363] + mi := &file_forge_carbide_proto_msgTypes[366] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26550,7 +27265,7 @@ func (x *FindIpAddressRequest) String() string { func (*FindIpAddressRequest) ProtoMessage() {} func (x *FindIpAddressRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[363] + mi := &file_forge_carbide_proto_msgTypes[366] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26563,7 +27278,7 @@ func (x *FindIpAddressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindIpAddressRequest.ProtoReflect.Descriptor instead. func (*FindIpAddressRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{363} + return file_forge_carbide_proto_rawDescGZIP(), []int{366} } func (x *FindIpAddressRequest) GetIp() string { @@ -26583,7 +27298,7 @@ type FindIpAddressResponse struct { func (x *FindIpAddressResponse) Reset() { *x = FindIpAddressResponse{} - mi := &file_forge_carbide_proto_msgTypes[364] + mi := &file_forge_carbide_proto_msgTypes[367] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26595,7 +27310,7 @@ func (x *FindIpAddressResponse) String() string { func (*FindIpAddressResponse) ProtoMessage() {} func (x *FindIpAddressResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[364] + mi := &file_forge_carbide_proto_msgTypes[367] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26608,7 +27323,7 @@ func (x *FindIpAddressResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindIpAddressResponse.ProtoReflect.Descriptor instead. func (*FindIpAddressResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{364} + return file_forge_carbide_proto_rawDescGZIP(), []int{367} } func (x *FindIpAddressResponse) GetMatches() []*IpAddressMatch { @@ -26634,7 +27349,7 @@ type IdentifyUuidRequest struct { func (x *IdentifyUuidRequest) Reset() { *x = IdentifyUuidRequest{} - mi := &file_forge_carbide_proto_msgTypes[365] + mi := &file_forge_carbide_proto_msgTypes[368] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26646,7 +27361,7 @@ func (x *IdentifyUuidRequest) String() string { func (*IdentifyUuidRequest) ProtoMessage() {} func (x *IdentifyUuidRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[365] + mi := &file_forge_carbide_proto_msgTypes[368] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26659,7 +27374,7 @@ func (x *IdentifyUuidRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IdentifyUuidRequest.ProtoReflect.Descriptor instead. func (*IdentifyUuidRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{365} + return file_forge_carbide_proto_rawDescGZIP(), []int{368} } func (x *IdentifyUuidRequest) GetUuid() *UUID { @@ -26679,7 +27394,7 @@ type IdentifyUuidResponse struct { func (x *IdentifyUuidResponse) Reset() { *x = IdentifyUuidResponse{} - mi := &file_forge_carbide_proto_msgTypes[366] + mi := &file_forge_carbide_proto_msgTypes[369] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26691,7 +27406,7 @@ func (x *IdentifyUuidResponse) String() string { func (*IdentifyUuidResponse) ProtoMessage() {} func (x *IdentifyUuidResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[366] + mi := &file_forge_carbide_proto_msgTypes[369] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26704,7 +27419,7 @@ func (x *IdentifyUuidResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IdentifyUuidResponse.ProtoReflect.Descriptor instead. func (*IdentifyUuidResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{366} + return file_forge_carbide_proto_rawDescGZIP(), []int{369} } func (x *IdentifyUuidResponse) GetUuid() *UUID { @@ -26730,7 +27445,7 @@ type IdentifyMacRequest struct { func (x *IdentifyMacRequest) Reset() { *x = IdentifyMacRequest{} - mi := &file_forge_carbide_proto_msgTypes[367] + mi := &file_forge_carbide_proto_msgTypes[370] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26742,7 +27457,7 @@ func (x *IdentifyMacRequest) String() string { func (*IdentifyMacRequest) ProtoMessage() {} func (x *IdentifyMacRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[367] + mi := &file_forge_carbide_proto_msgTypes[370] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26755,7 +27470,7 @@ func (x *IdentifyMacRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IdentifyMacRequest.ProtoReflect.Descriptor instead. func (*IdentifyMacRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{367} + return file_forge_carbide_proto_rawDescGZIP(), []int{370} } func (x *IdentifyMacRequest) GetMacAddress() string { @@ -26776,7 +27491,7 @@ type IdentifyMacResponse struct { func (x *IdentifyMacResponse) Reset() { *x = IdentifyMacResponse{} - mi := &file_forge_carbide_proto_msgTypes[368] + mi := &file_forge_carbide_proto_msgTypes[371] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26788,7 +27503,7 @@ func (x *IdentifyMacResponse) String() string { func (*IdentifyMacResponse) ProtoMessage() {} func (x *IdentifyMacResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[368] + mi := &file_forge_carbide_proto_msgTypes[371] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26801,7 +27516,7 @@ func (x *IdentifyMacResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IdentifyMacResponse.ProtoReflect.Descriptor instead. func (*IdentifyMacResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{368} + return file_forge_carbide_proto_rawDescGZIP(), []int{371} } func (x *IdentifyMacResponse) GetMacAddress() string { @@ -26836,7 +27551,7 @@ type IdentifySerialRequest struct { func (x *IdentifySerialRequest) Reset() { *x = IdentifySerialRequest{} - mi := &file_forge_carbide_proto_msgTypes[369] + mi := &file_forge_carbide_proto_msgTypes[372] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26848,7 +27563,7 @@ func (x *IdentifySerialRequest) String() string { func (*IdentifySerialRequest) ProtoMessage() {} func (x *IdentifySerialRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[369] + mi := &file_forge_carbide_proto_msgTypes[372] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26861,7 +27576,7 @@ func (x *IdentifySerialRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IdentifySerialRequest.ProtoReflect.Descriptor instead. func (*IdentifySerialRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{369} + return file_forge_carbide_proto_rawDescGZIP(), []int{372} } func (x *IdentifySerialRequest) GetSerialNumber() string { @@ -26888,7 +27603,7 @@ type IdentifySerialResponse struct { func (x *IdentifySerialResponse) Reset() { *x = IdentifySerialResponse{} - mi := &file_forge_carbide_proto_msgTypes[370] + mi := &file_forge_carbide_proto_msgTypes[373] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26900,7 +27615,7 @@ func (x *IdentifySerialResponse) String() string { func (*IdentifySerialResponse) ProtoMessage() {} func (x *IdentifySerialResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[370] + mi := &file_forge_carbide_proto_msgTypes[373] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26913,7 +27628,7 @@ func (x *IdentifySerialResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IdentifySerialResponse.ProtoReflect.Descriptor instead. func (*IdentifySerialResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{370} + return file_forge_carbide_proto_rawDescGZIP(), []int{373} } func (x *IdentifySerialResponse) GetSerialNumber() string { @@ -26944,7 +27659,7 @@ type DpuReprovisioningRequest struct { func (x *DpuReprovisioningRequest) Reset() { *x = DpuReprovisioningRequest{} - mi := &file_forge_carbide_proto_msgTypes[371] + mi := &file_forge_carbide_proto_msgTypes[374] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -26956,7 +27671,7 @@ func (x *DpuReprovisioningRequest) String() string { func (*DpuReprovisioningRequest) ProtoMessage() {} func (x *DpuReprovisioningRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[371] + mi := &file_forge_carbide_proto_msgTypes[374] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -26969,7 +27684,7 @@ func (x *DpuReprovisioningRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuReprovisioningRequest.ProtoReflect.Descriptor instead. func (*DpuReprovisioningRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{371} + return file_forge_carbide_proto_rawDescGZIP(), []int{374} } func (x *DpuReprovisioningRequest) GetDpuId() *MachineId { @@ -27015,7 +27730,7 @@ type DpuReprovisioningListRequest struct { func (x *DpuReprovisioningListRequest) Reset() { *x = DpuReprovisioningListRequest{} - mi := &file_forge_carbide_proto_msgTypes[372] + mi := &file_forge_carbide_proto_msgTypes[375] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27027,7 +27742,7 @@ func (x *DpuReprovisioningListRequest) String() string { func (*DpuReprovisioningListRequest) ProtoMessage() {} func (x *DpuReprovisioningListRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[372] + mi := &file_forge_carbide_proto_msgTypes[375] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27040,7 +27755,7 @@ func (x *DpuReprovisioningListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuReprovisioningListRequest.ProtoReflect.Descriptor instead. func (*DpuReprovisioningListRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{372} + return file_forge_carbide_proto_rawDescGZIP(), []int{375} } type DpuReprovisioningListResponse struct { @@ -27052,7 +27767,7 @@ type DpuReprovisioningListResponse struct { func (x *DpuReprovisioningListResponse) Reset() { *x = DpuReprovisioningListResponse{} - mi := &file_forge_carbide_proto_msgTypes[373] + mi := &file_forge_carbide_proto_msgTypes[376] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27064,7 +27779,7 @@ func (x *DpuReprovisioningListResponse) String() string { func (*DpuReprovisioningListResponse) ProtoMessage() {} func (x *DpuReprovisioningListResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[373] + mi := &file_forge_carbide_proto_msgTypes[376] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27077,7 +27792,7 @@ func (x *DpuReprovisioningListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuReprovisioningListResponse.ProtoReflect.Descriptor instead. func (*DpuReprovisioningListResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{373} + return file_forge_carbide_proto_rawDescGZIP(), []int{376} } func (x *DpuReprovisioningListResponse) GetDpus() []*DpuReprovisioningListResponse_DpuReprovisioningListItem { @@ -27098,7 +27813,7 @@ type HostReprovisioningRequest struct { func (x *HostReprovisioningRequest) Reset() { *x = HostReprovisioningRequest{} - mi := &file_forge_carbide_proto_msgTypes[374] + mi := &file_forge_carbide_proto_msgTypes[377] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27110,7 +27825,7 @@ func (x *HostReprovisioningRequest) String() string { func (*HostReprovisioningRequest) ProtoMessage() {} func (x *HostReprovisioningRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[374] + mi := &file_forge_carbide_proto_msgTypes[377] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27123,7 +27838,7 @@ func (x *HostReprovisioningRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HostReprovisioningRequest.ProtoReflect.Descriptor instead. func (*HostReprovisioningRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{374} + return file_forge_carbide_proto_rawDescGZIP(), []int{377} } func (x *HostReprovisioningRequest) GetMachineId() *MachineId { @@ -27155,7 +27870,7 @@ type HostReprovisioningListRequest struct { func (x *HostReprovisioningListRequest) Reset() { *x = HostReprovisioningListRequest{} - mi := &file_forge_carbide_proto_msgTypes[375] + mi := &file_forge_carbide_proto_msgTypes[378] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27167,7 +27882,7 @@ func (x *HostReprovisioningListRequest) String() string { func (*HostReprovisioningListRequest) ProtoMessage() {} func (x *HostReprovisioningListRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[375] + mi := &file_forge_carbide_proto_msgTypes[378] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27180,7 +27895,7 @@ func (x *HostReprovisioningListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HostReprovisioningListRequest.ProtoReflect.Descriptor instead. func (*HostReprovisioningListRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{375} + return file_forge_carbide_proto_rawDescGZIP(), []int{378} } type HostReprovisioningListResponse struct { @@ -27192,7 +27907,7 @@ type HostReprovisioningListResponse struct { func (x *HostReprovisioningListResponse) Reset() { *x = HostReprovisioningListResponse{} - mi := &file_forge_carbide_proto_msgTypes[376] + mi := &file_forge_carbide_proto_msgTypes[379] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27204,7 +27919,7 @@ func (x *HostReprovisioningListResponse) String() string { func (*HostReprovisioningListResponse) ProtoMessage() {} func (x *HostReprovisioningListResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[376] + mi := &file_forge_carbide_proto_msgTypes[379] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27217,7 +27932,7 @@ func (x *HostReprovisioningListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HostReprovisioningListResponse.ProtoReflect.Descriptor instead. func (*HostReprovisioningListResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{376} + return file_forge_carbide_proto_rawDescGZIP(), []int{379} } func (x *HostReprovisioningListResponse) GetHosts() []*HostReprovisioningListResponse_HostReprovisioningListItem { @@ -27237,7 +27952,7 @@ type DpuInfo struct { func (x *DpuInfo) Reset() { *x = DpuInfo{} - mi := &file_forge_carbide_proto_msgTypes[377] + mi := &file_forge_carbide_proto_msgTypes[380] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27249,7 +27964,7 @@ func (x *DpuInfo) String() string { func (*DpuInfo) ProtoMessage() {} func (x *DpuInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[377] + mi := &file_forge_carbide_proto_msgTypes[380] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27262,7 +27977,7 @@ func (x *DpuInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuInfo.ProtoReflect.Descriptor instead. func (*DpuInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{377} + return file_forge_carbide_proto_rawDescGZIP(), []int{380} } func (x *DpuInfo) GetId() string { @@ -27287,7 +28002,7 @@ type GetDpuInfoListRequest struct { func (x *GetDpuInfoListRequest) Reset() { *x = GetDpuInfoListRequest{} - mi := &file_forge_carbide_proto_msgTypes[378] + mi := &file_forge_carbide_proto_msgTypes[381] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27299,7 +28014,7 @@ func (x *GetDpuInfoListRequest) String() string { func (*GetDpuInfoListRequest) ProtoMessage() {} func (x *GetDpuInfoListRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[378] + mi := &file_forge_carbide_proto_msgTypes[381] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27312,7 +28027,7 @@ func (x *GetDpuInfoListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDpuInfoListRequest.ProtoReflect.Descriptor instead. func (*GetDpuInfoListRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{378} + return file_forge_carbide_proto_rawDescGZIP(), []int{381} } type GetDpuInfoListResponse struct { @@ -27324,7 +28039,7 @@ type GetDpuInfoListResponse struct { func (x *GetDpuInfoListResponse) Reset() { *x = GetDpuInfoListResponse{} - mi := &file_forge_carbide_proto_msgTypes[379] + mi := &file_forge_carbide_proto_msgTypes[382] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27336,7 +28051,7 @@ func (x *GetDpuInfoListResponse) String() string { func (*GetDpuInfoListResponse) ProtoMessage() {} func (x *GetDpuInfoListResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[379] + mi := &file_forge_carbide_proto_msgTypes[382] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27349,7 +28064,7 @@ func (x *GetDpuInfoListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDpuInfoListResponse.ProtoReflect.Descriptor instead. func (*GetDpuInfoListResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{379} + return file_forge_carbide_proto_rawDescGZIP(), []int{382} } func (x *GetDpuInfoListResponse) GetDpuList() []*DpuInfo { @@ -27370,7 +28085,7 @@ type IpAddressMatch struct { func (x *IpAddressMatch) Reset() { *x = IpAddressMatch{} - mi := &file_forge_carbide_proto_msgTypes[380] + mi := &file_forge_carbide_proto_msgTypes[383] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27382,7 +28097,7 @@ func (x *IpAddressMatch) String() string { func (*IpAddressMatch) ProtoMessage() {} func (x *IpAddressMatch) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[380] + mi := &file_forge_carbide_proto_msgTypes[383] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27395,7 +28110,7 @@ func (x *IpAddressMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use IpAddressMatch.ProtoReflect.Descriptor instead. func (*IpAddressMatch) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{380} + return file_forge_carbide_proto_rawDescGZIP(), []int{383} } func (x *IpAddressMatch) GetIpType() IpType { @@ -27430,7 +28145,7 @@ type MachineBootOverride struct { func (x *MachineBootOverride) Reset() { *x = MachineBootOverride{} - mi := &file_forge_carbide_proto_msgTypes[381] + mi := &file_forge_carbide_proto_msgTypes[384] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27442,7 +28157,7 @@ func (x *MachineBootOverride) String() string { func (*MachineBootOverride) ProtoMessage() {} func (x *MachineBootOverride) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[381] + mi := &file_forge_carbide_proto_msgTypes[384] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27455,7 +28170,7 @@ func (x *MachineBootOverride) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineBootOverride.ProtoReflect.Descriptor instead. func (*MachineBootOverride) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{381} + return file_forge_carbide_proto_rawDescGZIP(), []int{384} } func (x *MachineBootOverride) GetMachineInterfaceId() *MachineInterfaceId { @@ -27492,7 +28207,7 @@ type ConnectedDevice struct { func (x *ConnectedDevice) Reset() { *x = ConnectedDevice{} - mi := &file_forge_carbide_proto_msgTypes[382] + mi := &file_forge_carbide_proto_msgTypes[385] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27504,7 +28219,7 @@ func (x *ConnectedDevice) String() string { func (*ConnectedDevice) ProtoMessage() {} func (x *ConnectedDevice) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[382] + mi := &file_forge_carbide_proto_msgTypes[385] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27517,7 +28232,7 @@ func (x *ConnectedDevice) ProtoReflect() protoreflect.Message { // Deprecated: Use ConnectedDevice.ProtoReflect.Descriptor instead. func (*ConnectedDevice) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{382} + return file_forge_carbide_proto_rawDescGZIP(), []int{385} } func (x *ConnectedDevice) GetId() *MachineId { @@ -27557,7 +28272,7 @@ type ConnectedDeviceList struct { func (x *ConnectedDeviceList) Reset() { *x = ConnectedDeviceList{} - mi := &file_forge_carbide_proto_msgTypes[383] + mi := &file_forge_carbide_proto_msgTypes[386] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27569,7 +28284,7 @@ func (x *ConnectedDeviceList) String() string { func (*ConnectedDeviceList) ProtoMessage() {} func (x *ConnectedDeviceList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[383] + mi := &file_forge_carbide_proto_msgTypes[386] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27582,7 +28297,7 @@ func (x *ConnectedDeviceList) ProtoReflect() protoreflect.Message { // Deprecated: Use ConnectedDeviceList.ProtoReflect.Descriptor instead. func (*ConnectedDeviceList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{383} + return file_forge_carbide_proto_rawDescGZIP(), []int{386} } func (x *ConnectedDeviceList) GetConnectedDevices() []*ConnectedDevice { @@ -27601,7 +28316,7 @@ type BmcIpList struct { func (x *BmcIpList) Reset() { *x = BmcIpList{} - mi := &file_forge_carbide_proto_msgTypes[384] + mi := &file_forge_carbide_proto_msgTypes[387] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27613,7 +28328,7 @@ func (x *BmcIpList) String() string { func (*BmcIpList) ProtoMessage() {} func (x *BmcIpList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[384] + mi := &file_forge_carbide_proto_msgTypes[387] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27626,7 +28341,7 @@ func (x *BmcIpList) ProtoReflect() protoreflect.Message { // Deprecated: Use BmcIpList.ProtoReflect.Descriptor instead. func (*BmcIpList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{384} + return file_forge_carbide_proto_rawDescGZIP(), []int{387} } func (x *BmcIpList) GetBmcIps() []string { @@ -27645,7 +28360,7 @@ type BmcIp struct { func (x *BmcIp) Reset() { *x = BmcIp{} - mi := &file_forge_carbide_proto_msgTypes[385] + mi := &file_forge_carbide_proto_msgTypes[388] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27657,7 +28372,7 @@ func (x *BmcIp) String() string { func (*BmcIp) ProtoMessage() {} func (x *BmcIp) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[385] + mi := &file_forge_carbide_proto_msgTypes[388] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27670,7 +28385,7 @@ func (x *BmcIp) ProtoReflect() protoreflect.Message { // Deprecated: Use BmcIp.ProtoReflect.Descriptor instead. func (*BmcIp) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{385} + return file_forge_carbide_proto_rawDescGZIP(), []int{388} } func (x *BmcIp) GetBmcIp() string { @@ -27690,7 +28405,7 @@ type MacAddressBmcIp struct { func (x *MacAddressBmcIp) Reset() { *x = MacAddressBmcIp{} - mi := &file_forge_carbide_proto_msgTypes[386] + mi := &file_forge_carbide_proto_msgTypes[389] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27702,7 +28417,7 @@ func (x *MacAddressBmcIp) String() string { func (*MacAddressBmcIp) ProtoMessage() {} func (x *MacAddressBmcIp) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[386] + mi := &file_forge_carbide_proto_msgTypes[389] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27715,7 +28430,7 @@ func (x *MacAddressBmcIp) ProtoReflect() protoreflect.Message { // Deprecated: Use MacAddressBmcIp.ProtoReflect.Descriptor instead. func (*MacAddressBmcIp) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{386} + return file_forge_carbide_proto_rawDescGZIP(), []int{389} } func (x *MacAddressBmcIp) GetBmcIp() string { @@ -27741,7 +28456,7 @@ type MachineIdBmcIpPairs struct { func (x *MachineIdBmcIpPairs) Reset() { *x = MachineIdBmcIpPairs{} - mi := &file_forge_carbide_proto_msgTypes[387] + mi := &file_forge_carbide_proto_msgTypes[390] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27753,7 +28468,7 @@ func (x *MachineIdBmcIpPairs) String() string { func (*MachineIdBmcIpPairs) ProtoMessage() {} func (x *MachineIdBmcIpPairs) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[387] + mi := &file_forge_carbide_proto_msgTypes[390] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27766,7 +28481,7 @@ func (x *MachineIdBmcIpPairs) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineIdBmcIpPairs.ProtoReflect.Descriptor instead. func (*MachineIdBmcIpPairs) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{387} + return file_forge_carbide_proto_rawDescGZIP(), []int{390} } func (x *MachineIdBmcIpPairs) GetPairs() []*MachineIdBmcIp { @@ -27786,7 +28501,7 @@ type MachineIdBmcIp struct { func (x *MachineIdBmcIp) Reset() { *x = MachineIdBmcIp{} - mi := &file_forge_carbide_proto_msgTypes[388] + mi := &file_forge_carbide_proto_msgTypes[391] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27798,7 +28513,7 @@ func (x *MachineIdBmcIp) String() string { func (*MachineIdBmcIp) ProtoMessage() {} func (x *MachineIdBmcIp) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[388] + mi := &file_forge_carbide_proto_msgTypes[391] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27811,7 +28526,7 @@ func (x *MachineIdBmcIp) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineIdBmcIp.ProtoReflect.Descriptor instead. func (*MachineIdBmcIp) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{388} + return file_forge_carbide_proto_rawDescGZIP(), []int{391} } func (x *MachineIdBmcIp) GetMachineId() *MachineId { @@ -27844,7 +28559,7 @@ type NetworkDevice struct { func (x *NetworkDevice) Reset() { *x = NetworkDevice{} - mi := &file_forge_carbide_proto_msgTypes[389] + mi := &file_forge_carbide_proto_msgTypes[392] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27856,7 +28571,7 @@ func (x *NetworkDevice) String() string { func (*NetworkDevice) ProtoMessage() {} func (x *NetworkDevice) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[389] + mi := &file_forge_carbide_proto_msgTypes[392] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27869,7 +28584,7 @@ func (x *NetworkDevice) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkDevice.ProtoReflect.Descriptor instead. func (*NetworkDevice) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{389} + return file_forge_carbide_proto_rawDescGZIP(), []int{392} } func (x *NetworkDevice) GetId() string { @@ -27930,7 +28645,7 @@ type NetworkTopologyRequest struct { func (x *NetworkTopologyRequest) Reset() { *x = NetworkTopologyRequest{} - mi := &file_forge_carbide_proto_msgTypes[390] + mi := &file_forge_carbide_proto_msgTypes[393] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27942,7 +28657,7 @@ func (x *NetworkTopologyRequest) String() string { func (*NetworkTopologyRequest) ProtoMessage() {} func (x *NetworkTopologyRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[390] + mi := &file_forge_carbide_proto_msgTypes[393] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27955,7 +28670,7 @@ func (x *NetworkTopologyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkTopologyRequest.ProtoReflect.Descriptor instead. func (*NetworkTopologyRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{390} + return file_forge_carbide_proto_rawDescGZIP(), []int{393} } func (x *NetworkTopologyRequest) GetId() string { @@ -27974,7 +28689,7 @@ type NetworkDeviceIdList struct { func (x *NetworkDeviceIdList) Reset() { *x = NetworkDeviceIdList{} - mi := &file_forge_carbide_proto_msgTypes[391] + mi := &file_forge_carbide_proto_msgTypes[394] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -27986,7 +28701,7 @@ func (x *NetworkDeviceIdList) String() string { func (*NetworkDeviceIdList) ProtoMessage() {} func (x *NetworkDeviceIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[391] + mi := &file_forge_carbide_proto_msgTypes[394] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -27999,7 +28714,7 @@ func (x *NetworkDeviceIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkDeviceIdList.ProtoReflect.Descriptor instead. func (*NetworkDeviceIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{391} + return file_forge_carbide_proto_rawDescGZIP(), []int{394} } func (x *NetworkDeviceIdList) GetNetworkDeviceIds() []string { @@ -28018,7 +28733,7 @@ type NetworkTopologyData struct { func (x *NetworkTopologyData) Reset() { *x = NetworkTopologyData{} - mi := &file_forge_carbide_proto_msgTypes[392] + mi := &file_forge_carbide_proto_msgTypes[395] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28030,7 +28745,7 @@ func (x *NetworkTopologyData) String() string { func (*NetworkTopologyData) ProtoMessage() {} func (x *NetworkTopologyData) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[392] + mi := &file_forge_carbide_proto_msgTypes[395] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28043,7 +28758,7 @@ func (x *NetworkTopologyData) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkTopologyData.ProtoReflect.Descriptor instead. func (*NetworkTopologyData) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{392} + return file_forge_carbide_proto_rawDescGZIP(), []int{395} } func (x *NetworkTopologyData) GetNetworkDevices() []*NetworkDevice { @@ -28077,7 +28792,7 @@ type RouteServers struct { func (x *RouteServers) Reset() { *x = RouteServers{} - mi := &file_forge_carbide_proto_msgTypes[393] + mi := &file_forge_carbide_proto_msgTypes[396] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28089,7 +28804,7 @@ func (x *RouteServers) String() string { func (*RouteServers) ProtoMessage() {} func (x *RouteServers) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[393] + mi := &file_forge_carbide_proto_msgTypes[396] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28102,7 +28817,7 @@ func (x *RouteServers) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteServers.ProtoReflect.Descriptor instead. func (*RouteServers) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{393} + return file_forge_carbide_proto_rawDescGZIP(), []int{396} } func (x *RouteServers) GetRouteServers() []string { @@ -28128,7 +28843,7 @@ type RouteServerEntries struct { func (x *RouteServerEntries) Reset() { *x = RouteServerEntries{} - mi := &file_forge_carbide_proto_msgTypes[394] + mi := &file_forge_carbide_proto_msgTypes[397] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28140,7 +28855,7 @@ func (x *RouteServerEntries) String() string { func (*RouteServerEntries) ProtoMessage() {} func (x *RouteServerEntries) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[394] + mi := &file_forge_carbide_proto_msgTypes[397] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28153,7 +28868,7 @@ func (x *RouteServerEntries) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteServerEntries.ProtoReflect.Descriptor instead. func (*RouteServerEntries) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{394} + return file_forge_carbide_proto_rawDescGZIP(), []int{397} } func (x *RouteServerEntries) GetRouteServers() []*RouteServer { @@ -28176,7 +28891,7 @@ type RouteServer struct { func (x *RouteServer) Reset() { *x = RouteServer{} - mi := &file_forge_carbide_proto_msgTypes[395] + mi := &file_forge_carbide_proto_msgTypes[398] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28188,7 +28903,7 @@ func (x *RouteServer) String() string { func (*RouteServer) ProtoMessage() {} func (x *RouteServer) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[395] + mi := &file_forge_carbide_proto_msgTypes[398] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28201,7 +28916,7 @@ func (x *RouteServer) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteServer.ProtoReflect.Descriptor instead. func (*RouteServer) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{395} + return file_forge_carbide_proto_rawDescGZIP(), []int{398} } func (x *RouteServer) GetAddress() string { @@ -28230,7 +28945,7 @@ type SetHostUefiPasswordRequest struct { func (x *SetHostUefiPasswordRequest) Reset() { *x = SetHostUefiPasswordRequest{} - mi := &file_forge_carbide_proto_msgTypes[396] + mi := &file_forge_carbide_proto_msgTypes[399] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28242,7 +28957,7 @@ func (x *SetHostUefiPasswordRequest) String() string { func (*SetHostUefiPasswordRequest) ProtoMessage() {} func (x *SetHostUefiPasswordRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[396] + mi := &file_forge_carbide_proto_msgTypes[399] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28255,7 +28970,7 @@ func (x *SetHostUefiPasswordRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetHostUefiPasswordRequest.ProtoReflect.Descriptor instead. func (*SetHostUefiPasswordRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{396} + return file_forge_carbide_proto_rawDescGZIP(), []int{399} } func (x *SetHostUefiPasswordRequest) GetHostId() *MachineId { @@ -28281,7 +28996,7 @@ type SetHostUefiPasswordResponse struct { func (x *SetHostUefiPasswordResponse) Reset() { *x = SetHostUefiPasswordResponse{} - mi := &file_forge_carbide_proto_msgTypes[397] + mi := &file_forge_carbide_proto_msgTypes[400] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28293,7 +29008,7 @@ func (x *SetHostUefiPasswordResponse) String() string { func (*SetHostUefiPasswordResponse) ProtoMessage() {} func (x *SetHostUefiPasswordResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[397] + mi := &file_forge_carbide_proto_msgTypes[400] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28306,7 +29021,7 @@ func (x *SetHostUefiPasswordResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetHostUefiPasswordResponse.ProtoReflect.Descriptor instead. func (*SetHostUefiPasswordResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{397} + return file_forge_carbide_proto_rawDescGZIP(), []int{400} } func (x *SetHostUefiPasswordResponse) GetJobId() string { @@ -28328,7 +29043,7 @@ type ClearHostUefiPasswordRequest struct { func (x *ClearHostUefiPasswordRequest) Reset() { *x = ClearHostUefiPasswordRequest{} - mi := &file_forge_carbide_proto_msgTypes[398] + mi := &file_forge_carbide_proto_msgTypes[401] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28340,7 +29055,7 @@ func (x *ClearHostUefiPasswordRequest) String() string { func (*ClearHostUefiPasswordRequest) ProtoMessage() {} func (x *ClearHostUefiPasswordRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[398] + mi := &file_forge_carbide_proto_msgTypes[401] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28353,7 +29068,7 @@ func (x *ClearHostUefiPasswordRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClearHostUefiPasswordRequest.ProtoReflect.Descriptor instead. func (*ClearHostUefiPasswordRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{398} + return file_forge_carbide_proto_rawDescGZIP(), []int{401} } func (x *ClearHostUefiPasswordRequest) GetHostId() *MachineId { @@ -28379,7 +29094,7 @@ type ClearHostUefiPasswordResponse struct { func (x *ClearHostUefiPasswordResponse) Reset() { *x = ClearHostUefiPasswordResponse{} - mi := &file_forge_carbide_proto_msgTypes[399] + mi := &file_forge_carbide_proto_msgTypes[402] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28391,7 +29106,7 @@ func (x *ClearHostUefiPasswordResponse) String() string { func (*ClearHostUefiPasswordResponse) ProtoMessage() {} func (x *ClearHostUefiPasswordResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[399] + mi := &file_forge_carbide_proto_msgTypes[402] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28404,7 +29119,7 @@ func (x *ClearHostUefiPasswordResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClearHostUefiPasswordResponse.ProtoReflect.Descriptor instead. func (*ClearHostUefiPasswordResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{399} + return file_forge_carbide_proto_rawDescGZIP(), []int{402} } func (x *ClearHostUefiPasswordResponse) GetJobId() string { @@ -28440,7 +29155,7 @@ type OsImageAttributes struct { func (x *OsImageAttributes) Reset() { *x = OsImageAttributes{} - mi := &file_forge_carbide_proto_msgTypes[400] + mi := &file_forge_carbide_proto_msgTypes[403] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28452,7 +29167,7 @@ func (x *OsImageAttributes) String() string { func (*OsImageAttributes) ProtoMessage() {} func (x *OsImageAttributes) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[400] + mi := &file_forge_carbide_proto_msgTypes[403] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28465,7 +29180,7 @@ func (x *OsImageAttributes) ProtoReflect() protoreflect.Message { // Deprecated: Use OsImageAttributes.ProtoReflect.Descriptor instead. func (*OsImageAttributes) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{400} + return file_forge_carbide_proto_rawDescGZIP(), []int{403} } func (x *OsImageAttributes) GetId() *UUID { @@ -28586,7 +29301,7 @@ type OsImage struct { func (x *OsImage) Reset() { *x = OsImage{} - mi := &file_forge_carbide_proto_msgTypes[401] + mi := &file_forge_carbide_proto_msgTypes[404] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28598,7 +29313,7 @@ func (x *OsImage) String() string { func (*OsImage) ProtoMessage() {} func (x *OsImage) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[401] + mi := &file_forge_carbide_proto_msgTypes[404] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28611,7 +29326,7 @@ func (x *OsImage) ProtoReflect() protoreflect.Message { // Deprecated: Use OsImage.ProtoReflect.Descriptor instead. func (*OsImage) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{401} + return file_forge_carbide_proto_rawDescGZIP(), []int{404} } func (x *OsImage) GetAttributes() *OsImageAttributes { @@ -28658,7 +29373,7 @@ type ListOsImageRequest struct { func (x *ListOsImageRequest) Reset() { *x = ListOsImageRequest{} - mi := &file_forge_carbide_proto_msgTypes[402] + mi := &file_forge_carbide_proto_msgTypes[405] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28670,7 +29385,7 @@ func (x *ListOsImageRequest) String() string { func (*ListOsImageRequest) ProtoMessage() {} func (x *ListOsImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[402] + mi := &file_forge_carbide_proto_msgTypes[405] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28683,7 +29398,7 @@ func (x *ListOsImageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListOsImageRequest.ProtoReflect.Descriptor instead. func (*ListOsImageRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{402} + return file_forge_carbide_proto_rawDescGZIP(), []int{405} } func (x *ListOsImageRequest) GetTenantOrganizationId() string { @@ -28702,7 +29417,7 @@ type ListOsImageResponse struct { func (x *ListOsImageResponse) Reset() { *x = ListOsImageResponse{} - mi := &file_forge_carbide_proto_msgTypes[403] + mi := &file_forge_carbide_proto_msgTypes[406] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28714,7 +29429,7 @@ func (x *ListOsImageResponse) String() string { func (*ListOsImageResponse) ProtoMessage() {} func (x *ListOsImageResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[403] + mi := &file_forge_carbide_proto_msgTypes[406] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28727,7 +29442,7 @@ func (x *ListOsImageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListOsImageResponse.ProtoReflect.Descriptor instead. func (*ListOsImageResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{403} + return file_forge_carbide_proto_rawDescGZIP(), []int{406} } func (x *ListOsImageResponse) GetImages() []*OsImage { @@ -28747,7 +29462,7 @@ type DeleteOsImageRequest struct { func (x *DeleteOsImageRequest) Reset() { *x = DeleteOsImageRequest{} - mi := &file_forge_carbide_proto_msgTypes[404] + mi := &file_forge_carbide_proto_msgTypes[407] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28759,7 +29474,7 @@ func (x *DeleteOsImageRequest) String() string { func (*DeleteOsImageRequest) ProtoMessage() {} func (x *DeleteOsImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[404] + mi := &file_forge_carbide_proto_msgTypes[407] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28772,7 +29487,7 @@ func (x *DeleteOsImageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteOsImageRequest.ProtoReflect.Descriptor instead. func (*DeleteOsImageRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{404} + return file_forge_carbide_proto_rawDescGZIP(), []int{407} } func (x *DeleteOsImageRequest) GetId() *UUID { @@ -28797,7 +29512,7 @@ type DeleteOsImageResponse struct { func (x *DeleteOsImageResponse) Reset() { *x = DeleteOsImageResponse{} - mi := &file_forge_carbide_proto_msgTypes[405] + mi := &file_forge_carbide_proto_msgTypes[408] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28809,7 +29524,7 @@ func (x *DeleteOsImageResponse) String() string { func (*DeleteOsImageResponse) ProtoMessage() {} func (x *DeleteOsImageResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[405] + mi := &file_forge_carbide_proto_msgTypes[408] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28822,7 +29537,132 @@ func (x *DeleteOsImageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteOsImageResponse.ProtoReflect.Descriptor instead. func (*DeleteOsImageResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{405} + return file_forge_carbide_proto_rawDescGZIP(), []int{408} +} + +// Request/Response messages for iPXE Script Template management +type GetIpxeTemplateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id *IpxeTemplateId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Stable template UUID + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetIpxeTemplateRequest) Reset() { + *x = GetIpxeTemplateRequest{} + mi := &file_forge_carbide_proto_msgTypes[409] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetIpxeTemplateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetIpxeTemplateRequest) ProtoMessage() {} + +func (x *GetIpxeTemplateRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[409] + 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 GetIpxeTemplateRequest.ProtoReflect.Descriptor instead. +func (*GetIpxeTemplateRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{409} +} + +func (x *GetIpxeTemplateRequest) GetId() *IpxeTemplateId { + if x != nil { + return x.Id + } + return nil +} + +type ListIpxeTemplatesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListIpxeTemplatesRequest) Reset() { + *x = ListIpxeTemplatesRequest{} + mi := &file_forge_carbide_proto_msgTypes[410] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListIpxeTemplatesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListIpxeTemplatesRequest) ProtoMessage() {} + +func (x *ListIpxeTemplatesRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[410] + 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 ListIpxeTemplatesRequest.ProtoReflect.Descriptor instead. +func (*ListIpxeTemplatesRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{410} +} + +type IpxeTemplateList struct { + state protoimpl.MessageState `protogen:"open.v1"` + Templates []*IpxeTemplate `protobuf:"bytes,1,rep,name=templates,proto3" json:"templates,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *IpxeTemplateList) Reset() { + *x = IpxeTemplateList{} + mi := &file_forge_carbide_proto_msgTypes[411] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *IpxeTemplateList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IpxeTemplateList) ProtoMessage() {} + +func (x *IpxeTemplateList) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[411] + 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 IpxeTemplateList.ProtoReflect.Descriptor instead. +func (*IpxeTemplateList) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{411} +} + +func (x *IpxeTemplateList) GetTemplates() []*IpxeTemplate { + if x != nil { + return x.Templates + } + return nil } type ExpectedHostNic struct { @@ -28838,7 +29678,7 @@ type ExpectedHostNic struct { func (x *ExpectedHostNic) Reset() { *x = ExpectedHostNic{} - mi := &file_forge_carbide_proto_msgTypes[406] + mi := &file_forge_carbide_proto_msgTypes[412] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28850,7 +29690,7 @@ func (x *ExpectedHostNic) String() string { func (*ExpectedHostNic) ProtoMessage() {} func (x *ExpectedHostNic) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[406] + mi := &file_forge_carbide_proto_msgTypes[412] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28863,7 +29703,7 @@ func (x *ExpectedHostNic) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpectedHostNic.ProtoReflect.Descriptor instead. func (*ExpectedHostNic) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{406} + return file_forge_carbide_proto_rawDescGZIP(), []int{412} } func (x *ExpectedHostNic) GetMacAddress() string { @@ -28921,6 +29761,9 @@ type ExpectedMachine struct { // Deprecated: Marked as deprecated in forge_carbide.proto. DpfEnabled bool `protobuf:"varint,12,opt,name=dpf_enabled,json=dpfEnabled,proto3" json:"dpf_enabled,omitempty"` IsDpfEnabled *bool `protobuf:"varint,13,opt,name=is_dpf_enabled,json=isDpfEnabled,proto3,oneof" json:"is_dpf_enabled,omitempty"` + // Static BMC IP (optional). Pre-allocates a machine_interface like expected + // switches and power shelves; external IPs use the static-assignments segment. + BmcIpAddress *string `protobuf:"bytes,14,opt,name=bmc_ip_address,json=bmcIpAddress,proto3,oneof" json:"bmc_ip_address,omitempty"` // WARNING: Following fields are not present in Core, but added directly in REST snapshot Name *string `protobuf:"bytes,21,opt,name=name,proto3,oneof" json:"name,omitempty"` Manufacturer *string `protobuf:"bytes,22,opt,name=manufacturer,proto3,oneof" json:"manufacturer,omitempty"` @@ -28936,7 +29779,7 @@ type ExpectedMachine struct { func (x *ExpectedMachine) Reset() { *x = ExpectedMachine{} - mi := &file_forge_carbide_proto_msgTypes[407] + mi := &file_forge_carbide_proto_msgTypes[413] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -28948,7 +29791,7 @@ func (x *ExpectedMachine) String() string { func (*ExpectedMachine) ProtoMessage() {} func (x *ExpectedMachine) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[407] + mi := &file_forge_carbide_proto_msgTypes[413] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -28961,7 +29804,7 @@ func (x *ExpectedMachine) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpectedMachine.ProtoReflect.Descriptor instead. func (*ExpectedMachine) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{407} + return file_forge_carbide_proto_rawDescGZIP(), []int{413} } func (x *ExpectedMachine) GetBmcMacAddress() string { @@ -29056,6 +29899,13 @@ func (x *ExpectedMachine) GetIsDpfEnabled() bool { return false } +func (x *ExpectedMachine) GetBmcIpAddress() string { + if x != nil && x.BmcIpAddress != nil { + return *x.BmcIpAddress + } + return "" +} + func (x *ExpectedMachine) GetName() string { if x != nil && x.Name != nil { return *x.Name @@ -29124,7 +29974,7 @@ type ExpectedMachineRequest struct { func (x *ExpectedMachineRequest) Reset() { *x = ExpectedMachineRequest{} - mi := &file_forge_carbide_proto_msgTypes[408] + mi := &file_forge_carbide_proto_msgTypes[414] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29136,7 +29986,7 @@ func (x *ExpectedMachineRequest) String() string { func (*ExpectedMachineRequest) ProtoMessage() {} func (x *ExpectedMachineRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[408] + mi := &file_forge_carbide_proto_msgTypes[414] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29149,7 +29999,7 @@ func (x *ExpectedMachineRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpectedMachineRequest.ProtoReflect.Descriptor instead. func (*ExpectedMachineRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{408} + return file_forge_carbide_proto_rawDescGZIP(), []int{414} } func (x *ExpectedMachineRequest) GetBmcMacAddress() string { @@ -29175,7 +30025,7 @@ type ExpectedMachineList struct { func (x *ExpectedMachineList) Reset() { *x = ExpectedMachineList{} - mi := &file_forge_carbide_proto_msgTypes[409] + mi := &file_forge_carbide_proto_msgTypes[415] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29187,7 +30037,7 @@ func (x *ExpectedMachineList) String() string { func (*ExpectedMachineList) ProtoMessage() {} func (x *ExpectedMachineList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[409] + mi := &file_forge_carbide_proto_msgTypes[415] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29200,7 +30050,7 @@ func (x *ExpectedMachineList) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpectedMachineList.ProtoReflect.Descriptor instead. func (*ExpectedMachineList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{409} + return file_forge_carbide_proto_rawDescGZIP(), []int{415} } func (x *ExpectedMachineList) GetExpectedMachines() []*ExpectedMachine { @@ -29219,7 +30069,7 @@ type LinkedExpectedMachineList struct { func (x *LinkedExpectedMachineList) Reset() { *x = LinkedExpectedMachineList{} - mi := &file_forge_carbide_proto_msgTypes[410] + mi := &file_forge_carbide_proto_msgTypes[416] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29231,7 +30081,7 @@ func (x *LinkedExpectedMachineList) String() string { func (*LinkedExpectedMachineList) ProtoMessage() {} func (x *LinkedExpectedMachineList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[410] + mi := &file_forge_carbide_proto_msgTypes[416] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29244,7 +30094,7 @@ func (x *LinkedExpectedMachineList) ProtoReflect() protoreflect.Message { // Deprecated: Use LinkedExpectedMachineList.ProtoReflect.Descriptor instead. func (*LinkedExpectedMachineList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{410} + return file_forge_carbide_proto_rawDescGZIP(), []int{416} } func (x *LinkedExpectedMachineList) GetExpectedMachines() []*LinkedExpectedMachine { @@ -29268,7 +30118,7 @@ type LinkedExpectedMachine struct { func (x *LinkedExpectedMachine) Reset() { *x = LinkedExpectedMachine{} - mi := &file_forge_carbide_proto_msgTypes[411] + mi := &file_forge_carbide_proto_msgTypes[417] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29280,7 +30130,7 @@ func (x *LinkedExpectedMachine) String() string { func (*LinkedExpectedMachine) ProtoMessage() {} func (x *LinkedExpectedMachine) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[411] + mi := &file_forge_carbide_proto_msgTypes[417] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29293,7 +30143,7 @@ func (x *LinkedExpectedMachine) ProtoReflect() protoreflect.Message { // Deprecated: Use LinkedExpectedMachine.ProtoReflect.Descriptor instead. func (*LinkedExpectedMachine) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{411} + return file_forge_carbide_proto_rawDescGZIP(), []int{417} } func (x *LinkedExpectedMachine) GetChassisSerialNumber() string { @@ -29350,7 +30200,7 @@ type BatchExpectedMachineOperationRequest struct { func (x *BatchExpectedMachineOperationRequest) Reset() { *x = BatchExpectedMachineOperationRequest{} - mi := &file_forge_carbide_proto_msgTypes[412] + mi := &file_forge_carbide_proto_msgTypes[418] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29362,7 +30212,7 @@ func (x *BatchExpectedMachineOperationRequest) String() string { func (*BatchExpectedMachineOperationRequest) ProtoMessage() {} func (x *BatchExpectedMachineOperationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[412] + mi := &file_forge_carbide_proto_msgTypes[418] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29375,7 +30225,7 @@ func (x *BatchExpectedMachineOperationRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use BatchExpectedMachineOperationRequest.ProtoReflect.Descriptor instead. func (*BatchExpectedMachineOperationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{412} + return file_forge_carbide_proto_rawDescGZIP(), []int{418} } func (x *BatchExpectedMachineOperationRequest) GetExpectedMachines() *ExpectedMachineList { @@ -29408,7 +30258,7 @@ type ExpectedMachineOperationResult struct { func (x *ExpectedMachineOperationResult) Reset() { *x = ExpectedMachineOperationResult{} - mi := &file_forge_carbide_proto_msgTypes[413] + mi := &file_forge_carbide_proto_msgTypes[419] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29420,7 +30270,7 @@ func (x *ExpectedMachineOperationResult) String() string { func (*ExpectedMachineOperationResult) ProtoMessage() {} func (x *ExpectedMachineOperationResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[413] + mi := &file_forge_carbide_proto_msgTypes[419] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29433,7 +30283,7 @@ func (x *ExpectedMachineOperationResult) ProtoReflect() protoreflect.Message { // Deprecated: Use ExpectedMachineOperationResult.ProtoReflect.Descriptor instead. func (*ExpectedMachineOperationResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{413} + return file_forge_carbide_proto_rawDescGZIP(), []int{419} } func (x *ExpectedMachineOperationResult) GetId() *UUID { @@ -29474,7 +30324,7 @@ type BatchExpectedMachineOperationResponse struct { func (x *BatchExpectedMachineOperationResponse) Reset() { *x = BatchExpectedMachineOperationResponse{} - mi := &file_forge_carbide_proto_msgTypes[414] + mi := &file_forge_carbide_proto_msgTypes[420] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29486,7 +30336,7 @@ func (x *BatchExpectedMachineOperationResponse) String() string { func (*BatchExpectedMachineOperationResponse) ProtoMessage() {} func (x *BatchExpectedMachineOperationResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[414] + mi := &file_forge_carbide_proto_msgTypes[420] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29499,7 +30349,7 @@ func (x *BatchExpectedMachineOperationResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use BatchExpectedMachineOperationResponse.ProtoReflect.Descriptor instead. func (*BatchExpectedMachineOperationResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{414} + return file_forge_carbide_proto_rawDescGZIP(), []int{420} } func (x *BatchExpectedMachineOperationResponse) GetResults() []*ExpectedMachineOperationResult { @@ -29517,7 +30367,7 @@ type MachineRebootCompletedResponse struct { func (x *MachineRebootCompletedResponse) Reset() { *x = MachineRebootCompletedResponse{} - mi := &file_forge_carbide_proto_msgTypes[415] + mi := &file_forge_carbide_proto_msgTypes[421] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29529,7 +30379,7 @@ func (x *MachineRebootCompletedResponse) String() string { func (*MachineRebootCompletedResponse) ProtoMessage() {} func (x *MachineRebootCompletedResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[415] + mi := &file_forge_carbide_proto_msgTypes[421] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29542,7 +30392,7 @@ func (x *MachineRebootCompletedResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineRebootCompletedResponse.ProtoReflect.Descriptor instead. func (*MachineRebootCompletedResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{415} + return file_forge_carbide_proto_rawDescGZIP(), []int{421} } type MachineRebootCompletedRequest struct { @@ -29554,7 +30404,7 @@ type MachineRebootCompletedRequest struct { func (x *MachineRebootCompletedRequest) Reset() { *x = MachineRebootCompletedRequest{} - mi := &file_forge_carbide_proto_msgTypes[416] + mi := &file_forge_carbide_proto_msgTypes[422] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29566,7 +30416,7 @@ func (x *MachineRebootCompletedRequest) String() string { func (*MachineRebootCompletedRequest) ProtoMessage() {} func (x *MachineRebootCompletedRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[416] + mi := &file_forge_carbide_proto_msgTypes[422] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29579,7 +30429,7 @@ func (x *MachineRebootCompletedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineRebootCompletedRequest.ProtoReflect.Descriptor instead. func (*MachineRebootCompletedRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{416} + return file_forge_carbide_proto_rawDescGZIP(), []int{422} } func (x *MachineRebootCompletedRequest) GetMachineId() *MachineId { @@ -29600,7 +30450,7 @@ type MachineValidationCompletedRequest struct { func (x *MachineValidationCompletedRequest) Reset() { *x = MachineValidationCompletedRequest{} - mi := &file_forge_carbide_proto_msgTypes[417] + mi := &file_forge_carbide_proto_msgTypes[423] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29612,7 +30462,7 @@ func (x *MachineValidationCompletedRequest) String() string { func (*MachineValidationCompletedRequest) ProtoMessage() {} func (x *MachineValidationCompletedRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[417] + mi := &file_forge_carbide_proto_msgTypes[423] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29625,7 +30475,7 @@ func (x *MachineValidationCompletedRequest) ProtoReflect() protoreflect.Message // Deprecated: Use MachineValidationCompletedRequest.ProtoReflect.Descriptor instead. func (*MachineValidationCompletedRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{417} + return file_forge_carbide_proto_rawDescGZIP(), []int{423} } func (x *MachineValidationCompletedRequest) GetMachineId() *MachineId { @@ -29657,7 +30507,7 @@ type MachineValidationCompletedResponse struct { func (x *MachineValidationCompletedResponse) Reset() { *x = MachineValidationCompletedResponse{} - mi := &file_forge_carbide_proto_msgTypes[418] + mi := &file_forge_carbide_proto_msgTypes[424] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29669,7 +30519,7 @@ func (x *MachineValidationCompletedResponse) String() string { func (*MachineValidationCompletedResponse) ProtoMessage() {} func (x *MachineValidationCompletedResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[418] + mi := &file_forge_carbide_proto_msgTypes[424] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29682,7 +30532,7 @@ func (x *MachineValidationCompletedResponse) ProtoReflect() protoreflect.Message // Deprecated: Use MachineValidationCompletedResponse.ProtoReflect.Descriptor instead. func (*MachineValidationCompletedResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{418} + return file_forge_carbide_proto_rawDescGZIP(), []int{424} } type MachineValidationResult struct { @@ -29705,7 +30555,7 @@ type MachineValidationResult struct { func (x *MachineValidationResult) Reset() { *x = MachineValidationResult{} - mi := &file_forge_carbide_proto_msgTypes[419] + mi := &file_forge_carbide_proto_msgTypes[425] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29717,7 +30567,7 @@ func (x *MachineValidationResult) String() string { func (*MachineValidationResult) ProtoMessage() {} func (x *MachineValidationResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[419] + mi := &file_forge_carbide_proto_msgTypes[425] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29730,7 +30580,7 @@ func (x *MachineValidationResult) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationResult.ProtoReflect.Descriptor instead. func (*MachineValidationResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{419} + return file_forge_carbide_proto_rawDescGZIP(), []int{425} } func (x *MachineValidationResult) GetName() string { @@ -29826,7 +30676,7 @@ type MachineValidationResultPostRequest struct { func (x *MachineValidationResultPostRequest) Reset() { *x = MachineValidationResultPostRequest{} - mi := &file_forge_carbide_proto_msgTypes[420] + mi := &file_forge_carbide_proto_msgTypes[426] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29838,7 +30688,7 @@ func (x *MachineValidationResultPostRequest) String() string { func (*MachineValidationResultPostRequest) ProtoMessage() {} func (x *MachineValidationResultPostRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[420] + mi := &file_forge_carbide_proto_msgTypes[426] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29851,7 +30701,7 @@ func (x *MachineValidationResultPostRequest) ProtoReflect() protoreflect.Message // Deprecated: Use MachineValidationResultPostRequest.ProtoReflect.Descriptor instead. func (*MachineValidationResultPostRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{420} + return file_forge_carbide_proto_rawDescGZIP(), []int{426} } func (x *MachineValidationResultPostRequest) GetResult() *MachineValidationResult { @@ -29870,7 +30720,7 @@ type MachineValidationResultList struct { func (x *MachineValidationResultList) Reset() { *x = MachineValidationResultList{} - mi := &file_forge_carbide_proto_msgTypes[421] + mi := &file_forge_carbide_proto_msgTypes[427] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29882,7 +30732,7 @@ func (x *MachineValidationResultList) String() string { func (*MachineValidationResultList) ProtoMessage() {} func (x *MachineValidationResultList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[421] + mi := &file_forge_carbide_proto_msgTypes[427] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29895,7 +30745,7 @@ func (x *MachineValidationResultList) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationResultList.ProtoReflect.Descriptor instead. func (*MachineValidationResultList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{421} + return file_forge_carbide_proto_rawDescGZIP(), []int{427} } func (x *MachineValidationResultList) GetResults() []*MachineValidationResult { @@ -29916,7 +30766,7 @@ type MachineValidationGetRequest struct { func (x *MachineValidationGetRequest) Reset() { *x = MachineValidationGetRequest{} - mi := &file_forge_carbide_proto_msgTypes[422] + mi := &file_forge_carbide_proto_msgTypes[428] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29928,7 +30778,7 @@ func (x *MachineValidationGetRequest) String() string { func (*MachineValidationGetRequest) ProtoMessage() {} func (x *MachineValidationGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[422] + mi := &file_forge_carbide_proto_msgTypes[428] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -29941,7 +30791,7 @@ func (x *MachineValidationGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationGetRequest.ProtoReflect.Descriptor instead. func (*MachineValidationGetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{422} + return file_forge_carbide_proto_rawDescGZIP(), []int{428} } func (x *MachineValidationGetRequest) GetMachineId() *MachineId { @@ -29981,7 +30831,7 @@ type MachineValidationStatus struct { func (x *MachineValidationStatus) Reset() { *x = MachineValidationStatus{} - mi := &file_forge_carbide_proto_msgTypes[423] + mi := &file_forge_carbide_proto_msgTypes[429] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -29993,7 +30843,7 @@ func (x *MachineValidationStatus) String() string { func (*MachineValidationStatus) ProtoMessage() {} func (x *MachineValidationStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[423] + mi := &file_forge_carbide_proto_msgTypes[429] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30006,7 +30856,7 @@ func (x *MachineValidationStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationStatus.ProtoReflect.Descriptor instead. func (*MachineValidationStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{423} + return file_forge_carbide_proto_rawDescGZIP(), []int{429} } func (x *MachineValidationStatus) GetMachineValidationState() isMachineValidationStatus_MachineValidationState { @@ -30095,7 +30945,7 @@ type MachineValidationRun struct { func (x *MachineValidationRun) Reset() { *x = MachineValidationRun{} - mi := &file_forge_carbide_proto_msgTypes[424] + mi := &file_forge_carbide_proto_msgTypes[430] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30107,7 +30957,7 @@ func (x *MachineValidationRun) String() string { func (*MachineValidationRun) ProtoMessage() {} func (x *MachineValidationRun) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[424] + mi := &file_forge_carbide_proto_msgTypes[430] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30120,7 +30970,7 @@ func (x *MachineValidationRun) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationRun.ProtoReflect.Descriptor instead. func (*MachineValidationRun) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{424} + return file_forge_carbide_proto_rawDescGZIP(), []int{430} } func (x *MachineValidationRun) GetValidationId() *UUID { @@ -30189,7 +31039,7 @@ type MachineSetAutoUpdateRequest struct { func (x *MachineSetAutoUpdateRequest) Reset() { *x = MachineSetAutoUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[425] + mi := &file_forge_carbide_proto_msgTypes[431] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30201,7 +31051,7 @@ func (x *MachineSetAutoUpdateRequest) String() string { func (*MachineSetAutoUpdateRequest) ProtoMessage() {} func (x *MachineSetAutoUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[425] + mi := &file_forge_carbide_proto_msgTypes[431] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30214,7 +31064,7 @@ func (x *MachineSetAutoUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineSetAutoUpdateRequest.ProtoReflect.Descriptor instead. func (*MachineSetAutoUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{425} + return file_forge_carbide_proto_rawDescGZIP(), []int{431} } func (x *MachineSetAutoUpdateRequest) GetMachineId() *MachineId { @@ -30239,7 +31089,7 @@ type MachineSetAutoUpdateResponse struct { func (x *MachineSetAutoUpdateResponse) Reset() { *x = MachineSetAutoUpdateResponse{} - mi := &file_forge_carbide_proto_msgTypes[426] + mi := &file_forge_carbide_proto_msgTypes[432] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30251,7 +31101,7 @@ func (x *MachineSetAutoUpdateResponse) String() string { func (*MachineSetAutoUpdateResponse) ProtoMessage() {} func (x *MachineSetAutoUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[426] + mi := &file_forge_carbide_proto_msgTypes[432] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30264,7 +31114,7 @@ func (x *MachineSetAutoUpdateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineSetAutoUpdateResponse.ProtoReflect.Descriptor instead. func (*MachineSetAutoUpdateResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{426} + return file_forge_carbide_proto_rawDescGZIP(), []int{432} } type GetMachineValidationExternalConfigRequest struct { @@ -30276,7 +31126,7 @@ type GetMachineValidationExternalConfigRequest struct { func (x *GetMachineValidationExternalConfigRequest) Reset() { *x = GetMachineValidationExternalConfigRequest{} - mi := &file_forge_carbide_proto_msgTypes[427] + mi := &file_forge_carbide_proto_msgTypes[433] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30288,7 +31138,7 @@ func (x *GetMachineValidationExternalConfigRequest) String() string { func (*GetMachineValidationExternalConfigRequest) ProtoMessage() {} func (x *GetMachineValidationExternalConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[427] + mi := &file_forge_carbide_proto_msgTypes[433] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30301,7 +31151,7 @@ func (x *GetMachineValidationExternalConfigRequest) ProtoReflect() protoreflect. // Deprecated: Use GetMachineValidationExternalConfigRequest.ProtoReflect.Descriptor instead. func (*GetMachineValidationExternalConfigRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{427} + return file_forge_carbide_proto_rawDescGZIP(), []int{433} } func (x *GetMachineValidationExternalConfigRequest) GetName() string { @@ -30324,7 +31174,7 @@ type MachineValidationExternalConfig struct { func (x *MachineValidationExternalConfig) Reset() { *x = MachineValidationExternalConfig{} - mi := &file_forge_carbide_proto_msgTypes[428] + mi := &file_forge_carbide_proto_msgTypes[434] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30336,7 +31186,7 @@ func (x *MachineValidationExternalConfig) String() string { func (*MachineValidationExternalConfig) ProtoMessage() {} func (x *MachineValidationExternalConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[428] + mi := &file_forge_carbide_proto_msgTypes[434] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30349,7 +31199,7 @@ func (x *MachineValidationExternalConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationExternalConfig.ProtoReflect.Descriptor instead. func (*MachineValidationExternalConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{428} + return file_forge_carbide_proto_rawDescGZIP(), []int{434} } func (x *MachineValidationExternalConfig) GetName() string { @@ -30396,7 +31246,7 @@ type GetMachineValidationExternalConfigResponse struct { func (x *GetMachineValidationExternalConfigResponse) Reset() { *x = GetMachineValidationExternalConfigResponse{} - mi := &file_forge_carbide_proto_msgTypes[429] + mi := &file_forge_carbide_proto_msgTypes[435] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30408,7 +31258,7 @@ func (x *GetMachineValidationExternalConfigResponse) String() string { func (*GetMachineValidationExternalConfigResponse) ProtoMessage() {} func (x *GetMachineValidationExternalConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[429] + mi := &file_forge_carbide_proto_msgTypes[435] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30421,7 +31271,7 @@ func (x *GetMachineValidationExternalConfigResponse) ProtoReflect() protoreflect // Deprecated: Use GetMachineValidationExternalConfigResponse.ProtoReflect.Descriptor instead. func (*GetMachineValidationExternalConfigResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{429} + return file_forge_carbide_proto_rawDescGZIP(), []int{435} } func (x *GetMachineValidationExternalConfigResponse) GetConfig() *MachineValidationExternalConfig { @@ -30440,7 +31290,7 @@ type GetMachineValidationExternalConfigsRequest struct { func (x *GetMachineValidationExternalConfigsRequest) Reset() { *x = GetMachineValidationExternalConfigsRequest{} - mi := &file_forge_carbide_proto_msgTypes[430] + mi := &file_forge_carbide_proto_msgTypes[436] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30452,7 +31302,7 @@ func (x *GetMachineValidationExternalConfigsRequest) String() string { func (*GetMachineValidationExternalConfigsRequest) ProtoMessage() {} func (x *GetMachineValidationExternalConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[430] + mi := &file_forge_carbide_proto_msgTypes[436] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30465,7 +31315,7 @@ func (x *GetMachineValidationExternalConfigsRequest) ProtoReflect() protoreflect // Deprecated: Use GetMachineValidationExternalConfigsRequest.ProtoReflect.Descriptor instead. func (*GetMachineValidationExternalConfigsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{430} + return file_forge_carbide_proto_rawDescGZIP(), []int{436} } func (x *GetMachineValidationExternalConfigsRequest) GetNames() []string { @@ -30484,7 +31334,7 @@ type GetMachineValidationExternalConfigsResponse struct { func (x *GetMachineValidationExternalConfigsResponse) Reset() { *x = GetMachineValidationExternalConfigsResponse{} - mi := &file_forge_carbide_proto_msgTypes[431] + mi := &file_forge_carbide_proto_msgTypes[437] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30496,7 +31346,7 @@ func (x *GetMachineValidationExternalConfigsResponse) String() string { func (*GetMachineValidationExternalConfigsResponse) ProtoMessage() {} func (x *GetMachineValidationExternalConfigsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[431] + mi := &file_forge_carbide_proto_msgTypes[437] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30509,7 +31359,7 @@ func (x *GetMachineValidationExternalConfigsResponse) ProtoReflect() protoreflec // Deprecated: Use GetMachineValidationExternalConfigsResponse.ProtoReflect.Descriptor instead. func (*GetMachineValidationExternalConfigsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{431} + return file_forge_carbide_proto_rawDescGZIP(), []int{437} } func (x *GetMachineValidationExternalConfigsResponse) GetConfigs() []*MachineValidationExternalConfig { @@ -30530,7 +31380,7 @@ type AddUpdateMachineValidationExternalConfigRequest struct { func (x *AddUpdateMachineValidationExternalConfigRequest) Reset() { *x = AddUpdateMachineValidationExternalConfigRequest{} - mi := &file_forge_carbide_proto_msgTypes[432] + mi := &file_forge_carbide_proto_msgTypes[438] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30542,7 +31392,7 @@ func (x *AddUpdateMachineValidationExternalConfigRequest) String() string { func (*AddUpdateMachineValidationExternalConfigRequest) ProtoMessage() {} func (x *AddUpdateMachineValidationExternalConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[432] + mi := &file_forge_carbide_proto_msgTypes[438] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30555,7 +31405,7 @@ func (x *AddUpdateMachineValidationExternalConfigRequest) ProtoReflect() protore // Deprecated: Use AddUpdateMachineValidationExternalConfigRequest.ProtoReflect.Descriptor instead. func (*AddUpdateMachineValidationExternalConfigRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{432} + return file_forge_carbide_proto_rawDescGZIP(), []int{438} } func (x *AddUpdateMachineValidationExternalConfigRequest) GetName() string { @@ -30588,7 +31438,7 @@ type RemoveMachineValidationExternalConfigRequest struct { func (x *RemoveMachineValidationExternalConfigRequest) Reset() { *x = RemoveMachineValidationExternalConfigRequest{} - mi := &file_forge_carbide_proto_msgTypes[433] + mi := &file_forge_carbide_proto_msgTypes[439] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30600,7 +31450,7 @@ func (x *RemoveMachineValidationExternalConfigRequest) String() string { func (*RemoveMachineValidationExternalConfigRequest) ProtoMessage() {} func (x *RemoveMachineValidationExternalConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[433] + mi := &file_forge_carbide_proto_msgTypes[439] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30613,7 +31463,7 @@ func (x *RemoveMachineValidationExternalConfigRequest) ProtoReflect() protorefle // Deprecated: Use RemoveMachineValidationExternalConfigRequest.ProtoReflect.Descriptor instead. func (*RemoveMachineValidationExternalConfigRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{433} + return file_forge_carbide_proto_rawDescGZIP(), []int{439} } func (x *RemoveMachineValidationExternalConfigRequest) GetName() string { @@ -30637,7 +31487,7 @@ type MachineValidationOnDemandRequest struct { func (x *MachineValidationOnDemandRequest) Reset() { *x = MachineValidationOnDemandRequest{} - mi := &file_forge_carbide_proto_msgTypes[434] + mi := &file_forge_carbide_proto_msgTypes[440] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30649,7 +31499,7 @@ func (x *MachineValidationOnDemandRequest) String() string { func (*MachineValidationOnDemandRequest) ProtoMessage() {} func (x *MachineValidationOnDemandRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[434] + mi := &file_forge_carbide_proto_msgTypes[440] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30662,7 +31512,7 @@ func (x *MachineValidationOnDemandRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationOnDemandRequest.ProtoReflect.Descriptor instead. func (*MachineValidationOnDemandRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{434} + return file_forge_carbide_proto_rawDescGZIP(), []int{440} } func (x *MachineValidationOnDemandRequest) GetMachineId() *MachineId { @@ -30716,7 +31566,7 @@ type MachineValidationOnDemandResponse struct { func (x *MachineValidationOnDemandResponse) Reset() { *x = MachineValidationOnDemandResponse{} - mi := &file_forge_carbide_proto_msgTypes[435] + mi := &file_forge_carbide_proto_msgTypes[441] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30728,7 +31578,7 @@ func (x *MachineValidationOnDemandResponse) String() string { func (*MachineValidationOnDemandResponse) ProtoMessage() {} func (x *MachineValidationOnDemandResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[435] + mi := &file_forge_carbide_proto_msgTypes[441] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30741,7 +31591,7 @@ func (x *MachineValidationOnDemandResponse) ProtoReflect() protoreflect.Message // Deprecated: Use MachineValidationOnDemandResponse.ProtoReflect.Descriptor instead. func (*MachineValidationOnDemandResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{435} + return file_forge_carbide_proto_rawDescGZIP(), []int{441} } func (x *MachineValidationOnDemandResponse) GetValidationId() *UUID { @@ -30762,7 +31612,7 @@ type AdminPowerControlRequest struct { func (x *AdminPowerControlRequest) Reset() { *x = AdminPowerControlRequest{} - mi := &file_forge_carbide_proto_msgTypes[436] + mi := &file_forge_carbide_proto_msgTypes[442] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30774,7 +31624,7 @@ func (x *AdminPowerControlRequest) String() string { func (*AdminPowerControlRequest) ProtoMessage() {} func (x *AdminPowerControlRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[436] + mi := &file_forge_carbide_proto_msgTypes[442] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30787,7 +31637,7 @@ func (x *AdminPowerControlRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminPowerControlRequest.ProtoReflect.Descriptor instead. func (*AdminPowerControlRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{436} + return file_forge_carbide_proto_rawDescGZIP(), []int{442} } func (x *AdminPowerControlRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -30820,7 +31670,7 @@ type AdminPowerControlResponse struct { func (x *AdminPowerControlResponse) Reset() { *x = AdminPowerControlResponse{} - mi := &file_forge_carbide_proto_msgTypes[437] + mi := &file_forge_carbide_proto_msgTypes[443] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30832,7 +31682,7 @@ func (x *AdminPowerControlResponse) String() string { func (*AdminPowerControlResponse) ProtoMessage() {} func (x *AdminPowerControlResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[437] + mi := &file_forge_carbide_proto_msgTypes[443] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30845,7 +31695,7 @@ func (x *AdminPowerControlResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AdminPowerControlResponse.ProtoReflect.Descriptor instead. func (*AdminPowerControlResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{437} + return file_forge_carbide_proto_rawDescGZIP(), []int{443} } func (x *AdminPowerControlResponse) GetMsg() string { @@ -30865,7 +31715,7 @@ type GetRedfishJobStateRequest struct { func (x *GetRedfishJobStateRequest) Reset() { *x = GetRedfishJobStateRequest{} - mi := &file_forge_carbide_proto_msgTypes[438] + mi := &file_forge_carbide_proto_msgTypes[444] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30877,7 +31727,7 @@ func (x *GetRedfishJobStateRequest) String() string { func (*GetRedfishJobStateRequest) ProtoMessage() {} func (x *GetRedfishJobStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[438] + mi := &file_forge_carbide_proto_msgTypes[444] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30890,7 +31740,7 @@ func (x *GetRedfishJobStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedfishJobStateRequest.ProtoReflect.Descriptor instead. func (*GetRedfishJobStateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{438} + return file_forge_carbide_proto_rawDescGZIP(), []int{444} } func (x *GetRedfishJobStateRequest) GetMachineId() *MachineId { @@ -30916,7 +31766,7 @@ type GetRedfishJobStateResponse struct { func (x *GetRedfishJobStateResponse) Reset() { *x = GetRedfishJobStateResponse{} - mi := &file_forge_carbide_proto_msgTypes[439] + mi := &file_forge_carbide_proto_msgTypes[445] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30928,7 +31778,7 @@ func (x *GetRedfishJobStateResponse) String() string { func (*GetRedfishJobStateResponse) ProtoMessage() {} func (x *GetRedfishJobStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[439] + mi := &file_forge_carbide_proto_msgTypes[445] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30941,7 +31791,7 @@ func (x *GetRedfishJobStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRedfishJobStateResponse.ProtoReflect.Descriptor instead. func (*GetRedfishJobStateResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{439} + return file_forge_carbide_proto_rawDescGZIP(), []int{445} } func (x *GetRedfishJobStateResponse) GetJobState() GetRedfishJobStateResponse_RedfishJobState { @@ -30960,7 +31810,7 @@ type MachineValidationRunList struct { func (x *MachineValidationRunList) Reset() { *x = MachineValidationRunList{} - mi := &file_forge_carbide_proto_msgTypes[440] + mi := &file_forge_carbide_proto_msgTypes[446] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -30972,7 +31822,7 @@ func (x *MachineValidationRunList) String() string { func (*MachineValidationRunList) ProtoMessage() {} func (x *MachineValidationRunList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[440] + mi := &file_forge_carbide_proto_msgTypes[446] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -30985,7 +31835,7 @@ func (x *MachineValidationRunList) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationRunList.ProtoReflect.Descriptor instead. func (*MachineValidationRunList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{440} + return file_forge_carbide_proto_rawDescGZIP(), []int{446} } func (x *MachineValidationRunList) GetRuns() []*MachineValidationRun { @@ -31005,7 +31855,7 @@ type MachineValidationRunListGetRequest struct { func (x *MachineValidationRunListGetRequest) Reset() { *x = MachineValidationRunListGetRequest{} - mi := &file_forge_carbide_proto_msgTypes[441] + mi := &file_forge_carbide_proto_msgTypes[447] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31017,7 +31867,7 @@ func (x *MachineValidationRunListGetRequest) String() string { func (*MachineValidationRunListGetRequest) ProtoMessage() {} func (x *MachineValidationRunListGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[441] + mi := &file_forge_carbide_proto_msgTypes[447] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31030,7 +31880,7 @@ func (x *MachineValidationRunListGetRequest) ProtoReflect() protoreflect.Message // Deprecated: Use MachineValidationRunListGetRequest.ProtoReflect.Descriptor instead. func (*MachineValidationRunListGetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{441} + return file_forge_carbide_proto_rawDescGZIP(), []int{447} } func (x *MachineValidationRunListGetRequest) GetMachineId() *MachineId { @@ -31056,7 +31906,7 @@ type IsBmcInManagedHostResponse struct { func (x *IsBmcInManagedHostResponse) Reset() { *x = IsBmcInManagedHostResponse{} - mi := &file_forge_carbide_proto_msgTypes[442] + mi := &file_forge_carbide_proto_msgTypes[448] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31068,7 +31918,7 @@ func (x *IsBmcInManagedHostResponse) String() string { func (*IsBmcInManagedHostResponse) ProtoMessage() {} func (x *IsBmcInManagedHostResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[442] + mi := &file_forge_carbide_proto_msgTypes[448] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31081,7 +31931,7 @@ func (x *IsBmcInManagedHostResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IsBmcInManagedHostResponse.ProtoReflect.Descriptor instead. func (*IsBmcInManagedHostResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{442} + return file_forge_carbide_proto_rawDescGZIP(), []int{448} } func (x *IsBmcInManagedHostResponse) GetInManagedHost() bool { @@ -31100,7 +31950,7 @@ type BmcCredentialStatusResponse struct { func (x *BmcCredentialStatusResponse) Reset() { *x = BmcCredentialStatusResponse{} - mi := &file_forge_carbide_proto_msgTypes[443] + mi := &file_forge_carbide_proto_msgTypes[449] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31112,7 +31962,7 @@ func (x *BmcCredentialStatusResponse) String() string { func (*BmcCredentialStatusResponse) ProtoMessage() {} func (x *BmcCredentialStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[443] + mi := &file_forge_carbide_proto_msgTypes[449] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31125,7 +31975,7 @@ func (x *BmcCredentialStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BmcCredentialStatusResponse.ProtoReflect.Descriptor instead. func (*BmcCredentialStatusResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{443} + return file_forge_carbide_proto_rawDescGZIP(), []int{449} } func (x *BmcCredentialStatusResponse) GetHaveCredentials() bool { @@ -31151,7 +32001,7 @@ type MachineValidationTestsGetRequest struct { func (x *MachineValidationTestsGetRequest) Reset() { *x = MachineValidationTestsGetRequest{} - mi := &file_forge_carbide_proto_msgTypes[444] + mi := &file_forge_carbide_proto_msgTypes[450] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31163,7 +32013,7 @@ func (x *MachineValidationTestsGetRequest) String() string { func (*MachineValidationTestsGetRequest) ProtoMessage() {} func (x *MachineValidationTestsGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[444] + mi := &file_forge_carbide_proto_msgTypes[450] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31176,7 +32026,7 @@ func (x *MachineValidationTestsGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationTestsGetRequest.ProtoReflect.Descriptor instead. func (*MachineValidationTestsGetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{444} + return file_forge_carbide_proto_rawDescGZIP(), []int{450} } func (x *MachineValidationTestsGetRequest) GetSupportedPlatforms() []string { @@ -31246,7 +32096,7 @@ type MachineValidationTestUpdateRequest struct { func (x *MachineValidationTestUpdateRequest) Reset() { *x = MachineValidationTestUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[445] + mi := &file_forge_carbide_proto_msgTypes[451] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31258,7 +32108,7 @@ func (x *MachineValidationTestUpdateRequest) String() string { func (*MachineValidationTestUpdateRequest) ProtoMessage() {} func (x *MachineValidationTestUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[445] + mi := &file_forge_carbide_proto_msgTypes[451] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31271,7 +32121,7 @@ func (x *MachineValidationTestUpdateRequest) ProtoReflect() protoreflect.Message // Deprecated: Use MachineValidationTestUpdateRequest.ProtoReflect.Descriptor instead. func (*MachineValidationTestUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{445} + return file_forge_carbide_proto_rawDescGZIP(), []int{451} } func (x *MachineValidationTestUpdateRequest) GetTestId() string { @@ -31321,7 +32171,7 @@ type MachineValidationTestAddRequest struct { func (x *MachineValidationTestAddRequest) Reset() { *x = MachineValidationTestAddRequest{} - mi := &file_forge_carbide_proto_msgTypes[446] + mi := &file_forge_carbide_proto_msgTypes[452] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31333,7 +32183,7 @@ func (x *MachineValidationTestAddRequest) String() string { func (*MachineValidationTestAddRequest) ProtoMessage() {} func (x *MachineValidationTestAddRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[446] + mi := &file_forge_carbide_proto_msgTypes[452] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31346,7 +32196,7 @@ func (x *MachineValidationTestAddRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationTestAddRequest.ProtoReflect.Descriptor instead. func (*MachineValidationTestAddRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{446} + return file_forge_carbide_proto_rawDescGZIP(), []int{452} } func (x *MachineValidationTestAddRequest) GetName() string { @@ -31485,7 +32335,7 @@ type MachineValidationTestAddUpdateResponse struct { func (x *MachineValidationTestAddUpdateResponse) Reset() { *x = MachineValidationTestAddUpdateResponse{} - mi := &file_forge_carbide_proto_msgTypes[447] + mi := &file_forge_carbide_proto_msgTypes[453] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31497,7 +32347,7 @@ func (x *MachineValidationTestAddUpdateResponse) String() string { func (*MachineValidationTestAddUpdateResponse) ProtoMessage() {} func (x *MachineValidationTestAddUpdateResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[447] + mi := &file_forge_carbide_proto_msgTypes[453] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31510,7 +32360,7 @@ func (x *MachineValidationTestAddUpdateResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use MachineValidationTestAddUpdateResponse.ProtoReflect.Descriptor instead. func (*MachineValidationTestAddUpdateResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{447} + return file_forge_carbide_proto_rawDescGZIP(), []int{453} } func (x *MachineValidationTestAddUpdateResponse) GetTestId() string { @@ -31536,7 +32386,7 @@ type MachineValidationTestsGetResponse struct { func (x *MachineValidationTestsGetResponse) Reset() { *x = MachineValidationTestsGetResponse{} - mi := &file_forge_carbide_proto_msgTypes[448] + mi := &file_forge_carbide_proto_msgTypes[454] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31548,7 +32398,7 @@ func (x *MachineValidationTestsGetResponse) String() string { func (*MachineValidationTestsGetResponse) ProtoMessage() {} func (x *MachineValidationTestsGetResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[448] + mi := &file_forge_carbide_proto_msgTypes[454] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31561,7 +32411,7 @@ func (x *MachineValidationTestsGetResponse) ProtoReflect() protoreflect.Message // Deprecated: Use MachineValidationTestsGetResponse.ProtoReflect.Descriptor instead. func (*MachineValidationTestsGetResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{448} + return file_forge_carbide_proto_rawDescGZIP(), []int{454} } func (x *MachineValidationTestsGetResponse) GetTests() []*MachineValidationTest { @@ -31581,7 +32431,7 @@ type MachineValidationTestVerfiedRequest struct { func (x *MachineValidationTestVerfiedRequest) Reset() { *x = MachineValidationTestVerfiedRequest{} - mi := &file_forge_carbide_proto_msgTypes[449] + mi := &file_forge_carbide_proto_msgTypes[455] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31593,7 +32443,7 @@ func (x *MachineValidationTestVerfiedRequest) String() string { func (*MachineValidationTestVerfiedRequest) ProtoMessage() {} func (x *MachineValidationTestVerfiedRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[449] + mi := &file_forge_carbide_proto_msgTypes[455] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31606,7 +32456,7 @@ func (x *MachineValidationTestVerfiedRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use MachineValidationTestVerfiedRequest.ProtoReflect.Descriptor instead. func (*MachineValidationTestVerfiedRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{449} + return file_forge_carbide_proto_rawDescGZIP(), []int{455} } func (x *MachineValidationTestVerfiedRequest) GetTestId() string { @@ -31632,7 +32482,7 @@ type MachineValidationTestVerfiedResponse struct { func (x *MachineValidationTestVerfiedResponse) Reset() { *x = MachineValidationTestVerfiedResponse{} - mi := &file_forge_carbide_proto_msgTypes[450] + mi := &file_forge_carbide_proto_msgTypes[456] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31644,7 +32494,7 @@ func (x *MachineValidationTestVerfiedResponse) String() string { func (*MachineValidationTestVerfiedResponse) ProtoMessage() {} func (x *MachineValidationTestVerfiedResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[450] + mi := &file_forge_carbide_proto_msgTypes[456] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31657,7 +32507,7 @@ func (x *MachineValidationTestVerfiedResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use MachineValidationTestVerfiedResponse.ProtoReflect.Descriptor instead. func (*MachineValidationTestVerfiedResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{450} + return file_forge_carbide_proto_rawDescGZIP(), []int{456} } func (x *MachineValidationTestVerfiedResponse) GetMessage() string { @@ -31698,7 +32548,7 @@ type MachineValidationTest struct { func (x *MachineValidationTest) Reset() { *x = MachineValidationTest{} - mi := &file_forge_carbide_proto_msgTypes[451] + mi := &file_forge_carbide_proto_msgTypes[457] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31710,7 +32560,7 @@ func (x *MachineValidationTest) String() string { func (*MachineValidationTest) ProtoMessage() {} func (x *MachineValidationTest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[451] + mi := &file_forge_carbide_proto_msgTypes[457] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31723,7 +32573,7 @@ func (x *MachineValidationTest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationTest.ProtoReflect.Descriptor instead. func (*MachineValidationTest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{451} + return file_forge_carbide_proto_rawDescGZIP(), []int{457} } func (x *MachineValidationTest) GetTestId() string { @@ -31897,7 +32747,7 @@ type MachineValidationTestNextVersionResponse struct { func (x *MachineValidationTestNextVersionResponse) Reset() { *x = MachineValidationTestNextVersionResponse{} - mi := &file_forge_carbide_proto_msgTypes[452] + mi := &file_forge_carbide_proto_msgTypes[458] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31909,7 +32759,7 @@ func (x *MachineValidationTestNextVersionResponse) String() string { func (*MachineValidationTestNextVersionResponse) ProtoMessage() {} func (x *MachineValidationTestNextVersionResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[452] + mi := &file_forge_carbide_proto_msgTypes[458] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31922,7 +32772,7 @@ func (x *MachineValidationTestNextVersionResponse) ProtoReflect() protoreflect.M // Deprecated: Use MachineValidationTestNextVersionResponse.ProtoReflect.Descriptor instead. func (*MachineValidationTestNextVersionResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{452} + return file_forge_carbide_proto_rawDescGZIP(), []int{458} } func (x *MachineValidationTestNextVersionResponse) GetTestId() string { @@ -31948,7 +32798,7 @@ type MachineValidationTestNextVersionRequest struct { func (x *MachineValidationTestNextVersionRequest) Reset() { *x = MachineValidationTestNextVersionRequest{} - mi := &file_forge_carbide_proto_msgTypes[453] + mi := &file_forge_carbide_proto_msgTypes[459] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -31960,7 +32810,7 @@ func (x *MachineValidationTestNextVersionRequest) String() string { func (*MachineValidationTestNextVersionRequest) ProtoMessage() {} func (x *MachineValidationTestNextVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[453] + mi := &file_forge_carbide_proto_msgTypes[459] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -31973,7 +32823,7 @@ func (x *MachineValidationTestNextVersionRequest) ProtoReflect() protoreflect.Me // Deprecated: Use MachineValidationTestNextVersionRequest.ProtoReflect.Descriptor instead. func (*MachineValidationTestNextVersionRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{453} + return file_forge_carbide_proto_rawDescGZIP(), []int{459} } func (x *MachineValidationTestNextVersionRequest) GetTestId() string { @@ -31994,7 +32844,7 @@ type MachineValidationTestEnableDisableTestRequest struct { func (x *MachineValidationTestEnableDisableTestRequest) Reset() { *x = MachineValidationTestEnableDisableTestRequest{} - mi := &file_forge_carbide_proto_msgTypes[454] + mi := &file_forge_carbide_proto_msgTypes[460] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32006,7 +32856,7 @@ func (x *MachineValidationTestEnableDisableTestRequest) String() string { func (*MachineValidationTestEnableDisableTestRequest) ProtoMessage() {} func (x *MachineValidationTestEnableDisableTestRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[454] + mi := &file_forge_carbide_proto_msgTypes[460] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32019,7 +32869,7 @@ func (x *MachineValidationTestEnableDisableTestRequest) ProtoReflect() protorefl // Deprecated: Use MachineValidationTestEnableDisableTestRequest.ProtoReflect.Descriptor instead. func (*MachineValidationTestEnableDisableTestRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{454} + return file_forge_carbide_proto_rawDescGZIP(), []int{460} } func (x *MachineValidationTestEnableDisableTestRequest) GetTestId() string { @@ -32052,7 +32902,7 @@ type MachineValidationTestEnableDisableTestResponse struct { func (x *MachineValidationTestEnableDisableTestResponse) Reset() { *x = MachineValidationTestEnableDisableTestResponse{} - mi := &file_forge_carbide_proto_msgTypes[455] + mi := &file_forge_carbide_proto_msgTypes[461] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32064,7 +32914,7 @@ func (x *MachineValidationTestEnableDisableTestResponse) String() string { func (*MachineValidationTestEnableDisableTestResponse) ProtoMessage() {} func (x *MachineValidationTestEnableDisableTestResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[455] + mi := &file_forge_carbide_proto_msgTypes[461] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32077,7 +32927,7 @@ func (x *MachineValidationTestEnableDisableTestResponse) ProtoReflect() protoref // Deprecated: Use MachineValidationTestEnableDisableTestResponse.ProtoReflect.Descriptor instead. func (*MachineValidationTestEnableDisableTestResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{455} + return file_forge_carbide_proto_rawDescGZIP(), []int{461} } func (x *MachineValidationTestEnableDisableTestResponse) GetMessage() string { @@ -32098,7 +32948,7 @@ type MachineValidationRunRequest struct { func (x *MachineValidationRunRequest) Reset() { *x = MachineValidationRunRequest{} - mi := &file_forge_carbide_proto_msgTypes[456] + mi := &file_forge_carbide_proto_msgTypes[462] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32110,7 +32960,7 @@ func (x *MachineValidationRunRequest) String() string { func (*MachineValidationRunRequest) ProtoMessage() {} func (x *MachineValidationRunRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[456] + mi := &file_forge_carbide_proto_msgTypes[462] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32123,7 +32973,7 @@ func (x *MachineValidationRunRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationRunRequest.ProtoReflect.Descriptor instead. func (*MachineValidationRunRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{456} + return file_forge_carbide_proto_rawDescGZIP(), []int{462} } func (x *MachineValidationRunRequest) GetValidationId() *UUID { @@ -32156,7 +33006,7 @@ type MachineValidationRunResponse struct { func (x *MachineValidationRunResponse) Reset() { *x = MachineValidationRunResponse{} - mi := &file_forge_carbide_proto_msgTypes[457] + mi := &file_forge_carbide_proto_msgTypes[463] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32168,7 +33018,7 @@ func (x *MachineValidationRunResponse) String() string { func (*MachineValidationRunResponse) ProtoMessage() {} func (x *MachineValidationRunResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[457] + mi := &file_forge_carbide_proto_msgTypes[463] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32181,7 +33031,7 @@ func (x *MachineValidationRunResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineValidationRunResponse.ProtoReflect.Descriptor instead. func (*MachineValidationRunResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{457} + return file_forge_carbide_proto_rawDescGZIP(), []int{463} } func (x *MachineValidationRunResponse) GetMessage() string { @@ -32204,7 +33054,7 @@ type MachineCapabilityAttributesCpu struct { func (x *MachineCapabilityAttributesCpu) Reset() { *x = MachineCapabilityAttributesCpu{} - mi := &file_forge_carbide_proto_msgTypes[458] + mi := &file_forge_carbide_proto_msgTypes[464] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32216,7 +33066,7 @@ func (x *MachineCapabilityAttributesCpu) String() string { func (*MachineCapabilityAttributesCpu) ProtoMessage() {} func (x *MachineCapabilityAttributesCpu) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[458] + mi := &file_forge_carbide_proto_msgTypes[464] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32229,7 +33079,7 @@ func (x *MachineCapabilityAttributesCpu) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCapabilityAttributesCpu.ProtoReflect.Descriptor instead. func (*MachineCapabilityAttributesCpu) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{458} + return file_forge_carbide_proto_rawDescGZIP(), []int{464} } func (x *MachineCapabilityAttributesCpu) GetName() string { @@ -32283,7 +33133,7 @@ type MachineCapabilityAttributesGpu struct { func (x *MachineCapabilityAttributesGpu) Reset() { *x = MachineCapabilityAttributesGpu{} - mi := &file_forge_carbide_proto_msgTypes[459] + mi := &file_forge_carbide_proto_msgTypes[465] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32295,7 +33145,7 @@ func (x *MachineCapabilityAttributesGpu) String() string { func (*MachineCapabilityAttributesGpu) ProtoMessage() {} func (x *MachineCapabilityAttributesGpu) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[459] + mi := &file_forge_carbide_proto_msgTypes[465] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32308,7 +33158,7 @@ func (x *MachineCapabilityAttributesGpu) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCapabilityAttributesGpu.ProtoReflect.Descriptor instead. func (*MachineCapabilityAttributesGpu) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{459} + return file_forge_carbide_proto_rawDescGZIP(), []int{465} } func (x *MachineCapabilityAttributesGpu) GetName() string { @@ -32379,7 +33229,7 @@ type MachineCapabilityAttributesMemory struct { func (x *MachineCapabilityAttributesMemory) Reset() { *x = MachineCapabilityAttributesMemory{} - mi := &file_forge_carbide_proto_msgTypes[460] + mi := &file_forge_carbide_proto_msgTypes[466] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32391,7 +33241,7 @@ func (x *MachineCapabilityAttributesMemory) String() string { func (*MachineCapabilityAttributesMemory) ProtoMessage() {} func (x *MachineCapabilityAttributesMemory) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[460] + mi := &file_forge_carbide_proto_msgTypes[466] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32404,7 +33254,7 @@ func (x *MachineCapabilityAttributesMemory) ProtoReflect() protoreflect.Message // Deprecated: Use MachineCapabilityAttributesMemory.ProtoReflect.Descriptor instead. func (*MachineCapabilityAttributesMemory) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{460} + return file_forge_carbide_proto_rawDescGZIP(), []int{466} } func (x *MachineCapabilityAttributesMemory) GetName() string { @@ -32447,7 +33297,7 @@ type MachineCapabilityAttributesStorage struct { func (x *MachineCapabilityAttributesStorage) Reset() { *x = MachineCapabilityAttributesStorage{} - mi := &file_forge_carbide_proto_msgTypes[461] + mi := &file_forge_carbide_proto_msgTypes[467] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32459,7 +33309,7 @@ func (x *MachineCapabilityAttributesStorage) String() string { func (*MachineCapabilityAttributesStorage) ProtoMessage() {} func (x *MachineCapabilityAttributesStorage) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[461] + mi := &file_forge_carbide_proto_msgTypes[467] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32472,7 +33322,7 @@ func (x *MachineCapabilityAttributesStorage) ProtoReflect() protoreflect.Message // Deprecated: Use MachineCapabilityAttributesStorage.ProtoReflect.Descriptor instead. func (*MachineCapabilityAttributesStorage) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{461} + return file_forge_carbide_proto_rawDescGZIP(), []int{467} } func (x *MachineCapabilityAttributesStorage) GetName() string { @@ -32515,7 +33365,7 @@ type MachineCapabilityAttributesNetwork struct { func (x *MachineCapabilityAttributesNetwork) Reset() { *x = MachineCapabilityAttributesNetwork{} - mi := &file_forge_carbide_proto_msgTypes[462] + mi := &file_forge_carbide_proto_msgTypes[468] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32527,7 +33377,7 @@ func (x *MachineCapabilityAttributesNetwork) String() string { func (*MachineCapabilityAttributesNetwork) ProtoMessage() {} func (x *MachineCapabilityAttributesNetwork) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[462] + mi := &file_forge_carbide_proto_msgTypes[468] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32540,7 +33390,7 @@ func (x *MachineCapabilityAttributesNetwork) ProtoReflect() protoreflect.Message // Deprecated: Use MachineCapabilityAttributesNetwork.ProtoReflect.Descriptor instead. func (*MachineCapabilityAttributesNetwork) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{462} + return file_forge_carbide_proto_rawDescGZIP(), []int{468} } func (x *MachineCapabilityAttributesNetwork) GetName() string { @@ -32590,7 +33440,7 @@ type MachineCapabilityAttributesInfiniband struct { func (x *MachineCapabilityAttributesInfiniband) Reset() { *x = MachineCapabilityAttributesInfiniband{} - mi := &file_forge_carbide_proto_msgTypes[463] + mi := &file_forge_carbide_proto_msgTypes[469] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32602,7 +33452,7 @@ func (x *MachineCapabilityAttributesInfiniband) String() string { func (*MachineCapabilityAttributesInfiniband) ProtoMessage() {} func (x *MachineCapabilityAttributesInfiniband) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[463] + mi := &file_forge_carbide_proto_msgTypes[469] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32615,7 +33465,7 @@ func (x *MachineCapabilityAttributesInfiniband) ProtoReflect() protoreflect.Mess // Deprecated: Use MachineCapabilityAttributesInfiniband.ProtoReflect.Descriptor instead. func (*MachineCapabilityAttributesInfiniband) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{463} + return file_forge_carbide_proto_rawDescGZIP(), []int{469} } func (x *MachineCapabilityAttributesInfiniband) GetName() string { @@ -32657,7 +33507,7 @@ type MachineCapabilityAttributesDpu struct { func (x *MachineCapabilityAttributesDpu) Reset() { *x = MachineCapabilityAttributesDpu{} - mi := &file_forge_carbide_proto_msgTypes[464] + mi := &file_forge_carbide_proto_msgTypes[470] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32669,7 +33519,7 @@ func (x *MachineCapabilityAttributesDpu) String() string { func (*MachineCapabilityAttributesDpu) ProtoMessage() {} func (x *MachineCapabilityAttributesDpu) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[464] + mi := &file_forge_carbide_proto_msgTypes[470] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32682,7 +33532,7 @@ func (x *MachineCapabilityAttributesDpu) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCapabilityAttributesDpu.ProtoReflect.Descriptor instead. func (*MachineCapabilityAttributesDpu) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{464} + return file_forge_carbide_proto_rawDescGZIP(), []int{470} } func (x *MachineCapabilityAttributesDpu) GetName() string { @@ -32721,7 +33571,7 @@ type MachineCapabilitiesSet struct { func (x *MachineCapabilitiesSet) Reset() { *x = MachineCapabilitiesSet{} - mi := &file_forge_carbide_proto_msgTypes[465] + mi := &file_forge_carbide_proto_msgTypes[471] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32733,7 +33583,7 @@ func (x *MachineCapabilitiesSet) String() string { func (*MachineCapabilitiesSet) ProtoMessage() {} func (x *MachineCapabilitiesSet) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[465] + mi := &file_forge_carbide_proto_msgTypes[471] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32746,7 +33596,7 @@ func (x *MachineCapabilitiesSet) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineCapabilitiesSet.ProtoReflect.Descriptor instead. func (*MachineCapabilitiesSet) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{465} + return file_forge_carbide_proto_rawDescGZIP(), []int{471} } func (x *MachineCapabilitiesSet) GetCpu() []*MachineCapabilityAttributesCpu { @@ -32810,7 +33660,7 @@ type InstanceTypeAttributes struct { func (x *InstanceTypeAttributes) Reset() { *x = InstanceTypeAttributes{} - mi := &file_forge_carbide_proto_msgTypes[466] + mi := &file_forge_carbide_proto_msgTypes[472] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32822,7 +33672,7 @@ func (x *InstanceTypeAttributes) String() string { func (*InstanceTypeAttributes) ProtoMessage() {} func (x *InstanceTypeAttributes) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[466] + mi := &file_forge_carbide_proto_msgTypes[472] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32835,7 +33685,7 @@ func (x *InstanceTypeAttributes) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceTypeAttributes.ProtoReflect.Descriptor instead. func (*InstanceTypeAttributes) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{466} + return file_forge_carbide_proto_rawDescGZIP(), []int{472} } func (x *InstanceTypeAttributes) GetDesiredCapabilities() []*InstanceTypeMachineCapabilityFilterAttributes { @@ -32864,7 +33714,7 @@ type InstanceType struct { func (x *InstanceType) Reset() { *x = InstanceType{} - mi := &file_forge_carbide_proto_msgTypes[467] + mi := &file_forge_carbide_proto_msgTypes[473] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32876,7 +33726,7 @@ func (x *InstanceType) String() string { func (*InstanceType) ProtoMessage() {} func (x *InstanceType) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[467] + mi := &file_forge_carbide_proto_msgTypes[473] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32889,7 +33739,7 @@ func (x *InstanceType) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceType.ProtoReflect.Descriptor instead. func (*InstanceType) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{467} + return file_forge_carbide_proto_rawDescGZIP(), []int{473} } func (x *InstanceType) GetId() string { @@ -32960,7 +33810,7 @@ type InstanceTypeMachineCapabilityFilterAttributes struct { func (x *InstanceTypeMachineCapabilityFilterAttributes) Reset() { *x = InstanceTypeMachineCapabilityFilterAttributes{} - mi := &file_forge_carbide_proto_msgTypes[468] + mi := &file_forge_carbide_proto_msgTypes[474] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -32972,7 +33822,7 @@ func (x *InstanceTypeMachineCapabilityFilterAttributes) String() string { func (*InstanceTypeMachineCapabilityFilterAttributes) ProtoMessage() {} func (x *InstanceTypeMachineCapabilityFilterAttributes) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[468] + mi := &file_forge_carbide_proto_msgTypes[474] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -32985,7 +33835,7 @@ func (x *InstanceTypeMachineCapabilityFilterAttributes) ProtoReflect() protorefl // Deprecated: Use InstanceTypeMachineCapabilityFilterAttributes.ProtoReflect.Descriptor instead. func (*InstanceTypeMachineCapabilityFilterAttributes) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{468} + return file_forge_carbide_proto_rawDescGZIP(), []int{474} } func (x *InstanceTypeMachineCapabilityFilterAttributes) GetCapabilityType() MachineCapabilityType { @@ -33076,7 +33926,7 @@ type CreateInstanceTypeRequest struct { func (x *CreateInstanceTypeRequest) Reset() { *x = CreateInstanceTypeRequest{} - mi := &file_forge_carbide_proto_msgTypes[469] + mi := &file_forge_carbide_proto_msgTypes[475] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33088,7 +33938,7 @@ func (x *CreateInstanceTypeRequest) String() string { func (*CreateInstanceTypeRequest) ProtoMessage() {} func (x *CreateInstanceTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[469] + mi := &file_forge_carbide_proto_msgTypes[475] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33101,7 +33951,7 @@ func (x *CreateInstanceTypeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateInstanceTypeRequest.ProtoReflect.Descriptor instead. func (*CreateInstanceTypeRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{469} + return file_forge_carbide_proto_rawDescGZIP(), []int{475} } func (x *CreateInstanceTypeRequest) GetId() string { @@ -33134,7 +33984,7 @@ type CreateInstanceTypeResponse struct { func (x *CreateInstanceTypeResponse) Reset() { *x = CreateInstanceTypeResponse{} - mi := &file_forge_carbide_proto_msgTypes[470] + mi := &file_forge_carbide_proto_msgTypes[476] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33146,7 +33996,7 @@ func (x *CreateInstanceTypeResponse) String() string { func (*CreateInstanceTypeResponse) ProtoMessage() {} func (x *CreateInstanceTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[470] + mi := &file_forge_carbide_proto_msgTypes[476] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33159,7 +34009,7 @@ func (x *CreateInstanceTypeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateInstanceTypeResponse.ProtoReflect.Descriptor instead. func (*CreateInstanceTypeResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{470} + return file_forge_carbide_proto_rawDescGZIP(), []int{476} } func (x *CreateInstanceTypeResponse) GetInstanceType() *InstanceType { @@ -33177,7 +34027,7 @@ type FindInstanceTypeIdsRequest struct { func (x *FindInstanceTypeIdsRequest) Reset() { *x = FindInstanceTypeIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[471] + mi := &file_forge_carbide_proto_msgTypes[477] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33189,7 +34039,7 @@ func (x *FindInstanceTypeIdsRequest) String() string { func (*FindInstanceTypeIdsRequest) ProtoMessage() {} func (x *FindInstanceTypeIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[471] + mi := &file_forge_carbide_proto_msgTypes[477] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33202,7 +34052,7 @@ func (x *FindInstanceTypeIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindInstanceTypeIdsRequest.ProtoReflect.Descriptor instead. func (*FindInstanceTypeIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{471} + return file_forge_carbide_proto_rawDescGZIP(), []int{477} } type FindInstanceTypeIdsResponse struct { @@ -33214,7 +34064,7 @@ type FindInstanceTypeIdsResponse struct { func (x *FindInstanceTypeIdsResponse) Reset() { *x = FindInstanceTypeIdsResponse{} - mi := &file_forge_carbide_proto_msgTypes[472] + mi := &file_forge_carbide_proto_msgTypes[478] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33226,7 +34076,7 @@ func (x *FindInstanceTypeIdsResponse) String() string { func (*FindInstanceTypeIdsResponse) ProtoMessage() {} func (x *FindInstanceTypeIdsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[472] + mi := &file_forge_carbide_proto_msgTypes[478] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33239,7 +34089,7 @@ func (x *FindInstanceTypeIdsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindInstanceTypeIdsResponse.ProtoReflect.Descriptor instead. func (*FindInstanceTypeIdsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{472} + return file_forge_carbide_proto_rawDescGZIP(), []int{478} } func (x *FindInstanceTypeIdsResponse) GetInstanceTypeIds() []string { @@ -33262,7 +34112,7 @@ type FindInstanceTypesByIdsRequest struct { func (x *FindInstanceTypesByIdsRequest) Reset() { *x = FindInstanceTypesByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[473] + mi := &file_forge_carbide_proto_msgTypes[479] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33274,7 +34124,7 @@ func (x *FindInstanceTypesByIdsRequest) String() string { func (*FindInstanceTypesByIdsRequest) ProtoMessage() {} func (x *FindInstanceTypesByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[473] + mi := &file_forge_carbide_proto_msgTypes[479] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33287,7 +34137,7 @@ func (x *FindInstanceTypesByIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindInstanceTypesByIdsRequest.ProtoReflect.Descriptor instead. func (*FindInstanceTypesByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{473} + return file_forge_carbide_proto_rawDescGZIP(), []int{479} } func (x *FindInstanceTypesByIdsRequest) GetInstanceTypeIds() []string { @@ -33320,7 +34170,7 @@ type FindInstanceTypesByIdsResponse struct { func (x *FindInstanceTypesByIdsResponse) Reset() { *x = FindInstanceTypesByIdsResponse{} - mi := &file_forge_carbide_proto_msgTypes[474] + mi := &file_forge_carbide_proto_msgTypes[480] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33332,7 +34182,7 @@ func (x *FindInstanceTypesByIdsResponse) String() string { func (*FindInstanceTypesByIdsResponse) ProtoMessage() {} func (x *FindInstanceTypesByIdsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[474] + mi := &file_forge_carbide_proto_msgTypes[480] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33345,7 +34195,7 @@ func (x *FindInstanceTypesByIdsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindInstanceTypesByIdsResponse.ProtoReflect.Descriptor instead. func (*FindInstanceTypesByIdsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{474} + return file_forge_carbide_proto_rawDescGZIP(), []int{480} } func (x *FindInstanceTypesByIdsResponse) GetInstanceTypes() []*InstanceType { @@ -33364,7 +34214,7 @@ type DeleteInstanceTypeRequest struct { func (x *DeleteInstanceTypeRequest) Reset() { *x = DeleteInstanceTypeRequest{} - mi := &file_forge_carbide_proto_msgTypes[475] + mi := &file_forge_carbide_proto_msgTypes[481] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33376,7 +34226,7 @@ func (x *DeleteInstanceTypeRequest) String() string { func (*DeleteInstanceTypeRequest) ProtoMessage() {} func (x *DeleteInstanceTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[475] + mi := &file_forge_carbide_proto_msgTypes[481] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33389,7 +34239,7 @@ func (x *DeleteInstanceTypeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteInstanceTypeRequest.ProtoReflect.Descriptor instead. func (*DeleteInstanceTypeRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{475} + return file_forge_carbide_proto_rawDescGZIP(), []int{481} } func (x *DeleteInstanceTypeRequest) GetId() string { @@ -33407,7 +34257,7 @@ type DeleteInstanceTypeResponse struct { func (x *DeleteInstanceTypeResponse) Reset() { *x = DeleteInstanceTypeResponse{} - mi := &file_forge_carbide_proto_msgTypes[476] + mi := &file_forge_carbide_proto_msgTypes[482] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33419,7 +34269,7 @@ func (x *DeleteInstanceTypeResponse) String() string { func (*DeleteInstanceTypeResponse) ProtoMessage() {} func (x *DeleteInstanceTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[476] + mi := &file_forge_carbide_proto_msgTypes[482] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33432,7 +34282,7 @@ func (x *DeleteInstanceTypeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteInstanceTypeResponse.ProtoReflect.Descriptor instead. func (*DeleteInstanceTypeResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{476} + return file_forge_carbide_proto_rawDescGZIP(), []int{482} } type UpdateInstanceTypeResponse struct { @@ -33444,7 +34294,7 @@ type UpdateInstanceTypeResponse struct { func (x *UpdateInstanceTypeResponse) Reset() { *x = UpdateInstanceTypeResponse{} - mi := &file_forge_carbide_proto_msgTypes[477] + mi := &file_forge_carbide_proto_msgTypes[483] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33456,7 +34306,7 @@ func (x *UpdateInstanceTypeResponse) String() string { func (*UpdateInstanceTypeResponse) ProtoMessage() {} func (x *UpdateInstanceTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[477] + mi := &file_forge_carbide_proto_msgTypes[483] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33469,7 +34319,7 @@ func (x *UpdateInstanceTypeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateInstanceTypeResponse.ProtoReflect.Descriptor instead. func (*UpdateInstanceTypeResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{477} + return file_forge_carbide_proto_rawDescGZIP(), []int{483} } func (x *UpdateInstanceTypeResponse) GetInstanceType() *InstanceType { @@ -33491,7 +34341,7 @@ type UpdateInstanceTypeRequest struct { func (x *UpdateInstanceTypeRequest) Reset() { *x = UpdateInstanceTypeRequest{} - mi := &file_forge_carbide_proto_msgTypes[478] + mi := &file_forge_carbide_proto_msgTypes[484] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33503,7 +34353,7 @@ func (x *UpdateInstanceTypeRequest) String() string { func (*UpdateInstanceTypeRequest) ProtoMessage() {} func (x *UpdateInstanceTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[478] + mi := &file_forge_carbide_proto_msgTypes[484] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33516,7 +34366,7 @@ func (x *UpdateInstanceTypeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateInstanceTypeRequest.ProtoReflect.Descriptor instead. func (*UpdateInstanceTypeRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{478} + return file_forge_carbide_proto_rawDescGZIP(), []int{484} } func (x *UpdateInstanceTypeRequest) GetId() string { @@ -33557,7 +34407,7 @@ type AssociateMachinesWithInstanceTypeRequest struct { func (x *AssociateMachinesWithInstanceTypeRequest) Reset() { *x = AssociateMachinesWithInstanceTypeRequest{} - mi := &file_forge_carbide_proto_msgTypes[479] + mi := &file_forge_carbide_proto_msgTypes[485] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33569,7 +34419,7 @@ func (x *AssociateMachinesWithInstanceTypeRequest) String() string { func (*AssociateMachinesWithInstanceTypeRequest) ProtoMessage() {} func (x *AssociateMachinesWithInstanceTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[479] + mi := &file_forge_carbide_proto_msgTypes[485] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33582,7 +34432,7 @@ func (x *AssociateMachinesWithInstanceTypeRequest) ProtoReflect() protoreflect.M // Deprecated: Use AssociateMachinesWithInstanceTypeRequest.ProtoReflect.Descriptor instead. func (*AssociateMachinesWithInstanceTypeRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{479} + return file_forge_carbide_proto_rawDescGZIP(), []int{485} } func (x *AssociateMachinesWithInstanceTypeRequest) GetInstanceTypeId() string { @@ -33607,7 +34457,7 @@ type AssociateMachinesWithInstanceTypeResponse struct { func (x *AssociateMachinesWithInstanceTypeResponse) Reset() { *x = AssociateMachinesWithInstanceTypeResponse{} - mi := &file_forge_carbide_proto_msgTypes[480] + mi := &file_forge_carbide_proto_msgTypes[486] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33619,7 +34469,7 @@ func (x *AssociateMachinesWithInstanceTypeResponse) String() string { func (*AssociateMachinesWithInstanceTypeResponse) ProtoMessage() {} func (x *AssociateMachinesWithInstanceTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[480] + mi := &file_forge_carbide_proto_msgTypes[486] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33632,7 +34482,7 @@ func (x *AssociateMachinesWithInstanceTypeResponse) ProtoReflect() protoreflect. // Deprecated: Use AssociateMachinesWithInstanceTypeResponse.ProtoReflect.Descriptor instead. func (*AssociateMachinesWithInstanceTypeResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{480} + return file_forge_carbide_proto_rawDescGZIP(), []int{486} } type RemoveMachineInstanceTypeAssociationRequest struct { @@ -33644,7 +34494,7 @@ type RemoveMachineInstanceTypeAssociationRequest struct { func (x *RemoveMachineInstanceTypeAssociationRequest) Reset() { *x = RemoveMachineInstanceTypeAssociationRequest{} - mi := &file_forge_carbide_proto_msgTypes[481] + mi := &file_forge_carbide_proto_msgTypes[487] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33656,7 +34506,7 @@ func (x *RemoveMachineInstanceTypeAssociationRequest) String() string { func (*RemoveMachineInstanceTypeAssociationRequest) ProtoMessage() {} func (x *RemoveMachineInstanceTypeAssociationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[481] + mi := &file_forge_carbide_proto_msgTypes[487] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33669,7 +34519,7 @@ func (x *RemoveMachineInstanceTypeAssociationRequest) ProtoReflect() protoreflec // Deprecated: Use RemoveMachineInstanceTypeAssociationRequest.ProtoReflect.Descriptor instead. func (*RemoveMachineInstanceTypeAssociationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{481} + return file_forge_carbide_proto_rawDescGZIP(), []int{487} } func (x *RemoveMachineInstanceTypeAssociationRequest) GetMachineId() string { @@ -33687,7 +34537,7 @@ type RemoveMachineInstanceTypeAssociationResponse struct { func (x *RemoveMachineInstanceTypeAssociationResponse) Reset() { *x = RemoveMachineInstanceTypeAssociationResponse{} - mi := &file_forge_carbide_proto_msgTypes[482] + mi := &file_forge_carbide_proto_msgTypes[488] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33699,7 +34549,7 @@ func (x *RemoveMachineInstanceTypeAssociationResponse) String() string { func (*RemoveMachineInstanceTypeAssociationResponse) ProtoMessage() {} func (x *RemoveMachineInstanceTypeAssociationResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[482] + mi := &file_forge_carbide_proto_msgTypes[488] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33712,7 +34562,7 @@ func (x *RemoveMachineInstanceTypeAssociationResponse) ProtoReflect() protorefle // Deprecated: Use RemoveMachineInstanceTypeAssociationResponse.ProtoReflect.Descriptor instead. func (*RemoveMachineInstanceTypeAssociationResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{482} + return file_forge_carbide_proto_rawDescGZIP(), []int{488} } type RedfishBrowseRequest struct { @@ -33724,7 +34574,7 @@ type RedfishBrowseRequest struct { func (x *RedfishBrowseRequest) Reset() { *x = RedfishBrowseRequest{} - mi := &file_forge_carbide_proto_msgTypes[483] + mi := &file_forge_carbide_proto_msgTypes[489] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33736,7 +34586,7 @@ func (x *RedfishBrowseRequest) String() string { func (*RedfishBrowseRequest) ProtoMessage() {} func (x *RedfishBrowseRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[483] + mi := &file_forge_carbide_proto_msgTypes[489] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33749,7 +34599,7 @@ func (x *RedfishBrowseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishBrowseRequest.ProtoReflect.Descriptor instead. func (*RedfishBrowseRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{483} + return file_forge_carbide_proto_rawDescGZIP(), []int{489} } func (x *RedfishBrowseRequest) GetUri() string { @@ -33770,7 +34620,7 @@ type RedfishBrowseResponse struct { func (x *RedfishBrowseResponse) Reset() { *x = RedfishBrowseResponse{} - mi := &file_forge_carbide_proto_msgTypes[484] + mi := &file_forge_carbide_proto_msgTypes[490] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33782,7 +34632,7 @@ func (x *RedfishBrowseResponse) String() string { func (*RedfishBrowseResponse) ProtoMessage() {} func (x *RedfishBrowseResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[484] + mi := &file_forge_carbide_proto_msgTypes[490] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33795,7 +34645,7 @@ func (x *RedfishBrowseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishBrowseResponse.ProtoReflect.Descriptor instead. func (*RedfishBrowseResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{484} + return file_forge_carbide_proto_rawDescGZIP(), []int{490} } func (x *RedfishBrowseResponse) GetText() string { @@ -33821,7 +34671,7 @@ type RedfishListActionsRequest struct { func (x *RedfishListActionsRequest) Reset() { *x = RedfishListActionsRequest{} - mi := &file_forge_carbide_proto_msgTypes[485] + mi := &file_forge_carbide_proto_msgTypes[491] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33833,7 +34683,7 @@ func (x *RedfishListActionsRequest) String() string { func (*RedfishListActionsRequest) ProtoMessage() {} func (x *RedfishListActionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[485] + mi := &file_forge_carbide_proto_msgTypes[491] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33846,7 +34696,7 @@ func (x *RedfishListActionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishListActionsRequest.ProtoReflect.Descriptor instead. func (*RedfishListActionsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{485} + return file_forge_carbide_proto_rawDescGZIP(), []int{491} } func (x *RedfishListActionsRequest) GetMachineIp() string { @@ -33865,7 +34715,7 @@ type RedfishListActionsResponse struct { func (x *RedfishListActionsResponse) Reset() { *x = RedfishListActionsResponse{} - mi := &file_forge_carbide_proto_msgTypes[486] + mi := &file_forge_carbide_proto_msgTypes[492] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33877,7 +34727,7 @@ func (x *RedfishListActionsResponse) String() string { func (*RedfishListActionsResponse) ProtoMessage() {} func (x *RedfishListActionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[486] + mi := &file_forge_carbide_proto_msgTypes[492] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33890,7 +34740,7 @@ func (x *RedfishListActionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishListActionsResponse.ProtoReflect.Descriptor instead. func (*RedfishListActionsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{486} + return file_forge_carbide_proto_rawDescGZIP(), []int{492} } func (x *RedfishListActionsResponse) GetActions() []*RedfishAction { @@ -33923,7 +34773,7 @@ type RedfishAction struct { func (x *RedfishAction) Reset() { *x = RedfishAction{} - mi := &file_forge_carbide_proto_msgTypes[487] + mi := &file_forge_carbide_proto_msgTypes[493] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -33935,7 +34785,7 @@ func (x *RedfishAction) String() string { func (*RedfishAction) ProtoMessage() {} func (x *RedfishAction) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[487] + mi := &file_forge_carbide_proto_msgTypes[493] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -33948,7 +34798,7 @@ func (x *RedfishAction) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishAction.ProtoReflect.Descriptor instead. func (*RedfishAction) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{487} + return file_forge_carbide_proto_rawDescGZIP(), []int{493} } func (x *RedfishAction) GetRequestId() int64 { @@ -34044,7 +34894,7 @@ type OptionalRedfishActionResult struct { func (x *OptionalRedfishActionResult) Reset() { *x = OptionalRedfishActionResult{} - mi := &file_forge_carbide_proto_msgTypes[488] + mi := &file_forge_carbide_proto_msgTypes[494] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34056,7 +34906,7 @@ func (x *OptionalRedfishActionResult) String() string { func (*OptionalRedfishActionResult) ProtoMessage() {} func (x *OptionalRedfishActionResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[488] + mi := &file_forge_carbide_proto_msgTypes[494] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34069,7 +34919,7 @@ func (x *OptionalRedfishActionResult) ProtoReflect() protoreflect.Message { // Deprecated: Use OptionalRedfishActionResult.ProtoReflect.Descriptor instead. func (*OptionalRedfishActionResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{488} + return file_forge_carbide_proto_rawDescGZIP(), []int{494} } func (x *OptionalRedfishActionResult) GetResult() *RedfishActionResult { @@ -34091,7 +34941,7 @@ type RedfishActionResult struct { func (x *RedfishActionResult) Reset() { *x = RedfishActionResult{} - mi := &file_forge_carbide_proto_msgTypes[489] + mi := &file_forge_carbide_proto_msgTypes[495] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34103,7 +34953,7 @@ func (x *RedfishActionResult) String() string { func (*RedfishActionResult) ProtoMessage() {} func (x *RedfishActionResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[489] + mi := &file_forge_carbide_proto_msgTypes[495] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34116,7 +34966,7 @@ func (x *RedfishActionResult) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishActionResult.ProtoReflect.Descriptor instead. func (*RedfishActionResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{489} + return file_forge_carbide_proto_rawDescGZIP(), []int{495} } func (x *RedfishActionResult) GetHeaders() map[string]string { @@ -34159,7 +35009,7 @@ type RedfishCreateActionRequest struct { func (x *RedfishCreateActionRequest) Reset() { *x = RedfishCreateActionRequest{} - mi := &file_forge_carbide_proto_msgTypes[490] + mi := &file_forge_carbide_proto_msgTypes[496] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34171,7 +35021,7 @@ func (x *RedfishCreateActionRequest) String() string { func (*RedfishCreateActionRequest) ProtoMessage() {} func (x *RedfishCreateActionRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[490] + mi := &file_forge_carbide_proto_msgTypes[496] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34184,7 +35034,7 @@ func (x *RedfishCreateActionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishCreateActionRequest.ProtoReflect.Descriptor instead. func (*RedfishCreateActionRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{490} + return file_forge_carbide_proto_rawDescGZIP(), []int{496} } func (x *RedfishCreateActionRequest) GetIps() []string { @@ -34224,7 +35074,7 @@ type RedfishCreateActionResponse struct { func (x *RedfishCreateActionResponse) Reset() { *x = RedfishCreateActionResponse{} - mi := &file_forge_carbide_proto_msgTypes[491] + mi := &file_forge_carbide_proto_msgTypes[497] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34236,7 +35086,7 @@ func (x *RedfishCreateActionResponse) String() string { func (*RedfishCreateActionResponse) ProtoMessage() {} func (x *RedfishCreateActionResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[491] + mi := &file_forge_carbide_proto_msgTypes[497] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34249,7 +35099,7 @@ func (x *RedfishCreateActionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishCreateActionResponse.ProtoReflect.Descriptor instead. func (*RedfishCreateActionResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{491} + return file_forge_carbide_proto_rawDescGZIP(), []int{497} } func (x *RedfishCreateActionResponse) GetRequestId() int64 { @@ -34268,7 +35118,7 @@ type RedfishActionID struct { func (x *RedfishActionID) Reset() { *x = RedfishActionID{} - mi := &file_forge_carbide_proto_msgTypes[492] + mi := &file_forge_carbide_proto_msgTypes[498] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34280,7 +35130,7 @@ func (x *RedfishActionID) String() string { func (*RedfishActionID) ProtoMessage() {} func (x *RedfishActionID) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[492] + mi := &file_forge_carbide_proto_msgTypes[498] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34293,7 +35143,7 @@ func (x *RedfishActionID) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishActionID.ProtoReflect.Descriptor instead. func (*RedfishActionID) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{492} + return file_forge_carbide_proto_rawDescGZIP(), []int{498} } func (x *RedfishActionID) GetRequestId() int64 { @@ -34311,7 +35161,7 @@ type RedfishApproveActionResponse struct { func (x *RedfishApproveActionResponse) Reset() { *x = RedfishApproveActionResponse{} - mi := &file_forge_carbide_proto_msgTypes[493] + mi := &file_forge_carbide_proto_msgTypes[499] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34323,7 +35173,7 @@ func (x *RedfishApproveActionResponse) String() string { func (*RedfishApproveActionResponse) ProtoMessage() {} func (x *RedfishApproveActionResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[493] + mi := &file_forge_carbide_proto_msgTypes[499] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34336,7 +35186,7 @@ func (x *RedfishApproveActionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishApproveActionResponse.ProtoReflect.Descriptor instead. func (*RedfishApproveActionResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{493} + return file_forge_carbide_proto_rawDescGZIP(), []int{499} } type RedfishApplyActionResponse struct { @@ -34347,7 +35197,7 @@ type RedfishApplyActionResponse struct { func (x *RedfishApplyActionResponse) Reset() { *x = RedfishApplyActionResponse{} - mi := &file_forge_carbide_proto_msgTypes[494] + mi := &file_forge_carbide_proto_msgTypes[500] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34359,7 +35209,7 @@ func (x *RedfishApplyActionResponse) String() string { func (*RedfishApplyActionResponse) ProtoMessage() {} func (x *RedfishApplyActionResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[494] + mi := &file_forge_carbide_proto_msgTypes[500] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34372,7 +35222,7 @@ func (x *RedfishApplyActionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishApplyActionResponse.ProtoReflect.Descriptor instead. func (*RedfishApplyActionResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{494} + return file_forge_carbide_proto_rawDescGZIP(), []int{500} } type RedfishCancelActionResponse struct { @@ -34383,7 +35233,7 @@ type RedfishCancelActionResponse struct { func (x *RedfishCancelActionResponse) Reset() { *x = RedfishCancelActionResponse{} - mi := &file_forge_carbide_proto_msgTypes[495] + mi := &file_forge_carbide_proto_msgTypes[501] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34395,7 +35245,7 @@ func (x *RedfishCancelActionResponse) String() string { func (*RedfishCancelActionResponse) ProtoMessage() {} func (x *RedfishCancelActionResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[495] + mi := &file_forge_carbide_proto_msgTypes[501] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34408,7 +35258,7 @@ func (x *RedfishCancelActionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RedfishCancelActionResponse.ProtoReflect.Descriptor instead. func (*RedfishCancelActionResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{495} + return file_forge_carbide_proto_rawDescGZIP(), []int{501} } type UfmBrowseRequest struct { @@ -34423,7 +35273,7 @@ type UfmBrowseRequest struct { func (x *UfmBrowseRequest) Reset() { *x = UfmBrowseRequest{} - mi := &file_forge_carbide_proto_msgTypes[496] + mi := &file_forge_carbide_proto_msgTypes[502] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34435,7 +35285,7 @@ func (x *UfmBrowseRequest) String() string { func (*UfmBrowseRequest) ProtoMessage() {} func (x *UfmBrowseRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[496] + mi := &file_forge_carbide_proto_msgTypes[502] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34448,7 +35298,7 @@ func (x *UfmBrowseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UfmBrowseRequest.ProtoReflect.Descriptor instead. func (*UfmBrowseRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{496} + return file_forge_carbide_proto_rawDescGZIP(), []int{502} } func (x *UfmBrowseRequest) GetFabricId() string { @@ -34479,7 +35329,7 @@ type UfmBrowseResponse struct { func (x *UfmBrowseResponse) Reset() { *x = UfmBrowseResponse{} - mi := &file_forge_carbide_proto_msgTypes[497] + mi := &file_forge_carbide_proto_msgTypes[503] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34491,7 +35341,7 @@ func (x *UfmBrowseResponse) String() string { func (*UfmBrowseResponse) ProtoMessage() {} func (x *UfmBrowseResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[497] + mi := &file_forge_carbide_proto_msgTypes[503] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34504,7 +35354,7 @@ func (x *UfmBrowseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UfmBrowseResponse.ProtoReflect.Descriptor instead. func (*UfmBrowseResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{497} + return file_forge_carbide_proto_rawDescGZIP(), []int{503} } func (x *UfmBrowseResponse) GetBody() string { @@ -34539,7 +35389,7 @@ type NetworkSecurityGroupAttributes struct { func (x *NetworkSecurityGroupAttributes) Reset() { *x = NetworkSecurityGroupAttributes{} - mi := &file_forge_carbide_proto_msgTypes[498] + mi := &file_forge_carbide_proto_msgTypes[504] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34551,7 +35401,7 @@ func (x *NetworkSecurityGroupAttributes) String() string { func (*NetworkSecurityGroupAttributes) ProtoMessage() {} func (x *NetworkSecurityGroupAttributes) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[498] + mi := &file_forge_carbide_proto_msgTypes[504] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34564,7 +35414,7 @@ func (x *NetworkSecurityGroupAttributes) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkSecurityGroupAttributes.ProtoReflect.Descriptor instead. func (*NetworkSecurityGroupAttributes) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{498} + return file_forge_carbide_proto_rawDescGZIP(), []int{504} } func (x *NetworkSecurityGroupAttributes) GetRules() []*NetworkSecurityGroupRuleAttributes { @@ -34597,7 +35447,7 @@ type NetworkSecurityGroup struct { func (x *NetworkSecurityGroup) Reset() { *x = NetworkSecurityGroup{} - mi := &file_forge_carbide_proto_msgTypes[499] + mi := &file_forge_carbide_proto_msgTypes[505] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34609,7 +35459,7 @@ func (x *NetworkSecurityGroup) String() string { func (*NetworkSecurityGroup) ProtoMessage() {} func (x *NetworkSecurityGroup) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[499] + mi := &file_forge_carbide_proto_msgTypes[505] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34622,7 +35472,7 @@ func (x *NetworkSecurityGroup) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkSecurityGroup.ProtoReflect.Descriptor instead. func (*NetworkSecurityGroup) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{499} + return file_forge_carbide_proto_rawDescGZIP(), []int{505} } func (x *NetworkSecurityGroup) GetId() string { @@ -34693,7 +35543,7 @@ type CreateNetworkSecurityGroupRequest struct { func (x *CreateNetworkSecurityGroupRequest) Reset() { *x = CreateNetworkSecurityGroupRequest{} - mi := &file_forge_carbide_proto_msgTypes[500] + mi := &file_forge_carbide_proto_msgTypes[506] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34705,7 +35555,7 @@ func (x *CreateNetworkSecurityGroupRequest) String() string { func (*CreateNetworkSecurityGroupRequest) ProtoMessage() {} func (x *CreateNetworkSecurityGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[500] + mi := &file_forge_carbide_proto_msgTypes[506] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34718,7 +35568,7 @@ func (x *CreateNetworkSecurityGroupRequest) ProtoReflect() protoreflect.Message // Deprecated: Use CreateNetworkSecurityGroupRequest.ProtoReflect.Descriptor instead. func (*CreateNetworkSecurityGroupRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{500} + return file_forge_carbide_proto_rawDescGZIP(), []int{506} } func (x *CreateNetworkSecurityGroupRequest) GetId() string { @@ -34758,7 +35608,7 @@ type CreateNetworkSecurityGroupResponse struct { func (x *CreateNetworkSecurityGroupResponse) Reset() { *x = CreateNetworkSecurityGroupResponse{} - mi := &file_forge_carbide_proto_msgTypes[501] + mi := &file_forge_carbide_proto_msgTypes[507] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34770,7 +35620,7 @@ func (x *CreateNetworkSecurityGroupResponse) String() string { func (*CreateNetworkSecurityGroupResponse) ProtoMessage() {} func (x *CreateNetworkSecurityGroupResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[501] + mi := &file_forge_carbide_proto_msgTypes[507] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34783,7 +35633,7 @@ func (x *CreateNetworkSecurityGroupResponse) ProtoReflect() protoreflect.Message // Deprecated: Use CreateNetworkSecurityGroupResponse.ProtoReflect.Descriptor instead. func (*CreateNetworkSecurityGroupResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{501} + return file_forge_carbide_proto_rawDescGZIP(), []int{507} } func (x *CreateNetworkSecurityGroupResponse) GetNetworkSecurityGroup() *NetworkSecurityGroup { @@ -34803,7 +35653,7 @@ type FindNetworkSecurityGroupIdsRequest struct { func (x *FindNetworkSecurityGroupIdsRequest) Reset() { *x = FindNetworkSecurityGroupIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[502] + mi := &file_forge_carbide_proto_msgTypes[508] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34815,7 +35665,7 @@ func (x *FindNetworkSecurityGroupIdsRequest) String() string { func (*FindNetworkSecurityGroupIdsRequest) ProtoMessage() {} func (x *FindNetworkSecurityGroupIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[502] + mi := &file_forge_carbide_proto_msgTypes[508] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34828,7 +35678,7 @@ func (x *FindNetworkSecurityGroupIdsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use FindNetworkSecurityGroupIdsRequest.ProtoReflect.Descriptor instead. func (*FindNetworkSecurityGroupIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{502} + return file_forge_carbide_proto_rawDescGZIP(), []int{508} } func (x *FindNetworkSecurityGroupIdsRequest) GetName() string { @@ -34854,7 +35704,7 @@ type FindNetworkSecurityGroupIdsResponse struct { func (x *FindNetworkSecurityGroupIdsResponse) Reset() { *x = FindNetworkSecurityGroupIdsResponse{} - mi := &file_forge_carbide_proto_msgTypes[503] + mi := &file_forge_carbide_proto_msgTypes[509] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34866,7 +35716,7 @@ func (x *FindNetworkSecurityGroupIdsResponse) String() string { func (*FindNetworkSecurityGroupIdsResponse) ProtoMessage() {} func (x *FindNetworkSecurityGroupIdsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[503] + mi := &file_forge_carbide_proto_msgTypes[509] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34879,7 +35729,7 @@ func (x *FindNetworkSecurityGroupIdsResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use FindNetworkSecurityGroupIdsResponse.ProtoReflect.Descriptor instead. func (*FindNetworkSecurityGroupIdsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{503} + return file_forge_carbide_proto_rawDescGZIP(), []int{509} } func (x *FindNetworkSecurityGroupIdsResponse) GetNetworkSecurityGroupIds() []string { @@ -34899,7 +35749,7 @@ type FindNetworkSecurityGroupsByIdsRequest struct { func (x *FindNetworkSecurityGroupsByIdsRequest) Reset() { *x = FindNetworkSecurityGroupsByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[504] + mi := &file_forge_carbide_proto_msgTypes[510] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34911,7 +35761,7 @@ func (x *FindNetworkSecurityGroupsByIdsRequest) String() string { func (*FindNetworkSecurityGroupsByIdsRequest) ProtoMessage() {} func (x *FindNetworkSecurityGroupsByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[504] + mi := &file_forge_carbide_proto_msgTypes[510] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34924,7 +35774,7 @@ func (x *FindNetworkSecurityGroupsByIdsRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use FindNetworkSecurityGroupsByIdsRequest.ProtoReflect.Descriptor instead. func (*FindNetworkSecurityGroupsByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{504} + return file_forge_carbide_proto_rawDescGZIP(), []int{510} } func (x *FindNetworkSecurityGroupsByIdsRequest) GetNetworkSecurityGroupIds() []string { @@ -34950,7 +35800,7 @@ type FindNetworkSecurityGroupsByIdsResponse struct { func (x *FindNetworkSecurityGroupsByIdsResponse) Reset() { *x = FindNetworkSecurityGroupsByIdsResponse{} - mi := &file_forge_carbide_proto_msgTypes[505] + mi := &file_forge_carbide_proto_msgTypes[511] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -34962,7 +35812,7 @@ func (x *FindNetworkSecurityGroupsByIdsResponse) String() string { func (*FindNetworkSecurityGroupsByIdsResponse) ProtoMessage() {} func (x *FindNetworkSecurityGroupsByIdsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[505] + mi := &file_forge_carbide_proto_msgTypes[511] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -34975,7 +35825,7 @@ func (x *FindNetworkSecurityGroupsByIdsResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use FindNetworkSecurityGroupsByIdsResponse.ProtoReflect.Descriptor instead. func (*FindNetworkSecurityGroupsByIdsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{505} + return file_forge_carbide_proto_rawDescGZIP(), []int{511} } func (x *FindNetworkSecurityGroupsByIdsResponse) GetNetworkSecurityGroups() []*NetworkSecurityGroup { @@ -34994,7 +35844,7 @@ type UpdateNetworkSecurityGroupResponse struct { func (x *UpdateNetworkSecurityGroupResponse) Reset() { *x = UpdateNetworkSecurityGroupResponse{} - mi := &file_forge_carbide_proto_msgTypes[506] + mi := &file_forge_carbide_proto_msgTypes[512] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35006,7 +35856,7 @@ func (x *UpdateNetworkSecurityGroupResponse) String() string { func (*UpdateNetworkSecurityGroupResponse) ProtoMessage() {} func (x *UpdateNetworkSecurityGroupResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[506] + mi := &file_forge_carbide_proto_msgTypes[512] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35019,7 +35869,7 @@ func (x *UpdateNetworkSecurityGroupResponse) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateNetworkSecurityGroupResponse.ProtoReflect.Descriptor instead. func (*UpdateNetworkSecurityGroupResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{506} + return file_forge_carbide_proto_rawDescGZIP(), []int{512} } func (x *UpdateNetworkSecurityGroupResponse) GetNetworkSecurityGroup() *NetworkSecurityGroup { @@ -35042,7 +35892,7 @@ type UpdateNetworkSecurityGroupRequest struct { func (x *UpdateNetworkSecurityGroupRequest) Reset() { *x = UpdateNetworkSecurityGroupRequest{} - mi := &file_forge_carbide_proto_msgTypes[507] + mi := &file_forge_carbide_proto_msgTypes[513] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35054,7 +35904,7 @@ func (x *UpdateNetworkSecurityGroupRequest) String() string { func (*UpdateNetworkSecurityGroupRequest) ProtoMessage() {} func (x *UpdateNetworkSecurityGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[507] + mi := &file_forge_carbide_proto_msgTypes[513] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35067,7 +35917,7 @@ func (x *UpdateNetworkSecurityGroupRequest) ProtoReflect() protoreflect.Message // Deprecated: Use UpdateNetworkSecurityGroupRequest.ProtoReflect.Descriptor instead. func (*UpdateNetworkSecurityGroupRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{507} + return file_forge_carbide_proto_rawDescGZIP(), []int{513} } func (x *UpdateNetworkSecurityGroupRequest) GetId() string { @@ -35115,7 +35965,7 @@ type DeleteNetworkSecurityGroupRequest struct { func (x *DeleteNetworkSecurityGroupRequest) Reset() { *x = DeleteNetworkSecurityGroupRequest{} - mi := &file_forge_carbide_proto_msgTypes[508] + mi := &file_forge_carbide_proto_msgTypes[514] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35127,7 +35977,7 @@ func (x *DeleteNetworkSecurityGroupRequest) String() string { func (*DeleteNetworkSecurityGroupRequest) ProtoMessage() {} func (x *DeleteNetworkSecurityGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[508] + mi := &file_forge_carbide_proto_msgTypes[514] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35140,7 +35990,7 @@ func (x *DeleteNetworkSecurityGroupRequest) ProtoReflect() protoreflect.Message // Deprecated: Use DeleteNetworkSecurityGroupRequest.ProtoReflect.Descriptor instead. func (*DeleteNetworkSecurityGroupRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{508} + return file_forge_carbide_proto_rawDescGZIP(), []int{514} } func (x *DeleteNetworkSecurityGroupRequest) GetId() string { @@ -35165,7 +36015,7 @@ type DeleteNetworkSecurityGroupResponse struct { func (x *DeleteNetworkSecurityGroupResponse) Reset() { *x = DeleteNetworkSecurityGroupResponse{} - mi := &file_forge_carbide_proto_msgTypes[509] + mi := &file_forge_carbide_proto_msgTypes[515] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35177,7 +36027,7 @@ func (x *DeleteNetworkSecurityGroupResponse) String() string { func (*DeleteNetworkSecurityGroupResponse) ProtoMessage() {} func (x *DeleteNetworkSecurityGroupResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[509] + mi := &file_forge_carbide_proto_msgTypes[515] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35190,7 +36040,7 @@ func (x *DeleteNetworkSecurityGroupResponse) ProtoReflect() protoreflect.Message // Deprecated: Use DeleteNetworkSecurityGroupResponse.ProtoReflect.Descriptor instead. func (*DeleteNetworkSecurityGroupResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{509} + return file_forge_carbide_proto_rawDescGZIP(), []int{515} } type NetworkSecurityGroupStatus struct { @@ -35204,7 +36054,7 @@ type NetworkSecurityGroupStatus struct { func (x *NetworkSecurityGroupStatus) Reset() { *x = NetworkSecurityGroupStatus{} - mi := &file_forge_carbide_proto_msgTypes[510] + mi := &file_forge_carbide_proto_msgTypes[516] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35216,7 +36066,7 @@ func (x *NetworkSecurityGroupStatus) String() string { func (*NetworkSecurityGroupStatus) ProtoMessage() {} func (x *NetworkSecurityGroupStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[510] + mi := &file_forge_carbide_proto_msgTypes[516] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35229,7 +36079,7 @@ func (x *NetworkSecurityGroupStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkSecurityGroupStatus.ProtoReflect.Descriptor instead. func (*NetworkSecurityGroupStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{510} + return file_forge_carbide_proto_rawDescGZIP(), []int{516} } func (x *NetworkSecurityGroupStatus) GetSource() NetworkSecurityGroupSource { @@ -35282,7 +36132,7 @@ type NetworkSecurityGroupPropagationObjectStatus struct { func (x *NetworkSecurityGroupPropagationObjectStatus) Reset() { *x = NetworkSecurityGroupPropagationObjectStatus{} - mi := &file_forge_carbide_proto_msgTypes[511] + mi := &file_forge_carbide_proto_msgTypes[517] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35294,7 +36144,7 @@ func (x *NetworkSecurityGroupPropagationObjectStatus) String() string { func (*NetworkSecurityGroupPropagationObjectStatus) ProtoMessage() {} func (x *NetworkSecurityGroupPropagationObjectStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[511] + mi := &file_forge_carbide_proto_msgTypes[517] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35307,7 +36157,7 @@ func (x *NetworkSecurityGroupPropagationObjectStatus) ProtoReflect() protoreflec // Deprecated: Use NetworkSecurityGroupPropagationObjectStatus.ProtoReflect.Descriptor instead. func (*NetworkSecurityGroupPropagationObjectStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{511} + return file_forge_carbide_proto_rawDescGZIP(), []int{517} } func (x *NetworkSecurityGroupPropagationObjectStatus) GetId() string { @@ -35355,7 +36205,7 @@ type GetNetworkSecurityGroupPropagationStatusResponse struct { func (x *GetNetworkSecurityGroupPropagationStatusResponse) Reset() { *x = GetNetworkSecurityGroupPropagationStatusResponse{} - mi := &file_forge_carbide_proto_msgTypes[512] + mi := &file_forge_carbide_proto_msgTypes[518] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35367,7 +36217,7 @@ func (x *GetNetworkSecurityGroupPropagationStatusResponse) String() string { func (*GetNetworkSecurityGroupPropagationStatusResponse) ProtoMessage() {} func (x *GetNetworkSecurityGroupPropagationStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[512] + mi := &file_forge_carbide_proto_msgTypes[518] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35380,7 +36230,7 @@ func (x *GetNetworkSecurityGroupPropagationStatusResponse) ProtoReflect() protor // Deprecated: Use GetNetworkSecurityGroupPropagationStatusResponse.ProtoReflect.Descriptor instead. func (*GetNetworkSecurityGroupPropagationStatusResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{512} + return file_forge_carbide_proto_rawDescGZIP(), []int{518} } func (x *GetNetworkSecurityGroupPropagationStatusResponse) GetVpcs() []*NetworkSecurityGroupPropagationObjectStatus { @@ -35406,7 +36256,7 @@ type NetworkSecurityGroupIdList struct { func (x *NetworkSecurityGroupIdList) Reset() { *x = NetworkSecurityGroupIdList{} - mi := &file_forge_carbide_proto_msgTypes[513] + mi := &file_forge_carbide_proto_msgTypes[519] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35418,7 +36268,7 @@ func (x *NetworkSecurityGroupIdList) String() string { func (*NetworkSecurityGroupIdList) ProtoMessage() {} func (x *NetworkSecurityGroupIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[513] + mi := &file_forge_carbide_proto_msgTypes[519] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35431,7 +36281,7 @@ func (x *NetworkSecurityGroupIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkSecurityGroupIdList.ProtoReflect.Descriptor instead. func (*NetworkSecurityGroupIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{513} + return file_forge_carbide_proto_rawDescGZIP(), []int{519} } func (x *NetworkSecurityGroupIdList) GetIds() []string { @@ -35463,7 +36313,7 @@ type GetNetworkSecurityGroupPropagationStatusRequest struct { func (x *GetNetworkSecurityGroupPropagationStatusRequest) Reset() { *x = GetNetworkSecurityGroupPropagationStatusRequest{} - mi := &file_forge_carbide_proto_msgTypes[514] + mi := &file_forge_carbide_proto_msgTypes[520] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35475,7 +36325,7 @@ func (x *GetNetworkSecurityGroupPropagationStatusRequest) String() string { func (*GetNetworkSecurityGroupPropagationStatusRequest) ProtoMessage() {} func (x *GetNetworkSecurityGroupPropagationStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[514] + mi := &file_forge_carbide_proto_msgTypes[520] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35488,7 +36338,7 @@ func (x *GetNetworkSecurityGroupPropagationStatusRequest) ProtoReflect() protore // Deprecated: Use GetNetworkSecurityGroupPropagationStatusRequest.ProtoReflect.Descriptor instead. func (*GetNetworkSecurityGroupPropagationStatusRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{514} + return file_forge_carbide_proto_rawDescGZIP(), []int{520} } func (x *GetNetworkSecurityGroupPropagationStatusRequest) GetVpcIds() []string { @@ -35540,7 +36390,7 @@ type NetworkSecurityGroupRuleAttributes struct { func (x *NetworkSecurityGroupRuleAttributes) Reset() { *x = NetworkSecurityGroupRuleAttributes{} - mi := &file_forge_carbide_proto_msgTypes[515] + mi := &file_forge_carbide_proto_msgTypes[521] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35552,7 +36402,7 @@ func (x *NetworkSecurityGroupRuleAttributes) String() string { func (*NetworkSecurityGroupRuleAttributes) ProtoMessage() {} func (x *NetworkSecurityGroupRuleAttributes) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[515] + mi := &file_forge_carbide_proto_msgTypes[521] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35565,7 +36415,7 @@ func (x *NetworkSecurityGroupRuleAttributes) ProtoReflect() protoreflect.Message // Deprecated: Use NetworkSecurityGroupRuleAttributes.ProtoReflect.Descriptor instead. func (*NetworkSecurityGroupRuleAttributes) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{515} + return file_forge_carbide_proto_rawDescGZIP(), []int{521} } func (x *NetworkSecurityGroupRuleAttributes) GetId() string { @@ -35709,7 +36559,7 @@ type ResolvedNetworkSecurityGroupRule struct { func (x *ResolvedNetworkSecurityGroupRule) Reset() { *x = ResolvedNetworkSecurityGroupRule{} - mi := &file_forge_carbide_proto_msgTypes[516] + mi := &file_forge_carbide_proto_msgTypes[522] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35721,7 +36571,7 @@ func (x *ResolvedNetworkSecurityGroupRule) String() string { func (*ResolvedNetworkSecurityGroupRule) ProtoMessage() {} func (x *ResolvedNetworkSecurityGroupRule) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[516] + mi := &file_forge_carbide_proto_msgTypes[522] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35734,7 +36584,7 @@ func (x *ResolvedNetworkSecurityGroupRule) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolvedNetworkSecurityGroupRule.ProtoReflect.Descriptor instead. func (*ResolvedNetworkSecurityGroupRule) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{516} + return file_forge_carbide_proto_rawDescGZIP(), []int{522} } func (x *ResolvedNetworkSecurityGroupRule) GetRule() *NetworkSecurityGroupRuleAttributes { @@ -35767,7 +36617,7 @@ type GetNetworkSecurityGroupAttachmentsRequest struct { func (x *GetNetworkSecurityGroupAttachmentsRequest) Reset() { *x = GetNetworkSecurityGroupAttachmentsRequest{} - mi := &file_forge_carbide_proto_msgTypes[517] + mi := &file_forge_carbide_proto_msgTypes[523] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35779,7 +36629,7 @@ func (x *GetNetworkSecurityGroupAttachmentsRequest) String() string { func (*GetNetworkSecurityGroupAttachmentsRequest) ProtoMessage() {} func (x *GetNetworkSecurityGroupAttachmentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[517] + mi := &file_forge_carbide_proto_msgTypes[523] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35792,7 +36642,7 @@ func (x *GetNetworkSecurityGroupAttachmentsRequest) ProtoReflect() protoreflect. // Deprecated: Use GetNetworkSecurityGroupAttachmentsRequest.ProtoReflect.Descriptor instead. func (*GetNetworkSecurityGroupAttachmentsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{517} + return file_forge_carbide_proto_rawDescGZIP(), []int{523} } func (x *GetNetworkSecurityGroupAttachmentsRequest) GetNetworkSecurityGroupIds() []string { @@ -35813,7 +36663,7 @@ type NetworkSecurityGroupAttachments struct { func (x *NetworkSecurityGroupAttachments) Reset() { *x = NetworkSecurityGroupAttachments{} - mi := &file_forge_carbide_proto_msgTypes[518] + mi := &file_forge_carbide_proto_msgTypes[524] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35825,7 +36675,7 @@ func (x *NetworkSecurityGroupAttachments) String() string { func (*NetworkSecurityGroupAttachments) ProtoMessage() {} func (x *NetworkSecurityGroupAttachments) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[518] + mi := &file_forge_carbide_proto_msgTypes[524] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35838,7 +36688,7 @@ func (x *NetworkSecurityGroupAttachments) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkSecurityGroupAttachments.ProtoReflect.Descriptor instead. func (*NetworkSecurityGroupAttachments) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{518} + return file_forge_carbide_proto_rawDescGZIP(), []int{524} } func (x *NetworkSecurityGroupAttachments) GetNetworkSecurityGroupId() string { @@ -35871,7 +36721,7 @@ type GetNetworkSecurityGroupAttachmentsResponse struct { func (x *GetNetworkSecurityGroupAttachmentsResponse) Reset() { *x = GetNetworkSecurityGroupAttachmentsResponse{} - mi := &file_forge_carbide_proto_msgTypes[519] + mi := &file_forge_carbide_proto_msgTypes[525] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35883,7 +36733,7 @@ func (x *GetNetworkSecurityGroupAttachmentsResponse) String() string { func (*GetNetworkSecurityGroupAttachmentsResponse) ProtoMessage() {} func (x *GetNetworkSecurityGroupAttachmentsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[519] + mi := &file_forge_carbide_proto_msgTypes[525] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35896,7 +36746,7 @@ func (x *GetNetworkSecurityGroupAttachmentsResponse) ProtoReflect() protoreflect // Deprecated: Use GetNetworkSecurityGroupAttachmentsResponse.ProtoReflect.Descriptor instead. func (*GetNetworkSecurityGroupAttachmentsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{519} + return file_forge_carbide_proto_rawDescGZIP(), []int{525} } func (x *GetNetworkSecurityGroupAttachmentsResponse) GetAttachments() []*NetworkSecurityGroupAttachments { @@ -35914,7 +36764,7 @@ type GetDesiredFirmwareVersionsRequest struct { func (x *GetDesiredFirmwareVersionsRequest) Reset() { *x = GetDesiredFirmwareVersionsRequest{} - mi := &file_forge_carbide_proto_msgTypes[520] + mi := &file_forge_carbide_proto_msgTypes[526] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35926,7 +36776,7 @@ func (x *GetDesiredFirmwareVersionsRequest) String() string { func (*GetDesiredFirmwareVersionsRequest) ProtoMessage() {} func (x *GetDesiredFirmwareVersionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[520] + mi := &file_forge_carbide_proto_msgTypes[526] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35939,7 +36789,7 @@ func (x *GetDesiredFirmwareVersionsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use GetDesiredFirmwareVersionsRequest.ProtoReflect.Descriptor instead. func (*GetDesiredFirmwareVersionsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{520} + return file_forge_carbide_proto_rawDescGZIP(), []int{526} } type GetDesiredFirmwareVersionsResponse struct { @@ -35951,7 +36801,7 @@ type GetDesiredFirmwareVersionsResponse struct { func (x *GetDesiredFirmwareVersionsResponse) Reset() { *x = GetDesiredFirmwareVersionsResponse{} - mi := &file_forge_carbide_proto_msgTypes[521] + mi := &file_forge_carbide_proto_msgTypes[527] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -35963,7 +36813,7 @@ func (x *GetDesiredFirmwareVersionsResponse) String() string { func (*GetDesiredFirmwareVersionsResponse) ProtoMessage() {} func (x *GetDesiredFirmwareVersionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[521] + mi := &file_forge_carbide_proto_msgTypes[527] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -35976,7 +36826,7 @@ func (x *GetDesiredFirmwareVersionsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use GetDesiredFirmwareVersionsResponse.ProtoReflect.Descriptor instead. func (*GetDesiredFirmwareVersionsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{521} + return file_forge_carbide_proto_rawDescGZIP(), []int{527} } func (x *GetDesiredFirmwareVersionsResponse) GetEntries() []*DesiredFirmwareVersionEntry { @@ -35997,7 +36847,7 @@ type DesiredFirmwareVersionEntry struct { func (x *DesiredFirmwareVersionEntry) Reset() { *x = DesiredFirmwareVersionEntry{} - mi := &file_forge_carbide_proto_msgTypes[522] + mi := &file_forge_carbide_proto_msgTypes[528] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36009,7 +36859,7 @@ func (x *DesiredFirmwareVersionEntry) String() string { func (*DesiredFirmwareVersionEntry) ProtoMessage() {} func (x *DesiredFirmwareVersionEntry) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[522] + mi := &file_forge_carbide_proto_msgTypes[528] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36022,7 +36872,7 @@ func (x *DesiredFirmwareVersionEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use DesiredFirmwareVersionEntry.ProtoReflect.Descriptor instead. func (*DesiredFirmwareVersionEntry) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{522} + return file_forge_carbide_proto_rawDescGZIP(), []int{528} } func (x *DesiredFirmwareVersionEntry) GetVendor() string { @@ -36057,7 +36907,7 @@ type SkuComponentChassis struct { func (x *SkuComponentChassis) Reset() { *x = SkuComponentChassis{} - mi := &file_forge_carbide_proto_msgTypes[523] + mi := &file_forge_carbide_proto_msgTypes[529] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36069,7 +36919,7 @@ func (x *SkuComponentChassis) String() string { func (*SkuComponentChassis) ProtoMessage() {} func (x *SkuComponentChassis) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[523] + mi := &file_forge_carbide_proto_msgTypes[529] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36082,7 +36932,7 @@ func (x *SkuComponentChassis) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponentChassis.ProtoReflect.Descriptor instead. func (*SkuComponentChassis) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{523} + return file_forge_carbide_proto_rawDescGZIP(), []int{529} } func (x *SkuComponentChassis) GetVendor() string { @@ -36118,7 +36968,7 @@ type SkuComponentCpu struct { func (x *SkuComponentCpu) Reset() { *x = SkuComponentCpu{} - mi := &file_forge_carbide_proto_msgTypes[524] + mi := &file_forge_carbide_proto_msgTypes[530] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36130,7 +36980,7 @@ func (x *SkuComponentCpu) String() string { func (*SkuComponentCpu) ProtoMessage() {} func (x *SkuComponentCpu) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[524] + mi := &file_forge_carbide_proto_msgTypes[530] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36143,7 +36993,7 @@ func (x *SkuComponentCpu) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponentCpu.ProtoReflect.Descriptor instead. func (*SkuComponentCpu) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{524} + return file_forge_carbide_proto_rawDescGZIP(), []int{530} } func (x *SkuComponentCpu) GetVendor() string { @@ -36186,7 +37036,7 @@ type SkuComponentGpu struct { func (x *SkuComponentGpu) Reset() { *x = SkuComponentGpu{} - mi := &file_forge_carbide_proto_msgTypes[525] + mi := &file_forge_carbide_proto_msgTypes[531] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36198,7 +37048,7 @@ func (x *SkuComponentGpu) String() string { func (*SkuComponentGpu) ProtoMessage() {} func (x *SkuComponentGpu) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[525] + mi := &file_forge_carbide_proto_msgTypes[531] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36211,7 +37061,7 @@ func (x *SkuComponentGpu) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponentGpu.ProtoReflect.Descriptor instead. func (*SkuComponentGpu) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{525} + return file_forge_carbide_proto_rawDescGZIP(), []int{531} } func (x *SkuComponentGpu) GetVendor() string { @@ -36254,7 +37104,7 @@ type SkuComponentEthernetDevices struct { func (x *SkuComponentEthernetDevices) Reset() { *x = SkuComponentEthernetDevices{} - mi := &file_forge_carbide_proto_msgTypes[526] + mi := &file_forge_carbide_proto_msgTypes[532] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36266,7 +37116,7 @@ func (x *SkuComponentEthernetDevices) String() string { func (*SkuComponentEthernetDevices) ProtoMessage() {} func (x *SkuComponentEthernetDevices) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[526] + mi := &file_forge_carbide_proto_msgTypes[532] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36279,7 +37129,7 @@ func (x *SkuComponentEthernetDevices) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponentEthernetDevices.ProtoReflect.Descriptor instead. func (*SkuComponentEthernetDevices) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{526} + return file_forge_carbide_proto_rawDescGZIP(), []int{532} } func (x *SkuComponentEthernetDevices) GetVendor() string { @@ -36333,7 +37183,7 @@ type SkuComponentInfinibandDevices struct { func (x *SkuComponentInfinibandDevices) Reset() { *x = SkuComponentInfinibandDevices{} - mi := &file_forge_carbide_proto_msgTypes[527] + mi := &file_forge_carbide_proto_msgTypes[533] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36345,7 +37195,7 @@ func (x *SkuComponentInfinibandDevices) String() string { func (*SkuComponentInfinibandDevices) ProtoMessage() {} func (x *SkuComponentInfinibandDevices) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[527] + mi := &file_forge_carbide_proto_msgTypes[533] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36358,7 +37208,7 @@ func (x *SkuComponentInfinibandDevices) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponentInfinibandDevices.ProtoReflect.Descriptor instead. func (*SkuComponentInfinibandDevices) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{527} + return file_forge_carbide_proto_rawDescGZIP(), []int{533} } func (x *SkuComponentInfinibandDevices) GetVendor() string { @@ -36401,7 +37251,7 @@ type SkuComponentStorage struct { func (x *SkuComponentStorage) Reset() { *x = SkuComponentStorage{} - mi := &file_forge_carbide_proto_msgTypes[528] + mi := &file_forge_carbide_proto_msgTypes[534] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36413,7 +37263,7 @@ func (x *SkuComponentStorage) String() string { func (*SkuComponentStorage) ProtoMessage() {} func (x *SkuComponentStorage) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[528] + mi := &file_forge_carbide_proto_msgTypes[534] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36426,7 +37276,7 @@ func (x *SkuComponentStorage) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponentStorage.ProtoReflect.Descriptor instead. func (*SkuComponentStorage) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{528} + return file_forge_carbide_proto_rawDescGZIP(), []int{534} } func (x *SkuComponentStorage) GetVendor() string { @@ -36468,7 +37318,7 @@ type SkuComponentStorageController struct { func (x *SkuComponentStorageController) Reset() { *x = SkuComponentStorageController{} - mi := &file_forge_carbide_proto_msgTypes[529] + mi := &file_forge_carbide_proto_msgTypes[535] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36480,7 +37330,7 @@ func (x *SkuComponentStorageController) String() string { func (*SkuComponentStorageController) ProtoMessage() {} func (x *SkuComponentStorageController) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[529] + mi := &file_forge_carbide_proto_msgTypes[535] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36493,7 +37343,7 @@ func (x *SkuComponentStorageController) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponentStorageController.ProtoReflect.Descriptor instead. func (*SkuComponentStorageController) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{529} + return file_forge_carbide_proto_rawDescGZIP(), []int{535} } func (x *SkuComponentStorageController) GetVendor() string { @@ -36528,7 +37378,7 @@ type SkuComponentMemory struct { func (x *SkuComponentMemory) Reset() { *x = SkuComponentMemory{} - mi := &file_forge_carbide_proto_msgTypes[530] + mi := &file_forge_carbide_proto_msgTypes[536] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36540,7 +37390,7 @@ func (x *SkuComponentMemory) String() string { func (*SkuComponentMemory) ProtoMessage() {} func (x *SkuComponentMemory) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[530] + mi := &file_forge_carbide_proto_msgTypes[536] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36553,7 +37403,7 @@ func (x *SkuComponentMemory) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponentMemory.ProtoReflect.Descriptor instead. func (*SkuComponentMemory) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{530} + return file_forge_carbide_proto_rawDescGZIP(), []int{536} } func (x *SkuComponentMemory) GetMemoryType() string { @@ -36587,7 +37437,7 @@ type SkuComponentTpm struct { func (x *SkuComponentTpm) Reset() { *x = SkuComponentTpm{} - mi := &file_forge_carbide_proto_msgTypes[531] + mi := &file_forge_carbide_proto_msgTypes[537] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36599,7 +37449,7 @@ func (x *SkuComponentTpm) String() string { func (*SkuComponentTpm) ProtoMessage() {} func (x *SkuComponentTpm) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[531] + mi := &file_forge_carbide_proto_msgTypes[537] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36612,7 +37462,7 @@ func (x *SkuComponentTpm) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponentTpm.ProtoReflect.Descriptor instead. func (*SkuComponentTpm) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{531} + return file_forge_carbide_proto_rawDescGZIP(), []int{537} } func (x *SkuComponentTpm) GetVendor() string { @@ -36645,7 +37495,7 @@ type SkuComponents struct { func (x *SkuComponents) Reset() { *x = SkuComponents{} - mi := &file_forge_carbide_proto_msgTypes[532] + mi := &file_forge_carbide_proto_msgTypes[538] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36657,7 +37507,7 @@ func (x *SkuComponents) String() string { func (*SkuComponents) ProtoMessage() {} func (x *SkuComponents) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[532] + mi := &file_forge_carbide_proto_msgTypes[538] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36670,7 +37520,7 @@ func (x *SkuComponents) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuComponents.ProtoReflect.Descriptor instead. func (*SkuComponents) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{532} + return file_forge_carbide_proto_rawDescGZIP(), []int{538} } func (x *SkuComponents) GetChassis() *SkuComponentChassis { @@ -36744,7 +37594,7 @@ type Sku struct { func (x *Sku) Reset() { *x = Sku{} - mi := &file_forge_carbide_proto_msgTypes[533] + mi := &file_forge_carbide_proto_msgTypes[539] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36756,7 +37606,7 @@ func (x *Sku) String() string { func (*Sku) ProtoMessage() {} func (x *Sku) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[533] + mi := &file_forge_carbide_proto_msgTypes[539] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36769,7 +37619,7 @@ func (x *Sku) ProtoReflect() protoreflect.Message { // Deprecated: Use Sku.ProtoReflect.Descriptor instead. func (*Sku) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{533} + return file_forge_carbide_proto_rawDescGZIP(), []int{539} } func (x *Sku) GetId() string { @@ -36832,7 +37682,7 @@ type SkuMachinePair struct { func (x *SkuMachinePair) Reset() { *x = SkuMachinePair{} - mi := &file_forge_carbide_proto_msgTypes[534] + mi := &file_forge_carbide_proto_msgTypes[540] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36844,7 +37694,7 @@ func (x *SkuMachinePair) String() string { func (*SkuMachinePair) ProtoMessage() {} func (x *SkuMachinePair) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[534] + mi := &file_forge_carbide_proto_msgTypes[540] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36857,7 +37707,7 @@ func (x *SkuMachinePair) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuMachinePair.ProtoReflect.Descriptor instead. func (*SkuMachinePair) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{534} + return file_forge_carbide_proto_rawDescGZIP(), []int{540} } func (x *SkuMachinePair) GetSkuId() string { @@ -36891,7 +37741,7 @@ type RemoveSkuRequest struct { func (x *RemoveSkuRequest) Reset() { *x = RemoveSkuRequest{} - mi := &file_forge_carbide_proto_msgTypes[535] + mi := &file_forge_carbide_proto_msgTypes[541] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36903,7 +37753,7 @@ func (x *RemoveSkuRequest) String() string { func (*RemoveSkuRequest) ProtoMessage() {} func (x *RemoveSkuRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[535] + mi := &file_forge_carbide_proto_msgTypes[541] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36916,7 +37766,7 @@ func (x *RemoveSkuRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveSkuRequest.ProtoReflect.Descriptor instead. func (*RemoveSkuRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{535} + return file_forge_carbide_proto_rawDescGZIP(), []int{541} } func (x *RemoveSkuRequest) GetMachineId() *MachineId { @@ -36942,7 +37792,7 @@ type SkuList struct { func (x *SkuList) Reset() { *x = SkuList{} - mi := &file_forge_carbide_proto_msgTypes[536] + mi := &file_forge_carbide_proto_msgTypes[542] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36954,7 +37804,7 @@ func (x *SkuList) String() string { func (*SkuList) ProtoMessage() {} func (x *SkuList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[536] + mi := &file_forge_carbide_proto_msgTypes[542] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -36967,7 +37817,7 @@ func (x *SkuList) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuList.ProtoReflect.Descriptor instead. func (*SkuList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{536} + return file_forge_carbide_proto_rawDescGZIP(), []int{542} } func (x *SkuList) GetSkus() []*Sku { @@ -36986,7 +37836,7 @@ type SkuIdList struct { func (x *SkuIdList) Reset() { *x = SkuIdList{} - mi := &file_forge_carbide_proto_msgTypes[537] + mi := &file_forge_carbide_proto_msgTypes[543] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -36998,7 +37848,7 @@ func (x *SkuIdList) String() string { func (*SkuIdList) ProtoMessage() {} func (x *SkuIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[537] + mi := &file_forge_carbide_proto_msgTypes[543] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37011,7 +37861,7 @@ func (x *SkuIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuIdList.ProtoReflect.Descriptor instead. func (*SkuIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{537} + return file_forge_carbide_proto_rawDescGZIP(), []int{543} } func (x *SkuIdList) GetIds() []string { @@ -37032,7 +37882,7 @@ type SkuStatus struct { func (x *SkuStatus) Reset() { *x = SkuStatus{} - mi := &file_forge_carbide_proto_msgTypes[538] + mi := &file_forge_carbide_proto_msgTypes[544] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37044,7 +37894,7 @@ func (x *SkuStatus) String() string { func (*SkuStatus) ProtoMessage() {} func (x *SkuStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[538] + mi := &file_forge_carbide_proto_msgTypes[544] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37057,7 +37907,7 @@ func (x *SkuStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuStatus.ProtoReflect.Descriptor instead. func (*SkuStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{538} + return file_forge_carbide_proto_rawDescGZIP(), []int{544} } func (x *SkuStatus) GetVerifyRequestTime() *timestamppb.Timestamp { @@ -37090,7 +37940,7 @@ type SkusByIdsRequest struct { func (x *SkusByIdsRequest) Reset() { *x = SkusByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[539] + mi := &file_forge_carbide_proto_msgTypes[545] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37102,7 +37952,7 @@ func (x *SkusByIdsRequest) String() string { func (*SkusByIdsRequest) ProtoMessage() {} func (x *SkusByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[539] + mi := &file_forge_carbide_proto_msgTypes[545] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37115,7 +37965,7 @@ func (x *SkusByIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SkusByIdsRequest.ProtoReflect.Descriptor instead. func (*SkusByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{539} + return file_forge_carbide_proto_rawDescGZIP(), []int{545} } func (x *SkusByIdsRequest) GetIds() []string { @@ -37133,7 +37983,7 @@ type SkuSearchFilter struct { func (x *SkuSearchFilter) Reset() { *x = SkuSearchFilter{} - mi := &file_forge_carbide_proto_msgTypes[540] + mi := &file_forge_carbide_proto_msgTypes[546] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37145,7 +37995,7 @@ func (x *SkuSearchFilter) String() string { func (*SkuSearchFilter) ProtoMessage() {} func (x *SkuSearchFilter) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[540] + mi := &file_forge_carbide_proto_msgTypes[546] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37158,7 +38008,7 @@ func (x *SkuSearchFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuSearchFilter.ProtoReflect.Descriptor instead. func (*SkuSearchFilter) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{540} + return file_forge_carbide_proto_rawDescGZIP(), []int{546} } type DpaInterface struct { @@ -37197,7 +38047,7 @@ type DpaInterface struct { func (x *DpaInterface) Reset() { *x = DpaInterface{} - mi := &file_forge_carbide_proto_msgTypes[541] + mi := &file_forge_carbide_proto_msgTypes[547] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37209,7 +38059,7 @@ func (x *DpaInterface) String() string { func (*DpaInterface) ProtoMessage() {} func (x *DpaInterface) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[541] + mi := &file_forge_carbide_proto_msgTypes[547] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37222,7 +38072,7 @@ func (x *DpaInterface) ProtoReflect() protoreflect.Message { // Deprecated: Use DpaInterface.ProtoReflect.Descriptor instead. func (*DpaInterface) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{541} + return file_forge_carbide_proto_rawDescGZIP(), []int{547} } func (x *DpaInterface) GetId() *DpaInterfaceId { @@ -37370,7 +38220,7 @@ type DpaInterfaceCreationRequest struct { func (x *DpaInterfaceCreationRequest) Reset() { *x = DpaInterfaceCreationRequest{} - mi := &file_forge_carbide_proto_msgTypes[542] + mi := &file_forge_carbide_proto_msgTypes[548] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37382,7 +38232,7 @@ func (x *DpaInterfaceCreationRequest) String() string { func (*DpaInterfaceCreationRequest) ProtoMessage() {} func (x *DpaInterfaceCreationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[542] + mi := &file_forge_carbide_proto_msgTypes[548] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37395,7 +38245,7 @@ func (x *DpaInterfaceCreationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DpaInterfaceCreationRequest.ProtoReflect.Descriptor instead. func (*DpaInterfaceCreationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{542} + return file_forge_carbide_proto_rawDescGZIP(), []int{548} } func (x *DpaInterfaceCreationRequest) GetMachineId() *MachineId { @@ -37435,7 +38285,7 @@ type DpaInterfaceIdList struct { func (x *DpaInterfaceIdList) Reset() { *x = DpaInterfaceIdList{} - mi := &file_forge_carbide_proto_msgTypes[543] + mi := &file_forge_carbide_proto_msgTypes[549] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37447,7 +38297,7 @@ func (x *DpaInterfaceIdList) String() string { func (*DpaInterfaceIdList) ProtoMessage() {} func (x *DpaInterfaceIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[543] + mi := &file_forge_carbide_proto_msgTypes[549] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37460,7 +38310,7 @@ func (x *DpaInterfaceIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use DpaInterfaceIdList.ProtoReflect.Descriptor instead. func (*DpaInterfaceIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{543} + return file_forge_carbide_proto_rawDescGZIP(), []int{549} } func (x *DpaInterfaceIdList) GetIds() []*DpaInterfaceId { @@ -37480,7 +38330,7 @@ type DpaInterfacesByIdsRequest struct { func (x *DpaInterfacesByIdsRequest) Reset() { *x = DpaInterfacesByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[544] + mi := &file_forge_carbide_proto_msgTypes[550] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37492,7 +38342,7 @@ func (x *DpaInterfacesByIdsRequest) String() string { func (*DpaInterfacesByIdsRequest) ProtoMessage() {} func (x *DpaInterfacesByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[544] + mi := &file_forge_carbide_proto_msgTypes[550] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37505,7 +38355,7 @@ func (x *DpaInterfacesByIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DpaInterfacesByIdsRequest.ProtoReflect.Descriptor instead. func (*DpaInterfacesByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{544} + return file_forge_carbide_proto_rawDescGZIP(), []int{550} } func (x *DpaInterfacesByIdsRequest) GetIds() []*DpaInterfaceId { @@ -37531,7 +38381,7 @@ type DpaInterfaceList struct { func (x *DpaInterfaceList) Reset() { *x = DpaInterfaceList{} - mi := &file_forge_carbide_proto_msgTypes[545] + mi := &file_forge_carbide_proto_msgTypes[551] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37543,7 +38393,7 @@ func (x *DpaInterfaceList) String() string { func (*DpaInterfaceList) ProtoMessage() {} func (x *DpaInterfaceList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[545] + mi := &file_forge_carbide_proto_msgTypes[551] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37556,7 +38406,7 @@ func (x *DpaInterfaceList) ProtoReflect() protoreflect.Message { // Deprecated: Use DpaInterfaceList.ProtoReflect.Descriptor instead. func (*DpaInterfaceList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{545} + return file_forge_carbide_proto_rawDescGZIP(), []int{551} } func (x *DpaInterfaceList) GetInterfaces() []*DpaInterface { @@ -37577,7 +38427,7 @@ type DpaInterfaceStateHistoryRecord struct { func (x *DpaInterfaceStateHistoryRecord) Reset() { *x = DpaInterfaceStateHistoryRecord{} - mi := &file_forge_carbide_proto_msgTypes[546] + mi := &file_forge_carbide_proto_msgTypes[552] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37589,7 +38439,7 @@ func (x *DpaInterfaceStateHistoryRecord) String() string { func (*DpaInterfaceStateHistoryRecord) ProtoMessage() {} func (x *DpaInterfaceStateHistoryRecord) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[546] + mi := &file_forge_carbide_proto_msgTypes[552] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37602,7 +38452,7 @@ func (x *DpaInterfaceStateHistoryRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use DpaInterfaceStateHistoryRecord.ProtoReflect.Descriptor instead. func (*DpaInterfaceStateHistoryRecord) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{546} + return file_forge_carbide_proto_rawDescGZIP(), []int{552} } func (x *DpaInterfaceStateHistoryRecord) GetState() string { @@ -37635,7 +38485,7 @@ type DpaNetworkObservationSetRequest struct { func (x *DpaNetworkObservationSetRequest) Reset() { *x = DpaNetworkObservationSetRequest{} - mi := &file_forge_carbide_proto_msgTypes[547] + mi := &file_forge_carbide_proto_msgTypes[553] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37647,7 +38497,7 @@ func (x *DpaNetworkObservationSetRequest) String() string { func (*DpaNetworkObservationSetRequest) ProtoMessage() {} func (x *DpaNetworkObservationSetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[547] + mi := &file_forge_carbide_proto_msgTypes[553] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37660,7 +38510,7 @@ func (x *DpaNetworkObservationSetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DpaNetworkObservationSetRequest.ProtoReflect.Descriptor instead. func (*DpaNetworkObservationSetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{547} + return file_forge_carbide_proto_rawDescGZIP(), []int{553} } func (x *DpaNetworkObservationSetRequest) GetId() *DpaInterfaceId { @@ -37679,7 +38529,7 @@ type DpaInterfaceDeletionRequest struct { func (x *DpaInterfaceDeletionRequest) Reset() { *x = DpaInterfaceDeletionRequest{} - mi := &file_forge_carbide_proto_msgTypes[548] + mi := &file_forge_carbide_proto_msgTypes[554] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37691,7 +38541,7 @@ func (x *DpaInterfaceDeletionRequest) String() string { func (*DpaInterfaceDeletionRequest) ProtoMessage() {} func (x *DpaInterfaceDeletionRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[548] + mi := &file_forge_carbide_proto_msgTypes[554] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37704,7 +38554,7 @@ func (x *DpaInterfaceDeletionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DpaInterfaceDeletionRequest.ProtoReflect.Descriptor instead. func (*DpaInterfaceDeletionRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{548} + return file_forge_carbide_proto_rawDescGZIP(), []int{554} } func (x *DpaInterfaceDeletionRequest) GetId() *DpaInterfaceId { @@ -37722,7 +38572,7 @@ type DpaInterfaceDeletionResult struct { func (x *DpaInterfaceDeletionResult) Reset() { *x = DpaInterfaceDeletionResult{} - mi := &file_forge_carbide_proto_msgTypes[549] + mi := &file_forge_carbide_proto_msgTypes[555] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37734,7 +38584,7 @@ func (x *DpaInterfaceDeletionResult) String() string { func (*DpaInterfaceDeletionResult) ProtoMessage() {} func (x *DpaInterfaceDeletionResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[549] + mi := &file_forge_carbide_proto_msgTypes[555] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37747,7 +38597,7 @@ func (x *DpaInterfaceDeletionResult) ProtoReflect() protoreflect.Message { // Deprecated: Use DpaInterfaceDeletionResult.ProtoReflect.Descriptor instead. func (*DpaInterfaceDeletionResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{549} + return file_forge_carbide_proto_rawDescGZIP(), []int{555} } type SkuUpdateMetadataRequest struct { @@ -37761,7 +38611,7 @@ type SkuUpdateMetadataRequest struct { func (x *SkuUpdateMetadataRequest) Reset() { *x = SkuUpdateMetadataRequest{} - mi := &file_forge_carbide_proto_msgTypes[550] + mi := &file_forge_carbide_proto_msgTypes[556] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37773,7 +38623,7 @@ func (x *SkuUpdateMetadataRequest) String() string { func (*SkuUpdateMetadataRequest) ProtoMessage() {} func (x *SkuUpdateMetadataRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[550] + mi := &file_forge_carbide_proto_msgTypes[556] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37786,7 +38636,7 @@ func (x *SkuUpdateMetadataRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SkuUpdateMetadataRequest.ProtoReflect.Descriptor instead. func (*SkuUpdateMetadataRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{550} + return file_forge_carbide_proto_rawDescGZIP(), []int{556} } func (x *SkuUpdateMetadataRequest) GetSkuId() string { @@ -37819,7 +38669,7 @@ type PowerOptionRequest struct { func (x *PowerOptionRequest) Reset() { *x = PowerOptionRequest{} - mi := &file_forge_carbide_proto_msgTypes[551] + mi := &file_forge_carbide_proto_msgTypes[557] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37831,7 +38681,7 @@ func (x *PowerOptionRequest) String() string { func (*PowerOptionRequest) ProtoMessage() {} func (x *PowerOptionRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[551] + mi := &file_forge_carbide_proto_msgTypes[557] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37844,7 +38694,7 @@ func (x *PowerOptionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PowerOptionRequest.ProtoReflect.Descriptor instead. func (*PowerOptionRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{551} + return file_forge_carbide_proto_rawDescGZIP(), []int{557} } func (x *PowerOptionRequest) GetMachineId() []*MachineId { @@ -37864,7 +38714,7 @@ type PowerOptionUpdateRequest struct { func (x *PowerOptionUpdateRequest) Reset() { *x = PowerOptionUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[552] + mi := &file_forge_carbide_proto_msgTypes[558] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37876,7 +38726,7 @@ func (x *PowerOptionUpdateRequest) String() string { func (*PowerOptionUpdateRequest) ProtoMessage() {} func (x *PowerOptionUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[552] + mi := &file_forge_carbide_proto_msgTypes[558] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37889,7 +38739,7 @@ func (x *PowerOptionUpdateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PowerOptionUpdateRequest.ProtoReflect.Descriptor instead. func (*PowerOptionUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{552} + return file_forge_carbide_proto_rawDescGZIP(), []int{558} } func (x *PowerOptionUpdateRequest) GetMachineId() *MachineId { @@ -37925,7 +38775,7 @@ type PowerOptions struct { func (x *PowerOptions) Reset() { *x = PowerOptions{} - mi := &file_forge_carbide_proto_msgTypes[553] + mi := &file_forge_carbide_proto_msgTypes[559] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -37937,7 +38787,7 @@ func (x *PowerOptions) String() string { func (*PowerOptions) ProtoMessage() {} func (x *PowerOptions) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[553] + mi := &file_forge_carbide_proto_msgTypes[559] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -37950,7 +38800,7 @@ func (x *PowerOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use PowerOptions.ProtoReflect.Descriptor instead. func (*PowerOptions) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{553} + return file_forge_carbide_proto_rawDescGZIP(), []int{559} } func (x *PowerOptions) GetDesiredState() PowerState { @@ -38039,7 +38889,7 @@ type PowerOptionResponse struct { func (x *PowerOptionResponse) Reset() { *x = PowerOptionResponse{} - mi := &file_forge_carbide_proto_msgTypes[554] + mi := &file_forge_carbide_proto_msgTypes[560] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38051,7 +38901,7 @@ func (x *PowerOptionResponse) String() string { func (*PowerOptionResponse) ProtoMessage() {} func (x *PowerOptionResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[554] + mi := &file_forge_carbide_proto_msgTypes[560] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38064,7 +38914,7 @@ func (x *PowerOptionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PowerOptionResponse.ProtoReflect.Descriptor instead. func (*PowerOptionResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{554} + return file_forge_carbide_proto_rawDescGZIP(), []int{560} } func (x *PowerOptionResponse) GetResponse() []*PowerOptions { @@ -38090,7 +38940,7 @@ type ComputeAllocationAttributes struct { func (x *ComputeAllocationAttributes) Reset() { *x = ComputeAllocationAttributes{} - mi := &file_forge_carbide_proto_msgTypes[555] + mi := &file_forge_carbide_proto_msgTypes[561] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38102,7 +38952,7 @@ func (x *ComputeAllocationAttributes) String() string { func (*ComputeAllocationAttributes) ProtoMessage() {} func (x *ComputeAllocationAttributes) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[555] + mi := &file_forge_carbide_proto_msgTypes[561] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38115,7 +38965,7 @@ func (x *ComputeAllocationAttributes) ProtoReflect() protoreflect.Message { // Deprecated: Use ComputeAllocationAttributes.ProtoReflect.Descriptor instead. func (*ComputeAllocationAttributes) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{555} + return file_forge_carbide_proto_rawDescGZIP(), []int{561} } func (x *ComputeAllocationAttributes) GetInstanceTypeId() string { @@ -38148,7 +38998,7 @@ type ComputeAllocation struct { func (x *ComputeAllocation) Reset() { *x = ComputeAllocation{} - mi := &file_forge_carbide_proto_msgTypes[556] + mi := &file_forge_carbide_proto_msgTypes[562] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38160,7 +39010,7 @@ func (x *ComputeAllocation) String() string { func (*ComputeAllocation) ProtoMessage() {} func (x *ComputeAllocation) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[556] + mi := &file_forge_carbide_proto_msgTypes[562] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38173,7 +39023,7 @@ func (x *ComputeAllocation) ProtoReflect() protoreflect.Message { // Deprecated: Use ComputeAllocation.ProtoReflect.Descriptor instead. func (*ComputeAllocation) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{556} + return file_forge_carbide_proto_rawDescGZIP(), []int{562} } func (x *ComputeAllocation) GetId() *ComputeAllocationId { @@ -38245,7 +39095,7 @@ type CreateComputeAllocationRequest struct { func (x *CreateComputeAllocationRequest) Reset() { *x = CreateComputeAllocationRequest{} - mi := &file_forge_carbide_proto_msgTypes[557] + mi := &file_forge_carbide_proto_msgTypes[563] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38257,7 +39107,7 @@ func (x *CreateComputeAllocationRequest) String() string { func (*CreateComputeAllocationRequest) ProtoMessage() {} func (x *CreateComputeAllocationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[557] + mi := &file_forge_carbide_proto_msgTypes[563] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38270,7 +39120,7 @@ func (x *CreateComputeAllocationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateComputeAllocationRequest.ProtoReflect.Descriptor instead. func (*CreateComputeAllocationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{557} + return file_forge_carbide_proto_rawDescGZIP(), []int{563} } func (x *CreateComputeAllocationRequest) GetId() *ComputeAllocationId { @@ -38317,7 +39167,7 @@ type CreateComputeAllocationResponse struct { func (x *CreateComputeAllocationResponse) Reset() { *x = CreateComputeAllocationResponse{} - mi := &file_forge_carbide_proto_msgTypes[558] + mi := &file_forge_carbide_proto_msgTypes[564] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38329,7 +39179,7 @@ func (x *CreateComputeAllocationResponse) String() string { func (*CreateComputeAllocationResponse) ProtoMessage() {} func (x *CreateComputeAllocationResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[558] + mi := &file_forge_carbide_proto_msgTypes[564] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38342,7 +39192,7 @@ func (x *CreateComputeAllocationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateComputeAllocationResponse.ProtoReflect.Descriptor instead. func (*CreateComputeAllocationResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{558} + return file_forge_carbide_proto_rawDescGZIP(), []int{564} } func (x *CreateComputeAllocationResponse) GetAllocation() *ComputeAllocation { @@ -38369,7 +39219,7 @@ type FindComputeAllocationIdsRequest struct { func (x *FindComputeAllocationIdsRequest) Reset() { *x = FindComputeAllocationIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[559] + mi := &file_forge_carbide_proto_msgTypes[565] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38381,7 +39231,7 @@ func (x *FindComputeAllocationIdsRequest) String() string { func (*FindComputeAllocationIdsRequest) ProtoMessage() {} func (x *FindComputeAllocationIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[559] + mi := &file_forge_carbide_proto_msgTypes[565] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38394,7 +39244,7 @@ func (x *FindComputeAllocationIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindComputeAllocationIdsRequest.ProtoReflect.Descriptor instead. func (*FindComputeAllocationIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{559} + return file_forge_carbide_proto_rawDescGZIP(), []int{565} } func (x *FindComputeAllocationIdsRequest) GetName() string { @@ -38427,7 +39277,7 @@ type FindComputeAllocationIdsResponse struct { func (x *FindComputeAllocationIdsResponse) Reset() { *x = FindComputeAllocationIdsResponse{} - mi := &file_forge_carbide_proto_msgTypes[560] + mi := &file_forge_carbide_proto_msgTypes[566] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38439,7 +39289,7 @@ func (x *FindComputeAllocationIdsResponse) String() string { func (*FindComputeAllocationIdsResponse) ProtoMessage() {} func (x *FindComputeAllocationIdsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[560] + mi := &file_forge_carbide_proto_msgTypes[566] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38452,7 +39302,7 @@ func (x *FindComputeAllocationIdsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use FindComputeAllocationIdsResponse.ProtoReflect.Descriptor instead. func (*FindComputeAllocationIdsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{560} + return file_forge_carbide_proto_rawDescGZIP(), []int{566} } func (x *FindComputeAllocationIdsResponse) GetIds() []*ComputeAllocationId { @@ -38474,7 +39324,7 @@ type FindComputeAllocationsByIdsRequest struct { func (x *FindComputeAllocationsByIdsRequest) Reset() { *x = FindComputeAllocationsByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[561] + mi := &file_forge_carbide_proto_msgTypes[567] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38486,7 +39336,7 @@ func (x *FindComputeAllocationsByIdsRequest) String() string { func (*FindComputeAllocationsByIdsRequest) ProtoMessage() {} func (x *FindComputeAllocationsByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[561] + mi := &file_forge_carbide_proto_msgTypes[567] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38499,7 +39349,7 @@ func (x *FindComputeAllocationsByIdsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use FindComputeAllocationsByIdsRequest.ProtoReflect.Descriptor instead. func (*FindComputeAllocationsByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{561} + return file_forge_carbide_proto_rawDescGZIP(), []int{567} } func (x *FindComputeAllocationsByIdsRequest) GetIds() []*ComputeAllocationId { @@ -38518,7 +39368,7 @@ type FindComputeAllocationsByIdsResponse struct { func (x *FindComputeAllocationsByIdsResponse) Reset() { *x = FindComputeAllocationsByIdsResponse{} - mi := &file_forge_carbide_proto_msgTypes[562] + mi := &file_forge_carbide_proto_msgTypes[568] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38530,7 +39380,7 @@ func (x *FindComputeAllocationsByIdsResponse) String() string { func (*FindComputeAllocationsByIdsResponse) ProtoMessage() {} func (x *FindComputeAllocationsByIdsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[562] + mi := &file_forge_carbide_proto_msgTypes[568] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38543,7 +39393,7 @@ func (x *FindComputeAllocationsByIdsResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use FindComputeAllocationsByIdsResponse.ProtoReflect.Descriptor instead. func (*FindComputeAllocationsByIdsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{562} + return file_forge_carbide_proto_rawDescGZIP(), []int{568} } func (x *FindComputeAllocationsByIdsResponse) GetAllocations() []*ComputeAllocation { @@ -38562,7 +39412,7 @@ type UpdateComputeAllocationResponse struct { func (x *UpdateComputeAllocationResponse) Reset() { *x = UpdateComputeAllocationResponse{} - mi := &file_forge_carbide_proto_msgTypes[563] + mi := &file_forge_carbide_proto_msgTypes[569] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38574,7 +39424,7 @@ func (x *UpdateComputeAllocationResponse) String() string { func (*UpdateComputeAllocationResponse) ProtoMessage() {} func (x *UpdateComputeAllocationResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[563] + mi := &file_forge_carbide_proto_msgTypes[569] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38587,7 +39437,7 @@ func (x *UpdateComputeAllocationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateComputeAllocationResponse.ProtoReflect.Descriptor instead. func (*UpdateComputeAllocationResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{563} + return file_forge_carbide_proto_rawDescGZIP(), []int{569} } func (x *UpdateComputeAllocationResponse) GetAllocation() *ComputeAllocation { @@ -38611,7 +39461,7 @@ type UpdateComputeAllocationRequest struct { func (x *UpdateComputeAllocationRequest) Reset() { *x = UpdateComputeAllocationRequest{} - mi := &file_forge_carbide_proto_msgTypes[564] + mi := &file_forge_carbide_proto_msgTypes[570] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38623,7 +39473,7 @@ func (x *UpdateComputeAllocationRequest) String() string { func (*UpdateComputeAllocationRequest) ProtoMessage() {} func (x *UpdateComputeAllocationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[564] + mi := &file_forge_carbide_proto_msgTypes[570] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38636,7 +39486,7 @@ func (x *UpdateComputeAllocationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateComputeAllocationRequest.ProtoReflect.Descriptor instead. func (*UpdateComputeAllocationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{564} + return file_forge_carbide_proto_rawDescGZIP(), []int{570} } func (x *UpdateComputeAllocationRequest) GetId() *ComputeAllocationId { @@ -38691,7 +39541,7 @@ type DeleteComputeAllocationRequest struct { func (x *DeleteComputeAllocationRequest) Reset() { *x = DeleteComputeAllocationRequest{} - mi := &file_forge_carbide_proto_msgTypes[565] + mi := &file_forge_carbide_proto_msgTypes[571] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38703,7 +39553,7 @@ func (x *DeleteComputeAllocationRequest) String() string { func (*DeleteComputeAllocationRequest) ProtoMessage() {} func (x *DeleteComputeAllocationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[565] + mi := &file_forge_carbide_proto_msgTypes[571] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38716,7 +39566,7 @@ func (x *DeleteComputeAllocationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteComputeAllocationRequest.ProtoReflect.Descriptor instead. func (*DeleteComputeAllocationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{565} + return file_forge_carbide_proto_rawDescGZIP(), []int{571} } func (x *DeleteComputeAllocationRequest) GetId() *ComputeAllocationId { @@ -38741,7 +39591,7 @@ type DeleteComputeAllocationResponse struct { func (x *DeleteComputeAllocationResponse) Reset() { *x = DeleteComputeAllocationResponse{} - mi := &file_forge_carbide_proto_msgTypes[566] + mi := &file_forge_carbide_proto_msgTypes[572] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38753,7 +39603,7 @@ func (x *DeleteComputeAllocationResponse) String() string { func (*DeleteComputeAllocationResponse) ProtoMessage() {} func (x *DeleteComputeAllocationResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[566] + mi := &file_forge_carbide_proto_msgTypes[572] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38766,7 +39616,7 @@ func (x *DeleteComputeAllocationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteComputeAllocationResponse.ProtoReflect.Descriptor instead. func (*DeleteComputeAllocationResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{566} + return file_forge_carbide_proto_rawDescGZIP(), []int{572} } // For use with the existing InstanceType message @@ -38791,7 +39641,7 @@ type InstanceTypeAllocationStats struct { func (x *InstanceTypeAllocationStats) Reset() { *x = InstanceTypeAllocationStats{} - mi := &file_forge_carbide_proto_msgTypes[567] + mi := &file_forge_carbide_proto_msgTypes[573] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38803,7 +39653,7 @@ func (x *InstanceTypeAllocationStats) String() string { func (*InstanceTypeAllocationStats) ProtoMessage() {} func (x *InstanceTypeAllocationStats) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[567] + mi := &file_forge_carbide_proto_msgTypes[573] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38816,7 +39666,7 @@ func (x *InstanceTypeAllocationStats) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceTypeAllocationStats.ProtoReflect.Descriptor instead. func (*InstanceTypeAllocationStats) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{567} + return file_forge_carbide_proto_rawDescGZIP(), []int{573} } func (x *InstanceTypeAllocationStats) GetMaxAllocatable() uint32 { @@ -38856,7 +39706,7 @@ type GetRackRequest struct { func (x *GetRackRequest) Reset() { *x = GetRackRequest{} - mi := &file_forge_carbide_proto_msgTypes[568] + mi := &file_forge_carbide_proto_msgTypes[574] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38868,7 +39718,7 @@ func (x *GetRackRequest) String() string { func (*GetRackRequest) ProtoMessage() {} func (x *GetRackRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[568] + mi := &file_forge_carbide_proto_msgTypes[574] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38881,7 +39731,7 @@ func (x *GetRackRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRackRequest.ProtoReflect.Descriptor instead. func (*GetRackRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{568} + return file_forge_carbide_proto_rawDescGZIP(), []int{574} } func (x *GetRackRequest) GetId() string { @@ -38900,7 +39750,7 @@ type GetRackResponse struct { func (x *GetRackResponse) Reset() { *x = GetRackResponse{} - mi := &file_forge_carbide_proto_msgTypes[569] + mi := &file_forge_carbide_proto_msgTypes[575] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38912,7 +39762,7 @@ func (x *GetRackResponse) String() string { func (*GetRackResponse) ProtoMessage() {} func (x *GetRackResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[569] + mi := &file_forge_carbide_proto_msgTypes[575] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38925,7 +39775,7 @@ func (x *GetRackResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetRackResponse.ProtoReflect.Descriptor instead. func (*GetRackResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{569} + return file_forge_carbide_proto_rawDescGZIP(), []int{575} } func (x *GetRackResponse) GetRack() []*Rack { @@ -38944,7 +39794,7 @@ type RackList struct { func (x *RackList) Reset() { *x = RackList{} - mi := &file_forge_carbide_proto_msgTypes[570] + mi := &file_forge_carbide_proto_msgTypes[576] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38956,7 +39806,7 @@ func (x *RackList) String() string { func (*RackList) ProtoMessage() {} func (x *RackList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[570] + mi := &file_forge_carbide_proto_msgTypes[576] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -38969,7 +39819,7 @@ func (x *RackList) ProtoReflect() protoreflect.Message { // Deprecated: Use RackList.ProtoReflect.Descriptor instead. func (*RackList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{570} + return file_forge_carbide_proto_rawDescGZIP(), []int{576} } func (x *RackList) GetRacks() []*Rack { @@ -38987,7 +39837,7 @@ type RackSearchFilter struct { func (x *RackSearchFilter) Reset() { *x = RackSearchFilter{} - mi := &file_forge_carbide_proto_msgTypes[571] + mi := &file_forge_carbide_proto_msgTypes[577] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -38999,7 +39849,7 @@ func (x *RackSearchFilter) String() string { func (*RackSearchFilter) ProtoMessage() {} func (x *RackSearchFilter) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[571] + mi := &file_forge_carbide_proto_msgTypes[577] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39012,7 +39862,7 @@ func (x *RackSearchFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use RackSearchFilter.ProtoReflect.Descriptor instead. func (*RackSearchFilter) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{571} + return file_forge_carbide_proto_rawDescGZIP(), []int{577} } type RackIdList struct { @@ -39024,7 +39874,7 @@ type RackIdList struct { func (x *RackIdList) Reset() { *x = RackIdList{} - mi := &file_forge_carbide_proto_msgTypes[572] + mi := &file_forge_carbide_proto_msgTypes[578] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39036,7 +39886,7 @@ func (x *RackIdList) String() string { func (*RackIdList) ProtoMessage() {} func (x *RackIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[572] + mi := &file_forge_carbide_proto_msgTypes[578] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39049,7 +39899,7 @@ func (x *RackIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use RackIdList.ProtoReflect.Descriptor instead. func (*RackIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{572} + return file_forge_carbide_proto_rawDescGZIP(), []int{578} } func (x *RackIdList) GetRackIds() []*RackId { @@ -39068,7 +39918,7 @@ type RacksByIdsRequest struct { func (x *RacksByIdsRequest) Reset() { *x = RacksByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[573] + mi := &file_forge_carbide_proto_msgTypes[579] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39080,7 +39930,7 @@ func (x *RacksByIdsRequest) String() string { func (*RacksByIdsRequest) ProtoMessage() {} func (x *RacksByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[573] + mi := &file_forge_carbide_proto_msgTypes[579] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39093,7 +39943,7 @@ func (x *RacksByIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RacksByIdsRequest.ProtoReflect.Descriptor instead. func (*RacksByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{573} + return file_forge_carbide_proto_rawDescGZIP(), []int{579} } func (x *RacksByIdsRequest) GetRackIds() []*RackId { @@ -39126,7 +39976,7 @@ type Rack struct { func (x *Rack) Reset() { *x = Rack{} - mi := &file_forge_carbide_proto_msgTypes[574] + mi := &file_forge_carbide_proto_msgTypes[580] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39138,7 +39988,7 @@ func (x *Rack) String() string { func (*Rack) ProtoMessage() {} func (x *Rack) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[574] + mi := &file_forge_carbide_proto_msgTypes[580] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39151,7 +40001,7 @@ func (x *Rack) ProtoReflect() protoreflect.Message { // Deprecated: Use Rack.ProtoReflect.Descriptor instead. func (*Rack) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{574} + return file_forge_carbide_proto_rawDescGZIP(), []int{580} } func (x *Rack) GetId() *RackId { @@ -39270,7 +40120,7 @@ type RackStateHistoryRecord struct { func (x *RackStateHistoryRecord) Reset() { *x = RackStateHistoryRecord{} - mi := &file_forge_carbide_proto_msgTypes[575] + mi := &file_forge_carbide_proto_msgTypes[581] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39282,7 +40132,7 @@ func (x *RackStateHistoryRecord) String() string { func (*RackStateHistoryRecord) ProtoMessage() {} func (x *RackStateHistoryRecord) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[575] + mi := &file_forge_carbide_proto_msgTypes[581] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39295,7 +40145,7 @@ func (x *RackStateHistoryRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use RackStateHistoryRecord.ProtoReflect.Descriptor instead. func (*RackStateHistoryRecord) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{575} + return file_forge_carbide_proto_rawDescGZIP(), []int{581} } func (x *RackStateHistoryRecord) GetState() string { @@ -39328,7 +40178,7 @@ type RackStateHistoriesRequest struct { func (x *RackStateHistoriesRequest) Reset() { *x = RackStateHistoriesRequest{} - mi := &file_forge_carbide_proto_msgTypes[576] + mi := &file_forge_carbide_proto_msgTypes[582] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39340,7 +40190,7 @@ func (x *RackStateHistoriesRequest) String() string { func (*RackStateHistoriesRequest) ProtoMessage() {} func (x *RackStateHistoriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[576] + mi := &file_forge_carbide_proto_msgTypes[582] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39353,7 +40203,7 @@ func (x *RackStateHistoriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RackStateHistoriesRequest.ProtoReflect.Descriptor instead. func (*RackStateHistoriesRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{576} + return file_forge_carbide_proto_rawDescGZIP(), []int{582} } func (x *RackStateHistoriesRequest) GetRackIds() []*RackId { @@ -39372,7 +40222,7 @@ type RackStateHistories struct { func (x *RackStateHistories) Reset() { *x = RackStateHistories{} - mi := &file_forge_carbide_proto_msgTypes[577] + mi := &file_forge_carbide_proto_msgTypes[583] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39384,7 +40234,7 @@ func (x *RackStateHistories) String() string { func (*RackStateHistories) ProtoMessage() {} func (x *RackStateHistories) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[577] + mi := &file_forge_carbide_proto_msgTypes[583] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39397,7 +40247,7 @@ func (x *RackStateHistories) ProtoReflect() protoreflect.Message { // Deprecated: Use RackStateHistories.ProtoReflect.Descriptor instead. func (*RackStateHistories) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{577} + return file_forge_carbide_proto_rawDescGZIP(), []int{583} } func (x *RackStateHistories) GetHistories() map[string]*RackStateHistoryRecords { @@ -39416,7 +40266,7 @@ type RackStateHistoryRecords struct { func (x *RackStateHistoryRecords) Reset() { *x = RackStateHistoryRecords{} - mi := &file_forge_carbide_proto_msgTypes[578] + mi := &file_forge_carbide_proto_msgTypes[584] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39428,7 +40278,7 @@ func (x *RackStateHistoryRecords) String() string { func (*RackStateHistoryRecords) ProtoMessage() {} func (x *RackStateHistoryRecords) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[578] + mi := &file_forge_carbide_proto_msgTypes[584] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39441,7 +40291,7 @@ func (x *RackStateHistoryRecords) ProtoReflect() protoreflect.Message { // Deprecated: Use RackStateHistoryRecords.ProtoReflect.Descriptor instead. func (*RackStateHistoryRecords) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{578} + return file_forge_carbide_proto_rawDescGZIP(), []int{584} } func (x *RackStateHistoryRecords) GetRecords() []*RackStateHistoryRecord { @@ -39460,7 +40310,7 @@ type DeleteRackRequest struct { func (x *DeleteRackRequest) Reset() { *x = DeleteRackRequest{} - mi := &file_forge_carbide_proto_msgTypes[579] + mi := &file_forge_carbide_proto_msgTypes[585] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39472,7 +40322,7 @@ func (x *DeleteRackRequest) String() string { func (*DeleteRackRequest) ProtoMessage() {} func (x *DeleteRackRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[579] + mi := &file_forge_carbide_proto_msgTypes[585] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39485,7 +40335,7 @@ func (x *DeleteRackRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRackRequest.ProtoReflect.Descriptor instead. func (*DeleteRackRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{579} + return file_forge_carbide_proto_rawDescGZIP(), []int{585} } func (x *DeleteRackRequest) GetId() string { @@ -39495,29 +40345,31 @@ func (x *DeleteRackRequest) GetId() string { return "" } -type RackManagerForgeRequest struct { +type RackCapabilityCompute struct { state protoimpl.MessageState `protogen:"open.v1"` - Cmd RackManagerForgeCmd `protobuf:"varint,1,opt,name=cmd,proto3,enum=forge.RackManagerForgeCmd" json:"cmd,omitempty"` - NodeId *string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3,oneof" json:"node_id,omitempty"` + Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` + Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + Vendor *string `protobuf:"bytes,3,opt,name=vendor,proto3,oneof" json:"vendor,omitempty"` + SlotIds []uint32 `protobuf:"varint,4,rep,packed,name=slot_ids,json=slotIds,proto3" json:"slot_ids,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *RackManagerForgeRequest) Reset() { - *x = RackManagerForgeRequest{} - mi := &file_forge_carbide_proto_msgTypes[580] +func (x *RackCapabilityCompute) Reset() { + *x = RackCapabilityCompute{} + mi := &file_forge_carbide_proto_msgTypes[586] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *RackManagerForgeRequest) String() string { +func (x *RackCapabilityCompute) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RackManagerForgeRequest) ProtoMessage() {} +func (*RackCapabilityCompute) ProtoMessage() {} -func (x *RackManagerForgeRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[580] +func (x *RackCapabilityCompute) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[586] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39528,47 +40380,64 @@ func (x *RackManagerForgeRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RackManagerForgeRequest.ProtoReflect.Descriptor instead. -func (*RackManagerForgeRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{580} +// Deprecated: Use RackCapabilityCompute.ProtoReflect.Descriptor instead. +func (*RackCapabilityCompute) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{586} } -func (x *RackManagerForgeRequest) GetCmd() RackManagerForgeCmd { +func (x *RackCapabilityCompute) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *RackCapabilityCompute) GetCount() uint32 { if x != nil { - return x.Cmd + return x.Count } - return RackManagerForgeCmd_InventoryGet + return 0 } -func (x *RackManagerForgeRequest) GetNodeId() string { - if x != nil && x.NodeId != nil { - return *x.NodeId +func (x *RackCapabilityCompute) GetVendor() string { + if x != nil && x.Vendor != nil { + return *x.Vendor } return "" } -type RackManagerForgeResponse struct { +func (x *RackCapabilityCompute) GetSlotIds() []uint32 { + if x != nil { + return x.SlotIds + } + return nil +} + +type RackCapabilitySwitch struct { state protoimpl.MessageState `protogen:"open.v1"` - JsonResult *string `protobuf:"bytes,1,opt,name=json_result,json=jsonResult,proto3,oneof" json:"json_result,omitempty"` + Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` + Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + Vendor *string `protobuf:"bytes,3,opt,name=vendor,proto3,oneof" json:"vendor,omitempty"` + SlotIds []uint32 `protobuf:"varint,4,rep,packed,name=slot_ids,json=slotIds,proto3" json:"slot_ids,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *RackManagerForgeResponse) Reset() { - *x = RackManagerForgeResponse{} - mi := &file_forge_carbide_proto_msgTypes[581] +func (x *RackCapabilitySwitch) Reset() { + *x = RackCapabilitySwitch{} + mi := &file_forge_carbide_proto_msgTypes[587] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *RackManagerForgeResponse) String() string { +func (x *RackCapabilitySwitch) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RackManagerForgeResponse) ProtoMessage() {} +func (*RackCapabilitySwitch) ProtoMessage() {} -func (x *RackManagerForgeResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[581] +func (x *RackCapabilitySwitch) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[587] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39579,93 +40448,64 @@ func (x *RackManagerForgeResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RackManagerForgeResponse.ProtoReflect.Descriptor instead. -func (*RackManagerForgeResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{581} +// Deprecated: Use RackCapabilitySwitch.ProtoReflect.Descriptor instead. +func (*RackCapabilitySwitch) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{587} } -func (x *RackManagerForgeResponse) GetJsonResult() string { - if x != nil && x.JsonResult != nil { - return *x.JsonResult +func (x *RackCapabilitySwitch) GetName() string { + if x != nil && x.Name != nil { + return *x.Name } return "" } -type MachineNVLinkInfo struct { - state protoimpl.MessageState `protogen:"open.v1"` - DomainUuid *NVLinkDomainId `protobuf:"bytes,1,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` - Gpus []*NVLinkGpu `protobuf:"bytes,2,rep,name=gpus,proto3" json:"gpus,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *MachineNVLinkInfo) Reset() { - *x = MachineNVLinkInfo{} - mi := &file_forge_carbide_proto_msgTypes[582] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MachineNVLinkInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MachineNVLinkInfo) ProtoMessage() {} - -func (x *MachineNVLinkInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[582] +func (x *RackCapabilitySwitch) GetCount() uint32 { if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms + return x.Count } - return mi.MessageOf(x) -} - -// Deprecated: Use MachineNVLinkInfo.ProtoReflect.Descriptor instead. -func (*MachineNVLinkInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{582} + return 0 } -func (x *MachineNVLinkInfo) GetDomainUuid() *NVLinkDomainId { - if x != nil { - return x.DomainUuid +func (x *RackCapabilitySwitch) GetVendor() string { + if x != nil && x.Vendor != nil { + return *x.Vendor } - return nil + return "" } -func (x *MachineNVLinkInfo) GetGpus() []*NVLinkGpu { +func (x *RackCapabilitySwitch) GetSlotIds() []uint32 { if x != nil { - return x.Gpus + return x.SlotIds } return nil } -type UpdateMachineNvLinkInfoRequest struct { +type RackCapabilityPowerShelf struct { state protoimpl.MessageState `protogen:"open.v1"` - MachineId *MachineId `protobuf:"bytes,1,opt,name=machine_id,json=machineId,proto3" json:"machine_id,omitempty"` - NvlinkInfo *MachineNVLinkInfo `protobuf:"bytes,2,opt,name=nvlink_info,json=nvlinkInfo,proto3" json:"nvlink_info,omitempty"` + Name *string `protobuf:"bytes,1,opt,name=name,proto3,oneof" json:"name,omitempty"` + Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + Vendor *string `protobuf:"bytes,3,opt,name=vendor,proto3,oneof" json:"vendor,omitempty"` + SlotIds []uint32 `protobuf:"varint,4,rep,packed,name=slot_ids,json=slotIds,proto3" json:"slot_ids,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *UpdateMachineNvLinkInfoRequest) Reset() { - *x = UpdateMachineNvLinkInfoRequest{} - mi := &file_forge_carbide_proto_msgTypes[583] +func (x *RackCapabilityPowerShelf) Reset() { + *x = RackCapabilityPowerShelf{} + mi := &file_forge_carbide_proto_msgTypes[588] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *UpdateMachineNvLinkInfoRequest) String() string { +func (x *RackCapabilityPowerShelf) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateMachineNvLinkInfoRequest) ProtoMessage() {} +func (*RackCapabilityPowerShelf) ProtoMessage() {} -func (x *UpdateMachineNvLinkInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[583] +func (x *RackCapabilityPowerShelf) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[588] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39676,51 +40516,66 @@ func (x *UpdateMachineNvLinkInfoRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateMachineNvLinkInfoRequest.ProtoReflect.Descriptor instead. -func (*UpdateMachineNvLinkInfoRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{583} +// Deprecated: Use RackCapabilityPowerShelf.ProtoReflect.Descriptor instead. +func (*RackCapabilityPowerShelf) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{588} } -func (x *UpdateMachineNvLinkInfoRequest) GetMachineId() *MachineId { +func (x *RackCapabilityPowerShelf) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *RackCapabilityPowerShelf) GetCount() uint32 { if x != nil { - return x.MachineId + return x.Count } - return nil + return 0 } -func (x *UpdateMachineNvLinkInfoRequest) GetNvlinkInfo() *MachineNVLinkInfo { +func (x *RackCapabilityPowerShelf) GetVendor() string { + if x != nil && x.Vendor != nil { + return *x.Vendor + } + return "" +} + +func (x *RackCapabilityPowerShelf) GetSlotIds() []uint32 { if x != nil { - return x.NvlinkInfo + return x.SlotIds } return nil } -type NVLinkGpu struct { - state protoimpl.MessageState `protogen:"open.v1"` - NmxMId string `protobuf:"bytes,1,opt,name=nmx_m_id,json=nmxMId,proto3" json:"nmx_m_id,omitempty"` - TrayIndex int32 `protobuf:"varint,2,opt,name=tray_index,json=trayIndex,proto3" json:"tray_index,omitempty"` - SlotId int32 `protobuf:"varint,3,opt,name=slot_id,json=slotId,proto3" json:"slot_id,omitempty"` - DeviceId int32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` - Guid uint64 `protobuf:"varint,5,opt,name=guid,proto3" json:"guid,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type RackCapabilitiesSet struct { + state protoimpl.MessageState `protogen:"open.v1"` + RackHardwareType RackHardwareType `protobuf:"varint,1,opt,name=rack_hardware_type,json=rackHardwareType,proto3,enum=forge.RackHardwareType" json:"rack_hardware_type,omitempty"` + RackHardwareTopology RackHardwareTopology `protobuf:"varint,2,opt,name=rack_hardware_topology,json=rackHardwareTopology,proto3,enum=forge.RackHardwareTopology" json:"rack_hardware_topology,omitempty"` + RackHardwareClass RackHardwareClass `protobuf:"varint,3,opt,name=rack_hardware_class,json=rackHardwareClass,proto3,enum=forge.RackHardwareClass" json:"rack_hardware_class,omitempty"` + Compute *RackCapabilityCompute `protobuf:"bytes,4,opt,name=compute,proto3" json:"compute,omitempty"` + Switch *RackCapabilitySwitch `protobuf:"bytes,5,opt,name=switch,proto3" json:"switch,omitempty"` + PowerShelf *RackCapabilityPowerShelf `protobuf:"bytes,6,opt,name=power_shelf,json=powerShelf,proto3" json:"power_shelf,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *NVLinkGpu) Reset() { - *x = NVLinkGpu{} - mi := &file_forge_carbide_proto_msgTypes[584] +func (x *RackCapabilitiesSet) Reset() { + *x = RackCapabilitiesSet{} + mi := &file_forge_carbide_proto_msgTypes[589] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *NVLinkGpu) String() string { +func (x *RackCapabilitiesSet) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NVLinkGpu) ProtoMessage() {} +func (*RackCapabilitiesSet) ProtoMessage() {} -func (x *NVLinkGpu) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[584] +func (x *RackCapabilitiesSet) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[589] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39731,68 +40586,75 @@ func (x *NVLinkGpu) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NVLinkGpu.ProtoReflect.Descriptor instead. -func (*NVLinkGpu) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{584} +// Deprecated: Use RackCapabilitiesSet.ProtoReflect.Descriptor instead. +func (*RackCapabilitiesSet) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{589} } -func (x *NVLinkGpu) GetNmxMId() string { +func (x *RackCapabilitiesSet) GetRackHardwareType() RackHardwareType { if x != nil { - return x.NmxMId + return x.RackHardwareType } - return "" + return RackHardwareType_RACK_HARDWARE_TYPE_UNSPECIFIED } -func (x *NVLinkGpu) GetTrayIndex() int32 { +func (x *RackCapabilitiesSet) GetRackHardwareTopology() RackHardwareTopology { if x != nil { - return x.TrayIndex + return x.RackHardwareTopology } - return 0 + return RackHardwareTopology_RACK_HARDWARE_TOPOLOGY_UNSPECIFIED } -func (x *NVLinkGpu) GetSlotId() int32 { +func (x *RackCapabilitiesSet) GetRackHardwareClass() RackHardwareClass { if x != nil { - return x.SlotId + return x.RackHardwareClass } - return 0 + return RackHardwareClass_RACK_HARDWARE_CLASS_UNSPECIFIED } -func (x *NVLinkGpu) GetDeviceId() int32 { +func (x *RackCapabilitiesSet) GetCompute() *RackCapabilityCompute { if x != nil { - return x.DeviceId + return x.Compute } - return 0 + return nil } -func (x *NVLinkGpu) GetGuid() uint64 { +func (x *RackCapabilitiesSet) GetSwitch() *RackCapabilitySwitch { if x != nil { - return x.Guid + return x.Switch } - return 0 + return nil } -type MachineNVLinkStatusObservation struct { - state protoimpl.MessageState `protogen:"open.v1"` - GpuStatus []*MachineNVLinkGpuStatusObservation `protobuf:"bytes,1,rep,name=gpu_status,json=gpuStatus,proto3" json:"gpu_status,omitempty"` +func (x *RackCapabilitiesSet) GetPowerShelf() *RackCapabilityPowerShelf { + if x != nil { + return x.PowerShelf + } + return nil +} + +type GetRackCapabilitiesRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RackId *RackId `protobuf:"bytes,1,opt,name=rack_id,json=rackId,proto3" json:"rack_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *MachineNVLinkStatusObservation) Reset() { - *x = MachineNVLinkStatusObservation{} - mi := &file_forge_carbide_proto_msgTypes[585] +func (x *GetRackCapabilitiesRequest) Reset() { + *x = GetRackCapabilitiesRequest{} + mi := &file_forge_carbide_proto_msgTypes[590] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *MachineNVLinkStatusObservation) String() string { +func (x *GetRackCapabilitiesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MachineNVLinkStatusObservation) ProtoMessage() {} +func (*GetRackCapabilitiesRequest) ProtoMessage() {} -func (x *MachineNVLinkStatusObservation) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[585] +func (x *GetRackCapabilitiesRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[590] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39803,45 +40665,42 @@ func (x *MachineNVLinkStatusObservation) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MachineNVLinkStatusObservation.ProtoReflect.Descriptor instead. -func (*MachineNVLinkStatusObservation) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{585} +// Deprecated: Use GetRackCapabilitiesRequest.ProtoReflect.Descriptor instead. +func (*GetRackCapabilitiesRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{590} } -func (x *MachineNVLinkStatusObservation) GetGpuStatus() []*MachineNVLinkGpuStatusObservation { +func (x *GetRackCapabilitiesRequest) GetRackId() *RackId { if x != nil { - return x.GpuStatus + return x.RackId } return nil } -type MachineNVLinkGpuStatusObservation struct { - state protoimpl.MessageState `protogen:"open.v1"` - GpuId string `protobuf:"bytes,1,opt,name=gpu_id,json=gpuId,proto3" json:"gpu_id,omitempty"` - PartitionId *NVLinkPartitionId `protobuf:"bytes,2,opt,name=partition_id,json=partitionId,proto3,oneof" json:"partition_id,omitempty"` - LogicalPartitionId *NVLinkLogicalPartitionId `protobuf:"bytes,3,opt,name=logical_partition_id,json=logicalPartitionId,proto3,oneof" json:"logical_partition_id,omitempty"` - DeviceInstance uint32 `protobuf:"varint,4,opt,name=device_instance,json=deviceInstance,proto3" json:"device_instance,omitempty"` - DomainId *NVLinkDomainId `protobuf:"bytes,5,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` - Guid uint64 `protobuf:"varint,6,opt,name=guid,proto3" json:"guid,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type GetRackCapabilitiesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + RackId *RackId `protobuf:"bytes,1,opt,name=rack_id,json=rackId,proto3" json:"rack_id,omitempty"` + RackType string `protobuf:"bytes,2,opt,name=rack_type,json=rackType,proto3" json:"rack_type,omitempty"` + Capabilities *RackCapabilitiesSet `protobuf:"bytes,3,opt,name=capabilities,proto3" json:"capabilities,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *MachineNVLinkGpuStatusObservation) Reset() { - *x = MachineNVLinkGpuStatusObservation{} - mi := &file_forge_carbide_proto_msgTypes[586] +func (x *GetRackCapabilitiesResponse) Reset() { + *x = GetRackCapabilitiesResponse{} + mi := &file_forge_carbide_proto_msgTypes[591] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *MachineNVLinkGpuStatusObservation) String() string { +func (x *GetRackCapabilitiesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MachineNVLinkGpuStatusObservation) ProtoMessage() {} +func (*GetRackCapabilitiesResponse) ProtoMessage() {} -func (x *MachineNVLinkGpuStatusObservation) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[586] +func (x *GetRackCapabilitiesResponse) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[591] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39852,63 +40711,446 @@ func (x *MachineNVLinkGpuStatusObservation) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use MachineNVLinkGpuStatusObservation.ProtoReflect.Descriptor instead. -func (*MachineNVLinkGpuStatusObservation) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{586} -} - -func (x *MachineNVLinkGpuStatusObservation) GetGpuId() string { - if x != nil { - return x.GpuId - } - return "" -} - -func (x *MachineNVLinkGpuStatusObservation) GetPartitionId() *NVLinkPartitionId { - if x != nil { - return x.PartitionId - } - return nil +// Deprecated: Use GetRackCapabilitiesResponse.ProtoReflect.Descriptor instead. +func (*GetRackCapabilitiesResponse) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{591} } -func (x *MachineNVLinkGpuStatusObservation) GetLogicalPartitionId() *NVLinkLogicalPartitionId { +func (x *GetRackCapabilitiesResponse) GetRackId() *RackId { if x != nil { - return x.LogicalPartitionId + return x.RackId } return nil } -func (x *MachineNVLinkGpuStatusObservation) GetDeviceInstance() uint32 { +func (x *GetRackCapabilitiesResponse) GetRackType() string { if x != nil { - return x.DeviceInstance + return x.RackType } - return 0 + return "" } -func (x *MachineNVLinkGpuStatusObservation) GetDomainId() *NVLinkDomainId { +func (x *GetRackCapabilitiesResponse) GetCapabilities() *RackCapabilitiesSet { if x != nil { - return x.DomainId + return x.Capabilities } return nil } -func (x *MachineNVLinkGpuStatusObservation) GetGuid() uint64 { - if x != nil { - return x.Guid - } - return 0 -} - -type NmxmBrowseRequest struct { +type RackManagerForgeRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Cmd RackManagerForgeCmd `protobuf:"varint,1,opt,name=cmd,proto3,enum=forge.RackManagerForgeCmd" json:"cmd,omitempty"` + NodeId *string `protobuf:"bytes,2,opt,name=node_id,json=nodeId,proto3,oneof" json:"node_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RackManagerForgeRequest) Reset() { + *x = RackManagerForgeRequest{} + mi := &file_forge_carbide_proto_msgTypes[592] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RackManagerForgeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RackManagerForgeRequest) ProtoMessage() {} + +func (x *RackManagerForgeRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[592] + 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 RackManagerForgeRequest.ProtoReflect.Descriptor instead. +func (*RackManagerForgeRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{592} +} + +func (x *RackManagerForgeRequest) GetCmd() RackManagerForgeCmd { + if x != nil { + return x.Cmd + } + return RackManagerForgeCmd_InventoryGet +} + +func (x *RackManagerForgeRequest) GetNodeId() string { + if x != nil && x.NodeId != nil { + return *x.NodeId + } + return "" +} + +type RackManagerForgeResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + JsonResult *string `protobuf:"bytes,1,opt,name=json_result,json=jsonResult,proto3,oneof" json:"json_result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RackManagerForgeResponse) Reset() { + *x = RackManagerForgeResponse{} + mi := &file_forge_carbide_proto_msgTypes[593] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RackManagerForgeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RackManagerForgeResponse) ProtoMessage() {} + +func (x *RackManagerForgeResponse) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[593] + 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 RackManagerForgeResponse.ProtoReflect.Descriptor instead. +func (*RackManagerForgeResponse) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{593} +} + +func (x *RackManagerForgeResponse) GetJsonResult() string { + if x != nil && x.JsonResult != nil { + return *x.JsonResult + } + return "" +} + +type MachineNVLinkInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + DomainUuid *NVLinkDomainId `protobuf:"bytes,1,opt,name=domain_uuid,json=domainUuid,proto3" json:"domain_uuid,omitempty"` + Gpus []*NVLinkGpu `protobuf:"bytes,2,rep,name=gpus,proto3" json:"gpus,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MachineNVLinkInfo) Reset() { + *x = MachineNVLinkInfo{} + mi := &file_forge_carbide_proto_msgTypes[594] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MachineNVLinkInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MachineNVLinkInfo) ProtoMessage() {} + +func (x *MachineNVLinkInfo) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[594] + 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 MachineNVLinkInfo.ProtoReflect.Descriptor instead. +func (*MachineNVLinkInfo) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{594} +} + +func (x *MachineNVLinkInfo) GetDomainUuid() *NVLinkDomainId { + if x != nil { + return x.DomainUuid + } + return nil +} + +func (x *MachineNVLinkInfo) GetGpus() []*NVLinkGpu { + if x != nil { + return x.Gpus + } + return nil +} + +type UpdateMachineNvLinkInfoRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + MachineId *MachineId `protobuf:"bytes,1,opt,name=machine_id,json=machineId,proto3" json:"machine_id,omitempty"` + NvlinkInfo *MachineNVLinkInfo `protobuf:"bytes,2,opt,name=nvlink_info,json=nvlinkInfo,proto3" json:"nvlink_info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateMachineNvLinkInfoRequest) Reset() { + *x = UpdateMachineNvLinkInfoRequest{} + mi := &file_forge_carbide_proto_msgTypes[595] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateMachineNvLinkInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateMachineNvLinkInfoRequest) ProtoMessage() {} + +func (x *UpdateMachineNvLinkInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[595] + 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 UpdateMachineNvLinkInfoRequest.ProtoReflect.Descriptor instead. +func (*UpdateMachineNvLinkInfoRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{595} +} + +func (x *UpdateMachineNvLinkInfoRequest) GetMachineId() *MachineId { + if x != nil { + return x.MachineId + } + return nil +} + +func (x *UpdateMachineNvLinkInfoRequest) GetNvlinkInfo() *MachineNVLinkInfo { + if x != nil { + return x.NvlinkInfo + } + return nil +} + +type NVLinkGpu struct { + state protoimpl.MessageState `protogen:"open.v1"` + NmxMId string `protobuf:"bytes,1,opt,name=nmx_m_id,json=nmxMId,proto3" json:"nmx_m_id,omitempty"` + TrayIndex int32 `protobuf:"varint,2,opt,name=tray_index,json=trayIndex,proto3" json:"tray_index,omitempty"` + SlotId int32 `protobuf:"varint,3,opt,name=slot_id,json=slotId,proto3" json:"slot_id,omitempty"` + DeviceId int32 `protobuf:"varint,4,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Guid uint64 `protobuf:"varint,5,opt,name=guid,proto3" json:"guid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NVLinkGpu) Reset() { + *x = NVLinkGpu{} + mi := &file_forge_carbide_proto_msgTypes[596] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NVLinkGpu) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NVLinkGpu) ProtoMessage() {} + +func (x *NVLinkGpu) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[596] + 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 NVLinkGpu.ProtoReflect.Descriptor instead. +func (*NVLinkGpu) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{596} +} + +func (x *NVLinkGpu) GetNmxMId() string { + if x != nil { + return x.NmxMId + } + return "" +} + +func (x *NVLinkGpu) GetTrayIndex() int32 { + if x != nil { + return x.TrayIndex + } + return 0 +} + +func (x *NVLinkGpu) GetSlotId() int32 { + if x != nil { + return x.SlotId + } + return 0 +} + +func (x *NVLinkGpu) GetDeviceId() int32 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *NVLinkGpu) GetGuid() uint64 { + if x != nil { + return x.Guid + } + return 0 +} + +type MachineNVLinkStatusObservation struct { + state protoimpl.MessageState `protogen:"open.v1"` + GpuStatus []*MachineNVLinkGpuStatusObservation `protobuf:"bytes,1,rep,name=gpu_status,json=gpuStatus,proto3" json:"gpu_status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MachineNVLinkStatusObservation) Reset() { + *x = MachineNVLinkStatusObservation{} + mi := &file_forge_carbide_proto_msgTypes[597] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MachineNVLinkStatusObservation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MachineNVLinkStatusObservation) ProtoMessage() {} + +func (x *MachineNVLinkStatusObservation) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[597] + 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 MachineNVLinkStatusObservation.ProtoReflect.Descriptor instead. +func (*MachineNVLinkStatusObservation) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{597} +} + +func (x *MachineNVLinkStatusObservation) GetGpuStatus() []*MachineNVLinkGpuStatusObservation { + if x != nil { + return x.GpuStatus + } + return nil +} + +type MachineNVLinkGpuStatusObservation struct { + state protoimpl.MessageState `protogen:"open.v1"` + GpuId string `protobuf:"bytes,1,opt,name=gpu_id,json=gpuId,proto3" json:"gpu_id,omitempty"` + PartitionId *NVLinkPartitionId `protobuf:"bytes,2,opt,name=partition_id,json=partitionId,proto3,oneof" json:"partition_id,omitempty"` + LogicalPartitionId *NVLinkLogicalPartitionId `protobuf:"bytes,3,opt,name=logical_partition_id,json=logicalPartitionId,proto3,oneof" json:"logical_partition_id,omitempty"` + DeviceInstance uint32 `protobuf:"varint,4,opt,name=device_instance,json=deviceInstance,proto3" json:"device_instance,omitempty"` + DomainId *NVLinkDomainId `protobuf:"bytes,5,opt,name=domain_id,json=domainId,proto3" json:"domain_id,omitempty"` + Guid uint64 `protobuf:"varint,6,opt,name=guid,proto3" json:"guid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MachineNVLinkGpuStatusObservation) Reset() { + *x = MachineNVLinkGpuStatusObservation{} + mi := &file_forge_carbide_proto_msgTypes[598] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MachineNVLinkGpuStatusObservation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MachineNVLinkGpuStatusObservation) ProtoMessage() {} + +func (x *MachineNVLinkGpuStatusObservation) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[598] + 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 MachineNVLinkGpuStatusObservation.ProtoReflect.Descriptor instead. +func (*MachineNVLinkGpuStatusObservation) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{598} +} + +func (x *MachineNVLinkGpuStatusObservation) GetGpuId() string { + if x != nil { + return x.GpuId + } + return "" +} + +func (x *MachineNVLinkGpuStatusObservation) GetPartitionId() *NVLinkPartitionId { + if x != nil { + return x.PartitionId + } + return nil +} + +func (x *MachineNVLinkGpuStatusObservation) GetLogicalPartitionId() *NVLinkLogicalPartitionId { + if x != nil { + return x.LogicalPartitionId + } + return nil +} + +func (x *MachineNVLinkGpuStatusObservation) GetDeviceInstance() uint32 { + if x != nil { + return x.DeviceInstance + } + return 0 +} + +func (x *MachineNVLinkGpuStatusObservation) GetDomainId() *NVLinkDomainId { + if x != nil { + return x.DomainId + } + return nil +} + +func (x *MachineNVLinkGpuStatusObservation) GetGuid() uint64 { + if x != nil { + return x.Guid + } + return 0 +} + +type NmxmBrowseRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *NmxmBrowseRequest) Reset() { *x = NmxmBrowseRequest{} - mi := &file_forge_carbide_proto_msgTypes[587] + mi := &file_forge_carbide_proto_msgTypes[599] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39920,7 +41162,7 @@ func (x *NmxmBrowseRequest) String() string { func (*NmxmBrowseRequest) ProtoMessage() {} func (x *NmxmBrowseRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[587] + mi := &file_forge_carbide_proto_msgTypes[599] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39933,7 +41175,7 @@ func (x *NmxmBrowseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NmxmBrowseRequest.ProtoReflect.Descriptor instead. func (*NmxmBrowseRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{587} + return file_forge_carbide_proto_rawDescGZIP(), []int{599} } func (x *NmxmBrowseRequest) GetPath() string { @@ -39957,7 +41199,7 @@ type NmxmBrowseResponse struct { func (x *NmxmBrowseResponse) Reset() { *x = NmxmBrowseResponse{} - mi := &file_forge_carbide_proto_msgTypes[588] + mi := &file_forge_carbide_proto_msgTypes[600] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -39969,7 +41211,7 @@ func (x *NmxmBrowseResponse) String() string { func (*NmxmBrowseResponse) ProtoMessage() {} func (x *NmxmBrowseResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[588] + mi := &file_forge_carbide_proto_msgTypes[600] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -39982,7 +41224,7 @@ func (x *NmxmBrowseResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NmxmBrowseResponse.ProtoReflect.Descriptor instead. func (*NmxmBrowseResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{588} + return file_forge_carbide_proto_rawDescGZIP(), []int{600} } func (x *NmxmBrowseResponse) GetBody() string { @@ -40020,7 +41262,7 @@ type NVLinkPartition struct { func (x *NVLinkPartition) Reset() { *x = NVLinkPartition{} - mi := &file_forge_carbide_proto_msgTypes[589] + mi := &file_forge_carbide_proto_msgTypes[601] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40032,7 +41274,7 @@ func (x *NVLinkPartition) String() string { func (*NVLinkPartition) ProtoMessage() {} func (x *NVLinkPartition) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[589] + mi := &file_forge_carbide_proto_msgTypes[601] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40045,7 +41287,7 @@ func (x *NVLinkPartition) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkPartition.ProtoReflect.Descriptor instead. func (*NVLinkPartition) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{589} + return file_forge_carbide_proto_rawDescGZIP(), []int{601} } func (x *NVLinkPartition) GetId() *NVLinkPartitionId { @@ -40092,7 +41334,7 @@ type NVLinkPartitionList struct { func (x *NVLinkPartitionList) Reset() { *x = NVLinkPartitionList{} - mi := &file_forge_carbide_proto_msgTypes[590] + mi := &file_forge_carbide_proto_msgTypes[602] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40104,7 +41346,7 @@ func (x *NVLinkPartitionList) String() string { func (*NVLinkPartitionList) ProtoMessage() {} func (x *NVLinkPartitionList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[590] + mi := &file_forge_carbide_proto_msgTypes[602] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40117,7 +41359,7 @@ func (x *NVLinkPartitionList) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkPartitionList.ProtoReflect.Descriptor instead. func (*NVLinkPartitionList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{590} + return file_forge_carbide_proto_rawDescGZIP(), []int{602} } func (x *NVLinkPartitionList) GetPartitions() []*NVLinkPartition { @@ -40136,7 +41378,7 @@ type NVLinkPartitionSearchConfig struct { func (x *NVLinkPartitionSearchConfig) Reset() { *x = NVLinkPartitionSearchConfig{} - mi := &file_forge_carbide_proto_msgTypes[591] + mi := &file_forge_carbide_proto_msgTypes[603] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40148,7 +41390,7 @@ func (x *NVLinkPartitionSearchConfig) String() string { func (*NVLinkPartitionSearchConfig) ProtoMessage() {} func (x *NVLinkPartitionSearchConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[591] + mi := &file_forge_carbide_proto_msgTypes[603] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40161,7 +41403,7 @@ func (x *NVLinkPartitionSearchConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkPartitionSearchConfig.ProtoReflect.Descriptor instead. func (*NVLinkPartitionSearchConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{591} + return file_forge_carbide_proto_rawDescGZIP(), []int{603} } func (x *NVLinkPartitionSearchConfig) GetIncludeHistory() bool { @@ -40181,7 +41423,7 @@ type NVLinkPartitionQuery struct { func (x *NVLinkPartitionQuery) Reset() { *x = NVLinkPartitionQuery{} - mi := &file_forge_carbide_proto_msgTypes[592] + mi := &file_forge_carbide_proto_msgTypes[604] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40193,7 +41435,7 @@ func (x *NVLinkPartitionQuery) String() string { func (*NVLinkPartitionQuery) ProtoMessage() {} func (x *NVLinkPartitionQuery) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[592] + mi := &file_forge_carbide_proto_msgTypes[604] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40206,7 +41448,7 @@ func (x *NVLinkPartitionQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkPartitionQuery.ProtoReflect.Descriptor instead. func (*NVLinkPartitionQuery) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{592} + return file_forge_carbide_proto_rawDescGZIP(), []int{604} } func (x *NVLinkPartitionQuery) GetId() *UUID { @@ -40233,7 +41475,7 @@ type NVLinkPartitionSearchFilter struct { func (x *NVLinkPartitionSearchFilter) Reset() { *x = NVLinkPartitionSearchFilter{} - mi := &file_forge_carbide_proto_msgTypes[593] + mi := &file_forge_carbide_proto_msgTypes[605] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40245,7 +41487,7 @@ func (x *NVLinkPartitionSearchFilter) String() string { func (*NVLinkPartitionSearchFilter) ProtoMessage() {} func (x *NVLinkPartitionSearchFilter) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[593] + mi := &file_forge_carbide_proto_msgTypes[605] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40258,7 +41500,7 @@ func (x *NVLinkPartitionSearchFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkPartitionSearchFilter.ProtoReflect.Descriptor instead. func (*NVLinkPartitionSearchFilter) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{593} + return file_forge_carbide_proto_rawDescGZIP(), []int{605} } func (x *NVLinkPartitionSearchFilter) GetTenantOrganizationId() string { @@ -40285,7 +41527,7 @@ type NVLinkPartitionsByIdsRequest struct { func (x *NVLinkPartitionsByIdsRequest) Reset() { *x = NVLinkPartitionsByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[594] + mi := &file_forge_carbide_proto_msgTypes[606] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40297,7 +41539,7 @@ func (x *NVLinkPartitionsByIdsRequest) String() string { func (*NVLinkPartitionsByIdsRequest) ProtoMessage() {} func (x *NVLinkPartitionsByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[594] + mi := &file_forge_carbide_proto_msgTypes[606] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40310,7 +41552,7 @@ func (x *NVLinkPartitionsByIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkPartitionsByIdsRequest.ProtoReflect.Descriptor instead. func (*NVLinkPartitionsByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{594} + return file_forge_carbide_proto_rawDescGZIP(), []int{606} } func (x *NVLinkPartitionsByIdsRequest) GetPartitionIds() []*NVLinkPartitionId { @@ -40336,7 +41578,7 @@ type NVLinkPartitionIdList struct { func (x *NVLinkPartitionIdList) Reset() { *x = NVLinkPartitionIdList{} - mi := &file_forge_carbide_proto_msgTypes[595] + mi := &file_forge_carbide_proto_msgTypes[607] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40348,7 +41590,7 @@ func (x *NVLinkPartitionIdList) String() string { func (*NVLinkPartitionIdList) ProtoMessage() {} func (x *NVLinkPartitionIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[595] + mi := &file_forge_carbide_proto_msgTypes[607] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40361,7 +41603,7 @@ func (x *NVLinkPartitionIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkPartitionIdList.ProtoReflect.Descriptor instead. func (*NVLinkPartitionIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{595} + return file_forge_carbide_proto_rawDescGZIP(), []int{607} } func (x *NVLinkPartitionIdList) GetPartitionIds() []*NVLinkPartitionId { @@ -40379,7 +41621,7 @@ type NVLinkFabricSearchFilter struct { func (x *NVLinkFabricSearchFilter) Reset() { *x = NVLinkFabricSearchFilter{} - mi := &file_forge_carbide_proto_msgTypes[596] + mi := &file_forge_carbide_proto_msgTypes[608] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40391,7 +41633,7 @@ func (x *NVLinkFabricSearchFilter) String() string { func (*NVLinkFabricSearchFilter) ProtoMessage() {} func (x *NVLinkFabricSearchFilter) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[596] + mi := &file_forge_carbide_proto_msgTypes[608] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40404,7 +41646,7 @@ func (x *NVLinkFabricSearchFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkFabricSearchFilter.ProtoReflect.Descriptor instead. func (*NVLinkFabricSearchFilter) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{596} + return file_forge_carbide_proto_rawDescGZIP(), []int{608} } // Describe the desired configuration of an Logical Partition @@ -40419,7 +41661,7 @@ type NVLinkLogicalPartitionConfig struct { func (x *NVLinkLogicalPartitionConfig) Reset() { *x = NVLinkLogicalPartitionConfig{} - mi := &file_forge_carbide_proto_msgTypes[597] + mi := &file_forge_carbide_proto_msgTypes[609] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40431,7 +41673,7 @@ func (x *NVLinkLogicalPartitionConfig) String() string { func (*NVLinkLogicalPartitionConfig) ProtoMessage() {} func (x *NVLinkLogicalPartitionConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[597] + mi := &file_forge_carbide_proto_msgTypes[609] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40444,7 +41686,7 @@ func (x *NVLinkLogicalPartitionConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkLogicalPartitionConfig.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{597} + return file_forge_carbide_proto_rawDescGZIP(), []int{609} } func (x *NVLinkLogicalPartitionConfig) GetMetadata() *Metadata { @@ -40472,7 +41714,7 @@ type NVLinkLogicalPartitionStatus struct { func (x *NVLinkLogicalPartitionStatus) Reset() { *x = NVLinkLogicalPartitionStatus{} - mi := &file_forge_carbide_proto_msgTypes[598] + mi := &file_forge_carbide_proto_msgTypes[610] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40484,7 +41726,7 @@ func (x *NVLinkLogicalPartitionStatus) String() string { func (*NVLinkLogicalPartitionStatus) ProtoMessage() {} func (x *NVLinkLogicalPartitionStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[598] + mi := &file_forge_carbide_proto_msgTypes[610] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40497,7 +41739,7 @@ func (x *NVLinkLogicalPartitionStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkLogicalPartitionStatus.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{598} + return file_forge_carbide_proto_rawDescGZIP(), []int{610} } func (x *NVLinkLogicalPartitionStatus) GetState() TenantState { @@ -40521,7 +41763,7 @@ type NVLinkLogicalPartition struct { func (x *NVLinkLogicalPartition) Reset() { *x = NVLinkLogicalPartition{} - mi := &file_forge_carbide_proto_msgTypes[599] + mi := &file_forge_carbide_proto_msgTypes[611] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40533,7 +41775,7 @@ func (x *NVLinkLogicalPartition) String() string { func (*NVLinkLogicalPartition) ProtoMessage() {} func (x *NVLinkLogicalPartition) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[599] + mi := &file_forge_carbide_proto_msgTypes[611] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40546,7 +41788,7 @@ func (x *NVLinkLogicalPartition) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkLogicalPartition.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartition) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{599} + return file_forge_carbide_proto_rawDescGZIP(), []int{611} } func (x *NVLinkLogicalPartition) GetId() *NVLinkLogicalPartitionId { @@ -40593,7 +41835,7 @@ type NVLinkLogicalPartitionList struct { func (x *NVLinkLogicalPartitionList) Reset() { *x = NVLinkLogicalPartitionList{} - mi := &file_forge_carbide_proto_msgTypes[600] + mi := &file_forge_carbide_proto_msgTypes[612] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40605,7 +41847,7 @@ func (x *NVLinkLogicalPartitionList) String() string { func (*NVLinkLogicalPartitionList) ProtoMessage() {} func (x *NVLinkLogicalPartitionList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[600] + mi := &file_forge_carbide_proto_msgTypes[612] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40618,7 +41860,7 @@ func (x *NVLinkLogicalPartitionList) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkLogicalPartitionList.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{600} + return file_forge_carbide_proto_rawDescGZIP(), []int{612} } func (x *NVLinkLogicalPartitionList) GetPartitions() []*NVLinkLogicalPartition { @@ -40641,7 +41883,7 @@ type NVLinkLogicalPartitionCreationRequest struct { func (x *NVLinkLogicalPartitionCreationRequest) Reset() { *x = NVLinkLogicalPartitionCreationRequest{} - mi := &file_forge_carbide_proto_msgTypes[601] + mi := &file_forge_carbide_proto_msgTypes[613] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40653,7 +41895,7 @@ func (x *NVLinkLogicalPartitionCreationRequest) String() string { func (*NVLinkLogicalPartitionCreationRequest) ProtoMessage() {} func (x *NVLinkLogicalPartitionCreationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[601] + mi := &file_forge_carbide_proto_msgTypes[613] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40666,7 +41908,7 @@ func (x *NVLinkLogicalPartitionCreationRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use NVLinkLogicalPartitionCreationRequest.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionCreationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{601} + return file_forge_carbide_proto_rawDescGZIP(), []int{613} } func (x *NVLinkLogicalPartitionCreationRequest) GetConfig() *NVLinkLogicalPartitionConfig { @@ -40692,7 +41934,7 @@ type NVLinkLogicalPartitionDeletionRequest struct { func (x *NVLinkLogicalPartitionDeletionRequest) Reset() { *x = NVLinkLogicalPartitionDeletionRequest{} - mi := &file_forge_carbide_proto_msgTypes[602] + mi := &file_forge_carbide_proto_msgTypes[614] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40704,7 +41946,7 @@ func (x *NVLinkLogicalPartitionDeletionRequest) String() string { func (*NVLinkLogicalPartitionDeletionRequest) ProtoMessage() {} func (x *NVLinkLogicalPartitionDeletionRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[602] + mi := &file_forge_carbide_proto_msgTypes[614] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40717,7 +41959,7 @@ func (x *NVLinkLogicalPartitionDeletionRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use NVLinkLogicalPartitionDeletionRequest.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionDeletionRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{602} + return file_forge_carbide_proto_rawDescGZIP(), []int{614} } func (x *NVLinkLogicalPartitionDeletionRequest) GetId() *NVLinkLogicalPartitionId { @@ -40735,7 +41977,7 @@ type NVLinkLogicalPartitionDeletionResult struct { func (x *NVLinkLogicalPartitionDeletionResult) Reset() { *x = NVLinkLogicalPartitionDeletionResult{} - mi := &file_forge_carbide_proto_msgTypes[603] + mi := &file_forge_carbide_proto_msgTypes[615] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40747,7 +41989,7 @@ func (x *NVLinkLogicalPartitionDeletionResult) String() string { func (*NVLinkLogicalPartitionDeletionResult) ProtoMessage() {} func (x *NVLinkLogicalPartitionDeletionResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[603] + mi := &file_forge_carbide_proto_msgTypes[615] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40760,7 +42002,7 @@ func (x *NVLinkLogicalPartitionDeletionResult) ProtoReflect() protoreflect.Messa // Deprecated: Use NVLinkLogicalPartitionDeletionResult.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionDeletionResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{603} + return file_forge_carbide_proto_rawDescGZIP(), []int{615} } type NVLinkLogicalPartitionSearchFilter struct { @@ -40772,7 +42014,7 @@ type NVLinkLogicalPartitionSearchFilter struct { func (x *NVLinkLogicalPartitionSearchFilter) Reset() { *x = NVLinkLogicalPartitionSearchFilter{} - mi := &file_forge_carbide_proto_msgTypes[604] + mi := &file_forge_carbide_proto_msgTypes[616] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40784,7 +42026,7 @@ func (x *NVLinkLogicalPartitionSearchFilter) String() string { func (*NVLinkLogicalPartitionSearchFilter) ProtoMessage() {} func (x *NVLinkLogicalPartitionSearchFilter) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[604] + mi := &file_forge_carbide_proto_msgTypes[616] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40797,7 +42039,7 @@ func (x *NVLinkLogicalPartitionSearchFilter) ProtoReflect() protoreflect.Message // Deprecated: Use NVLinkLogicalPartitionSearchFilter.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionSearchFilter) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{604} + return file_forge_carbide_proto_rawDescGZIP(), []int{616} } func (x *NVLinkLogicalPartitionSearchFilter) GetName() string { @@ -40817,7 +42059,7 @@ type NVLinkLogicalPartitionsByIdsRequest struct { func (x *NVLinkLogicalPartitionsByIdsRequest) Reset() { *x = NVLinkLogicalPartitionsByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[605] + mi := &file_forge_carbide_proto_msgTypes[617] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40829,7 +42071,7 @@ func (x *NVLinkLogicalPartitionsByIdsRequest) String() string { func (*NVLinkLogicalPartitionsByIdsRequest) ProtoMessage() {} func (x *NVLinkLogicalPartitionsByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[605] + mi := &file_forge_carbide_proto_msgTypes[617] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40842,7 +42084,7 @@ func (x *NVLinkLogicalPartitionsByIdsRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use NVLinkLogicalPartitionsByIdsRequest.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionsByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{605} + return file_forge_carbide_proto_rawDescGZIP(), []int{617} } func (x *NVLinkLogicalPartitionsByIdsRequest) GetPartitionIds() []*NVLinkLogicalPartitionId { @@ -40868,7 +42110,7 @@ type NVLinkLogicalPartitionIdList struct { func (x *NVLinkLogicalPartitionIdList) Reset() { *x = NVLinkLogicalPartitionIdList{} - mi := &file_forge_carbide_proto_msgTypes[606] + mi := &file_forge_carbide_proto_msgTypes[618] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40880,7 +42122,7 @@ func (x *NVLinkLogicalPartitionIdList) String() string { func (*NVLinkLogicalPartitionIdList) ProtoMessage() {} func (x *NVLinkLogicalPartitionIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[606] + mi := &file_forge_carbide_proto_msgTypes[618] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40893,7 +42135,7 @@ func (x *NVLinkLogicalPartitionIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use NVLinkLogicalPartitionIdList.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{606} + return file_forge_carbide_proto_rawDescGZIP(), []int{618} } func (x *NVLinkLogicalPartitionIdList) GetPartitionIds() []*NVLinkLogicalPartitionId { @@ -40914,7 +42156,7 @@ type NVLinkLogicalPartitionUpdateRequest struct { func (x *NVLinkLogicalPartitionUpdateRequest) Reset() { *x = NVLinkLogicalPartitionUpdateRequest{} - mi := &file_forge_carbide_proto_msgTypes[607] + mi := &file_forge_carbide_proto_msgTypes[619] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40926,7 +42168,7 @@ func (x *NVLinkLogicalPartitionUpdateRequest) String() string { func (*NVLinkLogicalPartitionUpdateRequest) ProtoMessage() {} func (x *NVLinkLogicalPartitionUpdateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[607] + mi := &file_forge_carbide_proto_msgTypes[619] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40939,7 +42181,7 @@ func (x *NVLinkLogicalPartitionUpdateRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use NVLinkLogicalPartitionUpdateRequest.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionUpdateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{607} + return file_forge_carbide_proto_rawDescGZIP(), []int{619} } func (x *NVLinkLogicalPartitionUpdateRequest) GetId() *NVLinkLogicalPartitionId { @@ -40971,7 +42213,7 @@ type NVLinkLogicalPartitionUpdateResult struct { func (x *NVLinkLogicalPartitionUpdateResult) Reset() { *x = NVLinkLogicalPartitionUpdateResult{} - mi := &file_forge_carbide_proto_msgTypes[608] + mi := &file_forge_carbide_proto_msgTypes[620] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -40983,7 +42225,7 @@ func (x *NVLinkLogicalPartitionUpdateResult) String() string { func (*NVLinkLogicalPartitionUpdateResult) ProtoMessage() {} func (x *NVLinkLogicalPartitionUpdateResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[608] + mi := &file_forge_carbide_proto_msgTypes[620] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -40996,7 +42238,7 @@ func (x *NVLinkLogicalPartitionUpdateResult) ProtoReflect() protoreflect.Message // Deprecated: Use NVLinkLogicalPartitionUpdateResult.ProtoReflect.Descriptor instead. func (*NVLinkLogicalPartitionUpdateResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{608} + return file_forge_carbide_proto_rawDescGZIP(), []int{620} } // Must provide either machine_id or ip/mac pair @@ -41013,7 +42255,7 @@ type CreateBmcUserRequest struct { func (x *CreateBmcUserRequest) Reset() { *x = CreateBmcUserRequest{} - mi := &file_forge_carbide_proto_msgTypes[609] + mi := &file_forge_carbide_proto_msgTypes[621] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41025,7 +42267,7 @@ func (x *CreateBmcUserRequest) String() string { func (*CreateBmcUserRequest) ProtoMessage() {} func (x *CreateBmcUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[609] + mi := &file_forge_carbide_proto_msgTypes[621] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41038,7 +42280,7 @@ func (x *CreateBmcUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBmcUserRequest.ProtoReflect.Descriptor instead. func (*CreateBmcUserRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{609} + return file_forge_carbide_proto_rawDescGZIP(), []int{621} } func (x *CreateBmcUserRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -41084,7 +42326,7 @@ type CreateBmcUserResponse struct { func (x *CreateBmcUserResponse) Reset() { *x = CreateBmcUserResponse{} - mi := &file_forge_carbide_proto_msgTypes[610] + mi := &file_forge_carbide_proto_msgTypes[622] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41096,7 +42338,7 @@ func (x *CreateBmcUserResponse) String() string { func (*CreateBmcUserResponse) ProtoMessage() {} func (x *CreateBmcUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[610] + mi := &file_forge_carbide_proto_msgTypes[622] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41109,7 +42351,7 @@ func (x *CreateBmcUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateBmcUserResponse.ProtoReflect.Descriptor instead. func (*CreateBmcUserResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{610} + return file_forge_carbide_proto_rawDescGZIP(), []int{622} } type DeleteBmcUserRequest struct { @@ -41123,7 +42365,7 @@ type DeleteBmcUserRequest struct { func (x *DeleteBmcUserRequest) Reset() { *x = DeleteBmcUserRequest{} - mi := &file_forge_carbide_proto_msgTypes[611] + mi := &file_forge_carbide_proto_msgTypes[623] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41135,7 +42377,7 @@ func (x *DeleteBmcUserRequest) String() string { func (*DeleteBmcUserRequest) ProtoMessage() {} func (x *DeleteBmcUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[611] + mi := &file_forge_carbide_proto_msgTypes[623] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41148,7 +42390,7 @@ func (x *DeleteBmcUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteBmcUserRequest.ProtoReflect.Descriptor instead. func (*DeleteBmcUserRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{611} + return file_forge_carbide_proto_rawDescGZIP(), []int{623} } func (x *DeleteBmcUserRequest) GetBmcEndpointRequest() *BmcEndpointRequest { @@ -41180,7 +42422,7 @@ type DeleteBmcUserResponse struct { func (x *DeleteBmcUserResponse) Reset() { *x = DeleteBmcUserResponse{} - mi := &file_forge_carbide_proto_msgTypes[612] + mi := &file_forge_carbide_proto_msgTypes[624] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41192,7 +42434,7 @@ func (x *DeleteBmcUserResponse) String() string { func (*DeleteBmcUserResponse) ProtoMessage() {} func (x *DeleteBmcUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[612] + mi := &file_forge_carbide_proto_msgTypes[624] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41205,7 +42447,7 @@ func (x *DeleteBmcUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteBmcUserResponse.ProtoReflect.Descriptor instead. func (*DeleteBmcUserResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{612} + return file_forge_carbide_proto_rawDescGZIP(), []int{624} } type SetFirmwareUpdateTimeWindowRequest struct { @@ -41219,7 +42461,7 @@ type SetFirmwareUpdateTimeWindowRequest struct { func (x *SetFirmwareUpdateTimeWindowRequest) Reset() { *x = SetFirmwareUpdateTimeWindowRequest{} - mi := &file_forge_carbide_proto_msgTypes[613] + mi := &file_forge_carbide_proto_msgTypes[625] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41231,7 +42473,7 @@ func (x *SetFirmwareUpdateTimeWindowRequest) String() string { func (*SetFirmwareUpdateTimeWindowRequest) ProtoMessage() {} func (x *SetFirmwareUpdateTimeWindowRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[613] + mi := &file_forge_carbide_proto_msgTypes[625] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41244,7 +42486,7 @@ func (x *SetFirmwareUpdateTimeWindowRequest) ProtoReflect() protoreflect.Message // Deprecated: Use SetFirmwareUpdateTimeWindowRequest.ProtoReflect.Descriptor instead. func (*SetFirmwareUpdateTimeWindowRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{613} + return file_forge_carbide_proto_rawDescGZIP(), []int{625} } func (x *SetFirmwareUpdateTimeWindowRequest) GetMachineIds() []*MachineId { @@ -41276,7 +42518,7 @@ type SetFirmwareUpdateTimeWindowResponse struct { func (x *SetFirmwareUpdateTimeWindowResponse) Reset() { *x = SetFirmwareUpdateTimeWindowResponse{} - mi := &file_forge_carbide_proto_msgTypes[614] + mi := &file_forge_carbide_proto_msgTypes[626] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41288,7 +42530,7 @@ func (x *SetFirmwareUpdateTimeWindowResponse) String() string { func (*SetFirmwareUpdateTimeWindowResponse) ProtoMessage() {} func (x *SetFirmwareUpdateTimeWindowResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[614] + mi := &file_forge_carbide_proto_msgTypes[626] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41301,7 +42543,7 @@ func (x *SetFirmwareUpdateTimeWindowResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use SetFirmwareUpdateTimeWindowResponse.ProtoReflect.Descriptor instead. func (*SetFirmwareUpdateTimeWindowResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{614} + return file_forge_carbide_proto_rawDescGZIP(), []int{626} } type ListHostFirmwareRequest struct { @@ -41312,7 +42554,7 @@ type ListHostFirmwareRequest struct { func (x *ListHostFirmwareRequest) Reset() { *x = ListHostFirmwareRequest{} - mi := &file_forge_carbide_proto_msgTypes[615] + mi := &file_forge_carbide_proto_msgTypes[627] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41324,7 +42566,7 @@ func (x *ListHostFirmwareRequest) String() string { func (*ListHostFirmwareRequest) ProtoMessage() {} func (x *ListHostFirmwareRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[615] + mi := &file_forge_carbide_proto_msgTypes[627] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41337,7 +42579,7 @@ func (x *ListHostFirmwareRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHostFirmwareRequest.ProtoReflect.Descriptor instead. func (*ListHostFirmwareRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{615} + return file_forge_carbide_proto_rawDescGZIP(), []int{627} } type ListHostFirmwareResponse struct { @@ -41349,7 +42591,7 @@ type ListHostFirmwareResponse struct { func (x *ListHostFirmwareResponse) Reset() { *x = ListHostFirmwareResponse{} - mi := &file_forge_carbide_proto_msgTypes[616] + mi := &file_forge_carbide_proto_msgTypes[628] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41361,7 +42603,7 @@ func (x *ListHostFirmwareResponse) String() string { func (*ListHostFirmwareResponse) ProtoMessage() {} func (x *ListHostFirmwareResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[616] + mi := &file_forge_carbide_proto_msgTypes[628] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41374,7 +42616,7 @@ func (x *ListHostFirmwareResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListHostFirmwareResponse.ProtoReflect.Descriptor instead. func (*ListHostFirmwareResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{616} + return file_forge_carbide_proto_rawDescGZIP(), []int{628} } func (x *ListHostFirmwareResponse) GetAvailable() []*AvailableHostFirmware { @@ -41398,7 +42640,7 @@ type AvailableHostFirmware struct { func (x *AvailableHostFirmware) Reset() { *x = AvailableHostFirmware{} - mi := &file_forge_carbide_proto_msgTypes[617] + mi := &file_forge_carbide_proto_msgTypes[629] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41410,7 +42652,7 @@ func (x *AvailableHostFirmware) String() string { func (*AvailableHostFirmware) ProtoMessage() {} func (x *AvailableHostFirmware) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[617] + mi := &file_forge_carbide_proto_msgTypes[629] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41423,7 +42665,7 @@ func (x *AvailableHostFirmware) ProtoReflect() protoreflect.Message { // Deprecated: Use AvailableHostFirmware.ProtoReflect.Descriptor instead. func (*AvailableHostFirmware) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{617} + return file_forge_carbide_proto_rawDescGZIP(), []int{629} } func (x *AvailableHostFirmware) GetVendor() string { @@ -41478,7 +42720,7 @@ type TrimTableRequest struct { func (x *TrimTableRequest) Reset() { *x = TrimTableRequest{} - mi := &file_forge_carbide_proto_msgTypes[618] + mi := &file_forge_carbide_proto_msgTypes[630] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41490,7 +42732,7 @@ func (x *TrimTableRequest) String() string { func (*TrimTableRequest) ProtoMessage() {} func (x *TrimTableRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[618] + mi := &file_forge_carbide_proto_msgTypes[630] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41503,7 +42745,7 @@ func (x *TrimTableRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TrimTableRequest.ProtoReflect.Descriptor instead. func (*TrimTableRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{618} + return file_forge_carbide_proto_rawDescGZIP(), []int{630} } func (x *TrimTableRequest) GetTarget() TrimTableTarget { @@ -41529,7 +42771,7 @@ type TrimTableResponse struct { func (x *TrimTableResponse) Reset() { *x = TrimTableResponse{} - mi := &file_forge_carbide_proto_msgTypes[619] + mi := &file_forge_carbide_proto_msgTypes[631] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41541,7 +42783,7 @@ func (x *TrimTableResponse) String() string { func (*TrimTableResponse) ProtoMessage() {} func (x *TrimTableResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[619] + mi := &file_forge_carbide_proto_msgTypes[631] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41554,7 +42796,7 @@ func (x *TrimTableResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TrimTableResponse.ProtoReflect.Descriptor instead. func (*TrimTableResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{619} + return file_forge_carbide_proto_rawDescGZIP(), []int{631} } func (x *TrimTableResponse) GetTotalDeleted() string { @@ -41576,7 +42818,7 @@ type CreateRemediationRequest struct { func (x *CreateRemediationRequest) Reset() { *x = CreateRemediationRequest{} - mi := &file_forge_carbide_proto_msgTypes[620] + mi := &file_forge_carbide_proto_msgTypes[632] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41588,7 +42830,7 @@ func (x *CreateRemediationRequest) String() string { func (*CreateRemediationRequest) ProtoMessage() {} func (x *CreateRemediationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[620] + mi := &file_forge_carbide_proto_msgTypes[632] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41601,7 +42843,7 @@ func (x *CreateRemediationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRemediationRequest.ProtoReflect.Descriptor instead. func (*CreateRemediationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{620} + return file_forge_carbide_proto_rawDescGZIP(), []int{632} } func (x *CreateRemediationRequest) GetScript() string { @@ -41634,7 +42876,7 @@ type CreateRemediationResponse struct { func (x *CreateRemediationResponse) Reset() { *x = CreateRemediationResponse{} - mi := &file_forge_carbide_proto_msgTypes[621] + mi := &file_forge_carbide_proto_msgTypes[633] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41646,7 +42888,7 @@ func (x *CreateRemediationResponse) String() string { func (*CreateRemediationResponse) ProtoMessage() {} func (x *CreateRemediationResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[621] + mi := &file_forge_carbide_proto_msgTypes[633] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41659,7 +42901,7 @@ func (x *CreateRemediationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRemediationResponse.ProtoReflect.Descriptor instead. func (*CreateRemediationResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{621} + return file_forge_carbide_proto_rawDescGZIP(), []int{633} } func (x *CreateRemediationResponse) GetRemediationId() *RemediationId { @@ -41678,7 +42920,7 @@ type RemediationIdList struct { func (x *RemediationIdList) Reset() { *x = RemediationIdList{} - mi := &file_forge_carbide_proto_msgTypes[622] + mi := &file_forge_carbide_proto_msgTypes[634] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41690,7 +42932,7 @@ func (x *RemediationIdList) String() string { func (*RemediationIdList) ProtoMessage() {} func (x *RemediationIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[622] + mi := &file_forge_carbide_proto_msgTypes[634] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41703,7 +42945,7 @@ func (x *RemediationIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use RemediationIdList.ProtoReflect.Descriptor instead. func (*RemediationIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{622} + return file_forge_carbide_proto_rawDescGZIP(), []int{634} } func (x *RemediationIdList) GetRemediationIds() []*RemediationId { @@ -41722,7 +42964,7 @@ type RemediationList struct { func (x *RemediationList) Reset() { *x = RemediationList{} - mi := &file_forge_carbide_proto_msgTypes[623] + mi := &file_forge_carbide_proto_msgTypes[635] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41734,7 +42976,7 @@ func (x *RemediationList) String() string { func (*RemediationList) ProtoMessage() {} func (x *RemediationList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[623] + mi := &file_forge_carbide_proto_msgTypes[635] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41747,7 +42989,7 @@ func (x *RemediationList) ProtoReflect() protoreflect.Message { // Deprecated: Use RemediationList.ProtoReflect.Descriptor instead. func (*RemediationList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{623} + return file_forge_carbide_proto_rawDescGZIP(), []int{635} } func (x *RemediationList) GetRemediations() []*Remediation { @@ -41773,7 +43015,7 @@ type Remediation struct { func (x *Remediation) Reset() { *x = Remediation{} - mi := &file_forge_carbide_proto_msgTypes[624] + mi := &file_forge_carbide_proto_msgTypes[636] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41785,7 +43027,7 @@ func (x *Remediation) String() string { func (*Remediation) ProtoMessage() {} func (x *Remediation) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[624] + mi := &file_forge_carbide_proto_msgTypes[636] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41798,7 +43040,7 @@ func (x *Remediation) ProtoReflect() protoreflect.Message { // Deprecated: Use Remediation.ProtoReflect.Descriptor instead. func (*Remediation) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{624} + return file_forge_carbide_proto_rawDescGZIP(), []int{636} } func (x *Remediation) GetId() *RemediationId { @@ -41866,7 +43108,7 @@ type ApproveRemediationRequest struct { func (x *ApproveRemediationRequest) Reset() { *x = ApproveRemediationRequest{} - mi := &file_forge_carbide_proto_msgTypes[625] + mi := &file_forge_carbide_proto_msgTypes[637] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41878,7 +43120,7 @@ func (x *ApproveRemediationRequest) String() string { func (*ApproveRemediationRequest) ProtoMessage() {} func (x *ApproveRemediationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[625] + mi := &file_forge_carbide_proto_msgTypes[637] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41891,7 +43133,7 @@ func (x *ApproveRemediationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApproveRemediationRequest.ProtoReflect.Descriptor instead. func (*ApproveRemediationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{625} + return file_forge_carbide_proto_rawDescGZIP(), []int{637} } func (x *ApproveRemediationRequest) GetRemediationId() *RemediationId { @@ -41910,7 +43152,7 @@ type RevokeRemediationRequest struct { func (x *RevokeRemediationRequest) Reset() { *x = RevokeRemediationRequest{} - mi := &file_forge_carbide_proto_msgTypes[626] + mi := &file_forge_carbide_proto_msgTypes[638] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41922,7 +43164,7 @@ func (x *RevokeRemediationRequest) String() string { func (*RevokeRemediationRequest) ProtoMessage() {} func (x *RevokeRemediationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[626] + mi := &file_forge_carbide_proto_msgTypes[638] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41935,7 +43177,7 @@ func (x *RevokeRemediationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeRemediationRequest.ProtoReflect.Descriptor instead. func (*RevokeRemediationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{626} + return file_forge_carbide_proto_rawDescGZIP(), []int{638} } func (x *RevokeRemediationRequest) GetRemediationId() *RemediationId { @@ -41954,7 +43196,7 @@ type EnableRemediationRequest struct { func (x *EnableRemediationRequest) Reset() { *x = EnableRemediationRequest{} - mi := &file_forge_carbide_proto_msgTypes[627] + mi := &file_forge_carbide_proto_msgTypes[639] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -41966,7 +43208,7 @@ func (x *EnableRemediationRequest) String() string { func (*EnableRemediationRequest) ProtoMessage() {} func (x *EnableRemediationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[627] + mi := &file_forge_carbide_proto_msgTypes[639] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -41979,7 +43221,7 @@ func (x *EnableRemediationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EnableRemediationRequest.ProtoReflect.Descriptor instead. func (*EnableRemediationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{627} + return file_forge_carbide_proto_rawDescGZIP(), []int{639} } func (x *EnableRemediationRequest) GetRemediationId() *RemediationId { @@ -41998,7 +43240,7 @@ type DisableRemediationRequest struct { func (x *DisableRemediationRequest) Reset() { *x = DisableRemediationRequest{} - mi := &file_forge_carbide_proto_msgTypes[628] + mi := &file_forge_carbide_proto_msgTypes[640] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42010,7 +43252,7 @@ func (x *DisableRemediationRequest) String() string { func (*DisableRemediationRequest) ProtoMessage() {} func (x *DisableRemediationRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[628] + mi := &file_forge_carbide_proto_msgTypes[640] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42023,7 +43265,7 @@ func (x *DisableRemediationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DisableRemediationRequest.ProtoReflect.Descriptor instead. func (*DisableRemediationRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{628} + return file_forge_carbide_proto_rawDescGZIP(), []int{640} } func (x *DisableRemediationRequest) GetRemediationId() *RemediationId { @@ -42045,7 +43287,7 @@ type FindAppliedRemediationIdsRequest struct { func (x *FindAppliedRemediationIdsRequest) Reset() { *x = FindAppliedRemediationIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[629] + mi := &file_forge_carbide_proto_msgTypes[641] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42057,7 +43299,7 @@ func (x *FindAppliedRemediationIdsRequest) String() string { func (*FindAppliedRemediationIdsRequest) ProtoMessage() {} func (x *FindAppliedRemediationIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[629] + mi := &file_forge_carbide_proto_msgTypes[641] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42070,7 +43312,7 @@ func (x *FindAppliedRemediationIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindAppliedRemediationIdsRequest.ProtoReflect.Descriptor instead. func (*FindAppliedRemediationIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{629} + return file_forge_carbide_proto_rawDescGZIP(), []int{641} } func (x *FindAppliedRemediationIdsRequest) GetRemediationId() *RemediationId { @@ -42097,7 +43339,7 @@ type AppliedRemediationIdList struct { func (x *AppliedRemediationIdList) Reset() { *x = AppliedRemediationIdList{} - mi := &file_forge_carbide_proto_msgTypes[630] + mi := &file_forge_carbide_proto_msgTypes[642] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42109,7 +43351,7 @@ func (x *AppliedRemediationIdList) String() string { func (*AppliedRemediationIdList) ProtoMessage() {} func (x *AppliedRemediationIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[630] + mi := &file_forge_carbide_proto_msgTypes[642] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42122,7 +43364,7 @@ func (x *AppliedRemediationIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use AppliedRemediationIdList.ProtoReflect.Descriptor instead. func (*AppliedRemediationIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{630} + return file_forge_carbide_proto_rawDescGZIP(), []int{642} } func (x *AppliedRemediationIdList) GetRemediationIds() []*RemediationId { @@ -42149,7 +43391,7 @@ type FindAppliedRemediationsRequest struct { func (x *FindAppliedRemediationsRequest) Reset() { *x = FindAppliedRemediationsRequest{} - mi := &file_forge_carbide_proto_msgTypes[631] + mi := &file_forge_carbide_proto_msgTypes[643] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42161,7 +43403,7 @@ func (x *FindAppliedRemediationsRequest) String() string { func (*FindAppliedRemediationsRequest) ProtoMessage() {} func (x *FindAppliedRemediationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[631] + mi := &file_forge_carbide_proto_msgTypes[643] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42174,7 +43416,7 @@ func (x *FindAppliedRemediationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FindAppliedRemediationsRequest.ProtoReflect.Descriptor instead. func (*FindAppliedRemediationsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{631} + return file_forge_carbide_proto_rawDescGZIP(), []int{643} } func (x *FindAppliedRemediationsRequest) GetRemediationId() *RemediationId { @@ -42205,7 +43447,7 @@ type AppliedRemediation struct { func (x *AppliedRemediation) Reset() { *x = AppliedRemediation{} - mi := &file_forge_carbide_proto_msgTypes[632] + mi := &file_forge_carbide_proto_msgTypes[644] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42217,7 +43459,7 @@ func (x *AppliedRemediation) String() string { func (*AppliedRemediation) ProtoMessage() {} func (x *AppliedRemediation) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[632] + mi := &file_forge_carbide_proto_msgTypes[644] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42230,7 +43472,7 @@ func (x *AppliedRemediation) ProtoReflect() protoreflect.Message { // Deprecated: Use AppliedRemediation.ProtoReflect.Descriptor instead. func (*AppliedRemediation) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{632} + return file_forge_carbide_proto_rawDescGZIP(), []int{644} } func (x *AppliedRemediation) GetRemediationId() *RemediationId { @@ -42284,7 +43526,7 @@ type AppliedRemediationList struct { func (x *AppliedRemediationList) Reset() { *x = AppliedRemediationList{} - mi := &file_forge_carbide_proto_msgTypes[633] + mi := &file_forge_carbide_proto_msgTypes[645] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42296,7 +43538,7 @@ func (x *AppliedRemediationList) String() string { func (*AppliedRemediationList) ProtoMessage() {} func (x *AppliedRemediationList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[633] + mi := &file_forge_carbide_proto_msgTypes[645] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42309,7 +43551,7 @@ func (x *AppliedRemediationList) ProtoReflect() protoreflect.Message { // Deprecated: Use AppliedRemediationList.ProtoReflect.Descriptor instead. func (*AppliedRemediationList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{633} + return file_forge_carbide_proto_rawDescGZIP(), []int{645} } func (x *AppliedRemediationList) GetAppliedRemediations() []*AppliedRemediation { @@ -42328,7 +43570,7 @@ type GetNextRemediationForMachineRequest struct { func (x *GetNextRemediationForMachineRequest) Reset() { *x = GetNextRemediationForMachineRequest{} - mi := &file_forge_carbide_proto_msgTypes[634] + mi := &file_forge_carbide_proto_msgTypes[646] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42340,7 +43582,7 @@ func (x *GetNextRemediationForMachineRequest) String() string { func (*GetNextRemediationForMachineRequest) ProtoMessage() {} func (x *GetNextRemediationForMachineRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[634] + mi := &file_forge_carbide_proto_msgTypes[646] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42353,7 +43595,7 @@ func (x *GetNextRemediationForMachineRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use GetNextRemediationForMachineRequest.ProtoReflect.Descriptor instead. func (*GetNextRemediationForMachineRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{634} + return file_forge_carbide_proto_rawDescGZIP(), []int{646} } func (x *GetNextRemediationForMachineRequest) GetDpuMachineId() *MachineId { @@ -42373,7 +43615,7 @@ type GetNextRemediationForMachineResponse struct { func (x *GetNextRemediationForMachineResponse) Reset() { *x = GetNextRemediationForMachineResponse{} - mi := &file_forge_carbide_proto_msgTypes[635] + mi := &file_forge_carbide_proto_msgTypes[647] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42385,7 +43627,7 @@ func (x *GetNextRemediationForMachineResponse) String() string { func (*GetNextRemediationForMachineResponse) ProtoMessage() {} func (x *GetNextRemediationForMachineResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[635] + mi := &file_forge_carbide_proto_msgTypes[647] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42398,7 +43640,7 @@ func (x *GetNextRemediationForMachineResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use GetNextRemediationForMachineResponse.ProtoReflect.Descriptor instead. func (*GetNextRemediationForMachineResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{635} + return file_forge_carbide_proto_rawDescGZIP(), []int{647} } func (x *GetNextRemediationForMachineResponse) GetRemediationId() *RemediationId { @@ -42426,7 +43668,7 @@ type RemediationAppliedRequest struct { func (x *RemediationAppliedRequest) Reset() { *x = RemediationAppliedRequest{} - mi := &file_forge_carbide_proto_msgTypes[636] + mi := &file_forge_carbide_proto_msgTypes[648] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42438,7 +43680,7 @@ func (x *RemediationAppliedRequest) String() string { func (*RemediationAppliedRequest) ProtoMessage() {} func (x *RemediationAppliedRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[636] + mi := &file_forge_carbide_proto_msgTypes[648] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42451,7 +43693,7 @@ func (x *RemediationAppliedRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemediationAppliedRequest.ProtoReflect.Descriptor instead. func (*RemediationAppliedRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{636} + return file_forge_carbide_proto_rawDescGZIP(), []int{648} } func (x *RemediationAppliedRequest) GetRemediationId() *RemediationId { @@ -42485,7 +43727,7 @@ type RemediationApplicationStatus struct { func (x *RemediationApplicationStatus) Reset() { *x = RemediationApplicationStatus{} - mi := &file_forge_carbide_proto_msgTypes[637] + mi := &file_forge_carbide_proto_msgTypes[649] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42497,7 +43739,7 @@ func (x *RemediationApplicationStatus) String() string { func (*RemediationApplicationStatus) ProtoMessage() {} func (x *RemediationApplicationStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[637] + mi := &file_forge_carbide_proto_msgTypes[649] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42510,7 +43752,7 @@ func (x *RemediationApplicationStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use RemediationApplicationStatus.ProtoReflect.Descriptor instead. func (*RemediationApplicationStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{637} + return file_forge_carbide_proto_rawDescGZIP(), []int{649} } func (x *RemediationApplicationStatus) GetSucceeded() bool { @@ -42538,7 +43780,7 @@ type SetPrimaryDpuRequest struct { func (x *SetPrimaryDpuRequest) Reset() { *x = SetPrimaryDpuRequest{} - mi := &file_forge_carbide_proto_msgTypes[638] + mi := &file_forge_carbide_proto_msgTypes[650] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42550,7 +43792,7 @@ func (x *SetPrimaryDpuRequest) String() string { func (*SetPrimaryDpuRequest) ProtoMessage() {} func (x *SetPrimaryDpuRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[638] + mi := &file_forge_carbide_proto_msgTypes[650] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42563,7 +43805,7 @@ func (x *SetPrimaryDpuRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetPrimaryDpuRequest.ProtoReflect.Descriptor instead. func (*SetPrimaryDpuRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{638} + return file_forge_carbide_proto_rawDescGZIP(), []int{650} } func (x *SetPrimaryDpuRequest) GetHostMachineId() *MachineId { @@ -42597,7 +43839,7 @@ type UsernamePassword struct { func (x *UsernamePassword) Reset() { *x = UsernamePassword{} - mi := &file_forge_carbide_proto_msgTypes[639] + mi := &file_forge_carbide_proto_msgTypes[651] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42609,7 +43851,7 @@ func (x *UsernamePassword) String() string { func (*UsernamePassword) ProtoMessage() {} func (x *UsernamePassword) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[639] + mi := &file_forge_carbide_proto_msgTypes[651] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42622,7 +43864,7 @@ func (x *UsernamePassword) ProtoReflect() protoreflect.Message { // Deprecated: Use UsernamePassword.ProtoReflect.Descriptor instead. func (*UsernamePassword) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{639} + return file_forge_carbide_proto_rawDescGZIP(), []int{651} } func (x *UsernamePassword) GetUsername() string { @@ -42648,7 +43890,7 @@ type SessionToken struct { func (x *SessionToken) Reset() { *x = SessionToken{} - mi := &file_forge_carbide_proto_msgTypes[640] + mi := &file_forge_carbide_proto_msgTypes[652] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42660,7 +43902,7 @@ func (x *SessionToken) String() string { func (*SessionToken) ProtoMessage() {} func (x *SessionToken) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[640] + mi := &file_forge_carbide_proto_msgTypes[652] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42673,7 +43915,7 @@ func (x *SessionToken) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionToken.ProtoReflect.Descriptor instead. func (*SessionToken) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{640} + return file_forge_carbide_proto_rawDescGZIP(), []int{652} } func (x *SessionToken) GetToken() string { @@ -42696,7 +43938,7 @@ type DpuExtensionServiceCredential struct { func (x *DpuExtensionServiceCredential) Reset() { *x = DpuExtensionServiceCredential{} - mi := &file_forge_carbide_proto_msgTypes[641] + mi := &file_forge_carbide_proto_msgTypes[653] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42708,7 +43950,7 @@ func (x *DpuExtensionServiceCredential) String() string { func (*DpuExtensionServiceCredential) ProtoMessage() {} func (x *DpuExtensionServiceCredential) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[641] + mi := &file_forge_carbide_proto_msgTypes[653] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42721,7 +43963,7 @@ func (x *DpuExtensionServiceCredential) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionServiceCredential.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceCredential) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{641} + return file_forge_carbide_proto_rawDescGZIP(), []int{653} } func (x *DpuExtensionServiceCredential) GetRegistryUrl() string { @@ -42770,7 +44012,7 @@ type DpuExtensionServiceVersionInfo struct { func (x *DpuExtensionServiceVersionInfo) Reset() { *x = DpuExtensionServiceVersionInfo{} - mi := &file_forge_carbide_proto_msgTypes[642] + mi := &file_forge_carbide_proto_msgTypes[654] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42782,7 +44024,7 @@ func (x *DpuExtensionServiceVersionInfo) String() string { func (*DpuExtensionServiceVersionInfo) ProtoMessage() {} func (x *DpuExtensionServiceVersionInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[642] + mi := &file_forge_carbide_proto_msgTypes[654] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42795,7 +44037,7 @@ func (x *DpuExtensionServiceVersionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionServiceVersionInfo.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceVersionInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{642} + return file_forge_carbide_proto_rawDescGZIP(), []int{654} } func (x *DpuExtensionServiceVersionInfo) GetVersion() string { @@ -42856,7 +44098,7 @@ type DpuExtensionService struct { func (x *DpuExtensionService) Reset() { *x = DpuExtensionService{} - mi := &file_forge_carbide_proto_msgTypes[643] + mi := &file_forge_carbide_proto_msgTypes[655] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42868,7 +44110,7 @@ func (x *DpuExtensionService) String() string { func (*DpuExtensionService) ProtoMessage() {} func (x *DpuExtensionService) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[643] + mi := &file_forge_carbide_proto_msgTypes[655] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42881,7 +44123,7 @@ func (x *DpuExtensionService) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionService.ProtoReflect.Descriptor instead. func (*DpuExtensionService) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{643} + return file_forge_carbide_proto_rawDescGZIP(), []int{655} } func (x *DpuExtensionService) GetServiceId() string { @@ -42974,7 +44216,7 @@ type CreateDpuExtensionServiceRequest struct { func (x *CreateDpuExtensionServiceRequest) Reset() { *x = CreateDpuExtensionServiceRequest{} - mi := &file_forge_carbide_proto_msgTypes[644] + mi := &file_forge_carbide_proto_msgTypes[656] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -42986,7 +44228,7 @@ func (x *CreateDpuExtensionServiceRequest) String() string { func (*CreateDpuExtensionServiceRequest) ProtoMessage() {} func (x *CreateDpuExtensionServiceRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[644] + mi := &file_forge_carbide_proto_msgTypes[656] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -42999,7 +44241,7 @@ func (x *CreateDpuExtensionServiceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateDpuExtensionServiceRequest.ProtoReflect.Descriptor instead. func (*CreateDpuExtensionServiceRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{644} + return file_forge_carbide_proto_rawDescGZIP(), []int{656} } func (x *CreateDpuExtensionServiceRequest) GetServiceId() string { @@ -43081,7 +44323,7 @@ type UpdateDpuExtensionServiceRequest struct { func (x *UpdateDpuExtensionServiceRequest) Reset() { *x = UpdateDpuExtensionServiceRequest{} - mi := &file_forge_carbide_proto_msgTypes[645] + mi := &file_forge_carbide_proto_msgTypes[657] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43093,7 +44335,7 @@ func (x *UpdateDpuExtensionServiceRequest) String() string { func (*UpdateDpuExtensionServiceRequest) ProtoMessage() {} func (x *UpdateDpuExtensionServiceRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[645] + mi := &file_forge_carbide_proto_msgTypes[657] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43106,7 +44348,7 @@ func (x *UpdateDpuExtensionServiceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDpuExtensionServiceRequest.ProtoReflect.Descriptor instead. func (*UpdateDpuExtensionServiceRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{645} + return file_forge_carbide_proto_rawDescGZIP(), []int{657} } func (x *UpdateDpuExtensionServiceRequest) GetServiceId() string { @@ -43171,7 +44413,7 @@ type DeleteDpuExtensionServiceRequest struct { func (x *DeleteDpuExtensionServiceRequest) Reset() { *x = DeleteDpuExtensionServiceRequest{} - mi := &file_forge_carbide_proto_msgTypes[646] + mi := &file_forge_carbide_proto_msgTypes[658] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43183,7 +44425,7 @@ func (x *DeleteDpuExtensionServiceRequest) String() string { func (*DeleteDpuExtensionServiceRequest) ProtoMessage() {} func (x *DeleteDpuExtensionServiceRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[646] + mi := &file_forge_carbide_proto_msgTypes[658] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43196,7 +44438,7 @@ func (x *DeleteDpuExtensionServiceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteDpuExtensionServiceRequest.ProtoReflect.Descriptor instead. func (*DeleteDpuExtensionServiceRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{646} + return file_forge_carbide_proto_rawDescGZIP(), []int{658} } func (x *DeleteDpuExtensionServiceRequest) GetServiceId() string { @@ -43221,7 +44463,7 @@ type DeleteDpuExtensionServiceResponse struct { func (x *DeleteDpuExtensionServiceResponse) Reset() { *x = DeleteDpuExtensionServiceResponse{} - mi := &file_forge_carbide_proto_msgTypes[647] + mi := &file_forge_carbide_proto_msgTypes[659] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43233,7 +44475,7 @@ func (x *DeleteDpuExtensionServiceResponse) String() string { func (*DeleteDpuExtensionServiceResponse) ProtoMessage() {} func (x *DeleteDpuExtensionServiceResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[647] + mi := &file_forge_carbide_proto_msgTypes[659] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43246,7 +44488,7 @@ func (x *DeleteDpuExtensionServiceResponse) ProtoReflect() protoreflect.Message // Deprecated: Use DeleteDpuExtensionServiceResponse.ProtoReflect.Descriptor instead. func (*DeleteDpuExtensionServiceResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{647} + return file_forge_carbide_proto_rawDescGZIP(), []int{659} } type DpuExtensionServiceSearchFilter struct { @@ -43260,7 +44502,7 @@ type DpuExtensionServiceSearchFilter struct { func (x *DpuExtensionServiceSearchFilter) Reset() { *x = DpuExtensionServiceSearchFilter{} - mi := &file_forge_carbide_proto_msgTypes[648] + mi := &file_forge_carbide_proto_msgTypes[660] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43272,7 +44514,7 @@ func (x *DpuExtensionServiceSearchFilter) String() string { func (*DpuExtensionServiceSearchFilter) ProtoMessage() {} func (x *DpuExtensionServiceSearchFilter) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[648] + mi := &file_forge_carbide_proto_msgTypes[660] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43285,7 +44527,7 @@ func (x *DpuExtensionServiceSearchFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionServiceSearchFilter.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceSearchFilter) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{648} + return file_forge_carbide_proto_rawDescGZIP(), []int{660} } func (x *DpuExtensionServiceSearchFilter) GetServiceType() DpuExtensionServiceType { @@ -43318,7 +44560,7 @@ type DpuExtensionServiceIdList struct { func (x *DpuExtensionServiceIdList) Reset() { *x = DpuExtensionServiceIdList{} - mi := &file_forge_carbide_proto_msgTypes[649] + mi := &file_forge_carbide_proto_msgTypes[661] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43330,7 +44572,7 @@ func (x *DpuExtensionServiceIdList) String() string { func (*DpuExtensionServiceIdList) ProtoMessage() {} func (x *DpuExtensionServiceIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[649] + mi := &file_forge_carbide_proto_msgTypes[661] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43343,7 +44585,7 @@ func (x *DpuExtensionServiceIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionServiceIdList.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{649} + return file_forge_carbide_proto_rawDescGZIP(), []int{661} } func (x *DpuExtensionServiceIdList) GetServiceIds() []string { @@ -43362,7 +44604,7 @@ type DpuExtensionServicesByIdsRequest struct { func (x *DpuExtensionServicesByIdsRequest) Reset() { *x = DpuExtensionServicesByIdsRequest{} - mi := &file_forge_carbide_proto_msgTypes[650] + mi := &file_forge_carbide_proto_msgTypes[662] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43374,7 +44616,7 @@ func (x *DpuExtensionServicesByIdsRequest) String() string { func (*DpuExtensionServicesByIdsRequest) ProtoMessage() {} func (x *DpuExtensionServicesByIdsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[650] + mi := &file_forge_carbide_proto_msgTypes[662] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43387,7 +44629,7 @@ func (x *DpuExtensionServicesByIdsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionServicesByIdsRequest.ProtoReflect.Descriptor instead. func (*DpuExtensionServicesByIdsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{650} + return file_forge_carbide_proto_rawDescGZIP(), []int{662} } func (x *DpuExtensionServicesByIdsRequest) GetServiceIds() []string { @@ -43406,7 +44648,7 @@ type DpuExtensionServiceList struct { func (x *DpuExtensionServiceList) Reset() { *x = DpuExtensionServiceList{} - mi := &file_forge_carbide_proto_msgTypes[651] + mi := &file_forge_carbide_proto_msgTypes[663] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43418,7 +44660,7 @@ func (x *DpuExtensionServiceList) String() string { func (*DpuExtensionServiceList) ProtoMessage() {} func (x *DpuExtensionServiceList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[651] + mi := &file_forge_carbide_proto_msgTypes[663] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43431,7 +44673,7 @@ func (x *DpuExtensionServiceList) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionServiceList.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{651} + return file_forge_carbide_proto_rawDescGZIP(), []int{663} } func (x *DpuExtensionServiceList) GetServices() []*DpuExtensionService { @@ -43452,7 +44694,7 @@ type GetDpuExtensionServiceVersionsInfoRequest struct { func (x *GetDpuExtensionServiceVersionsInfoRequest) Reset() { *x = GetDpuExtensionServiceVersionsInfoRequest{} - mi := &file_forge_carbide_proto_msgTypes[652] + mi := &file_forge_carbide_proto_msgTypes[664] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43464,7 +44706,7 @@ func (x *GetDpuExtensionServiceVersionsInfoRequest) String() string { func (*GetDpuExtensionServiceVersionsInfoRequest) ProtoMessage() {} func (x *GetDpuExtensionServiceVersionsInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[652] + mi := &file_forge_carbide_proto_msgTypes[664] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43477,7 +44719,7 @@ func (x *GetDpuExtensionServiceVersionsInfoRequest) ProtoReflect() protoreflect. // Deprecated: Use GetDpuExtensionServiceVersionsInfoRequest.ProtoReflect.Descriptor instead. func (*GetDpuExtensionServiceVersionsInfoRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{652} + return file_forge_carbide_proto_rawDescGZIP(), []int{664} } func (x *GetDpuExtensionServiceVersionsInfoRequest) GetServiceId() string { @@ -43503,7 +44745,7 @@ type DpuExtensionServiceVersionInfoList struct { func (x *DpuExtensionServiceVersionInfoList) Reset() { *x = DpuExtensionServiceVersionInfoList{} - mi := &file_forge_carbide_proto_msgTypes[653] + mi := &file_forge_carbide_proto_msgTypes[665] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43515,7 +44757,7 @@ func (x *DpuExtensionServiceVersionInfoList) String() string { func (*DpuExtensionServiceVersionInfoList) ProtoMessage() {} func (x *DpuExtensionServiceVersionInfoList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[653] + mi := &file_forge_carbide_proto_msgTypes[665] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43528,7 +44770,7 @@ func (x *DpuExtensionServiceVersionInfoList) ProtoReflect() protoreflect.Message // Deprecated: Use DpuExtensionServiceVersionInfoList.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceVersionInfoList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{653} + return file_forge_carbide_proto_rawDescGZIP(), []int{665} } func (x *DpuExtensionServiceVersionInfoList) GetVersionInfos() []*DpuExtensionServiceVersionInfo { @@ -43548,7 +44790,7 @@ type FindInstancesByDpuExtensionServiceRequest struct { func (x *FindInstancesByDpuExtensionServiceRequest) Reset() { *x = FindInstancesByDpuExtensionServiceRequest{} - mi := &file_forge_carbide_proto_msgTypes[654] + mi := &file_forge_carbide_proto_msgTypes[666] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43560,7 +44802,7 @@ func (x *FindInstancesByDpuExtensionServiceRequest) String() string { func (*FindInstancesByDpuExtensionServiceRequest) ProtoMessage() {} func (x *FindInstancesByDpuExtensionServiceRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[654] + mi := &file_forge_carbide_proto_msgTypes[666] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43573,7 +44815,7 @@ func (x *FindInstancesByDpuExtensionServiceRequest) ProtoReflect() protoreflect. // Deprecated: Use FindInstancesByDpuExtensionServiceRequest.ProtoReflect.Descriptor instead. func (*FindInstancesByDpuExtensionServiceRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{654} + return file_forge_carbide_proto_rawDescGZIP(), []int{666} } func (x *FindInstancesByDpuExtensionServiceRequest) GetServiceId() string { @@ -43599,7 +44841,7 @@ type FindInstancesByDpuExtensionServiceResponse struct { func (x *FindInstancesByDpuExtensionServiceResponse) Reset() { *x = FindInstancesByDpuExtensionServiceResponse{} - mi := &file_forge_carbide_proto_msgTypes[655] + mi := &file_forge_carbide_proto_msgTypes[667] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43611,7 +44853,7 @@ func (x *FindInstancesByDpuExtensionServiceResponse) String() string { func (*FindInstancesByDpuExtensionServiceResponse) ProtoMessage() {} func (x *FindInstancesByDpuExtensionServiceResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[655] + mi := &file_forge_carbide_proto_msgTypes[667] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43624,7 +44866,7 @@ func (x *FindInstancesByDpuExtensionServiceResponse) ProtoReflect() protoreflect // Deprecated: Use FindInstancesByDpuExtensionServiceResponse.ProtoReflect.Descriptor instead. func (*FindInstancesByDpuExtensionServiceResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{655} + return file_forge_carbide_proto_rawDescGZIP(), []int{667} } func (x *FindInstancesByDpuExtensionServiceResponse) GetInstances() []*InstanceDpuExtensionServiceInfo { @@ -43646,7 +44888,7 @@ type InstanceDpuExtensionServiceInfo struct { func (x *InstanceDpuExtensionServiceInfo) Reset() { *x = InstanceDpuExtensionServiceInfo{} - mi := &file_forge_carbide_proto_msgTypes[656] + mi := &file_forge_carbide_proto_msgTypes[668] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43658,7 +44900,7 @@ func (x *InstanceDpuExtensionServiceInfo) String() string { func (*InstanceDpuExtensionServiceInfo) ProtoMessage() {} func (x *InstanceDpuExtensionServiceInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[656] + mi := &file_forge_carbide_proto_msgTypes[668] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43671,7 +44913,7 @@ func (x *InstanceDpuExtensionServiceInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use InstanceDpuExtensionServiceInfo.ProtoReflect.Descriptor instead. func (*InstanceDpuExtensionServiceInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{656} + return file_forge_carbide_proto_rawDescGZIP(), []int{668} } func (x *InstanceDpuExtensionServiceInfo) GetInstanceId() string { @@ -43712,7 +44954,7 @@ type DpuExtensionServiceObservabilityConfigPrometheus struct { func (x *DpuExtensionServiceObservabilityConfigPrometheus) Reset() { *x = DpuExtensionServiceObservabilityConfigPrometheus{} - mi := &file_forge_carbide_proto_msgTypes[657] + mi := &file_forge_carbide_proto_msgTypes[669] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43724,7 +44966,7 @@ func (x *DpuExtensionServiceObservabilityConfigPrometheus) String() string { func (*DpuExtensionServiceObservabilityConfigPrometheus) ProtoMessage() {} func (x *DpuExtensionServiceObservabilityConfigPrometheus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[657] + mi := &file_forge_carbide_proto_msgTypes[669] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43737,7 +44979,7 @@ func (x *DpuExtensionServiceObservabilityConfigPrometheus) ProtoReflect() protor // Deprecated: Use DpuExtensionServiceObservabilityConfigPrometheus.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceObservabilityConfigPrometheus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{657} + return file_forge_carbide_proto_rawDescGZIP(), []int{669} } func (x *DpuExtensionServiceObservabilityConfigPrometheus) GetScrapeIntervalSeconds() uint32 { @@ -43763,7 +45005,7 @@ type DpuExtensionServiceObservabilityConfigLogging struct { func (x *DpuExtensionServiceObservabilityConfigLogging) Reset() { *x = DpuExtensionServiceObservabilityConfigLogging{} - mi := &file_forge_carbide_proto_msgTypes[658] + mi := &file_forge_carbide_proto_msgTypes[670] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43775,7 +45017,7 @@ func (x *DpuExtensionServiceObservabilityConfigLogging) String() string { func (*DpuExtensionServiceObservabilityConfigLogging) ProtoMessage() {} func (x *DpuExtensionServiceObservabilityConfigLogging) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[658] + mi := &file_forge_carbide_proto_msgTypes[670] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43788,7 +45030,7 @@ func (x *DpuExtensionServiceObservabilityConfigLogging) ProtoReflect() protorefl // Deprecated: Use DpuExtensionServiceObservabilityConfigLogging.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceObservabilityConfigLogging) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{658} + return file_forge_carbide_proto_rawDescGZIP(), []int{670} } func (x *DpuExtensionServiceObservabilityConfigLogging) GetPath() string { @@ -43815,7 +45057,7 @@ type DpuExtensionServiceObservabilityConfig struct { func (x *DpuExtensionServiceObservabilityConfig) Reset() { *x = DpuExtensionServiceObservabilityConfig{} - mi := &file_forge_carbide_proto_msgTypes[659] + mi := &file_forge_carbide_proto_msgTypes[671] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43827,7 +45069,7 @@ func (x *DpuExtensionServiceObservabilityConfig) String() string { func (*DpuExtensionServiceObservabilityConfig) ProtoMessage() {} func (x *DpuExtensionServiceObservabilityConfig) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[659] + mi := &file_forge_carbide_proto_msgTypes[671] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43840,7 +45082,7 @@ func (x *DpuExtensionServiceObservabilityConfig) ProtoReflect() protoreflect.Mes // Deprecated: Use DpuExtensionServiceObservabilityConfig.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceObservabilityConfig) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{659} + return file_forge_carbide_proto_rawDescGZIP(), []int{671} } func (x *DpuExtensionServiceObservabilityConfig) GetName() string { @@ -43902,7 +45144,7 @@ type DpuExtensionServiceObservability struct { func (x *DpuExtensionServiceObservability) Reset() { *x = DpuExtensionServiceObservability{} - mi := &file_forge_carbide_proto_msgTypes[660] + mi := &file_forge_carbide_proto_msgTypes[672] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43914,7 +45156,7 @@ func (x *DpuExtensionServiceObservability) String() string { func (*DpuExtensionServiceObservability) ProtoMessage() {} func (x *DpuExtensionServiceObservability) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[660] + mi := &file_forge_carbide_proto_msgTypes[672] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43927,7 +45169,7 @@ func (x *DpuExtensionServiceObservability) ProtoReflect() protoreflect.Message { // Deprecated: Use DpuExtensionServiceObservability.ProtoReflect.Descriptor instead. func (*DpuExtensionServiceObservability) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{660} + return file_forge_carbide_proto_rawDescGZIP(), []int{672} } func (x *DpuExtensionServiceObservability) GetConfigs() []*DpuExtensionServiceObservabilityConfig { @@ -43972,7 +45214,7 @@ type ScoutStreamApiBoundMessage struct { func (x *ScoutStreamApiBoundMessage) Reset() { *x = ScoutStreamApiBoundMessage{} - mi := &file_forge_carbide_proto_msgTypes[661] + mi := &file_forge_carbide_proto_msgTypes[673] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -43984,7 +45226,7 @@ func (x *ScoutStreamApiBoundMessage) String() string { func (*ScoutStreamApiBoundMessage) ProtoMessage() {} func (x *ScoutStreamApiBoundMessage) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[661] + mi := &file_forge_carbide_proto_msgTypes[673] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -43997,7 +45239,7 @@ func (x *ScoutStreamApiBoundMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamApiBoundMessage.ProtoReflect.Descriptor instead. func (*ScoutStreamApiBoundMessage) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{661} + return file_forge_carbide_proto_rawDescGZIP(), []int{673} } func (x *ScoutStreamApiBoundMessage) GetFlowUuid() *UUID { @@ -44267,7 +45509,7 @@ type ScoutStreamScoutBoundMessage struct { func (x *ScoutStreamScoutBoundMessage) Reset() { *x = ScoutStreamScoutBoundMessage{} - mi := &file_forge_carbide_proto_msgTypes[662] + mi := &file_forge_carbide_proto_msgTypes[674] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44279,7 +45521,7 @@ func (x *ScoutStreamScoutBoundMessage) String() string { func (*ScoutStreamScoutBoundMessage) ProtoMessage() {} func (x *ScoutStreamScoutBoundMessage) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[662] + mi := &file_forge_carbide_proto_msgTypes[674] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44292,7 +45534,7 @@ func (x *ScoutStreamScoutBoundMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamScoutBoundMessage.ProtoReflect.Descriptor instead. func (*ScoutStreamScoutBoundMessage) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{662} + return file_forge_carbide_proto_rawDescGZIP(), []int{674} } func (x *ScoutStreamScoutBoundMessage) GetFlowUuid() *UUID { @@ -44548,7 +45790,7 @@ type ScoutStreamInitRequest struct { func (x *ScoutStreamInitRequest) Reset() { *x = ScoutStreamInitRequest{} - mi := &file_forge_carbide_proto_msgTypes[663] + mi := &file_forge_carbide_proto_msgTypes[675] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44560,7 +45802,7 @@ func (x *ScoutStreamInitRequest) String() string { func (*ScoutStreamInitRequest) ProtoMessage() {} func (x *ScoutStreamInitRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[663] + mi := &file_forge_carbide_proto_msgTypes[675] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44573,7 +45815,7 @@ func (x *ScoutStreamInitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamInitRequest.ProtoReflect.Descriptor instead. func (*ScoutStreamInitRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{663} + return file_forge_carbide_proto_rawDescGZIP(), []int{675} } func (x *ScoutStreamInitRequest) GetMachineId() *MachineId { @@ -44593,7 +45835,7 @@ type ScoutStreamShowConnectionsRequest struct { func (x *ScoutStreamShowConnectionsRequest) Reset() { *x = ScoutStreamShowConnectionsRequest{} - mi := &file_forge_carbide_proto_msgTypes[664] + mi := &file_forge_carbide_proto_msgTypes[676] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44605,7 +45847,7 @@ func (x *ScoutStreamShowConnectionsRequest) String() string { func (*ScoutStreamShowConnectionsRequest) ProtoMessage() {} func (x *ScoutStreamShowConnectionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[664] + mi := &file_forge_carbide_proto_msgTypes[676] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44618,7 +45860,7 @@ func (x *ScoutStreamShowConnectionsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use ScoutStreamShowConnectionsRequest.ProtoReflect.Descriptor instead. func (*ScoutStreamShowConnectionsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{664} + return file_forge_carbide_proto_rawDescGZIP(), []int{676} } // ShowConnectionsResponse is the response containing active @@ -44632,7 +45874,7 @@ type ScoutStreamShowConnectionsResponse struct { func (x *ScoutStreamShowConnectionsResponse) Reset() { *x = ScoutStreamShowConnectionsResponse{} - mi := &file_forge_carbide_proto_msgTypes[665] + mi := &file_forge_carbide_proto_msgTypes[677] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44644,7 +45886,7 @@ func (x *ScoutStreamShowConnectionsResponse) String() string { func (*ScoutStreamShowConnectionsResponse) ProtoMessage() {} func (x *ScoutStreamShowConnectionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[665] + mi := &file_forge_carbide_proto_msgTypes[677] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44657,7 +45899,7 @@ func (x *ScoutStreamShowConnectionsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ScoutStreamShowConnectionsResponse.ProtoReflect.Descriptor instead. func (*ScoutStreamShowConnectionsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{665} + return file_forge_carbide_proto_rawDescGZIP(), []int{677} } func (x *ScoutStreamShowConnectionsResponse) GetScoutStreamConnections() []*ScoutStreamConnectionInfo { @@ -44678,7 +45920,7 @@ type ScoutStreamDisconnectRequest struct { func (x *ScoutStreamDisconnectRequest) Reset() { *x = ScoutStreamDisconnectRequest{} - mi := &file_forge_carbide_proto_msgTypes[666] + mi := &file_forge_carbide_proto_msgTypes[678] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44690,7 +45932,7 @@ func (x *ScoutStreamDisconnectRequest) String() string { func (*ScoutStreamDisconnectRequest) ProtoMessage() {} func (x *ScoutStreamDisconnectRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[666] + mi := &file_forge_carbide_proto_msgTypes[678] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44703,7 +45945,7 @@ func (x *ScoutStreamDisconnectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamDisconnectRequest.ProtoReflect.Descriptor instead. func (*ScoutStreamDisconnectRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{666} + return file_forge_carbide_proto_rawDescGZIP(), []int{678} } func (x *ScoutStreamDisconnectRequest) GetMachineId() *MachineId { @@ -44725,7 +45967,7 @@ type ScoutStreamDisconnectResponse struct { func (x *ScoutStreamDisconnectResponse) Reset() { *x = ScoutStreamDisconnectResponse{} - mi := &file_forge_carbide_proto_msgTypes[667] + mi := &file_forge_carbide_proto_msgTypes[679] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44737,7 +45979,7 @@ func (x *ScoutStreamDisconnectResponse) String() string { func (*ScoutStreamDisconnectResponse) ProtoMessage() {} func (x *ScoutStreamDisconnectResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[667] + mi := &file_forge_carbide_proto_msgTypes[679] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44750,7 +45992,7 @@ func (x *ScoutStreamDisconnectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamDisconnectResponse.ProtoReflect.Descriptor instead. func (*ScoutStreamDisconnectResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{667} + return file_forge_carbide_proto_rawDescGZIP(), []int{679} } func (x *ScoutStreamDisconnectResponse) GetMachineId() *MachineId { @@ -44779,7 +46021,7 @@ type ScoutStreamAdminPingRequest struct { func (x *ScoutStreamAdminPingRequest) Reset() { *x = ScoutStreamAdminPingRequest{} - mi := &file_forge_carbide_proto_msgTypes[668] + mi := &file_forge_carbide_proto_msgTypes[680] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44791,7 +46033,7 @@ func (x *ScoutStreamAdminPingRequest) String() string { func (*ScoutStreamAdminPingRequest) ProtoMessage() {} func (x *ScoutStreamAdminPingRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[668] + mi := &file_forge_carbide_proto_msgTypes[680] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44804,7 +46046,7 @@ func (x *ScoutStreamAdminPingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamAdminPingRequest.ProtoReflect.Descriptor instead. func (*ScoutStreamAdminPingRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{668} + return file_forge_carbide_proto_rawDescGZIP(), []int{680} } func (x *ScoutStreamAdminPingRequest) GetMachineId() *MachineId { @@ -44825,7 +46067,7 @@ type ScoutStreamAdminPingResponse struct { func (x *ScoutStreamAdminPingResponse) Reset() { *x = ScoutStreamAdminPingResponse{} - mi := &file_forge_carbide_proto_msgTypes[669] + mi := &file_forge_carbide_proto_msgTypes[681] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44837,7 +46079,7 @@ func (x *ScoutStreamAdminPingResponse) String() string { func (*ScoutStreamAdminPingResponse) ProtoMessage() {} func (x *ScoutStreamAdminPingResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[669] + mi := &file_forge_carbide_proto_msgTypes[681] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44850,7 +46092,7 @@ func (x *ScoutStreamAdminPingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamAdminPingResponse.ProtoReflect.Descriptor instead. func (*ScoutStreamAdminPingResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{669} + return file_forge_carbide_proto_rawDescGZIP(), []int{681} } func (x *ScoutStreamAdminPingResponse) GetPong() string { @@ -44871,7 +46113,7 @@ type ScoutStreamAgentPingRequest struct { func (x *ScoutStreamAgentPingRequest) Reset() { *x = ScoutStreamAgentPingRequest{} - mi := &file_forge_carbide_proto_msgTypes[670] + mi := &file_forge_carbide_proto_msgTypes[682] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44883,7 +46125,7 @@ func (x *ScoutStreamAgentPingRequest) String() string { func (*ScoutStreamAgentPingRequest) ProtoMessage() {} func (x *ScoutStreamAgentPingRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[670] + mi := &file_forge_carbide_proto_msgTypes[682] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44896,7 +46138,7 @@ func (x *ScoutStreamAgentPingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamAgentPingRequest.ProtoReflect.Descriptor instead. func (*ScoutStreamAgentPingRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{670} + return file_forge_carbide_proto_rawDescGZIP(), []int{682} } // ScoutStreamAgentPingResponse is hopefully a response from @@ -44914,7 +46156,7 @@ type ScoutStreamAgentPingResponse struct { func (x *ScoutStreamAgentPingResponse) Reset() { *x = ScoutStreamAgentPingResponse{} - mi := &file_forge_carbide_proto_msgTypes[671] + mi := &file_forge_carbide_proto_msgTypes[683] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -44926,7 +46168,7 @@ func (x *ScoutStreamAgentPingResponse) String() string { func (*ScoutStreamAgentPingResponse) ProtoMessage() {} func (x *ScoutStreamAgentPingResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[671] + mi := &file_forge_carbide_proto_msgTypes[683] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -44939,7 +46181,7 @@ func (x *ScoutStreamAgentPingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamAgentPingResponse.ProtoReflect.Descriptor instead. func (*ScoutStreamAgentPingResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{671} + return file_forge_carbide_proto_rawDescGZIP(), []int{683} } func (x *ScoutStreamAgentPingResponse) GetReply() isScoutStreamAgentPingResponse_Reply { @@ -45000,7 +46242,7 @@ type ScoutStreamConnectionInfo struct { func (x *ScoutStreamConnectionInfo) Reset() { *x = ScoutStreamConnectionInfo{} - mi := &file_forge_carbide_proto_msgTypes[672] + mi := &file_forge_carbide_proto_msgTypes[684] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45012,7 +46254,7 @@ func (x *ScoutStreamConnectionInfo) String() string { func (*ScoutStreamConnectionInfo) ProtoMessage() {} func (x *ScoutStreamConnectionInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[672] + mi := &file_forge_carbide_proto_msgTypes[684] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45025,7 +46267,7 @@ func (x *ScoutStreamConnectionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamConnectionInfo.ProtoReflect.Descriptor instead. func (*ScoutStreamConnectionInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{672} + return file_forge_carbide_proto_rawDescGZIP(), []int{684} } func (x *ScoutStreamConnectionInfo) GetMachineId() *MachineId { @@ -45062,7 +46304,7 @@ type ScoutStreamError struct { func (x *ScoutStreamError) Reset() { *x = ScoutStreamError{} - mi := &file_forge_carbide_proto_msgTypes[673] + mi := &file_forge_carbide_proto_msgTypes[685] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45074,7 +46316,7 @@ func (x *ScoutStreamError) String() string { func (*ScoutStreamError) ProtoMessage() {} func (x *ScoutStreamError) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[673] + mi := &file_forge_carbide_proto_msgTypes[685] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45087,7 +46329,7 @@ func (x *ScoutStreamError) ProtoReflect() protoreflect.Message { // Deprecated: Use ScoutStreamError.ProtoReflect.Descriptor instead. func (*ScoutStreamError) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{673} + return file_forge_carbide_proto_rawDescGZIP(), []int{685} } func (x *ScoutStreamError) GetStatus() ScoutStreamErrorStatus { @@ -45119,7 +46361,7 @@ type RoutingProfile struct { func (x *RoutingProfile) Reset() { *x = RoutingProfile{} - mi := &file_forge_carbide_proto_msgTypes[674] + mi := &file_forge_carbide_proto_msgTypes[686] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45131,7 +46373,7 @@ func (x *RoutingProfile) String() string { func (*RoutingProfile) ProtoMessage() {} func (x *RoutingProfile) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[674] + mi := &file_forge_carbide_proto_msgTypes[686] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45144,7 +46386,7 @@ func (x *RoutingProfile) ProtoReflect() protoreflect.Message { // Deprecated: Use RoutingProfile.ProtoReflect.Descriptor instead. func (*RoutingProfile) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{674} + return file_forge_carbide_proto_rawDescGZIP(), []int{686} } func (x *RoutingProfile) GetRouteTargetImports() []*RouteTarget { @@ -45196,7 +46438,7 @@ type DomainLegacy struct { func (x *DomainLegacy) Reset() { *x = DomainLegacy{} - mi := &file_forge_carbide_proto_msgTypes[675] + mi := &file_forge_carbide_proto_msgTypes[687] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45208,7 +46450,7 @@ func (x *DomainLegacy) String() string { func (*DomainLegacy) ProtoMessage() {} func (x *DomainLegacy) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[675] + mi := &file_forge_carbide_proto_msgTypes[687] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45221,7 +46463,7 @@ func (x *DomainLegacy) ProtoReflect() protoreflect.Message { // Deprecated: Use DomainLegacy.ProtoReflect.Descriptor instead. func (*DomainLegacy) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{675} + return file_forge_carbide_proto_rawDescGZIP(), []int{687} } func (x *DomainLegacy) GetId() *DomainId { @@ -45269,7 +46511,7 @@ type DomainListLegacy struct { func (x *DomainListLegacy) Reset() { *x = DomainListLegacy{} - mi := &file_forge_carbide_proto_msgTypes[676] + mi := &file_forge_carbide_proto_msgTypes[688] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45281,7 +46523,7 @@ func (x *DomainListLegacy) String() string { func (*DomainListLegacy) ProtoMessage() {} func (x *DomainListLegacy) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[676] + mi := &file_forge_carbide_proto_msgTypes[688] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45294,7 +46536,7 @@ func (x *DomainListLegacy) ProtoReflect() protoreflect.Message { // Deprecated: Use DomainListLegacy.ProtoReflect.Descriptor instead. func (*DomainListLegacy) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{676} + return file_forge_carbide_proto_rawDescGZIP(), []int{688} } func (x *DomainListLegacy) GetDomains() []*DomainLegacy { @@ -45314,7 +46556,7 @@ type DomainDeletionLegacy struct { func (x *DomainDeletionLegacy) Reset() { *x = DomainDeletionLegacy{} - mi := &file_forge_carbide_proto_msgTypes[677] + mi := &file_forge_carbide_proto_msgTypes[689] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45326,7 +46568,7 @@ func (x *DomainDeletionLegacy) String() string { func (*DomainDeletionLegacy) ProtoMessage() {} func (x *DomainDeletionLegacy) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[677] + mi := &file_forge_carbide_proto_msgTypes[689] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45339,7 +46581,7 @@ func (x *DomainDeletionLegacy) ProtoReflect() protoreflect.Message { // Deprecated: Use DomainDeletionLegacy.ProtoReflect.Descriptor instead. func (*DomainDeletionLegacy) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{677} + return file_forge_carbide_proto_rawDescGZIP(), []int{689} } func (x *DomainDeletionLegacy) GetId() *DomainId { @@ -45358,7 +46600,7 @@ type DomainDeletionResultLegacy struct { func (x *DomainDeletionResultLegacy) Reset() { *x = DomainDeletionResultLegacy{} - mi := &file_forge_carbide_proto_msgTypes[678] + mi := &file_forge_carbide_proto_msgTypes[690] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45370,7 +46612,7 @@ func (x *DomainDeletionResultLegacy) String() string { func (*DomainDeletionResultLegacy) ProtoMessage() {} func (x *DomainDeletionResultLegacy) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[678] + mi := &file_forge_carbide_proto_msgTypes[690] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45383,7 +46625,7 @@ func (x *DomainDeletionResultLegacy) ProtoReflect() protoreflect.Message { // Deprecated: Use DomainDeletionResultLegacy.ProtoReflect.Descriptor instead. func (*DomainDeletionResultLegacy) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{678} + return file_forge_carbide_proto_rawDescGZIP(), []int{690} } // DEPRECATED: Use dns.DomainSearchQuery instead @@ -45397,7 +46639,7 @@ type DomainSearchQueryLegacy struct { func (x *DomainSearchQueryLegacy) Reset() { *x = DomainSearchQueryLegacy{} - mi := &file_forge_carbide_proto_msgTypes[679] + mi := &file_forge_carbide_proto_msgTypes[691] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45409,7 +46651,7 @@ func (x *DomainSearchQueryLegacy) String() string { func (*DomainSearchQueryLegacy) ProtoMessage() {} func (x *DomainSearchQueryLegacy) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[679] + mi := &file_forge_carbide_proto_msgTypes[691] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45422,7 +46664,7 @@ func (x *DomainSearchQueryLegacy) ProtoReflect() protoreflect.Message { // Deprecated: Use DomainSearchQueryLegacy.ProtoReflect.Descriptor instead. func (*DomainSearchQueryLegacy) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{679} + return file_forge_carbide_proto_rawDescGZIP(), []int{691} } func (x *DomainSearchQueryLegacy) GetId() *DomainId { @@ -45454,7 +46696,7 @@ type PxeDomain struct { func (x *PxeDomain) Reset() { *x = PxeDomain{} - mi := &file_forge_carbide_proto_msgTypes[680] + mi := &file_forge_carbide_proto_msgTypes[692] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45466,7 +46708,7 @@ func (x *PxeDomain) String() string { func (*PxeDomain) ProtoMessage() {} func (x *PxeDomain) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[680] + mi := &file_forge_carbide_proto_msgTypes[692] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45479,7 +46721,7 @@ func (x *PxeDomain) ProtoReflect() protoreflect.Message { // Deprecated: Use PxeDomain.ProtoReflect.Descriptor instead. func (*PxeDomain) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{680} + return file_forge_carbide_proto_rawDescGZIP(), []int{692} } func (x *PxeDomain) GetDomain() isPxeDomain_Domain { @@ -45533,7 +46775,7 @@ type MachinePositionQuery struct { func (x *MachinePositionQuery) Reset() { *x = MachinePositionQuery{} - mi := &file_forge_carbide_proto_msgTypes[681] + mi := &file_forge_carbide_proto_msgTypes[693] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45545,7 +46787,7 @@ func (x *MachinePositionQuery) String() string { func (*MachinePositionQuery) ProtoMessage() {} func (x *MachinePositionQuery) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[681] + mi := &file_forge_carbide_proto_msgTypes[693] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45558,7 +46800,7 @@ func (x *MachinePositionQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use MachinePositionQuery.ProtoReflect.Descriptor instead. func (*MachinePositionQuery) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{681} + return file_forge_carbide_proto_rawDescGZIP(), []int{693} } func (x *MachinePositionQuery) GetMachineIds() []*MachineId { @@ -45577,7 +46819,7 @@ type MachinePositionInfoList struct { func (x *MachinePositionInfoList) Reset() { *x = MachinePositionInfoList{} - mi := &file_forge_carbide_proto_msgTypes[682] + mi := &file_forge_carbide_proto_msgTypes[694] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45589,7 +46831,7 @@ func (x *MachinePositionInfoList) String() string { func (*MachinePositionInfoList) ProtoMessage() {} func (x *MachinePositionInfoList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[682] + mi := &file_forge_carbide_proto_msgTypes[694] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45602,7 +46844,7 @@ func (x *MachinePositionInfoList) ProtoReflect() protoreflect.Message { // Deprecated: Use MachinePositionInfoList.ProtoReflect.Descriptor instead. func (*MachinePositionInfoList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{682} + return file_forge_carbide_proto_rawDescGZIP(), []int{694} } func (x *MachinePositionInfoList) GetMachinePositionInfo() []*MachinePositionInfo { @@ -45627,7 +46869,7 @@ type MachinePositionInfo struct { func (x *MachinePositionInfo) Reset() { *x = MachinePositionInfo{} - mi := &file_forge_carbide_proto_msgTypes[683] + mi := &file_forge_carbide_proto_msgTypes[695] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45639,7 +46881,7 @@ func (x *MachinePositionInfo) String() string { func (*MachinePositionInfo) ProtoMessage() {} func (x *MachinePositionInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[683] + mi := &file_forge_carbide_proto_msgTypes[695] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45652,7 +46894,7 @@ func (x *MachinePositionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MachinePositionInfo.ProtoReflect.Descriptor instead. func (*MachinePositionInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{683} + return file_forge_carbide_proto_rawDescGZIP(), []int{695} } func (x *MachinePositionInfo) GetMachineId() *MachineId { @@ -45718,7 +46960,7 @@ type RackFirmware struct { func (x *RackFirmware) Reset() { *x = RackFirmware{} - mi := &file_forge_carbide_proto_msgTypes[684] + mi := &file_forge_carbide_proto_msgTypes[696] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45730,7 +46972,7 @@ func (x *RackFirmware) String() string { func (*RackFirmware) ProtoMessage() {} func (x *RackFirmware) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[684] + mi := &file_forge_carbide_proto_msgTypes[696] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45743,7 +46985,7 @@ func (x *RackFirmware) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmware.ProtoReflect.Descriptor instead. func (*RackFirmware) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{684} + return file_forge_carbide_proto_rawDescGZIP(), []int{696} } func (x *RackFirmware) GetId() string { @@ -45802,7 +47044,7 @@ type FirmwareComponentInfo struct { func (x *FirmwareComponentInfo) Reset() { *x = FirmwareComponentInfo{} - mi := &file_forge_carbide_proto_msgTypes[685] + mi := &file_forge_carbide_proto_msgTypes[697] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45814,7 +47056,7 @@ func (x *FirmwareComponentInfo) String() string { func (*FirmwareComponentInfo) ProtoMessage() {} func (x *FirmwareComponentInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[685] + mi := &file_forge_carbide_proto_msgTypes[697] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45827,7 +47069,7 @@ func (x *FirmwareComponentInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use FirmwareComponentInfo.ProtoReflect.Descriptor instead. func (*FirmwareComponentInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{685} + return file_forge_carbide_proto_rawDescGZIP(), []int{697} } func (x *FirmwareComponentInfo) GetDeviceType() string { @@ -45882,7 +47124,7 @@ type RackFirmwareCreateRequest struct { func (x *RackFirmwareCreateRequest) Reset() { *x = RackFirmwareCreateRequest{} - mi := &file_forge_carbide_proto_msgTypes[686] + mi := &file_forge_carbide_proto_msgTypes[698] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45894,7 +47136,7 @@ func (x *RackFirmwareCreateRequest) String() string { func (*RackFirmwareCreateRequest) ProtoMessage() {} func (x *RackFirmwareCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[686] + mi := &file_forge_carbide_proto_msgTypes[698] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45907,7 +47149,7 @@ func (x *RackFirmwareCreateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareCreateRequest.ProtoReflect.Descriptor instead. func (*RackFirmwareCreateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{686} + return file_forge_carbide_proto_rawDescGZIP(), []int{698} } func (x *RackFirmwareCreateRequest) GetConfigJson() string { @@ -45933,7 +47175,7 @@ type RackFirmwareGetRequest struct { func (x *RackFirmwareGetRequest) Reset() { *x = RackFirmwareGetRequest{} - mi := &file_forge_carbide_proto_msgTypes[687] + mi := &file_forge_carbide_proto_msgTypes[699] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45945,7 +47187,7 @@ func (x *RackFirmwareGetRequest) String() string { func (*RackFirmwareGetRequest) ProtoMessage() {} func (x *RackFirmwareGetRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[687] + mi := &file_forge_carbide_proto_msgTypes[699] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -45958,7 +47200,7 @@ func (x *RackFirmwareGetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareGetRequest.ProtoReflect.Descriptor instead. func (*RackFirmwareGetRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{687} + return file_forge_carbide_proto_rawDescGZIP(), []int{699} } func (x *RackFirmwareGetRequest) GetId() string { @@ -45977,7 +47219,7 @@ type RackFirmwareListRequest struct { func (x *RackFirmwareListRequest) Reset() { *x = RackFirmwareListRequest{} - mi := &file_forge_carbide_proto_msgTypes[688] + mi := &file_forge_carbide_proto_msgTypes[700] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -45989,7 +47231,7 @@ func (x *RackFirmwareListRequest) String() string { func (*RackFirmwareListRequest) ProtoMessage() {} func (x *RackFirmwareListRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[688] + mi := &file_forge_carbide_proto_msgTypes[700] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46002,7 +47244,7 @@ func (x *RackFirmwareListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareListRequest.ProtoReflect.Descriptor instead. func (*RackFirmwareListRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{688} + return file_forge_carbide_proto_rawDescGZIP(), []int{700} } func (x *RackFirmwareListRequest) GetOnlyAvailable() bool { @@ -46021,7 +47263,7 @@ type RackFirmwareList struct { func (x *RackFirmwareList) Reset() { *x = RackFirmwareList{} - mi := &file_forge_carbide_proto_msgTypes[689] + mi := &file_forge_carbide_proto_msgTypes[701] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46033,7 +47275,7 @@ func (x *RackFirmwareList) String() string { func (*RackFirmwareList) ProtoMessage() {} func (x *RackFirmwareList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[689] + mi := &file_forge_carbide_proto_msgTypes[701] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46046,7 +47288,7 @@ func (x *RackFirmwareList) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareList.ProtoReflect.Descriptor instead. func (*RackFirmwareList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{689} + return file_forge_carbide_proto_rawDescGZIP(), []int{701} } func (x *RackFirmwareList) GetConfigs() []*RackFirmware { @@ -46065,7 +47307,7 @@ type RackFirmwareDeleteRequest struct { func (x *RackFirmwareDeleteRequest) Reset() { *x = RackFirmwareDeleteRequest{} - mi := &file_forge_carbide_proto_msgTypes[690] + mi := &file_forge_carbide_proto_msgTypes[702] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46077,7 +47319,7 @@ func (x *RackFirmwareDeleteRequest) String() string { func (*RackFirmwareDeleteRequest) ProtoMessage() {} func (x *RackFirmwareDeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[690] + mi := &file_forge_carbide_proto_msgTypes[702] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46090,7 +47332,7 @@ func (x *RackFirmwareDeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareDeleteRequest.ProtoReflect.Descriptor instead. func (*RackFirmwareDeleteRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{690} + return file_forge_carbide_proto_rawDescGZIP(), []int{702} } func (x *RackFirmwareDeleteRequest) GetId() string { @@ -46111,7 +47353,7 @@ type RackFirmwareApplyRequest struct { func (x *RackFirmwareApplyRequest) Reset() { *x = RackFirmwareApplyRequest{} - mi := &file_forge_carbide_proto_msgTypes[691] + mi := &file_forge_carbide_proto_msgTypes[703] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46123,7 +47365,7 @@ func (x *RackFirmwareApplyRequest) String() string { func (*RackFirmwareApplyRequest) ProtoMessage() {} func (x *RackFirmwareApplyRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[691] + mi := &file_forge_carbide_proto_msgTypes[703] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46136,7 +47378,7 @@ func (x *RackFirmwareApplyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareApplyRequest.ProtoReflect.Descriptor instead. func (*RackFirmwareApplyRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{691} + return file_forge_carbide_proto_rawDescGZIP(), []int{703} } func (x *RackFirmwareApplyRequest) GetRackId() *RackId { @@ -46172,7 +47414,7 @@ type RackFirmwareApplyResponse struct { func (x *RackFirmwareApplyResponse) Reset() { *x = RackFirmwareApplyResponse{} - mi := &file_forge_carbide_proto_msgTypes[692] + mi := &file_forge_carbide_proto_msgTypes[704] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46184,7 +47426,7 @@ func (x *RackFirmwareApplyResponse) String() string { func (*RackFirmwareApplyResponse) ProtoMessage() {} func (x *RackFirmwareApplyResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[692] + mi := &file_forge_carbide_proto_msgTypes[704] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46197,7 +47439,7 @@ func (x *RackFirmwareApplyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareApplyResponse.ProtoReflect.Descriptor instead. func (*RackFirmwareApplyResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{692} + return file_forge_carbide_proto_rawDescGZIP(), []int{704} } func (x *RackFirmwareApplyResponse) GetTotalUpdates() int32 { @@ -46242,7 +47484,7 @@ type DeviceUpdateResult struct { func (x *DeviceUpdateResult) Reset() { *x = DeviceUpdateResult{} - mi := &file_forge_carbide_proto_msgTypes[693] + mi := &file_forge_carbide_proto_msgTypes[705] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46254,7 +47496,7 @@ func (x *DeviceUpdateResult) String() string { func (*DeviceUpdateResult) ProtoMessage() {} func (x *DeviceUpdateResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[693] + mi := &file_forge_carbide_proto_msgTypes[705] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46267,7 +47509,7 @@ func (x *DeviceUpdateResult) ProtoReflect() protoreflect.Message { // Deprecated: Use DeviceUpdateResult.ProtoReflect.Descriptor instead. func (*DeviceUpdateResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{693} + return file_forge_carbide_proto_rawDescGZIP(), []int{705} } func (x *DeviceUpdateResult) GetDeviceId() string { @@ -46322,7 +47564,7 @@ type NodeJobInfo struct { func (x *NodeJobInfo) Reset() { *x = NodeJobInfo{} - mi := &file_forge_carbide_proto_msgTypes[694] + mi := &file_forge_carbide_proto_msgTypes[706] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46334,7 +47576,7 @@ func (x *NodeJobInfo) String() string { func (*NodeJobInfo) ProtoMessage() {} func (x *NodeJobInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[694] + mi := &file_forge_carbide_proto_msgTypes[706] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46347,7 +47589,7 @@ func (x *NodeJobInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeJobInfo.ProtoReflect.Descriptor instead. func (*NodeJobInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{694} + return file_forge_carbide_proto_rawDescGZIP(), []int{706} } func (x *NodeJobInfo) GetNodeId() string { @@ -46373,7 +47615,7 @@ type RackFirmwareJobStatusRequest struct { func (x *RackFirmwareJobStatusRequest) Reset() { *x = RackFirmwareJobStatusRequest{} - mi := &file_forge_carbide_proto_msgTypes[695] + mi := &file_forge_carbide_proto_msgTypes[707] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46385,7 +47627,7 @@ func (x *RackFirmwareJobStatusRequest) String() string { func (*RackFirmwareJobStatusRequest) ProtoMessage() {} func (x *RackFirmwareJobStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[695] + mi := &file_forge_carbide_proto_msgTypes[707] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46398,7 +47640,7 @@ func (x *RackFirmwareJobStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareJobStatusRequest.ProtoReflect.Descriptor instead. func (*RackFirmwareJobStatusRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{695} + return file_forge_carbide_proto_rawDescGZIP(), []int{707} } func (x *RackFirmwareJobStatusRequest) GetJobId() string { @@ -46423,7 +47665,7 @@ type RackFirmwareJobStatusResponse struct { func (x *RackFirmwareJobStatusResponse) Reset() { *x = RackFirmwareJobStatusResponse{} - mi := &file_forge_carbide_proto_msgTypes[696] + mi := &file_forge_carbide_proto_msgTypes[708] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46435,7 +47677,7 @@ func (x *RackFirmwareJobStatusResponse) String() string { func (*RackFirmwareJobStatusResponse) ProtoMessage() {} func (x *RackFirmwareJobStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[696] + mi := &file_forge_carbide_proto_msgTypes[708] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46448,7 +47690,7 @@ func (x *RackFirmwareJobStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareJobStatusResponse.ProtoReflect.Descriptor instead. func (*RackFirmwareJobStatusResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{696} + return file_forge_carbide_proto_rawDescGZIP(), []int{708} } func (x *RackFirmwareJobStatusResponse) GetJobId() string { @@ -46510,7 +47752,7 @@ type RackFirmwareHistoryRequest struct { func (x *RackFirmwareHistoryRequest) Reset() { *x = RackFirmwareHistoryRequest{} - mi := &file_forge_carbide_proto_msgTypes[697] + mi := &file_forge_carbide_proto_msgTypes[709] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46522,7 +47764,7 @@ func (x *RackFirmwareHistoryRequest) String() string { func (*RackFirmwareHistoryRequest) ProtoMessage() {} func (x *RackFirmwareHistoryRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[697] + mi := &file_forge_carbide_proto_msgTypes[709] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46535,7 +47777,7 @@ func (x *RackFirmwareHistoryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareHistoryRequest.ProtoReflect.Descriptor instead. func (*RackFirmwareHistoryRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{697} + return file_forge_carbide_proto_rawDescGZIP(), []int{709} } func (x *RackFirmwareHistoryRequest) GetFirmwareId() string { @@ -46561,7 +47803,7 @@ type RackFirmwareHistoryResponse struct { func (x *RackFirmwareHistoryResponse) Reset() { *x = RackFirmwareHistoryResponse{} - mi := &file_forge_carbide_proto_msgTypes[698] + mi := &file_forge_carbide_proto_msgTypes[710] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46573,7 +47815,7 @@ func (x *RackFirmwareHistoryResponse) String() string { func (*RackFirmwareHistoryResponse) ProtoMessage() {} func (x *RackFirmwareHistoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[698] + mi := &file_forge_carbide_proto_msgTypes[710] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46586,7 +47828,7 @@ func (x *RackFirmwareHistoryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareHistoryResponse.ProtoReflect.Descriptor instead. func (*RackFirmwareHistoryResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{698} + return file_forge_carbide_proto_rawDescGZIP(), []int{710} } func (x *RackFirmwareHistoryResponse) GetHistories() map[string]*RackFirmwareHistoryRecords { @@ -46605,7 +47847,7 @@ type RackFirmwareHistoryRecords struct { func (x *RackFirmwareHistoryRecords) Reset() { *x = RackFirmwareHistoryRecords{} - mi := &file_forge_carbide_proto_msgTypes[699] + mi := &file_forge_carbide_proto_msgTypes[711] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46617,7 +47859,7 @@ func (x *RackFirmwareHistoryRecords) String() string { func (*RackFirmwareHistoryRecords) ProtoMessage() {} func (x *RackFirmwareHistoryRecords) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[699] + mi := &file_forge_carbide_proto_msgTypes[711] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46630,7 +47872,7 @@ func (x *RackFirmwareHistoryRecords) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareHistoryRecords.ProtoReflect.Descriptor instead. func (*RackFirmwareHistoryRecords) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{699} + return file_forge_carbide_proto_rawDescGZIP(), []int{711} } func (x *RackFirmwareHistoryRecords) GetRecords() []*RackFirmwareHistoryRecord { @@ -46653,7 +47895,7 @@ type RackFirmwareHistoryRecord struct { func (x *RackFirmwareHistoryRecord) Reset() { *x = RackFirmwareHistoryRecord{} - mi := &file_forge_carbide_proto_msgTypes[700] + mi := &file_forge_carbide_proto_msgTypes[712] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46665,7 +47907,7 @@ func (x *RackFirmwareHistoryRecord) String() string { func (*RackFirmwareHistoryRecord) ProtoMessage() {} func (x *RackFirmwareHistoryRecord) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[700] + mi := &file_forge_carbide_proto_msgTypes[712] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46678,7 +47920,7 @@ func (x *RackFirmwareHistoryRecord) ProtoReflect() protoreflect.Message { // Deprecated: Use RackFirmwareHistoryRecord.ProtoReflect.Descriptor instead. func (*RackFirmwareHistoryRecord) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{700} + return file_forge_carbide_proto_rawDescGZIP(), []int{712} } func (x *RackFirmwareHistoryRecord) GetFirmwareId() string { @@ -46726,7 +47968,7 @@ type ModifyDPFStateRequest struct { func (x *ModifyDPFStateRequest) Reset() { *x = ModifyDPFStateRequest{} - mi := &file_forge_carbide_proto_msgTypes[701] + mi := &file_forge_carbide_proto_msgTypes[713] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46738,7 +47980,7 @@ func (x *ModifyDPFStateRequest) String() string { func (*ModifyDPFStateRequest) ProtoMessage() {} func (x *ModifyDPFStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[701] + mi := &file_forge_carbide_proto_msgTypes[713] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46751,7 +47993,7 @@ func (x *ModifyDPFStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ModifyDPFStateRequest.ProtoReflect.Descriptor instead. func (*ModifyDPFStateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{701} + return file_forge_carbide_proto_rawDescGZIP(), []int{713} } func (x *ModifyDPFStateRequest) GetMachineId() *MachineId { @@ -46777,7 +48019,7 @@ type DPFStateResponse struct { func (x *DPFStateResponse) Reset() { *x = DPFStateResponse{} - mi := &file_forge_carbide_proto_msgTypes[702] + mi := &file_forge_carbide_proto_msgTypes[714] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46789,7 +48031,7 @@ func (x *DPFStateResponse) String() string { func (*DPFStateResponse) ProtoMessage() {} func (x *DPFStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[702] + mi := &file_forge_carbide_proto_msgTypes[714] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46802,7 +48044,7 @@ func (x *DPFStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DPFStateResponse.ProtoReflect.Descriptor instead. func (*DPFStateResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{702} + return file_forge_carbide_proto_rawDescGZIP(), []int{714} } func (x *DPFStateResponse) GetDpfStates() []*DPFStateResponse_DPFState { @@ -46821,7 +48063,7 @@ type GetDPFStateRequest struct { func (x *GetDPFStateRequest) Reset() { *x = GetDPFStateRequest{} - mi := &file_forge_carbide_proto_msgTypes[703] + mi := &file_forge_carbide_proto_msgTypes[715] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46833,7 +48075,7 @@ func (x *GetDPFStateRequest) String() string { func (*GetDPFStateRequest) ProtoMessage() {} func (x *GetDPFStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[703] + mi := &file_forge_carbide_proto_msgTypes[715] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46846,7 +48088,7 @@ func (x *GetDPFStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDPFStateRequest.ProtoReflect.Descriptor instead. func (*GetDPFStateRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{703} + return file_forge_carbide_proto_rawDescGZIP(), []int{715} } func (x *GetDPFStateRequest) GetMachineIds() []*MachineId { @@ -46867,7 +48109,7 @@ type ComponentResult struct { func (x *ComponentResult) Reset() { *x = ComponentResult{} - mi := &file_forge_carbide_proto_msgTypes[704] + mi := &file_forge_carbide_proto_msgTypes[716] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46879,7 +48121,7 @@ func (x *ComponentResult) String() string { func (*ComponentResult) ProtoMessage() {} func (x *ComponentResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[704] + mi := &file_forge_carbide_proto_msgTypes[716] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46892,7 +48134,7 @@ func (x *ComponentResult) ProtoReflect() protoreflect.Message { // Deprecated: Use ComponentResult.ProtoReflect.Descriptor instead. func (*ComponentResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{704} + return file_forge_carbide_proto_rawDescGZIP(), []int{716} } func (x *ComponentResult) GetComponentId() string { @@ -46925,7 +48167,7 @@ type SwitchIdList struct { func (x *SwitchIdList) Reset() { *x = SwitchIdList{} - mi := &file_forge_carbide_proto_msgTypes[705] + mi := &file_forge_carbide_proto_msgTypes[717] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46937,7 +48179,7 @@ func (x *SwitchIdList) String() string { func (*SwitchIdList) ProtoMessage() {} func (x *SwitchIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[705] + mi := &file_forge_carbide_proto_msgTypes[717] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46950,7 +48192,7 @@ func (x *SwitchIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use SwitchIdList.ProtoReflect.Descriptor instead. func (*SwitchIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{705} + return file_forge_carbide_proto_rawDescGZIP(), []int{717} } func (x *SwitchIdList) GetIds() []*SwitchId { @@ -46969,7 +48211,7 @@ type PowerShelfIdList struct { func (x *PowerShelfIdList) Reset() { *x = PowerShelfIdList{} - mi := &file_forge_carbide_proto_msgTypes[706] + mi := &file_forge_carbide_proto_msgTypes[718] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -46981,7 +48223,7 @@ func (x *PowerShelfIdList) String() string { func (*PowerShelfIdList) ProtoMessage() {} func (x *PowerShelfIdList) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[706] + mi := &file_forge_carbide_proto_msgTypes[718] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -46994,7 +48236,7 @@ func (x *PowerShelfIdList) ProtoReflect() protoreflect.Message { // Deprecated: Use PowerShelfIdList.ProtoReflect.Descriptor instead. func (*PowerShelfIdList) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{706} + return file_forge_carbide_proto_rawDescGZIP(), []int{718} } func (x *PowerShelfIdList) GetIds() []*PowerShelfId { @@ -47018,7 +48260,7 @@ type GetComponentInventoryRequest struct { func (x *GetComponentInventoryRequest) Reset() { *x = GetComponentInventoryRequest{} - mi := &file_forge_carbide_proto_msgTypes[707] + mi := &file_forge_carbide_proto_msgTypes[719] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47030,7 +48272,7 @@ func (x *GetComponentInventoryRequest) String() string { func (*GetComponentInventoryRequest) ProtoMessage() {} func (x *GetComponentInventoryRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[707] + mi := &file_forge_carbide_proto_msgTypes[719] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47043,7 +48285,7 @@ func (x *GetComponentInventoryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetComponentInventoryRequest.ProtoReflect.Descriptor instead. func (*GetComponentInventoryRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{707} + return file_forge_carbide_proto_rawDescGZIP(), []int{719} } func (x *GetComponentInventoryRequest) GetTarget() isGetComponentInventoryRequest_Target { @@ -47112,7 +48354,7 @@ type ComponentInventoryEntry struct { func (x *ComponentInventoryEntry) Reset() { *x = ComponentInventoryEntry{} - mi := &file_forge_carbide_proto_msgTypes[708] + mi := &file_forge_carbide_proto_msgTypes[720] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47124,7 +48366,7 @@ func (x *ComponentInventoryEntry) String() string { func (*ComponentInventoryEntry) ProtoMessage() {} func (x *ComponentInventoryEntry) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[708] + mi := &file_forge_carbide_proto_msgTypes[720] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47137,7 +48379,7 @@ func (x *ComponentInventoryEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use ComponentInventoryEntry.ProtoReflect.Descriptor instead. func (*ComponentInventoryEntry) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{708} + return file_forge_carbide_proto_rawDescGZIP(), []int{720} } func (x *ComponentInventoryEntry) GetResult() *ComponentResult { @@ -47163,7 +48405,7 @@ type GetComponentInventoryResponse struct { func (x *GetComponentInventoryResponse) Reset() { *x = GetComponentInventoryResponse{} - mi := &file_forge_carbide_proto_msgTypes[709] + mi := &file_forge_carbide_proto_msgTypes[721] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47175,7 +48417,7 @@ func (x *GetComponentInventoryResponse) String() string { func (*GetComponentInventoryResponse) ProtoMessage() {} func (x *GetComponentInventoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[709] + mi := &file_forge_carbide_proto_msgTypes[721] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47188,7 +48430,7 @@ func (x *GetComponentInventoryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetComponentInventoryResponse.ProtoReflect.Descriptor instead. func (*GetComponentInventoryResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{709} + return file_forge_carbide_proto_rawDescGZIP(), []int{721} } func (x *GetComponentInventoryResponse) GetEntries() []*ComponentInventoryEntry { @@ -47213,7 +48455,7 @@ type ComponentPowerControlRequest struct { func (x *ComponentPowerControlRequest) Reset() { *x = ComponentPowerControlRequest{} - mi := &file_forge_carbide_proto_msgTypes[710] + mi := &file_forge_carbide_proto_msgTypes[722] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47225,7 +48467,7 @@ func (x *ComponentPowerControlRequest) String() string { func (*ComponentPowerControlRequest) ProtoMessage() {} func (x *ComponentPowerControlRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[710] + mi := &file_forge_carbide_proto_msgTypes[722] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47238,7 +48480,7 @@ func (x *ComponentPowerControlRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ComponentPowerControlRequest.ProtoReflect.Descriptor instead. func (*ComponentPowerControlRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{710} + return file_forge_carbide_proto_rawDescGZIP(), []int{722} } func (x *ComponentPowerControlRequest) GetTarget() isComponentPowerControlRequest_Target { @@ -47313,7 +48555,7 @@ type ComponentPowerControlResponse struct { func (x *ComponentPowerControlResponse) Reset() { *x = ComponentPowerControlResponse{} - mi := &file_forge_carbide_proto_msgTypes[711] + mi := &file_forge_carbide_proto_msgTypes[723] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47325,7 +48567,7 @@ func (x *ComponentPowerControlResponse) String() string { func (*ComponentPowerControlResponse) ProtoMessage() {} func (x *ComponentPowerControlResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[711] + mi := &file_forge_carbide_proto_msgTypes[723] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47338,7 +48580,7 @@ func (x *ComponentPowerControlResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ComponentPowerControlResponse.ProtoReflect.Descriptor instead. func (*ComponentPowerControlResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{711} + return file_forge_carbide_proto_rawDescGZIP(), []int{723} } func (x *ComponentPowerControlResponse) GetResults() []*ComponentResult { @@ -47360,7 +48602,7 @@ type FirmwareUpdateStatus struct { func (x *FirmwareUpdateStatus) Reset() { *x = FirmwareUpdateStatus{} - mi := &file_forge_carbide_proto_msgTypes[712] + mi := &file_forge_carbide_proto_msgTypes[724] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47372,7 +48614,7 @@ func (x *FirmwareUpdateStatus) String() string { func (*FirmwareUpdateStatus) ProtoMessage() {} func (x *FirmwareUpdateStatus) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[712] + mi := &file_forge_carbide_proto_msgTypes[724] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47385,7 +48627,7 @@ func (x *FirmwareUpdateStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use FirmwareUpdateStatus.ProtoReflect.Descriptor instead. func (*FirmwareUpdateStatus) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{712} + return file_forge_carbide_proto_rawDescGZIP(), []int{724} } func (x *FirmwareUpdateStatus) GetResult() *ComponentResult { @@ -47426,7 +48668,7 @@ type UpdateComputeTrayFirmwareTarget struct { func (x *UpdateComputeTrayFirmwareTarget) Reset() { *x = UpdateComputeTrayFirmwareTarget{} - mi := &file_forge_carbide_proto_msgTypes[713] + mi := &file_forge_carbide_proto_msgTypes[725] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47438,7 +48680,7 @@ func (x *UpdateComputeTrayFirmwareTarget) String() string { func (*UpdateComputeTrayFirmwareTarget) ProtoMessage() {} func (x *UpdateComputeTrayFirmwareTarget) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[713] + mi := &file_forge_carbide_proto_msgTypes[725] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47451,7 +48693,7 @@ func (x *UpdateComputeTrayFirmwareTarget) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateComputeTrayFirmwareTarget.ProtoReflect.Descriptor instead. func (*UpdateComputeTrayFirmwareTarget) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{713} + return file_forge_carbide_proto_rawDescGZIP(), []int{725} } func (x *UpdateComputeTrayFirmwareTarget) GetMachineIds() *MachineIdList { @@ -47478,7 +48720,7 @@ type UpdateSwitchFirmwareTarget struct { func (x *UpdateSwitchFirmwareTarget) Reset() { *x = UpdateSwitchFirmwareTarget{} - mi := &file_forge_carbide_proto_msgTypes[714] + mi := &file_forge_carbide_proto_msgTypes[726] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47490,7 +48732,7 @@ func (x *UpdateSwitchFirmwareTarget) String() string { func (*UpdateSwitchFirmwareTarget) ProtoMessage() {} func (x *UpdateSwitchFirmwareTarget) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[714] + mi := &file_forge_carbide_proto_msgTypes[726] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47503,7 +48745,7 @@ func (x *UpdateSwitchFirmwareTarget) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSwitchFirmwareTarget.ProtoReflect.Descriptor instead. func (*UpdateSwitchFirmwareTarget) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{714} + return file_forge_carbide_proto_rawDescGZIP(), []int{726} } func (x *UpdateSwitchFirmwareTarget) GetSwitchIds() *SwitchIdList { @@ -47530,7 +48772,7 @@ type UpdatePowerShelfFirmwareTarget struct { func (x *UpdatePowerShelfFirmwareTarget) Reset() { *x = UpdatePowerShelfFirmwareTarget{} - mi := &file_forge_carbide_proto_msgTypes[715] + mi := &file_forge_carbide_proto_msgTypes[727] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47542,7 +48784,7 @@ func (x *UpdatePowerShelfFirmwareTarget) String() string { func (*UpdatePowerShelfFirmwareTarget) ProtoMessage() {} func (x *UpdatePowerShelfFirmwareTarget) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[715] + mi := &file_forge_carbide_proto_msgTypes[727] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47555,7 +48797,7 @@ func (x *UpdatePowerShelfFirmwareTarget) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdatePowerShelfFirmwareTarget.ProtoReflect.Descriptor instead. func (*UpdatePowerShelfFirmwareTarget) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{715} + return file_forge_carbide_proto_rawDescGZIP(), []int{727} } func (x *UpdatePowerShelfFirmwareTarget) GetPowerShelfIds() *PowerShelfIdList { @@ -47587,7 +48829,7 @@ type UpdateComponentFirmwareRequest struct { func (x *UpdateComponentFirmwareRequest) Reset() { *x = UpdateComponentFirmwareRequest{} - mi := &file_forge_carbide_proto_msgTypes[716] + mi := &file_forge_carbide_proto_msgTypes[728] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -47599,7 +48841,7 @@ func (x *UpdateComponentFirmwareRequest) String() string { func (*UpdateComponentFirmwareRequest) ProtoMessage() {} func (x *UpdateComponentFirmwareRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[716] + mi := &file_forge_carbide_proto_msgTypes[728] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47612,94 +48854,1052 @@ func (x *UpdateComponentFirmwareRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateComponentFirmwareRequest.ProtoReflect.Descriptor instead. func (*UpdateComponentFirmwareRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{716} + return file_forge_carbide_proto_rawDescGZIP(), []int{728} +} + +func (x *UpdateComponentFirmwareRequest) GetTarget() isUpdateComponentFirmwareRequest_Target { + if x != nil { + return x.Target + } + return nil +} + +func (x *UpdateComponentFirmwareRequest) GetComputeTrays() *UpdateComputeTrayFirmwareTarget { + if x != nil { + if x, ok := x.Target.(*UpdateComponentFirmwareRequest_ComputeTrays); ok { + return x.ComputeTrays + } + } + return nil +} + +func (x *UpdateComponentFirmwareRequest) GetSwitches() *UpdateSwitchFirmwareTarget { + if x != nil { + if x, ok := x.Target.(*UpdateComponentFirmwareRequest_Switches); ok { + return x.Switches + } + } + return nil +} + +func (x *UpdateComponentFirmwareRequest) GetPowerShelves() *UpdatePowerShelfFirmwareTarget { + if x != nil { + if x, ok := x.Target.(*UpdateComponentFirmwareRequest_PowerShelves); ok { + return x.PowerShelves + } + } + return nil +} + +func (x *UpdateComponentFirmwareRequest) GetTargetVersion() string { + if x != nil { + return x.TargetVersion + } + return "" +} + +type isUpdateComponentFirmwareRequest_Target interface { + isUpdateComponentFirmwareRequest_Target() +} + +type UpdateComponentFirmwareRequest_ComputeTrays struct { + ComputeTrays *UpdateComputeTrayFirmwareTarget `protobuf:"bytes,1,opt,name=compute_trays,json=computeTrays,proto3,oneof"` +} + +type UpdateComponentFirmwareRequest_Switches struct { + Switches *UpdateSwitchFirmwareTarget `protobuf:"bytes,2,opt,name=switches,proto3,oneof"` +} + +type UpdateComponentFirmwareRequest_PowerShelves struct { + PowerShelves *UpdatePowerShelfFirmwareTarget `protobuf:"bytes,3,opt,name=power_shelves,json=powerShelves,proto3,oneof"` +} + +func (*UpdateComponentFirmwareRequest_ComputeTrays) isUpdateComponentFirmwareRequest_Target() {} + +func (*UpdateComponentFirmwareRequest_Switches) isUpdateComponentFirmwareRequest_Target() {} + +func (*UpdateComponentFirmwareRequest_PowerShelves) isUpdateComponentFirmwareRequest_Target() {} + +type UpdateComponentFirmwareResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Results []*ComponentResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateComponentFirmwareResponse) Reset() { + *x = UpdateComponentFirmwareResponse{} + mi := &file_forge_carbide_proto_msgTypes[729] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateComponentFirmwareResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateComponentFirmwareResponse) ProtoMessage() {} + +func (x *UpdateComponentFirmwareResponse) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[729] + 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 UpdateComponentFirmwareResponse.ProtoReflect.Descriptor instead. +func (*UpdateComponentFirmwareResponse) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{729} +} + +func (x *UpdateComponentFirmwareResponse) GetResults() []*ComponentResult { + if x != nil { + return x.Results + } + return nil +} + +type GetComponentFirmwareStatusRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Target: + // + // *GetComponentFirmwareStatusRequest_MachineIds + // *GetComponentFirmwareStatusRequest_SwitchIds + // *GetComponentFirmwareStatusRequest_PowerShelfIds + Target isGetComponentFirmwareStatusRequest_Target `protobuf_oneof:"target"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetComponentFirmwareStatusRequest) Reset() { + *x = GetComponentFirmwareStatusRequest{} + mi := &file_forge_carbide_proto_msgTypes[730] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetComponentFirmwareStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetComponentFirmwareStatusRequest) ProtoMessage() {} + +func (x *GetComponentFirmwareStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[730] + 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 GetComponentFirmwareStatusRequest.ProtoReflect.Descriptor instead. +func (*GetComponentFirmwareStatusRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{730} +} + +func (x *GetComponentFirmwareStatusRequest) GetTarget() isGetComponentFirmwareStatusRequest_Target { + if x != nil { + return x.Target + } + return nil +} + +func (x *GetComponentFirmwareStatusRequest) GetMachineIds() *MachineIdList { + if x != nil { + if x, ok := x.Target.(*GetComponentFirmwareStatusRequest_MachineIds); ok { + return x.MachineIds + } + } + return nil +} + +func (x *GetComponentFirmwareStatusRequest) GetSwitchIds() *SwitchIdList { + if x != nil { + if x, ok := x.Target.(*GetComponentFirmwareStatusRequest_SwitchIds); ok { + return x.SwitchIds + } + } + return nil +} + +func (x *GetComponentFirmwareStatusRequest) GetPowerShelfIds() *PowerShelfIdList { + if x != nil { + if x, ok := x.Target.(*GetComponentFirmwareStatusRequest_PowerShelfIds); ok { + return x.PowerShelfIds + } + } + return nil +} + +type isGetComponentFirmwareStatusRequest_Target interface { + isGetComponentFirmwareStatusRequest_Target() +} + +type GetComponentFirmwareStatusRequest_MachineIds struct { + MachineIds *MachineIdList `protobuf:"bytes,1,opt,name=machine_ids,json=machineIds,proto3,oneof"` +} + +type GetComponentFirmwareStatusRequest_SwitchIds struct { + SwitchIds *SwitchIdList `protobuf:"bytes,2,opt,name=switch_ids,json=switchIds,proto3,oneof"` +} + +type GetComponentFirmwareStatusRequest_PowerShelfIds struct { + PowerShelfIds *PowerShelfIdList `protobuf:"bytes,3,opt,name=power_shelf_ids,json=powerShelfIds,proto3,oneof"` +} + +func (*GetComponentFirmwareStatusRequest_MachineIds) isGetComponentFirmwareStatusRequest_Target() {} + +func (*GetComponentFirmwareStatusRequest_SwitchIds) isGetComponentFirmwareStatusRequest_Target() {} + +func (*GetComponentFirmwareStatusRequest_PowerShelfIds) isGetComponentFirmwareStatusRequest_Target() { +} + +type GetComponentFirmwareStatusResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Statuses []*FirmwareUpdateStatus `protobuf:"bytes,1,rep,name=statuses,proto3" json:"statuses,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetComponentFirmwareStatusResponse) Reset() { + *x = GetComponentFirmwareStatusResponse{} + mi := &file_forge_carbide_proto_msgTypes[731] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetComponentFirmwareStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetComponentFirmwareStatusResponse) ProtoMessage() {} + +func (x *GetComponentFirmwareStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[731] + 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 GetComponentFirmwareStatusResponse.ProtoReflect.Descriptor instead. +func (*GetComponentFirmwareStatusResponse) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{731} +} + +func (x *GetComponentFirmwareStatusResponse) GetStatuses() []*FirmwareUpdateStatus { + if x != nil { + return x.Statuses + } + return nil +} + +type ListComponentFirmwareVersionsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Target: + // + // *ListComponentFirmwareVersionsRequest_MachineIds + // *ListComponentFirmwareVersionsRequest_SwitchIds + // *ListComponentFirmwareVersionsRequest_PowerShelfIds + Target isListComponentFirmwareVersionsRequest_Target `protobuf_oneof:"target"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListComponentFirmwareVersionsRequest) Reset() { + *x = ListComponentFirmwareVersionsRequest{} + mi := &file_forge_carbide_proto_msgTypes[732] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListComponentFirmwareVersionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListComponentFirmwareVersionsRequest) ProtoMessage() {} + +func (x *ListComponentFirmwareVersionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[732] + 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 ListComponentFirmwareVersionsRequest.ProtoReflect.Descriptor instead. +func (*ListComponentFirmwareVersionsRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{732} +} + +func (x *ListComponentFirmwareVersionsRequest) GetTarget() isListComponentFirmwareVersionsRequest_Target { + if x != nil { + return x.Target + } + return nil +} + +func (x *ListComponentFirmwareVersionsRequest) GetMachineIds() *MachineIdList { + if x != nil { + if x, ok := x.Target.(*ListComponentFirmwareVersionsRequest_MachineIds); ok { + return x.MachineIds + } + } + return nil +} + +func (x *ListComponentFirmwareVersionsRequest) GetSwitchIds() *SwitchIdList { + if x != nil { + if x, ok := x.Target.(*ListComponentFirmwareVersionsRequest_SwitchIds); ok { + return x.SwitchIds + } + } + return nil +} + +func (x *ListComponentFirmwareVersionsRequest) GetPowerShelfIds() *PowerShelfIdList { + if x != nil { + if x, ok := x.Target.(*ListComponentFirmwareVersionsRequest_PowerShelfIds); ok { + return x.PowerShelfIds + } + } + return nil +} + +type isListComponentFirmwareVersionsRequest_Target interface { + isListComponentFirmwareVersionsRequest_Target() +} + +type ListComponentFirmwareVersionsRequest_MachineIds struct { + MachineIds *MachineIdList `protobuf:"bytes,1,opt,name=machine_ids,json=machineIds,proto3,oneof"` +} + +type ListComponentFirmwareVersionsRequest_SwitchIds struct { + SwitchIds *SwitchIdList `protobuf:"bytes,2,opt,name=switch_ids,json=switchIds,proto3,oneof"` +} + +type ListComponentFirmwareVersionsRequest_PowerShelfIds struct { + PowerShelfIds *PowerShelfIdList `protobuf:"bytes,3,opt,name=power_shelf_ids,json=powerShelfIds,proto3,oneof"` +} + +func (*ListComponentFirmwareVersionsRequest_MachineIds) isListComponentFirmwareVersionsRequest_Target() { +} + +func (*ListComponentFirmwareVersionsRequest_SwitchIds) isListComponentFirmwareVersionsRequest_Target() { +} + +func (*ListComponentFirmwareVersionsRequest_PowerShelfIds) isListComponentFirmwareVersionsRequest_Target() { +} + +type DeviceFirmwareVersions struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result *ComponentResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` + Versions []string `protobuf:"bytes,2,rep,name=versions,proto3" json:"versions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceFirmwareVersions) Reset() { + *x = DeviceFirmwareVersions{} + mi := &file_forge_carbide_proto_msgTypes[733] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceFirmwareVersions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceFirmwareVersions) ProtoMessage() {} + +func (x *DeviceFirmwareVersions) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[733] + 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 DeviceFirmwareVersions.ProtoReflect.Descriptor instead. +func (*DeviceFirmwareVersions) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{733} +} + +func (x *DeviceFirmwareVersions) GetResult() *ComponentResult { + if x != nil { + return x.Result + } + return nil +} + +func (x *DeviceFirmwareVersions) GetVersions() []string { + if x != nil { + return x.Versions + } + return nil +} + +type ListComponentFirmwareVersionsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Devices []*DeviceFirmwareVersions `protobuf:"bytes,1,rep,name=devices,proto3" json:"devices,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListComponentFirmwareVersionsResponse) Reset() { + *x = ListComponentFirmwareVersionsResponse{} + mi := &file_forge_carbide_proto_msgTypes[734] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListComponentFirmwareVersionsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListComponentFirmwareVersionsResponse) ProtoMessage() {} + +func (x *ListComponentFirmwareVersionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[734] + 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 ListComponentFirmwareVersionsResponse.ProtoReflect.Descriptor instead. +func (*ListComponentFirmwareVersionsResponse) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{734} +} + +func (x *ListComponentFirmwareVersionsResponse) GetDevices() []*DeviceFirmwareVersions { + if x != nil { + return x.Devices + } + return nil +} + +// Force deletes a Switch and optionally its associated interfaces. +type AdminForceDeleteSwitchRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The Switch ID to force delete. + SwitchId *SwitchId `protobuf:"bytes,1,opt,name=switch_id,json=switchId,proto3" json:"switch_id,omitempty"` + // Should we delete the machine interfaces associated with this switch? + DeleteInterfaces bool `protobuf:"varint,2,opt,name=delete_interfaces,json=deleteInterfaces,proto3" json:"delete_interfaces,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdminForceDeleteSwitchRequest) Reset() { + *x = AdminForceDeleteSwitchRequest{} + mi := &file_forge_carbide_proto_msgTypes[735] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdminForceDeleteSwitchRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminForceDeleteSwitchRequest) ProtoMessage() {} + +func (x *AdminForceDeleteSwitchRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[735] + 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 AdminForceDeleteSwitchRequest.ProtoReflect.Descriptor instead. +func (*AdminForceDeleteSwitchRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{735} +} + +func (x *AdminForceDeleteSwitchRequest) GetSwitchId() *SwitchId { + if x != nil { + return x.SwitchId + } + return nil +} + +func (x *AdminForceDeleteSwitchRequest) GetDeleteInterfaces() bool { + if x != nil { + return x.DeleteInterfaces + } + return false +} + +type AdminForceDeleteSwitchResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The ID of the switch that was deleted. + SwitchId string `protobuf:"bytes,1,opt,name=switch_id,json=switchId,proto3" json:"switch_id,omitempty"` + // Number of interfaces deleted. + InterfacesDeleted uint32 `protobuf:"varint,2,opt,name=interfaces_deleted,json=interfacesDeleted,proto3" json:"interfaces_deleted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdminForceDeleteSwitchResponse) Reset() { + *x = AdminForceDeleteSwitchResponse{} + mi := &file_forge_carbide_proto_msgTypes[736] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdminForceDeleteSwitchResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminForceDeleteSwitchResponse) ProtoMessage() {} + +func (x *AdminForceDeleteSwitchResponse) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[736] + 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 AdminForceDeleteSwitchResponse.ProtoReflect.Descriptor instead. +func (*AdminForceDeleteSwitchResponse) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{736} +} + +func (x *AdminForceDeleteSwitchResponse) GetSwitchId() string { + if x != nil { + return x.SwitchId + } + return "" +} + +func (x *AdminForceDeleteSwitchResponse) GetInterfacesDeleted() uint32 { + if x != nil { + return x.InterfacesDeleted + } + return 0 +} + +// Force deletes a Power Shelf and optionally its associated interfaces. +type AdminForceDeletePowerShelfRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The Power Shelf ID to force delete. + PowerShelfId *PowerShelfId `protobuf:"bytes,1,opt,name=power_shelf_id,json=powerShelfId,proto3" json:"power_shelf_id,omitempty"` + // Should we delete the machine interfaces associated with this power shelf? + DeleteInterfaces bool `protobuf:"varint,2,opt,name=delete_interfaces,json=deleteInterfaces,proto3" json:"delete_interfaces,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdminForceDeletePowerShelfRequest) Reset() { + *x = AdminForceDeletePowerShelfRequest{} + mi := &file_forge_carbide_proto_msgTypes[737] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdminForceDeletePowerShelfRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminForceDeletePowerShelfRequest) ProtoMessage() {} + +func (x *AdminForceDeletePowerShelfRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[737] + 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 AdminForceDeletePowerShelfRequest.ProtoReflect.Descriptor instead. +func (*AdminForceDeletePowerShelfRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{737} +} + +func (x *AdminForceDeletePowerShelfRequest) GetPowerShelfId() *PowerShelfId { + if x != nil { + return x.PowerShelfId + } + return nil +} + +func (x *AdminForceDeletePowerShelfRequest) GetDeleteInterfaces() bool { + if x != nil { + return x.DeleteInterfaces + } + return false +} + +type AdminForceDeletePowerShelfResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The ID of the power shelf that was deleted. + PowerShelfId string `protobuf:"bytes,1,opt,name=power_shelf_id,json=powerShelfId,proto3" json:"power_shelf_id,omitempty"` + // Number of interfaces deleted. + InterfacesDeleted uint32 `protobuf:"varint,2,opt,name=interfaces_deleted,json=interfacesDeleted,proto3" json:"interfaces_deleted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdminForceDeletePowerShelfResponse) Reset() { + *x = AdminForceDeletePowerShelfResponse{} + mi := &file_forge_carbide_proto_msgTypes[738] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdminForceDeletePowerShelfResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminForceDeletePowerShelfResponse) ProtoMessage() {} + +func (x *AdminForceDeletePowerShelfResponse) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[738] + 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 AdminForceDeletePowerShelfResponse.ProtoReflect.Descriptor instead. +func (*AdminForceDeletePowerShelfResponse) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{738} +} + +func (x *AdminForceDeletePowerShelfResponse) GetPowerShelfId() string { + if x != nil { + return x.PowerShelfId + } + return "" +} + +func (x *AdminForceDeletePowerShelfResponse) GetInterfacesDeleted() uint32 { + if x != nil { + return x.InterfacesDeleted + } + return 0 +} + +type OperatingSystem struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id *OperatingSystemId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` + TenantOrganizationId string `protobuf:"bytes,4,opt,name=tenant_organization_id,json=tenantOrganizationId,proto3" json:"tenant_organization_id,omitempty"` + Type OperatingSystemType `protobuf:"varint,5,opt,name=type,proto3,enum=forge.OperatingSystemType" json:"type,omitempty"` + Status TenantState `protobuf:"varint,6,opt,name=status,proto3,enum=forge.TenantState" json:"status,omitempty"` // we only use some states from TenantState + IsActive bool `protobuf:"varint,7,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` + AllowOverride bool `protobuf:"varint,8,opt,name=allow_override,json=allowOverride,proto3" json:"allow_override,omitempty"` + PhoneHomeEnabled bool `protobuf:"varint,9,opt,name=phone_home_enabled,json=phoneHomeEnabled,proto3" json:"phone_home_enabled,omitempty"` + UserData *string `protobuf:"bytes,10,opt,name=user_data,json=userData,proto3,oneof" json:"user_data,omitempty"` + Created string `protobuf:"bytes,11,opt,name=created,proto3" json:"created,omitempty"` + Updated string `protobuf:"bytes,12,opt,name=updated,proto3" json:"updated,omitempty"` + // Variant: ipxe + IpxeScript *string `protobuf:"bytes,20,opt,name=ipxe_script,json=ipxeScript,proto3,oneof" json:"ipxe_script,omitempty"` + // Variant: ipxe_os_definition + IpxeTemplateId *IpxeTemplateId `protobuf:"bytes,22,opt,name=ipxe_template_id,json=ipxeTemplateId,proto3,oneof" json:"ipxe_template_id,omitempty"` + IpxeTemplateParameters []*IpxeTemplateParameter `protobuf:"bytes,23,rep,name=ipxe_template_parameters,json=ipxeTemplateParameters,proto3" json:"ipxe_template_parameters,omitempty"` + IpxeTemplateArtifacts []*IpxeTemplateArtifact `protobuf:"bytes,24,rep,name=ipxe_template_artifacts,json=ipxeTemplateArtifacts,proto3" json:"ipxe_template_artifacts,omitempty"` + IpxeTemplateDefinitionHash *string `protobuf:"bytes,25,opt,name=ipxe_template_definition_hash,json=ipxeTemplateDefinitionHash,proto3,oneof" json:"ipxe_template_definition_hash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OperatingSystem) Reset() { + *x = OperatingSystem{} + mi := &file_forge_carbide_proto_msgTypes[739] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OperatingSystem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OperatingSystem) ProtoMessage() {} + +func (x *OperatingSystem) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[739] + 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 OperatingSystem.ProtoReflect.Descriptor instead. +func (*OperatingSystem) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{739} +} + +func (x *OperatingSystem) GetId() *OperatingSystemId { + if x != nil { + return x.Id + } + return nil +} + +func (x *OperatingSystem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *OperatingSystem) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} + +func (x *OperatingSystem) GetTenantOrganizationId() string { + if x != nil { + return x.TenantOrganizationId + } + return "" +} + +func (x *OperatingSystem) GetType() OperatingSystemType { + if x != nil { + return x.Type + } + return OperatingSystemType_OS_TYPE_UNSPECIFIED +} + +func (x *OperatingSystem) GetStatus() TenantState { + if x != nil { + return x.Status + } + return TenantState_PROVISIONING +} + +func (x *OperatingSystem) GetIsActive() bool { + if x != nil { + return x.IsActive + } + return false +} + +func (x *OperatingSystem) GetAllowOverride() bool { + if x != nil { + return x.AllowOverride + } + return false +} + +func (x *OperatingSystem) GetPhoneHomeEnabled() bool { + if x != nil { + return x.PhoneHomeEnabled + } + return false +} + +func (x *OperatingSystem) GetUserData() string { + if x != nil && x.UserData != nil { + return *x.UserData + } + return "" +} + +func (x *OperatingSystem) GetCreated() string { + if x != nil { + return x.Created + } + return "" +} + +func (x *OperatingSystem) GetUpdated() string { + if x != nil { + return x.Updated + } + return "" +} + +func (x *OperatingSystem) GetIpxeScript() string { + if x != nil && x.IpxeScript != nil { + return *x.IpxeScript + } + return "" +} + +func (x *OperatingSystem) GetIpxeTemplateId() *IpxeTemplateId { + if x != nil { + return x.IpxeTemplateId + } + return nil +} + +func (x *OperatingSystem) GetIpxeTemplateParameters() []*IpxeTemplateParameter { + if x != nil { + return x.IpxeTemplateParameters + } + return nil +} + +func (x *OperatingSystem) GetIpxeTemplateArtifacts() []*IpxeTemplateArtifact { + if x != nil { + return x.IpxeTemplateArtifacts + } + return nil +} + +func (x *OperatingSystem) GetIpxeTemplateDefinitionHash() string { + if x != nil && x.IpxeTemplateDefinitionHash != nil { + return *x.IpxeTemplateDefinitionHash + } + return "" +} + +type CreateOperatingSystemRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description *string `protobuf:"bytes,2,opt,name=description,proto3,oneof" json:"description,omitempty"` + TenantOrganizationId string `protobuf:"bytes,3,opt,name=tenant_organization_id,json=tenantOrganizationId,proto3" json:"tenant_organization_id,omitempty"` + IsActive bool `protobuf:"varint,4,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` + AllowOverride bool `protobuf:"varint,5,opt,name=allow_override,json=allowOverride,proto3" json:"allow_override,omitempty"` + PhoneHomeEnabled bool `protobuf:"varint,6,opt,name=phone_home_enabled,json=phoneHomeEnabled,proto3" json:"phone_home_enabled,omitempty"` + UserData *string `protobuf:"bytes,7,opt,name=user_data,json=userData,proto3,oneof" json:"user_data,omitempty"` + Id *OperatingSystemId `protobuf:"bytes,8,opt,name=id,proto3,oneof" json:"id,omitempty"` + // Exactly one variant must be provided to determine the type. + // This is only set for 'ipxe' variant: + IpxeScript *string `protobuf:"bytes,20,opt,name=ipxe_script,json=ipxeScript,proto3,oneof" json:"ipxe_script,omitempty"` + // This is only set for 'ipxe_os_definition' variant (with optional parameters/artifacts): + IpxeTemplateId *IpxeTemplateId `protobuf:"bytes,22,opt,name=ipxe_template_id,json=ipxeTemplateId,proto3,oneof" json:"ipxe_template_id,omitempty"` + IpxeTemplateParameters []*IpxeTemplateParameter `protobuf:"bytes,23,rep,name=ipxe_template_parameters,json=ipxeTemplateParameters,proto3" json:"ipxe_template_parameters,omitempty"` + IpxeTemplateArtifacts []*IpxeTemplateArtifact `protobuf:"bytes,24,rep,name=ipxe_template_artifacts,json=ipxeTemplateArtifacts,proto3" json:"ipxe_template_artifacts,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateOperatingSystemRequest) Reset() { + *x = CreateOperatingSystemRequest{} + mi := &file_forge_carbide_proto_msgTypes[740] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateOperatingSystemRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateOperatingSystemRequest) ProtoMessage() {} + +func (x *CreateOperatingSystemRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[740] + 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 CreateOperatingSystemRequest.ProtoReflect.Descriptor instead. +func (*CreateOperatingSystemRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{740} +} + +func (x *CreateOperatingSystemRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CreateOperatingSystemRequest) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} + +func (x *CreateOperatingSystemRequest) GetTenantOrganizationId() string { + if x != nil { + return x.TenantOrganizationId + } + return "" +} + +func (x *CreateOperatingSystemRequest) GetIsActive() bool { + if x != nil { + return x.IsActive + } + return false +} + +func (x *CreateOperatingSystemRequest) GetAllowOverride() bool { + if x != nil { + return x.AllowOverride + } + return false +} + +func (x *CreateOperatingSystemRequest) GetPhoneHomeEnabled() bool { + if x != nil { + return x.PhoneHomeEnabled + } + return false +} + +func (x *CreateOperatingSystemRequest) GetUserData() string { + if x != nil && x.UserData != nil { + return *x.UserData + } + return "" } -func (x *UpdateComponentFirmwareRequest) GetTarget() isUpdateComponentFirmwareRequest_Target { +func (x *CreateOperatingSystemRequest) GetId() *OperatingSystemId { if x != nil { - return x.Target + return x.Id } return nil } -func (x *UpdateComponentFirmwareRequest) GetComputeTrays() *UpdateComputeTrayFirmwareTarget { - if x != nil { - if x, ok := x.Target.(*UpdateComponentFirmwareRequest_ComputeTrays); ok { - return x.ComputeTrays - } +func (x *CreateOperatingSystemRequest) GetIpxeScript() string { + if x != nil && x.IpxeScript != nil { + return *x.IpxeScript } - return nil + return "" } -func (x *UpdateComponentFirmwareRequest) GetSwitches() *UpdateSwitchFirmwareTarget { +func (x *CreateOperatingSystemRequest) GetIpxeTemplateId() *IpxeTemplateId { if x != nil { - if x, ok := x.Target.(*UpdateComponentFirmwareRequest_Switches); ok { - return x.Switches - } + return x.IpxeTemplateId } return nil } -func (x *UpdateComponentFirmwareRequest) GetPowerShelves() *UpdatePowerShelfFirmwareTarget { +func (x *CreateOperatingSystemRequest) GetIpxeTemplateParameters() []*IpxeTemplateParameter { if x != nil { - if x, ok := x.Target.(*UpdateComponentFirmwareRequest_PowerShelves); ok { - return x.PowerShelves - } + return x.IpxeTemplateParameters } return nil } -func (x *UpdateComponentFirmwareRequest) GetTargetVersion() string { +func (x *CreateOperatingSystemRequest) GetIpxeTemplateArtifacts() []*IpxeTemplateArtifact { if x != nil { - return x.TargetVersion + return x.IpxeTemplateArtifacts } - return "" + return nil } -type isUpdateComponentFirmwareRequest_Target interface { - isUpdateComponentFirmwareRequest_Target() +// Wrapper for repeated IpxeTemplateParameter so that an optional field can distinguish +// "not provided" (keep existing) from "provided but empty" (clear the list). +type IpxeTemplateParameters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*IpxeTemplateParameter `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type UpdateComponentFirmwareRequest_ComputeTrays struct { - ComputeTrays *UpdateComputeTrayFirmwareTarget `protobuf:"bytes,1,opt,name=compute_trays,json=computeTrays,proto3,oneof"` +func (x *IpxeTemplateParameters) Reset() { + *x = IpxeTemplateParameters{} + mi := &file_forge_carbide_proto_msgTypes[741] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type UpdateComponentFirmwareRequest_Switches struct { - Switches *UpdateSwitchFirmwareTarget `protobuf:"bytes,2,opt,name=switches,proto3,oneof"` +func (x *IpxeTemplateParameters) String() string { + return protoimpl.X.MessageStringOf(x) } -type UpdateComponentFirmwareRequest_PowerShelves struct { - PowerShelves *UpdatePowerShelfFirmwareTarget `protobuf:"bytes,3,opt,name=power_shelves,json=powerShelves,proto3,oneof"` -} +func (*IpxeTemplateParameters) ProtoMessage() {} -func (*UpdateComponentFirmwareRequest_ComputeTrays) isUpdateComponentFirmwareRequest_Target() {} +func (x *IpxeTemplateParameters) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[741] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} -func (*UpdateComponentFirmwareRequest_Switches) isUpdateComponentFirmwareRequest_Target() {} +// Deprecated: Use IpxeTemplateParameters.ProtoReflect.Descriptor instead. +func (*IpxeTemplateParameters) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{741} +} -func (*UpdateComponentFirmwareRequest_PowerShelves) isUpdateComponentFirmwareRequest_Target() {} +func (x *IpxeTemplateParameters) GetItems() []*IpxeTemplateParameter { + if x != nil { + return x.Items + } + return nil +} -type UpdateComponentFirmwareResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Results []*ComponentResult `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` +// Wrapper for repeated IpxeTemplateArtifact (same rationale as IpxeTemplateParameters). +type IpxeTemplateArtifacts struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*IpxeTemplateArtifact `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *UpdateComponentFirmwareResponse) Reset() { - *x = UpdateComponentFirmwareResponse{} - mi := &file_forge_carbide_proto_msgTypes[717] +func (x *IpxeTemplateArtifacts) Reset() { + *x = IpxeTemplateArtifacts{} + mi := &file_forge_carbide_proto_msgTypes[742] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *UpdateComponentFirmwareResponse) String() string { +func (x *IpxeTemplateArtifacts) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateComponentFirmwareResponse) ProtoMessage() {} +func (*IpxeTemplateArtifacts) ProtoMessage() {} -func (x *UpdateComponentFirmwareResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[717] +func (x *IpxeTemplateArtifacts) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[742] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47710,45 +49910,51 @@ func (x *UpdateComponentFirmwareResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateComponentFirmwareResponse.ProtoReflect.Descriptor instead. -func (*UpdateComponentFirmwareResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{717} +// Deprecated: Use IpxeTemplateArtifacts.ProtoReflect.Descriptor instead. +func (*IpxeTemplateArtifacts) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{742} } -func (x *UpdateComponentFirmwareResponse) GetResults() []*ComponentResult { +func (x *IpxeTemplateArtifacts) GetItems() []*IpxeTemplateArtifact { if x != nil { - return x.Results + return x.Items } return nil } -type GetComponentFirmwareStatusRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Types that are valid to be assigned to Target: - // - // *GetComponentFirmwareStatusRequest_MachineIds - // *GetComponentFirmwareStatusRequest_SwitchIds - // *GetComponentFirmwareStatusRequest_PowerShelfIds - Target isGetComponentFirmwareStatusRequest_Target `protobuf_oneof:"target"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type UpdateOperatingSystemRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id *OperatingSystemId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name,proto3,oneof" json:"name,omitempty"` + Description *string `protobuf:"bytes,3,opt,name=description,proto3,oneof" json:"description,omitempty"` + IsActive *bool `protobuf:"varint,4,opt,name=is_active,json=isActive,proto3,oneof" json:"is_active,omitempty"` + AllowOverride *bool `protobuf:"varint,5,opt,name=allow_override,json=allowOverride,proto3,oneof" json:"allow_override,omitempty"` + PhoneHomeEnabled *bool `protobuf:"varint,6,opt,name=phone_home_enabled,json=phoneHomeEnabled,proto3,oneof" json:"phone_home_enabled,omitempty"` + UserData *string `protobuf:"bytes,7,opt,name=user_data,json=userData,proto3,oneof" json:"user_data,omitempty"` + IpxeScript *string `protobuf:"bytes,20,opt,name=ipxe_script,json=ipxeScript,proto3,oneof" json:"ipxe_script,omitempty"` + IpxeTemplateId *IpxeTemplateId `protobuf:"bytes,22,opt,name=ipxe_template_id,json=ipxeTemplateId,proto3,oneof" json:"ipxe_template_id,omitempty"` + IpxeTemplateParameters *IpxeTemplateParameters `protobuf:"bytes,23,opt,name=ipxe_template_parameters,json=ipxeTemplateParameters,proto3,oneof" json:"ipxe_template_parameters,omitempty"` + IpxeTemplateArtifacts *IpxeTemplateArtifacts `protobuf:"bytes,24,opt,name=ipxe_template_artifacts,json=ipxeTemplateArtifacts,proto3,oneof" json:"ipxe_template_artifacts,omitempty"` + IpxeTemplateDefinitionHash *string `protobuf:"bytes,25,opt,name=ipxe_template_definition_hash,json=ipxeTemplateDefinitionHash,proto3,oneof" json:"ipxe_template_definition_hash,omitempty"` // if provided, used as-is; otherwise recomputed + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *GetComponentFirmwareStatusRequest) Reset() { - *x = GetComponentFirmwareStatusRequest{} - mi := &file_forge_carbide_proto_msgTypes[718] +func (x *UpdateOperatingSystemRequest) Reset() { + *x = UpdateOperatingSystemRequest{} + mi := &file_forge_carbide_proto_msgTypes[743] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *GetComponentFirmwareStatusRequest) String() string { +func (x *UpdateOperatingSystemRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetComponentFirmwareStatusRequest) ProtoMessage() {} +func (*UpdateOperatingSystemRequest) ProtoMessage() {} -func (x *GetComponentFirmwareStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[718] +func (x *UpdateOperatingSystemRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[743] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47759,90 +49965,117 @@ func (x *GetComponentFirmwareStatusRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use GetComponentFirmwareStatusRequest.ProtoReflect.Descriptor instead. -func (*GetComponentFirmwareStatusRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{718} +// Deprecated: Use UpdateOperatingSystemRequest.ProtoReflect.Descriptor instead. +func (*UpdateOperatingSystemRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{743} } -func (x *GetComponentFirmwareStatusRequest) GetTarget() isGetComponentFirmwareStatusRequest_Target { +func (x *UpdateOperatingSystemRequest) GetId() *OperatingSystemId { if x != nil { - return x.Target + return x.Id } return nil } -func (x *GetComponentFirmwareStatusRequest) GetMachineIds() *MachineIdList { - if x != nil { - if x, ok := x.Target.(*GetComponentFirmwareStatusRequest_MachineIds); ok { - return x.MachineIds - } +func (x *UpdateOperatingSystemRequest) GetName() string { + if x != nil && x.Name != nil { + return *x.Name } - return nil + return "" } -func (x *GetComponentFirmwareStatusRequest) GetSwitchIds() *SwitchIdList { - if x != nil { - if x, ok := x.Target.(*GetComponentFirmwareStatusRequest_SwitchIds); ok { - return x.SwitchIds - } +func (x *UpdateOperatingSystemRequest) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description } - return nil + return "" } -func (x *GetComponentFirmwareStatusRequest) GetPowerShelfIds() *PowerShelfIdList { - if x != nil { - if x, ok := x.Target.(*GetComponentFirmwareStatusRequest_PowerShelfIds); ok { - return x.PowerShelfIds - } +func (x *UpdateOperatingSystemRequest) GetIsActive() bool { + if x != nil && x.IsActive != nil { + return *x.IsActive } - return nil + return false } -type isGetComponentFirmwareStatusRequest_Target interface { - isGetComponentFirmwareStatusRequest_Target() +func (x *UpdateOperatingSystemRequest) GetAllowOverride() bool { + if x != nil && x.AllowOverride != nil { + return *x.AllowOverride + } + return false } -type GetComponentFirmwareStatusRequest_MachineIds struct { - MachineIds *MachineIdList `protobuf:"bytes,1,opt,name=machine_ids,json=machineIds,proto3,oneof"` +func (x *UpdateOperatingSystemRequest) GetPhoneHomeEnabled() bool { + if x != nil && x.PhoneHomeEnabled != nil { + return *x.PhoneHomeEnabled + } + return false } -type GetComponentFirmwareStatusRequest_SwitchIds struct { - SwitchIds *SwitchIdList `protobuf:"bytes,2,opt,name=switch_ids,json=switchIds,proto3,oneof"` +func (x *UpdateOperatingSystemRequest) GetUserData() string { + if x != nil && x.UserData != nil { + return *x.UserData + } + return "" } -type GetComponentFirmwareStatusRequest_PowerShelfIds struct { - PowerShelfIds *PowerShelfIdList `protobuf:"bytes,3,opt,name=power_shelf_ids,json=powerShelfIds,proto3,oneof"` +func (x *UpdateOperatingSystemRequest) GetIpxeScript() string { + if x != nil && x.IpxeScript != nil { + return *x.IpxeScript + } + return "" } -func (*GetComponentFirmwareStatusRequest_MachineIds) isGetComponentFirmwareStatusRequest_Target() {} +func (x *UpdateOperatingSystemRequest) GetIpxeTemplateId() *IpxeTemplateId { + if x != nil { + return x.IpxeTemplateId + } + return nil +} -func (*GetComponentFirmwareStatusRequest_SwitchIds) isGetComponentFirmwareStatusRequest_Target() {} +func (x *UpdateOperatingSystemRequest) GetIpxeTemplateParameters() *IpxeTemplateParameters { + if x != nil { + return x.IpxeTemplateParameters + } + return nil +} -func (*GetComponentFirmwareStatusRequest_PowerShelfIds) isGetComponentFirmwareStatusRequest_Target() { +func (x *UpdateOperatingSystemRequest) GetIpxeTemplateArtifacts() *IpxeTemplateArtifacts { + if x != nil { + return x.IpxeTemplateArtifacts + } + return nil } -type GetComponentFirmwareStatusResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Statuses []*FirmwareUpdateStatus `protobuf:"bytes,1,rep,name=statuses,proto3" json:"statuses,omitempty"` +func (x *UpdateOperatingSystemRequest) GetIpxeTemplateDefinitionHash() string { + if x != nil && x.IpxeTemplateDefinitionHash != nil { + return *x.IpxeTemplateDefinitionHash + } + return "" +} + +type DeleteOperatingSystemRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id *OperatingSystemId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *GetComponentFirmwareStatusResponse) Reset() { - *x = GetComponentFirmwareStatusResponse{} - mi := &file_forge_carbide_proto_msgTypes[719] +func (x *DeleteOperatingSystemRequest) Reset() { + *x = DeleteOperatingSystemRequest{} + mi := &file_forge_carbide_proto_msgTypes[744] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *GetComponentFirmwareStatusResponse) String() string { +func (x *DeleteOperatingSystemRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetComponentFirmwareStatusResponse) ProtoMessage() {} +func (*DeleteOperatingSystemRequest) ProtoMessage() {} -func (x *GetComponentFirmwareStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[719] +func (x *DeleteOperatingSystemRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[744] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47853,45 +50086,39 @@ func (x *GetComponentFirmwareStatusResponse) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use GetComponentFirmwareStatusResponse.ProtoReflect.Descriptor instead. -func (*GetComponentFirmwareStatusResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{719} +// Deprecated: Use DeleteOperatingSystemRequest.ProtoReflect.Descriptor instead. +func (*DeleteOperatingSystemRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{744} } -func (x *GetComponentFirmwareStatusResponse) GetStatuses() []*FirmwareUpdateStatus { +func (x *DeleteOperatingSystemRequest) GetId() *OperatingSystemId { if x != nil { - return x.Statuses + return x.Id } return nil } -type ListComponentFirmwareVersionsRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Types that are valid to be assigned to Target: - // - // *ListComponentFirmwareVersionsRequest_MachineIds - // *ListComponentFirmwareVersionsRequest_SwitchIds - // *ListComponentFirmwareVersionsRequest_PowerShelfIds - Target isListComponentFirmwareVersionsRequest_Target `protobuf_oneof:"target"` +type DeleteOperatingSystemResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListComponentFirmwareVersionsRequest) Reset() { - *x = ListComponentFirmwareVersionsRequest{} - mi := &file_forge_carbide_proto_msgTypes[720] +func (x *DeleteOperatingSystemResponse) Reset() { + *x = DeleteOperatingSystemResponse{} + mi := &file_forge_carbide_proto_msgTypes[745] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListComponentFirmwareVersionsRequest) String() string { +func (x *DeleteOperatingSystemResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListComponentFirmwareVersionsRequest) ProtoMessage() {} +func (*DeleteOperatingSystemResponse) ProtoMessage() {} -func (x *ListComponentFirmwareVersionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[720] +func (x *DeleteOperatingSystemResponse) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[745] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47902,93 +50129,121 @@ func (x *ListComponentFirmwareVersionsRequest) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use ListComponentFirmwareVersionsRequest.ProtoReflect.Descriptor instead. -func (*ListComponentFirmwareVersionsRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{720} +// Deprecated: Use DeleteOperatingSystemResponse.ProtoReflect.Descriptor instead. +func (*DeleteOperatingSystemResponse) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{745} } -func (x *ListComponentFirmwareVersionsRequest) GetTarget() isListComponentFirmwareVersionsRequest_Target { - if x != nil { - return x.Target - } - return nil +type OperatingSystemSearchFilter struct { + state protoimpl.MessageState `protogen:"open.v1"` + TenantOrganizationId *string `protobuf:"bytes,1,opt,name=tenant_organization_id,json=tenantOrganizationId,proto3,oneof" json:"tenant_organization_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListComponentFirmwareVersionsRequest) GetMachineIds() *MachineIdList { - if x != nil { - if x, ok := x.Target.(*ListComponentFirmwareVersionsRequest_MachineIds); ok { - return x.MachineIds - } - } - return nil +func (x *OperatingSystemSearchFilter) Reset() { + *x = OperatingSystemSearchFilter{} + mi := &file_forge_carbide_proto_msgTypes[746] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListComponentFirmwareVersionsRequest) GetSwitchIds() *SwitchIdList { - if x != nil { - if x, ok := x.Target.(*ListComponentFirmwareVersionsRequest_SwitchIds); ok { - return x.SwitchIds - } - } - return nil +func (x *OperatingSystemSearchFilter) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ListComponentFirmwareVersionsRequest) GetPowerShelfIds() *PowerShelfIdList { +func (*OperatingSystemSearchFilter) ProtoMessage() {} + +func (x *OperatingSystemSearchFilter) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[746] if x != nil { - if x, ok := x.Target.(*ListComponentFirmwareVersionsRequest_PowerShelfIds); ok { - return x.PowerShelfIds + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return nil + return mi.MessageOf(x) } -type isListComponentFirmwareVersionsRequest_Target interface { - isListComponentFirmwareVersionsRequest_Target() +// Deprecated: Use OperatingSystemSearchFilter.ProtoReflect.Descriptor instead. +func (*OperatingSystemSearchFilter) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{746} } -type ListComponentFirmwareVersionsRequest_MachineIds struct { - MachineIds *MachineIdList `protobuf:"bytes,1,opt,name=machine_ids,json=machineIds,proto3,oneof"` +func (x *OperatingSystemSearchFilter) GetTenantOrganizationId() string { + if x != nil && x.TenantOrganizationId != nil { + return *x.TenantOrganizationId + } + return "" } -type ListComponentFirmwareVersionsRequest_SwitchIds struct { - SwitchIds *SwitchIdList `protobuf:"bytes,2,opt,name=switch_ids,json=switchIds,proto3,oneof"` +type OperatingSystemIdList struct { + state protoimpl.MessageState `protogen:"open.v1"` + Ids []*OperatingSystemId `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type ListComponentFirmwareVersionsRequest_PowerShelfIds struct { - PowerShelfIds *PowerShelfIdList `protobuf:"bytes,3,opt,name=power_shelf_ids,json=powerShelfIds,proto3,oneof"` +func (x *OperatingSystemIdList) Reset() { + *x = OperatingSystemIdList{} + mi := &file_forge_carbide_proto_msgTypes[747] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (*ListComponentFirmwareVersionsRequest_MachineIds) isListComponentFirmwareVersionsRequest_Target() { +func (x *OperatingSystemIdList) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*ListComponentFirmwareVersionsRequest_SwitchIds) isListComponentFirmwareVersionsRequest_Target() { +func (*OperatingSystemIdList) ProtoMessage() {} + +func (x *OperatingSystemIdList) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[747] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (*ListComponentFirmwareVersionsRequest_PowerShelfIds) isListComponentFirmwareVersionsRequest_Target() { +// Deprecated: Use OperatingSystemIdList.ProtoReflect.Descriptor instead. +func (*OperatingSystemIdList) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{747} } -type DeviceFirmwareVersions struct { +func (x *OperatingSystemIdList) GetIds() []*OperatingSystemId { + if x != nil { + return x.Ids + } + return nil +} + +type OperatingSystemsByIdsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - Result *ComponentResult `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` - Versions []string `protobuf:"bytes,2,rep,name=versions,proto3" json:"versions,omitempty"` + Ids []*OperatingSystemId `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *DeviceFirmwareVersions) Reset() { - *x = DeviceFirmwareVersions{} - mi := &file_forge_carbide_proto_msgTypes[721] +func (x *OperatingSystemsByIdsRequest) Reset() { + *x = OperatingSystemsByIdsRequest{} + mi := &file_forge_carbide_proto_msgTypes[748] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *DeviceFirmwareVersions) String() string { +func (x *OperatingSystemsByIdsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeviceFirmwareVersions) ProtoMessage() {} +func (*OperatingSystemsByIdsRequest) ProtoMessage() {} -func (x *DeviceFirmwareVersions) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[721] +func (x *OperatingSystemsByIdsRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[748] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -47999,47 +50254,40 @@ func (x *DeviceFirmwareVersions) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeviceFirmwareVersions.ProtoReflect.Descriptor instead. -func (*DeviceFirmwareVersions) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{721} -} - -func (x *DeviceFirmwareVersions) GetResult() *ComponentResult { - if x != nil { - return x.Result - } - return nil +// Deprecated: Use OperatingSystemsByIdsRequest.ProtoReflect.Descriptor instead. +func (*OperatingSystemsByIdsRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{748} } -func (x *DeviceFirmwareVersions) GetVersions() []string { +func (x *OperatingSystemsByIdsRequest) GetIds() []*OperatingSystemId { if x != nil { - return x.Versions + return x.Ids } return nil } -type ListComponentFirmwareVersionsResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Devices []*DeviceFirmwareVersions `protobuf:"bytes,1,rep,name=devices,proto3" json:"devices,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type OperatingSystemList struct { + state protoimpl.MessageState `protogen:"open.v1"` + OperatingSystems []*OperatingSystem `protobuf:"bytes,1,rep,name=operating_systems,json=operatingSystems,proto3" json:"operating_systems,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListComponentFirmwareVersionsResponse) Reset() { - *x = ListComponentFirmwareVersionsResponse{} - mi := &file_forge_carbide_proto_msgTypes[722] +func (x *OperatingSystemList) Reset() { + *x = OperatingSystemList{} + mi := &file_forge_carbide_proto_msgTypes[749] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListComponentFirmwareVersionsResponse) String() string { +func (x *OperatingSystemList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListComponentFirmwareVersionsResponse) ProtoMessage() {} +func (*OperatingSystemList) ProtoMessage() {} -func (x *ListComponentFirmwareVersionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[722] +func (x *OperatingSystemList) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[749] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48050,44 +50298,40 @@ func (x *ListComponentFirmwareVersionsResponse) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ListComponentFirmwareVersionsResponse.ProtoReflect.Descriptor instead. -func (*ListComponentFirmwareVersionsResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{722} +// Deprecated: Use OperatingSystemList.ProtoReflect.Descriptor instead. +func (*OperatingSystemList) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{749} } -func (x *ListComponentFirmwareVersionsResponse) GetDevices() []*DeviceFirmwareVersions { +func (x *OperatingSystemList) GetOperatingSystems() []*OperatingSystem { if x != nil { - return x.Devices + return x.OperatingSystems } return nil } -// Force deletes a Switch and optionally its associated interfaces. -type AdminForceDeleteSwitchRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The Switch ID to force delete. - SwitchId *SwitchId `protobuf:"bytes,1,opt,name=switch_id,json=switchId,proto3" json:"switch_id,omitempty"` - // Should we delete the machine interfaces associated with this switch? - DeleteInterfaces bool `protobuf:"varint,2,opt,name=delete_interfaces,json=deleteInterfaces,proto3" json:"delete_interfaces,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type GetOperatingSystemCachableIpxeTemplateArtifactsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id *OperatingSystemId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AdminForceDeleteSwitchRequest) Reset() { - *x = AdminForceDeleteSwitchRequest{} - mi := &file_forge_carbide_proto_msgTypes[723] +func (x *GetOperatingSystemCachableIpxeTemplateArtifactsRequest) Reset() { + *x = GetOperatingSystemCachableIpxeTemplateArtifactsRequest{} + mi := &file_forge_carbide_proto_msgTypes[750] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *AdminForceDeleteSwitchRequest) String() string { +func (x *GetOperatingSystemCachableIpxeTemplateArtifactsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AdminForceDeleteSwitchRequest) ProtoMessage() {} +func (*GetOperatingSystemCachableIpxeTemplateArtifactsRequest) ProtoMessage() {} -func (x *AdminForceDeleteSwitchRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[723] +func (x *GetOperatingSystemCachableIpxeTemplateArtifactsRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[750] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48098,50 +50342,40 @@ func (x *AdminForceDeleteSwitchRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AdminForceDeleteSwitchRequest.ProtoReflect.Descriptor instead. -func (*AdminForceDeleteSwitchRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{723} +// Deprecated: Use GetOperatingSystemCachableIpxeTemplateArtifactsRequest.ProtoReflect.Descriptor instead. +func (*GetOperatingSystemCachableIpxeTemplateArtifactsRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{750} } -func (x *AdminForceDeleteSwitchRequest) GetSwitchId() *SwitchId { +func (x *GetOperatingSystemCachableIpxeTemplateArtifactsRequest) GetId() *OperatingSystemId { if x != nil { - return x.SwitchId + return x.Id } return nil } -func (x *AdminForceDeleteSwitchRequest) GetDeleteInterfaces() bool { - if x != nil { - return x.DeleteInterfaces - } - return false -} - -type AdminForceDeleteSwitchResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The ID of the switch that was deleted. - SwitchId string `protobuf:"bytes,1,opt,name=switch_id,json=switchId,proto3" json:"switch_id,omitempty"` - // Number of interfaces deleted. - InterfacesDeleted uint32 `protobuf:"varint,2,opt,name=interfaces_deleted,json=interfacesDeleted,proto3" json:"interfaces_deleted,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type IpxeTemplateArtifactList struct { + state protoimpl.MessageState `protogen:"open.v1"` + Artifacts []*IpxeTemplateArtifact `protobuf:"bytes,1,rep,name=artifacts,proto3" json:"artifacts,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AdminForceDeleteSwitchResponse) Reset() { - *x = AdminForceDeleteSwitchResponse{} - mi := &file_forge_carbide_proto_msgTypes[724] +func (x *IpxeTemplateArtifactList) Reset() { + *x = IpxeTemplateArtifactList{} + mi := &file_forge_carbide_proto_msgTypes[751] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *AdminForceDeleteSwitchResponse) String() string { +func (x *IpxeTemplateArtifactList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AdminForceDeleteSwitchResponse) ProtoMessage() {} +func (*IpxeTemplateArtifactList) ProtoMessage() {} -func (x *AdminForceDeleteSwitchResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[724] +func (x *IpxeTemplateArtifactList) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[751] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48152,51 +50386,43 @@ func (x *AdminForceDeleteSwitchResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AdminForceDeleteSwitchResponse.ProtoReflect.Descriptor instead. -func (*AdminForceDeleteSwitchResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{724} -} - -func (x *AdminForceDeleteSwitchResponse) GetSwitchId() string { - if x != nil { - return x.SwitchId - } - return "" +// Deprecated: Use IpxeTemplateArtifactList.ProtoReflect.Descriptor instead. +func (*IpxeTemplateArtifactList) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{751} } -func (x *AdminForceDeleteSwitchResponse) GetInterfacesDeleted() uint32 { +func (x *IpxeTemplateArtifactList) GetArtifacts() []*IpxeTemplateArtifact { if x != nil { - return x.InterfacesDeleted + return x.Artifacts } - return 0 + return nil } -// Force deletes a Power Shelf and optionally its associated interfaces. -type AdminForceDeletePowerShelfRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The Power Shelf ID to force delete. - PowerShelfId *PowerShelfId `protobuf:"bytes,1,opt,name=power_shelf_id,json=powerShelfId,proto3" json:"power_shelf_id,omitempty"` - // Should we delete the machine interfaces associated with this power shelf? - DeleteInterfaces bool `protobuf:"varint,2,opt,name=delete_interfaces,json=deleteInterfaces,proto3" json:"delete_interfaces,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +// A single (artifact name, cached_url) pair for UpdateOperatingSystemCachableIpxeTemplateArtifacts. +// cached_url is optional: absent means clear the cached_url on the matching artifact(s). +type IpxeTemplateArtifactUpdateRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + CachedUrl *string `protobuf:"bytes,2,opt,name=cached_url,json=cachedUrl,proto3,oneof" json:"cached_url,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AdminForceDeletePowerShelfRequest) Reset() { - *x = AdminForceDeletePowerShelfRequest{} - mi := &file_forge_carbide_proto_msgTypes[725] +func (x *IpxeTemplateArtifactUpdateRequest) Reset() { + *x = IpxeTemplateArtifactUpdateRequest{} + mi := &file_forge_carbide_proto_msgTypes[752] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *AdminForceDeletePowerShelfRequest) String() string { +func (x *IpxeTemplateArtifactUpdateRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AdminForceDeletePowerShelfRequest) ProtoMessage() {} +func (*IpxeTemplateArtifactUpdateRequest) ProtoMessage() {} -func (x *AdminForceDeletePowerShelfRequest) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[725] +func (x *IpxeTemplateArtifactUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[752] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48207,50 +50433,48 @@ func (x *AdminForceDeletePowerShelfRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use AdminForceDeletePowerShelfRequest.ProtoReflect.Descriptor instead. -func (*AdminForceDeletePowerShelfRequest) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{725} +// Deprecated: Use IpxeTemplateArtifactUpdateRequest.ProtoReflect.Descriptor instead. +func (*IpxeTemplateArtifactUpdateRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{752} } -func (x *AdminForceDeletePowerShelfRequest) GetPowerShelfId() *PowerShelfId { +func (x *IpxeTemplateArtifactUpdateRequest) GetName() string { if x != nil { - return x.PowerShelfId + return x.Name } - return nil + return "" } -func (x *AdminForceDeletePowerShelfRequest) GetDeleteInterfaces() bool { - if x != nil { - return x.DeleteInterfaces +func (x *IpxeTemplateArtifactUpdateRequest) GetCachedUrl() string { + if x != nil && x.CachedUrl != nil { + return *x.CachedUrl } - return false + return "" } -type AdminForceDeletePowerShelfResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - // The ID of the power shelf that was deleted. - PowerShelfId string `protobuf:"bytes,1,opt,name=power_shelf_id,json=powerShelfId,proto3" json:"power_shelf_id,omitempty"` - // Number of interfaces deleted. - InterfacesDeleted uint32 `protobuf:"varint,2,opt,name=interfaces_deleted,json=interfacesDeleted,proto3" json:"interfaces_deleted,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type UpdateOperatingSystemIpxeTemplateArtifactRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id *OperatingSystemId `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Updates []*IpxeTemplateArtifactUpdateRequest `protobuf:"bytes,2,rep,name=updates,proto3" json:"updates,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AdminForceDeletePowerShelfResponse) Reset() { - *x = AdminForceDeletePowerShelfResponse{} - mi := &file_forge_carbide_proto_msgTypes[726] +func (x *UpdateOperatingSystemIpxeTemplateArtifactRequest) Reset() { + *x = UpdateOperatingSystemIpxeTemplateArtifactRequest{} + mi := &file_forge_carbide_proto_msgTypes[753] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *AdminForceDeletePowerShelfResponse) String() string { +func (x *UpdateOperatingSystemIpxeTemplateArtifactRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AdminForceDeletePowerShelfResponse) ProtoMessage() {} +func (*UpdateOperatingSystemIpxeTemplateArtifactRequest) ProtoMessage() {} -func (x *AdminForceDeletePowerShelfResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[726] +func (x *UpdateOperatingSystemIpxeTemplateArtifactRequest) ProtoReflect() protoreflect.Message { + mi := &file_forge_carbide_proto_msgTypes[753] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48261,23 +50485,23 @@ func (x *AdminForceDeletePowerShelfResponse) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use AdminForceDeletePowerShelfResponse.ProtoReflect.Descriptor instead. -func (*AdminForceDeletePowerShelfResponse) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{726} +// Deprecated: Use UpdateOperatingSystemIpxeTemplateArtifactRequest.ProtoReflect.Descriptor instead. +func (*UpdateOperatingSystemIpxeTemplateArtifactRequest) Descriptor() ([]byte, []int) { + return file_forge_carbide_proto_rawDescGZIP(), []int{753} } -func (x *AdminForceDeletePowerShelfResponse) GetPowerShelfId() string { +func (x *UpdateOperatingSystemIpxeTemplateArtifactRequest) GetId() *OperatingSystemId { if x != nil { - return x.PowerShelfId + return x.Id } - return "" + return nil } -func (x *AdminForceDeletePowerShelfResponse) GetInterfacesDeleted() uint32 { +func (x *UpdateOperatingSystemIpxeTemplateArtifactRequest) GetUpdates() []*IpxeTemplateArtifactUpdateRequest { if x != nil { - return x.InterfacesDeleted + return x.Updates } - return 0 + return nil } type AttestationResponse_AttestationDeviceData struct { @@ -48292,7 +50516,7 @@ type AttestationResponse_AttestationDeviceData struct { func (x *AttestationResponse_AttestationDeviceData) Reset() { *x = AttestationResponse_AttestationDeviceData{} - mi := &file_forge_carbide_proto_msgTypes[727] + mi := &file_forge_carbide_proto_msgTypes[754] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48304,7 +50528,7 @@ func (x *AttestationResponse_AttestationDeviceData) String() string { func (*AttestationResponse_AttestationDeviceData) ProtoMessage() {} func (x *AttestationResponse_AttestationDeviceData) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[727] + mi := &file_forge_carbide_proto_msgTypes[754] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48365,7 +50589,7 @@ type AttestationResponse_AttestationMachineData struct { func (x *AttestationResponse_AttestationMachineData) Reset() { *x = AttestationResponse_AttestationMachineData{} - mi := &file_forge_carbide_proto_msgTypes[728] + mi := &file_forge_carbide_proto_msgTypes[755] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48377,7 +50601,7 @@ func (x *AttestationResponse_AttestationMachineData) String() string { func (*AttestationResponse_AttestationMachineData) ProtoMessage() {} func (x *AttestationResponse_AttestationMachineData) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[728] + mi := &file_forge_carbide_proto_msgTypes[755] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48467,7 +50691,7 @@ type DNSMessage_DNSQuestion struct { func (x *DNSMessage_DNSQuestion) Reset() { *x = DNSMessage_DNSQuestion{} - mi := &file_forge_carbide_proto_msgTypes[730] + mi := &file_forge_carbide_proto_msgTypes[757] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48479,7 +50703,7 @@ func (x *DNSMessage_DNSQuestion) String() string { func (*DNSMessage_DNSQuestion) ProtoMessage() {} func (x *DNSMessage_DNSQuestion) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[730] + mi := &file_forge_carbide_proto_msgTypes[757] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48525,7 +50749,7 @@ type DNSMessage_DNSResponse struct { func (x *DNSMessage_DNSResponse) Reset() { *x = DNSMessage_DNSResponse{} - mi := &file_forge_carbide_proto_msgTypes[731] + mi := &file_forge_carbide_proto_msgTypes[758] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48537,7 +50761,7 @@ func (x *DNSMessage_DNSResponse) String() string { func (*DNSMessage_DNSResponse) ProtoMessage() {} func (x *DNSMessage_DNSResponse) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[731] + mi := &file_forge_carbide_proto_msgTypes[758] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48569,7 +50793,7 @@ type DNSMessage_DNSResponse_DNSRR struct { func (x *DNSMessage_DNSResponse_DNSRR) Reset() { *x = DNSMessage_DNSResponse_DNSRR{} - mi := &file_forge_carbide_proto_msgTypes[732] + mi := &file_forge_carbide_proto_msgTypes[759] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48581,7 +50805,7 @@ func (x *DNSMessage_DNSResponse_DNSRR) String() string { func (*DNSMessage_DNSResponse_DNSRR) ProtoMessage() {} func (x *DNSMessage_DNSResponse_DNSRR) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[732] + mi := &file_forge_carbide_proto_msgTypes[759] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48615,7 +50839,7 @@ type MachineCredentialsUpdateRequest_Credentials struct { func (x *MachineCredentialsUpdateRequest_Credentials) Reset() { *x = MachineCredentialsUpdateRequest_Credentials{} - mi := &file_forge_carbide_proto_msgTypes[738] + mi := &file_forge_carbide_proto_msgTypes[765] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48627,7 +50851,7 @@ func (x *MachineCredentialsUpdateRequest_Credentials) String() string { func (*MachineCredentialsUpdateRequest_Credentials) ProtoMessage() {} func (x *MachineCredentialsUpdateRequest_Credentials) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[738] + mi := &file_forge_carbide_proto_msgTypes[765] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48640,7 +50864,7 @@ func (x *MachineCredentialsUpdateRequest_Credentials) ProtoReflect() protoreflec // Deprecated: Use MachineCredentialsUpdateRequest_Credentials.ProtoReflect.Descriptor instead. func (*MachineCredentialsUpdateRequest_Credentials) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{295, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{298, 0} } func (x *MachineCredentialsUpdateRequest_Credentials) GetUser() string { @@ -48673,7 +50897,7 @@ type ForgeAgentControlResponse_ForgeAgentControlExtraInfo struct { func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo) Reset() { *x = ForgeAgentControlResponse_ForgeAgentControlExtraInfo{} - mi := &file_forge_carbide_proto_msgTypes[739] + mi := &file_forge_carbide_proto_msgTypes[766] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48685,7 +50909,7 @@ func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo) String() string { func (*ForgeAgentControlResponse_ForgeAgentControlExtraInfo) ProtoMessage() {} func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[739] + mi := &file_forge_carbide_proto_msgTypes[766] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48698,7 +50922,7 @@ func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo) ProtoReflect() pr // Deprecated: Use ForgeAgentControlResponse_ForgeAgentControlExtraInfo.ProtoReflect.Descriptor instead. func (*ForgeAgentControlResponse_ForgeAgentControlExtraInfo) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{298, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{301, 0} } func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo) GetPair() []*ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair { @@ -48718,7 +50942,7 @@ type ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair struct { func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair) Reset() { *x = ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair{} - mi := &file_forge_carbide_proto_msgTypes[740] + mi := &file_forge_carbide_proto_msgTypes[767] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48730,7 +50954,7 @@ func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair) Stri func (*ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair) ProtoMessage() {} func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[740] + mi := &file_forge_carbide_proto_msgTypes[767] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48743,7 +50967,7 @@ func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair) Prot // Deprecated: Use ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair.ProtoReflect.Descriptor instead. func (*ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{298, 0, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{301, 0, 0} } func (x *ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair) GetKey() string { @@ -48771,7 +50995,7 @@ type MachineCleanupInfo_CleanupStepResult struct { func (x *MachineCleanupInfo_CleanupStepResult) Reset() { *x = MachineCleanupInfo_CleanupStepResult{} - mi := &file_forge_carbide_proto_msgTypes[741] + mi := &file_forge_carbide_proto_msgTypes[768] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48783,7 +51007,7 @@ func (x *MachineCleanupInfo_CleanupStepResult) String() string { func (*MachineCleanupInfo_CleanupStepResult) ProtoMessage() {} func (x *MachineCleanupInfo_CleanupStepResult) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[741] + mi := &file_forge_carbide_proto_msgTypes[768] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48796,7 +51020,7 @@ func (x *MachineCleanupInfo_CleanupStepResult) ProtoReflect() protoreflect.Messa // Deprecated: Use MachineCleanupInfo_CleanupStepResult.ProtoReflect.Descriptor instead. func (*MachineCleanupInfo_CleanupStepResult) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{301, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{304, 0} } func (x *MachineCleanupInfo_CleanupStepResult) GetResult() MachineCleanupInfo_CleanupResult { @@ -48828,7 +51052,7 @@ type DpuReprovisioningListResponse_DpuReprovisioningListItem struct { func (x *DpuReprovisioningListResponse_DpuReprovisioningListItem) Reset() { *x = DpuReprovisioningListResponse_DpuReprovisioningListItem{} - mi := &file_forge_carbide_proto_msgTypes[742] + mi := &file_forge_carbide_proto_msgTypes[769] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48840,7 +51064,7 @@ func (x *DpuReprovisioningListResponse_DpuReprovisioningListItem) String() strin func (*DpuReprovisioningListResponse_DpuReprovisioningListItem) ProtoMessage() {} func (x *DpuReprovisioningListResponse_DpuReprovisioningListItem) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[742] + mi := &file_forge_carbide_proto_msgTypes[769] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48853,7 +51077,7 @@ func (x *DpuReprovisioningListResponse_DpuReprovisioningListItem) ProtoReflect() // Deprecated: Use DpuReprovisioningListResponse_DpuReprovisioningListItem.ProtoReflect.Descriptor instead. func (*DpuReprovisioningListResponse_DpuReprovisioningListItem) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{373, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{376, 0} } func (x *DpuReprovisioningListResponse_DpuReprovisioningListItem) GetId() *MachineId { @@ -48919,7 +51143,7 @@ type HostReprovisioningListResponse_HostReprovisioningListItem struct { func (x *HostReprovisioningListResponse_HostReprovisioningListItem) Reset() { *x = HostReprovisioningListResponse_HostReprovisioningListItem{} - mi := &file_forge_carbide_proto_msgTypes[743] + mi := &file_forge_carbide_proto_msgTypes[770] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -48931,7 +51155,7 @@ func (x *HostReprovisioningListResponse_HostReprovisioningListItem) String() str func (*HostReprovisioningListResponse_HostReprovisioningListItem) ProtoMessage() {} func (x *HostReprovisioningListResponse_HostReprovisioningListItem) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[743] + mi := &file_forge_carbide_proto_msgTypes[770] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -48944,7 +51168,7 @@ func (x *HostReprovisioningListResponse_HostReprovisioningListItem) ProtoReflect // Deprecated: Use HostReprovisioningListResponse_HostReprovisioningListItem.ProtoReflect.Descriptor instead. func (*HostReprovisioningListResponse_HostReprovisioningListItem) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{376, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{379, 0} } func (x *HostReprovisioningListResponse_HostReprovisioningListItem) GetId() *MachineId { @@ -49015,7 +51239,7 @@ type MachineValidationTestUpdateRequest_Payload struct { func (x *MachineValidationTestUpdateRequest_Payload) Reset() { *x = MachineValidationTestUpdateRequest_Payload{} - mi := &file_forge_carbide_proto_msgTypes[744] + mi := &file_forge_carbide_proto_msgTypes[771] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -49027,7 +51251,7 @@ func (x *MachineValidationTestUpdateRequest_Payload) String() string { func (*MachineValidationTestUpdateRequest_Payload) ProtoMessage() {} func (x *MachineValidationTestUpdateRequest_Payload) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[744] + mi := &file_forge_carbide_proto_msgTypes[771] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -49040,7 +51264,7 @@ func (x *MachineValidationTestUpdateRequest_Payload) ProtoReflect() protoreflect // Deprecated: Use MachineValidationTestUpdateRequest_Payload.ProtoReflect.Descriptor instead. func (*MachineValidationTestUpdateRequest_Payload) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{445, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{451, 0} } func (x *MachineValidationTestUpdateRequest_Payload) GetName() string { @@ -49180,7 +51404,7 @@ type DPFStateResponse_DPFState struct { func (x *DPFStateResponse_DPFState) Reset() { *x = DPFStateResponse_DPFState{} - mi := &file_forge_carbide_proto_msgTypes[752] + mi := &file_forge_carbide_proto_msgTypes[779] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -49192,7 +51416,7 @@ func (x *DPFStateResponse_DPFState) String() string { func (*DPFStateResponse_DPFState) ProtoMessage() {} func (x *DPFStateResponse_DPFState) ProtoReflect() protoreflect.Message { - mi := &file_forge_carbide_proto_msgTypes[752] + mi := &file_forge_carbide_proto_msgTypes[779] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -49205,7 +51429,7 @@ func (x *DPFStateResponse_DPFState) ProtoReflect() protoreflect.Message { // Deprecated: Use DPFStateResponse_DPFState.ProtoReflect.Descriptor instead. func (*DPFStateResponse_DPFState) Descriptor() ([]byte, []int) { - return file_forge_carbide_proto_rawDescGZIP(), []int{702, 0} + return file_forge_carbide_proto_rawDescGZIP(), []int{714, 0} } func (x *DPFStateResponse_DPFState) GetMachineId() *MachineId { @@ -49530,7 +51754,7 @@ const file_forge_carbide_proto_rawDesc = "" + "\x15_tenantOrganizationId\"*\n" + "\tVpcStatus\x12\x15\n" + "\x03vni\x18\x01 \x01(\rH\x00R\x03vni\x88\x01\x01B\x06\n" + - "\x04_vni\"\x81\b\n" + + "\x04_vni\"\xb1\a\n" + "\x03Vpc\x12\x1d\n" + "\x02id\x18\x01 \x01(\v2\r.common.VpcIdR\x02id\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x122\n" + @@ -49547,16 +51771,14 @@ const file_forge_carbide_proto_rawDesc = "" + "\x19network_security_group_id\x18\v \x01(\tH\x03R\x16networkSecurityGroupId\x88\x01\x01\x12s\n" + "#default_nvlink_logical_partition_id\x18\r \x01(\v2 .common.NVLinkLogicalPartitionIdH\x04R\x1fdefaultNvlinkLogicalPartitionId\x88\x01\x01\x12-\n" + "\x06status\x18\x0e \x01(\v2\x10.forge.VpcStatusH\x05R\x06status\x88\x01\x01\x12\x15\n" + - "\x03vni\x18\x0f \x01(\rH\x06R\x03vni\x88\x01\x01\x125\n" + - "\x14routing_profile_type\x18\x10 \x01(\tH\aR\x12routingProfileType\x88\x01\x01B\x11\n" + + "\x03vni\x18\x0f \x01(\rH\x06R\x03vni\x88\x01\x01B\x11\n" + "\x0f_tenantKeysetIdB\x11\n" + "\x0f_deprecated_vniB\x1e\n" + "\x1c_network_virtualization_typeB\x1c\n" + "\x1a_network_security_group_idB&\n" + "$_default_nvlink_logical_partition_idB\t\n" + "\a_statusB\x06\n" + - "\x04_vniB\x17\n" + - "\x15_routing_profile_typeJ\x04\b\f\x10\r\"\xe7\x05\n" + + "\x04_vniJ\x04\b\f\x10\r\"\xfc\x05\n" + "\x12VpcCreationRequest\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x122\n" + "\x14tenantOrganizationId\x18\x03 \x01(\tR\x14tenantOrganizationId\x12+\n" + @@ -49566,15 +51788,15 @@ const file_forge_carbide_proto_rawDesc = "" + "\bmetadata\x18\f \x01(\v2\x0f.forge.MetadataR\bmetadata\x12>\n" + "\x19network_security_group_id\x18\r \x01(\tH\x03R\x16networkSecurityGroupId\x88\x01\x01\x12s\n" + "#default_nvlink_logical_partition_id\x18\x0e \x01(\v2 .common.NVLinkLogicalPartitionIdH\x04R\x1fdefaultNvlinkLogicalPartitionId\x88\x01\x01\x12\x15\n" + - "\x03vni\x18\x0f \x01(\rH\x05R\x03vni\x88\x01\x01\x125\n" + - "\x14routing_profile_type\x18\x11 \x01(\tH\x06R\x12routingProfileType\x88\x01\x01B\x11\n" + + "\x03vni\x18\x0f \x01(\rH\x05R\x03vni\x88\x01\x01\x12P\n" + + "\x14routing_profile_type\x18\x10 \x01(\x0e2\x19.forge.RoutingProfileTypeH\x06R\x12routingProfileType\x88\x01\x01B\x11\n" + "\x0f_tenantKeysetIdB\x1e\n" + "\x1c_network_virtualization_typeB\x05\n" + "\x03_idB\x1c\n" + "\x1a_network_security_group_idB&\n" + "$_default_nvlink_logical_partition_idB\x06\n" + "\x04_vniB\x17\n" + - "\x15_routing_profile_typeJ\x04\b\x10\x10\x11\"\xbd\x03\n" + + "\x15_routing_profile_type\"\xbd\x03\n" + "\x10VpcUpdateRequest\x12\x1d\n" + "\x02id\x18\x01 \x01(\v2\r.common.VpcIdR\x02id\x12-\n" + "\x10if_version_match\x18\x02 \x01(\tH\x00R\x0eifVersionMatch\x88\x01\x01\x12\x12\n" + @@ -49755,7 +51977,7 @@ const file_forge_carbide_proto_rawDesc = "" + "\v_shelf_nameB\x0e\n" + "\f_power_stateB\x10\n" + "\x0e_health_statusB\x13\n" + - "\x11_controller_state\"\x9d\x03\n" + + "\x11_controller_state\"\xd7\x03\n" + "\n" + "PowerShelf\x12$\n" + "\x02id\x18\x01 \x01(\v2\x14.common.PowerShelfIdR\x02id\x12/\n" + @@ -49766,9 +51988,13 @@ const file_forge_carbide_proto_rawDesc = "" + "\bmetadata\x18\x06 \x01(\v2\x0f.forge.MetadataR\bmetadata\x12\x18\n" + "\aversion\x18\a \x01(\tR\aversion\x12)\n" + "\bbmc_info\x18\b \x01(\v2\x0e.forge.BmcInfoR\abmcInfo\x12#\n" + - "\rstate_version\x18\t \x01(\tR\fstateVersionB\n" + + "\rstate_version\x18\t \x01(\tR\fstateVersion\x12,\n" + + "\arack_id\x18\n" + + " \x01(\v2\x0e.common.RackIdH\x01R\x06rackId\x88\x01\x01B\n" + "\n" + - "\b_deleted\"H\n" + + "\b_deletedB\n" + + "\n" + + "\b_rack_id\"H\n" + "\x0ePowerShelfList\x126\n" + "\rpower_shelves\x18\x01 \x03(\v2\x11.forge.PowerShelfR\fpowerShelves\"~\n" + "\x19PowerShelfCreationRequest\x12/\n" + @@ -49883,7 +52109,7 @@ const file_forge_carbide_proto_rawDesc = "" + "\f_switch_nameB\x0e\n" + "\f_power_stateB\x10\n" + "\x0e_health_statusB\x13\n" + - "\x11_controller_state\"\x8d\x03\n" + + "\x11_controller_state\"\xc7\x03\n" + "\x06Switch\x12 \n" + "\x02id\x18\x01 \x01(\v2\x10.common.SwitchIdR\x02id\x12+\n" + "\x06config\x18\x02 \x01(\v2\x13.forge.SwitchConfigR\x06config\x12+\n" + @@ -49893,9 +52119,13 @@ const file_forge_carbide_proto_rawDesc = "" + "\bbmc_info\x18\x06 \x01(\v2\x0e.forge.BmcInfoR\abmcInfo\x12#\n" + "\rstate_version\x18\a \x01(\tR\fstateVersion\x12+\n" + "\bmetadata\x18\b \x01(\v2\x0f.forge.MetadataR\bmetadata\x12\x18\n" + - "\aversion\x18\t \x01(\tR\aversionB\n" + + "\aversion\x18\t \x01(\tR\aversion\x12,\n" + + "\arack_id\x18\n" + + " \x01(\v2\x0e.common.RackIdH\x01R\x06rackId\x88\x01\x01B\n" + "\n" + - "\b_deleted\"7\n" + + "\b_deletedB\n" + + "\n" + + "\b_rack_id\"7\n" + "\n" + "SwitchList\x12)\n" + "\bswitches\x18\x01 \x03(\v2\r.forge.SwitchR\bswitches\"n\n" + @@ -50120,15 +52350,43 @@ const file_forge_carbide_proto_rawDesc = "" + "\x1eBatchInstanceAllocationRequest\x12M\n" + "\x11instance_requests\x18\x01 \x03(\v2 .forge.InstanceAllocationRequestR\x10instanceRequests\"P\n" + "\x1fBatchInstanceAllocationResponse\x12-\n" + - "\tinstances\x18\x01 \x03(\v2\x0f.forge.InstanceR\tinstances\"\xb4\x01\n" + + "\tinstances\x18\x01 \x03(\v2\x0f.forge.InstanceR\tinstances\"A\n" + + "\x15IpxeTemplateParameter\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"\xc2\x02\n" + + "\x14IpxeTemplateArtifact\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x10\n" + + "\x03url\x18\x02 \x01(\tR\x03url\x12\x15\n" + + "\x03sha\x18\x03 \x01(\tH\x00R\x03sha\x88\x01\x01\x12 \n" + + "\tauth_type\x18\x04 \x01(\tH\x01R\bauthType\x88\x01\x01\x12\"\n" + + "\n" + + "auth_token\x18\x05 \x01(\tH\x02R\tauthToken\x88\x01\x01\x12O\n" + + "\x0ecache_strategy\x18\x06 \x01(\x0e2(.forge.IpxeTemplateArtifactCacheStrategyR\rcacheStrategy\x12\"\n" + + "\n" + + "cached_url\x18\a \x01(\tH\x03R\tcachedUrl\x88\x01\x01B\x06\n" + + "\x04_shaB\f\n" + + "\n" + + "_auth_typeB\r\n" + + "\v_auth_tokenB\r\n" + + "\v_cached_url\"\xb9\x02\n" + + "\fIpxeTemplate\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1a\n" + + "\btemplate\x18\x02 \x01(\tR\btemplate\x12'\n" + + "\x0frequired_params\x18\x03 \x03(\tR\x0erequiredParams\x12 \n" + + "\vdescription\x18\x04 \x01(\tR\vdescription\x12'\n" + + "\x0freserved_params\x18\x05 \x03(\tR\x0ereservedParams\x12-\n" + + "\x12required_artifacts\x18\x06 \x03(\tR\x11requiredArtifacts\x12.\n" + + "\x05scope\x18\a \x01(\x0e2\x18.forge.IpxeTemplateScopeR\x05scope\x12&\n" + + "\x02id\x18\b \x01(\v2\x16.common.IpxeTemplateIdR\x02id\"\xb4\x01\n" + "\fTenantConfig\x124\n" + "\x16tenant_organization_id\x18\x01 \x01(\tR\x14tenantOrganizationId\x12\x1f\n" + "\bhostname\x18\x0f \x01(\tH\x00R\bhostname\x88\x01\x01\x12(\n" + "\x0ftenantKeysetIds\x18\b \x03(\tR\x0ftenantKeysetIdsB\v\n" + - "\t_hostnameJ\x04\b\v\x10\fJ\x04\b\f\x10\rJ\x04\b\r\x10\x0eJ\x04\b\x0e\x10\x0f\"\xb0\x02\n" + - "\x0fOperatingSystem\x12'\n" + + "\t_hostnameJ\x04\b\v\x10\fJ\x04\b\f\x10\rJ\x04\b\r\x10\x0eJ\x04\b\x0e\x10\x0f\"\x8b\x03\n" + + "\x1dInstanceOperatingSystemConfig\x12'\n" + "\x04ipxe\x18\x01 \x01(\v2\x11.forge.InlineIpxeH\x00R\x04ipxe\x12.\n" + - "\vos_image_id\x18\x02 \x01(\v2\f.common.UUIDH\x00R\tosImageId\x12,\n" + + "\vos_image_id\x18\x02 \x01(\v2\f.common.UUIDH\x00R\tosImageId\x12K\n" + + "\x13operating_system_id\x18\x04 \x01(\v2\x19.common.OperatingSystemIdH\x00R\x11operatingSystemId\x12,\n" + "\x12phone_home_enabled\x18\v \x01(\bR\x10phoneHomeEnabled\x12[\n" + "+run_provisioning_instructions_on_every_boot\x18\f \x01(\bR&runProvisioningInstructionsOnEveryBoot\x12 \n" + "\tuser_data\x18\r \x01(\tH\x01R\buserData\x88\x01\x01B\t\n" + @@ -50141,10 +52399,10 @@ const file_forge_carbide_proto_rawDesc = "" + "ipxeScript\x12 \n" + "\tuser_data\x18\x02 \x01(\tH\x00R\buserData\x88\x01\x01B\f\n" + "\n" + - "_user_data\"\xf8\x03\n" + + "_user_data\"\x86\x04\n" + "\x0eInstanceConfig\x12+\n" + - "\x06tenant\x18\x01 \x01(\v2\x13.forge.TenantConfigR\x06tenant\x12&\n" + - "\x02os\x18\x02 \x01(\v2\x16.forge.OperatingSystemR\x02os\x126\n" + + "\x06tenant\x18\x01 \x01(\v2\x13.forge.TenantConfigR\x06tenant\x124\n" + + "\x02os\x18\x02 \x01(\v2$.forge.InstanceOperatingSystemConfigR\x02os\x126\n" + "\anetwork\x18\v \x01(\v2\x1c.forge.InstanceNetworkConfigR\anetwork\x12?\n" + "\n" + "infiniband\x18\f \x01(\v2\x1f.forge.InstanceInfinibandConfigR\n" + @@ -50168,12 +52426,12 @@ const file_forge_carbide_proto_rawDesc = "" + "\x0fservice_configs\x18\x01 \x03(\v2(.forge.InstanceDpuExtensionServiceConfigR\x0eserviceConfigs\"W\n" + "\x14InstanceNVLinkConfig\x12?\n" + "\vgpu_configs\x18\x01 \x03(\v2\x1e.forge.InstanceNVLinkGpuConfigR\n" + - "gpuConfigs\"\xc7\x01\n" + + "gpuConfigs\"\xd5\x01\n" + "$InstanceOperatingSystemUpdateRequest\x123\n" + "\vinstance_id\x18\x01 \x01(\v2\x12.common.InstanceIdR\n" + "instanceId\x12-\n" + - "\x10if_version_match\x18\x02 \x01(\tH\x00R\x0eifVersionMatch\x88\x01\x01\x12&\n" + - "\x02os\x18\x03 \x01(\v2\x16.forge.OperatingSystemR\x02osB\x13\n" + + "\x10if_version_match\x18\x02 \x01(\tH\x00R\x0eifVersionMatch\x88\x01\x01\x124\n" + + "\x02os\x18\x03 \x01(\v2$.forge.InstanceOperatingSystemConfigR\x02osB\x13\n" + "\x11_if_version_match\"\xf2\x01\n" + "\x1bInstanceConfigUpdateRequest\x123\n" + "\vinstance_id\x18\x01 \x01(\v2\x12.common.InstanceIdR\n" + @@ -50721,7 +52979,7 @@ const file_forge_carbide_proto_rawDesc = "" + "\x13MachineHardwareInfo\x12*\n" + "\x04gpus\x18\x01 \x03(\v2\x16.machine_discovery.GpuR\x04gpus\"Z\n" + "\x1fManagedHostNetworkConfigRequest\x127\n" + - "\x0edpu_machine_id\x18\x01 \x01(\v2\x11.common.MachineIdR\fdpuMachineId\"\x97\x13\n" + + "\x0edpu_machine_id\x18\x01 \x01(\v2\x11.common.MachineIdR\fdpuMachineId\"\xf5\x13\n" + " ManagedHostNetworkConfigResponse\x12\x10\n" + "\x03asn\x18\x02 \x01(\rR\x03asn\x12!\n" + "\fdhcp_servers\x18\x03 \x03(\tR\vdhcpServers\x12\x1d\n" + @@ -50763,7 +53021,8 @@ const file_forge_carbide_proto_rawDesc = "" + "R\x0eroutingProfile\x88\x01\x01\x122\n" + "\x15anycast_site_prefixes\x18s \x03(\tR\x13anycastSitePrefixes\x12+\n" + "\x0ftenant_host_asn\x18t \x01(\rH\vR\rtenantHostAsn\x88\x01\x01\x122\n" + - "\x13site_global_vpc_vni\x18u \x01(\rH\fR\x10siteGlobalVpcVni\x88\x01\x01B\x0e\n" + + "\x13site_global_vpc_vni\x18u \x01(\rH\fR\x10siteGlobalVpcVni\x88\x01\x01\x12>\n" + + "\x19bgp_leaf_session_password\x18v \x01(\tH\rR\x16bgpLeafSessionPassword\x88\x01\x01B\x0e\n" + "\f_instance_idB\x1e\n" + "\x1c_network_virtualization_typeB\n" + "\n" + @@ -50777,7 +53036,8 @@ const file_forge_carbide_proto_rawDesc = "" + "\x19_traffic_intercept_configB\x12\n" + "\x10_routing_profileB\x12\n" + "\x10_tenant_host_asnB\x16\n" + - "\x14_site_global_vpc_vniJ\x04\b\x01\x10\x02J\x04\bi\x10j\"\xf1\x01\n" + + "\x14_site_global_vpc_vniB\x1c\n" + + "\x1a_bgp_leaf_session_passwordJ\x04\b\x01\x10\x02J\x04\bi\x10j\"\xf1\x01\n" + "\x16TrafficInterceptConfig\x12@\n" + "\x1aadditional_overlay_vtep_ip\x18\x01 \x01(\tH\x00R\x17additionalOverlayVtepIp\x88\x01\x01\x12@\n" + "\bbridging\x18\x02 \x01(\v2\x1f.forge.TrafficInterceptBridgingH\x01R\bbridging\x88\x01\x01\x12'\n" + @@ -51104,10 +53364,16 @@ const file_forge_carbide_proto_rawDesc = "" + "\finterface_id\x18\x02 \x01(\v2\x1a.common.MachineInterfaceIdR\vinterfaceId\x12\x1d\n" + "\aproduct\x18\x03 \x01(\tH\x00R\aproduct\x88\x01\x01B\n" + "\n" + - "\b_product\"0\n" + + "\b_product\"\x90\x02\n" + "\x0fPxeInstructions\x12\x1d\n" + "\n" + - "pxe_script\x18\x01 \x01(\tR\tpxeScript\"\xb4\x05\n" + + "pxe_script\x18\x01 \x01(\tR\tpxeScript\x12-\n" + + "\x10api_url_override\x18\x02 \x01(\tH\x00R\x0eapiUrlOverride\x88\x01\x01\x12-\n" + + "\x10pxe_url_override\x18\x03 \x01(\tH\x01R\x0epxeUrlOverride\x88\x01\x01\x12:\n" + + "\x17static_pxe_url_override\x18\x04 \x01(\tH\x02R\x14staticPxeUrlOverride\x88\x01\x01B\x13\n" + + "\x11_api_url_overrideB\x13\n" + + "\x11_pxe_url_overrideB\x1a\n" + + "\x18_static_pxe_url_override\"\xb4\x05\n" + "\x1eCloudInitDiscoveryInstructions\x12D\n" + "\x11machine_interface\x18\x01 \x01(\v2\x17.forge.MachineInterfaceR\x10machineInterface\x12(\n" + "\x06domain\x18\x02 \x01(\v2\x10.forge.PxeDomainR\x06domain\x12\x1e\n" + @@ -51133,14 +53399,18 @@ const file_forge_carbide_proto_rawDesc = "" + "cloud_name\x18\x02 \x01(\tR\tcloudName\x12\x1a\n" + "\bplatform\x18\x03 \x01(\tR\bplatform\".\n" + "\x1cCloudInitInstructionsRequest\x12\x0e\n" + - "\x02ip\x18\x01 \x01(\tR\x02ip\"\xa4\x02\n" + + "\x02ip\x18\x01 \x01(\tR\x02ip\"\xac\x03\n" + "\x15CloudInitInstructions\x12/\n" + "\x11custom_cloud_init\x18\x01 \x01(\tH\x00R\x0fcustomCloudInit\x88\x01\x01\x12a\n" + "\x16discovery_instructions\x18\x02 \x01(\v2%.forge.CloudInitDiscoveryInstructionsH\x01R\x15discoveryInstructions\x88\x01\x01\x129\n" + - "\bmetadata\x18\x03 \x01(\v2\x18.forge.CloudInitMetaDataH\x02R\bmetadata\x88\x01\x01B\x14\n" + + "\bmetadata\x18\x03 \x01(\v2\x18.forge.CloudInitMetaDataH\x02R\bmetadata\x88\x01\x01\x12-\n" + + "\x10api_url_override\x18\x04 \x01(\tH\x03R\x0eapiUrlOverride\x88\x01\x01\x12-\n" + + "\x10pxe_url_override\x18\x05 \x01(\tH\x04R\x0epxeUrlOverride\x88\x01\x01B\x14\n" + "\x12_custom_cloud_initB\x19\n" + "\x17_discovery_instructionsB\v\n" + - "\t_metadata\"\xf6\t\n" + + "\t_metadataB\x13\n" + + "\x11_api_url_overrideB\x13\n" + + "\x11_pxe_url_override\"\xf6\t\n" + "\x10DpuNetworkStatus\x127\n" + "\x0edpu_machine_id\x18\x01 \x01(\v2\x11.common.MachineIdR\fdpuMachineId\x12;\n" + "\vobserved_at\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\n" + @@ -51249,27 +53519,27 @@ const file_forge_carbide_proto_rawDesc = "" + "\v_carrier_upB\x06\n" + "\x04_mtuB\x13\n" + "\x11_carrier_up_countB\x15\n" + - "\x13_carrier_down_count\"\xce\x01\n" + + "\x13_carrier_down_count\"\xe3\x01\n" + "\x06Tenant\x12'\n" + "\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n" + "\bmetadata\x18\x02 \x01(\v2\x0f.forge.MetadataR\bmetadata\x12\x18\n" + - "\aversion\x18\x03 \x01(\tR\aversion\x125\n" + - "\x14routing_profile_type\x18\x05 \x01(\tH\x00R\x12routingProfileType\x88\x01\x01B\x17\n" + - "\x15_routing_profile_typeJ\x04\b\x04\x10\x05\"\xc1\x01\n" + + "\aversion\x18\x03 \x01(\tR\aversion\x12P\n" + + "\x14routing_profile_type\x18\x04 \x01(\x0e2\x19.forge.RoutingProfileTypeH\x00R\x12routingProfileType\x88\x01\x01B\x17\n" + + "\x15_routing_profile_type\"\xd6\x01\n" + "\x13CreateTenantRequest\x12'\n" + "\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n" + - "\bmetadata\x18\x02 \x01(\v2\x0f.forge.MetadataR\bmetadata\x125\n" + - "\x14routing_profile_type\x18\x04 \x01(\tH\x00R\x12routingProfileType\x88\x01\x01B\x17\n" + - "\x15_routing_profile_typeJ\x04\b\x03\x10\x04\"=\n" + + "\bmetadata\x18\x02 \x01(\v2\x0f.forge.MetadataR\bmetadata\x12P\n" + + "\x14routing_profile_type\x18\x03 \x01(\x0e2\x19.forge.RoutingProfileTypeH\x00R\x12routingProfileType\x88\x01\x01B\x17\n" + + "\x15_routing_profile_type\"=\n" + "\x14CreateTenantResponse\x12%\n" + - "\x06tenant\x18\x01 \x01(\v2\r.forge.TenantR\x06tenant\"\x85\x02\n" + + "\x06tenant\x18\x01 \x01(\v2\r.forge.TenantR\x06tenant\"\x9a\x02\n" + "\x13UpdateTenantRequest\x12'\n" + "\x0forganization_id\x18\x01 \x01(\tR\x0eorganizationId\x12+\n" + "\bmetadata\x18\x02 \x01(\v2\x0f.forge.MetadataR\bmetadata\x12-\n" + - "\x10if_version_match\x18\x03 \x01(\tH\x00R\x0eifVersionMatch\x88\x01\x01\x125\n" + - "\x14routing_profile_type\x18\x05 \x01(\tH\x01R\x12routingProfileType\x88\x01\x01B\x13\n" + + "\x10if_version_match\x18\x03 \x01(\tH\x00R\x0eifVersionMatch\x88\x01\x01\x12P\n" + + "\x14routing_profile_type\x18\x04 \x01(\x0e2\x19.forge.RoutingProfileTypeH\x01R\x12routingProfileType\x88\x01\x01B\x13\n" + "\x11_if_version_matchB\x17\n" + - "\x15_routing_profile_typeJ\x04\b\x04\x10\x05\"=\n" + + "\x15_routing_profile_type\"=\n" + "\x14UpdateTenantResponse\x12%\n" + "\x06tenant\x18\x01 \x01(\v2\r.forge.TenantR\x06tenant\"I\n" + "\x11FindTenantRequest\x124\n" + @@ -51564,7 +53834,12 @@ const file_forge_carbide_proto_rawDesc = "" + "\x14DeleteOsImageRequest\x12\x1c\n" + "\x02id\x18\x01 \x01(\v2\f.common.UUIDR\x02id\x122\n" + "\x14tenantOrganizationId\x18\x02 \x01(\tR\x14tenantOrganizationId\"\x17\n" + - "\x15DeleteOsImageResponse\"\xfb\x01\n" + + "\x15DeleteOsImageResponse\"@\n" + + "\x16GetIpxeTemplateRequest\x12&\n" + + "\x02id\x18\x01 \x01(\v2\x16.common.IpxeTemplateIdR\x02id\"\x1a\n" + + "\x18ListIpxeTemplatesRequest\"E\n" + + "\x10IpxeTemplateList\x121\n" + + "\ttemplates\x18\x01 \x03(\v2\x13.forge.IpxeTemplateR\ttemplates\"\xfb\x01\n" + "\x0fExpectedHostNic\x12\x1f\n" + "\vmac_address\x18\x01 \x01(\tR\n" + "macAddress\x12\x1e\n" + @@ -51576,7 +53851,7 @@ const file_forge_carbide_proto_rawDesc = "" + "\t_nic_typeB\v\n" + "\t_fixed_ipB\r\n" + "\v_fixed_maskB\x10\n" + - "\x0e_fixed_gateway\"\xbb\b\n" + + "\x0e_fixed_gateway\"\xf9\b\n" + "\x0fExpectedMachine\x12&\n" + "\x0fbmc_mac_address\x18\x01 \x01(\tR\rbmcMacAddress\x12!\n" + "\fbmc_username\x18\x02 \x01(\tR\vbmcUsername\x12!\n" + @@ -51592,22 +53867,24 @@ const file_forge_carbide_proto_rawDesc = "" + "#default_pause_ingestion_and_poweron\x18\v \x01(\bH\x03R\x1fdefaultPauseIngestionAndPoweron\x88\x01\x01\x12#\n" + "\vdpf_enabled\x18\f \x01(\bB\x02\x18\x01R\n" + "dpfEnabled\x12)\n" + - "\x0eis_dpf_enabled\x18\r \x01(\bH\x04R\fisDpfEnabled\x88\x01\x01\x12\x17\n" + - "\x04name\x18\x15 \x01(\tH\x05R\x04name\x88\x01\x01\x12'\n" + - "\fmanufacturer\x18\x16 \x01(\tH\x06R\fmanufacturer\x88\x01\x01\x12\x19\n" + - "\x05model\x18\x17 \x01(\tH\aR\x05model\x88\x01\x01\x12%\n" + - "\vdescription\x18\x18 \x01(\tH\bR\vdescription\x88\x01\x01\x12.\n" + - "\x10firmware_version\x18\x19 \x01(\tH\tR\x0ffirmwareVersion\x88\x01\x01\x12\x1c\n" + - "\aslot_id\x18\x1a \x01(\x05H\n" + - "R\x06slotId\x88\x01\x01\x12\x1e\n" + - "\btray_idx\x18\x1b \x01(\x05H\vR\atrayIdx\x88\x01\x01\x12\x1c\n" + - "\ahost_id\x18\x1c \x01(\x05H\fR\x06hostId\x88\x01\x01B\t\n" + + "\x0eis_dpf_enabled\x18\r \x01(\bH\x04R\fisDpfEnabled\x88\x01\x01\x12)\n" + + "\x0ebmc_ip_address\x18\x0e \x01(\tH\x05R\fbmcIpAddress\x88\x01\x01\x12\x17\n" + + "\x04name\x18\x15 \x01(\tH\x06R\x04name\x88\x01\x01\x12'\n" + + "\fmanufacturer\x18\x16 \x01(\tH\aR\fmanufacturer\x88\x01\x01\x12\x19\n" + + "\x05model\x18\x17 \x01(\tH\bR\x05model\x88\x01\x01\x12%\n" + + "\vdescription\x18\x18 \x01(\tH\tR\vdescription\x88\x01\x01\x12.\n" + + "\x10firmware_version\x18\x19 \x01(\tH\n" + + "R\x0ffirmwareVersion\x88\x01\x01\x12\x1c\n" + + "\aslot_id\x18\x1a \x01(\x05H\vR\x06slotId\x88\x01\x01\x12\x1e\n" + + "\btray_idx\x18\x1b \x01(\x05H\fR\atrayIdx\x88\x01\x01\x12\x1c\n" + + "\ahost_id\x18\x1c \x01(\x05H\rR\x06hostId\x88\x01\x01B\t\n" + "\a_sku_idB\x05\n" + "\x03_idB\n" + "\n" + "\b_rack_idB&\n" + "$_default_pause_ingestion_and_poweronB\x11\n" + - "\x0f_is_dpf_enabledB\a\n" + + "\x0f_is_dpf_enabledB\x11\n" + + "\x0f_bmc_ip_addressB\a\n" + "\x05_nameB\x0f\n" + "\r_manufacturerB\b\n" + "\x06_modelB\x0e\n" + @@ -52603,7 +54880,42 @@ const file_forge_carbide_proto_rawDesc = "" + "\x17RackStateHistoryRecords\x127\n" + "\arecords\x18\x01 \x03(\v2\x1d.forge.RackStateHistoryRecordR\arecords\"#\n" + "\x11DeleteRackRequest\x12\x0e\n" + - "\x02id\x18\x01 \x01(\tR\x02id\"q\n" + + "\x02id\x18\x01 \x01(\tR\x02id\"\x92\x01\n" + + "\x15RackCapabilityCompute\x12\x17\n" + + "\x04name\x18\x01 \x01(\tH\x00R\x04name\x88\x01\x01\x12\x14\n" + + "\x05count\x18\x02 \x01(\rR\x05count\x12\x1b\n" + + "\x06vendor\x18\x03 \x01(\tH\x01R\x06vendor\x88\x01\x01\x12\x19\n" + + "\bslot_ids\x18\x04 \x03(\rR\aslotIdsB\a\n" + + "\x05_nameB\t\n" + + "\a_vendor\"\x91\x01\n" + + "\x14RackCapabilitySwitch\x12\x17\n" + + "\x04name\x18\x01 \x01(\tH\x00R\x04name\x88\x01\x01\x12\x14\n" + + "\x05count\x18\x02 \x01(\rR\x05count\x12\x1b\n" + + "\x06vendor\x18\x03 \x01(\tH\x01R\x06vendor\x88\x01\x01\x12\x19\n" + + "\bslot_ids\x18\x04 \x03(\rR\aslotIdsB\a\n" + + "\x05_nameB\t\n" + + "\a_vendor\"\x95\x01\n" + + "\x18RackCapabilityPowerShelf\x12\x17\n" + + "\x04name\x18\x01 \x01(\tH\x00R\x04name\x88\x01\x01\x12\x14\n" + + "\x05count\x18\x02 \x01(\rR\x05count\x12\x1b\n" + + "\x06vendor\x18\x03 \x01(\tH\x01R\x06vendor\x88\x01\x01\x12\x19\n" + + "\bslot_ids\x18\x04 \x03(\rR\aslotIdsB\a\n" + + "\x05_nameB\t\n" + + "\a_vendor\"\xa8\x03\n" + + "\x13RackCapabilitiesSet\x12E\n" + + "\x12rack_hardware_type\x18\x01 \x01(\x0e2\x17.forge.RackHardwareTypeR\x10rackHardwareType\x12Q\n" + + "\x16rack_hardware_topology\x18\x02 \x01(\x0e2\x1b.forge.RackHardwareTopologyR\x14rackHardwareTopology\x12H\n" + + "\x13rack_hardware_class\x18\x03 \x01(\x0e2\x18.forge.RackHardwareClassR\x11rackHardwareClass\x126\n" + + "\acompute\x18\x04 \x01(\v2\x1c.forge.RackCapabilityComputeR\acompute\x123\n" + + "\x06switch\x18\x05 \x01(\v2\x1b.forge.RackCapabilitySwitchR\x06switch\x12@\n" + + "\vpower_shelf\x18\x06 \x01(\v2\x1f.forge.RackCapabilityPowerShelfR\n" + + "powerShelf\"E\n" + + "\x1aGetRackCapabilitiesRequest\x12'\n" + + "\arack_id\x18\x01 \x01(\v2\x0e.common.RackIdR\x06rackId\"\xa3\x01\n" + + "\x1bGetRackCapabilitiesResponse\x12'\n" + + "\arack_id\x18\x01 \x01(\v2\x0e.common.RackIdR\x06rackId\x12\x1b\n" + + "\track_type\x18\x02 \x01(\tR\brackType\x12>\n" + + "\fcapabilities\x18\x03 \x01(\v2\x1a.forge.RackCapabilitiesSetR\fcapabilities\"q\n" + "\x17RackManagerForgeRequest\x12,\n" + "\x03cmd\x18\x01 \x01(\x0e2\x1a.forge.RackManagerForgeCmdR\x03cmd\x12\x1c\n" + "\anode_id\x18\x02 \x01(\tH\x00R\x06nodeId\x88\x01\x01B\n" + @@ -53246,7 +55558,109 @@ const file_forge_carbide_proto_rawDesc = "" + "\x11delete_interfaces\x18\x02 \x01(\bR\x10deleteInterfaces\"y\n" + "\"AdminForceDeletePowerShelfResponse\x12$\n" + "\x0epower_shelf_id\x18\x01 \x01(\tR\fpowerShelfId\x12-\n" + - "\x12interfaces_deleted\x18\x02 \x01(\rR\x11interfacesDeleted*1\n" + + "\x12interfaces_deleted\x18\x02 \x01(\rR\x11interfacesDeleted\"\x98\a\n" + + "\x0fOperatingSystem\x12)\n" + + "\x02id\x18\x01 \x01(\v2\x19.common.OperatingSystemIdR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12%\n" + + "\vdescription\x18\x03 \x01(\tH\x00R\vdescription\x88\x01\x01\x124\n" + + "\x16tenant_organization_id\x18\x04 \x01(\tR\x14tenantOrganizationId\x12.\n" + + "\x04type\x18\x05 \x01(\x0e2\x1a.forge.OperatingSystemTypeR\x04type\x12*\n" + + "\x06status\x18\x06 \x01(\x0e2\x12.forge.TenantStateR\x06status\x12\x1b\n" + + "\tis_active\x18\a \x01(\bR\bisActive\x12%\n" + + "\x0eallow_override\x18\b \x01(\bR\rallowOverride\x12,\n" + + "\x12phone_home_enabled\x18\t \x01(\bR\x10phoneHomeEnabled\x12 \n" + + "\tuser_data\x18\n" + + " \x01(\tH\x01R\buserData\x88\x01\x01\x12\x18\n" + + "\acreated\x18\v \x01(\tR\acreated\x12\x18\n" + + "\aupdated\x18\f \x01(\tR\aupdated\x12$\n" + + "\vipxe_script\x18\x14 \x01(\tH\x02R\n" + + "ipxeScript\x88\x01\x01\x12E\n" + + "\x10ipxe_template_id\x18\x16 \x01(\v2\x16.common.IpxeTemplateIdH\x03R\x0eipxeTemplateId\x88\x01\x01\x12V\n" + + "\x18ipxe_template_parameters\x18\x17 \x03(\v2\x1c.forge.IpxeTemplateParameterR\x16ipxeTemplateParameters\x12S\n" + + "\x17ipxe_template_artifacts\x18\x18 \x03(\v2\x1b.forge.IpxeTemplateArtifactR\x15ipxeTemplateArtifacts\x12F\n" + + "\x1dipxe_template_definition_hash\x18\x19 \x01(\tH\x04R\x1aipxeTemplateDefinitionHash\x88\x01\x01B\x0e\n" + + "\f_descriptionB\f\n" + + "\n" + + "_user_dataB\x0e\n" + + "\f_ipxe_scriptB\x13\n" + + "\x11_ipxe_template_idB \n" + + "\x1e_ipxe_template_definition_hash\"\xb7\x05\n" + + "\x1cCreateOperatingSystemRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12%\n" + + "\vdescription\x18\x02 \x01(\tH\x00R\vdescription\x88\x01\x01\x124\n" + + "\x16tenant_organization_id\x18\x03 \x01(\tR\x14tenantOrganizationId\x12\x1b\n" + + "\tis_active\x18\x04 \x01(\bR\bisActive\x12%\n" + + "\x0eallow_override\x18\x05 \x01(\bR\rallowOverride\x12,\n" + + "\x12phone_home_enabled\x18\x06 \x01(\bR\x10phoneHomeEnabled\x12 \n" + + "\tuser_data\x18\a \x01(\tH\x01R\buserData\x88\x01\x01\x12.\n" + + "\x02id\x18\b \x01(\v2\x19.common.OperatingSystemIdH\x02R\x02id\x88\x01\x01\x12$\n" + + "\vipxe_script\x18\x14 \x01(\tH\x03R\n" + + "ipxeScript\x88\x01\x01\x12E\n" + + "\x10ipxe_template_id\x18\x16 \x01(\v2\x16.common.IpxeTemplateIdH\x04R\x0eipxeTemplateId\x88\x01\x01\x12V\n" + + "\x18ipxe_template_parameters\x18\x17 \x03(\v2\x1c.forge.IpxeTemplateParameterR\x16ipxeTemplateParameters\x12S\n" + + "\x17ipxe_template_artifacts\x18\x18 \x03(\v2\x1b.forge.IpxeTemplateArtifactR\x15ipxeTemplateArtifactsB\x0e\n" + + "\f_descriptionB\f\n" + + "\n" + + "_user_dataB\x05\n" + + "\x03_idB\x0e\n" + + "\f_ipxe_scriptB\x13\n" + + "\x11_ipxe_template_id\"L\n" + + "\x16IpxeTemplateParameters\x122\n" + + "\x05items\x18\x01 \x03(\v2\x1c.forge.IpxeTemplateParameterR\x05items\"J\n" + + "\x15IpxeTemplateArtifacts\x121\n" + + "\x05items\x18\x01 \x03(\v2\x1b.forge.IpxeTemplateArtifactR\x05items\"\xf9\x06\n" + + "\x1cUpdateOperatingSystemRequest\x12)\n" + + "\x02id\x18\x01 \x01(\v2\x19.common.OperatingSystemIdR\x02id\x12\x17\n" + + "\x04name\x18\x02 \x01(\tH\x00R\x04name\x88\x01\x01\x12%\n" + + "\vdescription\x18\x03 \x01(\tH\x01R\vdescription\x88\x01\x01\x12 \n" + + "\tis_active\x18\x04 \x01(\bH\x02R\bisActive\x88\x01\x01\x12*\n" + + "\x0eallow_override\x18\x05 \x01(\bH\x03R\rallowOverride\x88\x01\x01\x121\n" + + "\x12phone_home_enabled\x18\x06 \x01(\bH\x04R\x10phoneHomeEnabled\x88\x01\x01\x12 \n" + + "\tuser_data\x18\a \x01(\tH\x05R\buserData\x88\x01\x01\x12$\n" + + "\vipxe_script\x18\x14 \x01(\tH\x06R\n" + + "ipxeScript\x88\x01\x01\x12E\n" + + "\x10ipxe_template_id\x18\x16 \x01(\v2\x16.common.IpxeTemplateIdH\aR\x0eipxeTemplateId\x88\x01\x01\x12\\\n" + + "\x18ipxe_template_parameters\x18\x17 \x01(\v2\x1d.forge.IpxeTemplateParametersH\bR\x16ipxeTemplateParameters\x88\x01\x01\x12Y\n" + + "\x17ipxe_template_artifacts\x18\x18 \x01(\v2\x1c.forge.IpxeTemplateArtifactsH\tR\x15ipxeTemplateArtifacts\x88\x01\x01\x12F\n" + + "\x1dipxe_template_definition_hash\x18\x19 \x01(\tH\n" + + "R\x1aipxeTemplateDefinitionHash\x88\x01\x01B\a\n" + + "\x05_nameB\x0e\n" + + "\f_descriptionB\f\n" + + "\n" + + "_is_activeB\x11\n" + + "\x0f_allow_overrideB\x15\n" + + "\x13_phone_home_enabledB\f\n" + + "\n" + + "_user_dataB\x0e\n" + + "\f_ipxe_scriptB\x13\n" + + "\x11_ipxe_template_idB\x1b\n" + + "\x19_ipxe_template_parametersB\x1a\n" + + "\x18_ipxe_template_artifactsB \n" + + "\x1e_ipxe_template_definition_hash\"I\n" + + "\x1cDeleteOperatingSystemRequest\x12)\n" + + "\x02id\x18\x01 \x01(\v2\x19.common.OperatingSystemIdR\x02id\"\x1f\n" + + "\x1dDeleteOperatingSystemResponse\"s\n" + + "\x1bOperatingSystemSearchFilter\x129\n" + + "\x16tenant_organization_id\x18\x01 \x01(\tH\x00R\x14tenantOrganizationId\x88\x01\x01B\x19\n" + + "\x17_tenant_organization_id\"D\n" + + "\x15OperatingSystemIdList\x12+\n" + + "\x03ids\x18\x01 \x03(\v2\x19.common.OperatingSystemIdR\x03ids\"K\n" + + "\x1cOperatingSystemsByIdsRequest\x12+\n" + + "\x03ids\x18\x01 \x03(\v2\x19.common.OperatingSystemIdR\x03ids\"Z\n" + + "\x13OperatingSystemList\x12C\n" + + "\x11operating_systems\x18\x01 \x03(\v2\x16.forge.OperatingSystemR\x10operatingSystems\"c\n" + + "6GetOperatingSystemCachableIpxeTemplateArtifactsRequest\x12)\n" + + "\x02id\x18\x01 \x01(\v2\x19.common.OperatingSystemIdR\x02id\"U\n" + + "\x18IpxeTemplateArtifactList\x129\n" + + "\tartifacts\x18\x01 \x03(\v2\x1b.forge.IpxeTemplateArtifactR\tartifacts\"j\n" + + "!IpxeTemplateArtifactUpdateRequest\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\"\n" + + "\n" + + "cached_url\x18\x02 \x01(\tH\x00R\tcachedUrl\x88\x01\x01B\r\n" + + "\v_cached_url\"\xa1\x01\n" + + "0UpdateOperatingSystemIpxeTemplateArtifactRequest\x12)\n" + + "\x02id\x18\x01 \x01(\v2\x19.common.OperatingSystemIdR\x02id\x12B\n" + + "\aupdates\x18\x02 \x03(\v2(.forge.IpxeTemplateArtifactUpdateRequestR\aupdates*1\n" + "\bJwksKind\x12\x0f\n" + "\vUnspecified\x10\x00\x12\b\n" + "\x04Oidc\x10\x01\x12\n" + @@ -53256,7 +55670,7 @@ const file_forge_carbide_proto_rawDesc = "" + "\rNotDiscovered\x10\x00\x12\x17\n" + "\x13WaitingForIngestion\x10\x01\x12\x1e\n" + "\x1aIngestionMachineNotCreated\x10\x02\x12\x1b\n" + - "\x17IngestionMachineCreated\x10\x03*\xd9\x01\n" + + "\x17IngestionMachineCreated\x10\x03*\xf6\x01\n" + "\x0eCredentialType\x12\v\n" + "\aHostBMC\x10\x00\x12\n" + "\n" + @@ -53270,7 +55684,8 @@ const file_forge_carbide_proto_rawDesc = "" + "\x13RootBmcByMacAddress\x10\b\x12\x1d\n" + "\x19BmcForgeAdminByMacAddress\x10\t\x12\b\n" + "\x04NmxM\x10\n" + - "*\x7f\n" + + "\x12\x1b\n" + + "\x17BgpSiteWideLeafPassword\x10\v*\x7f\n" + "\x15VpcVirtualizationType\x12\x18\n" + "\x14ETHERNET_VIRTUALIZER\x10\x00\x12&\n" + "\x1eETHERNET_VIRTUALIZER_WITH_NVUE\x10\x02\x1a\x02\b\x01\x12\x0f\n" + @@ -53307,7 +55722,17 @@ const file_forge_carbide_proto_rawDesc = "" + "\vHOST_INBAND\x10\x03*0\n" + "\x12NetworkSegmentFlag\x12\t\n" + "\x05NO_OP\x10\x00\x12\x0f\n" + - "\vCAN_STRETCH\x10\x01*W\n" + + "\vCAN_STRETCH\x10\x01*j\n" + + "!IpxeTemplateArtifactCacheStrategy\x12\x13\n" + + "\x0fCACHE_AS_NEEDED\x10\x00\x12\x0e\n" + + "\n" + + "LOCAL_ONLY\x10\x01\x12\x0f\n" + + "\vCACHED_ONLY\x10\x02\x12\x0f\n" + + "\vREMOTE_ONLY\x10\x03*-\n" + + "\x11IpxeTemplateScope\x12\f\n" + + "\bINTERNAL\x10\x00\x12\n" + + "\n" + + "\x06PUBLIC\x10\x01*W\n" + "\rIssueCategory\x12\x0f\n" + "\vUNSPECIFIED\x10\x00\x12\f\n" + "\bHARDWARE\x10\x01\x12\v\n" + @@ -53416,7 +55841,7 @@ const file_forge_carbide_proto_rawDesc = "" + "\x14MacOwnerDpaInterface\x10\x03*.\n" + "\x0fUpdateInitiator\x12\f\n" + "\bAdminCli\x10\x00\x12\r\n" + - "\tAutomatic\x10\x01*\xd3\x02\n" + + "\tAutomatic\x10\x01*\xea\x02\n" + "\x06IpType\x12\x1e\n" + "\x1aIpTypeStaticDataDhcpServer\x10\x00\x12\x1f\n" + "\x1bIpTypeStaticDataRouteServer\x10\x01\x12\x16\n" + @@ -53430,7 +55855,8 @@ const file_forge_carbide_proto_rawDesc = "" + "\x1fIpTypeRouteServerFromConfigFile\x10\t\x12!\n" + "\x1dIpTypeRouteServerFromAdminApi\x10\n" + "\x12\x16\n" + - "\x12IpTypeDpaInterface\x10\v*5\n" + + "\x12IpTypeDpaInterface\x10\v\x12\x15\n" + + "\x11IpTypeStaticBmcIp\x10\f*5\n" + "\x15RouteServerSourceType\x12\x0e\n" + "\n" + "ConfigFile\x10\x00\x12\f\n" + @@ -53495,7 +55921,24 @@ const file_forge_carbide_proto_rawDesc = "" + "PowerState\x12\x06\n" + "\x02On\x10\x00\x12\a\n" + "\x03Off\x10\x01\x12\x18\n" + - "\x14PowerManagerDisabled\x10\x02*\xbc\x01\n" + + "\x14PowerManagerDisabled\x10\x02*\xb4\x01\n" + + "\x10RackHardwareType\x12\"\n" + + "\x1eRACK_HARDWARE_TYPE_UNSPECIFIED\x10\x00\x12(\n" + + "$RACK_HARDWARE_TYPE_DSX_GB200NVL_36X1\x10\x01\x12(\n" + + "$RACK_HARDWARE_TYPE_DSX_GB200NVL_36X2\x10\x02\x12(\n" + + "$RACK_HARDWARE_TYPE_DSX_GB200NVL_72X1\x10\x03*\xd5\x02\n" + + "\x14RackHardwareTopology\x12&\n" + + "\"RACK_HARDWARE_TOPOLOGY_UNSPECIFIED\x10\x00\x12-\n" + + ")RACK_HARDWARE_TOPOLOGY_GB200_NVL36R1_C2G4\x10\x01\x12-\n" + + ")RACK_HARDWARE_TOPOLOGY_GB300_NVL36R1_C2G4\x10\x02\x12-\n" + + ")RACK_HARDWARE_TOPOLOGY_GB200_NVL72R1_C2G4\x10\x03\x12-\n" + + ")RACK_HARDWARE_TOPOLOGY_GB300_NVL72R1_C2G4\x10\x04\x12-\n" + + ")RACK_HARDWARE_TOPOLOGY_VR_NVL8R1_C2G4_RTF\x10\x05\x12*\n" + + "&RACK_HARDWARE_TOPOLOGY_VR_NVL72R1_C2G4\x10\x06*s\n" + + "\x11RackHardwareClass\x12#\n" + + "\x1fRACK_HARDWARE_CLASS_UNSPECIFIED\x10\x00\x12\x1b\n" + + "\x17RACK_HARDWARE_CLASS_DEV\x10\x01\x12\x1c\n" + + "\x18RACK_HARDWARE_CLASS_PROD\x10\x02*\xbc\x01\n" + "\x13RackManagerForgeCmd\x12\x10\n" + "\fInventoryGet\x10\x00\x12\x0e\n" + "\n" + @@ -53519,7 +55962,13 @@ const file_forge_carbide_proto_rawDesc = "" + "\x1cDPU_EXTENSION_SERVICE_FAILED\x10\x05\x12\x1f\n" + "\x1bDPU_EXTENSION_SERVICE_ERROR\x10\x06*@\n" + "\x16ScoutStreamErrorStatus\x12&\n" + - "\"SCOUT_STREAM_ERROR_STATUS_INTERNAL\x10\x00*\xbb\x02\n" + + "\"SCOUT_STREAM_ERROR_STATUS_INTERNAL\x10\x00*\xce\x01\n" + + "\x12RoutingProfileType\x12!\n" + + "\x1dROUTING_PROFILE_TYPE_EXTERNAL\x10\x00\x12\x1e\n" + + "\x1aROUTING_PROFILE_TYPE_ADMIN\x10\x01\x12!\n" + + "\x1dROUTING_PROFILE_TYPE_INTERNAL\x10\x02\x12,\n" + + "(ROUTING_PROFILE_TYPE_PRIVILEGED_INTERNAL\x10\x03\x12$\n" + + " ROUTING_PROFILE_TYPE_MAINTENANCE\x10\x04*\xbb\x02\n" + "\x1aComponentManagerStatusCode\x12)\n" + "%COMPONENT_MANAGER_STATUS_CODE_SUCCESS\x10\x00\x122\n" + ".COMPONENT_MANAGER_STATUS_CODE_INVALID_ARGUMENT\x10\x01\x120\n" + @@ -53548,7 +55997,11 @@ const file_forge_carbide_proto_rawDesc = "" + "\x14ComputeTrayComponent\x12\"\n" + "\x1eCOMPUTE_TRAY_COMPONENT_UNKNOWN\x10\x00\x12\x1e\n" + "\x1aCOMPUTE_TRAY_COMPONENT_BMC\x10\x01\x12\x1f\n" + - "\x1bCOMPUTE_TRAY_COMPONENT_BIOS\x10\x022\xea\xa8\x02\n" + + "\x1bCOMPUTE_TRAY_COMPONENT_BIOS\x10\x02*\\\n" + + "\x13OperatingSystemType\x12\x17\n" + + "\x13OS_TYPE_UNSPECIFIED\x10\x00\x12\x10\n" + + "\fOS_TYPE_IPXE\x10\x01\x12\x1a\n" + + "\x16OS_TYPE_TEMPLATED_IPXE\x10\x022\x96\xb1\x02\n" + "\x05Forge\x122\n" + "\aVersion\x12\x15.forge.VersionRequest\x1a\x10.forge.BuildInfo\x125\n" + "\fCreateDomain\x12\x18.dns.CreateDomainRequest\x1a\v.dns.Domain\x125\n" + @@ -53815,7 +56268,9 @@ const file_forge_carbide_proto_rawDesc = "" + "\vListOsImage\x12\x19.forge.ListOsImageRequest\x1a\x1a.forge.ListOsImageResponse\x12*\n" + "\n" + "GetOsImage\x12\f.common.UUID\x1a\x0e.forge.OsImage\x129\n" + - "\rUpdateOsImage\x12\x18.forge.OsImageAttributes\x1a\x0e.forge.OsImage\x12^\n" + + "\rUpdateOsImage\x12\x18.forge.OsImageAttributes\x1a\x0e.forge.OsImage\x12E\n" + + "\x0fGetIpxeTemplate\x12\x1d.forge.GetIpxeTemplateRequest\x1a\x13.forge.IpxeTemplate\x12M\n" + + "\x11ListIpxeTemplates\x12\x1f.forge.ListIpxeTemplatesRequest\x1a\x17.forge.IpxeTemplateList\x12^\n" + "\x0fRebootCompleted\x12$.forge.MachineRebootCompletedRequest\x1a%.forge.MachineRebootCompletedResponse\x12\\\n" + "\x17PersistValidationResult\x12).forge.MachineValidationResultPostRequest\x1a\x16.google.protobuf.Empty\x12e\n" + "\x1bGetMachineValidationResults\x12\".forge.MachineValidationGetRequest\x1a\".forge.MachineValidationResultList\x12q\n" + @@ -53890,7 +56345,8 @@ const file_forge_carbide_proto_rawDesc = "" + "\x0eFindRacksByIds\x12\x18.forge.RacksByIdsRequest\x1a\x0f.forge.RackList\x128\n" + "\aGetRack\x12\x15.forge.GetRackRequest\x1a\x16.forge.GetRackResponse\x12>\n" + "\n" + - "DeleteRack\x12\x18.forge.DeleteRackRequest\x1a\x16.google.protobuf.Empty\x12h\n" + + "DeleteRack\x12\x18.forge.DeleteRackRequest\x1a\x16.google.protobuf.Empty\x12\\\n" + + "\x13GetRackCapabilities\x12!.forge.GetRackCapabilitiesRequest\x1a\".forge.GetRackCapabilitiesResponse\x12h\n" + "\x17CreateComputeAllocation\x12%.forge.CreateComputeAllocationRequest\x1a&.forge.CreateComputeAllocationResponse\x12k\n" + "\x18FindComputeAllocationIds\x12&.forge.FindComputeAllocationIdsRequest\x1a'.forge.FindComputeAllocationIdsResponse\x12t\n" + "\x1bFindComputeAllocationsByIds\x12).forge.FindComputeAllocationsByIdsRequest\x1a*.forge.FindComputeAllocationsByIdsResponse\x12h\n" + @@ -53970,7 +56426,15 @@ const file_forge_carbide_proto_rawDesc = "" + "\x15GetComponentInventory\x12#.forge.GetComponentInventoryRequest\x1a$.forge.GetComponentInventoryResponse\x12h\n" + "\x17UpdateComponentFirmware\x12%.forge.UpdateComponentFirmwareRequest\x1a&.forge.UpdateComponentFirmwareResponse\x12q\n" + "\x1aGetComponentFirmwareStatus\x12(.forge.GetComponentFirmwareStatusRequest\x1a).forge.GetComponentFirmwareStatusResponse\x12z\n" + - "\x1dListComponentFirmwareVersions\x12+.forge.ListComponentFirmwareVersionsRequest\x1a,.forge.ListComponentFirmwareVersionsResponseBCZAgithub.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/protob\x06proto3" + "\x1dListComponentFirmwareVersions\x12+.forge.ListComponentFirmwareVersionsRequest\x1a,.forge.ListComponentFirmwareVersionsResponse\x12T\n" + + "\x15CreateOperatingSystem\x12#.forge.CreateOperatingSystemRequest\x1a\x16.forge.OperatingSystem\x12G\n" + + "\x12GetOperatingSystem\x12\x19.common.OperatingSystemId\x1a\x16.forge.OperatingSystem\x12T\n" + + "\x15UpdateOperatingSystem\x12#.forge.UpdateOperatingSystemRequest\x1a\x16.forge.OperatingSystem\x12b\n" + + "\x15DeleteOperatingSystem\x12#.forge.DeleteOperatingSystemRequest\x1a$.forge.DeleteOperatingSystemResponse\x12Z\n" + + "\x16FindOperatingSystemIds\x12\".forge.OperatingSystemSearchFilter\x1a\x1c.forge.OperatingSystemIdList\x12\\\n" + + "\x19FindOperatingSystemsByIds\x12#.forge.OperatingSystemsByIdsRequest\x1a\x1a.forge.OperatingSystemList\x12\x91\x01\n" + + "/GetOperatingSystemCachableIpxeTemplateArtifacts\x12=.forge.GetOperatingSystemCachableIpxeTemplateArtifactsRequest\x1a\x1f.forge.IpxeTemplateArtifactList\x12\x8e\x01\n" + + "2UpdateOperatingSystemCachableIpxeTemplateArtifacts\x127.forge.UpdateOperatingSystemIpxeTemplateArtifactRequest\x1a\x1f.forge.IpxeTemplateArtifactListBCZAgithub.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/protob\x06proto3" var ( file_forge_carbide_proto_rawDescOnce sync.Once @@ -53984,2764 +56448,2867 @@ func file_forge_carbide_proto_rawDescGZIP() []byte { return file_forge_carbide_proto_rawDescData } -var file_forge_carbide_proto_enumTypes = make([]protoimpl.EnumInfo, 69) -var file_forge_carbide_proto_msgTypes = make([]protoimpl.MessageInfo, 753) +var file_forge_carbide_proto_enumTypes = make([]protoimpl.EnumInfo, 76) +var file_forge_carbide_proto_msgTypes = make([]protoimpl.MessageInfo, 780) var file_forge_carbide_proto_goTypes = []any{ - (JwksKind)(0), // 0: forge.JwksKind - (MachineIngestionState)(0), // 1: forge.MachineIngestionState - (CredentialType)(0), // 2: forge.CredentialType - (VpcVirtualizationType)(0), // 3: forge.VpcVirtualizationType - (PrefixMatchType)(0), // 4: forge.PrefixMatchType - (TenantState)(0), // 5: forge.TenantState - (DeletedFilter)(0), // 6: forge.DeletedFilter - (NetworkSegmentType)(0), // 7: forge.NetworkSegmentType - (NetworkSegmentFlag)(0), // 8: forge.NetworkSegmentFlag - (IssueCategory)(0), // 9: forge.IssueCategory - (AssignStaticAddressStatus)(0), // 10: forge.AssignStaticAddressStatus - (RemoveStaticAddressStatus)(0), // 11: forge.RemoveStaticAddressStatus - (MachineType)(0), // 12: forge.MachineType - (InstanceNetworkSegmentMembershipType)(0), // 13: forge.InstanceNetworkSegmentMembershipType - (ControllerStateOutcome)(0), // 14: forge.ControllerStateOutcome - (SyncState)(0), // 15: forge.SyncState - (MachineArchitecture)(0), // 16: forge.MachineArchitecture - (InterfaceAssociationType)(0), // 17: forge.InterfaceAssociationType - (ExpireDhcpLeaseStatus)(0), // 18: forge.ExpireDhcpLeaseStatus - (UserRoles)(0), // 19: forge.UserRoles - (MachineHardwareInfoUpdateType)(0), // 20: forge.MachineHardwareInfoUpdateType - (ManagedHostQuarantineMode)(0), // 21: forge.ManagedHostQuarantineMode - (VpcIsolationBehaviorType)(0), // 22: forge.VpcIsolationBehaviorType - (AgentUpgradePolicy)(0), // 23: forge.AgentUpgradePolicy - (LockdownAction)(0), // 24: forge.LockdownAction - (BMCRequestType)(0), // 25: forge.BMCRequestType - (InterfaceFunctionType)(0), // 26: forge.InterfaceFunctionType - (OverrideMode)(0), // 27: forge.OverrideMode - (ResourcePoolType)(0), // 28: forge.ResourcePoolType - (MaintenanceOperation)(0), // 29: forge.MaintenanceOperation - (ConfigSetting)(0), // 30: forge.ConfigSetting - (UuidType)(0), // 31: forge.UuidType - (MacOwner)(0), // 32: forge.MacOwner - (UpdateInitiator)(0), // 33: forge.UpdateInitiator - (IpType)(0), // 34: forge.IpType - (RouteServerSourceType)(0), // 35: forge.RouteServerSourceType - (OsImageStatus)(0), // 36: forge.OsImageStatus - (MachineValidationStarted)(0), // 37: forge.MachineValidationStarted - (MachineValidationInProgress)(0), // 38: forge.MachineValidationInProgress - (MachineValidationCompleted)(0), // 39: forge.MachineValidationCompleted - (MachineCapabilityDeviceType)(0), // 40: forge.MachineCapabilityDeviceType - (MachineCapabilityType)(0), // 41: forge.MachineCapabilityType - (NetworkSecurityGroupSource)(0), // 42: forge.NetworkSecurityGroupSource - (NetworkSecurityGroupPropagationStatus)(0), // 43: forge.NetworkSecurityGroupPropagationStatus - (NetworkSecurityGroupRuleDirection)(0), // 44: forge.NetworkSecurityGroupRuleDirection - (NetworkSecurityGroupRuleProtocol)(0), // 45: forge.NetworkSecurityGroupRuleProtocol - (NetworkSecurityGroupRuleAction)(0), // 46: forge.NetworkSecurityGroupRuleAction - (PowerState)(0), // 47: forge.PowerState - (RackManagerForgeCmd)(0), // 48: forge.RackManagerForgeCmd - (TrimTableTarget)(0), // 49: forge.TrimTableTarget - (DpuExtensionServiceType)(0), // 50: forge.DpuExtensionServiceType - (DpuExtensionServiceDeploymentStatus)(0), // 51: forge.DpuExtensionServiceDeploymentStatus - (ScoutStreamErrorStatus)(0), // 52: forge.ScoutStreamErrorStatus - (ComponentManagerStatusCode)(0), // 53: forge.ComponentManagerStatusCode - (FirmwareUpdateState)(0), // 54: forge.FirmwareUpdateState - (NvSwitchComponent)(0), // 55: forge.NvSwitchComponent - (PowerShelfComponent)(0), // 56: forge.PowerShelfComponent - (ComputeTrayComponent)(0), // 57: forge.ComputeTrayComponent - (InstancePowerRequest_Operation)(0), // 58: forge.InstancePowerRequest.Operation - (InstanceUpdateStatus_Module)(0), // 59: forge.InstanceUpdateStatus.Module - (MachineCredentialsUpdateRequest_CredentialPurpose)(0), // 60: forge.MachineCredentialsUpdateRequest.CredentialPurpose - (ForgeAgentControlResponse_Action)(0), // 61: forge.ForgeAgentControlResponse.Action - (MachineCleanupInfo_CleanupResult)(0), // 62: forge.MachineCleanupInfo.CleanupResult - (DpuReprovisioningRequest_Mode)(0), // 63: forge.DpuReprovisioningRequest.Mode - (HostReprovisioningRequest_Mode)(0), // 64: forge.HostReprovisioningRequest.Mode - (MachineSetAutoUpdateRequest_SetAutoupdateAction)(0), // 65: forge.MachineSetAutoUpdateRequest.SetAutoupdateAction - (MachineValidationOnDemandRequest_Action)(0), // 66: forge.MachineValidationOnDemandRequest.Action - (AdminPowerControlRequest_SystemPowerControl)(0), // 67: forge.AdminPowerControlRequest.SystemPowerControl - (GetRedfishJobStateResponse_RedfishJobState)(0), // 68: forge.GetRedfishJobStateResponse.RedfishJobState - (*AttestationIdsRequest)(nil), // 69: forge.AttestationIdsRequest - (*AttestationData)(nil), // 70: forge.AttestationData - (*AttestationMachineList)(nil), // 71: forge.AttestationMachineList - (*AttestationResponse)(nil), // 72: forge.AttestationResponse - (*MachineIdentityRequest)(nil), // 73: forge.MachineIdentityRequest - (*MachineIdentityResponse)(nil), // 74: forge.MachineIdentityResponse - (*GetIdentityConfigRequest)(nil), // 75: forge.GetIdentityConfigRequest - (*IdentityConfig)(nil), // 76: forge.IdentityConfig - (*IdentityConfigRequest)(nil), // 77: forge.IdentityConfigRequest - (*IdentityConfigResponse)(nil), // 78: forge.IdentityConfigResponse - (*ClientSecretBasic)(nil), // 79: forge.ClientSecretBasic - (*ClientSecretBasicResponse)(nil), // 80: forge.ClientSecretBasicResponse - (*TokenDelegationResponse)(nil), // 81: forge.TokenDelegationResponse - (*GetTokenDelegationRequest)(nil), // 82: forge.GetTokenDelegationRequest - (*TokenDelegation)(nil), // 83: forge.TokenDelegation - (*TokenDelegationRequest)(nil), // 84: forge.TokenDelegationRequest - (*Jwks)(nil), // 85: forge.Jwks - (*OpenIdConfiguration)(nil), // 86: forge.OpenIdConfiguration - (*JwksRequest)(nil), // 87: forge.JwksRequest - (*OpenIdConfigRequest)(nil), // 88: forge.OpenIdConfigRequest - (*MachineIngestionStateResponse)(nil), // 89: forge.MachineIngestionStateResponse - (*TpmCaAddedCaStatus)(nil), // 90: forge.TpmCaAddedCaStatus - (*TpmCaCertId)(nil), // 91: forge.TpmCaCertId - (*TpmEkCertStatus)(nil), // 92: forge.TpmEkCertStatus - (*TpmEkCertStatusCollection)(nil), // 93: forge.TpmEkCertStatusCollection - (*TpmCaCert)(nil), // 94: forge.TpmCaCert - (*TpmCaCertDetail)(nil), // 95: forge.TpmCaCertDetail - (*TpmCaCertDetailCollection)(nil), // 96: forge.TpmCaCertDetailCollection - (*AttestKeyBindChallenge)(nil), // 97: forge.AttestKeyBindChallenge - (*AttestQuoteRequest)(nil), // 98: forge.AttestQuoteRequest - (*AttestQuoteResponse)(nil), // 99: forge.AttestQuoteResponse - (*CredentialCreationRequest)(nil), // 100: forge.CredentialCreationRequest - (*CredentialDeletionRequest)(nil), // 101: forge.CredentialDeletionRequest - (*CredentialCreationResult)(nil), // 102: forge.CredentialCreationResult - (*CredentialDeletionResult)(nil), // 103: forge.CredentialDeletionResult - (*VersionRequest)(nil), // 104: forge.VersionRequest - (*BuildInfo)(nil), // 105: forge.BuildInfo - (*RuntimeConfig)(nil), // 106: forge.RuntimeConfig - (*EchoRequest)(nil), // 107: forge.EchoRequest - (*EchoResponse)(nil), // 108: forge.EchoResponse - (*DNSMessage)(nil), // 109: forge.DNSMessage - (*DnsRequest)(nil), // 110: forge.DnsRequest - (*DnsReply)(nil), // 111: forge.DnsReply - (*ConsoleInput)(nil), // 112: forge.ConsoleInput - (*ConsoleOutput)(nil), // 113: forge.ConsoleOutput - (*InstanceEvent)(nil), // 114: forge.InstanceEvent - (*VpcSearchQuery)(nil), // 115: forge.VpcSearchQuery - (*VpcSearchFilter)(nil), // 116: forge.VpcSearchFilter - (*VpcIdList)(nil), // 117: forge.VpcIdList - (*VpcsByIdsRequest)(nil), // 118: forge.VpcsByIdsRequest - (*TenantSearchQuery)(nil), // 119: forge.TenantSearchQuery - (*VpcStatus)(nil), // 120: forge.VpcStatus - (*Vpc)(nil), // 121: forge.Vpc - (*VpcCreationRequest)(nil), // 122: forge.VpcCreationRequest - (*VpcUpdateRequest)(nil), // 123: forge.VpcUpdateRequest - (*VpcUpdateResult)(nil), // 124: forge.VpcUpdateResult - (*VpcUpdateVirtualizationRequest)(nil), // 125: forge.VpcUpdateVirtualizationRequest - (*VpcUpdateVirtualizationResult)(nil), // 126: forge.VpcUpdateVirtualizationResult - (*VpcDeletionRequest)(nil), // 127: forge.VpcDeletionRequest - (*VpcDeletionResult)(nil), // 128: forge.VpcDeletionResult - (*VpcList)(nil), // 129: forge.VpcList - (*VpcPrefix)(nil), // 130: forge.VpcPrefix - (*VpcPrefixConfig)(nil), // 131: forge.VpcPrefixConfig - (*VpcPrefixStatus)(nil), // 132: forge.VpcPrefixStatus - (*VpcPrefixCreationRequest)(nil), // 133: forge.VpcPrefixCreationRequest - (*VpcPrefixSearchQuery)(nil), // 134: forge.VpcPrefixSearchQuery - (*VpcPrefixGetRequest)(nil), // 135: forge.VpcPrefixGetRequest - (*VpcPrefixIdList)(nil), // 136: forge.VpcPrefixIdList - (*VpcPrefixList)(nil), // 137: forge.VpcPrefixList - (*VpcPrefixUpdateRequest)(nil), // 138: forge.VpcPrefixUpdateRequest - (*VpcPrefixDeletionRequest)(nil), // 139: forge.VpcPrefixDeletionRequest - (*VpcPrefixDeletionResult)(nil), // 140: forge.VpcPrefixDeletionResult - (*VpcPeering)(nil), // 141: forge.VpcPeering - (*VpcPeeringIdList)(nil), // 142: forge.VpcPeeringIdList - (*VpcPeeringList)(nil), // 143: forge.VpcPeeringList - (*VpcPeeringCreationRequest)(nil), // 144: forge.VpcPeeringCreationRequest - (*VpcPeeringSearchFilter)(nil), // 145: forge.VpcPeeringSearchFilter - (*VpcPeeringsByIdsRequest)(nil), // 146: forge.VpcPeeringsByIdsRequest - (*VpcPeeringDeletionRequest)(nil), // 147: forge.VpcPeeringDeletionRequest - (*VpcPeeringDeletionResult)(nil), // 148: forge.VpcPeeringDeletionResult - (*IBPartitionConfig)(nil), // 149: forge.IBPartitionConfig - (*IBPartitionStatus)(nil), // 150: forge.IBPartitionStatus - (*IBPartition)(nil), // 151: forge.IBPartition - (*IBPartitionList)(nil), // 152: forge.IBPartitionList - (*IBPartitionCreationRequest)(nil), // 153: forge.IBPartitionCreationRequest - (*IBPartitionUpdateRequest)(nil), // 154: forge.IBPartitionUpdateRequest - (*IBPartitionDeletionRequest)(nil), // 155: forge.IBPartitionDeletionRequest - (*IBPartitionDeletionResult)(nil), // 156: forge.IBPartitionDeletionResult - (*IBPartitionSearchFilter)(nil), // 157: forge.IBPartitionSearchFilter - (*IBPartitionsByIdsRequest)(nil), // 158: forge.IBPartitionsByIdsRequest - (*IBPartitionIdList)(nil), // 159: forge.IBPartitionIdList - (*PowerShelfConfig)(nil), // 160: forge.PowerShelfConfig - (*PowerShelfStatus)(nil), // 161: forge.PowerShelfStatus - (*PowerShelf)(nil), // 162: forge.PowerShelf - (*PowerShelfList)(nil), // 163: forge.PowerShelfList - (*PowerShelfCreationRequest)(nil), // 164: forge.PowerShelfCreationRequest - (*PowerShelfDeletionRequest)(nil), // 165: forge.PowerShelfDeletionRequest - (*PowerShelfDeletionResult)(nil), // 166: forge.PowerShelfDeletionResult - (*PowerShelfStateHistoryRecord)(nil), // 167: forge.PowerShelfStateHistoryRecord - (*PowerShelfStateHistoriesRequest)(nil), // 168: forge.PowerShelfStateHistoriesRequest - (*PowerShelfStateHistories)(nil), // 169: forge.PowerShelfStateHistories - (*PowerShelfStateHistoryRecords)(nil), // 170: forge.PowerShelfStateHistoryRecords - (*PowerShelfQuery)(nil), // 171: forge.PowerShelfQuery - (*PowerShelfSearchFilter)(nil), // 172: forge.PowerShelfSearchFilter - (*PowerShelvesByIdsRequest)(nil), // 173: forge.PowerShelvesByIdsRequest - (*ExpectedPowerShelf)(nil), // 174: forge.ExpectedPowerShelf - (*ExpectedPowerShelfRequest)(nil), // 175: forge.ExpectedPowerShelfRequest - (*ExpectedPowerShelfList)(nil), // 176: forge.ExpectedPowerShelfList - (*LinkedExpectedPowerShelfList)(nil), // 177: forge.LinkedExpectedPowerShelfList - (*LinkedExpectedPowerShelf)(nil), // 178: forge.LinkedExpectedPowerShelf - (*SwitchConfig)(nil), // 179: forge.SwitchConfig - (*FabricManagerConfig)(nil), // 180: forge.FabricManagerConfig - (*SwitchStatus)(nil), // 181: forge.SwitchStatus - (*Switch)(nil), // 182: forge.Switch - (*SwitchList)(nil), // 183: forge.SwitchList - (*SwitchCreationRequest)(nil), // 184: forge.SwitchCreationRequest - (*SwitchDeletionRequest)(nil), // 185: forge.SwitchDeletionRequest - (*SwitchDeletionResult)(nil), // 186: forge.SwitchDeletionResult - (*SwitchStateHistoryRecord)(nil), // 187: forge.SwitchStateHistoryRecord - (*SwitchStateHistoriesRequest)(nil), // 188: forge.SwitchStateHistoriesRequest - (*SwitchStateHistories)(nil), // 189: forge.SwitchStateHistories - (*SwitchStateHistoryRecords)(nil), // 190: forge.SwitchStateHistoryRecords - (*SwitchQuery)(nil), // 191: forge.SwitchQuery - (*SwitchSearchFilter)(nil), // 192: forge.SwitchSearchFilter - (*SwitchesByIdsRequest)(nil), // 193: forge.SwitchesByIdsRequest - (*ExpectedSwitch)(nil), // 194: forge.ExpectedSwitch - (*ExpectedSwitchRequest)(nil), // 195: forge.ExpectedSwitchRequest - (*ExpectedSwitchList)(nil), // 196: forge.ExpectedSwitchList - (*LinkedExpectedSwitchList)(nil), // 197: forge.LinkedExpectedSwitchList - (*LinkedExpectedSwitch)(nil), // 198: forge.LinkedExpectedSwitch - (*ExpectedRack)(nil), // 199: forge.ExpectedRack - (*ExpectedRackRequest)(nil), // 200: forge.ExpectedRackRequest - (*ExpectedRackList)(nil), // 201: forge.ExpectedRackList - (*IBFabricSearchFilter)(nil), // 202: forge.IBFabricSearchFilter - (*IBFabricIdList)(nil), // 203: forge.IBFabricIdList - (*NetworkSegmentStateHistory)(nil), // 204: forge.NetworkSegmentStateHistory - (*NetworkSegment)(nil), // 205: forge.NetworkSegment - (*NetworkSegmentCreationRequest)(nil), // 206: forge.NetworkSegmentCreationRequest - (*NetworkSegmentDeletionRequest)(nil), // 207: forge.NetworkSegmentDeletionRequest - (*NetworkSegmentDeletionResult)(nil), // 208: forge.NetworkSegmentDeletionResult - (*NetworkSegmentSearchConfig)(nil), // 209: forge.NetworkSegmentSearchConfig - (*NetworkSegmentSearchFilter)(nil), // 210: forge.NetworkSegmentSearchFilter - (*NetworkSegmentIdList)(nil), // 211: forge.NetworkSegmentIdList - (*NetworkSegmentsByIdsRequest)(nil), // 212: forge.NetworkSegmentsByIdsRequest - (*NetworkPrefix)(nil), // 213: forge.NetworkPrefix - (*MachineState)(nil), // 214: forge.MachineState - (*InstancePowerRequest)(nil), // 215: forge.InstancePowerRequest - (*InstancePowerResult)(nil), // 216: forge.InstancePowerResult - (*InstanceList)(nil), // 217: forge.InstanceList - (*Label)(nil), // 218: forge.Label - (*Metadata)(nil), // 219: forge.Metadata - (*InstanceSearchFilter)(nil), // 220: forge.InstanceSearchFilter - (*InstanceIdList)(nil), // 221: forge.InstanceIdList - (*InstancesByIdsRequest)(nil), // 222: forge.InstancesByIdsRequest - (*InstanceAllocationRequest)(nil), // 223: forge.InstanceAllocationRequest - (*BatchInstanceAllocationRequest)(nil), // 224: forge.BatchInstanceAllocationRequest - (*BatchInstanceAllocationResponse)(nil), // 225: forge.BatchInstanceAllocationResponse - (*TenantConfig)(nil), // 226: forge.TenantConfig - (*OperatingSystem)(nil), // 227: forge.OperatingSystem - (*InlineIpxe)(nil), // 228: forge.InlineIpxe - (*InstanceConfig)(nil), // 229: forge.InstanceConfig - (*InstanceNetworkConfig)(nil), // 230: forge.InstanceNetworkConfig - (*InstanceInfinibandConfig)(nil), // 231: forge.InstanceInfinibandConfig - (*InstanceDpuExtensionServiceConfig)(nil), // 232: forge.InstanceDpuExtensionServiceConfig - (*InstanceDpuExtensionServicesConfig)(nil), // 233: forge.InstanceDpuExtensionServicesConfig - (*InstanceNVLinkConfig)(nil), // 234: forge.InstanceNVLinkConfig - (*InstanceOperatingSystemUpdateRequest)(nil), // 235: forge.InstanceOperatingSystemUpdateRequest - (*InstanceConfigUpdateRequest)(nil), // 236: forge.InstanceConfigUpdateRequest - (*InstanceStatus)(nil), // 237: forge.InstanceStatus - (*InstanceNetworkStatus)(nil), // 238: forge.InstanceNetworkStatus - (*InstanceInfinibandStatus)(nil), // 239: forge.InstanceInfinibandStatus - (*DpuExtensionServiceStatus)(nil), // 240: forge.DpuExtensionServiceStatus - (*InstanceDpuExtensionServiceStatus)(nil), // 241: forge.InstanceDpuExtensionServiceStatus - (*InstanceDpuExtensionServicesStatus)(nil), // 242: forge.InstanceDpuExtensionServicesStatus - (*InstanceNVLinkStatus)(nil), // 243: forge.InstanceNVLinkStatus - (*Instance)(nil), // 244: forge.Instance - (*InstanceUpdateStatus)(nil), // 245: forge.InstanceUpdateStatus - (*InstanceInterfaceConfig)(nil), // 246: forge.InstanceInterfaceConfig - (*InstanceIBInterfaceConfig)(nil), // 247: forge.InstanceIBInterfaceConfig - (*InstanceInterfaceStatus)(nil), // 248: forge.InstanceInterfaceStatus - (*InstanceIBInterfaceStatus)(nil), // 249: forge.InstanceIBInterfaceStatus - (*InstanceNVLinkGpuStatus)(nil), // 250: forge.InstanceNVLinkGpuStatus - (*InstanceNVLinkGpuConfig)(nil), // 251: forge.InstanceNVLinkGpuConfig - (*InstancePhoneHomeLastContactRequest)(nil), // 252: forge.InstancePhoneHomeLastContactRequest - (*InstancePhoneHomeLastContactResponse)(nil), // 253: forge.InstancePhoneHomeLastContactResponse - (*Issue)(nil), // 254: forge.Issue - (*InstanceReleaseRequest)(nil), // 255: forge.InstanceReleaseRequest - (*InstanceReleaseResult)(nil), // 256: forge.InstanceReleaseResult - (*MachinesByIdsRequest)(nil), // 257: forge.MachinesByIdsRequest - (*MachineSearchConfig)(nil), // 258: forge.MachineSearchConfig - (*MachineStateHistoriesRequest)(nil), // 259: forge.MachineStateHistoriesRequest - (*MachineStateHistories)(nil), // 260: forge.MachineStateHistories - (*MachineStateHistoryRecords)(nil), // 261: forge.MachineStateHistoryRecords - (*MachineHealthHistoriesRequest)(nil), // 262: forge.MachineHealthHistoriesRequest - (*HealthHistories)(nil), // 263: forge.HealthHistories - (*HealthHistoryRecords)(nil), // 264: forge.HealthHistoryRecords - (*HealthHistoryRecord)(nil), // 265: forge.HealthHistoryRecord - (*TenantByOrganizationIdsRequest)(nil), // 266: forge.TenantByOrganizationIdsRequest - (*TenantSearchFilter)(nil), // 267: forge.TenantSearchFilter - (*TenantList)(nil), // 268: forge.TenantList - (*TenantOrganizationIdList)(nil), // 269: forge.TenantOrganizationIdList - (*InterfaceList)(nil), // 270: forge.InterfaceList - (*MachineList)(nil), // 271: forge.MachineList - (*InterfaceDeleteQuery)(nil), // 272: forge.InterfaceDeleteQuery - (*InterfaceSearchQuery)(nil), // 273: forge.InterfaceSearchQuery - (*AssignStaticAddressRequest)(nil), // 274: forge.AssignStaticAddressRequest - (*AssignStaticAddressResponse)(nil), // 275: forge.AssignStaticAddressResponse - (*RemoveStaticAddressRequest)(nil), // 276: forge.RemoveStaticAddressRequest - (*RemoveStaticAddressResponse)(nil), // 277: forge.RemoveStaticAddressResponse - (*FindInterfaceAddressesRequest)(nil), // 278: forge.FindInterfaceAddressesRequest - (*InterfaceAddress)(nil), // 279: forge.InterfaceAddress - (*FindInterfaceAddressesResponse)(nil), // 280: forge.FindInterfaceAddressesResponse - (*BmcInfo)(nil), // 281: forge.BmcInfo - (*Machine)(nil), // 282: forge.Machine - (*InstanceNetworkRestrictions)(nil), // 283: forge.InstanceNetworkRestrictions - (*MachineMetadataUpdateRequest)(nil), // 284: forge.MachineMetadataUpdateRequest - (*RackMetadataUpdateRequest)(nil), // 285: forge.RackMetadataUpdateRequest - (*SwitchMetadataUpdateRequest)(nil), // 286: forge.SwitchMetadataUpdateRequest - (*PowerShelfMetadataUpdateRequest)(nil), // 287: forge.PowerShelfMetadataUpdateRequest - (*DpuAgentInventoryReport)(nil), // 288: forge.DpuAgentInventoryReport - (*MachineComponentInventory)(nil), // 289: forge.MachineComponentInventory - (*MachineInventorySoftwareComponent)(nil), // 290: forge.MachineInventorySoftwareComponent - (*HealthOverrideOrigin)(nil), // 291: forge.HealthOverrideOrigin - (*ControllerStateReason)(nil), // 292: forge.ControllerStateReason - (*ControllerStateSourceReference)(nil), // 293: forge.ControllerStateSourceReference - (*StateSla)(nil), // 294: forge.StateSla - (*InstanceTenantStatus)(nil), // 295: forge.InstanceTenantStatus - (*MachineEvent)(nil), // 296: forge.MachineEvent - (*MachineInterface)(nil), // 297: forge.MachineInterface - (*InfinibandStatusObservation)(nil), // 298: forge.InfinibandStatusObservation - (*MachineIbInterface)(nil), // 299: forge.MachineIbInterface - (*DhcpDiscovery)(nil), // 300: forge.DhcpDiscovery - (*ExpireDhcpLeaseRequest)(nil), // 301: forge.ExpireDhcpLeaseRequest - (*ExpireDhcpLeaseResponse)(nil), // 302: forge.ExpireDhcpLeaseResponse - (*DhcpRecord)(nil), // 303: forge.DhcpRecord - (*NetworkSegmentList)(nil), // 304: forge.NetworkSegmentList - (*SSHKeyValidationRequest)(nil), // 305: forge.SSHKeyValidationRequest - (*SSHKeyValidationResponse)(nil), // 306: forge.SSHKeyValidationResponse - (*GetBmcCredentialsRequest)(nil), // 307: forge.GetBmcCredentialsRequest - (*GetBmcCredentialsResponse)(nil), // 308: forge.GetBmcCredentialsResponse - (*BmcCredentials)(nil), // 309: forge.BmcCredentials - (*GetSiteExplorationRequest)(nil), // 310: forge.GetSiteExplorationRequest - (*ClearSiteExplorationErrorRequest)(nil), // 311: forge.ClearSiteExplorationErrorRequest - (*ReExploreEndpointRequest)(nil), // 312: forge.ReExploreEndpointRequest - (*DeleteExploredEndpointRequest)(nil), // 313: forge.DeleteExploredEndpointRequest - (*PauseExploredEndpointRemediationRequest)(nil), // 314: forge.PauseExploredEndpointRemediationRequest - (*DeleteExploredEndpointResponse)(nil), // 315: forge.DeleteExploredEndpointResponse - (*BmcEndpointRequest)(nil), // 316: forge.BmcEndpointRequest - (*SshTimeoutConfig)(nil), // 317: forge.SshTimeoutConfig - (*SshRequest)(nil), // 318: forge.SshRequest - (*CopyBfbToDpuRshimRequest)(nil), // 319: forge.CopyBfbToDpuRshimRequest - (*UpdateMachineHardwareInfoRequest)(nil), // 320: forge.UpdateMachineHardwareInfoRequest - (*MachineHardwareInfo)(nil), // 321: forge.MachineHardwareInfo - (*ManagedHostNetworkConfigRequest)(nil), // 322: forge.ManagedHostNetworkConfigRequest - (*ManagedHostNetworkConfigResponse)(nil), // 323: forge.ManagedHostNetworkConfigResponse - (*TrafficInterceptConfig)(nil), // 324: forge.TrafficInterceptConfig - (*TrafficInterceptBridging)(nil), // 325: forge.TrafficInterceptBridging - (*ManagedHostDpuExtensionServiceConfig)(nil), // 326: forge.ManagedHostDpuExtensionServiceConfig - (*ManagedHostQuarantineState)(nil), // 327: forge.ManagedHostQuarantineState - (*GetManagedHostQuarantineStateRequest)(nil), // 328: forge.GetManagedHostQuarantineStateRequest - (*GetManagedHostQuarantineStateResponse)(nil), // 329: forge.GetManagedHostQuarantineStateResponse - (*SetManagedHostQuarantineStateRequest)(nil), // 330: forge.SetManagedHostQuarantineStateRequest - (*SetManagedHostQuarantineStateResponse)(nil), // 331: forge.SetManagedHostQuarantineStateResponse - (*ClearManagedHostQuarantineStateRequest)(nil), // 332: forge.ClearManagedHostQuarantineStateRequest - (*ClearManagedHostQuarantineStateResponse)(nil), // 333: forge.ClearManagedHostQuarantineStateResponse - (*ManagedHostNetworkConfig)(nil), // 334: forge.ManagedHostNetworkConfig - (*FlatInterfaceConfig)(nil), // 335: forge.FlatInterfaceConfig - (*FlatInterfaceNetworkSecurityGroupConfig)(nil), // 336: forge.FlatInterfaceNetworkSecurityGroupConfig - (*ManagedHostNetworkStatusRequest)(nil), // 337: forge.ManagedHostNetworkStatusRequest - (*ManagedHostNetworkStatusResponse)(nil), // 338: forge.ManagedHostNetworkStatusResponse - (*DpuAgentUpgradeCheckRequest)(nil), // 339: forge.DpuAgentUpgradeCheckRequest - (*DpuAgentUpgradeCheckResponse)(nil), // 340: forge.DpuAgentUpgradeCheckResponse - (*DpuAgentUpgradePolicyRequest)(nil), // 341: forge.DpuAgentUpgradePolicyRequest - (*DpuAgentUpgradePolicyResponse)(nil), // 342: forge.DpuAgentUpgradePolicyResponse - (*AdminForceDeleteMachineRequest)(nil), // 343: forge.AdminForceDeleteMachineRequest - (*AdminForceDeleteMachineResponse)(nil), // 344: forge.AdminForceDeleteMachineResponse - (*DisableSecureBootResponse)(nil), // 345: forge.DisableSecureBootResponse - (*LockdownRequest)(nil), // 346: forge.LockdownRequest - (*LockdownResponse)(nil), // 347: forge.LockdownResponse - (*LockdownStatusRequest)(nil), // 348: forge.LockdownStatusRequest - (*MachineSetupStatusRequest)(nil), // 349: forge.MachineSetupStatusRequest - (*MachineSetupRequest)(nil), // 350: forge.MachineSetupRequest - (*MachineSetupResponse)(nil), // 351: forge.MachineSetupResponse - (*SetDpuFirstBootOrderRequest)(nil), // 352: forge.SetDpuFirstBootOrderRequest - (*SetDpuFirstBootOrderResponse)(nil), // 353: forge.SetDpuFirstBootOrderResponse - (*AdminRebootRequest)(nil), // 354: forge.AdminRebootRequest - (*AdminRebootResponse)(nil), // 355: forge.AdminRebootResponse - (*AdminBmcResetRequest)(nil), // 356: forge.AdminBmcResetRequest - (*AdminBmcResetResponse)(nil), // 357: forge.AdminBmcResetResponse - (*EnableInfiniteBootRequest)(nil), // 358: forge.EnableInfiniteBootRequest - (*EnableInfiniteBootResponse)(nil), // 359: forge.EnableInfiniteBootResponse - (*IsInfiniteBootEnabledRequest)(nil), // 360: forge.IsInfiniteBootEnabledRequest - (*IsInfiniteBootEnabledResponse)(nil), // 361: forge.IsInfiniteBootEnabledResponse - (*BMCMetaDataGetRequest)(nil), // 362: forge.BMCMetaDataGetRequest - (*BMCMetaDataGetResponse)(nil), // 363: forge.BMCMetaDataGetResponse - (*MachineCredentialsUpdateRequest)(nil), // 364: forge.MachineCredentialsUpdateRequest - (*MachineCredentialsUpdateResponse)(nil), // 365: forge.MachineCredentialsUpdateResponse - (*ForgeAgentControlRequest)(nil), // 366: forge.ForgeAgentControlRequest - (*ForgeAgentControlResponse)(nil), // 367: forge.ForgeAgentControlResponse - (*MachineDiscoveryInfo)(nil), // 368: forge.MachineDiscoveryInfo - (*MachineDiscoveryCompletedRequest)(nil), // 369: forge.MachineDiscoveryCompletedRequest - (*MachineCleanupInfo)(nil), // 370: forge.MachineCleanupInfo - (*MachineCertificate)(nil), // 371: forge.MachineCertificate - (*MachineCertificateRenewRequest)(nil), // 372: forge.MachineCertificateRenewRequest - (*MachineCertificateResult)(nil), // 373: forge.MachineCertificateResult - (*MachineDiscoveryResult)(nil), // 374: forge.MachineDiscoveryResult - (*MachineDiscoveryCompletedResponse)(nil), // 375: forge.MachineDiscoveryCompletedResponse - (*MachineCleanupResult)(nil), // 376: forge.MachineCleanupResult - (*ForgeScoutErrorReport)(nil), // 377: forge.ForgeScoutErrorReport - (*ForgeScoutErrorReportResult)(nil), // 378: forge.ForgeScoutErrorReportResult - (*PxeInstructionRequest)(nil), // 379: forge.PxeInstructionRequest - (*PxeInstructions)(nil), // 380: forge.PxeInstructions - (*CloudInitDiscoveryInstructions)(nil), // 381: forge.CloudInitDiscoveryInstructions - (*CloudInitMetaData)(nil), // 382: forge.CloudInitMetaData - (*CloudInitInstructionsRequest)(nil), // 383: forge.CloudInitInstructionsRequest - (*CloudInitInstructions)(nil), // 384: forge.CloudInitInstructions - (*DpuNetworkStatus)(nil), // 385: forge.DpuNetworkStatus - (*LastDhcpRequest)(nil), // 386: forge.LastDhcpRequest - (*DpuExtensionServiceStatusObservation)(nil), // 387: forge.DpuExtensionServiceStatusObservation - (*DpuExtensionServiceComponent)(nil), // 388: forge.DpuExtensionServiceComponent - (*OptionalHealthReport)(nil), // 389: forge.OptionalHealthReport - (*HealthReportOverride)(nil), // 390: forge.HealthReportOverride - (*InsertHealthReportOverrideRequest)(nil), // 391: forge.InsertHealthReportOverrideRequest - (*InsertRackHealthReportOverrideRequest)(nil), // 392: forge.InsertRackHealthReportOverrideRequest - (*RemoveRackHealthReportOverrideRequest)(nil), // 393: forge.RemoveRackHealthReportOverrideRequest - (*ListRackHealthReportOverridesRequest)(nil), // 394: forge.ListRackHealthReportOverridesRequest - (*ListHealthReportOverrideResponse)(nil), // 395: forge.ListHealthReportOverrideResponse - (*RemoveHealthReportOverrideRequest)(nil), // 396: forge.RemoveHealthReportOverrideRequest - (*InstanceInterfaceStatusObservation)(nil), // 397: forge.InstanceInterfaceStatusObservation - (*FabricInterfaceData)(nil), // 398: forge.FabricInterfaceData - (*LinkData)(nil), // 399: forge.LinkData - (*Tenant)(nil), // 400: forge.Tenant - (*CreateTenantRequest)(nil), // 401: forge.CreateTenantRequest - (*CreateTenantResponse)(nil), // 402: forge.CreateTenantResponse - (*UpdateTenantRequest)(nil), // 403: forge.UpdateTenantRequest - (*UpdateTenantResponse)(nil), // 404: forge.UpdateTenantResponse - (*FindTenantRequest)(nil), // 405: forge.FindTenantRequest - (*FindTenantResponse)(nil), // 406: forge.FindTenantResponse - (*TenantKeysetIdentifier)(nil), // 407: forge.TenantKeysetIdentifier - (*TenantPublicKey)(nil), // 408: forge.TenantPublicKey - (*TenantKeysetContent)(nil), // 409: forge.TenantKeysetContent - (*TenantKeyset)(nil), // 410: forge.TenantKeyset - (*CreateTenantKeysetRequest)(nil), // 411: forge.CreateTenantKeysetRequest - (*CreateTenantKeysetResponse)(nil), // 412: forge.CreateTenantKeysetResponse - (*TenantKeySetList)(nil), // 413: forge.TenantKeySetList - (*UpdateTenantKeysetRequest)(nil), // 414: forge.UpdateTenantKeysetRequest - (*UpdateTenantKeysetResponse)(nil), // 415: forge.UpdateTenantKeysetResponse - (*DeleteTenantKeysetRequest)(nil), // 416: forge.DeleteTenantKeysetRequest - (*DeleteTenantKeysetResponse)(nil), // 417: forge.DeleteTenantKeysetResponse - (*TenantKeysetSearchFilter)(nil), // 418: forge.TenantKeysetSearchFilter - (*TenantKeysetIdList)(nil), // 419: forge.TenantKeysetIdList - (*TenantKeysetsByIdsRequest)(nil), // 420: forge.TenantKeysetsByIdsRequest - (*ValidateTenantPublicKeyRequest)(nil), // 421: forge.ValidateTenantPublicKeyRequest - (*ValidateTenantPublicKeyResponse)(nil), // 422: forge.ValidateTenantPublicKeyResponse - (*ListResourcePoolsRequest)(nil), // 423: forge.ListResourcePoolsRequest - (*ResourcePools)(nil), // 424: forge.ResourcePools - (*ResourcePool)(nil), // 425: forge.ResourcePool - (*GrowResourcePoolRequest)(nil), // 426: forge.GrowResourcePoolRequest - (*GrowResourcePoolResponse)(nil), // 427: forge.GrowResourcePoolResponse - (*Range)(nil), // 428: forge.Range - (*MigrateVpcVniResponse)(nil), // 429: forge.MigrateVpcVniResponse - (*MaintenanceRequest)(nil), // 430: forge.MaintenanceRequest - (*SetDynamicConfigRequest)(nil), // 431: forge.SetDynamicConfigRequest - (*FindIpAddressRequest)(nil), // 432: forge.FindIpAddressRequest - (*FindIpAddressResponse)(nil), // 433: forge.FindIpAddressResponse - (*IdentifyUuidRequest)(nil), // 434: forge.IdentifyUuidRequest - (*IdentifyUuidResponse)(nil), // 435: forge.IdentifyUuidResponse - (*IdentifyMacRequest)(nil), // 436: forge.IdentifyMacRequest - (*IdentifyMacResponse)(nil), // 437: forge.IdentifyMacResponse - (*IdentifySerialRequest)(nil), // 438: forge.IdentifySerialRequest - (*IdentifySerialResponse)(nil), // 439: forge.IdentifySerialResponse - (*DpuReprovisioningRequest)(nil), // 440: forge.DpuReprovisioningRequest - (*DpuReprovisioningListRequest)(nil), // 441: forge.DpuReprovisioningListRequest - (*DpuReprovisioningListResponse)(nil), // 442: forge.DpuReprovisioningListResponse - (*HostReprovisioningRequest)(nil), // 443: forge.HostReprovisioningRequest - (*HostReprovisioningListRequest)(nil), // 444: forge.HostReprovisioningListRequest - (*HostReprovisioningListResponse)(nil), // 445: forge.HostReprovisioningListResponse - (*DpuInfo)(nil), // 446: forge.DpuInfo - (*GetDpuInfoListRequest)(nil), // 447: forge.GetDpuInfoListRequest - (*GetDpuInfoListResponse)(nil), // 448: forge.GetDpuInfoListResponse - (*IpAddressMatch)(nil), // 449: forge.IpAddressMatch - (*MachineBootOverride)(nil), // 450: forge.MachineBootOverride - (*ConnectedDevice)(nil), // 451: forge.ConnectedDevice - (*ConnectedDeviceList)(nil), // 452: forge.ConnectedDeviceList - (*BmcIpList)(nil), // 453: forge.BmcIpList - (*BmcIp)(nil), // 454: forge.BmcIp - (*MacAddressBmcIp)(nil), // 455: forge.MacAddressBmcIp - (*MachineIdBmcIpPairs)(nil), // 456: forge.MachineIdBmcIpPairs - (*MachineIdBmcIp)(nil), // 457: forge.MachineIdBmcIp - (*NetworkDevice)(nil), // 458: forge.NetworkDevice - (*NetworkTopologyRequest)(nil), // 459: forge.NetworkTopologyRequest - (*NetworkDeviceIdList)(nil), // 460: forge.NetworkDeviceIdList - (*NetworkTopologyData)(nil), // 461: forge.NetworkTopologyData - (*RouteServers)(nil), // 462: forge.RouteServers - (*RouteServerEntries)(nil), // 463: forge.RouteServerEntries - (*RouteServer)(nil), // 464: forge.RouteServer - (*SetHostUefiPasswordRequest)(nil), // 465: forge.SetHostUefiPasswordRequest - (*SetHostUefiPasswordResponse)(nil), // 466: forge.SetHostUefiPasswordResponse - (*ClearHostUefiPasswordRequest)(nil), // 467: forge.ClearHostUefiPasswordRequest - (*ClearHostUefiPasswordResponse)(nil), // 468: forge.ClearHostUefiPasswordResponse - (*OsImageAttributes)(nil), // 469: forge.OsImageAttributes - (*OsImage)(nil), // 470: forge.OsImage - (*ListOsImageRequest)(nil), // 471: forge.ListOsImageRequest - (*ListOsImageResponse)(nil), // 472: forge.ListOsImageResponse - (*DeleteOsImageRequest)(nil), // 473: forge.DeleteOsImageRequest - (*DeleteOsImageResponse)(nil), // 474: forge.DeleteOsImageResponse - (*ExpectedHostNic)(nil), // 475: forge.ExpectedHostNic - (*ExpectedMachine)(nil), // 476: forge.ExpectedMachine - (*ExpectedMachineRequest)(nil), // 477: forge.ExpectedMachineRequest - (*ExpectedMachineList)(nil), // 478: forge.ExpectedMachineList - (*LinkedExpectedMachineList)(nil), // 479: forge.LinkedExpectedMachineList - (*LinkedExpectedMachine)(nil), // 480: forge.LinkedExpectedMachine - (*BatchExpectedMachineOperationRequest)(nil), // 481: forge.BatchExpectedMachineOperationRequest - (*ExpectedMachineOperationResult)(nil), // 482: forge.ExpectedMachineOperationResult - (*BatchExpectedMachineOperationResponse)(nil), // 483: forge.BatchExpectedMachineOperationResponse - (*MachineRebootCompletedResponse)(nil), // 484: forge.MachineRebootCompletedResponse - (*MachineRebootCompletedRequest)(nil), // 485: forge.MachineRebootCompletedRequest - (*MachineValidationCompletedRequest)(nil), // 486: forge.MachineValidationCompletedRequest - (*MachineValidationCompletedResponse)(nil), // 487: forge.MachineValidationCompletedResponse - (*MachineValidationResult)(nil), // 488: forge.MachineValidationResult - (*MachineValidationResultPostRequest)(nil), // 489: forge.MachineValidationResultPostRequest - (*MachineValidationResultList)(nil), // 490: forge.MachineValidationResultList - (*MachineValidationGetRequest)(nil), // 491: forge.MachineValidationGetRequest - (*MachineValidationStatus)(nil), // 492: forge.MachineValidationStatus - (*MachineValidationRun)(nil), // 493: forge.MachineValidationRun - (*MachineSetAutoUpdateRequest)(nil), // 494: forge.MachineSetAutoUpdateRequest - (*MachineSetAutoUpdateResponse)(nil), // 495: forge.MachineSetAutoUpdateResponse - (*GetMachineValidationExternalConfigRequest)(nil), // 496: forge.GetMachineValidationExternalConfigRequest - (*MachineValidationExternalConfig)(nil), // 497: forge.MachineValidationExternalConfig - (*GetMachineValidationExternalConfigResponse)(nil), // 498: forge.GetMachineValidationExternalConfigResponse - (*GetMachineValidationExternalConfigsRequest)(nil), // 499: forge.GetMachineValidationExternalConfigsRequest - (*GetMachineValidationExternalConfigsResponse)(nil), // 500: forge.GetMachineValidationExternalConfigsResponse - (*AddUpdateMachineValidationExternalConfigRequest)(nil), // 501: forge.AddUpdateMachineValidationExternalConfigRequest - (*RemoveMachineValidationExternalConfigRequest)(nil), // 502: forge.RemoveMachineValidationExternalConfigRequest - (*MachineValidationOnDemandRequest)(nil), // 503: forge.MachineValidationOnDemandRequest - (*MachineValidationOnDemandResponse)(nil), // 504: forge.MachineValidationOnDemandResponse - (*AdminPowerControlRequest)(nil), // 505: forge.AdminPowerControlRequest - (*AdminPowerControlResponse)(nil), // 506: forge.AdminPowerControlResponse - (*GetRedfishJobStateRequest)(nil), // 507: forge.GetRedfishJobStateRequest - (*GetRedfishJobStateResponse)(nil), // 508: forge.GetRedfishJobStateResponse - (*MachineValidationRunList)(nil), // 509: forge.MachineValidationRunList - (*MachineValidationRunListGetRequest)(nil), // 510: forge.MachineValidationRunListGetRequest - (*IsBmcInManagedHostResponse)(nil), // 511: forge.IsBmcInManagedHostResponse - (*BmcCredentialStatusResponse)(nil), // 512: forge.BmcCredentialStatusResponse - (*MachineValidationTestsGetRequest)(nil), // 513: forge.MachineValidationTestsGetRequest - (*MachineValidationTestUpdateRequest)(nil), // 514: forge.MachineValidationTestUpdateRequest - (*MachineValidationTestAddRequest)(nil), // 515: forge.MachineValidationTestAddRequest - (*MachineValidationTestAddUpdateResponse)(nil), // 516: forge.MachineValidationTestAddUpdateResponse - (*MachineValidationTestsGetResponse)(nil), // 517: forge.MachineValidationTestsGetResponse - (*MachineValidationTestVerfiedRequest)(nil), // 518: forge.MachineValidationTestVerfiedRequest - (*MachineValidationTestVerfiedResponse)(nil), // 519: forge.MachineValidationTestVerfiedResponse - (*MachineValidationTest)(nil), // 520: forge.MachineValidationTest - (*MachineValidationTestNextVersionResponse)(nil), // 521: forge.MachineValidationTestNextVersionResponse - (*MachineValidationTestNextVersionRequest)(nil), // 522: forge.MachineValidationTestNextVersionRequest - (*MachineValidationTestEnableDisableTestRequest)(nil), // 523: forge.MachineValidationTestEnableDisableTestRequest - (*MachineValidationTestEnableDisableTestResponse)(nil), // 524: forge.MachineValidationTestEnableDisableTestResponse - (*MachineValidationRunRequest)(nil), // 525: forge.MachineValidationRunRequest - (*MachineValidationRunResponse)(nil), // 526: forge.MachineValidationRunResponse - (*MachineCapabilityAttributesCpu)(nil), // 527: forge.MachineCapabilityAttributesCpu - (*MachineCapabilityAttributesGpu)(nil), // 528: forge.MachineCapabilityAttributesGpu - (*MachineCapabilityAttributesMemory)(nil), // 529: forge.MachineCapabilityAttributesMemory - (*MachineCapabilityAttributesStorage)(nil), // 530: forge.MachineCapabilityAttributesStorage - (*MachineCapabilityAttributesNetwork)(nil), // 531: forge.MachineCapabilityAttributesNetwork - (*MachineCapabilityAttributesInfiniband)(nil), // 532: forge.MachineCapabilityAttributesInfiniband - (*MachineCapabilityAttributesDpu)(nil), // 533: forge.MachineCapabilityAttributesDpu - (*MachineCapabilitiesSet)(nil), // 534: forge.MachineCapabilitiesSet - (*InstanceTypeAttributes)(nil), // 535: forge.InstanceTypeAttributes - (*InstanceType)(nil), // 536: forge.InstanceType - (*InstanceTypeMachineCapabilityFilterAttributes)(nil), // 537: forge.InstanceTypeMachineCapabilityFilterAttributes - (*CreateInstanceTypeRequest)(nil), // 538: forge.CreateInstanceTypeRequest - (*CreateInstanceTypeResponse)(nil), // 539: forge.CreateInstanceTypeResponse - (*FindInstanceTypeIdsRequest)(nil), // 540: forge.FindInstanceTypeIdsRequest - (*FindInstanceTypeIdsResponse)(nil), // 541: forge.FindInstanceTypeIdsResponse - (*FindInstanceTypesByIdsRequest)(nil), // 542: forge.FindInstanceTypesByIdsRequest - (*FindInstanceTypesByIdsResponse)(nil), // 543: forge.FindInstanceTypesByIdsResponse - (*DeleteInstanceTypeRequest)(nil), // 544: forge.DeleteInstanceTypeRequest - (*DeleteInstanceTypeResponse)(nil), // 545: forge.DeleteInstanceTypeResponse - (*UpdateInstanceTypeResponse)(nil), // 546: forge.UpdateInstanceTypeResponse - (*UpdateInstanceTypeRequest)(nil), // 547: forge.UpdateInstanceTypeRequest - (*AssociateMachinesWithInstanceTypeRequest)(nil), // 548: forge.AssociateMachinesWithInstanceTypeRequest - (*AssociateMachinesWithInstanceTypeResponse)(nil), // 549: forge.AssociateMachinesWithInstanceTypeResponse - (*RemoveMachineInstanceTypeAssociationRequest)(nil), // 550: forge.RemoveMachineInstanceTypeAssociationRequest - (*RemoveMachineInstanceTypeAssociationResponse)(nil), // 551: forge.RemoveMachineInstanceTypeAssociationResponse - (*RedfishBrowseRequest)(nil), // 552: forge.RedfishBrowseRequest - (*RedfishBrowseResponse)(nil), // 553: forge.RedfishBrowseResponse - (*RedfishListActionsRequest)(nil), // 554: forge.RedfishListActionsRequest - (*RedfishListActionsResponse)(nil), // 555: forge.RedfishListActionsResponse - (*RedfishAction)(nil), // 556: forge.RedfishAction - (*OptionalRedfishActionResult)(nil), // 557: forge.OptionalRedfishActionResult - (*RedfishActionResult)(nil), // 558: forge.RedfishActionResult - (*RedfishCreateActionRequest)(nil), // 559: forge.RedfishCreateActionRequest - (*RedfishCreateActionResponse)(nil), // 560: forge.RedfishCreateActionResponse - (*RedfishActionID)(nil), // 561: forge.RedfishActionID - (*RedfishApproveActionResponse)(nil), // 562: forge.RedfishApproveActionResponse - (*RedfishApplyActionResponse)(nil), // 563: forge.RedfishApplyActionResponse - (*RedfishCancelActionResponse)(nil), // 564: forge.RedfishCancelActionResponse - (*UfmBrowseRequest)(nil), // 565: forge.UfmBrowseRequest - (*UfmBrowseResponse)(nil), // 566: forge.UfmBrowseResponse - (*NetworkSecurityGroupAttributes)(nil), // 567: forge.NetworkSecurityGroupAttributes - (*NetworkSecurityGroup)(nil), // 568: forge.NetworkSecurityGroup - (*CreateNetworkSecurityGroupRequest)(nil), // 569: forge.CreateNetworkSecurityGroupRequest - (*CreateNetworkSecurityGroupResponse)(nil), // 570: forge.CreateNetworkSecurityGroupResponse - (*FindNetworkSecurityGroupIdsRequest)(nil), // 571: forge.FindNetworkSecurityGroupIdsRequest - (*FindNetworkSecurityGroupIdsResponse)(nil), // 572: forge.FindNetworkSecurityGroupIdsResponse - (*FindNetworkSecurityGroupsByIdsRequest)(nil), // 573: forge.FindNetworkSecurityGroupsByIdsRequest - (*FindNetworkSecurityGroupsByIdsResponse)(nil), // 574: forge.FindNetworkSecurityGroupsByIdsResponse - (*UpdateNetworkSecurityGroupResponse)(nil), // 575: forge.UpdateNetworkSecurityGroupResponse - (*UpdateNetworkSecurityGroupRequest)(nil), // 576: forge.UpdateNetworkSecurityGroupRequest - (*DeleteNetworkSecurityGroupRequest)(nil), // 577: forge.DeleteNetworkSecurityGroupRequest - (*DeleteNetworkSecurityGroupResponse)(nil), // 578: forge.DeleteNetworkSecurityGroupResponse - (*NetworkSecurityGroupStatus)(nil), // 579: forge.NetworkSecurityGroupStatus - (*NetworkSecurityGroupPropagationObjectStatus)(nil), // 580: forge.NetworkSecurityGroupPropagationObjectStatus - (*GetNetworkSecurityGroupPropagationStatusResponse)(nil), // 581: forge.GetNetworkSecurityGroupPropagationStatusResponse - (*NetworkSecurityGroupIdList)(nil), // 582: forge.NetworkSecurityGroupIdList - (*GetNetworkSecurityGroupPropagationStatusRequest)(nil), // 583: forge.GetNetworkSecurityGroupPropagationStatusRequest - (*NetworkSecurityGroupRuleAttributes)(nil), // 584: forge.NetworkSecurityGroupRuleAttributes - (*ResolvedNetworkSecurityGroupRule)(nil), // 585: forge.ResolvedNetworkSecurityGroupRule - (*GetNetworkSecurityGroupAttachmentsRequest)(nil), // 586: forge.GetNetworkSecurityGroupAttachmentsRequest - (*NetworkSecurityGroupAttachments)(nil), // 587: forge.NetworkSecurityGroupAttachments - (*GetNetworkSecurityGroupAttachmentsResponse)(nil), // 588: forge.GetNetworkSecurityGroupAttachmentsResponse - (*GetDesiredFirmwareVersionsRequest)(nil), // 589: forge.GetDesiredFirmwareVersionsRequest - (*GetDesiredFirmwareVersionsResponse)(nil), // 590: forge.GetDesiredFirmwareVersionsResponse - (*DesiredFirmwareVersionEntry)(nil), // 591: forge.DesiredFirmwareVersionEntry - (*SkuComponentChassis)(nil), // 592: forge.SkuComponentChassis - (*SkuComponentCpu)(nil), // 593: forge.SkuComponentCpu - (*SkuComponentGpu)(nil), // 594: forge.SkuComponentGpu - (*SkuComponentEthernetDevices)(nil), // 595: forge.SkuComponentEthernetDevices - (*SkuComponentInfinibandDevices)(nil), // 596: forge.SkuComponentInfinibandDevices - (*SkuComponentStorage)(nil), // 597: forge.SkuComponentStorage - (*SkuComponentStorageController)(nil), // 598: forge.SkuComponentStorageController - (*SkuComponentMemory)(nil), // 599: forge.SkuComponentMemory - (*SkuComponentTpm)(nil), // 600: forge.SkuComponentTpm - (*SkuComponents)(nil), // 601: forge.SkuComponents - (*Sku)(nil), // 602: forge.Sku - (*SkuMachinePair)(nil), // 603: forge.SkuMachinePair - (*RemoveSkuRequest)(nil), // 604: forge.RemoveSkuRequest - (*SkuList)(nil), // 605: forge.SkuList - (*SkuIdList)(nil), // 606: forge.SkuIdList - (*SkuStatus)(nil), // 607: forge.SkuStatus - (*SkusByIdsRequest)(nil), // 608: forge.SkusByIdsRequest - (*SkuSearchFilter)(nil), // 609: forge.SkuSearchFilter - (*DpaInterface)(nil), // 610: forge.DpaInterface - (*DpaInterfaceCreationRequest)(nil), // 611: forge.DpaInterfaceCreationRequest - (*DpaInterfaceIdList)(nil), // 612: forge.DpaInterfaceIdList - (*DpaInterfacesByIdsRequest)(nil), // 613: forge.DpaInterfacesByIdsRequest - (*DpaInterfaceList)(nil), // 614: forge.DpaInterfaceList - (*DpaInterfaceStateHistoryRecord)(nil), // 615: forge.DpaInterfaceStateHistoryRecord - (*DpaNetworkObservationSetRequest)(nil), // 616: forge.DpaNetworkObservationSetRequest - (*DpaInterfaceDeletionRequest)(nil), // 617: forge.DpaInterfaceDeletionRequest - (*DpaInterfaceDeletionResult)(nil), // 618: forge.DpaInterfaceDeletionResult - (*SkuUpdateMetadataRequest)(nil), // 619: forge.SkuUpdateMetadataRequest - (*PowerOptionRequest)(nil), // 620: forge.PowerOptionRequest - (*PowerOptionUpdateRequest)(nil), // 621: forge.PowerOptionUpdateRequest - (*PowerOptions)(nil), // 622: forge.PowerOptions - (*PowerOptionResponse)(nil), // 623: forge.PowerOptionResponse - (*ComputeAllocationAttributes)(nil), // 624: forge.ComputeAllocationAttributes - (*ComputeAllocation)(nil), // 625: forge.ComputeAllocation - (*CreateComputeAllocationRequest)(nil), // 626: forge.CreateComputeAllocationRequest - (*CreateComputeAllocationResponse)(nil), // 627: forge.CreateComputeAllocationResponse - (*FindComputeAllocationIdsRequest)(nil), // 628: forge.FindComputeAllocationIdsRequest - (*FindComputeAllocationIdsResponse)(nil), // 629: forge.FindComputeAllocationIdsResponse - (*FindComputeAllocationsByIdsRequest)(nil), // 630: forge.FindComputeAllocationsByIdsRequest - (*FindComputeAllocationsByIdsResponse)(nil), // 631: forge.FindComputeAllocationsByIdsResponse - (*UpdateComputeAllocationResponse)(nil), // 632: forge.UpdateComputeAllocationResponse - (*UpdateComputeAllocationRequest)(nil), // 633: forge.UpdateComputeAllocationRequest - (*DeleteComputeAllocationRequest)(nil), // 634: forge.DeleteComputeAllocationRequest - (*DeleteComputeAllocationResponse)(nil), // 635: forge.DeleteComputeAllocationResponse - (*InstanceTypeAllocationStats)(nil), // 636: forge.InstanceTypeAllocationStats - (*GetRackRequest)(nil), // 637: forge.GetRackRequest - (*GetRackResponse)(nil), // 638: forge.GetRackResponse - (*RackList)(nil), // 639: forge.RackList - (*RackSearchFilter)(nil), // 640: forge.RackSearchFilter - (*RackIdList)(nil), // 641: forge.RackIdList - (*RacksByIdsRequest)(nil), // 642: forge.RacksByIdsRequest - (*Rack)(nil), // 643: forge.Rack - (*RackStateHistoryRecord)(nil), // 644: forge.RackStateHistoryRecord - (*RackStateHistoriesRequest)(nil), // 645: forge.RackStateHistoriesRequest - (*RackStateHistories)(nil), // 646: forge.RackStateHistories - (*RackStateHistoryRecords)(nil), // 647: forge.RackStateHistoryRecords - (*DeleteRackRequest)(nil), // 648: forge.DeleteRackRequest - (*RackManagerForgeRequest)(nil), // 649: forge.RackManagerForgeRequest - (*RackManagerForgeResponse)(nil), // 650: forge.RackManagerForgeResponse - (*MachineNVLinkInfo)(nil), // 651: forge.MachineNVLinkInfo - (*UpdateMachineNvLinkInfoRequest)(nil), // 652: forge.UpdateMachineNvLinkInfoRequest - (*NVLinkGpu)(nil), // 653: forge.NVLinkGpu - (*MachineNVLinkStatusObservation)(nil), // 654: forge.MachineNVLinkStatusObservation - (*MachineNVLinkGpuStatusObservation)(nil), // 655: forge.MachineNVLinkGpuStatusObservation - (*NmxmBrowseRequest)(nil), // 656: forge.NmxmBrowseRequest - (*NmxmBrowseResponse)(nil), // 657: forge.NmxmBrowseResponse - (*NVLinkPartition)(nil), // 658: forge.NVLinkPartition - (*NVLinkPartitionList)(nil), // 659: forge.NVLinkPartitionList - (*NVLinkPartitionSearchConfig)(nil), // 660: forge.NVLinkPartitionSearchConfig - (*NVLinkPartitionQuery)(nil), // 661: forge.NVLinkPartitionQuery - (*NVLinkPartitionSearchFilter)(nil), // 662: forge.NVLinkPartitionSearchFilter - (*NVLinkPartitionsByIdsRequest)(nil), // 663: forge.NVLinkPartitionsByIdsRequest - (*NVLinkPartitionIdList)(nil), // 664: forge.NVLinkPartitionIdList - (*NVLinkFabricSearchFilter)(nil), // 665: forge.NVLinkFabricSearchFilter - (*NVLinkLogicalPartitionConfig)(nil), // 666: forge.NVLinkLogicalPartitionConfig - (*NVLinkLogicalPartitionStatus)(nil), // 667: forge.NVLinkLogicalPartitionStatus - (*NVLinkLogicalPartition)(nil), // 668: forge.NVLinkLogicalPartition - (*NVLinkLogicalPartitionList)(nil), // 669: forge.NVLinkLogicalPartitionList - (*NVLinkLogicalPartitionCreationRequest)(nil), // 670: forge.NVLinkLogicalPartitionCreationRequest - (*NVLinkLogicalPartitionDeletionRequest)(nil), // 671: forge.NVLinkLogicalPartitionDeletionRequest - (*NVLinkLogicalPartitionDeletionResult)(nil), // 672: forge.NVLinkLogicalPartitionDeletionResult - (*NVLinkLogicalPartitionSearchFilter)(nil), // 673: forge.NVLinkLogicalPartitionSearchFilter - (*NVLinkLogicalPartitionsByIdsRequest)(nil), // 674: forge.NVLinkLogicalPartitionsByIdsRequest - (*NVLinkLogicalPartitionIdList)(nil), // 675: forge.NVLinkLogicalPartitionIdList - (*NVLinkLogicalPartitionUpdateRequest)(nil), // 676: forge.NVLinkLogicalPartitionUpdateRequest - (*NVLinkLogicalPartitionUpdateResult)(nil), // 677: forge.NVLinkLogicalPartitionUpdateResult - (*CreateBmcUserRequest)(nil), // 678: forge.CreateBmcUserRequest - (*CreateBmcUserResponse)(nil), // 679: forge.CreateBmcUserResponse - (*DeleteBmcUserRequest)(nil), // 680: forge.DeleteBmcUserRequest - (*DeleteBmcUserResponse)(nil), // 681: forge.DeleteBmcUserResponse - (*SetFirmwareUpdateTimeWindowRequest)(nil), // 682: forge.SetFirmwareUpdateTimeWindowRequest - (*SetFirmwareUpdateTimeWindowResponse)(nil), // 683: forge.SetFirmwareUpdateTimeWindowResponse - (*ListHostFirmwareRequest)(nil), // 684: forge.ListHostFirmwareRequest - (*ListHostFirmwareResponse)(nil), // 685: forge.ListHostFirmwareResponse - (*AvailableHostFirmware)(nil), // 686: forge.AvailableHostFirmware - (*TrimTableRequest)(nil), // 687: forge.TrimTableRequest - (*TrimTableResponse)(nil), // 688: forge.TrimTableResponse - (*CreateRemediationRequest)(nil), // 689: forge.CreateRemediationRequest - (*CreateRemediationResponse)(nil), // 690: forge.CreateRemediationResponse - (*RemediationIdList)(nil), // 691: forge.RemediationIdList - (*RemediationList)(nil), // 692: forge.RemediationList - (*Remediation)(nil), // 693: forge.Remediation - (*ApproveRemediationRequest)(nil), // 694: forge.ApproveRemediationRequest - (*RevokeRemediationRequest)(nil), // 695: forge.RevokeRemediationRequest - (*EnableRemediationRequest)(nil), // 696: forge.EnableRemediationRequest - (*DisableRemediationRequest)(nil), // 697: forge.DisableRemediationRequest - (*FindAppliedRemediationIdsRequest)(nil), // 698: forge.FindAppliedRemediationIdsRequest - (*AppliedRemediationIdList)(nil), // 699: forge.AppliedRemediationIdList - (*FindAppliedRemediationsRequest)(nil), // 700: forge.FindAppliedRemediationsRequest - (*AppliedRemediation)(nil), // 701: forge.AppliedRemediation - (*AppliedRemediationList)(nil), // 702: forge.AppliedRemediationList - (*GetNextRemediationForMachineRequest)(nil), // 703: forge.GetNextRemediationForMachineRequest - (*GetNextRemediationForMachineResponse)(nil), // 704: forge.GetNextRemediationForMachineResponse - (*RemediationAppliedRequest)(nil), // 705: forge.RemediationAppliedRequest - (*RemediationApplicationStatus)(nil), // 706: forge.RemediationApplicationStatus - (*SetPrimaryDpuRequest)(nil), // 707: forge.SetPrimaryDpuRequest - (*UsernamePassword)(nil), // 708: forge.UsernamePassword - (*SessionToken)(nil), // 709: forge.SessionToken - (*DpuExtensionServiceCredential)(nil), // 710: forge.DpuExtensionServiceCredential - (*DpuExtensionServiceVersionInfo)(nil), // 711: forge.DpuExtensionServiceVersionInfo - (*DpuExtensionService)(nil), // 712: forge.DpuExtensionService - (*CreateDpuExtensionServiceRequest)(nil), // 713: forge.CreateDpuExtensionServiceRequest - (*UpdateDpuExtensionServiceRequest)(nil), // 714: forge.UpdateDpuExtensionServiceRequest - (*DeleteDpuExtensionServiceRequest)(nil), // 715: forge.DeleteDpuExtensionServiceRequest - (*DeleteDpuExtensionServiceResponse)(nil), // 716: forge.DeleteDpuExtensionServiceResponse - (*DpuExtensionServiceSearchFilter)(nil), // 717: forge.DpuExtensionServiceSearchFilter - (*DpuExtensionServiceIdList)(nil), // 718: forge.DpuExtensionServiceIdList - (*DpuExtensionServicesByIdsRequest)(nil), // 719: forge.DpuExtensionServicesByIdsRequest - (*DpuExtensionServiceList)(nil), // 720: forge.DpuExtensionServiceList - (*GetDpuExtensionServiceVersionsInfoRequest)(nil), // 721: forge.GetDpuExtensionServiceVersionsInfoRequest - (*DpuExtensionServiceVersionInfoList)(nil), // 722: forge.DpuExtensionServiceVersionInfoList - (*FindInstancesByDpuExtensionServiceRequest)(nil), // 723: forge.FindInstancesByDpuExtensionServiceRequest - (*FindInstancesByDpuExtensionServiceResponse)(nil), // 724: forge.FindInstancesByDpuExtensionServiceResponse - (*InstanceDpuExtensionServiceInfo)(nil), // 725: forge.InstanceDpuExtensionServiceInfo - (*DpuExtensionServiceObservabilityConfigPrometheus)(nil), // 726: forge.DpuExtensionServiceObservabilityConfigPrometheus - (*DpuExtensionServiceObservabilityConfigLogging)(nil), // 727: forge.DpuExtensionServiceObservabilityConfigLogging - (*DpuExtensionServiceObservabilityConfig)(nil), // 728: forge.DpuExtensionServiceObservabilityConfig - (*DpuExtensionServiceObservability)(nil), // 729: forge.DpuExtensionServiceObservability - (*ScoutStreamApiBoundMessage)(nil), // 730: forge.ScoutStreamApiBoundMessage - (*ScoutStreamScoutBoundMessage)(nil), // 731: forge.ScoutStreamScoutBoundMessage - (*ScoutStreamInitRequest)(nil), // 732: forge.ScoutStreamInitRequest - (*ScoutStreamShowConnectionsRequest)(nil), // 733: forge.ScoutStreamShowConnectionsRequest - (*ScoutStreamShowConnectionsResponse)(nil), // 734: forge.ScoutStreamShowConnectionsResponse - (*ScoutStreamDisconnectRequest)(nil), // 735: forge.ScoutStreamDisconnectRequest - (*ScoutStreamDisconnectResponse)(nil), // 736: forge.ScoutStreamDisconnectResponse - (*ScoutStreamAdminPingRequest)(nil), // 737: forge.ScoutStreamAdminPingRequest - (*ScoutStreamAdminPingResponse)(nil), // 738: forge.ScoutStreamAdminPingResponse - (*ScoutStreamAgentPingRequest)(nil), // 739: forge.ScoutStreamAgentPingRequest - (*ScoutStreamAgentPingResponse)(nil), // 740: forge.ScoutStreamAgentPingResponse - (*ScoutStreamConnectionInfo)(nil), // 741: forge.ScoutStreamConnectionInfo - (*ScoutStreamError)(nil), // 742: forge.ScoutStreamError - (*RoutingProfile)(nil), // 743: forge.RoutingProfile - (*DomainLegacy)(nil), // 744: forge.DomainLegacy - (*DomainListLegacy)(nil), // 745: forge.DomainListLegacy - (*DomainDeletionLegacy)(nil), // 746: forge.DomainDeletionLegacy - (*DomainDeletionResultLegacy)(nil), // 747: forge.DomainDeletionResultLegacy - (*DomainSearchQueryLegacy)(nil), // 748: forge.DomainSearchQueryLegacy - (*PxeDomain)(nil), // 749: forge.PxeDomain - (*MachinePositionQuery)(nil), // 750: forge.MachinePositionQuery - (*MachinePositionInfoList)(nil), // 751: forge.MachinePositionInfoList - (*MachinePositionInfo)(nil), // 752: forge.MachinePositionInfo - (*RackFirmware)(nil), // 753: forge.RackFirmware - (*FirmwareComponentInfo)(nil), // 754: forge.FirmwareComponentInfo - (*RackFirmwareCreateRequest)(nil), // 755: forge.RackFirmwareCreateRequest - (*RackFirmwareGetRequest)(nil), // 756: forge.RackFirmwareGetRequest - (*RackFirmwareListRequest)(nil), // 757: forge.RackFirmwareListRequest - (*RackFirmwareList)(nil), // 758: forge.RackFirmwareList - (*RackFirmwareDeleteRequest)(nil), // 759: forge.RackFirmwareDeleteRequest - (*RackFirmwareApplyRequest)(nil), // 760: forge.RackFirmwareApplyRequest - (*RackFirmwareApplyResponse)(nil), // 761: forge.RackFirmwareApplyResponse - (*DeviceUpdateResult)(nil), // 762: forge.DeviceUpdateResult - (*NodeJobInfo)(nil), // 763: forge.NodeJobInfo - (*RackFirmwareJobStatusRequest)(nil), // 764: forge.RackFirmwareJobStatusRequest - (*RackFirmwareJobStatusResponse)(nil), // 765: forge.RackFirmwareJobStatusResponse - (*RackFirmwareHistoryRequest)(nil), // 766: forge.RackFirmwareHistoryRequest - (*RackFirmwareHistoryResponse)(nil), // 767: forge.RackFirmwareHistoryResponse - (*RackFirmwareHistoryRecords)(nil), // 768: forge.RackFirmwareHistoryRecords - (*RackFirmwareHistoryRecord)(nil), // 769: forge.RackFirmwareHistoryRecord - (*ModifyDPFStateRequest)(nil), // 770: forge.ModifyDPFStateRequest - (*DPFStateResponse)(nil), // 771: forge.DPFStateResponse - (*GetDPFStateRequest)(nil), // 772: forge.GetDPFStateRequest - (*ComponentResult)(nil), // 773: forge.ComponentResult - (*SwitchIdList)(nil), // 774: forge.SwitchIdList - (*PowerShelfIdList)(nil), // 775: forge.PowerShelfIdList - (*GetComponentInventoryRequest)(nil), // 776: forge.GetComponentInventoryRequest - (*ComponentInventoryEntry)(nil), // 777: forge.ComponentInventoryEntry - (*GetComponentInventoryResponse)(nil), // 778: forge.GetComponentInventoryResponse - (*ComponentPowerControlRequest)(nil), // 779: forge.ComponentPowerControlRequest - (*ComponentPowerControlResponse)(nil), // 780: forge.ComponentPowerControlResponse - (*FirmwareUpdateStatus)(nil), // 781: forge.FirmwareUpdateStatus - (*UpdateComputeTrayFirmwareTarget)(nil), // 782: forge.UpdateComputeTrayFirmwareTarget - (*UpdateSwitchFirmwareTarget)(nil), // 783: forge.UpdateSwitchFirmwareTarget - (*UpdatePowerShelfFirmwareTarget)(nil), // 784: forge.UpdatePowerShelfFirmwareTarget - (*UpdateComponentFirmwareRequest)(nil), // 785: forge.UpdateComponentFirmwareRequest - (*UpdateComponentFirmwareResponse)(nil), // 786: forge.UpdateComponentFirmwareResponse - (*GetComponentFirmwareStatusRequest)(nil), // 787: forge.GetComponentFirmwareStatusRequest - (*GetComponentFirmwareStatusResponse)(nil), // 788: forge.GetComponentFirmwareStatusResponse - (*ListComponentFirmwareVersionsRequest)(nil), // 789: forge.ListComponentFirmwareVersionsRequest - (*DeviceFirmwareVersions)(nil), // 790: forge.DeviceFirmwareVersions - (*ListComponentFirmwareVersionsResponse)(nil), // 791: forge.ListComponentFirmwareVersionsResponse - (*AdminForceDeleteSwitchRequest)(nil), // 792: forge.AdminForceDeleteSwitchRequest - (*AdminForceDeleteSwitchResponse)(nil), // 793: forge.AdminForceDeleteSwitchResponse - (*AdminForceDeletePowerShelfRequest)(nil), // 794: forge.AdminForceDeletePowerShelfRequest - (*AdminForceDeletePowerShelfResponse)(nil), // 795: forge.AdminForceDeletePowerShelfResponse - (*AttestationResponse_AttestationDeviceData)(nil), // 796: forge.AttestationResponse.AttestationDeviceData - (*AttestationResponse_AttestationMachineData)(nil), // 797: forge.AttestationResponse.AttestationMachineData - nil, // 798: forge.RuntimeConfig.DpuNicFirmwareUpdateVersionEntry - (*DNSMessage_DNSQuestion)(nil), // 799: forge.DNSMessage.DNSQuestion - (*DNSMessage_DNSResponse)(nil), // 800: forge.DNSMessage.DNSResponse - (*DNSMessage_DNSResponse_DNSRR)(nil), // 801: forge.DNSMessage.DNSResponse.DNSRR - nil, // 802: forge.PowerShelfStateHistories.HistoriesEntry - nil, // 803: forge.FabricManagerConfig.ConfigMapEntry - nil, // 804: forge.SwitchStateHistories.HistoriesEntry - nil, // 805: forge.MachineStateHistories.HistoriesEntry - nil, // 806: forge.HealthHistories.HistoriesEntry - (*MachineCredentialsUpdateRequest_Credentials)(nil), // 807: forge.MachineCredentialsUpdateRequest.Credentials - (*ForgeAgentControlResponse_ForgeAgentControlExtraInfo)(nil), // 808: forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo - (*ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair)(nil), // 809: forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo.KeyValuePair - (*MachineCleanupInfo_CleanupStepResult)(nil), // 810: forge.MachineCleanupInfo.CleanupStepResult - (*DpuReprovisioningListResponse_DpuReprovisioningListItem)(nil), // 811: forge.DpuReprovisioningListResponse.DpuReprovisioningListItem - (*HostReprovisioningListResponse_HostReprovisioningListItem)(nil), // 812: forge.HostReprovisioningListResponse.HostReprovisioningListItem - (*MachineValidationTestUpdateRequest_Payload)(nil), // 813: forge.MachineValidationTestUpdateRequest.Payload - nil, // 814: forge.RedfishBrowseResponse.HeadersEntry - nil, // 815: forge.RedfishActionResult.HeadersEntry - nil, // 816: forge.UfmBrowseResponse.HeadersEntry - nil, // 817: forge.DesiredFirmwareVersionEntry.ComponentVersionsEntry - nil, // 818: forge.RackStateHistories.HistoriesEntry - nil, // 819: forge.NmxmBrowseResponse.HeadersEntry - nil, // 820: forge.RackFirmwareHistoryResponse.HistoriesEntry - (*DPFStateResponse_DPFState)(nil), // 821: forge.DPFStateResponse.DPFState - (*MachineId)(nil), // 822: common.MachineId - (*timestamppb.Timestamp)(nil), // 823: google.protobuf.Timestamp - (*VpcId)(nil), // 824: common.VpcId - (*NVLinkLogicalPartitionId)(nil), // 825: common.NVLinkLogicalPartitionId - (*VpcPrefixId)(nil), // 826: common.VpcPrefixId - (*VpcPeeringId)(nil), // 827: common.VpcPeeringId - (*IBPartitionId)(nil), // 828: common.IBPartitionId - (*PowerShelfId)(nil), // 829: common.PowerShelfId - (*RackId)(nil), // 830: common.RackId - (*UUID)(nil), // 831: common.UUID - (*SwitchId)(nil), // 832: common.SwitchId - (*NetworkSegmentId)(nil), // 833: common.NetworkSegmentId - (*DomainId)(nil), // 834: common.DomainId - (*NetworkPrefixId)(nil), // 835: common.NetworkPrefixId - (*InstanceId)(nil), // 836: common.InstanceId - (*NVLinkDomainId)(nil), // 837: common.NVLinkDomainId - (*HealthReport)(nil), // 838: health.HealthReport - (*MachineInterfaceId)(nil), // 839: common.MachineInterfaceId - (*DiscoveryInfo)(nil), // 840: machine_discovery.DiscoveryInfo - (*durationpb.Duration)(nil), // 841: google.protobuf.Duration - (*StringList)(nil), // 842: common.StringList - (*Gpu)(nil), // 843: machine_discovery.Gpu - (*RouteTarget)(nil), // 844: common.RouteTarget - (*Uint32List)(nil), // 845: common.Uint32List - (*DpaInterfaceId)(nil), // 846: common.DpaInterfaceId - (*ComputeAllocationId)(nil), // 847: common.ComputeAllocationId - (*NVLinkPartitionId)(nil), // 848: common.NVLinkPartitionId - (*RemediationId)(nil), // 849: common.RemediationId - (*MlxDeviceLockdownResponse)(nil), // 850: mlx_device.MlxDeviceLockdownResponse - (*MlxDeviceProfileSyncResponse)(nil), // 851: mlx_device.MlxDeviceProfileSyncResponse - (*MlxDeviceProfileCompareResponse)(nil), // 852: mlx_device.MlxDeviceProfileCompareResponse - (*MlxDeviceInfoDeviceResponse)(nil), // 853: mlx_device.MlxDeviceInfoDeviceResponse - (*MlxDeviceInfoReportResponse)(nil), // 854: mlx_device.MlxDeviceInfoReportResponse - (*MlxDeviceRegistryListResponse)(nil), // 855: mlx_device.MlxDeviceRegistryListResponse - (*MlxDeviceRegistryShowResponse)(nil), // 856: mlx_device.MlxDeviceRegistryShowResponse - (*MlxDeviceConfigQueryResponse)(nil), // 857: mlx_device.MlxDeviceConfigQueryResponse - (*MlxDeviceConfigSetResponse)(nil), // 858: mlx_device.MlxDeviceConfigSetResponse - (*MlxDeviceConfigSyncResponse)(nil), // 859: mlx_device.MlxDeviceConfigSyncResponse - (*MlxDeviceConfigCompareResponse)(nil), // 860: mlx_device.MlxDeviceConfigCompareResponse - (*MlxDeviceLockdownLockRequest)(nil), // 861: mlx_device.MlxDeviceLockdownLockRequest - (*MlxDeviceLockdownUnlockRequest)(nil), // 862: mlx_device.MlxDeviceLockdownUnlockRequest - (*MlxDeviceLockdownStatusRequest)(nil), // 863: mlx_device.MlxDeviceLockdownStatusRequest - (*MlxDeviceProfileSyncRequest)(nil), // 864: mlx_device.MlxDeviceProfileSyncRequest - (*MlxDeviceProfileCompareRequest)(nil), // 865: mlx_device.MlxDeviceProfileCompareRequest - (*MlxDeviceInfoDeviceRequest)(nil), // 866: mlx_device.MlxDeviceInfoDeviceRequest - (*MlxDeviceInfoReportRequest)(nil), // 867: mlx_device.MlxDeviceInfoReportRequest - (*MlxDeviceRegistryListRequest)(nil), // 868: mlx_device.MlxDeviceRegistryListRequest - (*MlxDeviceRegistryShowRequest)(nil), // 869: mlx_device.MlxDeviceRegistryShowRequest - (*MlxDeviceConfigQueryRequest)(nil), // 870: mlx_device.MlxDeviceConfigQueryRequest - (*MlxDeviceConfigSetRequest)(nil), // 871: mlx_device.MlxDeviceConfigSetRequest - (*MlxDeviceConfigSyncRequest)(nil), // 872: mlx_device.MlxDeviceConfigSyncRequest - (*MlxDeviceConfigCompareRequest)(nil), // 873: mlx_device.MlxDeviceConfigCompareRequest - (*Domain)(nil), // 874: dns.Domain - (*MachineIdList)(nil), // 875: common.MachineIdList - (*EndpointExplorationReport)(nil), // 876: site_explorer.EndpointExplorationReport - (SystemPowerControl)(0), // 877: common.SystemPowerControl - (*CreateDomainRequest)(nil), // 878: dns.CreateDomainRequest - (*UpdateDomainRequest)(nil), // 879: dns.UpdateDomainRequest - (*DomainDeletionRequest)(nil), // 880: dns.DomainDeletionRequest - (*DomainSearchQuery)(nil), // 881: dns.DomainSearchQuery - (*DnsResourceRecordLookupRequest)(nil), // 882: dns.DnsResourceRecordLookupRequest - (*GetAllDomainsRequest)(nil), // 883: dns.GetAllDomainsRequest - (*DomainMetadataRequest)(nil), // 884: dns.DomainMetadataRequest - (*ExploredEndpointSearchFilter)(nil), // 885: site_explorer.ExploredEndpointSearchFilter - (*ExploredEndpointsByIdsRequest)(nil), // 886: site_explorer.ExploredEndpointsByIdsRequest - (*ExploredManagedHostSearchFilter)(nil), // 887: site_explorer.ExploredManagedHostSearchFilter - (*ExploredManagedHostsByIdsRequest)(nil), // 888: site_explorer.ExploredManagedHostsByIdsRequest - (*emptypb.Empty)(nil), // 889: google.protobuf.Empty - (*CreateMeasurementBundleRequest)(nil), // 890: measured_boot.CreateMeasurementBundleRequest - (*DeleteMeasurementBundleRequest)(nil), // 891: measured_boot.DeleteMeasurementBundleRequest - (*RenameMeasurementBundleRequest)(nil), // 892: measured_boot.RenameMeasurementBundleRequest - (*UpdateMeasurementBundleRequest)(nil), // 893: measured_boot.UpdateMeasurementBundleRequest - (*ShowMeasurementBundleRequest)(nil), // 894: measured_boot.ShowMeasurementBundleRequest - (*ShowMeasurementBundlesRequest)(nil), // 895: measured_boot.ShowMeasurementBundlesRequest - (*ListMeasurementBundlesRequest)(nil), // 896: measured_boot.ListMeasurementBundlesRequest - (*ListMeasurementBundleMachinesRequest)(nil), // 897: measured_boot.ListMeasurementBundleMachinesRequest - (*FindClosestBundleMatchRequest)(nil), // 898: measured_boot.FindClosestBundleMatchRequest - (*DeleteMeasurementJournalRequest)(nil), // 899: measured_boot.DeleteMeasurementJournalRequest - (*ShowMeasurementJournalRequest)(nil), // 900: measured_boot.ShowMeasurementJournalRequest - (*ShowMeasurementJournalsRequest)(nil), // 901: measured_boot.ShowMeasurementJournalsRequest - (*ListMeasurementJournalRequest)(nil), // 902: measured_boot.ListMeasurementJournalRequest - (*AttestCandidateMachineRequest)(nil), // 903: measured_boot.AttestCandidateMachineRequest - (*ShowCandidateMachineRequest)(nil), // 904: measured_boot.ShowCandidateMachineRequest - (*ShowCandidateMachinesRequest)(nil), // 905: measured_boot.ShowCandidateMachinesRequest - (*ListCandidateMachinesRequest)(nil), // 906: measured_boot.ListCandidateMachinesRequest - (*CreateMeasurementSystemProfileRequest)(nil), // 907: measured_boot.CreateMeasurementSystemProfileRequest - (*DeleteMeasurementSystemProfileRequest)(nil), // 908: measured_boot.DeleteMeasurementSystemProfileRequest - (*RenameMeasurementSystemProfileRequest)(nil), // 909: measured_boot.RenameMeasurementSystemProfileRequest - (*ShowMeasurementSystemProfileRequest)(nil), // 910: measured_boot.ShowMeasurementSystemProfileRequest - (*ShowMeasurementSystemProfilesRequest)(nil), // 911: measured_boot.ShowMeasurementSystemProfilesRequest - (*ListMeasurementSystemProfilesRequest)(nil), // 912: measured_boot.ListMeasurementSystemProfilesRequest - (*ListMeasurementSystemProfileBundlesRequest)(nil), // 913: measured_boot.ListMeasurementSystemProfileBundlesRequest - (*ListMeasurementSystemProfileMachinesRequest)(nil), // 914: measured_boot.ListMeasurementSystemProfileMachinesRequest - (*CreateMeasurementReportRequest)(nil), // 915: measured_boot.CreateMeasurementReportRequest - (*DeleteMeasurementReportRequest)(nil), // 916: measured_boot.DeleteMeasurementReportRequest - (*PromoteMeasurementReportRequest)(nil), // 917: measured_boot.PromoteMeasurementReportRequest - (*RevokeMeasurementReportRequest)(nil), // 918: measured_boot.RevokeMeasurementReportRequest - (*ShowMeasurementReportForIdRequest)(nil), // 919: measured_boot.ShowMeasurementReportForIdRequest - (*ShowMeasurementReportsForMachineRequest)(nil), // 920: measured_boot.ShowMeasurementReportsForMachineRequest - (*ShowMeasurementReportsRequest)(nil), // 921: measured_boot.ShowMeasurementReportsRequest - (*ListMeasurementReportRequest)(nil), // 922: measured_boot.ListMeasurementReportRequest - (*MatchMeasurementReportRequest)(nil), // 923: measured_boot.MatchMeasurementReportRequest - (*ImportSiteMeasurementsRequest)(nil), // 924: measured_boot.ImportSiteMeasurementsRequest - (*ExportSiteMeasurementsRequest)(nil), // 925: measured_boot.ExportSiteMeasurementsRequest - (*AddMeasurementTrustedMachineRequest)(nil), // 926: measured_boot.AddMeasurementTrustedMachineRequest - (*RemoveMeasurementTrustedMachineRequest)(nil), // 927: measured_boot.RemoveMeasurementTrustedMachineRequest - (*AddMeasurementTrustedProfileRequest)(nil), // 928: measured_boot.AddMeasurementTrustedProfileRequest - (*RemoveMeasurementTrustedProfileRequest)(nil), // 929: measured_boot.RemoveMeasurementTrustedProfileRequest - (*ListMeasurementTrustedMachinesRequest)(nil), // 930: measured_boot.ListMeasurementTrustedMachinesRequest - (*ListMeasurementTrustedProfilesRequest)(nil), // 931: measured_boot.ListMeasurementTrustedProfilesRequest - (*ListAttestationSummaryRequest)(nil), // 932: measured_boot.ListAttestationSummaryRequest - (*PublishMlxDeviceReportRequest)(nil), // 933: mlx_device.PublishMlxDeviceReportRequest - (*PublishMlxObservationReportRequest)(nil), // 934: mlx_device.PublishMlxObservationReportRequest - (*MlxAdminProfileSyncRequest)(nil), // 935: mlx_device.MlxAdminProfileSyncRequest - (*MlxAdminProfileShowRequest)(nil), // 936: mlx_device.MlxAdminProfileShowRequest - (*MlxAdminProfileCompareRequest)(nil), // 937: mlx_device.MlxAdminProfileCompareRequest - (*MlxAdminProfileListRequest)(nil), // 938: mlx_device.MlxAdminProfileListRequest - (*MlxAdminLockdownLockRequest)(nil), // 939: mlx_device.MlxAdminLockdownLockRequest - (*MlxAdminLockdownUnlockRequest)(nil), // 940: mlx_device.MlxAdminLockdownUnlockRequest - (*MlxAdminLockdownStatusRequest)(nil), // 941: mlx_device.MlxAdminLockdownStatusRequest - (*MlxAdminDeviceInfoRequest)(nil), // 942: mlx_device.MlxAdminDeviceInfoRequest - (*MlxAdminDeviceReportRequest)(nil), // 943: mlx_device.MlxAdminDeviceReportRequest - (*MlxAdminRegistryListRequest)(nil), // 944: mlx_device.MlxAdminRegistryListRequest - (*MlxAdminRegistryShowRequest)(nil), // 945: mlx_device.MlxAdminRegistryShowRequest - (*MlxAdminConfigQueryRequest)(nil), // 946: mlx_device.MlxAdminConfigQueryRequest - (*MlxAdminConfigSetRequest)(nil), // 947: mlx_device.MlxAdminConfigSetRequest - (*MlxAdminConfigSyncRequest)(nil), // 948: mlx_device.MlxAdminConfigSyncRequest - (*MlxAdminConfigCompareRequest)(nil), // 949: mlx_device.MlxAdminConfigCompareRequest - (*DomainDeletionResult)(nil), // 950: dns.DomainDeletionResult - (*DomainList)(nil), // 951: dns.DomainList - (*DnsResourceRecordLookupResponse)(nil), // 952: dns.DnsResourceRecordLookupResponse - (*GetAllDomainsResponse)(nil), // 953: dns.GetAllDomainsResponse - (*DomainMetadataResponse)(nil), // 954: dns.DomainMetadataResponse - (*SiteExplorationReport)(nil), // 955: site_explorer.SiteExplorationReport - (*ExploredEndpointIdList)(nil), // 956: site_explorer.ExploredEndpointIdList - (*ExploredEndpointList)(nil), // 957: site_explorer.ExploredEndpointList - (*ExploredManagedHostIdList)(nil), // 958: site_explorer.ExploredManagedHostIdList - (*ExploredManagedHostList)(nil), // 959: site_explorer.ExploredManagedHostList - (*CreateMeasurementBundleResponse)(nil), // 960: measured_boot.CreateMeasurementBundleResponse - (*DeleteMeasurementBundleResponse)(nil), // 961: measured_boot.DeleteMeasurementBundleResponse - (*RenameMeasurementBundleResponse)(nil), // 962: measured_boot.RenameMeasurementBundleResponse - (*UpdateMeasurementBundleResponse)(nil), // 963: measured_boot.UpdateMeasurementBundleResponse - (*ShowMeasurementBundleResponse)(nil), // 964: measured_boot.ShowMeasurementBundleResponse - (*ShowMeasurementBundlesResponse)(nil), // 965: measured_boot.ShowMeasurementBundlesResponse - (*ListMeasurementBundlesResponse)(nil), // 966: measured_boot.ListMeasurementBundlesResponse - (*ListMeasurementBundleMachinesResponse)(nil), // 967: measured_boot.ListMeasurementBundleMachinesResponse - (*DeleteMeasurementJournalResponse)(nil), // 968: measured_boot.DeleteMeasurementJournalResponse - (*ShowMeasurementJournalResponse)(nil), // 969: measured_boot.ShowMeasurementJournalResponse - (*ShowMeasurementJournalsResponse)(nil), // 970: measured_boot.ShowMeasurementJournalsResponse - (*ListMeasurementJournalResponse)(nil), // 971: measured_boot.ListMeasurementJournalResponse - (*AttestCandidateMachineResponse)(nil), // 972: measured_boot.AttestCandidateMachineResponse - (*ShowCandidateMachineResponse)(nil), // 973: measured_boot.ShowCandidateMachineResponse - (*ShowCandidateMachinesResponse)(nil), // 974: measured_boot.ShowCandidateMachinesResponse - (*ListCandidateMachinesResponse)(nil), // 975: measured_boot.ListCandidateMachinesResponse - (*CreateMeasurementSystemProfileResponse)(nil), // 976: measured_boot.CreateMeasurementSystemProfileResponse - (*DeleteMeasurementSystemProfileResponse)(nil), // 977: measured_boot.DeleteMeasurementSystemProfileResponse - (*RenameMeasurementSystemProfileResponse)(nil), // 978: measured_boot.RenameMeasurementSystemProfileResponse - (*ShowMeasurementSystemProfileResponse)(nil), // 979: measured_boot.ShowMeasurementSystemProfileResponse - (*ShowMeasurementSystemProfilesResponse)(nil), // 980: measured_boot.ShowMeasurementSystemProfilesResponse - (*ListMeasurementSystemProfilesResponse)(nil), // 981: measured_boot.ListMeasurementSystemProfilesResponse - (*ListMeasurementSystemProfileBundlesResponse)(nil), // 982: measured_boot.ListMeasurementSystemProfileBundlesResponse - (*ListMeasurementSystemProfileMachinesResponse)(nil), // 983: measured_boot.ListMeasurementSystemProfileMachinesResponse - (*CreateMeasurementReportResponse)(nil), // 984: measured_boot.CreateMeasurementReportResponse - (*DeleteMeasurementReportResponse)(nil), // 985: measured_boot.DeleteMeasurementReportResponse - (*PromoteMeasurementReportResponse)(nil), // 986: measured_boot.PromoteMeasurementReportResponse - (*RevokeMeasurementReportResponse)(nil), // 987: measured_boot.RevokeMeasurementReportResponse - (*ShowMeasurementReportForIdResponse)(nil), // 988: measured_boot.ShowMeasurementReportForIdResponse - (*ShowMeasurementReportsForMachineResponse)(nil), // 989: measured_boot.ShowMeasurementReportsForMachineResponse - (*ShowMeasurementReportsResponse)(nil), // 990: measured_boot.ShowMeasurementReportsResponse - (*ListMeasurementReportResponse)(nil), // 991: measured_boot.ListMeasurementReportResponse - (*MatchMeasurementReportResponse)(nil), // 992: measured_boot.MatchMeasurementReportResponse - (*ImportSiteMeasurementsResponse)(nil), // 993: measured_boot.ImportSiteMeasurementsResponse - (*ExportSiteMeasurementsResponse)(nil), // 994: measured_boot.ExportSiteMeasurementsResponse - (*AddMeasurementTrustedMachineResponse)(nil), // 995: measured_boot.AddMeasurementTrustedMachineResponse - (*RemoveMeasurementTrustedMachineResponse)(nil), // 996: measured_boot.RemoveMeasurementTrustedMachineResponse - (*AddMeasurementTrustedProfileResponse)(nil), // 997: measured_boot.AddMeasurementTrustedProfileResponse - (*RemoveMeasurementTrustedProfileResponse)(nil), // 998: measured_boot.RemoveMeasurementTrustedProfileResponse - (*ListMeasurementTrustedMachinesResponse)(nil), // 999: measured_boot.ListMeasurementTrustedMachinesResponse - (*ListMeasurementTrustedProfilesResponse)(nil), // 1000: measured_boot.ListMeasurementTrustedProfilesResponse - (*ListAttestationSummaryResponse)(nil), // 1001: measured_boot.ListAttestationSummaryResponse - (*LockdownStatus)(nil), // 1002: site_explorer.LockdownStatus - (*PublishMlxDeviceReportResponse)(nil), // 1003: mlx_device.PublishMlxDeviceReportResponse - (*PublishMlxObservationReportResponse)(nil), // 1004: mlx_device.PublishMlxObservationReportResponse - (*MlxAdminProfileSyncResponse)(nil), // 1005: mlx_device.MlxAdminProfileSyncResponse - (*MlxAdminProfileShowResponse)(nil), // 1006: mlx_device.MlxAdminProfileShowResponse - (*MlxAdminProfileCompareResponse)(nil), // 1007: mlx_device.MlxAdminProfileCompareResponse - (*MlxAdminProfileListResponse)(nil), // 1008: mlx_device.MlxAdminProfileListResponse - (*MlxAdminLockdownLockResponse)(nil), // 1009: mlx_device.MlxAdminLockdownLockResponse - (*MlxAdminLockdownUnlockResponse)(nil), // 1010: mlx_device.MlxAdminLockdownUnlockResponse - (*MlxAdminLockdownStatusResponse)(nil), // 1011: mlx_device.MlxAdminLockdownStatusResponse - (*MlxAdminDeviceInfoResponse)(nil), // 1012: mlx_device.MlxAdminDeviceInfoResponse - (*MlxAdminDeviceReportResponse)(nil), // 1013: mlx_device.MlxAdminDeviceReportResponse - (*MlxAdminRegistryListResponse)(nil), // 1014: mlx_device.MlxAdminRegistryListResponse - (*MlxAdminRegistryShowResponse)(nil), // 1015: mlx_device.MlxAdminRegistryShowResponse - (*MlxAdminConfigQueryResponse)(nil), // 1016: mlx_device.MlxAdminConfigQueryResponse - (*MlxAdminConfigSetResponse)(nil), // 1017: mlx_device.MlxAdminConfigSetResponse - (*MlxAdminConfigSyncResponse)(nil), // 1018: mlx_device.MlxAdminConfigSyncResponse - (*MlxAdminConfigCompareResponse)(nil), // 1019: mlx_device.MlxAdminConfigCompareResponse + (JwksKind)(0), // 0: forge.JwksKind + (MachineIngestionState)(0), // 1: forge.MachineIngestionState + (CredentialType)(0), // 2: forge.CredentialType + (VpcVirtualizationType)(0), // 3: forge.VpcVirtualizationType + (PrefixMatchType)(0), // 4: forge.PrefixMatchType + (TenantState)(0), // 5: forge.TenantState + (DeletedFilter)(0), // 6: forge.DeletedFilter + (NetworkSegmentType)(0), // 7: forge.NetworkSegmentType + (NetworkSegmentFlag)(0), // 8: forge.NetworkSegmentFlag + (IpxeTemplateArtifactCacheStrategy)(0), // 9: forge.IpxeTemplateArtifactCacheStrategy + (IpxeTemplateScope)(0), // 10: forge.IpxeTemplateScope + (IssueCategory)(0), // 11: forge.IssueCategory + (AssignStaticAddressStatus)(0), // 12: forge.AssignStaticAddressStatus + (RemoveStaticAddressStatus)(0), // 13: forge.RemoveStaticAddressStatus + (MachineType)(0), // 14: forge.MachineType + (InstanceNetworkSegmentMembershipType)(0), // 15: forge.InstanceNetworkSegmentMembershipType + (ControllerStateOutcome)(0), // 16: forge.ControllerStateOutcome + (SyncState)(0), // 17: forge.SyncState + (MachineArchitecture)(0), // 18: forge.MachineArchitecture + (InterfaceAssociationType)(0), // 19: forge.InterfaceAssociationType + (ExpireDhcpLeaseStatus)(0), // 20: forge.ExpireDhcpLeaseStatus + (UserRoles)(0), // 21: forge.UserRoles + (MachineHardwareInfoUpdateType)(0), // 22: forge.MachineHardwareInfoUpdateType + (ManagedHostQuarantineMode)(0), // 23: forge.ManagedHostQuarantineMode + (VpcIsolationBehaviorType)(0), // 24: forge.VpcIsolationBehaviorType + (AgentUpgradePolicy)(0), // 25: forge.AgentUpgradePolicy + (LockdownAction)(0), // 26: forge.LockdownAction + (BMCRequestType)(0), // 27: forge.BMCRequestType + (InterfaceFunctionType)(0), // 28: forge.InterfaceFunctionType + (OverrideMode)(0), // 29: forge.OverrideMode + (ResourcePoolType)(0), // 30: forge.ResourcePoolType + (MaintenanceOperation)(0), // 31: forge.MaintenanceOperation + (ConfigSetting)(0), // 32: forge.ConfigSetting + (UuidType)(0), // 33: forge.UuidType + (MacOwner)(0), // 34: forge.MacOwner + (UpdateInitiator)(0), // 35: forge.UpdateInitiator + (IpType)(0), // 36: forge.IpType + (RouteServerSourceType)(0), // 37: forge.RouteServerSourceType + (OsImageStatus)(0), // 38: forge.OsImageStatus + (MachineValidationStarted)(0), // 39: forge.MachineValidationStarted + (MachineValidationInProgress)(0), // 40: forge.MachineValidationInProgress + (MachineValidationCompleted)(0), // 41: forge.MachineValidationCompleted + (MachineCapabilityDeviceType)(0), // 42: forge.MachineCapabilityDeviceType + (MachineCapabilityType)(0), // 43: forge.MachineCapabilityType + (NetworkSecurityGroupSource)(0), // 44: forge.NetworkSecurityGroupSource + (NetworkSecurityGroupPropagationStatus)(0), // 45: forge.NetworkSecurityGroupPropagationStatus + (NetworkSecurityGroupRuleDirection)(0), // 46: forge.NetworkSecurityGroupRuleDirection + (NetworkSecurityGroupRuleProtocol)(0), // 47: forge.NetworkSecurityGroupRuleProtocol + (NetworkSecurityGroupRuleAction)(0), // 48: forge.NetworkSecurityGroupRuleAction + (PowerState)(0), // 49: forge.PowerState + (RackHardwareType)(0), // 50: forge.RackHardwareType + (RackHardwareTopology)(0), // 51: forge.RackHardwareTopology + (RackHardwareClass)(0), // 52: forge.RackHardwareClass + (RackManagerForgeCmd)(0), // 53: forge.RackManagerForgeCmd + (TrimTableTarget)(0), // 54: forge.TrimTableTarget + (DpuExtensionServiceType)(0), // 55: forge.DpuExtensionServiceType + (DpuExtensionServiceDeploymentStatus)(0), // 56: forge.DpuExtensionServiceDeploymentStatus + (ScoutStreamErrorStatus)(0), // 57: forge.ScoutStreamErrorStatus + (RoutingProfileType)(0), // 58: forge.RoutingProfileType + (ComponentManagerStatusCode)(0), // 59: forge.ComponentManagerStatusCode + (FirmwareUpdateState)(0), // 60: forge.FirmwareUpdateState + (NvSwitchComponent)(0), // 61: forge.NvSwitchComponent + (PowerShelfComponent)(0), // 62: forge.PowerShelfComponent + (ComputeTrayComponent)(0), // 63: forge.ComputeTrayComponent + (OperatingSystemType)(0), // 64: forge.OperatingSystemType + (InstancePowerRequest_Operation)(0), // 65: forge.InstancePowerRequest.Operation + (InstanceUpdateStatus_Module)(0), // 66: forge.InstanceUpdateStatus.Module + (MachineCredentialsUpdateRequest_CredentialPurpose)(0), // 67: forge.MachineCredentialsUpdateRequest.CredentialPurpose + (ForgeAgentControlResponse_Action)(0), // 68: forge.ForgeAgentControlResponse.Action + (MachineCleanupInfo_CleanupResult)(0), // 69: forge.MachineCleanupInfo.CleanupResult + (DpuReprovisioningRequest_Mode)(0), // 70: forge.DpuReprovisioningRequest.Mode + (HostReprovisioningRequest_Mode)(0), // 71: forge.HostReprovisioningRequest.Mode + (MachineSetAutoUpdateRequest_SetAutoupdateAction)(0), // 72: forge.MachineSetAutoUpdateRequest.SetAutoupdateAction + (MachineValidationOnDemandRequest_Action)(0), // 73: forge.MachineValidationOnDemandRequest.Action + (AdminPowerControlRequest_SystemPowerControl)(0), // 74: forge.AdminPowerControlRequest.SystemPowerControl + (GetRedfishJobStateResponse_RedfishJobState)(0), // 75: forge.GetRedfishJobStateResponse.RedfishJobState + (*AttestationIdsRequest)(nil), // 76: forge.AttestationIdsRequest + (*AttestationData)(nil), // 77: forge.AttestationData + (*AttestationMachineList)(nil), // 78: forge.AttestationMachineList + (*AttestationResponse)(nil), // 79: forge.AttestationResponse + (*MachineIdentityRequest)(nil), // 80: forge.MachineIdentityRequest + (*MachineIdentityResponse)(nil), // 81: forge.MachineIdentityResponse + (*GetIdentityConfigRequest)(nil), // 82: forge.GetIdentityConfigRequest + (*IdentityConfig)(nil), // 83: forge.IdentityConfig + (*IdentityConfigRequest)(nil), // 84: forge.IdentityConfigRequest + (*IdentityConfigResponse)(nil), // 85: forge.IdentityConfigResponse + (*ClientSecretBasic)(nil), // 86: forge.ClientSecretBasic + (*ClientSecretBasicResponse)(nil), // 87: forge.ClientSecretBasicResponse + (*TokenDelegationResponse)(nil), // 88: forge.TokenDelegationResponse + (*GetTokenDelegationRequest)(nil), // 89: forge.GetTokenDelegationRequest + (*TokenDelegation)(nil), // 90: forge.TokenDelegation + (*TokenDelegationRequest)(nil), // 91: forge.TokenDelegationRequest + (*Jwks)(nil), // 92: forge.Jwks + (*OpenIdConfiguration)(nil), // 93: forge.OpenIdConfiguration + (*JwksRequest)(nil), // 94: forge.JwksRequest + (*OpenIdConfigRequest)(nil), // 95: forge.OpenIdConfigRequest + (*MachineIngestionStateResponse)(nil), // 96: forge.MachineIngestionStateResponse + (*TpmCaAddedCaStatus)(nil), // 97: forge.TpmCaAddedCaStatus + (*TpmCaCertId)(nil), // 98: forge.TpmCaCertId + (*TpmEkCertStatus)(nil), // 99: forge.TpmEkCertStatus + (*TpmEkCertStatusCollection)(nil), // 100: forge.TpmEkCertStatusCollection + (*TpmCaCert)(nil), // 101: forge.TpmCaCert + (*TpmCaCertDetail)(nil), // 102: forge.TpmCaCertDetail + (*TpmCaCertDetailCollection)(nil), // 103: forge.TpmCaCertDetailCollection + (*AttestKeyBindChallenge)(nil), // 104: forge.AttestKeyBindChallenge + (*AttestQuoteRequest)(nil), // 105: forge.AttestQuoteRequest + (*AttestQuoteResponse)(nil), // 106: forge.AttestQuoteResponse + (*CredentialCreationRequest)(nil), // 107: forge.CredentialCreationRequest + (*CredentialDeletionRequest)(nil), // 108: forge.CredentialDeletionRequest + (*CredentialCreationResult)(nil), // 109: forge.CredentialCreationResult + (*CredentialDeletionResult)(nil), // 110: forge.CredentialDeletionResult + (*VersionRequest)(nil), // 111: forge.VersionRequest + (*BuildInfo)(nil), // 112: forge.BuildInfo + (*RuntimeConfig)(nil), // 113: forge.RuntimeConfig + (*EchoRequest)(nil), // 114: forge.EchoRequest + (*EchoResponse)(nil), // 115: forge.EchoResponse + (*DNSMessage)(nil), // 116: forge.DNSMessage + (*DnsRequest)(nil), // 117: forge.DnsRequest + (*DnsReply)(nil), // 118: forge.DnsReply + (*ConsoleInput)(nil), // 119: forge.ConsoleInput + (*ConsoleOutput)(nil), // 120: forge.ConsoleOutput + (*InstanceEvent)(nil), // 121: forge.InstanceEvent + (*VpcSearchQuery)(nil), // 122: forge.VpcSearchQuery + (*VpcSearchFilter)(nil), // 123: forge.VpcSearchFilter + (*VpcIdList)(nil), // 124: forge.VpcIdList + (*VpcsByIdsRequest)(nil), // 125: forge.VpcsByIdsRequest + (*TenantSearchQuery)(nil), // 126: forge.TenantSearchQuery + (*VpcStatus)(nil), // 127: forge.VpcStatus + (*Vpc)(nil), // 128: forge.Vpc + (*VpcCreationRequest)(nil), // 129: forge.VpcCreationRequest + (*VpcUpdateRequest)(nil), // 130: forge.VpcUpdateRequest + (*VpcUpdateResult)(nil), // 131: forge.VpcUpdateResult + (*VpcUpdateVirtualizationRequest)(nil), // 132: forge.VpcUpdateVirtualizationRequest + (*VpcUpdateVirtualizationResult)(nil), // 133: forge.VpcUpdateVirtualizationResult + (*VpcDeletionRequest)(nil), // 134: forge.VpcDeletionRequest + (*VpcDeletionResult)(nil), // 135: forge.VpcDeletionResult + (*VpcList)(nil), // 136: forge.VpcList + (*VpcPrefix)(nil), // 137: forge.VpcPrefix + (*VpcPrefixConfig)(nil), // 138: forge.VpcPrefixConfig + (*VpcPrefixStatus)(nil), // 139: forge.VpcPrefixStatus + (*VpcPrefixCreationRequest)(nil), // 140: forge.VpcPrefixCreationRequest + (*VpcPrefixSearchQuery)(nil), // 141: forge.VpcPrefixSearchQuery + (*VpcPrefixGetRequest)(nil), // 142: forge.VpcPrefixGetRequest + (*VpcPrefixIdList)(nil), // 143: forge.VpcPrefixIdList + (*VpcPrefixList)(nil), // 144: forge.VpcPrefixList + (*VpcPrefixUpdateRequest)(nil), // 145: forge.VpcPrefixUpdateRequest + (*VpcPrefixDeletionRequest)(nil), // 146: forge.VpcPrefixDeletionRequest + (*VpcPrefixDeletionResult)(nil), // 147: forge.VpcPrefixDeletionResult + (*VpcPeering)(nil), // 148: forge.VpcPeering + (*VpcPeeringIdList)(nil), // 149: forge.VpcPeeringIdList + (*VpcPeeringList)(nil), // 150: forge.VpcPeeringList + (*VpcPeeringCreationRequest)(nil), // 151: forge.VpcPeeringCreationRequest + (*VpcPeeringSearchFilter)(nil), // 152: forge.VpcPeeringSearchFilter + (*VpcPeeringsByIdsRequest)(nil), // 153: forge.VpcPeeringsByIdsRequest + (*VpcPeeringDeletionRequest)(nil), // 154: forge.VpcPeeringDeletionRequest + (*VpcPeeringDeletionResult)(nil), // 155: forge.VpcPeeringDeletionResult + (*IBPartitionConfig)(nil), // 156: forge.IBPartitionConfig + (*IBPartitionStatus)(nil), // 157: forge.IBPartitionStatus + (*IBPartition)(nil), // 158: forge.IBPartition + (*IBPartitionList)(nil), // 159: forge.IBPartitionList + (*IBPartitionCreationRequest)(nil), // 160: forge.IBPartitionCreationRequest + (*IBPartitionUpdateRequest)(nil), // 161: forge.IBPartitionUpdateRequest + (*IBPartitionDeletionRequest)(nil), // 162: forge.IBPartitionDeletionRequest + (*IBPartitionDeletionResult)(nil), // 163: forge.IBPartitionDeletionResult + (*IBPartitionSearchFilter)(nil), // 164: forge.IBPartitionSearchFilter + (*IBPartitionsByIdsRequest)(nil), // 165: forge.IBPartitionsByIdsRequest + (*IBPartitionIdList)(nil), // 166: forge.IBPartitionIdList + (*PowerShelfConfig)(nil), // 167: forge.PowerShelfConfig + (*PowerShelfStatus)(nil), // 168: forge.PowerShelfStatus + (*PowerShelf)(nil), // 169: forge.PowerShelf + (*PowerShelfList)(nil), // 170: forge.PowerShelfList + (*PowerShelfCreationRequest)(nil), // 171: forge.PowerShelfCreationRequest + (*PowerShelfDeletionRequest)(nil), // 172: forge.PowerShelfDeletionRequest + (*PowerShelfDeletionResult)(nil), // 173: forge.PowerShelfDeletionResult + (*PowerShelfStateHistoryRecord)(nil), // 174: forge.PowerShelfStateHistoryRecord + (*PowerShelfStateHistoriesRequest)(nil), // 175: forge.PowerShelfStateHistoriesRequest + (*PowerShelfStateHistories)(nil), // 176: forge.PowerShelfStateHistories + (*PowerShelfStateHistoryRecords)(nil), // 177: forge.PowerShelfStateHistoryRecords + (*PowerShelfQuery)(nil), // 178: forge.PowerShelfQuery + (*PowerShelfSearchFilter)(nil), // 179: forge.PowerShelfSearchFilter + (*PowerShelvesByIdsRequest)(nil), // 180: forge.PowerShelvesByIdsRequest + (*ExpectedPowerShelf)(nil), // 181: forge.ExpectedPowerShelf + (*ExpectedPowerShelfRequest)(nil), // 182: forge.ExpectedPowerShelfRequest + (*ExpectedPowerShelfList)(nil), // 183: forge.ExpectedPowerShelfList + (*LinkedExpectedPowerShelfList)(nil), // 184: forge.LinkedExpectedPowerShelfList + (*LinkedExpectedPowerShelf)(nil), // 185: forge.LinkedExpectedPowerShelf + (*SwitchConfig)(nil), // 186: forge.SwitchConfig + (*FabricManagerConfig)(nil), // 187: forge.FabricManagerConfig + (*SwitchStatus)(nil), // 188: forge.SwitchStatus + (*Switch)(nil), // 189: forge.Switch + (*SwitchList)(nil), // 190: forge.SwitchList + (*SwitchCreationRequest)(nil), // 191: forge.SwitchCreationRequest + (*SwitchDeletionRequest)(nil), // 192: forge.SwitchDeletionRequest + (*SwitchDeletionResult)(nil), // 193: forge.SwitchDeletionResult + (*SwitchStateHistoryRecord)(nil), // 194: forge.SwitchStateHistoryRecord + (*SwitchStateHistoriesRequest)(nil), // 195: forge.SwitchStateHistoriesRequest + (*SwitchStateHistories)(nil), // 196: forge.SwitchStateHistories + (*SwitchStateHistoryRecords)(nil), // 197: forge.SwitchStateHistoryRecords + (*SwitchQuery)(nil), // 198: forge.SwitchQuery + (*SwitchSearchFilter)(nil), // 199: forge.SwitchSearchFilter + (*SwitchesByIdsRequest)(nil), // 200: forge.SwitchesByIdsRequest + (*ExpectedSwitch)(nil), // 201: forge.ExpectedSwitch + (*ExpectedSwitchRequest)(nil), // 202: forge.ExpectedSwitchRequest + (*ExpectedSwitchList)(nil), // 203: forge.ExpectedSwitchList + (*LinkedExpectedSwitchList)(nil), // 204: forge.LinkedExpectedSwitchList + (*LinkedExpectedSwitch)(nil), // 205: forge.LinkedExpectedSwitch + (*ExpectedRack)(nil), // 206: forge.ExpectedRack + (*ExpectedRackRequest)(nil), // 207: forge.ExpectedRackRequest + (*ExpectedRackList)(nil), // 208: forge.ExpectedRackList + (*IBFabricSearchFilter)(nil), // 209: forge.IBFabricSearchFilter + (*IBFabricIdList)(nil), // 210: forge.IBFabricIdList + (*NetworkSegmentStateHistory)(nil), // 211: forge.NetworkSegmentStateHistory + (*NetworkSegment)(nil), // 212: forge.NetworkSegment + (*NetworkSegmentCreationRequest)(nil), // 213: forge.NetworkSegmentCreationRequest + (*NetworkSegmentDeletionRequest)(nil), // 214: forge.NetworkSegmentDeletionRequest + (*NetworkSegmentDeletionResult)(nil), // 215: forge.NetworkSegmentDeletionResult + (*NetworkSegmentSearchConfig)(nil), // 216: forge.NetworkSegmentSearchConfig + (*NetworkSegmentSearchFilter)(nil), // 217: forge.NetworkSegmentSearchFilter + (*NetworkSegmentIdList)(nil), // 218: forge.NetworkSegmentIdList + (*NetworkSegmentsByIdsRequest)(nil), // 219: forge.NetworkSegmentsByIdsRequest + (*NetworkPrefix)(nil), // 220: forge.NetworkPrefix + (*MachineState)(nil), // 221: forge.MachineState + (*InstancePowerRequest)(nil), // 222: forge.InstancePowerRequest + (*InstancePowerResult)(nil), // 223: forge.InstancePowerResult + (*InstanceList)(nil), // 224: forge.InstanceList + (*Label)(nil), // 225: forge.Label + (*Metadata)(nil), // 226: forge.Metadata + (*InstanceSearchFilter)(nil), // 227: forge.InstanceSearchFilter + (*InstanceIdList)(nil), // 228: forge.InstanceIdList + (*InstancesByIdsRequest)(nil), // 229: forge.InstancesByIdsRequest + (*InstanceAllocationRequest)(nil), // 230: forge.InstanceAllocationRequest + (*BatchInstanceAllocationRequest)(nil), // 231: forge.BatchInstanceAllocationRequest + (*BatchInstanceAllocationResponse)(nil), // 232: forge.BatchInstanceAllocationResponse + (*IpxeTemplateParameter)(nil), // 233: forge.IpxeTemplateParameter + (*IpxeTemplateArtifact)(nil), // 234: forge.IpxeTemplateArtifact + (*IpxeTemplate)(nil), // 235: forge.IpxeTemplate + (*TenantConfig)(nil), // 236: forge.TenantConfig + (*InstanceOperatingSystemConfig)(nil), // 237: forge.InstanceOperatingSystemConfig + (*InlineIpxe)(nil), // 238: forge.InlineIpxe + (*InstanceConfig)(nil), // 239: forge.InstanceConfig + (*InstanceNetworkConfig)(nil), // 240: forge.InstanceNetworkConfig + (*InstanceInfinibandConfig)(nil), // 241: forge.InstanceInfinibandConfig + (*InstanceDpuExtensionServiceConfig)(nil), // 242: forge.InstanceDpuExtensionServiceConfig + (*InstanceDpuExtensionServicesConfig)(nil), // 243: forge.InstanceDpuExtensionServicesConfig + (*InstanceNVLinkConfig)(nil), // 244: forge.InstanceNVLinkConfig + (*InstanceOperatingSystemUpdateRequest)(nil), // 245: forge.InstanceOperatingSystemUpdateRequest + (*InstanceConfigUpdateRequest)(nil), // 246: forge.InstanceConfigUpdateRequest + (*InstanceStatus)(nil), // 247: forge.InstanceStatus + (*InstanceNetworkStatus)(nil), // 248: forge.InstanceNetworkStatus + (*InstanceInfinibandStatus)(nil), // 249: forge.InstanceInfinibandStatus + (*DpuExtensionServiceStatus)(nil), // 250: forge.DpuExtensionServiceStatus + (*InstanceDpuExtensionServiceStatus)(nil), // 251: forge.InstanceDpuExtensionServiceStatus + (*InstanceDpuExtensionServicesStatus)(nil), // 252: forge.InstanceDpuExtensionServicesStatus + (*InstanceNVLinkStatus)(nil), // 253: forge.InstanceNVLinkStatus + (*Instance)(nil), // 254: forge.Instance + (*InstanceUpdateStatus)(nil), // 255: forge.InstanceUpdateStatus + (*InstanceInterfaceConfig)(nil), // 256: forge.InstanceInterfaceConfig + (*InstanceIBInterfaceConfig)(nil), // 257: forge.InstanceIBInterfaceConfig + (*InstanceInterfaceStatus)(nil), // 258: forge.InstanceInterfaceStatus + (*InstanceIBInterfaceStatus)(nil), // 259: forge.InstanceIBInterfaceStatus + (*InstanceNVLinkGpuStatus)(nil), // 260: forge.InstanceNVLinkGpuStatus + (*InstanceNVLinkGpuConfig)(nil), // 261: forge.InstanceNVLinkGpuConfig + (*InstancePhoneHomeLastContactRequest)(nil), // 262: forge.InstancePhoneHomeLastContactRequest + (*InstancePhoneHomeLastContactResponse)(nil), // 263: forge.InstancePhoneHomeLastContactResponse + (*Issue)(nil), // 264: forge.Issue + (*InstanceReleaseRequest)(nil), // 265: forge.InstanceReleaseRequest + (*InstanceReleaseResult)(nil), // 266: forge.InstanceReleaseResult + (*MachinesByIdsRequest)(nil), // 267: forge.MachinesByIdsRequest + (*MachineSearchConfig)(nil), // 268: forge.MachineSearchConfig + (*MachineStateHistoriesRequest)(nil), // 269: forge.MachineStateHistoriesRequest + (*MachineStateHistories)(nil), // 270: forge.MachineStateHistories + (*MachineStateHistoryRecords)(nil), // 271: forge.MachineStateHistoryRecords + (*MachineHealthHistoriesRequest)(nil), // 272: forge.MachineHealthHistoriesRequest + (*HealthHistories)(nil), // 273: forge.HealthHistories + (*HealthHistoryRecords)(nil), // 274: forge.HealthHistoryRecords + (*HealthHistoryRecord)(nil), // 275: forge.HealthHistoryRecord + (*TenantByOrganizationIdsRequest)(nil), // 276: forge.TenantByOrganizationIdsRequest + (*TenantSearchFilter)(nil), // 277: forge.TenantSearchFilter + (*TenantList)(nil), // 278: forge.TenantList + (*TenantOrganizationIdList)(nil), // 279: forge.TenantOrganizationIdList + (*InterfaceList)(nil), // 280: forge.InterfaceList + (*MachineList)(nil), // 281: forge.MachineList + (*InterfaceDeleteQuery)(nil), // 282: forge.InterfaceDeleteQuery + (*InterfaceSearchQuery)(nil), // 283: forge.InterfaceSearchQuery + (*AssignStaticAddressRequest)(nil), // 284: forge.AssignStaticAddressRequest + (*AssignStaticAddressResponse)(nil), // 285: forge.AssignStaticAddressResponse + (*RemoveStaticAddressRequest)(nil), // 286: forge.RemoveStaticAddressRequest + (*RemoveStaticAddressResponse)(nil), // 287: forge.RemoveStaticAddressResponse + (*FindInterfaceAddressesRequest)(nil), // 288: forge.FindInterfaceAddressesRequest + (*InterfaceAddress)(nil), // 289: forge.InterfaceAddress + (*FindInterfaceAddressesResponse)(nil), // 290: forge.FindInterfaceAddressesResponse + (*BmcInfo)(nil), // 291: forge.BmcInfo + (*Machine)(nil), // 292: forge.Machine + (*InstanceNetworkRestrictions)(nil), // 293: forge.InstanceNetworkRestrictions + (*MachineMetadataUpdateRequest)(nil), // 294: forge.MachineMetadataUpdateRequest + (*RackMetadataUpdateRequest)(nil), // 295: forge.RackMetadataUpdateRequest + (*SwitchMetadataUpdateRequest)(nil), // 296: forge.SwitchMetadataUpdateRequest + (*PowerShelfMetadataUpdateRequest)(nil), // 297: forge.PowerShelfMetadataUpdateRequest + (*DpuAgentInventoryReport)(nil), // 298: forge.DpuAgentInventoryReport + (*MachineComponentInventory)(nil), // 299: forge.MachineComponentInventory + (*MachineInventorySoftwareComponent)(nil), // 300: forge.MachineInventorySoftwareComponent + (*HealthOverrideOrigin)(nil), // 301: forge.HealthOverrideOrigin + (*ControllerStateReason)(nil), // 302: forge.ControllerStateReason + (*ControllerStateSourceReference)(nil), // 303: forge.ControllerStateSourceReference + (*StateSla)(nil), // 304: forge.StateSla + (*InstanceTenantStatus)(nil), // 305: forge.InstanceTenantStatus + (*MachineEvent)(nil), // 306: forge.MachineEvent + (*MachineInterface)(nil), // 307: forge.MachineInterface + (*InfinibandStatusObservation)(nil), // 308: forge.InfinibandStatusObservation + (*MachineIbInterface)(nil), // 309: forge.MachineIbInterface + (*DhcpDiscovery)(nil), // 310: forge.DhcpDiscovery + (*ExpireDhcpLeaseRequest)(nil), // 311: forge.ExpireDhcpLeaseRequest + (*ExpireDhcpLeaseResponse)(nil), // 312: forge.ExpireDhcpLeaseResponse + (*DhcpRecord)(nil), // 313: forge.DhcpRecord + (*NetworkSegmentList)(nil), // 314: forge.NetworkSegmentList + (*SSHKeyValidationRequest)(nil), // 315: forge.SSHKeyValidationRequest + (*SSHKeyValidationResponse)(nil), // 316: forge.SSHKeyValidationResponse + (*GetBmcCredentialsRequest)(nil), // 317: forge.GetBmcCredentialsRequest + (*GetBmcCredentialsResponse)(nil), // 318: forge.GetBmcCredentialsResponse + (*BmcCredentials)(nil), // 319: forge.BmcCredentials + (*GetSiteExplorationRequest)(nil), // 320: forge.GetSiteExplorationRequest + (*ClearSiteExplorationErrorRequest)(nil), // 321: forge.ClearSiteExplorationErrorRequest + (*ReExploreEndpointRequest)(nil), // 322: forge.ReExploreEndpointRequest + (*DeleteExploredEndpointRequest)(nil), // 323: forge.DeleteExploredEndpointRequest + (*PauseExploredEndpointRemediationRequest)(nil), // 324: forge.PauseExploredEndpointRemediationRequest + (*DeleteExploredEndpointResponse)(nil), // 325: forge.DeleteExploredEndpointResponse + (*BmcEndpointRequest)(nil), // 326: forge.BmcEndpointRequest + (*SshTimeoutConfig)(nil), // 327: forge.SshTimeoutConfig + (*SshRequest)(nil), // 328: forge.SshRequest + (*CopyBfbToDpuRshimRequest)(nil), // 329: forge.CopyBfbToDpuRshimRequest + (*UpdateMachineHardwareInfoRequest)(nil), // 330: forge.UpdateMachineHardwareInfoRequest + (*MachineHardwareInfo)(nil), // 331: forge.MachineHardwareInfo + (*ManagedHostNetworkConfigRequest)(nil), // 332: forge.ManagedHostNetworkConfigRequest + (*ManagedHostNetworkConfigResponse)(nil), // 333: forge.ManagedHostNetworkConfigResponse + (*TrafficInterceptConfig)(nil), // 334: forge.TrafficInterceptConfig + (*TrafficInterceptBridging)(nil), // 335: forge.TrafficInterceptBridging + (*ManagedHostDpuExtensionServiceConfig)(nil), // 336: forge.ManagedHostDpuExtensionServiceConfig + (*ManagedHostQuarantineState)(nil), // 337: forge.ManagedHostQuarantineState + (*GetManagedHostQuarantineStateRequest)(nil), // 338: forge.GetManagedHostQuarantineStateRequest + (*GetManagedHostQuarantineStateResponse)(nil), // 339: forge.GetManagedHostQuarantineStateResponse + (*SetManagedHostQuarantineStateRequest)(nil), // 340: forge.SetManagedHostQuarantineStateRequest + (*SetManagedHostQuarantineStateResponse)(nil), // 341: forge.SetManagedHostQuarantineStateResponse + (*ClearManagedHostQuarantineStateRequest)(nil), // 342: forge.ClearManagedHostQuarantineStateRequest + (*ClearManagedHostQuarantineStateResponse)(nil), // 343: forge.ClearManagedHostQuarantineStateResponse + (*ManagedHostNetworkConfig)(nil), // 344: forge.ManagedHostNetworkConfig + (*FlatInterfaceConfig)(nil), // 345: forge.FlatInterfaceConfig + (*FlatInterfaceNetworkSecurityGroupConfig)(nil), // 346: forge.FlatInterfaceNetworkSecurityGroupConfig + (*ManagedHostNetworkStatusRequest)(nil), // 347: forge.ManagedHostNetworkStatusRequest + (*ManagedHostNetworkStatusResponse)(nil), // 348: forge.ManagedHostNetworkStatusResponse + (*DpuAgentUpgradeCheckRequest)(nil), // 349: forge.DpuAgentUpgradeCheckRequest + (*DpuAgentUpgradeCheckResponse)(nil), // 350: forge.DpuAgentUpgradeCheckResponse + (*DpuAgentUpgradePolicyRequest)(nil), // 351: forge.DpuAgentUpgradePolicyRequest + (*DpuAgentUpgradePolicyResponse)(nil), // 352: forge.DpuAgentUpgradePolicyResponse + (*AdminForceDeleteMachineRequest)(nil), // 353: forge.AdminForceDeleteMachineRequest + (*AdminForceDeleteMachineResponse)(nil), // 354: forge.AdminForceDeleteMachineResponse + (*DisableSecureBootResponse)(nil), // 355: forge.DisableSecureBootResponse + (*LockdownRequest)(nil), // 356: forge.LockdownRequest + (*LockdownResponse)(nil), // 357: forge.LockdownResponse + (*LockdownStatusRequest)(nil), // 358: forge.LockdownStatusRequest + (*MachineSetupStatusRequest)(nil), // 359: forge.MachineSetupStatusRequest + (*MachineSetupRequest)(nil), // 360: forge.MachineSetupRequest + (*MachineSetupResponse)(nil), // 361: forge.MachineSetupResponse + (*SetDpuFirstBootOrderRequest)(nil), // 362: forge.SetDpuFirstBootOrderRequest + (*SetDpuFirstBootOrderResponse)(nil), // 363: forge.SetDpuFirstBootOrderResponse + (*AdminRebootRequest)(nil), // 364: forge.AdminRebootRequest + (*AdminRebootResponse)(nil), // 365: forge.AdminRebootResponse + (*AdminBmcResetRequest)(nil), // 366: forge.AdminBmcResetRequest + (*AdminBmcResetResponse)(nil), // 367: forge.AdminBmcResetResponse + (*EnableInfiniteBootRequest)(nil), // 368: forge.EnableInfiniteBootRequest + (*EnableInfiniteBootResponse)(nil), // 369: forge.EnableInfiniteBootResponse + (*IsInfiniteBootEnabledRequest)(nil), // 370: forge.IsInfiniteBootEnabledRequest + (*IsInfiniteBootEnabledResponse)(nil), // 371: forge.IsInfiniteBootEnabledResponse + (*BMCMetaDataGetRequest)(nil), // 372: forge.BMCMetaDataGetRequest + (*BMCMetaDataGetResponse)(nil), // 373: forge.BMCMetaDataGetResponse + (*MachineCredentialsUpdateRequest)(nil), // 374: forge.MachineCredentialsUpdateRequest + (*MachineCredentialsUpdateResponse)(nil), // 375: forge.MachineCredentialsUpdateResponse + (*ForgeAgentControlRequest)(nil), // 376: forge.ForgeAgentControlRequest + (*ForgeAgentControlResponse)(nil), // 377: forge.ForgeAgentControlResponse + (*MachineDiscoveryInfo)(nil), // 378: forge.MachineDiscoveryInfo + (*MachineDiscoveryCompletedRequest)(nil), // 379: forge.MachineDiscoveryCompletedRequest + (*MachineCleanupInfo)(nil), // 380: forge.MachineCleanupInfo + (*MachineCertificate)(nil), // 381: forge.MachineCertificate + (*MachineCertificateRenewRequest)(nil), // 382: forge.MachineCertificateRenewRequest + (*MachineCertificateResult)(nil), // 383: forge.MachineCertificateResult + (*MachineDiscoveryResult)(nil), // 384: forge.MachineDiscoveryResult + (*MachineDiscoveryCompletedResponse)(nil), // 385: forge.MachineDiscoveryCompletedResponse + (*MachineCleanupResult)(nil), // 386: forge.MachineCleanupResult + (*ForgeScoutErrorReport)(nil), // 387: forge.ForgeScoutErrorReport + (*ForgeScoutErrorReportResult)(nil), // 388: forge.ForgeScoutErrorReportResult + (*PxeInstructionRequest)(nil), // 389: forge.PxeInstructionRequest + (*PxeInstructions)(nil), // 390: forge.PxeInstructions + (*CloudInitDiscoveryInstructions)(nil), // 391: forge.CloudInitDiscoveryInstructions + (*CloudInitMetaData)(nil), // 392: forge.CloudInitMetaData + (*CloudInitInstructionsRequest)(nil), // 393: forge.CloudInitInstructionsRequest + (*CloudInitInstructions)(nil), // 394: forge.CloudInitInstructions + (*DpuNetworkStatus)(nil), // 395: forge.DpuNetworkStatus + (*LastDhcpRequest)(nil), // 396: forge.LastDhcpRequest + (*DpuExtensionServiceStatusObservation)(nil), // 397: forge.DpuExtensionServiceStatusObservation + (*DpuExtensionServiceComponent)(nil), // 398: forge.DpuExtensionServiceComponent + (*OptionalHealthReport)(nil), // 399: forge.OptionalHealthReport + (*HealthReportOverride)(nil), // 400: forge.HealthReportOverride + (*InsertHealthReportOverrideRequest)(nil), // 401: forge.InsertHealthReportOverrideRequest + (*InsertRackHealthReportOverrideRequest)(nil), // 402: forge.InsertRackHealthReportOverrideRequest + (*RemoveRackHealthReportOverrideRequest)(nil), // 403: forge.RemoveRackHealthReportOverrideRequest + (*ListRackHealthReportOverridesRequest)(nil), // 404: forge.ListRackHealthReportOverridesRequest + (*ListHealthReportOverrideResponse)(nil), // 405: forge.ListHealthReportOverrideResponse + (*RemoveHealthReportOverrideRequest)(nil), // 406: forge.RemoveHealthReportOverrideRequest + (*InstanceInterfaceStatusObservation)(nil), // 407: forge.InstanceInterfaceStatusObservation + (*FabricInterfaceData)(nil), // 408: forge.FabricInterfaceData + (*LinkData)(nil), // 409: forge.LinkData + (*Tenant)(nil), // 410: forge.Tenant + (*CreateTenantRequest)(nil), // 411: forge.CreateTenantRequest + (*CreateTenantResponse)(nil), // 412: forge.CreateTenantResponse + (*UpdateTenantRequest)(nil), // 413: forge.UpdateTenantRequest + (*UpdateTenantResponse)(nil), // 414: forge.UpdateTenantResponse + (*FindTenantRequest)(nil), // 415: forge.FindTenantRequest + (*FindTenantResponse)(nil), // 416: forge.FindTenantResponse + (*TenantKeysetIdentifier)(nil), // 417: forge.TenantKeysetIdentifier + (*TenantPublicKey)(nil), // 418: forge.TenantPublicKey + (*TenantKeysetContent)(nil), // 419: forge.TenantKeysetContent + (*TenantKeyset)(nil), // 420: forge.TenantKeyset + (*CreateTenantKeysetRequest)(nil), // 421: forge.CreateTenantKeysetRequest + (*CreateTenantKeysetResponse)(nil), // 422: forge.CreateTenantKeysetResponse + (*TenantKeySetList)(nil), // 423: forge.TenantKeySetList + (*UpdateTenantKeysetRequest)(nil), // 424: forge.UpdateTenantKeysetRequest + (*UpdateTenantKeysetResponse)(nil), // 425: forge.UpdateTenantKeysetResponse + (*DeleteTenantKeysetRequest)(nil), // 426: forge.DeleteTenantKeysetRequest + (*DeleteTenantKeysetResponse)(nil), // 427: forge.DeleteTenantKeysetResponse + (*TenantKeysetSearchFilter)(nil), // 428: forge.TenantKeysetSearchFilter + (*TenantKeysetIdList)(nil), // 429: forge.TenantKeysetIdList + (*TenantKeysetsByIdsRequest)(nil), // 430: forge.TenantKeysetsByIdsRequest + (*ValidateTenantPublicKeyRequest)(nil), // 431: forge.ValidateTenantPublicKeyRequest + (*ValidateTenantPublicKeyResponse)(nil), // 432: forge.ValidateTenantPublicKeyResponse + (*ListResourcePoolsRequest)(nil), // 433: forge.ListResourcePoolsRequest + (*ResourcePools)(nil), // 434: forge.ResourcePools + (*ResourcePool)(nil), // 435: forge.ResourcePool + (*GrowResourcePoolRequest)(nil), // 436: forge.GrowResourcePoolRequest + (*GrowResourcePoolResponse)(nil), // 437: forge.GrowResourcePoolResponse + (*Range)(nil), // 438: forge.Range + (*MigrateVpcVniResponse)(nil), // 439: forge.MigrateVpcVniResponse + (*MaintenanceRequest)(nil), // 440: forge.MaintenanceRequest + (*SetDynamicConfigRequest)(nil), // 441: forge.SetDynamicConfigRequest + (*FindIpAddressRequest)(nil), // 442: forge.FindIpAddressRequest + (*FindIpAddressResponse)(nil), // 443: forge.FindIpAddressResponse + (*IdentifyUuidRequest)(nil), // 444: forge.IdentifyUuidRequest + (*IdentifyUuidResponse)(nil), // 445: forge.IdentifyUuidResponse + (*IdentifyMacRequest)(nil), // 446: forge.IdentifyMacRequest + (*IdentifyMacResponse)(nil), // 447: forge.IdentifyMacResponse + (*IdentifySerialRequest)(nil), // 448: forge.IdentifySerialRequest + (*IdentifySerialResponse)(nil), // 449: forge.IdentifySerialResponse + (*DpuReprovisioningRequest)(nil), // 450: forge.DpuReprovisioningRequest + (*DpuReprovisioningListRequest)(nil), // 451: forge.DpuReprovisioningListRequest + (*DpuReprovisioningListResponse)(nil), // 452: forge.DpuReprovisioningListResponse + (*HostReprovisioningRequest)(nil), // 453: forge.HostReprovisioningRequest + (*HostReprovisioningListRequest)(nil), // 454: forge.HostReprovisioningListRequest + (*HostReprovisioningListResponse)(nil), // 455: forge.HostReprovisioningListResponse + (*DpuInfo)(nil), // 456: forge.DpuInfo + (*GetDpuInfoListRequest)(nil), // 457: forge.GetDpuInfoListRequest + (*GetDpuInfoListResponse)(nil), // 458: forge.GetDpuInfoListResponse + (*IpAddressMatch)(nil), // 459: forge.IpAddressMatch + (*MachineBootOverride)(nil), // 460: forge.MachineBootOverride + (*ConnectedDevice)(nil), // 461: forge.ConnectedDevice + (*ConnectedDeviceList)(nil), // 462: forge.ConnectedDeviceList + (*BmcIpList)(nil), // 463: forge.BmcIpList + (*BmcIp)(nil), // 464: forge.BmcIp + (*MacAddressBmcIp)(nil), // 465: forge.MacAddressBmcIp + (*MachineIdBmcIpPairs)(nil), // 466: forge.MachineIdBmcIpPairs + (*MachineIdBmcIp)(nil), // 467: forge.MachineIdBmcIp + (*NetworkDevice)(nil), // 468: forge.NetworkDevice + (*NetworkTopologyRequest)(nil), // 469: forge.NetworkTopologyRequest + (*NetworkDeviceIdList)(nil), // 470: forge.NetworkDeviceIdList + (*NetworkTopologyData)(nil), // 471: forge.NetworkTopologyData + (*RouteServers)(nil), // 472: forge.RouteServers + (*RouteServerEntries)(nil), // 473: forge.RouteServerEntries + (*RouteServer)(nil), // 474: forge.RouteServer + (*SetHostUefiPasswordRequest)(nil), // 475: forge.SetHostUefiPasswordRequest + (*SetHostUefiPasswordResponse)(nil), // 476: forge.SetHostUefiPasswordResponse + (*ClearHostUefiPasswordRequest)(nil), // 477: forge.ClearHostUefiPasswordRequest + (*ClearHostUefiPasswordResponse)(nil), // 478: forge.ClearHostUefiPasswordResponse + (*OsImageAttributes)(nil), // 479: forge.OsImageAttributes + (*OsImage)(nil), // 480: forge.OsImage + (*ListOsImageRequest)(nil), // 481: forge.ListOsImageRequest + (*ListOsImageResponse)(nil), // 482: forge.ListOsImageResponse + (*DeleteOsImageRequest)(nil), // 483: forge.DeleteOsImageRequest + (*DeleteOsImageResponse)(nil), // 484: forge.DeleteOsImageResponse + (*GetIpxeTemplateRequest)(nil), // 485: forge.GetIpxeTemplateRequest + (*ListIpxeTemplatesRequest)(nil), // 486: forge.ListIpxeTemplatesRequest + (*IpxeTemplateList)(nil), // 487: forge.IpxeTemplateList + (*ExpectedHostNic)(nil), // 488: forge.ExpectedHostNic + (*ExpectedMachine)(nil), // 489: forge.ExpectedMachine + (*ExpectedMachineRequest)(nil), // 490: forge.ExpectedMachineRequest + (*ExpectedMachineList)(nil), // 491: forge.ExpectedMachineList + (*LinkedExpectedMachineList)(nil), // 492: forge.LinkedExpectedMachineList + (*LinkedExpectedMachine)(nil), // 493: forge.LinkedExpectedMachine + (*BatchExpectedMachineOperationRequest)(nil), // 494: forge.BatchExpectedMachineOperationRequest + (*ExpectedMachineOperationResult)(nil), // 495: forge.ExpectedMachineOperationResult + (*BatchExpectedMachineOperationResponse)(nil), // 496: forge.BatchExpectedMachineOperationResponse + (*MachineRebootCompletedResponse)(nil), // 497: forge.MachineRebootCompletedResponse + (*MachineRebootCompletedRequest)(nil), // 498: forge.MachineRebootCompletedRequest + (*MachineValidationCompletedRequest)(nil), // 499: forge.MachineValidationCompletedRequest + (*MachineValidationCompletedResponse)(nil), // 500: forge.MachineValidationCompletedResponse + (*MachineValidationResult)(nil), // 501: forge.MachineValidationResult + (*MachineValidationResultPostRequest)(nil), // 502: forge.MachineValidationResultPostRequest + (*MachineValidationResultList)(nil), // 503: forge.MachineValidationResultList + (*MachineValidationGetRequest)(nil), // 504: forge.MachineValidationGetRequest + (*MachineValidationStatus)(nil), // 505: forge.MachineValidationStatus + (*MachineValidationRun)(nil), // 506: forge.MachineValidationRun + (*MachineSetAutoUpdateRequest)(nil), // 507: forge.MachineSetAutoUpdateRequest + (*MachineSetAutoUpdateResponse)(nil), // 508: forge.MachineSetAutoUpdateResponse + (*GetMachineValidationExternalConfigRequest)(nil), // 509: forge.GetMachineValidationExternalConfigRequest + (*MachineValidationExternalConfig)(nil), // 510: forge.MachineValidationExternalConfig + (*GetMachineValidationExternalConfigResponse)(nil), // 511: forge.GetMachineValidationExternalConfigResponse + (*GetMachineValidationExternalConfigsRequest)(nil), // 512: forge.GetMachineValidationExternalConfigsRequest + (*GetMachineValidationExternalConfigsResponse)(nil), // 513: forge.GetMachineValidationExternalConfigsResponse + (*AddUpdateMachineValidationExternalConfigRequest)(nil), // 514: forge.AddUpdateMachineValidationExternalConfigRequest + (*RemoveMachineValidationExternalConfigRequest)(nil), // 515: forge.RemoveMachineValidationExternalConfigRequest + (*MachineValidationOnDemandRequest)(nil), // 516: forge.MachineValidationOnDemandRequest + (*MachineValidationOnDemandResponse)(nil), // 517: forge.MachineValidationOnDemandResponse + (*AdminPowerControlRequest)(nil), // 518: forge.AdminPowerControlRequest + (*AdminPowerControlResponse)(nil), // 519: forge.AdminPowerControlResponse + (*GetRedfishJobStateRequest)(nil), // 520: forge.GetRedfishJobStateRequest + (*GetRedfishJobStateResponse)(nil), // 521: forge.GetRedfishJobStateResponse + (*MachineValidationRunList)(nil), // 522: forge.MachineValidationRunList + (*MachineValidationRunListGetRequest)(nil), // 523: forge.MachineValidationRunListGetRequest + (*IsBmcInManagedHostResponse)(nil), // 524: forge.IsBmcInManagedHostResponse + (*BmcCredentialStatusResponse)(nil), // 525: forge.BmcCredentialStatusResponse + (*MachineValidationTestsGetRequest)(nil), // 526: forge.MachineValidationTestsGetRequest + (*MachineValidationTestUpdateRequest)(nil), // 527: forge.MachineValidationTestUpdateRequest + (*MachineValidationTestAddRequest)(nil), // 528: forge.MachineValidationTestAddRequest + (*MachineValidationTestAddUpdateResponse)(nil), // 529: forge.MachineValidationTestAddUpdateResponse + (*MachineValidationTestsGetResponse)(nil), // 530: forge.MachineValidationTestsGetResponse + (*MachineValidationTestVerfiedRequest)(nil), // 531: forge.MachineValidationTestVerfiedRequest + (*MachineValidationTestVerfiedResponse)(nil), // 532: forge.MachineValidationTestVerfiedResponse + (*MachineValidationTest)(nil), // 533: forge.MachineValidationTest + (*MachineValidationTestNextVersionResponse)(nil), // 534: forge.MachineValidationTestNextVersionResponse + (*MachineValidationTestNextVersionRequest)(nil), // 535: forge.MachineValidationTestNextVersionRequest + (*MachineValidationTestEnableDisableTestRequest)(nil), // 536: forge.MachineValidationTestEnableDisableTestRequest + (*MachineValidationTestEnableDisableTestResponse)(nil), // 537: forge.MachineValidationTestEnableDisableTestResponse + (*MachineValidationRunRequest)(nil), // 538: forge.MachineValidationRunRequest + (*MachineValidationRunResponse)(nil), // 539: forge.MachineValidationRunResponse + (*MachineCapabilityAttributesCpu)(nil), // 540: forge.MachineCapabilityAttributesCpu + (*MachineCapabilityAttributesGpu)(nil), // 541: forge.MachineCapabilityAttributesGpu + (*MachineCapabilityAttributesMemory)(nil), // 542: forge.MachineCapabilityAttributesMemory + (*MachineCapabilityAttributesStorage)(nil), // 543: forge.MachineCapabilityAttributesStorage + (*MachineCapabilityAttributesNetwork)(nil), // 544: forge.MachineCapabilityAttributesNetwork + (*MachineCapabilityAttributesInfiniband)(nil), // 545: forge.MachineCapabilityAttributesInfiniband + (*MachineCapabilityAttributesDpu)(nil), // 546: forge.MachineCapabilityAttributesDpu + (*MachineCapabilitiesSet)(nil), // 547: forge.MachineCapabilitiesSet + (*InstanceTypeAttributes)(nil), // 548: forge.InstanceTypeAttributes + (*InstanceType)(nil), // 549: forge.InstanceType + (*InstanceTypeMachineCapabilityFilterAttributes)(nil), // 550: forge.InstanceTypeMachineCapabilityFilterAttributes + (*CreateInstanceTypeRequest)(nil), // 551: forge.CreateInstanceTypeRequest + (*CreateInstanceTypeResponse)(nil), // 552: forge.CreateInstanceTypeResponse + (*FindInstanceTypeIdsRequest)(nil), // 553: forge.FindInstanceTypeIdsRequest + (*FindInstanceTypeIdsResponse)(nil), // 554: forge.FindInstanceTypeIdsResponse + (*FindInstanceTypesByIdsRequest)(nil), // 555: forge.FindInstanceTypesByIdsRequest + (*FindInstanceTypesByIdsResponse)(nil), // 556: forge.FindInstanceTypesByIdsResponse + (*DeleteInstanceTypeRequest)(nil), // 557: forge.DeleteInstanceTypeRequest + (*DeleteInstanceTypeResponse)(nil), // 558: forge.DeleteInstanceTypeResponse + (*UpdateInstanceTypeResponse)(nil), // 559: forge.UpdateInstanceTypeResponse + (*UpdateInstanceTypeRequest)(nil), // 560: forge.UpdateInstanceTypeRequest + (*AssociateMachinesWithInstanceTypeRequest)(nil), // 561: forge.AssociateMachinesWithInstanceTypeRequest + (*AssociateMachinesWithInstanceTypeResponse)(nil), // 562: forge.AssociateMachinesWithInstanceTypeResponse + (*RemoveMachineInstanceTypeAssociationRequest)(nil), // 563: forge.RemoveMachineInstanceTypeAssociationRequest + (*RemoveMachineInstanceTypeAssociationResponse)(nil), // 564: forge.RemoveMachineInstanceTypeAssociationResponse + (*RedfishBrowseRequest)(nil), // 565: forge.RedfishBrowseRequest + (*RedfishBrowseResponse)(nil), // 566: forge.RedfishBrowseResponse + (*RedfishListActionsRequest)(nil), // 567: forge.RedfishListActionsRequest + (*RedfishListActionsResponse)(nil), // 568: forge.RedfishListActionsResponse + (*RedfishAction)(nil), // 569: forge.RedfishAction + (*OptionalRedfishActionResult)(nil), // 570: forge.OptionalRedfishActionResult + (*RedfishActionResult)(nil), // 571: forge.RedfishActionResult + (*RedfishCreateActionRequest)(nil), // 572: forge.RedfishCreateActionRequest + (*RedfishCreateActionResponse)(nil), // 573: forge.RedfishCreateActionResponse + (*RedfishActionID)(nil), // 574: forge.RedfishActionID + (*RedfishApproveActionResponse)(nil), // 575: forge.RedfishApproveActionResponse + (*RedfishApplyActionResponse)(nil), // 576: forge.RedfishApplyActionResponse + (*RedfishCancelActionResponse)(nil), // 577: forge.RedfishCancelActionResponse + (*UfmBrowseRequest)(nil), // 578: forge.UfmBrowseRequest + (*UfmBrowseResponse)(nil), // 579: forge.UfmBrowseResponse + (*NetworkSecurityGroupAttributes)(nil), // 580: forge.NetworkSecurityGroupAttributes + (*NetworkSecurityGroup)(nil), // 581: forge.NetworkSecurityGroup + (*CreateNetworkSecurityGroupRequest)(nil), // 582: forge.CreateNetworkSecurityGroupRequest + (*CreateNetworkSecurityGroupResponse)(nil), // 583: forge.CreateNetworkSecurityGroupResponse + (*FindNetworkSecurityGroupIdsRequest)(nil), // 584: forge.FindNetworkSecurityGroupIdsRequest + (*FindNetworkSecurityGroupIdsResponse)(nil), // 585: forge.FindNetworkSecurityGroupIdsResponse + (*FindNetworkSecurityGroupsByIdsRequest)(nil), // 586: forge.FindNetworkSecurityGroupsByIdsRequest + (*FindNetworkSecurityGroupsByIdsResponse)(nil), // 587: forge.FindNetworkSecurityGroupsByIdsResponse + (*UpdateNetworkSecurityGroupResponse)(nil), // 588: forge.UpdateNetworkSecurityGroupResponse + (*UpdateNetworkSecurityGroupRequest)(nil), // 589: forge.UpdateNetworkSecurityGroupRequest + (*DeleteNetworkSecurityGroupRequest)(nil), // 590: forge.DeleteNetworkSecurityGroupRequest + (*DeleteNetworkSecurityGroupResponse)(nil), // 591: forge.DeleteNetworkSecurityGroupResponse + (*NetworkSecurityGroupStatus)(nil), // 592: forge.NetworkSecurityGroupStatus + (*NetworkSecurityGroupPropagationObjectStatus)(nil), // 593: forge.NetworkSecurityGroupPropagationObjectStatus + (*GetNetworkSecurityGroupPropagationStatusResponse)(nil), // 594: forge.GetNetworkSecurityGroupPropagationStatusResponse + (*NetworkSecurityGroupIdList)(nil), // 595: forge.NetworkSecurityGroupIdList + (*GetNetworkSecurityGroupPropagationStatusRequest)(nil), // 596: forge.GetNetworkSecurityGroupPropagationStatusRequest + (*NetworkSecurityGroupRuleAttributes)(nil), // 597: forge.NetworkSecurityGroupRuleAttributes + (*ResolvedNetworkSecurityGroupRule)(nil), // 598: forge.ResolvedNetworkSecurityGroupRule + (*GetNetworkSecurityGroupAttachmentsRequest)(nil), // 599: forge.GetNetworkSecurityGroupAttachmentsRequest + (*NetworkSecurityGroupAttachments)(nil), // 600: forge.NetworkSecurityGroupAttachments + (*GetNetworkSecurityGroupAttachmentsResponse)(nil), // 601: forge.GetNetworkSecurityGroupAttachmentsResponse + (*GetDesiredFirmwareVersionsRequest)(nil), // 602: forge.GetDesiredFirmwareVersionsRequest + (*GetDesiredFirmwareVersionsResponse)(nil), // 603: forge.GetDesiredFirmwareVersionsResponse + (*DesiredFirmwareVersionEntry)(nil), // 604: forge.DesiredFirmwareVersionEntry + (*SkuComponentChassis)(nil), // 605: forge.SkuComponentChassis + (*SkuComponentCpu)(nil), // 606: forge.SkuComponentCpu + (*SkuComponentGpu)(nil), // 607: forge.SkuComponentGpu + (*SkuComponentEthernetDevices)(nil), // 608: forge.SkuComponentEthernetDevices + (*SkuComponentInfinibandDevices)(nil), // 609: forge.SkuComponentInfinibandDevices + (*SkuComponentStorage)(nil), // 610: forge.SkuComponentStorage + (*SkuComponentStorageController)(nil), // 611: forge.SkuComponentStorageController + (*SkuComponentMemory)(nil), // 612: forge.SkuComponentMemory + (*SkuComponentTpm)(nil), // 613: forge.SkuComponentTpm + (*SkuComponents)(nil), // 614: forge.SkuComponents + (*Sku)(nil), // 615: forge.Sku + (*SkuMachinePair)(nil), // 616: forge.SkuMachinePair + (*RemoveSkuRequest)(nil), // 617: forge.RemoveSkuRequest + (*SkuList)(nil), // 618: forge.SkuList + (*SkuIdList)(nil), // 619: forge.SkuIdList + (*SkuStatus)(nil), // 620: forge.SkuStatus + (*SkusByIdsRequest)(nil), // 621: forge.SkusByIdsRequest + (*SkuSearchFilter)(nil), // 622: forge.SkuSearchFilter + (*DpaInterface)(nil), // 623: forge.DpaInterface + (*DpaInterfaceCreationRequest)(nil), // 624: forge.DpaInterfaceCreationRequest + (*DpaInterfaceIdList)(nil), // 625: forge.DpaInterfaceIdList + (*DpaInterfacesByIdsRequest)(nil), // 626: forge.DpaInterfacesByIdsRequest + (*DpaInterfaceList)(nil), // 627: forge.DpaInterfaceList + (*DpaInterfaceStateHistoryRecord)(nil), // 628: forge.DpaInterfaceStateHistoryRecord + (*DpaNetworkObservationSetRequest)(nil), // 629: forge.DpaNetworkObservationSetRequest + (*DpaInterfaceDeletionRequest)(nil), // 630: forge.DpaInterfaceDeletionRequest + (*DpaInterfaceDeletionResult)(nil), // 631: forge.DpaInterfaceDeletionResult + (*SkuUpdateMetadataRequest)(nil), // 632: forge.SkuUpdateMetadataRequest + (*PowerOptionRequest)(nil), // 633: forge.PowerOptionRequest + (*PowerOptionUpdateRequest)(nil), // 634: forge.PowerOptionUpdateRequest + (*PowerOptions)(nil), // 635: forge.PowerOptions + (*PowerOptionResponse)(nil), // 636: forge.PowerOptionResponse + (*ComputeAllocationAttributes)(nil), // 637: forge.ComputeAllocationAttributes + (*ComputeAllocation)(nil), // 638: forge.ComputeAllocation + (*CreateComputeAllocationRequest)(nil), // 639: forge.CreateComputeAllocationRequest + (*CreateComputeAllocationResponse)(nil), // 640: forge.CreateComputeAllocationResponse + (*FindComputeAllocationIdsRequest)(nil), // 641: forge.FindComputeAllocationIdsRequest + (*FindComputeAllocationIdsResponse)(nil), // 642: forge.FindComputeAllocationIdsResponse + (*FindComputeAllocationsByIdsRequest)(nil), // 643: forge.FindComputeAllocationsByIdsRequest + (*FindComputeAllocationsByIdsResponse)(nil), // 644: forge.FindComputeAllocationsByIdsResponse + (*UpdateComputeAllocationResponse)(nil), // 645: forge.UpdateComputeAllocationResponse + (*UpdateComputeAllocationRequest)(nil), // 646: forge.UpdateComputeAllocationRequest + (*DeleteComputeAllocationRequest)(nil), // 647: forge.DeleteComputeAllocationRequest + (*DeleteComputeAllocationResponse)(nil), // 648: forge.DeleteComputeAllocationResponse + (*InstanceTypeAllocationStats)(nil), // 649: forge.InstanceTypeAllocationStats + (*GetRackRequest)(nil), // 650: forge.GetRackRequest + (*GetRackResponse)(nil), // 651: forge.GetRackResponse + (*RackList)(nil), // 652: forge.RackList + (*RackSearchFilter)(nil), // 653: forge.RackSearchFilter + (*RackIdList)(nil), // 654: forge.RackIdList + (*RacksByIdsRequest)(nil), // 655: forge.RacksByIdsRequest + (*Rack)(nil), // 656: forge.Rack + (*RackStateHistoryRecord)(nil), // 657: forge.RackStateHistoryRecord + (*RackStateHistoriesRequest)(nil), // 658: forge.RackStateHistoriesRequest + (*RackStateHistories)(nil), // 659: forge.RackStateHistories + (*RackStateHistoryRecords)(nil), // 660: forge.RackStateHistoryRecords + (*DeleteRackRequest)(nil), // 661: forge.DeleteRackRequest + (*RackCapabilityCompute)(nil), // 662: forge.RackCapabilityCompute + (*RackCapabilitySwitch)(nil), // 663: forge.RackCapabilitySwitch + (*RackCapabilityPowerShelf)(nil), // 664: forge.RackCapabilityPowerShelf + (*RackCapabilitiesSet)(nil), // 665: forge.RackCapabilitiesSet + (*GetRackCapabilitiesRequest)(nil), // 666: forge.GetRackCapabilitiesRequest + (*GetRackCapabilitiesResponse)(nil), // 667: forge.GetRackCapabilitiesResponse + (*RackManagerForgeRequest)(nil), // 668: forge.RackManagerForgeRequest + (*RackManagerForgeResponse)(nil), // 669: forge.RackManagerForgeResponse + (*MachineNVLinkInfo)(nil), // 670: forge.MachineNVLinkInfo + (*UpdateMachineNvLinkInfoRequest)(nil), // 671: forge.UpdateMachineNvLinkInfoRequest + (*NVLinkGpu)(nil), // 672: forge.NVLinkGpu + (*MachineNVLinkStatusObservation)(nil), // 673: forge.MachineNVLinkStatusObservation + (*MachineNVLinkGpuStatusObservation)(nil), // 674: forge.MachineNVLinkGpuStatusObservation + (*NmxmBrowseRequest)(nil), // 675: forge.NmxmBrowseRequest + (*NmxmBrowseResponse)(nil), // 676: forge.NmxmBrowseResponse + (*NVLinkPartition)(nil), // 677: forge.NVLinkPartition + (*NVLinkPartitionList)(nil), // 678: forge.NVLinkPartitionList + (*NVLinkPartitionSearchConfig)(nil), // 679: forge.NVLinkPartitionSearchConfig + (*NVLinkPartitionQuery)(nil), // 680: forge.NVLinkPartitionQuery + (*NVLinkPartitionSearchFilter)(nil), // 681: forge.NVLinkPartitionSearchFilter + (*NVLinkPartitionsByIdsRequest)(nil), // 682: forge.NVLinkPartitionsByIdsRequest + (*NVLinkPartitionIdList)(nil), // 683: forge.NVLinkPartitionIdList + (*NVLinkFabricSearchFilter)(nil), // 684: forge.NVLinkFabricSearchFilter + (*NVLinkLogicalPartitionConfig)(nil), // 685: forge.NVLinkLogicalPartitionConfig + (*NVLinkLogicalPartitionStatus)(nil), // 686: forge.NVLinkLogicalPartitionStatus + (*NVLinkLogicalPartition)(nil), // 687: forge.NVLinkLogicalPartition + (*NVLinkLogicalPartitionList)(nil), // 688: forge.NVLinkLogicalPartitionList + (*NVLinkLogicalPartitionCreationRequest)(nil), // 689: forge.NVLinkLogicalPartitionCreationRequest + (*NVLinkLogicalPartitionDeletionRequest)(nil), // 690: forge.NVLinkLogicalPartitionDeletionRequest + (*NVLinkLogicalPartitionDeletionResult)(nil), // 691: forge.NVLinkLogicalPartitionDeletionResult + (*NVLinkLogicalPartitionSearchFilter)(nil), // 692: forge.NVLinkLogicalPartitionSearchFilter + (*NVLinkLogicalPartitionsByIdsRequest)(nil), // 693: forge.NVLinkLogicalPartitionsByIdsRequest + (*NVLinkLogicalPartitionIdList)(nil), // 694: forge.NVLinkLogicalPartitionIdList + (*NVLinkLogicalPartitionUpdateRequest)(nil), // 695: forge.NVLinkLogicalPartitionUpdateRequest + (*NVLinkLogicalPartitionUpdateResult)(nil), // 696: forge.NVLinkLogicalPartitionUpdateResult + (*CreateBmcUserRequest)(nil), // 697: forge.CreateBmcUserRequest + (*CreateBmcUserResponse)(nil), // 698: forge.CreateBmcUserResponse + (*DeleteBmcUserRequest)(nil), // 699: forge.DeleteBmcUserRequest + (*DeleteBmcUserResponse)(nil), // 700: forge.DeleteBmcUserResponse + (*SetFirmwareUpdateTimeWindowRequest)(nil), // 701: forge.SetFirmwareUpdateTimeWindowRequest + (*SetFirmwareUpdateTimeWindowResponse)(nil), // 702: forge.SetFirmwareUpdateTimeWindowResponse + (*ListHostFirmwareRequest)(nil), // 703: forge.ListHostFirmwareRequest + (*ListHostFirmwareResponse)(nil), // 704: forge.ListHostFirmwareResponse + (*AvailableHostFirmware)(nil), // 705: forge.AvailableHostFirmware + (*TrimTableRequest)(nil), // 706: forge.TrimTableRequest + (*TrimTableResponse)(nil), // 707: forge.TrimTableResponse + (*CreateRemediationRequest)(nil), // 708: forge.CreateRemediationRequest + (*CreateRemediationResponse)(nil), // 709: forge.CreateRemediationResponse + (*RemediationIdList)(nil), // 710: forge.RemediationIdList + (*RemediationList)(nil), // 711: forge.RemediationList + (*Remediation)(nil), // 712: forge.Remediation + (*ApproveRemediationRequest)(nil), // 713: forge.ApproveRemediationRequest + (*RevokeRemediationRequest)(nil), // 714: forge.RevokeRemediationRequest + (*EnableRemediationRequest)(nil), // 715: forge.EnableRemediationRequest + (*DisableRemediationRequest)(nil), // 716: forge.DisableRemediationRequest + (*FindAppliedRemediationIdsRequest)(nil), // 717: forge.FindAppliedRemediationIdsRequest + (*AppliedRemediationIdList)(nil), // 718: forge.AppliedRemediationIdList + (*FindAppliedRemediationsRequest)(nil), // 719: forge.FindAppliedRemediationsRequest + (*AppliedRemediation)(nil), // 720: forge.AppliedRemediation + (*AppliedRemediationList)(nil), // 721: forge.AppliedRemediationList + (*GetNextRemediationForMachineRequest)(nil), // 722: forge.GetNextRemediationForMachineRequest + (*GetNextRemediationForMachineResponse)(nil), // 723: forge.GetNextRemediationForMachineResponse + (*RemediationAppliedRequest)(nil), // 724: forge.RemediationAppliedRequest + (*RemediationApplicationStatus)(nil), // 725: forge.RemediationApplicationStatus + (*SetPrimaryDpuRequest)(nil), // 726: forge.SetPrimaryDpuRequest + (*UsernamePassword)(nil), // 727: forge.UsernamePassword + (*SessionToken)(nil), // 728: forge.SessionToken + (*DpuExtensionServiceCredential)(nil), // 729: forge.DpuExtensionServiceCredential + (*DpuExtensionServiceVersionInfo)(nil), // 730: forge.DpuExtensionServiceVersionInfo + (*DpuExtensionService)(nil), // 731: forge.DpuExtensionService + (*CreateDpuExtensionServiceRequest)(nil), // 732: forge.CreateDpuExtensionServiceRequest + (*UpdateDpuExtensionServiceRequest)(nil), // 733: forge.UpdateDpuExtensionServiceRequest + (*DeleteDpuExtensionServiceRequest)(nil), // 734: forge.DeleteDpuExtensionServiceRequest + (*DeleteDpuExtensionServiceResponse)(nil), // 735: forge.DeleteDpuExtensionServiceResponse + (*DpuExtensionServiceSearchFilter)(nil), // 736: forge.DpuExtensionServiceSearchFilter + (*DpuExtensionServiceIdList)(nil), // 737: forge.DpuExtensionServiceIdList + (*DpuExtensionServicesByIdsRequest)(nil), // 738: forge.DpuExtensionServicesByIdsRequest + (*DpuExtensionServiceList)(nil), // 739: forge.DpuExtensionServiceList + (*GetDpuExtensionServiceVersionsInfoRequest)(nil), // 740: forge.GetDpuExtensionServiceVersionsInfoRequest + (*DpuExtensionServiceVersionInfoList)(nil), // 741: forge.DpuExtensionServiceVersionInfoList + (*FindInstancesByDpuExtensionServiceRequest)(nil), // 742: forge.FindInstancesByDpuExtensionServiceRequest + (*FindInstancesByDpuExtensionServiceResponse)(nil), // 743: forge.FindInstancesByDpuExtensionServiceResponse + (*InstanceDpuExtensionServiceInfo)(nil), // 744: forge.InstanceDpuExtensionServiceInfo + (*DpuExtensionServiceObservabilityConfigPrometheus)(nil), // 745: forge.DpuExtensionServiceObservabilityConfigPrometheus + (*DpuExtensionServiceObservabilityConfigLogging)(nil), // 746: forge.DpuExtensionServiceObservabilityConfigLogging + (*DpuExtensionServiceObservabilityConfig)(nil), // 747: forge.DpuExtensionServiceObservabilityConfig + (*DpuExtensionServiceObservability)(nil), // 748: forge.DpuExtensionServiceObservability + (*ScoutStreamApiBoundMessage)(nil), // 749: forge.ScoutStreamApiBoundMessage + (*ScoutStreamScoutBoundMessage)(nil), // 750: forge.ScoutStreamScoutBoundMessage + (*ScoutStreamInitRequest)(nil), // 751: forge.ScoutStreamInitRequest + (*ScoutStreamShowConnectionsRequest)(nil), // 752: forge.ScoutStreamShowConnectionsRequest + (*ScoutStreamShowConnectionsResponse)(nil), // 753: forge.ScoutStreamShowConnectionsResponse + (*ScoutStreamDisconnectRequest)(nil), // 754: forge.ScoutStreamDisconnectRequest + (*ScoutStreamDisconnectResponse)(nil), // 755: forge.ScoutStreamDisconnectResponse + (*ScoutStreamAdminPingRequest)(nil), // 756: forge.ScoutStreamAdminPingRequest + (*ScoutStreamAdminPingResponse)(nil), // 757: forge.ScoutStreamAdminPingResponse + (*ScoutStreamAgentPingRequest)(nil), // 758: forge.ScoutStreamAgentPingRequest + (*ScoutStreamAgentPingResponse)(nil), // 759: forge.ScoutStreamAgentPingResponse + (*ScoutStreamConnectionInfo)(nil), // 760: forge.ScoutStreamConnectionInfo + (*ScoutStreamError)(nil), // 761: forge.ScoutStreamError + (*RoutingProfile)(nil), // 762: forge.RoutingProfile + (*DomainLegacy)(nil), // 763: forge.DomainLegacy + (*DomainListLegacy)(nil), // 764: forge.DomainListLegacy + (*DomainDeletionLegacy)(nil), // 765: forge.DomainDeletionLegacy + (*DomainDeletionResultLegacy)(nil), // 766: forge.DomainDeletionResultLegacy + (*DomainSearchQueryLegacy)(nil), // 767: forge.DomainSearchQueryLegacy + (*PxeDomain)(nil), // 768: forge.PxeDomain + (*MachinePositionQuery)(nil), // 769: forge.MachinePositionQuery + (*MachinePositionInfoList)(nil), // 770: forge.MachinePositionInfoList + (*MachinePositionInfo)(nil), // 771: forge.MachinePositionInfo + (*RackFirmware)(nil), // 772: forge.RackFirmware + (*FirmwareComponentInfo)(nil), // 773: forge.FirmwareComponentInfo + (*RackFirmwareCreateRequest)(nil), // 774: forge.RackFirmwareCreateRequest + (*RackFirmwareGetRequest)(nil), // 775: forge.RackFirmwareGetRequest + (*RackFirmwareListRequest)(nil), // 776: forge.RackFirmwareListRequest + (*RackFirmwareList)(nil), // 777: forge.RackFirmwareList + (*RackFirmwareDeleteRequest)(nil), // 778: forge.RackFirmwareDeleteRequest + (*RackFirmwareApplyRequest)(nil), // 779: forge.RackFirmwareApplyRequest + (*RackFirmwareApplyResponse)(nil), // 780: forge.RackFirmwareApplyResponse + (*DeviceUpdateResult)(nil), // 781: forge.DeviceUpdateResult + (*NodeJobInfo)(nil), // 782: forge.NodeJobInfo + (*RackFirmwareJobStatusRequest)(nil), // 783: forge.RackFirmwareJobStatusRequest + (*RackFirmwareJobStatusResponse)(nil), // 784: forge.RackFirmwareJobStatusResponse + (*RackFirmwareHistoryRequest)(nil), // 785: forge.RackFirmwareHistoryRequest + (*RackFirmwareHistoryResponse)(nil), // 786: forge.RackFirmwareHistoryResponse + (*RackFirmwareHistoryRecords)(nil), // 787: forge.RackFirmwareHistoryRecords + (*RackFirmwareHistoryRecord)(nil), // 788: forge.RackFirmwareHistoryRecord + (*ModifyDPFStateRequest)(nil), // 789: forge.ModifyDPFStateRequest + (*DPFStateResponse)(nil), // 790: forge.DPFStateResponse + (*GetDPFStateRequest)(nil), // 791: forge.GetDPFStateRequest + (*ComponentResult)(nil), // 792: forge.ComponentResult + (*SwitchIdList)(nil), // 793: forge.SwitchIdList + (*PowerShelfIdList)(nil), // 794: forge.PowerShelfIdList + (*GetComponentInventoryRequest)(nil), // 795: forge.GetComponentInventoryRequest + (*ComponentInventoryEntry)(nil), // 796: forge.ComponentInventoryEntry + (*GetComponentInventoryResponse)(nil), // 797: forge.GetComponentInventoryResponse + (*ComponentPowerControlRequest)(nil), // 798: forge.ComponentPowerControlRequest + (*ComponentPowerControlResponse)(nil), // 799: forge.ComponentPowerControlResponse + (*FirmwareUpdateStatus)(nil), // 800: forge.FirmwareUpdateStatus + (*UpdateComputeTrayFirmwareTarget)(nil), // 801: forge.UpdateComputeTrayFirmwareTarget + (*UpdateSwitchFirmwareTarget)(nil), // 802: forge.UpdateSwitchFirmwareTarget + (*UpdatePowerShelfFirmwareTarget)(nil), // 803: forge.UpdatePowerShelfFirmwareTarget + (*UpdateComponentFirmwareRequest)(nil), // 804: forge.UpdateComponentFirmwareRequest + (*UpdateComponentFirmwareResponse)(nil), // 805: forge.UpdateComponentFirmwareResponse + (*GetComponentFirmwareStatusRequest)(nil), // 806: forge.GetComponentFirmwareStatusRequest + (*GetComponentFirmwareStatusResponse)(nil), // 807: forge.GetComponentFirmwareStatusResponse + (*ListComponentFirmwareVersionsRequest)(nil), // 808: forge.ListComponentFirmwareVersionsRequest + (*DeviceFirmwareVersions)(nil), // 809: forge.DeviceFirmwareVersions + (*ListComponentFirmwareVersionsResponse)(nil), // 810: forge.ListComponentFirmwareVersionsResponse + (*AdminForceDeleteSwitchRequest)(nil), // 811: forge.AdminForceDeleteSwitchRequest + (*AdminForceDeleteSwitchResponse)(nil), // 812: forge.AdminForceDeleteSwitchResponse + (*AdminForceDeletePowerShelfRequest)(nil), // 813: forge.AdminForceDeletePowerShelfRequest + (*AdminForceDeletePowerShelfResponse)(nil), // 814: forge.AdminForceDeletePowerShelfResponse + (*OperatingSystem)(nil), // 815: forge.OperatingSystem + (*CreateOperatingSystemRequest)(nil), // 816: forge.CreateOperatingSystemRequest + (*IpxeTemplateParameters)(nil), // 817: forge.IpxeTemplateParameters + (*IpxeTemplateArtifacts)(nil), // 818: forge.IpxeTemplateArtifacts + (*UpdateOperatingSystemRequest)(nil), // 819: forge.UpdateOperatingSystemRequest + (*DeleteOperatingSystemRequest)(nil), // 820: forge.DeleteOperatingSystemRequest + (*DeleteOperatingSystemResponse)(nil), // 821: forge.DeleteOperatingSystemResponse + (*OperatingSystemSearchFilter)(nil), // 822: forge.OperatingSystemSearchFilter + (*OperatingSystemIdList)(nil), // 823: forge.OperatingSystemIdList + (*OperatingSystemsByIdsRequest)(nil), // 824: forge.OperatingSystemsByIdsRequest + (*OperatingSystemList)(nil), // 825: forge.OperatingSystemList + (*GetOperatingSystemCachableIpxeTemplateArtifactsRequest)(nil), // 826: forge.GetOperatingSystemCachableIpxeTemplateArtifactsRequest + (*IpxeTemplateArtifactList)(nil), // 827: forge.IpxeTemplateArtifactList + (*IpxeTemplateArtifactUpdateRequest)(nil), // 828: forge.IpxeTemplateArtifactUpdateRequest + (*UpdateOperatingSystemIpxeTemplateArtifactRequest)(nil), // 829: forge.UpdateOperatingSystemIpxeTemplateArtifactRequest + (*AttestationResponse_AttestationDeviceData)(nil), // 830: forge.AttestationResponse.AttestationDeviceData + (*AttestationResponse_AttestationMachineData)(nil), // 831: forge.AttestationResponse.AttestationMachineData + nil, // 832: forge.RuntimeConfig.DpuNicFirmwareUpdateVersionEntry + (*DNSMessage_DNSQuestion)(nil), // 833: forge.DNSMessage.DNSQuestion + (*DNSMessage_DNSResponse)(nil), // 834: forge.DNSMessage.DNSResponse + (*DNSMessage_DNSResponse_DNSRR)(nil), // 835: forge.DNSMessage.DNSResponse.DNSRR + nil, // 836: forge.PowerShelfStateHistories.HistoriesEntry + nil, // 837: forge.FabricManagerConfig.ConfigMapEntry + nil, // 838: forge.SwitchStateHistories.HistoriesEntry + nil, // 839: forge.MachineStateHistories.HistoriesEntry + nil, // 840: forge.HealthHistories.HistoriesEntry + (*MachineCredentialsUpdateRequest_Credentials)(nil), // 841: forge.MachineCredentialsUpdateRequest.Credentials + (*ForgeAgentControlResponse_ForgeAgentControlExtraInfo)(nil), // 842: forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo + (*ForgeAgentControlResponse_ForgeAgentControlExtraInfo_KeyValuePair)(nil), // 843: forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo.KeyValuePair + (*MachineCleanupInfo_CleanupStepResult)(nil), // 844: forge.MachineCleanupInfo.CleanupStepResult + (*DpuReprovisioningListResponse_DpuReprovisioningListItem)(nil), // 845: forge.DpuReprovisioningListResponse.DpuReprovisioningListItem + (*HostReprovisioningListResponse_HostReprovisioningListItem)(nil), // 846: forge.HostReprovisioningListResponse.HostReprovisioningListItem + (*MachineValidationTestUpdateRequest_Payload)(nil), // 847: forge.MachineValidationTestUpdateRequest.Payload + nil, // 848: forge.RedfishBrowseResponse.HeadersEntry + nil, // 849: forge.RedfishActionResult.HeadersEntry + nil, // 850: forge.UfmBrowseResponse.HeadersEntry + nil, // 851: forge.DesiredFirmwareVersionEntry.ComponentVersionsEntry + nil, // 852: forge.RackStateHistories.HistoriesEntry + nil, // 853: forge.NmxmBrowseResponse.HeadersEntry + nil, // 854: forge.RackFirmwareHistoryResponse.HistoriesEntry + (*DPFStateResponse_DPFState)(nil), // 855: forge.DPFStateResponse.DPFState + (*MachineId)(nil), // 856: common.MachineId + (*timestamppb.Timestamp)(nil), // 857: google.protobuf.Timestamp + (*VpcId)(nil), // 858: common.VpcId + (*NVLinkLogicalPartitionId)(nil), // 859: common.NVLinkLogicalPartitionId + (*VpcPrefixId)(nil), // 860: common.VpcPrefixId + (*VpcPeeringId)(nil), // 861: common.VpcPeeringId + (*IBPartitionId)(nil), // 862: common.IBPartitionId + (*PowerShelfId)(nil), // 863: common.PowerShelfId + (*RackId)(nil), // 864: common.RackId + (*UUID)(nil), // 865: common.UUID + (*SwitchId)(nil), // 866: common.SwitchId + (*NetworkSegmentId)(nil), // 867: common.NetworkSegmentId + (*DomainId)(nil), // 868: common.DomainId + (*NetworkPrefixId)(nil), // 869: common.NetworkPrefixId + (*InstanceId)(nil), // 870: common.InstanceId + (*IpxeTemplateId)(nil), // 871: common.IpxeTemplateId + (*OperatingSystemId)(nil), // 872: common.OperatingSystemId + (*NVLinkDomainId)(nil), // 873: common.NVLinkDomainId + (*HealthReport)(nil), // 874: health.HealthReport + (*MachineInterfaceId)(nil), // 875: common.MachineInterfaceId + (*DiscoveryInfo)(nil), // 876: machine_discovery.DiscoveryInfo + (*durationpb.Duration)(nil), // 877: google.protobuf.Duration + (*StringList)(nil), // 878: common.StringList + (*Gpu)(nil), // 879: machine_discovery.Gpu + (*RouteTarget)(nil), // 880: common.RouteTarget + (*Uint32List)(nil), // 881: common.Uint32List + (*DpaInterfaceId)(nil), // 882: common.DpaInterfaceId + (*ComputeAllocationId)(nil), // 883: common.ComputeAllocationId + (*NVLinkPartitionId)(nil), // 884: common.NVLinkPartitionId + (*RemediationId)(nil), // 885: common.RemediationId + (*MlxDeviceLockdownResponse)(nil), // 886: mlx_device.MlxDeviceLockdownResponse + (*MlxDeviceProfileSyncResponse)(nil), // 887: mlx_device.MlxDeviceProfileSyncResponse + (*MlxDeviceProfileCompareResponse)(nil), // 888: mlx_device.MlxDeviceProfileCompareResponse + (*MlxDeviceInfoDeviceResponse)(nil), // 889: mlx_device.MlxDeviceInfoDeviceResponse + (*MlxDeviceInfoReportResponse)(nil), // 890: mlx_device.MlxDeviceInfoReportResponse + (*MlxDeviceRegistryListResponse)(nil), // 891: mlx_device.MlxDeviceRegistryListResponse + (*MlxDeviceRegistryShowResponse)(nil), // 892: mlx_device.MlxDeviceRegistryShowResponse + (*MlxDeviceConfigQueryResponse)(nil), // 893: mlx_device.MlxDeviceConfigQueryResponse + (*MlxDeviceConfigSetResponse)(nil), // 894: mlx_device.MlxDeviceConfigSetResponse + (*MlxDeviceConfigSyncResponse)(nil), // 895: mlx_device.MlxDeviceConfigSyncResponse + (*MlxDeviceConfigCompareResponse)(nil), // 896: mlx_device.MlxDeviceConfigCompareResponse + (*MlxDeviceLockdownLockRequest)(nil), // 897: mlx_device.MlxDeviceLockdownLockRequest + (*MlxDeviceLockdownUnlockRequest)(nil), // 898: mlx_device.MlxDeviceLockdownUnlockRequest + (*MlxDeviceLockdownStatusRequest)(nil), // 899: mlx_device.MlxDeviceLockdownStatusRequest + (*MlxDeviceProfileSyncRequest)(nil), // 900: mlx_device.MlxDeviceProfileSyncRequest + (*MlxDeviceProfileCompareRequest)(nil), // 901: mlx_device.MlxDeviceProfileCompareRequest + (*MlxDeviceInfoDeviceRequest)(nil), // 902: mlx_device.MlxDeviceInfoDeviceRequest + (*MlxDeviceInfoReportRequest)(nil), // 903: mlx_device.MlxDeviceInfoReportRequest + (*MlxDeviceRegistryListRequest)(nil), // 904: mlx_device.MlxDeviceRegistryListRequest + (*MlxDeviceRegistryShowRequest)(nil), // 905: mlx_device.MlxDeviceRegistryShowRequest + (*MlxDeviceConfigQueryRequest)(nil), // 906: mlx_device.MlxDeviceConfigQueryRequest + (*MlxDeviceConfigSetRequest)(nil), // 907: mlx_device.MlxDeviceConfigSetRequest + (*MlxDeviceConfigSyncRequest)(nil), // 908: mlx_device.MlxDeviceConfigSyncRequest + (*MlxDeviceConfigCompareRequest)(nil), // 909: mlx_device.MlxDeviceConfigCompareRequest + (*Domain)(nil), // 910: dns.Domain + (*MachineIdList)(nil), // 911: common.MachineIdList + (*EndpointExplorationReport)(nil), // 912: site_explorer.EndpointExplorationReport + (SystemPowerControl)(0), // 913: common.SystemPowerControl + (*CreateDomainRequest)(nil), // 914: dns.CreateDomainRequest + (*UpdateDomainRequest)(nil), // 915: dns.UpdateDomainRequest + (*DomainDeletionRequest)(nil), // 916: dns.DomainDeletionRequest + (*DomainSearchQuery)(nil), // 917: dns.DomainSearchQuery + (*DnsResourceRecordLookupRequest)(nil), // 918: dns.DnsResourceRecordLookupRequest + (*GetAllDomainsRequest)(nil), // 919: dns.GetAllDomainsRequest + (*DomainMetadataRequest)(nil), // 920: dns.DomainMetadataRequest + (*ExploredEndpointSearchFilter)(nil), // 921: site_explorer.ExploredEndpointSearchFilter + (*ExploredEndpointsByIdsRequest)(nil), // 922: site_explorer.ExploredEndpointsByIdsRequest + (*ExploredManagedHostSearchFilter)(nil), // 923: site_explorer.ExploredManagedHostSearchFilter + (*ExploredManagedHostsByIdsRequest)(nil), // 924: site_explorer.ExploredManagedHostsByIdsRequest + (*emptypb.Empty)(nil), // 925: google.protobuf.Empty + (*CreateMeasurementBundleRequest)(nil), // 926: measured_boot.CreateMeasurementBundleRequest + (*DeleteMeasurementBundleRequest)(nil), // 927: measured_boot.DeleteMeasurementBundleRequest + (*RenameMeasurementBundleRequest)(nil), // 928: measured_boot.RenameMeasurementBundleRequest + (*UpdateMeasurementBundleRequest)(nil), // 929: measured_boot.UpdateMeasurementBundleRequest + (*ShowMeasurementBundleRequest)(nil), // 930: measured_boot.ShowMeasurementBundleRequest + (*ShowMeasurementBundlesRequest)(nil), // 931: measured_boot.ShowMeasurementBundlesRequest + (*ListMeasurementBundlesRequest)(nil), // 932: measured_boot.ListMeasurementBundlesRequest + (*ListMeasurementBundleMachinesRequest)(nil), // 933: measured_boot.ListMeasurementBundleMachinesRequest + (*FindClosestBundleMatchRequest)(nil), // 934: measured_boot.FindClosestBundleMatchRequest + (*DeleteMeasurementJournalRequest)(nil), // 935: measured_boot.DeleteMeasurementJournalRequest + (*ShowMeasurementJournalRequest)(nil), // 936: measured_boot.ShowMeasurementJournalRequest + (*ShowMeasurementJournalsRequest)(nil), // 937: measured_boot.ShowMeasurementJournalsRequest + (*ListMeasurementJournalRequest)(nil), // 938: measured_boot.ListMeasurementJournalRequest + (*AttestCandidateMachineRequest)(nil), // 939: measured_boot.AttestCandidateMachineRequest + (*ShowCandidateMachineRequest)(nil), // 940: measured_boot.ShowCandidateMachineRequest + (*ShowCandidateMachinesRequest)(nil), // 941: measured_boot.ShowCandidateMachinesRequest + (*ListCandidateMachinesRequest)(nil), // 942: measured_boot.ListCandidateMachinesRequest + (*CreateMeasurementSystemProfileRequest)(nil), // 943: measured_boot.CreateMeasurementSystemProfileRequest + (*DeleteMeasurementSystemProfileRequest)(nil), // 944: measured_boot.DeleteMeasurementSystemProfileRequest + (*RenameMeasurementSystemProfileRequest)(nil), // 945: measured_boot.RenameMeasurementSystemProfileRequest + (*ShowMeasurementSystemProfileRequest)(nil), // 946: measured_boot.ShowMeasurementSystemProfileRequest + (*ShowMeasurementSystemProfilesRequest)(nil), // 947: measured_boot.ShowMeasurementSystemProfilesRequest + (*ListMeasurementSystemProfilesRequest)(nil), // 948: measured_boot.ListMeasurementSystemProfilesRequest + (*ListMeasurementSystemProfileBundlesRequest)(nil), // 949: measured_boot.ListMeasurementSystemProfileBundlesRequest + (*ListMeasurementSystemProfileMachinesRequest)(nil), // 950: measured_boot.ListMeasurementSystemProfileMachinesRequest + (*CreateMeasurementReportRequest)(nil), // 951: measured_boot.CreateMeasurementReportRequest + (*DeleteMeasurementReportRequest)(nil), // 952: measured_boot.DeleteMeasurementReportRequest + (*PromoteMeasurementReportRequest)(nil), // 953: measured_boot.PromoteMeasurementReportRequest + (*RevokeMeasurementReportRequest)(nil), // 954: measured_boot.RevokeMeasurementReportRequest + (*ShowMeasurementReportForIdRequest)(nil), // 955: measured_boot.ShowMeasurementReportForIdRequest + (*ShowMeasurementReportsForMachineRequest)(nil), // 956: measured_boot.ShowMeasurementReportsForMachineRequest + (*ShowMeasurementReportsRequest)(nil), // 957: measured_boot.ShowMeasurementReportsRequest + (*ListMeasurementReportRequest)(nil), // 958: measured_boot.ListMeasurementReportRequest + (*MatchMeasurementReportRequest)(nil), // 959: measured_boot.MatchMeasurementReportRequest + (*ImportSiteMeasurementsRequest)(nil), // 960: measured_boot.ImportSiteMeasurementsRequest + (*ExportSiteMeasurementsRequest)(nil), // 961: measured_boot.ExportSiteMeasurementsRequest + (*AddMeasurementTrustedMachineRequest)(nil), // 962: measured_boot.AddMeasurementTrustedMachineRequest + (*RemoveMeasurementTrustedMachineRequest)(nil), // 963: measured_boot.RemoveMeasurementTrustedMachineRequest + (*AddMeasurementTrustedProfileRequest)(nil), // 964: measured_boot.AddMeasurementTrustedProfileRequest + (*RemoveMeasurementTrustedProfileRequest)(nil), // 965: measured_boot.RemoveMeasurementTrustedProfileRequest + (*ListMeasurementTrustedMachinesRequest)(nil), // 966: measured_boot.ListMeasurementTrustedMachinesRequest + (*ListMeasurementTrustedProfilesRequest)(nil), // 967: measured_boot.ListMeasurementTrustedProfilesRequest + (*ListAttestationSummaryRequest)(nil), // 968: measured_boot.ListAttestationSummaryRequest + (*PublishMlxDeviceReportRequest)(nil), // 969: mlx_device.PublishMlxDeviceReportRequest + (*PublishMlxObservationReportRequest)(nil), // 970: mlx_device.PublishMlxObservationReportRequest + (*MlxAdminProfileSyncRequest)(nil), // 971: mlx_device.MlxAdminProfileSyncRequest + (*MlxAdminProfileShowRequest)(nil), // 972: mlx_device.MlxAdminProfileShowRequest + (*MlxAdminProfileCompareRequest)(nil), // 973: mlx_device.MlxAdminProfileCompareRequest + (*MlxAdminProfileListRequest)(nil), // 974: mlx_device.MlxAdminProfileListRequest + (*MlxAdminLockdownLockRequest)(nil), // 975: mlx_device.MlxAdminLockdownLockRequest + (*MlxAdminLockdownUnlockRequest)(nil), // 976: mlx_device.MlxAdminLockdownUnlockRequest + (*MlxAdminLockdownStatusRequest)(nil), // 977: mlx_device.MlxAdminLockdownStatusRequest + (*MlxAdminDeviceInfoRequest)(nil), // 978: mlx_device.MlxAdminDeviceInfoRequest + (*MlxAdminDeviceReportRequest)(nil), // 979: mlx_device.MlxAdminDeviceReportRequest + (*MlxAdminRegistryListRequest)(nil), // 980: mlx_device.MlxAdminRegistryListRequest + (*MlxAdminRegistryShowRequest)(nil), // 981: mlx_device.MlxAdminRegistryShowRequest + (*MlxAdminConfigQueryRequest)(nil), // 982: mlx_device.MlxAdminConfigQueryRequest + (*MlxAdminConfigSetRequest)(nil), // 983: mlx_device.MlxAdminConfigSetRequest + (*MlxAdminConfigSyncRequest)(nil), // 984: mlx_device.MlxAdminConfigSyncRequest + (*MlxAdminConfigCompareRequest)(nil), // 985: mlx_device.MlxAdminConfigCompareRequest + (*DomainDeletionResult)(nil), // 986: dns.DomainDeletionResult + (*DomainList)(nil), // 987: dns.DomainList + (*DnsResourceRecordLookupResponse)(nil), // 988: dns.DnsResourceRecordLookupResponse + (*GetAllDomainsResponse)(nil), // 989: dns.GetAllDomainsResponse + (*DomainMetadataResponse)(nil), // 990: dns.DomainMetadataResponse + (*SiteExplorationReport)(nil), // 991: site_explorer.SiteExplorationReport + (*ExploredEndpointIdList)(nil), // 992: site_explorer.ExploredEndpointIdList + (*ExploredEndpointList)(nil), // 993: site_explorer.ExploredEndpointList + (*ExploredManagedHostIdList)(nil), // 994: site_explorer.ExploredManagedHostIdList + (*ExploredManagedHostList)(nil), // 995: site_explorer.ExploredManagedHostList + (*CreateMeasurementBundleResponse)(nil), // 996: measured_boot.CreateMeasurementBundleResponse + (*DeleteMeasurementBundleResponse)(nil), // 997: measured_boot.DeleteMeasurementBundleResponse + (*RenameMeasurementBundleResponse)(nil), // 998: measured_boot.RenameMeasurementBundleResponse + (*UpdateMeasurementBundleResponse)(nil), // 999: measured_boot.UpdateMeasurementBundleResponse + (*ShowMeasurementBundleResponse)(nil), // 1000: measured_boot.ShowMeasurementBundleResponse + (*ShowMeasurementBundlesResponse)(nil), // 1001: measured_boot.ShowMeasurementBundlesResponse + (*ListMeasurementBundlesResponse)(nil), // 1002: measured_boot.ListMeasurementBundlesResponse + (*ListMeasurementBundleMachinesResponse)(nil), // 1003: measured_boot.ListMeasurementBundleMachinesResponse + (*DeleteMeasurementJournalResponse)(nil), // 1004: measured_boot.DeleteMeasurementJournalResponse + (*ShowMeasurementJournalResponse)(nil), // 1005: measured_boot.ShowMeasurementJournalResponse + (*ShowMeasurementJournalsResponse)(nil), // 1006: measured_boot.ShowMeasurementJournalsResponse + (*ListMeasurementJournalResponse)(nil), // 1007: measured_boot.ListMeasurementJournalResponse + (*AttestCandidateMachineResponse)(nil), // 1008: measured_boot.AttestCandidateMachineResponse + (*ShowCandidateMachineResponse)(nil), // 1009: measured_boot.ShowCandidateMachineResponse + (*ShowCandidateMachinesResponse)(nil), // 1010: measured_boot.ShowCandidateMachinesResponse + (*ListCandidateMachinesResponse)(nil), // 1011: measured_boot.ListCandidateMachinesResponse + (*CreateMeasurementSystemProfileResponse)(nil), // 1012: measured_boot.CreateMeasurementSystemProfileResponse + (*DeleteMeasurementSystemProfileResponse)(nil), // 1013: measured_boot.DeleteMeasurementSystemProfileResponse + (*RenameMeasurementSystemProfileResponse)(nil), // 1014: measured_boot.RenameMeasurementSystemProfileResponse + (*ShowMeasurementSystemProfileResponse)(nil), // 1015: measured_boot.ShowMeasurementSystemProfileResponse + (*ShowMeasurementSystemProfilesResponse)(nil), // 1016: measured_boot.ShowMeasurementSystemProfilesResponse + (*ListMeasurementSystemProfilesResponse)(nil), // 1017: measured_boot.ListMeasurementSystemProfilesResponse + (*ListMeasurementSystemProfileBundlesResponse)(nil), // 1018: measured_boot.ListMeasurementSystemProfileBundlesResponse + (*ListMeasurementSystemProfileMachinesResponse)(nil), // 1019: measured_boot.ListMeasurementSystemProfileMachinesResponse + (*CreateMeasurementReportResponse)(nil), // 1020: measured_boot.CreateMeasurementReportResponse + (*DeleteMeasurementReportResponse)(nil), // 1021: measured_boot.DeleteMeasurementReportResponse + (*PromoteMeasurementReportResponse)(nil), // 1022: measured_boot.PromoteMeasurementReportResponse + (*RevokeMeasurementReportResponse)(nil), // 1023: measured_boot.RevokeMeasurementReportResponse + (*ShowMeasurementReportForIdResponse)(nil), // 1024: measured_boot.ShowMeasurementReportForIdResponse + (*ShowMeasurementReportsForMachineResponse)(nil), // 1025: measured_boot.ShowMeasurementReportsForMachineResponse + (*ShowMeasurementReportsResponse)(nil), // 1026: measured_boot.ShowMeasurementReportsResponse + (*ListMeasurementReportResponse)(nil), // 1027: measured_boot.ListMeasurementReportResponse + (*MatchMeasurementReportResponse)(nil), // 1028: measured_boot.MatchMeasurementReportResponse + (*ImportSiteMeasurementsResponse)(nil), // 1029: measured_boot.ImportSiteMeasurementsResponse + (*ExportSiteMeasurementsResponse)(nil), // 1030: measured_boot.ExportSiteMeasurementsResponse + (*AddMeasurementTrustedMachineResponse)(nil), // 1031: measured_boot.AddMeasurementTrustedMachineResponse + (*RemoveMeasurementTrustedMachineResponse)(nil), // 1032: measured_boot.RemoveMeasurementTrustedMachineResponse + (*AddMeasurementTrustedProfileResponse)(nil), // 1033: measured_boot.AddMeasurementTrustedProfileResponse + (*RemoveMeasurementTrustedProfileResponse)(nil), // 1034: measured_boot.RemoveMeasurementTrustedProfileResponse + (*ListMeasurementTrustedMachinesResponse)(nil), // 1035: measured_boot.ListMeasurementTrustedMachinesResponse + (*ListMeasurementTrustedProfilesResponse)(nil), // 1036: measured_boot.ListMeasurementTrustedProfilesResponse + (*ListAttestationSummaryResponse)(nil), // 1037: measured_boot.ListAttestationSummaryResponse + (*LockdownStatus)(nil), // 1038: site_explorer.LockdownStatus + (*PublishMlxDeviceReportResponse)(nil), // 1039: mlx_device.PublishMlxDeviceReportResponse + (*PublishMlxObservationReportResponse)(nil), // 1040: mlx_device.PublishMlxObservationReportResponse + (*MlxAdminProfileSyncResponse)(nil), // 1041: mlx_device.MlxAdminProfileSyncResponse + (*MlxAdminProfileShowResponse)(nil), // 1042: mlx_device.MlxAdminProfileShowResponse + (*MlxAdminProfileCompareResponse)(nil), // 1043: mlx_device.MlxAdminProfileCompareResponse + (*MlxAdminProfileListResponse)(nil), // 1044: mlx_device.MlxAdminProfileListResponse + (*MlxAdminLockdownLockResponse)(nil), // 1045: mlx_device.MlxAdminLockdownLockResponse + (*MlxAdminLockdownUnlockResponse)(nil), // 1046: mlx_device.MlxAdminLockdownUnlockResponse + (*MlxAdminLockdownStatusResponse)(nil), // 1047: mlx_device.MlxAdminLockdownStatusResponse + (*MlxAdminDeviceInfoResponse)(nil), // 1048: mlx_device.MlxAdminDeviceInfoResponse + (*MlxAdminDeviceReportResponse)(nil), // 1049: mlx_device.MlxAdminDeviceReportResponse + (*MlxAdminRegistryListResponse)(nil), // 1050: mlx_device.MlxAdminRegistryListResponse + (*MlxAdminRegistryShowResponse)(nil), // 1051: mlx_device.MlxAdminRegistryShowResponse + (*MlxAdminConfigQueryResponse)(nil), // 1052: mlx_device.MlxAdminConfigQueryResponse + (*MlxAdminConfigSetResponse)(nil), // 1053: mlx_device.MlxAdminConfigSetResponse + (*MlxAdminConfigSyncResponse)(nil), // 1054: mlx_device.MlxAdminConfigSyncResponse + (*MlxAdminConfigCompareResponse)(nil), // 1055: mlx_device.MlxAdminConfigCompareResponse } var file_forge_carbide_proto_depIdxs = []int32{ - 822, // 0: forge.AttestationData.machine_id:type_name -> common.MachineId - 822, // 1: forge.AttestationMachineList.machine_ids:type_name -> common.MachineId - 797, // 2: forge.AttestationResponse.machines:type_name -> forge.AttestationResponse.AttestationMachineData - 76, // 3: forge.IdentityConfigRequest.config:type_name -> forge.IdentityConfig - 76, // 4: forge.IdentityConfigResponse.config:type_name -> forge.IdentityConfig - 823, // 5: forge.IdentityConfigResponse.created_at:type_name -> google.protobuf.Timestamp - 823, // 6: forge.IdentityConfigResponse.updated_at:type_name -> google.protobuf.Timestamp - 80, // 7: forge.TokenDelegationResponse.client_secret_basic:type_name -> forge.ClientSecretBasicResponse - 823, // 8: forge.TokenDelegationResponse.created_at:type_name -> google.protobuf.Timestamp - 823, // 9: forge.TokenDelegationResponse.updated_at:type_name -> google.protobuf.Timestamp - 79, // 10: forge.TokenDelegation.client_secret_basic:type_name -> forge.ClientSecretBasic - 83, // 11: forge.TokenDelegationRequest.config:type_name -> forge.TokenDelegation + 856, // 0: forge.AttestationData.machine_id:type_name -> common.MachineId + 856, // 1: forge.AttestationMachineList.machine_ids:type_name -> common.MachineId + 831, // 2: forge.AttestationResponse.machines:type_name -> forge.AttestationResponse.AttestationMachineData + 83, // 3: forge.IdentityConfigRequest.config:type_name -> forge.IdentityConfig + 83, // 4: forge.IdentityConfigResponse.config:type_name -> forge.IdentityConfig + 857, // 5: forge.IdentityConfigResponse.created_at:type_name -> google.protobuf.Timestamp + 857, // 6: forge.IdentityConfigResponse.updated_at:type_name -> google.protobuf.Timestamp + 87, // 7: forge.TokenDelegationResponse.client_secret_basic:type_name -> forge.ClientSecretBasicResponse + 857, // 8: forge.TokenDelegationResponse.created_at:type_name -> google.protobuf.Timestamp + 857, // 9: forge.TokenDelegationResponse.updated_at:type_name -> google.protobuf.Timestamp + 86, // 10: forge.TokenDelegation.client_secret_basic:type_name -> forge.ClientSecretBasic + 90, // 11: forge.TokenDelegationRequest.config:type_name -> forge.TokenDelegation 0, // 12: forge.JwksRequest.kind:type_name -> forge.JwksKind 1, // 13: forge.MachineIngestionStateResponse.machine_ingestion_state:type_name -> forge.MachineIngestionState - 91, // 14: forge.TpmCaAddedCaStatus.id:type_name -> forge.TpmCaCertId - 822, // 15: forge.TpmEkCertStatus.machine_id:type_name -> common.MachineId - 92, // 16: forge.TpmEkCertStatusCollection.tpm_ek_cert_statuses:type_name -> forge.TpmEkCertStatus - 95, // 17: forge.TpmCaCertDetailCollection.tpm_ca_cert_details:type_name -> forge.TpmCaCertDetail - 822, // 18: forge.AttestQuoteRequest.machine_id:type_name -> common.MachineId - 371, // 19: forge.AttestQuoteResponse.machine_certificate:type_name -> forge.MachineCertificate + 98, // 14: forge.TpmCaAddedCaStatus.id:type_name -> forge.TpmCaCertId + 856, // 15: forge.TpmEkCertStatus.machine_id:type_name -> common.MachineId + 99, // 16: forge.TpmEkCertStatusCollection.tpm_ek_cert_statuses:type_name -> forge.TpmEkCertStatus + 102, // 17: forge.TpmCaCertDetailCollection.tpm_ca_cert_details:type_name -> forge.TpmCaCertDetail + 856, // 18: forge.AttestQuoteRequest.machine_id:type_name -> common.MachineId + 381, // 19: forge.AttestQuoteResponse.machine_certificate:type_name -> forge.MachineCertificate 2, // 20: forge.CredentialCreationRequest.credential_type:type_name -> forge.CredentialType 2, // 21: forge.CredentialDeletionRequest.credential_type:type_name -> forge.CredentialType - 106, // 22: forge.BuildInfo.runtime_config:type_name -> forge.RuntimeConfig - 798, // 23: forge.RuntimeConfig.dpu_nic_firmware_update_version:type_name -> forge.RuntimeConfig.DpuNicFirmwareUpdateVersionEntry - 799, // 24: forge.DNSMessage.question:type_name -> forge.DNSMessage.DNSQuestion - 800, // 25: forge.DNSMessage.response:type_name -> forge.DNSMessage.DNSResponse - 824, // 26: forge.VpcSearchQuery.id:type_name -> common.VpcId - 218, // 27: forge.VpcSearchFilter.label:type_name -> forge.Label - 824, // 28: forge.VpcIdList.vpc_ids:type_name -> common.VpcId - 824, // 29: forge.VpcsByIdsRequest.vpc_ids:type_name -> common.VpcId - 824, // 30: forge.Vpc.id:type_name -> common.VpcId - 823, // 31: forge.Vpc.created:type_name -> google.protobuf.Timestamp - 823, // 32: forge.Vpc.updated:type_name -> google.protobuf.Timestamp - 823, // 33: forge.Vpc.deleted:type_name -> google.protobuf.Timestamp + 113, // 22: forge.BuildInfo.runtime_config:type_name -> forge.RuntimeConfig + 832, // 23: forge.RuntimeConfig.dpu_nic_firmware_update_version:type_name -> forge.RuntimeConfig.DpuNicFirmwareUpdateVersionEntry + 833, // 24: forge.DNSMessage.question:type_name -> forge.DNSMessage.DNSQuestion + 834, // 25: forge.DNSMessage.response:type_name -> forge.DNSMessage.DNSResponse + 858, // 26: forge.VpcSearchQuery.id:type_name -> common.VpcId + 225, // 27: forge.VpcSearchFilter.label:type_name -> forge.Label + 858, // 28: forge.VpcIdList.vpc_ids:type_name -> common.VpcId + 858, // 29: forge.VpcsByIdsRequest.vpc_ids:type_name -> common.VpcId + 858, // 30: forge.Vpc.id:type_name -> common.VpcId + 857, // 31: forge.Vpc.created:type_name -> google.protobuf.Timestamp + 857, // 32: forge.Vpc.updated:type_name -> google.protobuf.Timestamp + 857, // 33: forge.Vpc.deleted:type_name -> google.protobuf.Timestamp 3, // 34: forge.Vpc.network_virtualization_type:type_name -> forge.VpcVirtualizationType - 219, // 35: forge.Vpc.metadata:type_name -> forge.Metadata - 825, // 36: forge.Vpc.default_nvlink_logical_partition_id:type_name -> common.NVLinkLogicalPartitionId - 120, // 37: forge.Vpc.status:type_name -> forge.VpcStatus + 226, // 35: forge.Vpc.metadata:type_name -> forge.Metadata + 859, // 36: forge.Vpc.default_nvlink_logical_partition_id:type_name -> common.NVLinkLogicalPartitionId + 127, // 37: forge.Vpc.status:type_name -> forge.VpcStatus 3, // 38: forge.VpcCreationRequest.network_virtualization_type:type_name -> forge.VpcVirtualizationType - 824, // 39: forge.VpcCreationRequest.id:type_name -> common.VpcId - 219, // 40: forge.VpcCreationRequest.metadata:type_name -> forge.Metadata - 825, // 41: forge.VpcCreationRequest.default_nvlink_logical_partition_id:type_name -> common.NVLinkLogicalPartitionId - 824, // 42: forge.VpcUpdateRequest.id:type_name -> common.VpcId - 219, // 43: forge.VpcUpdateRequest.metadata:type_name -> forge.Metadata - 825, // 44: forge.VpcUpdateRequest.default_nvlink_logical_partition_id:type_name -> common.NVLinkLogicalPartitionId - 121, // 45: forge.VpcUpdateResult.vpc:type_name -> forge.Vpc - 824, // 46: forge.VpcUpdateVirtualizationRequest.id:type_name -> common.VpcId - 3, // 47: forge.VpcUpdateVirtualizationRequest.network_virtualization_type:type_name -> forge.VpcVirtualizationType - 824, // 48: forge.VpcDeletionRequest.id:type_name -> common.VpcId - 121, // 49: forge.VpcList.vpcs:type_name -> forge.Vpc - 826, // 50: forge.VpcPrefix.id:type_name -> common.VpcPrefixId - 824, // 51: forge.VpcPrefix.vpc_id:type_name -> common.VpcId - 131, // 52: forge.VpcPrefix.config:type_name -> forge.VpcPrefixConfig - 132, // 53: forge.VpcPrefix.status:type_name -> forge.VpcPrefixStatus - 219, // 54: forge.VpcPrefix.metadata:type_name -> forge.Metadata - 826, // 55: forge.VpcPrefixCreationRequest.id:type_name -> common.VpcPrefixId - 824, // 56: forge.VpcPrefixCreationRequest.vpc_id:type_name -> common.VpcId - 131, // 57: forge.VpcPrefixCreationRequest.config:type_name -> forge.VpcPrefixConfig - 219, // 58: forge.VpcPrefixCreationRequest.metadata:type_name -> forge.Metadata - 824, // 59: forge.VpcPrefixSearchQuery.vpc_id:type_name -> common.VpcId - 826, // 60: forge.VpcPrefixSearchQuery.tenant_prefix_id:type_name -> common.VpcPrefixId - 4, // 61: forge.VpcPrefixSearchQuery.prefix_match_type:type_name -> forge.PrefixMatchType - 826, // 62: forge.VpcPrefixGetRequest.vpc_prefix_ids:type_name -> common.VpcPrefixId - 826, // 63: forge.VpcPrefixIdList.vpc_prefix_ids:type_name -> common.VpcPrefixId - 130, // 64: forge.VpcPrefixList.vpc_prefixes:type_name -> forge.VpcPrefix - 826, // 65: forge.VpcPrefixUpdateRequest.id:type_name -> common.VpcPrefixId - 131, // 66: forge.VpcPrefixUpdateRequest.config:type_name -> forge.VpcPrefixConfig - 219, // 67: forge.VpcPrefixUpdateRequest.metadata:type_name -> forge.Metadata - 826, // 68: forge.VpcPrefixDeletionRequest.id:type_name -> common.VpcPrefixId - 827, // 69: forge.VpcPeering.id:type_name -> common.VpcPeeringId - 824, // 70: forge.VpcPeering.vpc_id:type_name -> common.VpcId - 824, // 71: forge.VpcPeering.peer_vpc_id:type_name -> common.VpcId - 827, // 72: forge.VpcPeeringIdList.vpc_peering_ids:type_name -> common.VpcPeeringId - 141, // 73: forge.VpcPeeringList.vpc_peerings:type_name -> forge.VpcPeering - 824, // 74: forge.VpcPeeringCreationRequest.vpc_id:type_name -> common.VpcId - 824, // 75: forge.VpcPeeringCreationRequest.peer_vpc_id:type_name -> common.VpcId - 827, // 76: forge.VpcPeeringCreationRequest.id:type_name -> common.VpcPeeringId - 824, // 77: forge.VpcPeeringSearchFilter.vpc_id:type_name -> common.VpcId - 827, // 78: forge.VpcPeeringsByIdsRequest.vpc_peering_ids:type_name -> common.VpcPeeringId - 827, // 79: forge.VpcPeeringDeletionRequest.id:type_name -> common.VpcPeeringId - 5, // 80: forge.IBPartitionStatus.state:type_name -> forge.TenantState - 292, // 81: forge.IBPartitionStatus.state_reason:type_name -> forge.ControllerStateReason - 294, // 82: forge.IBPartitionStatus.state_sla:type_name -> forge.StateSla - 828, // 83: forge.IBPartition.id:type_name -> common.IBPartitionId - 149, // 84: forge.IBPartition.config:type_name -> forge.IBPartitionConfig - 150, // 85: forge.IBPartition.status:type_name -> forge.IBPartitionStatus - 219, // 86: forge.IBPartition.metadata:type_name -> forge.Metadata - 151, // 87: forge.IBPartitionList.ib_partitions:type_name -> forge.IBPartition - 149, // 88: forge.IBPartitionCreationRequest.config:type_name -> forge.IBPartitionConfig - 828, // 89: forge.IBPartitionCreationRequest.id:type_name -> common.IBPartitionId - 219, // 90: forge.IBPartitionCreationRequest.metadata:type_name -> forge.Metadata - 828, // 91: forge.IBPartitionUpdateRequest.id:type_name -> common.IBPartitionId - 149, // 92: forge.IBPartitionUpdateRequest.config:type_name -> forge.IBPartitionConfig - 219, // 93: forge.IBPartitionUpdateRequest.metadata:type_name -> forge.Metadata - 828, // 94: forge.IBPartitionDeletionRequest.id:type_name -> common.IBPartitionId - 828, // 95: forge.IBPartitionsByIdsRequest.ib_partition_ids:type_name -> common.IBPartitionId - 828, // 96: forge.IBPartitionIdList.ib_partition_ids:type_name -> common.IBPartitionId - 292, // 97: forge.PowerShelfStatus.state_reason:type_name -> forge.ControllerStateReason - 294, // 98: forge.PowerShelfStatus.state_sla:type_name -> forge.StateSla - 829, // 99: forge.PowerShelf.id:type_name -> common.PowerShelfId - 160, // 100: forge.PowerShelf.config:type_name -> forge.PowerShelfConfig - 161, // 101: forge.PowerShelf.status:type_name -> forge.PowerShelfStatus - 823, // 102: forge.PowerShelf.deleted:type_name -> google.protobuf.Timestamp - 219, // 103: forge.PowerShelf.metadata:type_name -> forge.Metadata - 281, // 104: forge.PowerShelf.bmc_info:type_name -> forge.BmcInfo - 162, // 105: forge.PowerShelfList.power_shelves:type_name -> forge.PowerShelf - 160, // 106: forge.PowerShelfCreationRequest.config:type_name -> forge.PowerShelfConfig - 829, // 107: forge.PowerShelfCreationRequest.id:type_name -> common.PowerShelfId - 829, // 108: forge.PowerShelfDeletionRequest.id:type_name -> common.PowerShelfId - 823, // 109: forge.PowerShelfStateHistoryRecord.time:type_name -> google.protobuf.Timestamp - 829, // 110: forge.PowerShelfStateHistoriesRequest.power_shelf_ids:type_name -> common.PowerShelfId - 802, // 111: forge.PowerShelfStateHistories.histories:type_name -> forge.PowerShelfStateHistories.HistoriesEntry - 167, // 112: forge.PowerShelfStateHistoryRecords.records:type_name -> forge.PowerShelfStateHistoryRecord - 829, // 113: forge.PowerShelfQuery.power_shelf_id:type_name -> common.PowerShelfId - 830, // 114: forge.PowerShelfSearchFilter.rack_id:type_name -> common.RackId - 6, // 115: forge.PowerShelfSearchFilter.deleted:type_name -> forge.DeletedFilter - 829, // 116: forge.PowerShelvesByIdsRequest.power_shelf_ids:type_name -> common.PowerShelfId - 219, // 117: forge.ExpectedPowerShelf.metadata:type_name -> forge.Metadata - 830, // 118: forge.ExpectedPowerShelf.rack_id:type_name -> common.RackId - 831, // 119: forge.ExpectedPowerShelf.expected_power_shelf_id:type_name -> common.UUID - 831, // 120: forge.ExpectedPowerShelfRequest.expected_power_shelf_id:type_name -> common.UUID - 174, // 121: forge.ExpectedPowerShelfList.expected_power_shelves:type_name -> forge.ExpectedPowerShelf - 178, // 122: forge.LinkedExpectedPowerShelfList.expected_power_shelves:type_name -> forge.LinkedExpectedPowerShelf - 829, // 123: forge.LinkedExpectedPowerShelf.power_shelf_id:type_name -> common.PowerShelfId - 831, // 124: forge.LinkedExpectedPowerShelf.expected_power_shelf_id:type_name -> common.UUID - 830, // 125: forge.LinkedExpectedPowerShelf.rack_id:type_name -> common.RackId - 180, // 126: forge.SwitchConfig.fabric_manager_config:type_name -> forge.FabricManagerConfig - 803, // 127: forge.FabricManagerConfig.config_map:type_name -> forge.FabricManagerConfig.ConfigMapEntry - 292, // 128: forge.SwitchStatus.state_reason:type_name -> forge.ControllerStateReason - 294, // 129: forge.SwitchStatus.state_sla:type_name -> forge.StateSla - 832, // 130: forge.Switch.id:type_name -> common.SwitchId - 179, // 131: forge.Switch.config:type_name -> forge.SwitchConfig - 181, // 132: forge.Switch.status:type_name -> forge.SwitchStatus - 823, // 133: forge.Switch.deleted:type_name -> google.protobuf.Timestamp - 281, // 134: forge.Switch.bmc_info:type_name -> forge.BmcInfo - 219, // 135: forge.Switch.metadata:type_name -> forge.Metadata - 182, // 136: forge.SwitchList.switches:type_name -> forge.Switch - 179, // 137: forge.SwitchCreationRequest.config:type_name -> forge.SwitchConfig - 831, // 138: forge.SwitchCreationRequest.id:type_name -> common.UUID - 832, // 139: forge.SwitchDeletionRequest.id:type_name -> common.SwitchId - 823, // 140: forge.SwitchStateHistoryRecord.time:type_name -> google.protobuf.Timestamp - 832, // 141: forge.SwitchStateHistoriesRequest.switch_ids:type_name -> common.SwitchId - 804, // 142: forge.SwitchStateHistories.histories:type_name -> forge.SwitchStateHistories.HistoriesEntry - 187, // 143: forge.SwitchStateHistoryRecords.records:type_name -> forge.SwitchStateHistoryRecord - 832, // 144: forge.SwitchQuery.switch_id:type_name -> common.SwitchId - 830, // 145: forge.SwitchSearchFilter.rack_id:type_name -> common.RackId - 6, // 146: forge.SwitchSearchFilter.deleted:type_name -> forge.DeletedFilter - 832, // 147: forge.SwitchesByIdsRequest.switch_ids:type_name -> common.SwitchId - 219, // 148: forge.ExpectedSwitch.metadata:type_name -> forge.Metadata - 830, // 149: forge.ExpectedSwitch.rack_id:type_name -> common.RackId - 831, // 150: forge.ExpectedSwitch.expected_switch_id:type_name -> common.UUID - 831, // 151: forge.ExpectedSwitchRequest.expected_switch_id:type_name -> common.UUID - 194, // 152: forge.ExpectedSwitchList.expected_switches:type_name -> forge.ExpectedSwitch - 198, // 153: forge.LinkedExpectedSwitchList.expected_switches:type_name -> forge.LinkedExpectedSwitch - 832, // 154: forge.LinkedExpectedSwitch.switch_id:type_name -> common.SwitchId - 831, // 155: forge.LinkedExpectedSwitch.expected_switch_id:type_name -> common.UUID - 830, // 156: forge.LinkedExpectedSwitch.rack_id:type_name -> common.RackId - 830, // 157: forge.ExpectedRack.rack_id:type_name -> common.RackId - 219, // 158: forge.ExpectedRack.metadata:type_name -> forge.Metadata - 199, // 159: forge.ExpectedRackList.expected_racks:type_name -> forge.ExpectedRack - 823, // 160: forge.NetworkSegmentStateHistory.time:type_name -> google.protobuf.Timestamp - 833, // 161: forge.NetworkSegment.id:type_name -> common.NetworkSegmentId - 824, // 162: forge.NetworkSegment.vpc_id:type_name -> common.VpcId - 834, // 163: forge.NetworkSegment.subdomain_id:type_name -> common.DomainId - 213, // 164: forge.NetworkSegment.prefixes:type_name -> forge.NetworkPrefix - 5, // 165: forge.NetworkSegment.state:type_name -> forge.TenantState - 204, // 166: forge.NetworkSegment.history:type_name -> forge.NetworkSegmentStateHistory - 292, // 167: forge.NetworkSegment.state_reason:type_name -> forge.ControllerStateReason - 294, // 168: forge.NetworkSegment.state_sla:type_name -> forge.StateSla - 823, // 169: forge.NetworkSegment.created:type_name -> google.protobuf.Timestamp - 823, // 170: forge.NetworkSegment.updated:type_name -> google.protobuf.Timestamp - 823, // 171: forge.NetworkSegment.deleted:type_name -> google.protobuf.Timestamp - 7, // 172: forge.NetworkSegment.segment_type:type_name -> forge.NetworkSegmentType - 8, // 173: forge.NetworkSegment.flags:type_name -> forge.NetworkSegmentFlag - 824, // 174: forge.NetworkSegmentCreationRequest.vpc_id:type_name -> common.VpcId - 834, // 175: forge.NetworkSegmentCreationRequest.subdomain_id:type_name -> common.DomainId - 213, // 176: forge.NetworkSegmentCreationRequest.prefixes:type_name -> forge.NetworkPrefix - 7, // 177: forge.NetworkSegmentCreationRequest.segment_type:type_name -> forge.NetworkSegmentType - 833, // 178: forge.NetworkSegmentCreationRequest.id:type_name -> common.NetworkSegmentId - 833, // 179: forge.NetworkSegmentDeletionRequest.id:type_name -> common.NetworkSegmentId - 833, // 180: forge.NetworkSegmentIdList.network_segments_ids:type_name -> common.NetworkSegmentId - 833, // 181: forge.NetworkSegmentsByIdsRequest.network_segments_ids:type_name -> common.NetworkSegmentId - 835, // 182: forge.NetworkPrefix.id:type_name -> common.NetworkPrefixId - 822, // 183: forge.InstancePowerRequest.machine_id:type_name -> common.MachineId - 58, // 184: forge.InstancePowerRequest.operation:type_name -> forge.InstancePowerRequest.Operation - 836, // 185: forge.InstancePowerRequest.instance_id:type_name -> common.InstanceId - 244, // 186: forge.InstanceList.instances:type_name -> forge.Instance - 218, // 187: forge.Metadata.labels:type_name -> forge.Label - 218, // 188: forge.InstanceSearchFilter.label:type_name -> forge.Label - 836, // 189: forge.InstanceIdList.instance_ids:type_name -> common.InstanceId - 836, // 190: forge.InstancesByIdsRequest.instance_ids:type_name -> common.InstanceId - 822, // 191: forge.InstanceAllocationRequest.machine_id:type_name -> common.MachineId - 229, // 192: forge.InstanceAllocationRequest.config:type_name -> forge.InstanceConfig - 836, // 193: forge.InstanceAllocationRequest.instance_id:type_name -> common.InstanceId - 219, // 194: forge.InstanceAllocationRequest.metadata:type_name -> forge.Metadata - 223, // 195: forge.BatchInstanceAllocationRequest.instance_requests:type_name -> forge.InstanceAllocationRequest - 244, // 196: forge.BatchInstanceAllocationResponse.instances:type_name -> forge.Instance - 228, // 197: forge.OperatingSystem.ipxe:type_name -> forge.InlineIpxe - 831, // 198: forge.OperatingSystem.os_image_id:type_name -> common.UUID - 226, // 199: forge.InstanceConfig.tenant:type_name -> forge.TenantConfig - 227, // 200: forge.InstanceConfig.os:type_name -> forge.OperatingSystem - 230, // 201: forge.InstanceConfig.network:type_name -> forge.InstanceNetworkConfig - 231, // 202: forge.InstanceConfig.infiniband:type_name -> forge.InstanceInfinibandConfig - 233, // 203: forge.InstanceConfig.dpu_extension_services:type_name -> forge.InstanceDpuExtensionServicesConfig - 234, // 204: forge.InstanceConfig.nvlink:type_name -> forge.InstanceNVLinkConfig - 246, // 205: forge.InstanceNetworkConfig.interfaces:type_name -> forge.InstanceInterfaceConfig - 247, // 206: forge.InstanceInfinibandConfig.ib_interfaces:type_name -> forge.InstanceIBInterfaceConfig - 232, // 207: forge.InstanceDpuExtensionServicesConfig.service_configs:type_name -> forge.InstanceDpuExtensionServiceConfig - 251, // 208: forge.InstanceNVLinkConfig.gpu_configs:type_name -> forge.InstanceNVLinkGpuConfig - 836, // 209: forge.InstanceOperatingSystemUpdateRequest.instance_id:type_name -> common.InstanceId - 227, // 210: forge.InstanceOperatingSystemUpdateRequest.os:type_name -> forge.OperatingSystem - 836, // 211: forge.InstanceConfigUpdateRequest.instance_id:type_name -> common.InstanceId - 229, // 212: forge.InstanceConfigUpdateRequest.config:type_name -> forge.InstanceConfig - 219, // 213: forge.InstanceConfigUpdateRequest.metadata:type_name -> forge.Metadata - 295, // 214: forge.InstanceStatus.tenant:type_name -> forge.InstanceTenantStatus - 238, // 215: forge.InstanceStatus.network:type_name -> forge.InstanceNetworkStatus - 239, // 216: forge.InstanceStatus.infiniband:type_name -> forge.InstanceInfinibandStatus - 242, // 217: forge.InstanceStatus.dpu_extension_services:type_name -> forge.InstanceDpuExtensionServicesStatus - 15, // 218: forge.InstanceStatus.configs_synced:type_name -> forge.SyncState - 245, // 219: forge.InstanceStatus.update:type_name -> forge.InstanceUpdateStatus - 243, // 220: forge.InstanceStatus.nvlink:type_name -> forge.InstanceNVLinkStatus - 248, // 221: forge.InstanceNetworkStatus.interfaces:type_name -> forge.InstanceInterfaceStatus - 15, // 222: forge.InstanceNetworkStatus.configs_synced:type_name -> forge.SyncState - 249, // 223: forge.InstanceInfinibandStatus.ib_interfaces:type_name -> forge.InstanceIBInterfaceStatus - 15, // 224: forge.InstanceInfinibandStatus.configs_synced:type_name -> forge.SyncState - 822, // 225: forge.DpuExtensionServiceStatus.dpu_machine_id:type_name -> common.MachineId - 51, // 226: forge.DpuExtensionServiceStatus.status:type_name -> forge.DpuExtensionServiceDeploymentStatus - 388, // 227: forge.DpuExtensionServiceStatus.components:type_name -> forge.DpuExtensionServiceComponent - 51, // 228: forge.InstanceDpuExtensionServiceStatus.deployment_status:type_name -> forge.DpuExtensionServiceDeploymentStatus - 240, // 229: forge.InstanceDpuExtensionServiceStatus.dpu_statuses:type_name -> forge.DpuExtensionServiceStatus - 241, // 230: forge.InstanceDpuExtensionServicesStatus.dpu_extension_services:type_name -> forge.InstanceDpuExtensionServiceStatus - 15, // 231: forge.InstanceDpuExtensionServicesStatus.configs_synced:type_name -> forge.SyncState - 250, // 232: forge.InstanceNVLinkStatus.gpu_statuses:type_name -> forge.InstanceNVLinkGpuStatus - 15, // 233: forge.InstanceNVLinkStatus.configs_synced:type_name -> forge.SyncState - 836, // 234: forge.Instance.id:type_name -> common.InstanceId - 822, // 235: forge.Instance.machine_id:type_name -> common.MachineId - 219, // 236: forge.Instance.metadata:type_name -> forge.Metadata - 229, // 237: forge.Instance.config:type_name -> forge.InstanceConfig - 237, // 238: forge.Instance.status:type_name -> forge.InstanceStatus - 59, // 239: forge.InstanceUpdateStatus.module:type_name -> forge.InstanceUpdateStatus.Module - 823, // 240: forge.InstanceUpdateStatus.trigger_received_at:type_name -> google.protobuf.Timestamp - 823, // 241: forge.InstanceUpdateStatus.update_triggered_at:type_name -> google.protobuf.Timestamp - 26, // 242: forge.InstanceInterfaceConfig.function_type:type_name -> forge.InterfaceFunctionType - 833, // 243: forge.InstanceInterfaceConfig.network_segment_id:type_name -> common.NetworkSegmentId - 833, // 244: forge.InstanceInterfaceConfig.segment_id:type_name -> common.NetworkSegmentId - 826, // 245: forge.InstanceInterfaceConfig.vpc_prefix_id:type_name -> common.VpcPrefixId - 26, // 246: forge.InstanceIBInterfaceConfig.function_type:type_name -> forge.InterfaceFunctionType - 828, // 247: forge.InstanceIBInterfaceConfig.ib_partition_id:type_name -> common.IBPartitionId - 837, // 248: forge.InstanceNVLinkGpuStatus.domain_id:type_name -> common.NVLinkDomainId - 825, // 249: forge.InstanceNVLinkGpuStatus.logical_partition_id:type_name -> common.NVLinkLogicalPartitionId - 825, // 250: forge.InstanceNVLinkGpuConfig.logical_partition_id:type_name -> common.NVLinkLogicalPartitionId - 836, // 251: forge.InstancePhoneHomeLastContactRequest.instance_id:type_name -> common.InstanceId - 823, // 252: forge.InstancePhoneHomeLastContactResponse.timestamp:type_name -> google.protobuf.Timestamp - 9, // 253: forge.Issue.category:type_name -> forge.IssueCategory - 836, // 254: forge.InstanceReleaseRequest.id:type_name -> common.InstanceId - 254, // 255: forge.InstanceReleaseRequest.issue:type_name -> forge.Issue - 822, // 256: forge.MachinesByIdsRequest.machine_ids:type_name -> common.MachineId - 830, // 257: forge.MachineSearchConfig.rack_id:type_name -> common.RackId - 822, // 258: forge.MachineStateHistoriesRequest.machine_ids:type_name -> common.MachineId - 805, // 259: forge.MachineStateHistories.histories:type_name -> forge.MachineStateHistories.HistoriesEntry - 296, // 260: forge.MachineStateHistoryRecords.records:type_name -> forge.MachineEvent - 822, // 261: forge.MachineHealthHistoriesRequest.machine_ids:type_name -> common.MachineId - 823, // 262: forge.MachineHealthHistoriesRequest.start_time:type_name -> google.protobuf.Timestamp - 823, // 263: forge.MachineHealthHistoriesRequest.end_time:type_name -> google.protobuf.Timestamp - 806, // 264: forge.HealthHistories.histories:type_name -> forge.HealthHistories.HistoriesEntry - 265, // 265: forge.HealthHistoryRecords.records:type_name -> forge.HealthHistoryRecord - 838, // 266: forge.HealthHistoryRecord.health:type_name -> health.HealthReport - 823, // 267: forge.HealthHistoryRecord.time:type_name -> google.protobuf.Timestamp - 400, // 268: forge.TenantList.tenants:type_name -> forge.Tenant - 297, // 269: forge.InterfaceList.interfaces:type_name -> forge.MachineInterface - 282, // 270: forge.MachineList.machines:type_name -> forge.Machine - 839, // 271: forge.InterfaceDeleteQuery.id:type_name -> common.MachineInterfaceId - 839, // 272: forge.InterfaceSearchQuery.id:type_name -> common.MachineInterfaceId - 839, // 273: forge.AssignStaticAddressRequest.interface_id:type_name -> common.MachineInterfaceId - 839, // 274: forge.AssignStaticAddressResponse.interface_id:type_name -> common.MachineInterfaceId - 10, // 275: forge.AssignStaticAddressResponse.status:type_name -> forge.AssignStaticAddressStatus - 839, // 276: forge.RemoveStaticAddressRequest.interface_id:type_name -> common.MachineInterfaceId - 839, // 277: forge.RemoveStaticAddressResponse.interface_id:type_name -> common.MachineInterfaceId - 11, // 278: forge.RemoveStaticAddressResponse.status:type_name -> forge.RemoveStaticAddressStatus - 839, // 279: forge.FindInterfaceAddressesRequest.interface_id:type_name -> common.MachineInterfaceId - 839, // 280: forge.FindInterfaceAddressesResponse.interface_id:type_name -> common.MachineInterfaceId - 279, // 281: forge.FindInterfaceAddressesResponse.addresses:type_name -> forge.InterfaceAddress - 822, // 282: forge.Machine.id:type_name -> common.MachineId - 292, // 283: forge.Machine.state_reason:type_name -> forge.ControllerStateReason - 294, // 284: forge.Machine.state_sla:type_name -> forge.StateSla - 296, // 285: forge.Machine.events:type_name -> forge.MachineEvent - 297, // 286: forge.Machine.interfaces:type_name -> forge.MachineInterface - 840, // 287: forge.Machine.discovery_info:type_name -> machine_discovery.DiscoveryInfo - 12, // 288: forge.Machine.machine_type:type_name -> forge.MachineType - 281, // 289: forge.Machine.bmc_info:type_name -> forge.BmcInfo - 823, // 290: forge.Machine.last_reboot_time:type_name -> google.protobuf.Timestamp - 823, // 291: forge.Machine.last_observation_time:type_name -> google.protobuf.Timestamp - 823, // 292: forge.Machine.maintenance_start_time:type_name -> google.protobuf.Timestamp - 822, // 293: forge.Machine.associated_host_machine_id:type_name -> common.MachineId - 289, // 294: forge.Machine.inventory:type_name -> forge.MachineComponentInventory - 823, // 295: forge.Machine.last_reboot_requested_time:type_name -> google.protobuf.Timestamp - 822, // 296: forge.Machine.associated_dpu_machine_ids:type_name -> common.MachineId - 838, // 297: forge.Machine.health:type_name -> health.HealthReport - 291, // 298: forge.Machine.health_overrides:type_name -> forge.HealthOverrideOrigin - 298, // 299: forge.Machine.ib_status:type_name -> forge.InfinibandStatusObservation - 219, // 300: forge.Machine.metadata:type_name -> forge.Metadata - 283, // 301: forge.Machine.instance_network_restrictions:type_name -> forge.InstanceNetworkRestrictions - 534, // 302: forge.Machine.capabilities:type_name -> forge.MachineCapabilitiesSet - 607, // 303: forge.Machine.hw_sku_status:type_name -> forge.SkuStatus - 327, // 304: forge.Machine.quarantine_state:type_name -> forge.ManagedHostQuarantineState - 651, // 305: forge.Machine.nvlink_info:type_name -> forge.MachineNVLinkInfo - 654, // 306: forge.Machine.nvlink_status_observation:type_name -> forge.MachineNVLinkStatusObservation - 830, // 307: forge.Machine.rack_id:type_name -> common.RackId - 13, // 308: forge.InstanceNetworkRestrictions.network_segment_membership_type:type_name -> forge.InstanceNetworkSegmentMembershipType - 833, // 309: forge.InstanceNetworkRestrictions.network_segment_ids:type_name -> common.NetworkSegmentId - 822, // 310: forge.MachineMetadataUpdateRequest.machine_id:type_name -> common.MachineId - 219, // 311: forge.MachineMetadataUpdateRequest.metadata:type_name -> forge.Metadata - 830, // 312: forge.RackMetadataUpdateRequest.rack_id:type_name -> common.RackId - 219, // 313: forge.RackMetadataUpdateRequest.metadata:type_name -> forge.Metadata - 832, // 314: forge.SwitchMetadataUpdateRequest.switch_id:type_name -> common.SwitchId - 219, // 315: forge.SwitchMetadataUpdateRequest.metadata:type_name -> forge.Metadata - 829, // 316: forge.PowerShelfMetadataUpdateRequest.power_shelf_id:type_name -> common.PowerShelfId - 219, // 317: forge.PowerShelfMetadataUpdateRequest.metadata:type_name -> forge.Metadata - 822, // 318: forge.DpuAgentInventoryReport.machine_id:type_name -> common.MachineId - 289, // 319: forge.DpuAgentInventoryReport.inventory:type_name -> forge.MachineComponentInventory - 290, // 320: forge.MachineComponentInventory.components:type_name -> forge.MachineInventorySoftwareComponent - 27, // 321: forge.HealthOverrideOrigin.mode:type_name -> forge.OverrideMode - 14, // 322: forge.ControllerStateReason.outcome:type_name -> forge.ControllerStateOutcome - 293, // 323: forge.ControllerStateReason.source_ref:type_name -> forge.ControllerStateSourceReference - 841, // 324: forge.StateSla.sla:type_name -> google.protobuf.Duration - 5, // 325: forge.InstanceTenantStatus.state:type_name -> forge.TenantState - 823, // 326: forge.MachineEvent.time:type_name -> google.protobuf.Timestamp - 839, // 327: forge.MachineInterface.id:type_name -> common.MachineInterfaceId - 822, // 328: forge.MachineInterface.attached_dpu_machine_id:type_name -> common.MachineId - 822, // 329: forge.MachineInterface.machine_id:type_name -> common.MachineId - 833, // 330: forge.MachineInterface.segment_id:type_name -> common.NetworkSegmentId - 834, // 331: forge.MachineInterface.domain_id:type_name -> common.DomainId - 823, // 332: forge.MachineInterface.created:type_name -> google.protobuf.Timestamp - 823, // 333: forge.MachineInterface.last_dhcp:type_name -> google.protobuf.Timestamp - 829, // 334: forge.MachineInterface.power_shelf_id:type_name -> common.PowerShelfId - 832, // 335: forge.MachineInterface.switch_id:type_name -> common.SwitchId - 17, // 336: forge.MachineInterface.association_type:type_name -> forge.InterfaceAssociationType - 299, // 337: forge.InfinibandStatusObservation.ib_interfaces:type_name -> forge.MachineIbInterface - 823, // 338: forge.InfinibandStatusObservation.observed_at:type_name -> google.protobuf.Timestamp - 842, // 339: forge.MachineIbInterface.associated_pkeys:type_name -> common.StringList - 842, // 340: forge.MachineIbInterface.associated_partition_ids:type_name -> common.StringList - 18, // 341: forge.ExpireDhcpLeaseResponse.status:type_name -> forge.ExpireDhcpLeaseStatus - 822, // 342: forge.DhcpRecord.machine_id:type_name -> common.MachineId - 839, // 343: forge.DhcpRecord.machine_interface_id:type_name -> common.MachineInterfaceId - 833, // 344: forge.DhcpRecord.segment_id:type_name -> common.NetworkSegmentId - 834, // 345: forge.DhcpRecord.subdomain_id:type_name -> common.DomainId - 823, // 346: forge.DhcpRecord.last_invalidation_time:type_name -> google.protobuf.Timestamp - 205, // 347: forge.NetworkSegmentList.network_segments:type_name -> forge.NetworkSegment - 19, // 348: forge.SSHKeyValidationResponse.role:type_name -> forge.UserRoles - 309, // 349: forge.GetBmcCredentialsResponse.credentials:type_name -> forge.BmcCredentials - 708, // 350: forge.BmcCredentials.username_password:type_name -> forge.UsernamePassword - 709, // 351: forge.BmcCredentials.session_token:type_name -> forge.SessionToken - 316, // 352: forge.SshRequest.endpoint_request:type_name -> forge.BmcEndpointRequest - 318, // 353: forge.CopyBfbToDpuRshimRequest.ssh_request:type_name -> forge.SshRequest - 822, // 354: forge.UpdateMachineHardwareInfoRequest.machine_id:type_name -> common.MachineId - 321, // 355: forge.UpdateMachineHardwareInfoRequest.info:type_name -> forge.MachineHardwareInfo - 20, // 356: forge.UpdateMachineHardwareInfoRequest.update_type:type_name -> forge.MachineHardwareInfoUpdateType - 843, // 357: forge.MachineHardwareInfo.gpus:type_name -> machine_discovery.Gpu - 822, // 358: forge.ManagedHostNetworkConfigRequest.dpu_machine_id:type_name -> common.MachineId - 334, // 359: forge.ManagedHostNetworkConfigResponse.managed_host_config:type_name -> forge.ManagedHostNetworkConfig - 335, // 360: forge.ManagedHostNetworkConfigResponse.admin_interface:type_name -> forge.FlatInterfaceConfig - 335, // 361: forge.ManagedHostNetworkConfigResponse.tenant_interfaces:type_name -> forge.FlatInterfaceConfig - 836, // 362: forge.ManagedHostNetworkConfigResponse.instance_id:type_name -> common.InstanceId - 3, // 363: forge.ManagedHostNetworkConfigResponse.network_virtualization_type:type_name -> forge.VpcVirtualizationType - 22, // 364: forge.ManagedHostNetworkConfigResponse.vpc_isolation_behavior:type_name -> forge.VpcIsolationBehaviorType - 244, // 365: forge.ManagedHostNetworkConfigResponse.instance:type_name -> forge.Instance - 844, // 366: forge.ManagedHostNetworkConfigResponse.common_internal_route_target:type_name -> common.RouteTarget - 844, // 367: forge.ManagedHostNetworkConfigResponse.additional_route_target_imports:type_name -> common.RouteTarget - 585, // 368: forge.ManagedHostNetworkConfigResponse.network_security_policy_overrides:type_name -> forge.ResolvedNetworkSecurityGroupRule - 326, // 369: forge.ManagedHostNetworkConfigResponse.dpu_extension_services:type_name -> forge.ManagedHostDpuExtensionServiceConfig - 324, // 370: forge.ManagedHostNetworkConfigResponse.traffic_intercept_config:type_name -> forge.TrafficInterceptConfig - 743, // 371: forge.ManagedHostNetworkConfigResponse.routing_profile:type_name -> forge.RoutingProfile - 325, // 372: forge.TrafficInterceptConfig.bridging:type_name -> forge.TrafficInterceptBridging - 50, // 373: forge.ManagedHostDpuExtensionServiceConfig.service_type:type_name -> forge.DpuExtensionServiceType - 710, // 374: forge.ManagedHostDpuExtensionServiceConfig.credential:type_name -> forge.DpuExtensionServiceCredential - 729, // 375: forge.ManagedHostDpuExtensionServiceConfig.observability:type_name -> forge.DpuExtensionServiceObservability - 21, // 376: forge.ManagedHostQuarantineState.mode:type_name -> forge.ManagedHostQuarantineMode - 822, // 377: forge.GetManagedHostQuarantineStateRequest.machine_id:type_name -> common.MachineId - 327, // 378: forge.GetManagedHostQuarantineStateResponse.quarantine_state:type_name -> forge.ManagedHostQuarantineState - 822, // 379: forge.SetManagedHostQuarantineStateRequest.machine_id:type_name -> common.MachineId - 327, // 380: forge.SetManagedHostQuarantineStateRequest.quarantine_state:type_name -> forge.ManagedHostQuarantineState - 327, // 381: forge.SetManagedHostQuarantineStateResponse.prior_quarantine_state:type_name -> forge.ManagedHostQuarantineState - 822, // 382: forge.ClearManagedHostQuarantineStateRequest.machine_id:type_name -> common.MachineId - 327, // 383: forge.ClearManagedHostQuarantineStateResponse.prior_quarantine_state:type_name -> forge.ManagedHostQuarantineState - 327, // 384: forge.ManagedHostNetworkConfig.quarantine_state:type_name -> forge.ManagedHostQuarantineState - 26, // 385: forge.FlatInterfaceConfig.function_type:type_name -> forge.InterfaceFunctionType - 336, // 386: forge.FlatInterfaceConfig.network_security_group:type_name -> forge.FlatInterfaceNetworkSecurityGroupConfig - 831, // 387: forge.FlatInterfaceConfig.internal_uuid:type_name -> common.UUID - 42, // 388: forge.FlatInterfaceNetworkSecurityGroupConfig.source:type_name -> forge.NetworkSecurityGroupSource - 585, // 389: forge.FlatInterfaceNetworkSecurityGroupConfig.rules:type_name -> forge.ResolvedNetworkSecurityGroupRule - 385, // 390: forge.ManagedHostNetworkStatusResponse.all:type_name -> forge.DpuNetworkStatus - 823, // 391: forge.DpuAgentUpgradeCheckRequest.binary_mtime:type_name -> google.protobuf.Timestamp - 23, // 392: forge.DpuAgentUpgradePolicyRequest.new_policy:type_name -> forge.AgentUpgradePolicy - 23, // 393: forge.DpuAgentUpgradePolicyResponse.active_policy:type_name -> forge.AgentUpgradePolicy - 316, // 394: forge.LockdownRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 822, // 395: forge.LockdownRequest.machine_id:type_name -> common.MachineId - 24, // 396: forge.LockdownRequest.action:type_name -> forge.LockdownAction - 316, // 397: forge.LockdownStatusRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 822, // 398: forge.LockdownStatusRequest.machine_id:type_name -> common.MachineId - 316, // 399: forge.MachineSetupStatusRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 316, // 400: forge.MachineSetupRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 316, // 401: forge.SetDpuFirstBootOrderRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 316, // 402: forge.AdminRebootRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 316, // 403: forge.AdminBmcResetRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 316, // 404: forge.EnableInfiniteBootRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 316, // 405: forge.IsInfiniteBootEnabledRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 822, // 406: forge.BMCMetaDataGetRequest.machine_id:type_name -> common.MachineId - 19, // 407: forge.BMCMetaDataGetRequest.role:type_name -> forge.UserRoles - 25, // 408: forge.BMCMetaDataGetRequest.request_type:type_name -> forge.BMCRequestType - 316, // 409: forge.BMCMetaDataGetRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 822, // 410: forge.MachineCredentialsUpdateRequest.machine_id:type_name -> common.MachineId - 807, // 411: forge.MachineCredentialsUpdateRequest.credentials:type_name -> forge.MachineCredentialsUpdateRequest.Credentials - 822, // 412: forge.ForgeAgentControlRequest.machine_id:type_name -> common.MachineId - 61, // 413: forge.ForgeAgentControlResponse.action:type_name -> forge.ForgeAgentControlResponse.Action - 808, // 414: forge.ForgeAgentControlResponse.data:type_name -> forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo - 839, // 415: forge.MachineDiscoveryInfo.machine_interface_id:type_name -> common.MachineInterfaceId - 840, // 416: forge.MachineDiscoveryInfo.info:type_name -> machine_discovery.DiscoveryInfo - 822, // 417: forge.MachineDiscoveryCompletedRequest.machine_id:type_name -> common.MachineId - 822, // 418: forge.MachineCleanupInfo.machine_id:type_name -> common.MachineId - 810, // 419: forge.MachineCleanupInfo.nvme:type_name -> forge.MachineCleanupInfo.CleanupStepResult - 810, // 420: forge.MachineCleanupInfo.ram:type_name -> forge.MachineCleanupInfo.CleanupStepResult - 810, // 421: forge.MachineCleanupInfo.mem_overwrite:type_name -> forge.MachineCleanupInfo.CleanupStepResult - 810, // 422: forge.MachineCleanupInfo.ib:type_name -> forge.MachineCleanupInfo.CleanupStepResult - 62, // 423: forge.MachineCleanupInfo.result:type_name -> forge.MachineCleanupInfo.CleanupResult - 371, // 424: forge.MachineCertificateResult.machine_certificate:type_name -> forge.MachineCertificate - 822, // 425: forge.MachineDiscoveryResult.machine_id:type_name -> common.MachineId - 371, // 426: forge.MachineDiscoveryResult.machine_certificate:type_name -> forge.MachineCertificate - 97, // 427: forge.MachineDiscoveryResult.attest_key_challenge:type_name -> forge.AttestKeyBindChallenge - 839, // 428: forge.MachineDiscoveryResult.machine_interface_id:type_name -> common.MachineInterfaceId - 822, // 429: forge.ForgeScoutErrorReport.machine_id:type_name -> common.MachineId - 839, // 430: forge.ForgeScoutErrorReport.machine_interface_id:type_name -> common.MachineInterfaceId - 16, // 431: forge.PxeInstructionRequest.arch:type_name -> forge.MachineArchitecture - 839, // 432: forge.PxeInstructionRequest.interface_id:type_name -> common.MachineInterfaceId - 297, // 433: forge.CloudInitDiscoveryInstructions.machine_interface:type_name -> forge.MachineInterface - 749, // 434: forge.CloudInitDiscoveryInstructions.domain:type_name -> forge.PxeDomain - 381, // 435: forge.CloudInitInstructions.discovery_instructions:type_name -> forge.CloudInitDiscoveryInstructions - 382, // 436: forge.CloudInitInstructions.metadata:type_name -> forge.CloudInitMetaData - 822, // 437: forge.DpuNetworkStatus.dpu_machine_id:type_name -> common.MachineId - 823, // 438: forge.DpuNetworkStatus.observed_at:type_name -> google.protobuf.Timestamp - 397, // 439: forge.DpuNetworkStatus.interfaces:type_name -> forge.InstanceInterfaceStatusObservation - 836, // 440: forge.DpuNetworkStatus.instance_id:type_name -> common.InstanceId - 838, // 441: forge.DpuNetworkStatus.dpu_health:type_name -> health.HealthReport - 398, // 442: forge.DpuNetworkStatus.fabric_interfaces:type_name -> forge.FabricInterfaceData - 386, // 443: forge.DpuNetworkStatus.last_dhcp_requests:type_name -> forge.LastDhcpRequest - 387, // 444: forge.DpuNetworkStatus.dpu_extension_services:type_name -> forge.DpuExtensionServiceStatusObservation - 839, // 445: forge.LastDhcpRequest.host_interface_id:type_name -> common.MachineInterfaceId - 50, // 446: forge.DpuExtensionServiceStatusObservation.service_type:type_name -> forge.DpuExtensionServiceType - 51, // 447: forge.DpuExtensionServiceStatusObservation.state:type_name -> forge.DpuExtensionServiceDeploymentStatus - 388, // 448: forge.DpuExtensionServiceStatusObservation.components:type_name -> forge.DpuExtensionServiceComponent - 838, // 449: forge.OptionalHealthReport.report:type_name -> health.HealthReport - 838, // 450: forge.HealthReportOverride.report:type_name -> health.HealthReport - 27, // 451: forge.HealthReportOverride.mode:type_name -> forge.OverrideMode - 822, // 452: forge.InsertHealthReportOverrideRequest.machine_id:type_name -> common.MachineId - 390, // 453: forge.InsertHealthReportOverrideRequest.override:type_name -> forge.HealthReportOverride - 830, // 454: forge.InsertRackHealthReportOverrideRequest.rack_id:type_name -> common.RackId - 390, // 455: forge.InsertRackHealthReportOverrideRequest.override:type_name -> forge.HealthReportOverride - 830, // 456: forge.RemoveRackHealthReportOverrideRequest.rack_id:type_name -> common.RackId - 830, // 457: forge.ListRackHealthReportOverridesRequest.rack_id:type_name -> common.RackId - 390, // 458: forge.ListHealthReportOverrideResponse.overrides:type_name -> forge.HealthReportOverride - 822, // 459: forge.RemoveHealthReportOverrideRequest.machine_id:type_name -> common.MachineId - 26, // 460: forge.InstanceInterfaceStatusObservation.function_type:type_name -> forge.InterfaceFunctionType - 579, // 461: forge.InstanceInterfaceStatusObservation.network_security_group:type_name -> forge.NetworkSecurityGroupStatus - 831, // 462: forge.InstanceInterfaceStatusObservation.internal_uuid:type_name -> common.UUID - 399, // 463: forge.FabricInterfaceData.link_data:type_name -> forge.LinkData - 219, // 464: forge.Tenant.metadata:type_name -> forge.Metadata - 219, // 465: forge.CreateTenantRequest.metadata:type_name -> forge.Metadata - 400, // 466: forge.CreateTenantResponse.tenant:type_name -> forge.Tenant - 219, // 467: forge.UpdateTenantRequest.metadata:type_name -> forge.Metadata - 400, // 468: forge.UpdateTenantResponse.tenant:type_name -> forge.Tenant - 400, // 469: forge.FindTenantResponse.tenant:type_name -> forge.Tenant - 408, // 470: forge.TenantKeysetContent.public_keys:type_name -> forge.TenantPublicKey - 407, // 471: forge.TenantKeyset.keyset_identifier:type_name -> forge.TenantKeysetIdentifier - 409, // 472: forge.TenantKeyset.keyset_content:type_name -> forge.TenantKeysetContent - 407, // 473: forge.CreateTenantKeysetRequest.keyset_identifier:type_name -> forge.TenantKeysetIdentifier - 409, // 474: forge.CreateTenantKeysetRequest.keyset_content:type_name -> forge.TenantKeysetContent - 410, // 475: forge.CreateTenantKeysetResponse.keyset:type_name -> forge.TenantKeyset - 410, // 476: forge.TenantKeySetList.keyset:type_name -> forge.TenantKeyset - 407, // 477: forge.UpdateTenantKeysetRequest.keyset_identifier:type_name -> forge.TenantKeysetIdentifier - 409, // 478: forge.UpdateTenantKeysetRequest.keyset_content:type_name -> forge.TenantKeysetContent - 407, // 479: forge.DeleteTenantKeysetRequest.keyset_identifier:type_name -> forge.TenantKeysetIdentifier - 407, // 480: forge.TenantKeysetIdList.keyset_ids:type_name -> forge.TenantKeysetIdentifier - 407, // 481: forge.TenantKeysetsByIdsRequest.keyset_ids:type_name -> forge.TenantKeysetIdentifier - 425, // 482: forge.ResourcePools.pools:type_name -> forge.ResourcePool - 29, // 483: forge.MaintenanceRequest.operation:type_name -> forge.MaintenanceOperation - 822, // 484: forge.MaintenanceRequest.host_id:type_name -> common.MachineId - 30, // 485: forge.SetDynamicConfigRequest.setting:type_name -> forge.ConfigSetting - 449, // 486: forge.FindIpAddressResponse.matches:type_name -> forge.IpAddressMatch - 831, // 487: forge.IdentifyUuidRequest.uuid:type_name -> common.UUID - 831, // 488: forge.IdentifyUuidResponse.uuid:type_name -> common.UUID - 31, // 489: forge.IdentifyUuidResponse.object_type:type_name -> forge.UuidType - 32, // 490: forge.IdentifyMacResponse.object_type:type_name -> forge.MacOwner - 822, // 491: forge.IdentifySerialResponse.machine_id:type_name -> common.MachineId - 822, // 492: forge.DpuReprovisioningRequest.dpu_id:type_name -> common.MachineId - 63, // 493: forge.DpuReprovisioningRequest.mode:type_name -> forge.DpuReprovisioningRequest.Mode - 33, // 494: forge.DpuReprovisioningRequest.initiator:type_name -> forge.UpdateInitiator - 822, // 495: forge.DpuReprovisioningRequest.machine_id:type_name -> common.MachineId - 811, // 496: forge.DpuReprovisioningListResponse.dpus:type_name -> forge.DpuReprovisioningListResponse.DpuReprovisioningListItem - 822, // 497: forge.HostReprovisioningRequest.machine_id:type_name -> common.MachineId - 64, // 498: forge.HostReprovisioningRequest.mode:type_name -> forge.HostReprovisioningRequest.Mode - 33, // 499: forge.HostReprovisioningRequest.initiator:type_name -> forge.UpdateInitiator - 812, // 500: forge.HostReprovisioningListResponse.hosts:type_name -> forge.HostReprovisioningListResponse.HostReprovisioningListItem - 446, // 501: forge.GetDpuInfoListResponse.dpu_list:type_name -> forge.DpuInfo - 34, // 502: forge.IpAddressMatch.ip_type:type_name -> forge.IpType - 839, // 503: forge.MachineBootOverride.machine_interface_id:type_name -> common.MachineInterfaceId - 822, // 504: forge.ConnectedDevice.id:type_name -> common.MachineId - 451, // 505: forge.ConnectedDeviceList.connected_devices:type_name -> forge.ConnectedDevice - 457, // 506: forge.MachineIdBmcIpPairs.pairs:type_name -> forge.MachineIdBmcIp - 822, // 507: forge.MachineIdBmcIp.machine_id:type_name -> common.MachineId - 451, // 508: forge.NetworkDevice.devices:type_name -> forge.ConnectedDevice - 458, // 509: forge.NetworkTopologyData.network_devices:type_name -> forge.NetworkDevice - 35, // 510: forge.RouteServers.source_type:type_name -> forge.RouteServerSourceType - 464, // 511: forge.RouteServerEntries.route_servers:type_name -> forge.RouteServer - 35, // 512: forge.RouteServer.source_type:type_name -> forge.RouteServerSourceType - 822, // 513: forge.SetHostUefiPasswordRequest.host_id:type_name -> common.MachineId - 822, // 514: forge.ClearHostUefiPasswordRequest.host_id:type_name -> common.MachineId - 831, // 515: forge.OsImageAttributes.id:type_name -> common.UUID - 469, // 516: forge.OsImage.attributes:type_name -> forge.OsImageAttributes - 36, // 517: forge.OsImage.status:type_name -> forge.OsImageStatus - 470, // 518: forge.ListOsImageResponse.images:type_name -> forge.OsImage - 831, // 519: forge.DeleteOsImageRequest.id:type_name -> common.UUID - 219, // 520: forge.ExpectedMachine.metadata:type_name -> forge.Metadata - 831, // 521: forge.ExpectedMachine.id:type_name -> common.UUID - 475, // 522: forge.ExpectedMachine.host_nics:type_name -> forge.ExpectedHostNic - 830, // 523: forge.ExpectedMachine.rack_id:type_name -> common.RackId - 831, // 524: forge.ExpectedMachineRequest.id:type_name -> common.UUID - 476, // 525: forge.ExpectedMachineList.expected_machines:type_name -> forge.ExpectedMachine - 480, // 526: forge.LinkedExpectedMachineList.expected_machines:type_name -> forge.LinkedExpectedMachine - 822, // 527: forge.LinkedExpectedMachine.machine_id:type_name -> common.MachineId - 831, // 528: forge.LinkedExpectedMachine.expected_machine_id:type_name -> common.UUID - 478, // 529: forge.BatchExpectedMachineOperationRequest.expected_machines:type_name -> forge.ExpectedMachineList - 831, // 530: forge.ExpectedMachineOperationResult.id:type_name -> common.UUID - 476, // 531: forge.ExpectedMachineOperationResult.expected_machine:type_name -> forge.ExpectedMachine - 482, // 532: forge.BatchExpectedMachineOperationResponse.results:type_name -> forge.ExpectedMachineOperationResult - 822, // 533: forge.MachineRebootCompletedRequest.machine_id:type_name -> common.MachineId - 822, // 534: forge.MachineValidationCompletedRequest.machine_id:type_name -> common.MachineId - 831, // 535: forge.MachineValidationCompletedRequest.validation_id:type_name -> common.UUID - 823, // 536: forge.MachineValidationResult.start_time:type_name -> google.protobuf.Timestamp - 823, // 537: forge.MachineValidationResult.end_time:type_name -> google.protobuf.Timestamp - 831, // 538: forge.MachineValidationResult.validation_id:type_name -> common.UUID - 488, // 539: forge.MachineValidationResultPostRequest.result:type_name -> forge.MachineValidationResult - 488, // 540: forge.MachineValidationResultList.results:type_name -> forge.MachineValidationResult - 822, // 541: forge.MachineValidationGetRequest.machine_id:type_name -> common.MachineId - 831, // 542: forge.MachineValidationGetRequest.validation_id:type_name -> common.UUID - 37, // 543: forge.MachineValidationStatus.started:type_name -> forge.MachineValidationStarted - 38, // 544: forge.MachineValidationStatus.in_progress:type_name -> forge.MachineValidationInProgress - 39, // 545: forge.MachineValidationStatus.completed:type_name -> forge.MachineValidationCompleted - 831, // 546: forge.MachineValidationRun.validation_id:type_name -> common.UUID - 822, // 547: forge.MachineValidationRun.machine_id:type_name -> common.MachineId - 823, // 548: forge.MachineValidationRun.start_time:type_name -> google.protobuf.Timestamp - 823, // 549: forge.MachineValidationRun.end_time:type_name -> google.protobuf.Timestamp - 492, // 550: forge.MachineValidationRun.status:type_name -> forge.MachineValidationStatus - 841, // 551: forge.MachineValidationRun.duration_to_complete:type_name -> google.protobuf.Duration - 822, // 552: forge.MachineSetAutoUpdateRequest.machine_id:type_name -> common.MachineId - 65, // 553: forge.MachineSetAutoUpdateRequest.action:type_name -> forge.MachineSetAutoUpdateRequest.SetAutoupdateAction - 823, // 554: forge.MachineValidationExternalConfig.timestamp:type_name -> google.protobuf.Timestamp - 497, // 555: forge.GetMachineValidationExternalConfigResponse.config:type_name -> forge.MachineValidationExternalConfig - 497, // 556: forge.GetMachineValidationExternalConfigsResponse.configs:type_name -> forge.MachineValidationExternalConfig - 822, // 557: forge.MachineValidationOnDemandRequest.machine_id:type_name -> common.MachineId - 66, // 558: forge.MachineValidationOnDemandRequest.action:type_name -> forge.MachineValidationOnDemandRequest.Action - 831, // 559: forge.MachineValidationOnDemandResponse.validation_id:type_name -> common.UUID - 316, // 560: forge.AdminPowerControlRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 67, // 561: forge.AdminPowerControlRequest.action:type_name -> forge.AdminPowerControlRequest.SystemPowerControl - 822, // 562: forge.GetRedfishJobStateRequest.machine_id:type_name -> common.MachineId - 68, // 563: forge.GetRedfishJobStateResponse.job_state:type_name -> forge.GetRedfishJobStateResponse.RedfishJobState - 493, // 564: forge.MachineValidationRunList.runs:type_name -> forge.MachineValidationRun - 822, // 565: forge.MachineValidationRunListGetRequest.machine_id:type_name -> common.MachineId - 813, // 566: forge.MachineValidationTestUpdateRequest.payload:type_name -> forge.MachineValidationTestUpdateRequest.Payload - 520, // 567: forge.MachineValidationTestsGetResponse.tests:type_name -> forge.MachineValidationTest - 831, // 568: forge.MachineValidationRunRequest.validation_id:type_name -> common.UUID - 841, // 569: forge.MachineValidationRunRequest.duration_to_complete:type_name -> google.protobuf.Duration - 40, // 570: forge.MachineCapabilityAttributesGpu.device_type:type_name -> forge.MachineCapabilityDeviceType - 40, // 571: forge.MachineCapabilityAttributesNetwork.device_type:type_name -> forge.MachineCapabilityDeviceType - 527, // 572: forge.MachineCapabilitiesSet.cpu:type_name -> forge.MachineCapabilityAttributesCpu - 528, // 573: forge.MachineCapabilitiesSet.gpu:type_name -> forge.MachineCapabilityAttributesGpu - 529, // 574: forge.MachineCapabilitiesSet.memory:type_name -> forge.MachineCapabilityAttributesMemory - 530, // 575: forge.MachineCapabilitiesSet.storage:type_name -> forge.MachineCapabilityAttributesStorage - 531, // 576: forge.MachineCapabilitiesSet.network:type_name -> forge.MachineCapabilityAttributesNetwork - 532, // 577: forge.MachineCapabilitiesSet.infiniband:type_name -> forge.MachineCapabilityAttributesInfiniband - 533, // 578: forge.MachineCapabilitiesSet.dpu:type_name -> forge.MachineCapabilityAttributesDpu - 537, // 579: forge.InstanceTypeAttributes.desired_capabilities:type_name -> forge.InstanceTypeMachineCapabilityFilterAttributes - 535, // 580: forge.InstanceType.attributes:type_name -> forge.InstanceTypeAttributes - 219, // 581: forge.InstanceType.metadata:type_name -> forge.Metadata - 636, // 582: forge.InstanceType.allocation_stats:type_name -> forge.InstanceTypeAllocationStats - 41, // 583: forge.InstanceTypeMachineCapabilityFilterAttributes.capability_type:type_name -> forge.MachineCapabilityType - 845, // 584: forge.InstanceTypeMachineCapabilityFilterAttributes.inactive_devices:type_name -> common.Uint32List - 40, // 585: forge.InstanceTypeMachineCapabilityFilterAttributes.device_type:type_name -> forge.MachineCapabilityDeviceType - 219, // 586: forge.CreateInstanceTypeRequest.metadata:type_name -> forge.Metadata - 535, // 587: forge.CreateInstanceTypeRequest.instance_type_attributes:type_name -> forge.InstanceTypeAttributes - 536, // 588: forge.CreateInstanceTypeResponse.instance_type:type_name -> forge.InstanceType - 536, // 589: forge.FindInstanceTypesByIdsResponse.instance_types:type_name -> forge.InstanceType - 536, // 590: forge.UpdateInstanceTypeResponse.instance_type:type_name -> forge.InstanceType - 219, // 591: forge.UpdateInstanceTypeRequest.metadata:type_name -> forge.Metadata - 535, // 592: forge.UpdateInstanceTypeRequest.instance_type_attributes:type_name -> forge.InstanceTypeAttributes - 814, // 593: forge.RedfishBrowseResponse.headers:type_name -> forge.RedfishBrowseResponse.HeadersEntry - 556, // 594: forge.RedfishListActionsResponse.actions:type_name -> forge.RedfishAction - 823, // 595: forge.RedfishAction.approver_dates:type_name -> google.protobuf.Timestamp - 823, // 596: forge.RedfishAction.applied_at:type_name -> google.protobuf.Timestamp - 557, // 597: forge.RedfishAction.results:type_name -> forge.OptionalRedfishActionResult - 558, // 598: forge.OptionalRedfishActionResult.result:type_name -> forge.RedfishActionResult - 815, // 599: forge.RedfishActionResult.headers:type_name -> forge.RedfishActionResult.HeadersEntry - 823, // 600: forge.RedfishActionResult.completed_at:type_name -> google.protobuf.Timestamp - 816, // 601: forge.UfmBrowseResponse.headers:type_name -> forge.UfmBrowseResponse.HeadersEntry - 584, // 602: forge.NetworkSecurityGroupAttributes.rules:type_name -> forge.NetworkSecurityGroupRuleAttributes - 219, // 603: forge.NetworkSecurityGroup.metadata:type_name -> forge.Metadata - 567, // 604: forge.NetworkSecurityGroup.attributes:type_name -> forge.NetworkSecurityGroupAttributes - 219, // 605: forge.CreateNetworkSecurityGroupRequest.metadata:type_name -> forge.Metadata - 567, // 606: forge.CreateNetworkSecurityGroupRequest.network_security_group_attributes:type_name -> forge.NetworkSecurityGroupAttributes - 568, // 607: forge.CreateNetworkSecurityGroupResponse.network_security_group:type_name -> forge.NetworkSecurityGroup - 568, // 608: forge.FindNetworkSecurityGroupsByIdsResponse.network_security_groups:type_name -> forge.NetworkSecurityGroup - 568, // 609: forge.UpdateNetworkSecurityGroupResponse.network_security_group:type_name -> forge.NetworkSecurityGroup - 219, // 610: forge.UpdateNetworkSecurityGroupRequest.metadata:type_name -> forge.Metadata - 567, // 611: forge.UpdateNetworkSecurityGroupRequest.network_security_group_attributes:type_name -> forge.NetworkSecurityGroupAttributes - 42, // 612: forge.NetworkSecurityGroupStatus.source:type_name -> forge.NetworkSecurityGroupSource - 43, // 613: forge.NetworkSecurityGroupPropagationObjectStatus.status:type_name -> forge.NetworkSecurityGroupPropagationStatus - 580, // 614: forge.GetNetworkSecurityGroupPropagationStatusResponse.vpcs:type_name -> forge.NetworkSecurityGroupPropagationObjectStatus - 580, // 615: forge.GetNetworkSecurityGroupPropagationStatusResponse.instances:type_name -> forge.NetworkSecurityGroupPropagationObjectStatus - 582, // 616: forge.GetNetworkSecurityGroupPropagationStatusRequest.network_security_group_ids:type_name -> forge.NetworkSecurityGroupIdList - 44, // 617: forge.NetworkSecurityGroupRuleAttributes.direction:type_name -> forge.NetworkSecurityGroupRuleDirection - 45, // 618: forge.NetworkSecurityGroupRuleAttributes.protocol:type_name -> forge.NetworkSecurityGroupRuleProtocol - 46, // 619: forge.NetworkSecurityGroupRuleAttributes.action:type_name -> forge.NetworkSecurityGroupRuleAction - 584, // 620: forge.ResolvedNetworkSecurityGroupRule.rule:type_name -> forge.NetworkSecurityGroupRuleAttributes - 587, // 621: forge.GetNetworkSecurityGroupAttachmentsResponse.attachments:type_name -> forge.NetworkSecurityGroupAttachments - 591, // 622: forge.GetDesiredFirmwareVersionsResponse.entries:type_name -> forge.DesiredFirmwareVersionEntry - 817, // 623: forge.DesiredFirmwareVersionEntry.component_versions:type_name -> forge.DesiredFirmwareVersionEntry.ComponentVersionsEntry - 592, // 624: forge.SkuComponents.chassis:type_name -> forge.SkuComponentChassis - 593, // 625: forge.SkuComponents.cpus:type_name -> forge.SkuComponentCpu - 594, // 626: forge.SkuComponents.gpus:type_name -> forge.SkuComponentGpu - 595, // 627: forge.SkuComponents.ethernet_devices:type_name -> forge.SkuComponentEthernetDevices - 596, // 628: forge.SkuComponents.infiniband_devices:type_name -> forge.SkuComponentInfinibandDevices - 597, // 629: forge.SkuComponents.storage:type_name -> forge.SkuComponentStorage - 599, // 630: forge.SkuComponents.memory:type_name -> forge.SkuComponentMemory - 600, // 631: forge.SkuComponents.tpm:type_name -> forge.SkuComponentTpm - 823, // 632: forge.Sku.created:type_name -> google.protobuf.Timestamp - 601, // 633: forge.Sku.components:type_name -> forge.SkuComponents - 822, // 634: forge.Sku.associated_machine_ids:type_name -> common.MachineId - 822, // 635: forge.SkuMachinePair.machine_id:type_name -> common.MachineId - 822, // 636: forge.RemoveSkuRequest.machine_id:type_name -> common.MachineId - 602, // 637: forge.SkuList.skus:type_name -> forge.Sku - 823, // 638: forge.SkuStatus.verify_request_time:type_name -> google.protobuf.Timestamp - 823, // 639: forge.SkuStatus.last_match_attempt:type_name -> google.protobuf.Timestamp - 823, // 640: forge.SkuStatus.last_generate_attempt:type_name -> google.protobuf.Timestamp - 846, // 641: forge.DpaInterface.id:type_name -> common.DpaInterfaceId - 822, // 642: forge.DpaInterface.machine_id:type_name -> common.MachineId - 823, // 643: forge.DpaInterface.created:type_name -> google.protobuf.Timestamp - 823, // 644: forge.DpaInterface.updated:type_name -> google.protobuf.Timestamp - 823, // 645: forge.DpaInterface.deleted:type_name -> google.protobuf.Timestamp - 615, // 646: forge.DpaInterface.history:type_name -> forge.DpaInterfaceStateHistoryRecord - 823, // 647: forge.DpaInterface.last_hb_time:type_name -> google.protobuf.Timestamp - 822, // 648: forge.DpaInterfaceCreationRequest.machine_id:type_name -> common.MachineId - 846, // 649: forge.DpaInterfaceIdList.ids:type_name -> common.DpaInterfaceId - 846, // 650: forge.DpaInterfacesByIdsRequest.ids:type_name -> common.DpaInterfaceId - 610, // 651: forge.DpaInterfaceList.interfaces:type_name -> forge.DpaInterface - 823, // 652: forge.DpaInterfaceStateHistoryRecord.time:type_name -> google.protobuf.Timestamp - 846, // 653: forge.DpaNetworkObservationSetRequest.id:type_name -> common.DpaInterfaceId - 846, // 654: forge.DpaInterfaceDeletionRequest.id:type_name -> common.DpaInterfaceId - 822, // 655: forge.PowerOptionRequest.machine_id:type_name -> common.MachineId - 822, // 656: forge.PowerOptionUpdateRequest.machine_id:type_name -> common.MachineId - 47, // 657: forge.PowerOptionUpdateRequest.power_state:type_name -> forge.PowerState - 47, // 658: forge.PowerOptions.desired_state:type_name -> forge.PowerState - 823, // 659: forge.PowerOptions.desired_state_updated_at:type_name -> google.protobuf.Timestamp - 47, // 660: forge.PowerOptions.actual_state:type_name -> forge.PowerState - 823, // 661: forge.PowerOptions.actual_state_updated_at:type_name -> google.protobuf.Timestamp - 822, // 662: forge.PowerOptions.host_id:type_name -> common.MachineId - 823, // 663: forge.PowerOptions.next_power_state_fetch_at:type_name -> google.protobuf.Timestamp - 823, // 664: forge.PowerOptions.tried_triggering_on_at:type_name -> google.protobuf.Timestamp - 823, // 665: forge.PowerOptions.wait_until_time_before_performing_next_power_action:type_name -> google.protobuf.Timestamp - 622, // 666: forge.PowerOptionResponse.response:type_name -> forge.PowerOptions - 847, // 667: forge.ComputeAllocation.id:type_name -> common.ComputeAllocationId - 624, // 668: forge.ComputeAllocation.attributes:type_name -> forge.ComputeAllocationAttributes - 219, // 669: forge.ComputeAllocation.metadata:type_name -> forge.Metadata - 847, // 670: forge.CreateComputeAllocationRequest.id:type_name -> common.ComputeAllocationId - 219, // 671: forge.CreateComputeAllocationRequest.metadata:type_name -> forge.Metadata - 624, // 672: forge.CreateComputeAllocationRequest.attributes:type_name -> forge.ComputeAllocationAttributes - 625, // 673: forge.CreateComputeAllocationResponse.allocation:type_name -> forge.ComputeAllocation - 847, // 674: forge.FindComputeAllocationIdsResponse.ids:type_name -> common.ComputeAllocationId - 847, // 675: forge.FindComputeAllocationsByIdsRequest.ids:type_name -> common.ComputeAllocationId - 625, // 676: forge.FindComputeAllocationsByIdsResponse.allocations:type_name -> forge.ComputeAllocation - 625, // 677: forge.UpdateComputeAllocationResponse.allocation:type_name -> forge.ComputeAllocation - 847, // 678: forge.UpdateComputeAllocationRequest.id:type_name -> common.ComputeAllocationId - 219, // 679: forge.UpdateComputeAllocationRequest.metadata:type_name -> forge.Metadata - 624, // 680: forge.UpdateComputeAllocationRequest.attributes:type_name -> forge.ComputeAllocationAttributes - 847, // 681: forge.DeleteComputeAllocationRequest.id:type_name -> common.ComputeAllocationId - 643, // 682: forge.GetRackResponse.rack:type_name -> forge.Rack - 643, // 683: forge.RackList.racks:type_name -> forge.Rack - 830, // 684: forge.RackIdList.rack_ids:type_name -> common.RackId - 830, // 685: forge.RacksByIdsRequest.rack_ids:type_name -> common.RackId - 830, // 686: forge.Rack.id:type_name -> common.RackId - 822, // 687: forge.Rack.compute_trays:type_name -> common.MachineId - 829, // 688: forge.Rack.power_shelves:type_name -> common.PowerShelfId - 832, // 689: forge.Rack.switches:type_name -> common.SwitchId - 823, // 690: forge.Rack.created:type_name -> google.protobuf.Timestamp - 823, // 691: forge.Rack.updated:type_name -> google.protobuf.Timestamp - 823, // 692: forge.Rack.deleted:type_name -> google.protobuf.Timestamp - 838, // 693: forge.Rack.health:type_name -> health.HealthReport - 291, // 694: forge.Rack.health_overrides:type_name -> forge.HealthOverrideOrigin - 219, // 695: forge.Rack.metadata:type_name -> forge.Metadata - 823, // 696: forge.RackStateHistoryRecord.time:type_name -> google.protobuf.Timestamp - 830, // 697: forge.RackStateHistoriesRequest.rack_ids:type_name -> common.RackId - 818, // 698: forge.RackStateHistories.histories:type_name -> forge.RackStateHistories.HistoriesEntry - 644, // 699: forge.RackStateHistoryRecords.records:type_name -> forge.RackStateHistoryRecord - 48, // 700: forge.RackManagerForgeRequest.cmd:type_name -> forge.RackManagerForgeCmd - 837, // 701: forge.MachineNVLinkInfo.domain_uuid:type_name -> common.NVLinkDomainId - 653, // 702: forge.MachineNVLinkInfo.gpus:type_name -> forge.NVLinkGpu - 822, // 703: forge.UpdateMachineNvLinkInfoRequest.machine_id:type_name -> common.MachineId - 651, // 704: forge.UpdateMachineNvLinkInfoRequest.nvlink_info:type_name -> forge.MachineNVLinkInfo - 655, // 705: forge.MachineNVLinkStatusObservation.gpu_status:type_name -> forge.MachineNVLinkGpuStatusObservation - 848, // 706: forge.MachineNVLinkGpuStatusObservation.partition_id:type_name -> common.NVLinkPartitionId - 825, // 707: forge.MachineNVLinkGpuStatusObservation.logical_partition_id:type_name -> common.NVLinkLogicalPartitionId - 837, // 708: forge.MachineNVLinkGpuStatusObservation.domain_id:type_name -> common.NVLinkDomainId - 819, // 709: forge.NmxmBrowseResponse.headers:type_name -> forge.NmxmBrowseResponse.HeadersEntry - 848, // 710: forge.NVLinkPartition.id:type_name -> common.NVLinkPartitionId - 837, // 711: forge.NVLinkPartition.domain_uuid:type_name -> common.NVLinkDomainId - 825, // 712: forge.NVLinkPartition.logical_partition_id:type_name -> common.NVLinkLogicalPartitionId - 658, // 713: forge.NVLinkPartitionList.partitions:type_name -> forge.NVLinkPartition - 831, // 714: forge.NVLinkPartitionQuery.id:type_name -> common.UUID - 660, // 715: forge.NVLinkPartitionQuery.search_config:type_name -> forge.NVLinkPartitionSearchConfig - 848, // 716: forge.NVLinkPartitionsByIdsRequest.partition_ids:type_name -> common.NVLinkPartitionId - 848, // 717: forge.NVLinkPartitionIdList.partition_ids:type_name -> common.NVLinkPartitionId - 219, // 718: forge.NVLinkLogicalPartitionConfig.metadata:type_name -> forge.Metadata - 5, // 719: forge.NVLinkLogicalPartitionStatus.state:type_name -> forge.TenantState - 825, // 720: forge.NVLinkLogicalPartition.id:type_name -> common.NVLinkLogicalPartitionId - 666, // 721: forge.NVLinkLogicalPartition.config:type_name -> forge.NVLinkLogicalPartitionConfig - 667, // 722: forge.NVLinkLogicalPartition.status:type_name -> forge.NVLinkLogicalPartitionStatus - 823, // 723: forge.NVLinkLogicalPartition.created:type_name -> google.protobuf.Timestamp - 668, // 724: forge.NVLinkLogicalPartitionList.partitions:type_name -> forge.NVLinkLogicalPartition - 666, // 725: forge.NVLinkLogicalPartitionCreationRequest.config:type_name -> forge.NVLinkLogicalPartitionConfig - 825, // 726: forge.NVLinkLogicalPartitionCreationRequest.id:type_name -> common.NVLinkLogicalPartitionId - 825, // 727: forge.NVLinkLogicalPartitionDeletionRequest.id:type_name -> common.NVLinkLogicalPartitionId - 825, // 728: forge.NVLinkLogicalPartitionsByIdsRequest.partition_ids:type_name -> common.NVLinkLogicalPartitionId - 825, // 729: forge.NVLinkLogicalPartitionIdList.partition_ids:type_name -> common.NVLinkLogicalPartitionId - 825, // 730: forge.NVLinkLogicalPartitionUpdateRequest.id:type_name -> common.NVLinkLogicalPartitionId - 666, // 731: forge.NVLinkLogicalPartitionUpdateRequest.config:type_name -> forge.NVLinkLogicalPartitionConfig - 316, // 732: forge.CreateBmcUserRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 316, // 733: forge.DeleteBmcUserRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest - 822, // 734: forge.SetFirmwareUpdateTimeWindowRequest.machine_ids:type_name -> common.MachineId - 823, // 735: forge.SetFirmwareUpdateTimeWindowRequest.start_timestamp:type_name -> google.protobuf.Timestamp - 823, // 736: forge.SetFirmwareUpdateTimeWindowRequest.end_timestamp:type_name -> google.protobuf.Timestamp - 686, // 737: forge.ListHostFirmwareResponse.available:type_name -> forge.AvailableHostFirmware - 49, // 738: forge.TrimTableRequest.target:type_name -> forge.TrimTableTarget - 219, // 739: forge.CreateRemediationRequest.metadata:type_name -> forge.Metadata - 849, // 740: forge.CreateRemediationResponse.remediation_id:type_name -> common.RemediationId - 849, // 741: forge.RemediationIdList.remediation_ids:type_name -> common.RemediationId - 693, // 742: forge.RemediationList.remediations:type_name -> forge.Remediation - 849, // 743: forge.Remediation.id:type_name -> common.RemediationId - 219, // 744: forge.Remediation.metadata:type_name -> forge.Metadata - 823, // 745: forge.Remediation.creation_time:type_name -> google.protobuf.Timestamp - 849, // 746: forge.ApproveRemediationRequest.remediation_id:type_name -> common.RemediationId - 849, // 747: forge.RevokeRemediationRequest.remediation_id:type_name -> common.RemediationId - 849, // 748: forge.EnableRemediationRequest.remediation_id:type_name -> common.RemediationId - 849, // 749: forge.DisableRemediationRequest.remediation_id:type_name -> common.RemediationId - 849, // 750: forge.FindAppliedRemediationIdsRequest.remediation_id:type_name -> common.RemediationId - 822, // 751: forge.FindAppliedRemediationIdsRequest.dpu_machine_id:type_name -> common.MachineId - 849, // 752: forge.AppliedRemediationIdList.remediation_ids:type_name -> common.RemediationId - 822, // 753: forge.AppliedRemediationIdList.dpu_machine_ids:type_name -> common.MachineId - 849, // 754: forge.FindAppliedRemediationsRequest.remediation_id:type_name -> common.RemediationId - 822, // 755: forge.FindAppliedRemediationsRequest.dpu_machine_id:type_name -> common.MachineId - 849, // 756: forge.AppliedRemediation.remediation_id:type_name -> common.RemediationId - 822, // 757: forge.AppliedRemediation.dpu_machine_id:type_name -> common.MachineId - 823, // 758: forge.AppliedRemediation.applied_time:type_name -> google.protobuf.Timestamp - 219, // 759: forge.AppliedRemediation.metadata:type_name -> forge.Metadata - 701, // 760: forge.AppliedRemediationList.applied_remediations:type_name -> forge.AppliedRemediation - 822, // 761: forge.GetNextRemediationForMachineRequest.dpu_machine_id:type_name -> common.MachineId - 849, // 762: forge.GetNextRemediationForMachineResponse.remediation_id:type_name -> common.RemediationId - 849, // 763: forge.RemediationAppliedRequest.remediation_id:type_name -> common.RemediationId - 822, // 764: forge.RemediationAppliedRequest.dpu_machine_id:type_name -> common.MachineId - 706, // 765: forge.RemediationAppliedRequest.status:type_name -> forge.RemediationApplicationStatus - 219, // 766: forge.RemediationApplicationStatus.metadata:type_name -> forge.Metadata - 822, // 767: forge.SetPrimaryDpuRequest.host_machine_id:type_name -> common.MachineId - 822, // 768: forge.SetPrimaryDpuRequest.dpu_machine_id:type_name -> common.MachineId - 708, // 769: forge.DpuExtensionServiceCredential.username_password:type_name -> forge.UsernamePassword - 729, // 770: forge.DpuExtensionServiceVersionInfo.observability:type_name -> forge.DpuExtensionServiceObservability - 50, // 771: forge.DpuExtensionService.service_type:type_name -> forge.DpuExtensionServiceType - 711, // 772: forge.DpuExtensionService.latest_version_info:type_name -> forge.DpuExtensionServiceVersionInfo - 50, // 773: forge.CreateDpuExtensionServiceRequest.service_type:type_name -> forge.DpuExtensionServiceType - 710, // 774: forge.CreateDpuExtensionServiceRequest.credential:type_name -> forge.DpuExtensionServiceCredential - 729, // 775: forge.CreateDpuExtensionServiceRequest.observability:type_name -> forge.DpuExtensionServiceObservability - 710, // 776: forge.UpdateDpuExtensionServiceRequest.credential:type_name -> forge.DpuExtensionServiceCredential - 729, // 777: forge.UpdateDpuExtensionServiceRequest.observability:type_name -> forge.DpuExtensionServiceObservability - 50, // 778: forge.DpuExtensionServiceSearchFilter.service_type:type_name -> forge.DpuExtensionServiceType - 712, // 779: forge.DpuExtensionServiceList.services:type_name -> forge.DpuExtensionService - 711, // 780: forge.DpuExtensionServiceVersionInfoList.version_infos:type_name -> forge.DpuExtensionServiceVersionInfo - 725, // 781: forge.FindInstancesByDpuExtensionServiceResponse.instances:type_name -> forge.InstanceDpuExtensionServiceInfo - 726, // 782: forge.DpuExtensionServiceObservabilityConfig.prometheus:type_name -> forge.DpuExtensionServiceObservabilityConfigPrometheus - 727, // 783: forge.DpuExtensionServiceObservabilityConfig.logging:type_name -> forge.DpuExtensionServiceObservabilityConfigLogging - 728, // 784: forge.DpuExtensionServiceObservability.configs:type_name -> forge.DpuExtensionServiceObservabilityConfig - 831, // 785: forge.ScoutStreamApiBoundMessage.flow_uuid:type_name -> common.UUID - 732, // 786: forge.ScoutStreamApiBoundMessage.init:type_name -> forge.ScoutStreamInitRequest - 850, // 787: forge.ScoutStreamApiBoundMessage.mlx_device_lockdown_response:type_name -> mlx_device.MlxDeviceLockdownResponse - 851, // 788: forge.ScoutStreamApiBoundMessage.mlx_device_profile_sync_response:type_name -> mlx_device.MlxDeviceProfileSyncResponse - 852, // 789: forge.ScoutStreamApiBoundMessage.mlx_device_profile_compare_response:type_name -> mlx_device.MlxDeviceProfileCompareResponse - 853, // 790: forge.ScoutStreamApiBoundMessage.mlx_device_info_device_response:type_name -> mlx_device.MlxDeviceInfoDeviceResponse - 854, // 791: forge.ScoutStreamApiBoundMessage.mlx_device_info_report_response:type_name -> mlx_device.MlxDeviceInfoReportResponse - 855, // 792: forge.ScoutStreamApiBoundMessage.mlx_device_registry_list_response:type_name -> mlx_device.MlxDeviceRegistryListResponse - 856, // 793: forge.ScoutStreamApiBoundMessage.mlx_device_registry_show_response:type_name -> mlx_device.MlxDeviceRegistryShowResponse - 857, // 794: forge.ScoutStreamApiBoundMessage.mlx_device_config_query_response:type_name -> mlx_device.MlxDeviceConfigQueryResponse - 858, // 795: forge.ScoutStreamApiBoundMessage.mlx_device_config_set_response:type_name -> mlx_device.MlxDeviceConfigSetResponse - 859, // 796: forge.ScoutStreamApiBoundMessage.mlx_device_config_sync_response:type_name -> mlx_device.MlxDeviceConfigSyncResponse - 860, // 797: forge.ScoutStreamApiBoundMessage.mlx_device_config_compare_response:type_name -> mlx_device.MlxDeviceConfigCompareResponse - 740, // 798: forge.ScoutStreamApiBoundMessage.scout_stream_agent_ping_response:type_name -> forge.ScoutStreamAgentPingResponse - 831, // 799: forge.ScoutStreamScoutBoundMessage.flow_uuid:type_name -> common.UUID - 861, // 800: forge.ScoutStreamScoutBoundMessage.mlx_device_lockdown_lock_request:type_name -> mlx_device.MlxDeviceLockdownLockRequest - 862, // 801: forge.ScoutStreamScoutBoundMessage.mlx_device_lockdown_unlock_request:type_name -> mlx_device.MlxDeviceLockdownUnlockRequest - 863, // 802: forge.ScoutStreamScoutBoundMessage.mlx_device_lockdown_status_request:type_name -> mlx_device.MlxDeviceLockdownStatusRequest - 864, // 803: forge.ScoutStreamScoutBoundMessage.mlx_device_profile_sync_request:type_name -> mlx_device.MlxDeviceProfileSyncRequest - 865, // 804: forge.ScoutStreamScoutBoundMessage.mlx_device_profile_compare_request:type_name -> mlx_device.MlxDeviceProfileCompareRequest - 866, // 805: forge.ScoutStreamScoutBoundMessage.mlx_device_info_device_request:type_name -> mlx_device.MlxDeviceInfoDeviceRequest - 867, // 806: forge.ScoutStreamScoutBoundMessage.mlx_device_info_report_request:type_name -> mlx_device.MlxDeviceInfoReportRequest - 868, // 807: forge.ScoutStreamScoutBoundMessage.mlx_device_registry_list_request:type_name -> mlx_device.MlxDeviceRegistryListRequest - 869, // 808: forge.ScoutStreamScoutBoundMessage.mlx_device_registry_show_request:type_name -> mlx_device.MlxDeviceRegistryShowRequest - 870, // 809: forge.ScoutStreamScoutBoundMessage.mlx_device_config_query_request:type_name -> mlx_device.MlxDeviceConfigQueryRequest - 871, // 810: forge.ScoutStreamScoutBoundMessage.mlx_device_config_set_request:type_name -> mlx_device.MlxDeviceConfigSetRequest - 872, // 811: forge.ScoutStreamScoutBoundMessage.mlx_device_config_sync_request:type_name -> mlx_device.MlxDeviceConfigSyncRequest - 873, // 812: forge.ScoutStreamScoutBoundMessage.mlx_device_config_compare_request:type_name -> mlx_device.MlxDeviceConfigCompareRequest - 739, // 813: forge.ScoutStreamScoutBoundMessage.scout_stream_agent_ping_request:type_name -> forge.ScoutStreamAgentPingRequest - 822, // 814: forge.ScoutStreamInitRequest.machine_id:type_name -> common.MachineId - 741, // 815: forge.ScoutStreamShowConnectionsResponse.scout_stream_connections:type_name -> forge.ScoutStreamConnectionInfo - 822, // 816: forge.ScoutStreamDisconnectRequest.machine_id:type_name -> common.MachineId - 822, // 817: forge.ScoutStreamDisconnectResponse.machine_id:type_name -> common.MachineId - 822, // 818: forge.ScoutStreamAdminPingRequest.machine_id:type_name -> common.MachineId - 742, // 819: forge.ScoutStreamAgentPingResponse.error:type_name -> forge.ScoutStreamError - 822, // 820: forge.ScoutStreamConnectionInfo.machine_id:type_name -> common.MachineId - 52, // 821: forge.ScoutStreamError.status:type_name -> forge.ScoutStreamErrorStatus - 844, // 822: forge.RoutingProfile.route_target_imports:type_name -> common.RouteTarget - 844, // 823: forge.RoutingProfile.route_targets_on_exports:type_name -> common.RouteTarget - 834, // 824: forge.DomainLegacy.id:type_name -> common.DomainId - 823, // 825: forge.DomainLegacy.created:type_name -> google.protobuf.Timestamp - 823, // 826: forge.DomainLegacy.updated:type_name -> google.protobuf.Timestamp - 823, // 827: forge.DomainLegacy.deleted:type_name -> google.protobuf.Timestamp - 744, // 828: forge.DomainListLegacy.domains:type_name -> forge.DomainLegacy - 834, // 829: forge.DomainDeletionLegacy.id:type_name -> common.DomainId - 834, // 830: forge.DomainSearchQueryLegacy.id:type_name -> common.DomainId - 874, // 831: forge.PxeDomain.new_domain:type_name -> dns.Domain - 744, // 832: forge.PxeDomain.legacy_domain:type_name -> forge.DomainLegacy - 822, // 833: forge.MachinePositionQuery.machine_ids:type_name -> common.MachineId - 752, // 834: forge.MachinePositionInfoList.machine_position_info:type_name -> forge.MachinePositionInfo - 822, // 835: forge.MachinePositionInfo.machine_id:type_name -> common.MachineId - 832, // 836: forge.MachinePositionInfo.switch_id:type_name -> common.SwitchId - 829, // 837: forge.MachinePositionInfo.power_shelf_id:type_name -> common.PowerShelfId - 753, // 838: forge.RackFirmwareList.configs:type_name -> forge.RackFirmware - 830, // 839: forge.RackFirmwareApplyRequest.rack_id:type_name -> common.RackId - 762, // 840: forge.RackFirmwareApplyResponse.device_results:type_name -> forge.DeviceUpdateResult - 763, // 841: forge.DeviceUpdateResult.node_jobs:type_name -> forge.NodeJobInfo - 820, // 842: forge.RackFirmwareHistoryResponse.histories:type_name -> forge.RackFirmwareHistoryResponse.HistoriesEntry - 769, // 843: forge.RackFirmwareHistoryRecords.records:type_name -> forge.RackFirmwareHistoryRecord - 822, // 844: forge.ModifyDPFStateRequest.machine_id:type_name -> common.MachineId - 821, // 845: forge.DPFStateResponse.dpf_states:type_name -> forge.DPFStateResponse.DPFState - 822, // 846: forge.GetDPFStateRequest.machine_ids:type_name -> common.MachineId - 53, // 847: forge.ComponentResult.status:type_name -> forge.ComponentManagerStatusCode - 832, // 848: forge.SwitchIdList.ids:type_name -> common.SwitchId - 829, // 849: forge.PowerShelfIdList.ids:type_name -> common.PowerShelfId - 875, // 850: forge.GetComponentInventoryRequest.machine_ids:type_name -> common.MachineIdList - 774, // 851: forge.GetComponentInventoryRequest.switch_ids:type_name -> forge.SwitchIdList - 775, // 852: forge.GetComponentInventoryRequest.power_shelf_ids:type_name -> forge.PowerShelfIdList - 773, // 853: forge.ComponentInventoryEntry.result:type_name -> forge.ComponentResult - 876, // 854: forge.ComponentInventoryEntry.report:type_name -> site_explorer.EndpointExplorationReport - 777, // 855: forge.GetComponentInventoryResponse.entries:type_name -> forge.ComponentInventoryEntry - 875, // 856: forge.ComponentPowerControlRequest.machine_ids:type_name -> common.MachineIdList - 774, // 857: forge.ComponentPowerControlRequest.switch_ids:type_name -> forge.SwitchIdList - 775, // 858: forge.ComponentPowerControlRequest.power_shelf_ids:type_name -> forge.PowerShelfIdList - 877, // 859: forge.ComponentPowerControlRequest.action:type_name -> common.SystemPowerControl - 773, // 860: forge.ComponentPowerControlResponse.results:type_name -> forge.ComponentResult - 773, // 861: forge.FirmwareUpdateStatus.result:type_name -> forge.ComponentResult - 54, // 862: forge.FirmwareUpdateStatus.state:type_name -> forge.FirmwareUpdateState - 823, // 863: forge.FirmwareUpdateStatus.updated_at:type_name -> google.protobuf.Timestamp - 875, // 864: forge.UpdateComputeTrayFirmwareTarget.machine_ids:type_name -> common.MachineIdList - 57, // 865: forge.UpdateComputeTrayFirmwareTarget.components:type_name -> forge.ComputeTrayComponent - 774, // 866: forge.UpdateSwitchFirmwareTarget.switch_ids:type_name -> forge.SwitchIdList - 55, // 867: forge.UpdateSwitchFirmwareTarget.components:type_name -> forge.NvSwitchComponent - 775, // 868: forge.UpdatePowerShelfFirmwareTarget.power_shelf_ids:type_name -> forge.PowerShelfIdList - 56, // 869: forge.UpdatePowerShelfFirmwareTarget.components:type_name -> forge.PowerShelfComponent - 782, // 870: forge.UpdateComponentFirmwareRequest.compute_trays:type_name -> forge.UpdateComputeTrayFirmwareTarget - 783, // 871: forge.UpdateComponentFirmwareRequest.switches:type_name -> forge.UpdateSwitchFirmwareTarget - 784, // 872: forge.UpdateComponentFirmwareRequest.power_shelves:type_name -> forge.UpdatePowerShelfFirmwareTarget - 773, // 873: forge.UpdateComponentFirmwareResponse.results:type_name -> forge.ComponentResult - 875, // 874: forge.GetComponentFirmwareStatusRequest.machine_ids:type_name -> common.MachineIdList - 774, // 875: forge.GetComponentFirmwareStatusRequest.switch_ids:type_name -> forge.SwitchIdList - 775, // 876: forge.GetComponentFirmwareStatusRequest.power_shelf_ids:type_name -> forge.PowerShelfIdList - 781, // 877: forge.GetComponentFirmwareStatusResponse.statuses:type_name -> forge.FirmwareUpdateStatus - 875, // 878: forge.ListComponentFirmwareVersionsRequest.machine_ids:type_name -> common.MachineIdList - 774, // 879: forge.ListComponentFirmwareVersionsRequest.switch_ids:type_name -> forge.SwitchIdList - 775, // 880: forge.ListComponentFirmwareVersionsRequest.power_shelf_ids:type_name -> forge.PowerShelfIdList - 773, // 881: forge.DeviceFirmwareVersions.result:type_name -> forge.ComponentResult - 790, // 882: forge.ListComponentFirmwareVersionsResponse.devices:type_name -> forge.DeviceFirmwareVersions - 832, // 883: forge.AdminForceDeleteSwitchRequest.switch_id:type_name -> common.SwitchId - 829, // 884: forge.AdminForceDeletePowerShelfRequest.power_shelf_id:type_name -> common.PowerShelfId - 831, // 885: forge.AttestationResponse.AttestationDeviceData.nonce:type_name -> common.UUID - 822, // 886: forge.AttestationResponse.AttestationMachineData.machine_id:type_name -> common.MachineId - 823, // 887: forge.AttestationResponse.AttestationMachineData.requested_at:type_name -> google.protobuf.Timestamp - 823, // 888: forge.AttestationResponse.AttestationMachineData.started_at:type_name -> google.protobuf.Timestamp - 823, // 889: forge.AttestationResponse.AttestationMachineData.canceled_at:type_name -> google.protobuf.Timestamp - 796, // 890: forge.AttestationResponse.AttestationMachineData.device_data:type_name -> forge.AttestationResponse.AttestationDeviceData - 801, // 891: forge.DNSMessage.DNSResponse.rrs:type_name -> forge.DNSMessage.DNSResponse.DNSRR - 170, // 892: forge.PowerShelfStateHistories.HistoriesEntry.value:type_name -> forge.PowerShelfStateHistoryRecords - 190, // 893: forge.SwitchStateHistories.HistoriesEntry.value:type_name -> forge.SwitchStateHistoryRecords - 261, // 894: forge.MachineStateHistories.HistoriesEntry.value:type_name -> forge.MachineStateHistoryRecords - 264, // 895: forge.HealthHistories.HistoriesEntry.value:type_name -> forge.HealthHistoryRecords - 60, // 896: forge.MachineCredentialsUpdateRequest.Credentials.credential_purpose:type_name -> forge.MachineCredentialsUpdateRequest.CredentialPurpose - 809, // 897: forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo.pair:type_name -> forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo.KeyValuePair - 62, // 898: forge.MachineCleanupInfo.CleanupStepResult.result:type_name -> forge.MachineCleanupInfo.CleanupResult - 822, // 899: forge.DpuReprovisioningListResponse.DpuReprovisioningListItem.id:type_name -> common.MachineId - 823, // 900: forge.DpuReprovisioningListResponse.DpuReprovisioningListItem.requested_at:type_name -> google.protobuf.Timestamp - 823, // 901: forge.DpuReprovisioningListResponse.DpuReprovisioningListItem.initiated_at:type_name -> google.protobuf.Timestamp - 822, // 902: forge.HostReprovisioningListResponse.HostReprovisioningListItem.id:type_name -> common.MachineId - 823, // 903: forge.HostReprovisioningListResponse.HostReprovisioningListItem.requested_at:type_name -> google.protobuf.Timestamp - 823, // 904: forge.HostReprovisioningListResponse.HostReprovisioningListItem.initiated_at:type_name -> google.protobuf.Timestamp - 647, // 905: forge.RackStateHistories.HistoriesEntry.value:type_name -> forge.RackStateHistoryRecords - 768, // 906: forge.RackFirmwareHistoryResponse.HistoriesEntry.value:type_name -> forge.RackFirmwareHistoryRecords - 822, // 907: forge.DPFStateResponse.DPFState.machine_id:type_name -> common.MachineId - 104, // 908: forge.Forge.Version:input_type -> forge.VersionRequest - 878, // 909: forge.Forge.CreateDomain:input_type -> dns.CreateDomainRequest - 879, // 910: forge.Forge.UpdateDomain:input_type -> dns.UpdateDomainRequest - 880, // 911: forge.Forge.DeleteDomain:input_type -> dns.DomainDeletionRequest - 881, // 912: forge.Forge.FindDomain:input_type -> dns.DomainSearchQuery - 744, // 913: forge.Forge.CreateDomainLegacy:input_type -> forge.DomainLegacy - 744, // 914: forge.Forge.UpdateDomainLegacy:input_type -> forge.DomainLegacy - 746, // 915: forge.Forge.DeleteDomainLegacy:input_type -> forge.DomainDeletionLegacy - 748, // 916: forge.Forge.FindDomainLegacy:input_type -> forge.DomainSearchQueryLegacy - 122, // 917: forge.Forge.CreateVpc:input_type -> forge.VpcCreationRequest - 123, // 918: forge.Forge.UpdateVpc:input_type -> forge.VpcUpdateRequest - 125, // 919: forge.Forge.UpdateVpcVirtualization:input_type -> forge.VpcUpdateVirtualizationRequest - 127, // 920: forge.Forge.DeleteVpc:input_type -> forge.VpcDeletionRequest - 116, // 921: forge.Forge.FindVpcIds:input_type -> forge.VpcSearchFilter - 118, // 922: forge.Forge.FindVpcsByIds:input_type -> forge.VpcsByIdsRequest - 133, // 923: forge.Forge.CreateVpcPrefix:input_type -> forge.VpcPrefixCreationRequest - 134, // 924: forge.Forge.SearchVpcPrefixes:input_type -> forge.VpcPrefixSearchQuery - 135, // 925: forge.Forge.GetVpcPrefixes:input_type -> forge.VpcPrefixGetRequest - 138, // 926: forge.Forge.UpdateVpcPrefix:input_type -> forge.VpcPrefixUpdateRequest - 139, // 927: forge.Forge.DeleteVpcPrefix:input_type -> forge.VpcPrefixDeletionRequest - 144, // 928: forge.Forge.CreateVpcPeering:input_type -> forge.VpcPeeringCreationRequest - 145, // 929: forge.Forge.FindVpcPeeringIds:input_type -> forge.VpcPeeringSearchFilter - 146, // 930: forge.Forge.FindVpcPeeringsByIds:input_type -> forge.VpcPeeringsByIdsRequest - 147, // 931: forge.Forge.DeleteVpcPeering:input_type -> forge.VpcPeeringDeletionRequest - 210, // 932: forge.Forge.FindNetworkSegmentIds:input_type -> forge.NetworkSegmentSearchFilter - 212, // 933: forge.Forge.FindNetworkSegmentsByIds:input_type -> forge.NetworkSegmentsByIdsRequest - 206, // 934: forge.Forge.CreateNetworkSegment:input_type -> forge.NetworkSegmentCreationRequest - 207, // 935: forge.Forge.DeleteNetworkSegment:input_type -> forge.NetworkSegmentDeletionRequest - 115, // 936: forge.Forge.NetworkSegmentsForVpc:input_type -> forge.VpcSearchQuery - 157, // 937: forge.Forge.FindIBPartitionIds:input_type -> forge.IBPartitionSearchFilter - 158, // 938: forge.Forge.FindIBPartitionsByIds:input_type -> forge.IBPartitionsByIdsRequest - 153, // 939: forge.Forge.CreateIBPartition:input_type -> forge.IBPartitionCreationRequest - 154, // 940: forge.Forge.UpdateIBPartition:input_type -> forge.IBPartitionUpdateRequest - 155, // 941: forge.Forge.DeleteIBPartition:input_type -> forge.IBPartitionDeletionRequest - 119, // 942: forge.Forge.IBPartitionsForTenant:input_type -> forge.TenantSearchQuery - 171, // 943: forge.Forge.FindPowerShelves:input_type -> forge.PowerShelfQuery - 172, // 944: forge.Forge.FindPowerShelfIds:input_type -> forge.PowerShelfSearchFilter - 173, // 945: forge.Forge.FindPowerShelvesByIds:input_type -> forge.PowerShelvesByIdsRequest - 165, // 946: forge.Forge.DeletePowerShelf:input_type -> forge.PowerShelfDeletionRequest - 794, // 947: forge.Forge.AdminForceDeletePowerShelf:input_type -> forge.AdminForceDeletePowerShelfRequest - 191, // 948: forge.Forge.FindSwitches:input_type -> forge.SwitchQuery - 192, // 949: forge.Forge.FindSwitchIds:input_type -> forge.SwitchSearchFilter - 193, // 950: forge.Forge.FindSwitchesByIds:input_type -> forge.SwitchesByIdsRequest - 185, // 951: forge.Forge.DeleteSwitch:input_type -> forge.SwitchDeletionRequest - 792, // 952: forge.Forge.AdminForceDeleteSwitch:input_type -> forge.AdminForceDeleteSwitchRequest - 202, // 953: forge.Forge.FindIBFabricIds:input_type -> forge.IBFabricSearchFilter - 223, // 954: forge.Forge.AllocateInstance:input_type -> forge.InstanceAllocationRequest - 224, // 955: forge.Forge.AllocateInstances:input_type -> forge.BatchInstanceAllocationRequest - 255, // 956: forge.Forge.ReleaseInstance:input_type -> forge.InstanceReleaseRequest - 235, // 957: forge.Forge.UpdateInstanceOperatingSystem:input_type -> forge.InstanceOperatingSystemUpdateRequest - 236, // 958: forge.Forge.UpdateInstanceConfig:input_type -> forge.InstanceConfigUpdateRequest - 220, // 959: forge.Forge.FindInstanceIds:input_type -> forge.InstanceSearchFilter - 222, // 960: forge.Forge.FindInstancesByIds:input_type -> forge.InstancesByIdsRequest - 822, // 961: forge.Forge.FindInstanceByMachineID:input_type -> common.MachineId - 322, // 962: forge.Forge.GetManagedHostNetworkConfig:input_type -> forge.ManagedHostNetworkConfigRequest - 385, // 963: forge.Forge.RecordDpuNetworkStatus:input_type -> forge.DpuNetworkStatus - 822, // 964: forge.Forge.ListHealthReportOverrides:input_type -> common.MachineId - 391, // 965: forge.Forge.InsertHealthReportOverride:input_type -> forge.InsertHealthReportOverrideRequest - 396, // 966: forge.Forge.RemoveHealthReportOverride:input_type -> forge.RemoveHealthReportOverrideRequest - 394, // 967: forge.Forge.ListRackHealthReportOverrides:input_type -> forge.ListRackHealthReportOverridesRequest - 392, // 968: forge.Forge.InsertRackHealthReportOverride:input_type -> forge.InsertRackHealthReportOverrideRequest - 393, // 969: forge.Forge.RemoveRackHealthReportOverride:input_type -> forge.RemoveRackHealthReportOverrideRequest - 339, // 970: forge.Forge.DpuAgentUpgradeCheck:input_type -> forge.DpuAgentUpgradeCheckRequest - 341, // 971: forge.Forge.DpuAgentUpgradePolicyAction:input_type -> forge.DpuAgentUpgradePolicyRequest - 882, // 972: forge.Forge.LookupRecord:input_type -> dns.DnsResourceRecordLookupRequest - 799, // 973: forge.Forge.LookupRecordLegacy:input_type -> forge.DNSMessage.DNSQuestion - 883, // 974: forge.Forge.GetAllDomains:input_type -> dns.GetAllDomainsRequest - 884, // 975: forge.Forge.GetAllDomainMetadata:input_type -> dns.DomainMetadataRequest - 215, // 976: forge.Forge.InvokeInstancePower:input_type -> forge.InstancePowerRequest - 366, // 977: forge.Forge.ForgeAgentControl:input_type -> forge.ForgeAgentControlRequest - 368, // 978: forge.Forge.DiscoverMachine:input_type -> forge.MachineDiscoveryInfo - 372, // 979: forge.Forge.RenewMachineCertificate:input_type -> forge.MachineCertificateRenewRequest - 369, // 980: forge.Forge.DiscoveryCompleted:input_type -> forge.MachineDiscoveryCompletedRequest - 370, // 981: forge.Forge.CleanupMachineCompleted:input_type -> forge.MachineCleanupInfo - 377, // 982: forge.Forge.ReportForgeScoutError:input_type -> forge.ForgeScoutErrorReport - 300, // 983: forge.Forge.DiscoverDhcp:input_type -> forge.DhcpDiscovery - 301, // 984: forge.Forge.ExpireDhcpLease:input_type -> forge.ExpireDhcpLeaseRequest - 274, // 985: forge.Forge.AssignStaticAddress:input_type -> forge.AssignStaticAddressRequest - 276, // 986: forge.Forge.RemoveStaticAddress:input_type -> forge.RemoveStaticAddressRequest - 278, // 987: forge.Forge.FindInterfaceAddresses:input_type -> forge.FindInterfaceAddressesRequest - 273, // 988: forge.Forge.FindInterfaces:input_type -> forge.InterfaceSearchQuery - 272, // 989: forge.Forge.DeleteInterface:input_type -> forge.InterfaceDeleteQuery - 432, // 990: forge.Forge.FindIpAddress:input_type -> forge.FindIpAddressRequest - 258, // 991: forge.Forge.FindMachineIds:input_type -> forge.MachineSearchConfig - 257, // 992: forge.Forge.FindMachinesByIds:input_type -> forge.MachinesByIdsRequest - 259, // 993: forge.Forge.FindMachineStateHistories:input_type -> forge.MachineStateHistoriesRequest - 262, // 994: forge.Forge.FindMachineHealthHistories:input_type -> forge.MachineHealthHistoriesRequest - 168, // 995: forge.Forge.FindPowerShelfStateHistories:input_type -> forge.PowerShelfStateHistoriesRequest - 645, // 996: forge.Forge.FindRackStateHistories:input_type -> forge.RackStateHistoriesRequest - 188, // 997: forge.Forge.FindSwitchStateHistories:input_type -> forge.SwitchStateHistoriesRequest - 267, // 998: forge.Forge.FindTenantOrganizationIds:input_type -> forge.TenantSearchFilter - 266, // 999: forge.Forge.FindTenantsByOrganizationIds:input_type -> forge.TenantByOrganizationIdsRequest - 875, // 1000: forge.Forge.FindConnectedDevicesByDpuMachineIds:input_type -> common.MachineIdList - 453, // 1001: forge.Forge.FindMachineIdsByBmcIps:input_type -> forge.BmcIpList - 454, // 1002: forge.Forge.FindMacAddressByBmcIp:input_type -> forge.BmcIp - 434, // 1003: forge.Forge.IdentifyUuid:input_type -> forge.IdentifyUuidRequest - 436, // 1004: forge.Forge.IdentifyMac:input_type -> forge.IdentifyMacRequest - 438, // 1005: forge.Forge.IdentifySerial:input_type -> forge.IdentifySerialRequest - 362, // 1006: forge.Forge.GetBMCMetaData:input_type -> forge.BMCMetaDataGetRequest - 364, // 1007: forge.Forge.UpdateMachineCredentials:input_type -> forge.MachineCredentialsUpdateRequest - 379, // 1008: forge.Forge.GetPxeInstructions:input_type -> forge.PxeInstructionRequest - 383, // 1009: forge.Forge.GetCloudInitInstructions:input_type -> forge.CloudInitInstructionsRequest - 107, // 1010: forge.Forge.Echo:input_type -> forge.EchoRequest - 401, // 1011: forge.Forge.CreateTenant:input_type -> forge.CreateTenantRequest - 405, // 1012: forge.Forge.FindTenant:input_type -> forge.FindTenantRequest - 403, // 1013: forge.Forge.UpdateTenant:input_type -> forge.UpdateTenantRequest - 411, // 1014: forge.Forge.CreateTenantKeyset:input_type -> forge.CreateTenantKeysetRequest - 418, // 1015: forge.Forge.FindTenantKeysetIds:input_type -> forge.TenantKeysetSearchFilter - 420, // 1016: forge.Forge.FindTenantKeysetsByIds:input_type -> forge.TenantKeysetsByIdsRequest - 414, // 1017: forge.Forge.UpdateTenantKeyset:input_type -> forge.UpdateTenantKeysetRequest - 416, // 1018: forge.Forge.DeleteTenantKeyset:input_type -> forge.DeleteTenantKeysetRequest - 421, // 1019: forge.Forge.ValidateTenantPublicKey:input_type -> forge.ValidateTenantPublicKeyRequest - 307, // 1020: forge.Forge.GetBmcCredentials:input_type -> forge.GetBmcCredentialsRequest - 337, // 1021: forge.Forge.GetAllManagedHostNetworkStatus:input_type -> forge.ManagedHostNetworkStatusRequest - 310, // 1022: forge.Forge.GetSiteExplorationReport:input_type -> forge.GetSiteExplorationRequest - 311, // 1023: forge.Forge.ClearSiteExplorationError:input_type -> forge.ClearSiteExplorationErrorRequest - 316, // 1024: forge.Forge.IsBmcInManagedHost:input_type -> forge.BmcEndpointRequest - 316, // 1025: forge.Forge.BmcCredentialStatus:input_type -> forge.BmcEndpointRequest - 316, // 1026: forge.Forge.Explore:input_type -> forge.BmcEndpointRequest - 312, // 1027: forge.Forge.ReExploreEndpoint:input_type -> forge.ReExploreEndpointRequest - 313, // 1028: forge.Forge.DeleteExploredEndpoint:input_type -> forge.DeleteExploredEndpointRequest - 314, // 1029: forge.Forge.PauseExploredEndpointRemediation:input_type -> forge.PauseExploredEndpointRemediationRequest - 885, // 1030: forge.Forge.FindExploredEndpointIds:input_type -> site_explorer.ExploredEndpointSearchFilter - 886, // 1031: forge.Forge.FindExploredEndpointsByIds:input_type -> site_explorer.ExploredEndpointsByIdsRequest - 887, // 1032: forge.Forge.FindExploredManagedHostIds:input_type -> site_explorer.ExploredManagedHostSearchFilter - 888, // 1033: forge.Forge.FindExploredManagedHostsByIds:input_type -> site_explorer.ExploredManagedHostsByIdsRequest - 320, // 1034: forge.Forge.UpdateMachineHardwareInfo:input_type -> forge.UpdateMachineHardwareInfoRequest - 343, // 1035: forge.Forge.AdminForceDeleteMachine:input_type -> forge.AdminForceDeleteMachineRequest - 423, // 1036: forge.Forge.AdminListResourcePools:input_type -> forge.ListResourcePoolsRequest - 426, // 1037: forge.Forge.AdminGrowResourcePool:input_type -> forge.GrowResourcePoolRequest - 284, // 1038: forge.Forge.UpdateMachineMetadata:input_type -> forge.MachineMetadataUpdateRequest - 285, // 1039: forge.Forge.UpdateRackMetadata:input_type -> forge.RackMetadataUpdateRequest - 286, // 1040: forge.Forge.UpdateSwitchMetadata:input_type -> forge.SwitchMetadataUpdateRequest - 287, // 1041: forge.Forge.UpdatePowerShelfMetadata:input_type -> forge.PowerShelfMetadataUpdateRequest - 652, // 1042: forge.Forge.UpdateMachineNvLinkInfo:input_type -> forge.UpdateMachineNvLinkInfoRequest - 430, // 1043: forge.Forge.SetMaintenance:input_type -> forge.MaintenanceRequest - 431, // 1044: forge.Forge.SetDynamicConfig:input_type -> forge.SetDynamicConfigRequest - 440, // 1045: forge.Forge.TriggerDpuReprovisioning:input_type -> forge.DpuReprovisioningRequest - 441, // 1046: forge.Forge.ListDpuWaitingForReprovisioning:input_type -> forge.DpuReprovisioningListRequest - 443, // 1047: forge.Forge.TriggerHostReprovisioning:input_type -> forge.HostReprovisioningRequest - 444, // 1048: forge.Forge.ListHostsWaitingForReprovisioning:input_type -> forge.HostReprovisioningListRequest - 822, // 1049: forge.Forge.MarkManualFirmwareUpgradeComplete:input_type -> common.MachineId - 447, // 1050: forge.Forge.GetDpuInfoList:input_type -> forge.GetDpuInfoListRequest - 839, // 1051: forge.Forge.GetMachineBootOverride:input_type -> common.MachineInterfaceId - 450, // 1052: forge.Forge.SetMachineBootOverride:input_type -> forge.MachineBootOverride - 839, // 1053: forge.Forge.ClearMachineBootOverride:input_type -> common.MachineInterfaceId - 459, // 1054: forge.Forge.GetNetworkTopology:input_type -> forge.NetworkTopologyRequest - 460, // 1055: forge.Forge.FindNetworkDevicesByDeviceIds:input_type -> forge.NetworkDeviceIdList - 100, // 1056: forge.Forge.CreateCredential:input_type -> forge.CredentialCreationRequest - 101, // 1057: forge.Forge.DeleteCredential:input_type -> forge.CredentialDeletionRequest - 889, // 1058: forge.Forge.GetRouteServers:input_type -> google.protobuf.Empty - 462, // 1059: forge.Forge.AddRouteServers:input_type -> forge.RouteServers - 462, // 1060: forge.Forge.RemoveRouteServers:input_type -> forge.RouteServers - 462, // 1061: forge.Forge.ReplaceRouteServers:input_type -> forge.RouteServers - 288, // 1062: forge.Forge.UpdateAgentReportedInventory:input_type -> forge.DpuAgentInventoryReport - 252, // 1063: forge.Forge.UpdateInstancePhoneHomeLastContact:input_type -> forge.InstancePhoneHomeLastContactRequest - 465, // 1064: forge.Forge.SetHostUefiPassword:input_type -> forge.SetHostUefiPasswordRequest - 467, // 1065: forge.Forge.ClearHostUefiPassword:input_type -> forge.ClearHostUefiPasswordRequest - 476, // 1066: forge.Forge.AddExpectedMachine:input_type -> forge.ExpectedMachine - 477, // 1067: forge.Forge.DeleteExpectedMachine:input_type -> forge.ExpectedMachineRequest - 476, // 1068: forge.Forge.UpdateExpectedMachine:input_type -> forge.ExpectedMachine - 477, // 1069: forge.Forge.GetExpectedMachine:input_type -> forge.ExpectedMachineRequest - 889, // 1070: forge.Forge.GetAllExpectedMachines:input_type -> google.protobuf.Empty - 755, // 1071: forge.Forge.CreateRackFirmware:input_type -> forge.RackFirmwareCreateRequest - 756, // 1072: forge.Forge.GetRackFirmware:input_type -> forge.RackFirmwareGetRequest - 757, // 1073: forge.Forge.ListRackFirmware:input_type -> forge.RackFirmwareListRequest - 759, // 1074: forge.Forge.DeleteRackFirmware:input_type -> forge.RackFirmwareDeleteRequest - 760, // 1075: forge.Forge.ApplyRackFirmware:input_type -> forge.RackFirmwareApplyRequest - 764, // 1076: forge.Forge.GetRackFirmwareJobStatus:input_type -> forge.RackFirmwareJobStatusRequest - 766, // 1077: forge.Forge.GetRackFirmwareHistory:input_type -> forge.RackFirmwareHistoryRequest - 478, // 1078: forge.Forge.ReplaceAllExpectedMachines:input_type -> forge.ExpectedMachineList - 889, // 1079: forge.Forge.DeleteAllExpectedMachines:input_type -> google.protobuf.Empty - 889, // 1080: forge.Forge.GetAllExpectedMachinesLinked:input_type -> google.protobuf.Empty - 481, // 1081: forge.Forge.CreateExpectedMachines:input_type -> forge.BatchExpectedMachineOperationRequest - 481, // 1082: forge.Forge.UpdateExpectedMachines:input_type -> forge.BatchExpectedMachineOperationRequest - 174, // 1083: forge.Forge.AddExpectedPowerShelf:input_type -> forge.ExpectedPowerShelf - 175, // 1084: forge.Forge.DeleteExpectedPowerShelf:input_type -> forge.ExpectedPowerShelfRequest - 174, // 1085: forge.Forge.UpdateExpectedPowerShelf:input_type -> forge.ExpectedPowerShelf - 175, // 1086: forge.Forge.GetExpectedPowerShelf:input_type -> forge.ExpectedPowerShelfRequest - 889, // 1087: forge.Forge.GetAllExpectedPowerShelves:input_type -> google.protobuf.Empty - 176, // 1088: forge.Forge.ReplaceAllExpectedPowerShelves:input_type -> forge.ExpectedPowerShelfList - 889, // 1089: forge.Forge.DeleteAllExpectedPowerShelves:input_type -> google.protobuf.Empty - 889, // 1090: forge.Forge.GetAllExpectedPowerShelvesLinked:input_type -> google.protobuf.Empty - 194, // 1091: forge.Forge.AddExpectedSwitch:input_type -> forge.ExpectedSwitch - 195, // 1092: forge.Forge.DeleteExpectedSwitch:input_type -> forge.ExpectedSwitchRequest - 194, // 1093: forge.Forge.UpdateExpectedSwitch:input_type -> forge.ExpectedSwitch - 195, // 1094: forge.Forge.GetExpectedSwitch:input_type -> forge.ExpectedSwitchRequest - 889, // 1095: forge.Forge.GetAllExpectedSwitches:input_type -> google.protobuf.Empty - 196, // 1096: forge.Forge.ReplaceAllExpectedSwitches:input_type -> forge.ExpectedSwitchList - 889, // 1097: forge.Forge.DeleteAllExpectedSwitches:input_type -> google.protobuf.Empty - 889, // 1098: forge.Forge.GetAllExpectedSwitchesLinked:input_type -> google.protobuf.Empty - 199, // 1099: forge.Forge.AddExpectedRack:input_type -> forge.ExpectedRack - 200, // 1100: forge.Forge.DeleteExpectedRack:input_type -> forge.ExpectedRackRequest - 199, // 1101: forge.Forge.UpdateExpectedRack:input_type -> forge.ExpectedRack - 200, // 1102: forge.Forge.GetExpectedRack:input_type -> forge.ExpectedRackRequest - 889, // 1103: forge.Forge.GetAllExpectedRacks:input_type -> google.protobuf.Empty - 201, // 1104: forge.Forge.ReplaceAllExpectedRacks:input_type -> forge.ExpectedRackList - 889, // 1105: forge.Forge.DeleteAllExpectedRacks:input_type -> google.protobuf.Empty - 98, // 1106: forge.Forge.AttestQuote:input_type -> forge.AttestQuoteRequest - 538, // 1107: forge.Forge.CreateInstanceType:input_type -> forge.CreateInstanceTypeRequest - 540, // 1108: forge.Forge.FindInstanceTypeIds:input_type -> forge.FindInstanceTypeIdsRequest - 542, // 1109: forge.Forge.FindInstanceTypesByIds:input_type -> forge.FindInstanceTypesByIdsRequest - 547, // 1110: forge.Forge.UpdateInstanceType:input_type -> forge.UpdateInstanceTypeRequest - 544, // 1111: forge.Forge.DeleteInstanceType:input_type -> forge.DeleteInstanceTypeRequest - 548, // 1112: forge.Forge.AssociateMachinesWithInstanceType:input_type -> forge.AssociateMachinesWithInstanceTypeRequest - 550, // 1113: forge.Forge.RemoveMachineInstanceTypeAssociation:input_type -> forge.RemoveMachineInstanceTypeAssociationRequest - 890, // 1114: forge.Forge.CreateMeasurementBundle:input_type -> measured_boot.CreateMeasurementBundleRequest - 891, // 1115: forge.Forge.DeleteMeasurementBundle:input_type -> measured_boot.DeleteMeasurementBundleRequest - 892, // 1116: forge.Forge.RenameMeasurementBundle:input_type -> measured_boot.RenameMeasurementBundleRequest - 893, // 1117: forge.Forge.UpdateMeasurementBundle:input_type -> measured_boot.UpdateMeasurementBundleRequest - 894, // 1118: forge.Forge.ShowMeasurementBundle:input_type -> measured_boot.ShowMeasurementBundleRequest - 895, // 1119: forge.Forge.ShowMeasurementBundles:input_type -> measured_boot.ShowMeasurementBundlesRequest - 896, // 1120: forge.Forge.ListMeasurementBundles:input_type -> measured_boot.ListMeasurementBundlesRequest - 897, // 1121: forge.Forge.ListMeasurementBundleMachines:input_type -> measured_boot.ListMeasurementBundleMachinesRequest - 898, // 1122: forge.Forge.FindClosestBundleMatch:input_type -> measured_boot.FindClosestBundleMatchRequest - 899, // 1123: forge.Forge.DeleteMeasurementJournal:input_type -> measured_boot.DeleteMeasurementJournalRequest - 900, // 1124: forge.Forge.ShowMeasurementJournal:input_type -> measured_boot.ShowMeasurementJournalRequest - 901, // 1125: forge.Forge.ShowMeasurementJournals:input_type -> measured_boot.ShowMeasurementJournalsRequest - 902, // 1126: forge.Forge.ListMeasurementJournal:input_type -> measured_boot.ListMeasurementJournalRequest - 903, // 1127: forge.Forge.AttestCandidateMachine:input_type -> measured_boot.AttestCandidateMachineRequest - 904, // 1128: forge.Forge.ShowCandidateMachine:input_type -> measured_boot.ShowCandidateMachineRequest - 905, // 1129: forge.Forge.ShowCandidateMachines:input_type -> measured_boot.ShowCandidateMachinesRequest - 906, // 1130: forge.Forge.ListCandidateMachines:input_type -> measured_boot.ListCandidateMachinesRequest - 907, // 1131: forge.Forge.CreateMeasurementSystemProfile:input_type -> measured_boot.CreateMeasurementSystemProfileRequest - 908, // 1132: forge.Forge.DeleteMeasurementSystemProfile:input_type -> measured_boot.DeleteMeasurementSystemProfileRequest - 909, // 1133: forge.Forge.RenameMeasurementSystemProfile:input_type -> measured_boot.RenameMeasurementSystemProfileRequest - 910, // 1134: forge.Forge.ShowMeasurementSystemProfile:input_type -> measured_boot.ShowMeasurementSystemProfileRequest - 911, // 1135: forge.Forge.ShowMeasurementSystemProfiles:input_type -> measured_boot.ShowMeasurementSystemProfilesRequest - 912, // 1136: forge.Forge.ListMeasurementSystemProfiles:input_type -> measured_boot.ListMeasurementSystemProfilesRequest - 913, // 1137: forge.Forge.ListMeasurementSystemProfileBundles:input_type -> measured_boot.ListMeasurementSystemProfileBundlesRequest - 914, // 1138: forge.Forge.ListMeasurementSystemProfileMachines:input_type -> measured_boot.ListMeasurementSystemProfileMachinesRequest - 915, // 1139: forge.Forge.CreateMeasurementReport:input_type -> measured_boot.CreateMeasurementReportRequest - 916, // 1140: forge.Forge.DeleteMeasurementReport:input_type -> measured_boot.DeleteMeasurementReportRequest - 917, // 1141: forge.Forge.PromoteMeasurementReport:input_type -> measured_boot.PromoteMeasurementReportRequest - 918, // 1142: forge.Forge.RevokeMeasurementReport:input_type -> measured_boot.RevokeMeasurementReportRequest - 919, // 1143: forge.Forge.ShowMeasurementReportForId:input_type -> measured_boot.ShowMeasurementReportForIdRequest - 920, // 1144: forge.Forge.ShowMeasurementReportsForMachine:input_type -> measured_boot.ShowMeasurementReportsForMachineRequest - 921, // 1145: forge.Forge.ShowMeasurementReports:input_type -> measured_boot.ShowMeasurementReportsRequest - 922, // 1146: forge.Forge.ListMeasurementReport:input_type -> measured_boot.ListMeasurementReportRequest - 923, // 1147: forge.Forge.MatchMeasurementReport:input_type -> measured_boot.MatchMeasurementReportRequest - 924, // 1148: forge.Forge.ImportSiteMeasurements:input_type -> measured_boot.ImportSiteMeasurementsRequest - 925, // 1149: forge.Forge.ExportSiteMeasurements:input_type -> measured_boot.ExportSiteMeasurementsRequest - 926, // 1150: forge.Forge.AddMeasurementTrustedMachine:input_type -> measured_boot.AddMeasurementTrustedMachineRequest - 927, // 1151: forge.Forge.RemoveMeasurementTrustedMachine:input_type -> measured_boot.RemoveMeasurementTrustedMachineRequest - 928, // 1152: forge.Forge.AddMeasurementTrustedProfile:input_type -> measured_boot.AddMeasurementTrustedProfileRequest - 929, // 1153: forge.Forge.RemoveMeasurementTrustedProfile:input_type -> measured_boot.RemoveMeasurementTrustedProfileRequest - 930, // 1154: forge.Forge.ListMeasurementTrustedMachines:input_type -> measured_boot.ListMeasurementTrustedMachinesRequest - 931, // 1155: forge.Forge.ListMeasurementTrustedProfiles:input_type -> measured_boot.ListMeasurementTrustedProfilesRequest - 932, // 1156: forge.Forge.ListAttestationSummary:input_type -> measured_boot.ListAttestationSummaryRequest - 569, // 1157: forge.Forge.CreateNetworkSecurityGroup:input_type -> forge.CreateNetworkSecurityGroupRequest - 571, // 1158: forge.Forge.FindNetworkSecurityGroupIds:input_type -> forge.FindNetworkSecurityGroupIdsRequest - 573, // 1159: forge.Forge.FindNetworkSecurityGroupsByIds:input_type -> forge.FindNetworkSecurityGroupsByIdsRequest - 576, // 1160: forge.Forge.UpdateNetworkSecurityGroup:input_type -> forge.UpdateNetworkSecurityGroupRequest - 577, // 1161: forge.Forge.DeleteNetworkSecurityGroup:input_type -> forge.DeleteNetworkSecurityGroupRequest - 583, // 1162: forge.Forge.GetNetworkSecurityGroupPropagationStatus:input_type -> forge.GetNetworkSecurityGroupPropagationStatusRequest - 586, // 1163: forge.Forge.GetNetworkSecurityGroupAttachments:input_type -> forge.GetNetworkSecurityGroupAttachmentsRequest - 469, // 1164: forge.Forge.CreateOsImage:input_type -> forge.OsImageAttributes - 473, // 1165: forge.Forge.DeleteOsImage:input_type -> forge.DeleteOsImageRequest - 471, // 1166: forge.Forge.ListOsImage:input_type -> forge.ListOsImageRequest - 831, // 1167: forge.Forge.GetOsImage:input_type -> common.UUID - 469, // 1168: forge.Forge.UpdateOsImage:input_type -> forge.OsImageAttributes - 485, // 1169: forge.Forge.RebootCompleted:input_type -> forge.MachineRebootCompletedRequest - 489, // 1170: forge.Forge.PersistValidationResult:input_type -> forge.MachineValidationResultPostRequest - 491, // 1171: forge.Forge.GetMachineValidationResults:input_type -> forge.MachineValidationGetRequest - 486, // 1172: forge.Forge.MachineValidationCompleted:input_type -> forge.MachineValidationCompletedRequest - 494, // 1173: forge.Forge.MachineSetAutoUpdate:input_type -> forge.MachineSetAutoUpdateRequest - 496, // 1174: forge.Forge.GetMachineValidationExternalConfig:input_type -> forge.GetMachineValidationExternalConfigRequest - 499, // 1175: forge.Forge.GetMachineValidationExternalConfigs:input_type -> forge.GetMachineValidationExternalConfigsRequest - 501, // 1176: forge.Forge.AddUpdateMachineValidationExternalConfig:input_type -> forge.AddUpdateMachineValidationExternalConfigRequest - 510, // 1177: forge.Forge.GetMachineValidationRuns:input_type -> forge.MachineValidationRunListGetRequest - 502, // 1178: forge.Forge.RemoveMachineValidationExternalConfig:input_type -> forge.RemoveMachineValidationExternalConfigRequest - 513, // 1179: forge.Forge.GetMachineValidationTests:input_type -> forge.MachineValidationTestsGetRequest - 515, // 1180: forge.Forge.AddMachineValidationTest:input_type -> forge.MachineValidationTestAddRequest - 514, // 1181: forge.Forge.UpdateMachineValidationTest:input_type -> forge.MachineValidationTestUpdateRequest - 518, // 1182: forge.Forge.MachineValidationTestVerfied:input_type -> forge.MachineValidationTestVerfiedRequest - 522, // 1183: forge.Forge.MachineValidationTestNextVersion:input_type -> forge.MachineValidationTestNextVersionRequest - 523, // 1184: forge.Forge.MachineValidationTestEnableDisableTest:input_type -> forge.MachineValidationTestEnableDisableTestRequest - 525, // 1185: forge.Forge.UpdateMachineValidationRun:input_type -> forge.MachineValidationRunRequest - 356, // 1186: forge.Forge.AdminBmcReset:input_type -> forge.AdminBmcResetRequest - 505, // 1187: forge.Forge.AdminPowerControl:input_type -> forge.AdminPowerControlRequest - 316, // 1188: forge.Forge.DisableSecureBoot:input_type -> forge.BmcEndpointRequest - 346, // 1189: forge.Forge.Lockdown:input_type -> forge.LockdownRequest - 348, // 1190: forge.Forge.LockdownStatus:input_type -> forge.LockdownStatusRequest - 350, // 1191: forge.Forge.MachineSetup:input_type -> forge.MachineSetupRequest - 352, // 1192: forge.Forge.SetDpuFirstBootOrder:input_type -> forge.SetDpuFirstBootOrderRequest - 678, // 1193: forge.Forge.CreateBmcUser:input_type -> forge.CreateBmcUserRequest - 680, // 1194: forge.Forge.DeleteBmcUser:input_type -> forge.DeleteBmcUserRequest - 358, // 1195: forge.Forge.EnableInfiniteBoot:input_type -> forge.EnableInfiniteBootRequest - 360, // 1196: forge.Forge.IsInfiniteBootEnabled:input_type -> forge.IsInfiniteBootEnabledRequest - 503, // 1197: forge.Forge.OnDemandMachineValidation:input_type -> forge.MachineValidationOnDemandRequest - 94, // 1198: forge.Forge.TpmAddCaCert:input_type -> forge.TpmCaCert - 889, // 1199: forge.Forge.TpmShowCaCerts:input_type -> google.protobuf.Empty - 889, // 1200: forge.Forge.TpmShowUnmatchedEkCerts:input_type -> google.protobuf.Empty - 91, // 1201: forge.Forge.TpmDeleteCaCert:input_type -> forge.TpmCaCertId - 552, // 1202: forge.Forge.RedfishBrowse:input_type -> forge.RedfishBrowseRequest - 554, // 1203: forge.Forge.RedfishListActions:input_type -> forge.RedfishListActionsRequest - 559, // 1204: forge.Forge.RedfishCreateAction:input_type -> forge.RedfishCreateActionRequest - 561, // 1205: forge.Forge.RedfishApproveAction:input_type -> forge.RedfishActionID - 561, // 1206: forge.Forge.RedfishApplyAction:input_type -> forge.RedfishActionID - 561, // 1207: forge.Forge.RedfishCancelAction:input_type -> forge.RedfishActionID - 565, // 1208: forge.Forge.UfmBrowse:input_type -> forge.UfmBrowseRequest - 589, // 1209: forge.Forge.GetDesiredFirmwareVersions:input_type -> forge.GetDesiredFirmwareVersionsRequest - 605, // 1210: forge.Forge.CreateSku:input_type -> forge.SkuList - 822, // 1211: forge.Forge.GenerateSkuFromMachine:input_type -> common.MachineId - 822, // 1212: forge.Forge.VerifySkuForMachine:input_type -> common.MachineId - 603, // 1213: forge.Forge.AssignSkuToMachine:input_type -> forge.SkuMachinePair - 604, // 1214: forge.Forge.RemoveSkuAssociation:input_type -> forge.RemoveSkuRequest - 606, // 1215: forge.Forge.DeleteSku:input_type -> forge.SkuIdList - 889, // 1216: forge.Forge.GetAllSkuIds:input_type -> google.protobuf.Empty - 608, // 1217: forge.Forge.FindSkusByIds:input_type -> forge.SkusByIdsRequest - 619, // 1218: forge.Forge.UpdateSkuMetadata:input_type -> forge.SkuUpdateMetadataRequest - 602, // 1219: forge.Forge.ReplaceSku:input_type -> forge.Sku - 328, // 1220: forge.Forge.GetManagedHostQuarantineState:input_type -> forge.GetManagedHostQuarantineStateRequest - 330, // 1221: forge.Forge.SetManagedHostQuarantineState:input_type -> forge.SetManagedHostQuarantineStateRequest - 332, // 1222: forge.Forge.ClearManagedHostQuarantineState:input_type -> forge.ClearManagedHostQuarantineStateRequest - 822, // 1223: forge.Forge.ResetHostReprovisioning:input_type -> common.MachineId - 319, // 1224: forge.Forge.CopyBfbToDpuRshim:input_type -> forge.CopyBfbToDpuRshimRequest - 889, // 1225: forge.Forge.GetAllDpaInterfaceIds:input_type -> google.protobuf.Empty - 613, // 1226: forge.Forge.FindDpaInterfacesByIds:input_type -> forge.DpaInterfacesByIdsRequest - 611, // 1227: forge.Forge.CreateDpaInterface:input_type -> forge.DpaInterfaceCreationRequest - 611, // 1228: forge.Forge.EnsureDpaInterface:input_type -> forge.DpaInterfaceCreationRequest - 617, // 1229: forge.Forge.DeleteDpaInterface:input_type -> forge.DpaInterfaceDeletionRequest - 616, // 1230: forge.Forge.SetDpaNetworkObservationStatus:input_type -> forge.DpaNetworkObservationSetRequest - 620, // 1231: forge.Forge.GetPowerOptions:input_type -> forge.PowerOptionRequest - 621, // 1232: forge.Forge.UpdatePowerOption:input_type -> forge.PowerOptionUpdateRequest - 316, // 1233: forge.Forge.AllowIngestionAndPowerOn:input_type -> forge.BmcEndpointRequest - 316, // 1234: forge.Forge.DetermineMachineIngestionState:input_type -> forge.BmcEndpointRequest - 640, // 1235: forge.Forge.FindRackIds:input_type -> forge.RackSearchFilter - 642, // 1236: forge.Forge.FindRacksByIds:input_type -> forge.RacksByIdsRequest - 637, // 1237: forge.Forge.GetRack:input_type -> forge.GetRackRequest - 648, // 1238: forge.Forge.DeleteRack:input_type -> forge.DeleteRackRequest - 626, // 1239: forge.Forge.CreateComputeAllocation:input_type -> forge.CreateComputeAllocationRequest - 628, // 1240: forge.Forge.FindComputeAllocationIds:input_type -> forge.FindComputeAllocationIdsRequest - 630, // 1241: forge.Forge.FindComputeAllocationsByIds:input_type -> forge.FindComputeAllocationsByIdsRequest - 633, // 1242: forge.Forge.UpdateComputeAllocation:input_type -> forge.UpdateComputeAllocationRequest - 634, // 1243: forge.Forge.DeleteComputeAllocation:input_type -> forge.DeleteComputeAllocationRequest - 682, // 1244: forge.Forge.SetFirmwareUpdateTimeWindow:input_type -> forge.SetFirmwareUpdateTimeWindowRequest - 684, // 1245: forge.Forge.ListHostFirmware:input_type -> forge.ListHostFirmwareRequest - 933, // 1246: forge.Forge.PublishMlxDeviceReport:input_type -> mlx_device.PublishMlxDeviceReportRequest - 934, // 1247: forge.Forge.PublishMlxObservationReport:input_type -> mlx_device.PublishMlxObservationReportRequest - 687, // 1248: forge.Forge.TrimTable:input_type -> forge.TrimTableRequest - 689, // 1249: forge.Forge.CreateRemediation:input_type -> forge.CreateRemediationRequest - 694, // 1250: forge.Forge.ApproveRemediation:input_type -> forge.ApproveRemediationRequest - 695, // 1251: forge.Forge.RevokeRemediation:input_type -> forge.RevokeRemediationRequest - 696, // 1252: forge.Forge.EnableRemediation:input_type -> forge.EnableRemediationRequest - 697, // 1253: forge.Forge.DisableRemediation:input_type -> forge.DisableRemediationRequest - 889, // 1254: forge.Forge.FindRemediationIds:input_type -> google.protobuf.Empty - 691, // 1255: forge.Forge.FindRemediationsByIds:input_type -> forge.RemediationIdList - 698, // 1256: forge.Forge.FindAppliedRemediationIds:input_type -> forge.FindAppliedRemediationIdsRequest - 700, // 1257: forge.Forge.FindAppliedRemediations:input_type -> forge.FindAppliedRemediationsRequest - 703, // 1258: forge.Forge.GetNextRemediationForMachine:input_type -> forge.GetNextRemediationForMachineRequest - 705, // 1259: forge.Forge.RemediationApplied:input_type -> forge.RemediationAppliedRequest - 707, // 1260: forge.Forge.SetPrimaryDpu:input_type -> forge.SetPrimaryDpuRequest - 713, // 1261: forge.Forge.CreateDpuExtensionService:input_type -> forge.CreateDpuExtensionServiceRequest - 714, // 1262: forge.Forge.UpdateDpuExtensionService:input_type -> forge.UpdateDpuExtensionServiceRequest - 715, // 1263: forge.Forge.DeleteDpuExtensionService:input_type -> forge.DeleteDpuExtensionServiceRequest - 717, // 1264: forge.Forge.FindDpuExtensionServiceIds:input_type -> forge.DpuExtensionServiceSearchFilter - 719, // 1265: forge.Forge.FindDpuExtensionServicesByIds:input_type -> forge.DpuExtensionServicesByIdsRequest - 721, // 1266: forge.Forge.GetDpuExtensionServiceVersionsInfo:input_type -> forge.GetDpuExtensionServiceVersionsInfoRequest - 723, // 1267: forge.Forge.FindInstancesByDpuExtensionService:input_type -> forge.FindInstancesByDpuExtensionServiceRequest - 70, // 1268: forge.Forge.TriggerMachineAttestation:input_type -> forge.AttestationData - 70, // 1269: forge.Forge.CancelMachineAttestation:input_type -> forge.AttestationData - 69, // 1270: forge.Forge.FindMachineIdsUnderAttestation:input_type -> forge.AttestationIdsRequest - 71, // 1271: forge.Forge.FindMachinesUnderAttestation:input_type -> forge.AttestationMachineList - 73, // 1272: forge.Forge.SignMachineIdentity:input_type -> forge.MachineIdentityRequest - 75, // 1273: forge.Forge.GetIdentityConfiguration:input_type -> forge.GetIdentityConfigRequest - 77, // 1274: forge.Forge.SetIdentityConfiguration:input_type -> forge.IdentityConfigRequest - 75, // 1275: forge.Forge.DeleteIdentityConfiguration:input_type -> forge.GetIdentityConfigRequest - 82, // 1276: forge.Forge.GetTokenDelegation:input_type -> forge.GetTokenDelegationRequest - 84, // 1277: forge.Forge.SetTokenDelegation:input_type -> forge.TokenDelegationRequest - 82, // 1278: forge.Forge.DeleteTokenDelegation:input_type -> forge.GetTokenDelegationRequest - 87, // 1279: forge.Forge.GetJWKS:input_type -> forge.JwksRequest - 88, // 1280: forge.Forge.GetOpenIDConfiguration:input_type -> forge.OpenIdConfigRequest - 730, // 1281: forge.Forge.ScoutStream:input_type -> forge.ScoutStreamApiBoundMessage - 733, // 1282: forge.Forge.ScoutStreamShowConnections:input_type -> forge.ScoutStreamShowConnectionsRequest - 735, // 1283: forge.Forge.ScoutStreamDisconnect:input_type -> forge.ScoutStreamDisconnectRequest - 737, // 1284: forge.Forge.ScoutStreamPing:input_type -> forge.ScoutStreamAdminPingRequest - 935, // 1285: forge.Forge.MlxAdminProfileSync:input_type -> mlx_device.MlxAdminProfileSyncRequest - 936, // 1286: forge.Forge.MlxAdminProfileShow:input_type -> mlx_device.MlxAdminProfileShowRequest - 937, // 1287: forge.Forge.MlxAdminProfileCompare:input_type -> mlx_device.MlxAdminProfileCompareRequest - 938, // 1288: forge.Forge.MlxAdminProfileList:input_type -> mlx_device.MlxAdminProfileListRequest - 939, // 1289: forge.Forge.MlxAdminLockdownLock:input_type -> mlx_device.MlxAdminLockdownLockRequest - 940, // 1290: forge.Forge.MlxAdminLockdownUnlock:input_type -> mlx_device.MlxAdminLockdownUnlockRequest - 941, // 1291: forge.Forge.MlxAdminLockdownStatus:input_type -> mlx_device.MlxAdminLockdownStatusRequest - 942, // 1292: forge.Forge.MlxAdminShowDevice:input_type -> mlx_device.MlxAdminDeviceInfoRequest - 943, // 1293: forge.Forge.MlxAdminShowMachine:input_type -> mlx_device.MlxAdminDeviceReportRequest - 944, // 1294: forge.Forge.MlxAdminRegistryList:input_type -> mlx_device.MlxAdminRegistryListRequest - 945, // 1295: forge.Forge.MlxAdminRegistryShow:input_type -> mlx_device.MlxAdminRegistryShowRequest - 946, // 1296: forge.Forge.MlxAdminConfigQuery:input_type -> mlx_device.MlxAdminConfigQueryRequest - 947, // 1297: forge.Forge.MlxAdminConfigSet:input_type -> mlx_device.MlxAdminConfigSetRequest - 948, // 1298: forge.Forge.MlxAdminConfigSync:input_type -> mlx_device.MlxAdminConfigSyncRequest - 949, // 1299: forge.Forge.MlxAdminConfigCompare:input_type -> mlx_device.MlxAdminConfigCompareRequest - 662, // 1300: forge.Forge.FindNVLinkPartitionIds:input_type -> forge.NVLinkPartitionSearchFilter - 663, // 1301: forge.Forge.FindNVLinkPartitionsByIds:input_type -> forge.NVLinkPartitionsByIdsRequest - 119, // 1302: forge.Forge.NVLinkPartitionsForTenant:input_type -> forge.TenantSearchQuery - 673, // 1303: forge.Forge.FindNVLinkLogicalPartitionIds:input_type -> forge.NVLinkLogicalPartitionSearchFilter - 674, // 1304: forge.Forge.FindNVLinkLogicalPartitionsByIds:input_type -> forge.NVLinkLogicalPartitionsByIdsRequest - 670, // 1305: forge.Forge.CreateNVLinkLogicalPartition:input_type -> forge.NVLinkLogicalPartitionCreationRequest - 676, // 1306: forge.Forge.UpdateNVLinkLogicalPartition:input_type -> forge.NVLinkLogicalPartitionUpdateRequest - 671, // 1307: forge.Forge.DeleteNVLinkLogicalPartition:input_type -> forge.NVLinkLogicalPartitionDeletionRequest - 119, // 1308: forge.Forge.NVLinkLogicalPartitionsForTenant:input_type -> forge.TenantSearchQuery - 750, // 1309: forge.Forge.GetMachinePositionInfo:input_type -> forge.MachinePositionQuery - 656, // 1310: forge.Forge.NmxmBrowse:input_type -> forge.NmxmBrowseRequest - 770, // 1311: forge.Forge.ModifyDPFState:input_type -> forge.ModifyDPFStateRequest - 772, // 1312: forge.Forge.GetDPFState:input_type -> forge.GetDPFStateRequest - 779, // 1313: forge.Forge.ComponentPowerControl:input_type -> forge.ComponentPowerControlRequest - 776, // 1314: forge.Forge.GetComponentInventory:input_type -> forge.GetComponentInventoryRequest - 785, // 1315: forge.Forge.UpdateComponentFirmware:input_type -> forge.UpdateComponentFirmwareRequest - 787, // 1316: forge.Forge.GetComponentFirmwareStatus:input_type -> forge.GetComponentFirmwareStatusRequest - 789, // 1317: forge.Forge.ListComponentFirmwareVersions:input_type -> forge.ListComponentFirmwareVersionsRequest - 105, // 1318: forge.Forge.Version:output_type -> forge.BuildInfo - 874, // 1319: forge.Forge.CreateDomain:output_type -> dns.Domain - 874, // 1320: forge.Forge.UpdateDomain:output_type -> dns.Domain - 950, // 1321: forge.Forge.DeleteDomain:output_type -> dns.DomainDeletionResult - 951, // 1322: forge.Forge.FindDomain:output_type -> dns.DomainList - 744, // 1323: forge.Forge.CreateDomainLegacy:output_type -> forge.DomainLegacy - 744, // 1324: forge.Forge.UpdateDomainLegacy:output_type -> forge.DomainLegacy - 747, // 1325: forge.Forge.DeleteDomainLegacy:output_type -> forge.DomainDeletionResultLegacy - 745, // 1326: forge.Forge.FindDomainLegacy:output_type -> forge.DomainListLegacy - 121, // 1327: forge.Forge.CreateVpc:output_type -> forge.Vpc - 124, // 1328: forge.Forge.UpdateVpc:output_type -> forge.VpcUpdateResult - 126, // 1329: forge.Forge.UpdateVpcVirtualization:output_type -> forge.VpcUpdateVirtualizationResult - 128, // 1330: forge.Forge.DeleteVpc:output_type -> forge.VpcDeletionResult - 117, // 1331: forge.Forge.FindVpcIds:output_type -> forge.VpcIdList - 129, // 1332: forge.Forge.FindVpcsByIds:output_type -> forge.VpcList - 130, // 1333: forge.Forge.CreateVpcPrefix:output_type -> forge.VpcPrefix - 136, // 1334: forge.Forge.SearchVpcPrefixes:output_type -> forge.VpcPrefixIdList - 137, // 1335: forge.Forge.GetVpcPrefixes:output_type -> forge.VpcPrefixList - 130, // 1336: forge.Forge.UpdateVpcPrefix:output_type -> forge.VpcPrefix - 140, // 1337: forge.Forge.DeleteVpcPrefix:output_type -> forge.VpcPrefixDeletionResult - 141, // 1338: forge.Forge.CreateVpcPeering:output_type -> forge.VpcPeering - 142, // 1339: forge.Forge.FindVpcPeeringIds:output_type -> forge.VpcPeeringIdList - 143, // 1340: forge.Forge.FindVpcPeeringsByIds:output_type -> forge.VpcPeeringList - 148, // 1341: forge.Forge.DeleteVpcPeering:output_type -> forge.VpcPeeringDeletionResult - 211, // 1342: forge.Forge.FindNetworkSegmentIds:output_type -> forge.NetworkSegmentIdList - 304, // 1343: forge.Forge.FindNetworkSegmentsByIds:output_type -> forge.NetworkSegmentList - 205, // 1344: forge.Forge.CreateNetworkSegment:output_type -> forge.NetworkSegment - 208, // 1345: forge.Forge.DeleteNetworkSegment:output_type -> forge.NetworkSegmentDeletionResult - 304, // 1346: forge.Forge.NetworkSegmentsForVpc:output_type -> forge.NetworkSegmentList - 159, // 1347: forge.Forge.FindIBPartitionIds:output_type -> forge.IBPartitionIdList - 152, // 1348: forge.Forge.FindIBPartitionsByIds:output_type -> forge.IBPartitionList - 151, // 1349: forge.Forge.CreateIBPartition:output_type -> forge.IBPartition - 151, // 1350: forge.Forge.UpdateIBPartition:output_type -> forge.IBPartition - 156, // 1351: forge.Forge.DeleteIBPartition:output_type -> forge.IBPartitionDeletionResult - 152, // 1352: forge.Forge.IBPartitionsForTenant:output_type -> forge.IBPartitionList - 163, // 1353: forge.Forge.FindPowerShelves:output_type -> forge.PowerShelfList - 775, // 1354: forge.Forge.FindPowerShelfIds:output_type -> forge.PowerShelfIdList - 163, // 1355: forge.Forge.FindPowerShelvesByIds:output_type -> forge.PowerShelfList - 166, // 1356: forge.Forge.DeletePowerShelf:output_type -> forge.PowerShelfDeletionResult - 795, // 1357: forge.Forge.AdminForceDeletePowerShelf:output_type -> forge.AdminForceDeletePowerShelfResponse - 183, // 1358: forge.Forge.FindSwitches:output_type -> forge.SwitchList - 774, // 1359: forge.Forge.FindSwitchIds:output_type -> forge.SwitchIdList - 183, // 1360: forge.Forge.FindSwitchesByIds:output_type -> forge.SwitchList - 186, // 1361: forge.Forge.DeleteSwitch:output_type -> forge.SwitchDeletionResult - 793, // 1362: forge.Forge.AdminForceDeleteSwitch:output_type -> forge.AdminForceDeleteSwitchResponse - 203, // 1363: forge.Forge.FindIBFabricIds:output_type -> forge.IBFabricIdList - 244, // 1364: forge.Forge.AllocateInstance:output_type -> forge.Instance - 225, // 1365: forge.Forge.AllocateInstances:output_type -> forge.BatchInstanceAllocationResponse - 256, // 1366: forge.Forge.ReleaseInstance:output_type -> forge.InstanceReleaseResult - 244, // 1367: forge.Forge.UpdateInstanceOperatingSystem:output_type -> forge.Instance - 244, // 1368: forge.Forge.UpdateInstanceConfig:output_type -> forge.Instance - 221, // 1369: forge.Forge.FindInstanceIds:output_type -> forge.InstanceIdList - 217, // 1370: forge.Forge.FindInstancesByIds:output_type -> forge.InstanceList - 217, // 1371: forge.Forge.FindInstanceByMachineID:output_type -> forge.InstanceList - 323, // 1372: forge.Forge.GetManagedHostNetworkConfig:output_type -> forge.ManagedHostNetworkConfigResponse - 889, // 1373: forge.Forge.RecordDpuNetworkStatus:output_type -> google.protobuf.Empty - 395, // 1374: forge.Forge.ListHealthReportOverrides:output_type -> forge.ListHealthReportOverrideResponse - 889, // 1375: forge.Forge.InsertHealthReportOverride:output_type -> google.protobuf.Empty - 889, // 1376: forge.Forge.RemoveHealthReportOverride:output_type -> google.protobuf.Empty - 395, // 1377: forge.Forge.ListRackHealthReportOverrides:output_type -> forge.ListHealthReportOverrideResponse - 889, // 1378: forge.Forge.InsertRackHealthReportOverride:output_type -> google.protobuf.Empty - 889, // 1379: forge.Forge.RemoveRackHealthReportOverride:output_type -> google.protobuf.Empty - 340, // 1380: forge.Forge.DpuAgentUpgradeCheck:output_type -> forge.DpuAgentUpgradeCheckResponse - 342, // 1381: forge.Forge.DpuAgentUpgradePolicyAction:output_type -> forge.DpuAgentUpgradePolicyResponse - 952, // 1382: forge.Forge.LookupRecord:output_type -> dns.DnsResourceRecordLookupResponse - 800, // 1383: forge.Forge.LookupRecordLegacy:output_type -> forge.DNSMessage.DNSResponse - 953, // 1384: forge.Forge.GetAllDomains:output_type -> dns.GetAllDomainsResponse - 954, // 1385: forge.Forge.GetAllDomainMetadata:output_type -> dns.DomainMetadataResponse - 216, // 1386: forge.Forge.InvokeInstancePower:output_type -> forge.InstancePowerResult - 367, // 1387: forge.Forge.ForgeAgentControl:output_type -> forge.ForgeAgentControlResponse - 374, // 1388: forge.Forge.DiscoverMachine:output_type -> forge.MachineDiscoveryResult - 373, // 1389: forge.Forge.RenewMachineCertificate:output_type -> forge.MachineCertificateResult - 375, // 1390: forge.Forge.DiscoveryCompleted:output_type -> forge.MachineDiscoveryCompletedResponse - 376, // 1391: forge.Forge.CleanupMachineCompleted:output_type -> forge.MachineCleanupResult - 378, // 1392: forge.Forge.ReportForgeScoutError:output_type -> forge.ForgeScoutErrorReportResult - 303, // 1393: forge.Forge.DiscoverDhcp:output_type -> forge.DhcpRecord - 302, // 1394: forge.Forge.ExpireDhcpLease:output_type -> forge.ExpireDhcpLeaseResponse - 275, // 1395: forge.Forge.AssignStaticAddress:output_type -> forge.AssignStaticAddressResponse - 277, // 1396: forge.Forge.RemoveStaticAddress:output_type -> forge.RemoveStaticAddressResponse - 280, // 1397: forge.Forge.FindInterfaceAddresses:output_type -> forge.FindInterfaceAddressesResponse - 270, // 1398: forge.Forge.FindInterfaces:output_type -> forge.InterfaceList - 889, // 1399: forge.Forge.DeleteInterface:output_type -> google.protobuf.Empty - 433, // 1400: forge.Forge.FindIpAddress:output_type -> forge.FindIpAddressResponse - 875, // 1401: forge.Forge.FindMachineIds:output_type -> common.MachineIdList - 271, // 1402: forge.Forge.FindMachinesByIds:output_type -> forge.MachineList - 260, // 1403: forge.Forge.FindMachineStateHistories:output_type -> forge.MachineStateHistories - 263, // 1404: forge.Forge.FindMachineHealthHistories:output_type -> forge.HealthHistories - 169, // 1405: forge.Forge.FindPowerShelfStateHistories:output_type -> forge.PowerShelfStateHistories - 646, // 1406: forge.Forge.FindRackStateHistories:output_type -> forge.RackStateHistories - 189, // 1407: forge.Forge.FindSwitchStateHistories:output_type -> forge.SwitchStateHistories - 269, // 1408: forge.Forge.FindTenantOrganizationIds:output_type -> forge.TenantOrganizationIdList - 268, // 1409: forge.Forge.FindTenantsByOrganizationIds:output_type -> forge.TenantList - 452, // 1410: forge.Forge.FindConnectedDevicesByDpuMachineIds:output_type -> forge.ConnectedDeviceList - 456, // 1411: forge.Forge.FindMachineIdsByBmcIps:output_type -> forge.MachineIdBmcIpPairs - 455, // 1412: forge.Forge.FindMacAddressByBmcIp:output_type -> forge.MacAddressBmcIp - 435, // 1413: forge.Forge.IdentifyUuid:output_type -> forge.IdentifyUuidResponse - 437, // 1414: forge.Forge.IdentifyMac:output_type -> forge.IdentifyMacResponse - 439, // 1415: forge.Forge.IdentifySerial:output_type -> forge.IdentifySerialResponse - 363, // 1416: forge.Forge.GetBMCMetaData:output_type -> forge.BMCMetaDataGetResponse - 365, // 1417: forge.Forge.UpdateMachineCredentials:output_type -> forge.MachineCredentialsUpdateResponse - 380, // 1418: forge.Forge.GetPxeInstructions:output_type -> forge.PxeInstructions - 384, // 1419: forge.Forge.GetCloudInitInstructions:output_type -> forge.CloudInitInstructions - 108, // 1420: forge.Forge.Echo:output_type -> forge.EchoResponse - 402, // 1421: forge.Forge.CreateTenant:output_type -> forge.CreateTenantResponse - 406, // 1422: forge.Forge.FindTenant:output_type -> forge.FindTenantResponse - 404, // 1423: forge.Forge.UpdateTenant:output_type -> forge.UpdateTenantResponse - 412, // 1424: forge.Forge.CreateTenantKeyset:output_type -> forge.CreateTenantKeysetResponse - 419, // 1425: forge.Forge.FindTenantKeysetIds:output_type -> forge.TenantKeysetIdList - 413, // 1426: forge.Forge.FindTenantKeysetsByIds:output_type -> forge.TenantKeySetList - 415, // 1427: forge.Forge.UpdateTenantKeyset:output_type -> forge.UpdateTenantKeysetResponse - 417, // 1428: forge.Forge.DeleteTenantKeyset:output_type -> forge.DeleteTenantKeysetResponse - 422, // 1429: forge.Forge.ValidateTenantPublicKey:output_type -> forge.ValidateTenantPublicKeyResponse - 308, // 1430: forge.Forge.GetBmcCredentials:output_type -> forge.GetBmcCredentialsResponse - 338, // 1431: forge.Forge.GetAllManagedHostNetworkStatus:output_type -> forge.ManagedHostNetworkStatusResponse - 955, // 1432: forge.Forge.GetSiteExplorationReport:output_type -> site_explorer.SiteExplorationReport - 889, // 1433: forge.Forge.ClearSiteExplorationError:output_type -> google.protobuf.Empty - 511, // 1434: forge.Forge.IsBmcInManagedHost:output_type -> forge.IsBmcInManagedHostResponse - 512, // 1435: forge.Forge.BmcCredentialStatus:output_type -> forge.BmcCredentialStatusResponse - 876, // 1436: forge.Forge.Explore:output_type -> site_explorer.EndpointExplorationReport - 889, // 1437: forge.Forge.ReExploreEndpoint:output_type -> google.protobuf.Empty - 315, // 1438: forge.Forge.DeleteExploredEndpoint:output_type -> forge.DeleteExploredEndpointResponse - 889, // 1439: forge.Forge.PauseExploredEndpointRemediation:output_type -> google.protobuf.Empty - 956, // 1440: forge.Forge.FindExploredEndpointIds:output_type -> site_explorer.ExploredEndpointIdList - 957, // 1441: forge.Forge.FindExploredEndpointsByIds:output_type -> site_explorer.ExploredEndpointList - 958, // 1442: forge.Forge.FindExploredManagedHostIds:output_type -> site_explorer.ExploredManagedHostIdList - 959, // 1443: forge.Forge.FindExploredManagedHostsByIds:output_type -> site_explorer.ExploredManagedHostList - 889, // 1444: forge.Forge.UpdateMachineHardwareInfo:output_type -> google.protobuf.Empty - 344, // 1445: forge.Forge.AdminForceDeleteMachine:output_type -> forge.AdminForceDeleteMachineResponse - 424, // 1446: forge.Forge.AdminListResourcePools:output_type -> forge.ResourcePools - 427, // 1447: forge.Forge.AdminGrowResourcePool:output_type -> forge.GrowResourcePoolResponse - 889, // 1448: forge.Forge.UpdateMachineMetadata:output_type -> google.protobuf.Empty - 889, // 1449: forge.Forge.UpdateRackMetadata:output_type -> google.protobuf.Empty - 889, // 1450: forge.Forge.UpdateSwitchMetadata:output_type -> google.protobuf.Empty - 889, // 1451: forge.Forge.UpdatePowerShelfMetadata:output_type -> google.protobuf.Empty - 889, // 1452: forge.Forge.UpdateMachineNvLinkInfo:output_type -> google.protobuf.Empty - 889, // 1453: forge.Forge.SetMaintenance:output_type -> google.protobuf.Empty - 889, // 1454: forge.Forge.SetDynamicConfig:output_type -> google.protobuf.Empty - 889, // 1455: forge.Forge.TriggerDpuReprovisioning:output_type -> google.protobuf.Empty - 442, // 1456: forge.Forge.ListDpuWaitingForReprovisioning:output_type -> forge.DpuReprovisioningListResponse - 889, // 1457: forge.Forge.TriggerHostReprovisioning:output_type -> google.protobuf.Empty - 445, // 1458: forge.Forge.ListHostsWaitingForReprovisioning:output_type -> forge.HostReprovisioningListResponse - 889, // 1459: forge.Forge.MarkManualFirmwareUpgradeComplete:output_type -> google.protobuf.Empty - 448, // 1460: forge.Forge.GetDpuInfoList:output_type -> forge.GetDpuInfoListResponse - 450, // 1461: forge.Forge.GetMachineBootOverride:output_type -> forge.MachineBootOverride - 889, // 1462: forge.Forge.SetMachineBootOverride:output_type -> google.protobuf.Empty - 889, // 1463: forge.Forge.ClearMachineBootOverride:output_type -> google.protobuf.Empty - 461, // 1464: forge.Forge.GetNetworkTopology:output_type -> forge.NetworkTopologyData - 461, // 1465: forge.Forge.FindNetworkDevicesByDeviceIds:output_type -> forge.NetworkTopologyData - 102, // 1466: forge.Forge.CreateCredential:output_type -> forge.CredentialCreationResult - 103, // 1467: forge.Forge.DeleteCredential:output_type -> forge.CredentialDeletionResult - 463, // 1468: forge.Forge.GetRouteServers:output_type -> forge.RouteServerEntries - 889, // 1469: forge.Forge.AddRouteServers:output_type -> google.protobuf.Empty - 889, // 1470: forge.Forge.RemoveRouteServers:output_type -> google.protobuf.Empty - 889, // 1471: forge.Forge.ReplaceRouteServers:output_type -> google.protobuf.Empty - 889, // 1472: forge.Forge.UpdateAgentReportedInventory:output_type -> google.protobuf.Empty - 253, // 1473: forge.Forge.UpdateInstancePhoneHomeLastContact:output_type -> forge.InstancePhoneHomeLastContactResponse - 466, // 1474: forge.Forge.SetHostUefiPassword:output_type -> forge.SetHostUefiPasswordResponse - 468, // 1475: forge.Forge.ClearHostUefiPassword:output_type -> forge.ClearHostUefiPasswordResponse - 889, // 1476: forge.Forge.AddExpectedMachine:output_type -> google.protobuf.Empty - 889, // 1477: forge.Forge.DeleteExpectedMachine:output_type -> google.protobuf.Empty - 889, // 1478: forge.Forge.UpdateExpectedMachine:output_type -> google.protobuf.Empty - 476, // 1479: forge.Forge.GetExpectedMachine:output_type -> forge.ExpectedMachine - 478, // 1480: forge.Forge.GetAllExpectedMachines:output_type -> forge.ExpectedMachineList - 753, // 1481: forge.Forge.CreateRackFirmware:output_type -> forge.RackFirmware - 753, // 1482: forge.Forge.GetRackFirmware:output_type -> forge.RackFirmware - 758, // 1483: forge.Forge.ListRackFirmware:output_type -> forge.RackFirmwareList - 889, // 1484: forge.Forge.DeleteRackFirmware:output_type -> google.protobuf.Empty - 761, // 1485: forge.Forge.ApplyRackFirmware:output_type -> forge.RackFirmwareApplyResponse - 765, // 1486: forge.Forge.GetRackFirmwareJobStatus:output_type -> forge.RackFirmwareJobStatusResponse - 767, // 1487: forge.Forge.GetRackFirmwareHistory:output_type -> forge.RackFirmwareHistoryResponse - 889, // 1488: forge.Forge.ReplaceAllExpectedMachines:output_type -> google.protobuf.Empty - 889, // 1489: forge.Forge.DeleteAllExpectedMachines:output_type -> google.protobuf.Empty - 479, // 1490: forge.Forge.GetAllExpectedMachinesLinked:output_type -> forge.LinkedExpectedMachineList - 483, // 1491: forge.Forge.CreateExpectedMachines:output_type -> forge.BatchExpectedMachineOperationResponse - 483, // 1492: forge.Forge.UpdateExpectedMachines:output_type -> forge.BatchExpectedMachineOperationResponse - 889, // 1493: forge.Forge.AddExpectedPowerShelf:output_type -> google.protobuf.Empty - 889, // 1494: forge.Forge.DeleteExpectedPowerShelf:output_type -> google.protobuf.Empty - 889, // 1495: forge.Forge.UpdateExpectedPowerShelf:output_type -> google.protobuf.Empty - 174, // 1496: forge.Forge.GetExpectedPowerShelf:output_type -> forge.ExpectedPowerShelf - 176, // 1497: forge.Forge.GetAllExpectedPowerShelves:output_type -> forge.ExpectedPowerShelfList - 889, // 1498: forge.Forge.ReplaceAllExpectedPowerShelves:output_type -> google.protobuf.Empty - 889, // 1499: forge.Forge.DeleteAllExpectedPowerShelves:output_type -> google.protobuf.Empty - 177, // 1500: forge.Forge.GetAllExpectedPowerShelvesLinked:output_type -> forge.LinkedExpectedPowerShelfList - 889, // 1501: forge.Forge.AddExpectedSwitch:output_type -> google.protobuf.Empty - 889, // 1502: forge.Forge.DeleteExpectedSwitch:output_type -> google.protobuf.Empty - 889, // 1503: forge.Forge.UpdateExpectedSwitch:output_type -> google.protobuf.Empty - 194, // 1504: forge.Forge.GetExpectedSwitch:output_type -> forge.ExpectedSwitch - 196, // 1505: forge.Forge.GetAllExpectedSwitches:output_type -> forge.ExpectedSwitchList - 889, // 1506: forge.Forge.ReplaceAllExpectedSwitches:output_type -> google.protobuf.Empty - 889, // 1507: forge.Forge.DeleteAllExpectedSwitches:output_type -> google.protobuf.Empty - 197, // 1508: forge.Forge.GetAllExpectedSwitchesLinked:output_type -> forge.LinkedExpectedSwitchList - 889, // 1509: forge.Forge.AddExpectedRack:output_type -> google.protobuf.Empty - 889, // 1510: forge.Forge.DeleteExpectedRack:output_type -> google.protobuf.Empty - 889, // 1511: forge.Forge.UpdateExpectedRack:output_type -> google.protobuf.Empty - 199, // 1512: forge.Forge.GetExpectedRack:output_type -> forge.ExpectedRack - 201, // 1513: forge.Forge.GetAllExpectedRacks:output_type -> forge.ExpectedRackList - 889, // 1514: forge.Forge.ReplaceAllExpectedRacks:output_type -> google.protobuf.Empty - 889, // 1515: forge.Forge.DeleteAllExpectedRacks:output_type -> google.protobuf.Empty - 99, // 1516: forge.Forge.AttestQuote:output_type -> forge.AttestQuoteResponse - 539, // 1517: forge.Forge.CreateInstanceType:output_type -> forge.CreateInstanceTypeResponse - 541, // 1518: forge.Forge.FindInstanceTypeIds:output_type -> forge.FindInstanceTypeIdsResponse - 543, // 1519: forge.Forge.FindInstanceTypesByIds:output_type -> forge.FindInstanceTypesByIdsResponse - 546, // 1520: forge.Forge.UpdateInstanceType:output_type -> forge.UpdateInstanceTypeResponse - 545, // 1521: forge.Forge.DeleteInstanceType:output_type -> forge.DeleteInstanceTypeResponse - 549, // 1522: forge.Forge.AssociateMachinesWithInstanceType:output_type -> forge.AssociateMachinesWithInstanceTypeResponse - 551, // 1523: forge.Forge.RemoveMachineInstanceTypeAssociation:output_type -> forge.RemoveMachineInstanceTypeAssociationResponse - 960, // 1524: forge.Forge.CreateMeasurementBundle:output_type -> measured_boot.CreateMeasurementBundleResponse - 961, // 1525: forge.Forge.DeleteMeasurementBundle:output_type -> measured_boot.DeleteMeasurementBundleResponse - 962, // 1526: forge.Forge.RenameMeasurementBundle:output_type -> measured_boot.RenameMeasurementBundleResponse - 963, // 1527: forge.Forge.UpdateMeasurementBundle:output_type -> measured_boot.UpdateMeasurementBundleResponse - 964, // 1528: forge.Forge.ShowMeasurementBundle:output_type -> measured_boot.ShowMeasurementBundleResponse - 965, // 1529: forge.Forge.ShowMeasurementBundles:output_type -> measured_boot.ShowMeasurementBundlesResponse - 966, // 1530: forge.Forge.ListMeasurementBundles:output_type -> measured_boot.ListMeasurementBundlesResponse - 967, // 1531: forge.Forge.ListMeasurementBundleMachines:output_type -> measured_boot.ListMeasurementBundleMachinesResponse - 964, // 1532: forge.Forge.FindClosestBundleMatch:output_type -> measured_boot.ShowMeasurementBundleResponse - 968, // 1533: forge.Forge.DeleteMeasurementJournal:output_type -> measured_boot.DeleteMeasurementJournalResponse - 969, // 1534: forge.Forge.ShowMeasurementJournal:output_type -> measured_boot.ShowMeasurementJournalResponse - 970, // 1535: forge.Forge.ShowMeasurementJournals:output_type -> measured_boot.ShowMeasurementJournalsResponse - 971, // 1536: forge.Forge.ListMeasurementJournal:output_type -> measured_boot.ListMeasurementJournalResponse - 972, // 1537: forge.Forge.AttestCandidateMachine:output_type -> measured_boot.AttestCandidateMachineResponse - 973, // 1538: forge.Forge.ShowCandidateMachine:output_type -> measured_boot.ShowCandidateMachineResponse - 974, // 1539: forge.Forge.ShowCandidateMachines:output_type -> measured_boot.ShowCandidateMachinesResponse - 975, // 1540: forge.Forge.ListCandidateMachines:output_type -> measured_boot.ListCandidateMachinesResponse - 976, // 1541: forge.Forge.CreateMeasurementSystemProfile:output_type -> measured_boot.CreateMeasurementSystemProfileResponse - 977, // 1542: forge.Forge.DeleteMeasurementSystemProfile:output_type -> measured_boot.DeleteMeasurementSystemProfileResponse - 978, // 1543: forge.Forge.RenameMeasurementSystemProfile:output_type -> measured_boot.RenameMeasurementSystemProfileResponse - 979, // 1544: forge.Forge.ShowMeasurementSystemProfile:output_type -> measured_boot.ShowMeasurementSystemProfileResponse - 980, // 1545: forge.Forge.ShowMeasurementSystemProfiles:output_type -> measured_boot.ShowMeasurementSystemProfilesResponse - 981, // 1546: forge.Forge.ListMeasurementSystemProfiles:output_type -> measured_boot.ListMeasurementSystemProfilesResponse - 982, // 1547: forge.Forge.ListMeasurementSystemProfileBundles:output_type -> measured_boot.ListMeasurementSystemProfileBundlesResponse - 983, // 1548: forge.Forge.ListMeasurementSystemProfileMachines:output_type -> measured_boot.ListMeasurementSystemProfileMachinesResponse - 984, // 1549: forge.Forge.CreateMeasurementReport:output_type -> measured_boot.CreateMeasurementReportResponse - 985, // 1550: forge.Forge.DeleteMeasurementReport:output_type -> measured_boot.DeleteMeasurementReportResponse - 986, // 1551: forge.Forge.PromoteMeasurementReport:output_type -> measured_boot.PromoteMeasurementReportResponse - 987, // 1552: forge.Forge.RevokeMeasurementReport:output_type -> measured_boot.RevokeMeasurementReportResponse - 988, // 1553: forge.Forge.ShowMeasurementReportForId:output_type -> measured_boot.ShowMeasurementReportForIdResponse - 989, // 1554: forge.Forge.ShowMeasurementReportsForMachine:output_type -> measured_boot.ShowMeasurementReportsForMachineResponse - 990, // 1555: forge.Forge.ShowMeasurementReports:output_type -> measured_boot.ShowMeasurementReportsResponse - 991, // 1556: forge.Forge.ListMeasurementReport:output_type -> measured_boot.ListMeasurementReportResponse - 992, // 1557: forge.Forge.MatchMeasurementReport:output_type -> measured_boot.MatchMeasurementReportResponse - 993, // 1558: forge.Forge.ImportSiteMeasurements:output_type -> measured_boot.ImportSiteMeasurementsResponse - 994, // 1559: forge.Forge.ExportSiteMeasurements:output_type -> measured_boot.ExportSiteMeasurementsResponse - 995, // 1560: forge.Forge.AddMeasurementTrustedMachine:output_type -> measured_boot.AddMeasurementTrustedMachineResponse - 996, // 1561: forge.Forge.RemoveMeasurementTrustedMachine:output_type -> measured_boot.RemoveMeasurementTrustedMachineResponse - 997, // 1562: forge.Forge.AddMeasurementTrustedProfile:output_type -> measured_boot.AddMeasurementTrustedProfileResponse - 998, // 1563: forge.Forge.RemoveMeasurementTrustedProfile:output_type -> measured_boot.RemoveMeasurementTrustedProfileResponse - 999, // 1564: forge.Forge.ListMeasurementTrustedMachines:output_type -> measured_boot.ListMeasurementTrustedMachinesResponse - 1000, // 1565: forge.Forge.ListMeasurementTrustedProfiles:output_type -> measured_boot.ListMeasurementTrustedProfilesResponse - 1001, // 1566: forge.Forge.ListAttestationSummary:output_type -> measured_boot.ListAttestationSummaryResponse - 570, // 1567: forge.Forge.CreateNetworkSecurityGroup:output_type -> forge.CreateNetworkSecurityGroupResponse - 572, // 1568: forge.Forge.FindNetworkSecurityGroupIds:output_type -> forge.FindNetworkSecurityGroupIdsResponse - 574, // 1569: forge.Forge.FindNetworkSecurityGroupsByIds:output_type -> forge.FindNetworkSecurityGroupsByIdsResponse - 575, // 1570: forge.Forge.UpdateNetworkSecurityGroup:output_type -> forge.UpdateNetworkSecurityGroupResponse - 578, // 1571: forge.Forge.DeleteNetworkSecurityGroup:output_type -> forge.DeleteNetworkSecurityGroupResponse - 581, // 1572: forge.Forge.GetNetworkSecurityGroupPropagationStatus:output_type -> forge.GetNetworkSecurityGroupPropagationStatusResponse - 588, // 1573: forge.Forge.GetNetworkSecurityGroupAttachments:output_type -> forge.GetNetworkSecurityGroupAttachmentsResponse - 470, // 1574: forge.Forge.CreateOsImage:output_type -> forge.OsImage - 474, // 1575: forge.Forge.DeleteOsImage:output_type -> forge.DeleteOsImageResponse - 472, // 1576: forge.Forge.ListOsImage:output_type -> forge.ListOsImageResponse - 470, // 1577: forge.Forge.GetOsImage:output_type -> forge.OsImage - 470, // 1578: forge.Forge.UpdateOsImage:output_type -> forge.OsImage - 484, // 1579: forge.Forge.RebootCompleted:output_type -> forge.MachineRebootCompletedResponse - 889, // 1580: forge.Forge.PersistValidationResult:output_type -> google.protobuf.Empty - 490, // 1581: forge.Forge.GetMachineValidationResults:output_type -> forge.MachineValidationResultList - 487, // 1582: forge.Forge.MachineValidationCompleted:output_type -> forge.MachineValidationCompletedResponse - 495, // 1583: forge.Forge.MachineSetAutoUpdate:output_type -> forge.MachineSetAutoUpdateResponse - 498, // 1584: forge.Forge.GetMachineValidationExternalConfig:output_type -> forge.GetMachineValidationExternalConfigResponse - 500, // 1585: forge.Forge.GetMachineValidationExternalConfigs:output_type -> forge.GetMachineValidationExternalConfigsResponse - 889, // 1586: forge.Forge.AddUpdateMachineValidationExternalConfig:output_type -> google.protobuf.Empty - 509, // 1587: forge.Forge.GetMachineValidationRuns:output_type -> forge.MachineValidationRunList - 889, // 1588: forge.Forge.RemoveMachineValidationExternalConfig:output_type -> google.protobuf.Empty - 517, // 1589: forge.Forge.GetMachineValidationTests:output_type -> forge.MachineValidationTestsGetResponse - 516, // 1590: forge.Forge.AddMachineValidationTest:output_type -> forge.MachineValidationTestAddUpdateResponse - 516, // 1591: forge.Forge.UpdateMachineValidationTest:output_type -> forge.MachineValidationTestAddUpdateResponse - 519, // 1592: forge.Forge.MachineValidationTestVerfied:output_type -> forge.MachineValidationTestVerfiedResponse - 521, // 1593: forge.Forge.MachineValidationTestNextVersion:output_type -> forge.MachineValidationTestNextVersionResponse - 524, // 1594: forge.Forge.MachineValidationTestEnableDisableTest:output_type -> forge.MachineValidationTestEnableDisableTestResponse - 526, // 1595: forge.Forge.UpdateMachineValidationRun:output_type -> forge.MachineValidationRunResponse - 357, // 1596: forge.Forge.AdminBmcReset:output_type -> forge.AdminBmcResetResponse - 506, // 1597: forge.Forge.AdminPowerControl:output_type -> forge.AdminPowerControlResponse - 345, // 1598: forge.Forge.DisableSecureBoot:output_type -> forge.DisableSecureBootResponse - 347, // 1599: forge.Forge.Lockdown:output_type -> forge.LockdownResponse - 1002, // 1600: forge.Forge.LockdownStatus:output_type -> site_explorer.LockdownStatus - 351, // 1601: forge.Forge.MachineSetup:output_type -> forge.MachineSetupResponse - 353, // 1602: forge.Forge.SetDpuFirstBootOrder:output_type -> forge.SetDpuFirstBootOrderResponse - 679, // 1603: forge.Forge.CreateBmcUser:output_type -> forge.CreateBmcUserResponse - 681, // 1604: forge.Forge.DeleteBmcUser:output_type -> forge.DeleteBmcUserResponse - 359, // 1605: forge.Forge.EnableInfiniteBoot:output_type -> forge.EnableInfiniteBootResponse - 361, // 1606: forge.Forge.IsInfiniteBootEnabled:output_type -> forge.IsInfiniteBootEnabledResponse - 504, // 1607: forge.Forge.OnDemandMachineValidation:output_type -> forge.MachineValidationOnDemandResponse - 90, // 1608: forge.Forge.TpmAddCaCert:output_type -> forge.TpmCaAddedCaStatus - 96, // 1609: forge.Forge.TpmShowCaCerts:output_type -> forge.TpmCaCertDetailCollection - 93, // 1610: forge.Forge.TpmShowUnmatchedEkCerts:output_type -> forge.TpmEkCertStatusCollection - 889, // 1611: forge.Forge.TpmDeleteCaCert:output_type -> google.protobuf.Empty - 553, // 1612: forge.Forge.RedfishBrowse:output_type -> forge.RedfishBrowseResponse - 555, // 1613: forge.Forge.RedfishListActions:output_type -> forge.RedfishListActionsResponse - 560, // 1614: forge.Forge.RedfishCreateAction:output_type -> forge.RedfishCreateActionResponse - 562, // 1615: forge.Forge.RedfishApproveAction:output_type -> forge.RedfishApproveActionResponse - 563, // 1616: forge.Forge.RedfishApplyAction:output_type -> forge.RedfishApplyActionResponse - 564, // 1617: forge.Forge.RedfishCancelAction:output_type -> forge.RedfishCancelActionResponse - 566, // 1618: forge.Forge.UfmBrowse:output_type -> forge.UfmBrowseResponse - 590, // 1619: forge.Forge.GetDesiredFirmwareVersions:output_type -> forge.GetDesiredFirmwareVersionsResponse - 606, // 1620: forge.Forge.CreateSku:output_type -> forge.SkuIdList - 602, // 1621: forge.Forge.GenerateSkuFromMachine:output_type -> forge.Sku - 889, // 1622: forge.Forge.VerifySkuForMachine:output_type -> google.protobuf.Empty - 889, // 1623: forge.Forge.AssignSkuToMachine:output_type -> google.protobuf.Empty - 889, // 1624: forge.Forge.RemoveSkuAssociation:output_type -> google.protobuf.Empty - 889, // 1625: forge.Forge.DeleteSku:output_type -> google.protobuf.Empty - 606, // 1626: forge.Forge.GetAllSkuIds:output_type -> forge.SkuIdList - 605, // 1627: forge.Forge.FindSkusByIds:output_type -> forge.SkuList - 889, // 1628: forge.Forge.UpdateSkuMetadata:output_type -> google.protobuf.Empty - 602, // 1629: forge.Forge.ReplaceSku:output_type -> forge.Sku - 329, // 1630: forge.Forge.GetManagedHostQuarantineState:output_type -> forge.GetManagedHostQuarantineStateResponse - 331, // 1631: forge.Forge.SetManagedHostQuarantineState:output_type -> forge.SetManagedHostQuarantineStateResponse - 333, // 1632: forge.Forge.ClearManagedHostQuarantineState:output_type -> forge.ClearManagedHostQuarantineStateResponse - 889, // 1633: forge.Forge.ResetHostReprovisioning:output_type -> google.protobuf.Empty - 889, // 1634: forge.Forge.CopyBfbToDpuRshim:output_type -> google.protobuf.Empty - 612, // 1635: forge.Forge.GetAllDpaInterfaceIds:output_type -> forge.DpaInterfaceIdList - 614, // 1636: forge.Forge.FindDpaInterfacesByIds:output_type -> forge.DpaInterfaceList - 610, // 1637: forge.Forge.CreateDpaInterface:output_type -> forge.DpaInterface - 610, // 1638: forge.Forge.EnsureDpaInterface:output_type -> forge.DpaInterface - 618, // 1639: forge.Forge.DeleteDpaInterface:output_type -> forge.DpaInterfaceDeletionResult - 610, // 1640: forge.Forge.SetDpaNetworkObservationStatus:output_type -> forge.DpaInterface - 623, // 1641: forge.Forge.GetPowerOptions:output_type -> forge.PowerOptionResponse - 623, // 1642: forge.Forge.UpdatePowerOption:output_type -> forge.PowerOptionResponse - 889, // 1643: forge.Forge.AllowIngestionAndPowerOn:output_type -> google.protobuf.Empty - 89, // 1644: forge.Forge.DetermineMachineIngestionState:output_type -> forge.MachineIngestionStateResponse - 641, // 1645: forge.Forge.FindRackIds:output_type -> forge.RackIdList - 639, // 1646: forge.Forge.FindRacksByIds:output_type -> forge.RackList - 638, // 1647: forge.Forge.GetRack:output_type -> forge.GetRackResponse - 889, // 1648: forge.Forge.DeleteRack:output_type -> google.protobuf.Empty - 627, // 1649: forge.Forge.CreateComputeAllocation:output_type -> forge.CreateComputeAllocationResponse - 629, // 1650: forge.Forge.FindComputeAllocationIds:output_type -> forge.FindComputeAllocationIdsResponse - 631, // 1651: forge.Forge.FindComputeAllocationsByIds:output_type -> forge.FindComputeAllocationsByIdsResponse - 632, // 1652: forge.Forge.UpdateComputeAllocation:output_type -> forge.UpdateComputeAllocationResponse - 635, // 1653: forge.Forge.DeleteComputeAllocation:output_type -> forge.DeleteComputeAllocationResponse - 683, // 1654: forge.Forge.SetFirmwareUpdateTimeWindow:output_type -> forge.SetFirmwareUpdateTimeWindowResponse - 685, // 1655: forge.Forge.ListHostFirmware:output_type -> forge.ListHostFirmwareResponse - 1003, // 1656: forge.Forge.PublishMlxDeviceReport:output_type -> mlx_device.PublishMlxDeviceReportResponse - 1004, // 1657: forge.Forge.PublishMlxObservationReport:output_type -> mlx_device.PublishMlxObservationReportResponse - 688, // 1658: forge.Forge.TrimTable:output_type -> forge.TrimTableResponse - 690, // 1659: forge.Forge.CreateRemediation:output_type -> forge.CreateRemediationResponse - 889, // 1660: forge.Forge.ApproveRemediation:output_type -> google.protobuf.Empty - 889, // 1661: forge.Forge.RevokeRemediation:output_type -> google.protobuf.Empty - 889, // 1662: forge.Forge.EnableRemediation:output_type -> google.protobuf.Empty - 889, // 1663: forge.Forge.DisableRemediation:output_type -> google.protobuf.Empty - 691, // 1664: forge.Forge.FindRemediationIds:output_type -> forge.RemediationIdList - 692, // 1665: forge.Forge.FindRemediationsByIds:output_type -> forge.RemediationList - 699, // 1666: forge.Forge.FindAppliedRemediationIds:output_type -> forge.AppliedRemediationIdList - 702, // 1667: forge.Forge.FindAppliedRemediations:output_type -> forge.AppliedRemediationList - 704, // 1668: forge.Forge.GetNextRemediationForMachine:output_type -> forge.GetNextRemediationForMachineResponse - 889, // 1669: forge.Forge.RemediationApplied:output_type -> google.protobuf.Empty - 889, // 1670: forge.Forge.SetPrimaryDpu:output_type -> google.protobuf.Empty - 712, // 1671: forge.Forge.CreateDpuExtensionService:output_type -> forge.DpuExtensionService - 712, // 1672: forge.Forge.UpdateDpuExtensionService:output_type -> forge.DpuExtensionService - 716, // 1673: forge.Forge.DeleteDpuExtensionService:output_type -> forge.DeleteDpuExtensionServiceResponse - 718, // 1674: forge.Forge.FindDpuExtensionServiceIds:output_type -> forge.DpuExtensionServiceIdList - 720, // 1675: forge.Forge.FindDpuExtensionServicesByIds:output_type -> forge.DpuExtensionServiceList - 722, // 1676: forge.Forge.GetDpuExtensionServiceVersionsInfo:output_type -> forge.DpuExtensionServiceVersionInfoList - 724, // 1677: forge.Forge.FindInstancesByDpuExtensionService:output_type -> forge.FindInstancesByDpuExtensionServiceResponse - 889, // 1678: forge.Forge.TriggerMachineAttestation:output_type -> google.protobuf.Empty - 889, // 1679: forge.Forge.CancelMachineAttestation:output_type -> google.protobuf.Empty - 875, // 1680: forge.Forge.FindMachineIdsUnderAttestation:output_type -> common.MachineIdList - 72, // 1681: forge.Forge.FindMachinesUnderAttestation:output_type -> forge.AttestationResponse - 74, // 1682: forge.Forge.SignMachineIdentity:output_type -> forge.MachineIdentityResponse - 78, // 1683: forge.Forge.GetIdentityConfiguration:output_type -> forge.IdentityConfigResponse - 78, // 1684: forge.Forge.SetIdentityConfiguration:output_type -> forge.IdentityConfigResponse - 889, // 1685: forge.Forge.DeleteIdentityConfiguration:output_type -> google.protobuf.Empty - 81, // 1686: forge.Forge.GetTokenDelegation:output_type -> forge.TokenDelegationResponse - 81, // 1687: forge.Forge.SetTokenDelegation:output_type -> forge.TokenDelegationResponse - 889, // 1688: forge.Forge.DeleteTokenDelegation:output_type -> google.protobuf.Empty - 85, // 1689: forge.Forge.GetJWKS:output_type -> forge.Jwks - 86, // 1690: forge.Forge.GetOpenIDConfiguration:output_type -> forge.OpenIdConfiguration - 731, // 1691: forge.Forge.ScoutStream:output_type -> forge.ScoutStreamScoutBoundMessage - 734, // 1692: forge.Forge.ScoutStreamShowConnections:output_type -> forge.ScoutStreamShowConnectionsResponse - 736, // 1693: forge.Forge.ScoutStreamDisconnect:output_type -> forge.ScoutStreamDisconnectResponse - 738, // 1694: forge.Forge.ScoutStreamPing:output_type -> forge.ScoutStreamAdminPingResponse - 1005, // 1695: forge.Forge.MlxAdminProfileSync:output_type -> mlx_device.MlxAdminProfileSyncResponse - 1006, // 1696: forge.Forge.MlxAdminProfileShow:output_type -> mlx_device.MlxAdminProfileShowResponse - 1007, // 1697: forge.Forge.MlxAdminProfileCompare:output_type -> mlx_device.MlxAdminProfileCompareResponse - 1008, // 1698: forge.Forge.MlxAdminProfileList:output_type -> mlx_device.MlxAdminProfileListResponse - 1009, // 1699: forge.Forge.MlxAdminLockdownLock:output_type -> mlx_device.MlxAdminLockdownLockResponse - 1010, // 1700: forge.Forge.MlxAdminLockdownUnlock:output_type -> mlx_device.MlxAdminLockdownUnlockResponse - 1011, // 1701: forge.Forge.MlxAdminLockdownStatus:output_type -> mlx_device.MlxAdminLockdownStatusResponse - 1012, // 1702: forge.Forge.MlxAdminShowDevice:output_type -> mlx_device.MlxAdminDeviceInfoResponse - 1013, // 1703: forge.Forge.MlxAdminShowMachine:output_type -> mlx_device.MlxAdminDeviceReportResponse - 1014, // 1704: forge.Forge.MlxAdminRegistryList:output_type -> mlx_device.MlxAdminRegistryListResponse - 1015, // 1705: forge.Forge.MlxAdminRegistryShow:output_type -> mlx_device.MlxAdminRegistryShowResponse - 1016, // 1706: forge.Forge.MlxAdminConfigQuery:output_type -> mlx_device.MlxAdminConfigQueryResponse - 1017, // 1707: forge.Forge.MlxAdminConfigSet:output_type -> mlx_device.MlxAdminConfigSetResponse - 1018, // 1708: forge.Forge.MlxAdminConfigSync:output_type -> mlx_device.MlxAdminConfigSyncResponse - 1019, // 1709: forge.Forge.MlxAdminConfigCompare:output_type -> mlx_device.MlxAdminConfigCompareResponse - 664, // 1710: forge.Forge.FindNVLinkPartitionIds:output_type -> forge.NVLinkPartitionIdList - 659, // 1711: forge.Forge.FindNVLinkPartitionsByIds:output_type -> forge.NVLinkPartitionList - 659, // 1712: forge.Forge.NVLinkPartitionsForTenant:output_type -> forge.NVLinkPartitionList - 675, // 1713: forge.Forge.FindNVLinkLogicalPartitionIds:output_type -> forge.NVLinkLogicalPartitionIdList - 669, // 1714: forge.Forge.FindNVLinkLogicalPartitionsByIds:output_type -> forge.NVLinkLogicalPartitionList - 668, // 1715: forge.Forge.CreateNVLinkLogicalPartition:output_type -> forge.NVLinkLogicalPartition - 677, // 1716: forge.Forge.UpdateNVLinkLogicalPartition:output_type -> forge.NVLinkLogicalPartitionUpdateResult - 672, // 1717: forge.Forge.DeleteNVLinkLogicalPartition:output_type -> forge.NVLinkLogicalPartitionDeletionResult - 669, // 1718: forge.Forge.NVLinkLogicalPartitionsForTenant:output_type -> forge.NVLinkLogicalPartitionList - 751, // 1719: forge.Forge.GetMachinePositionInfo:output_type -> forge.MachinePositionInfoList - 657, // 1720: forge.Forge.NmxmBrowse:output_type -> forge.NmxmBrowseResponse - 889, // 1721: forge.Forge.ModifyDPFState:output_type -> google.protobuf.Empty - 771, // 1722: forge.Forge.GetDPFState:output_type -> forge.DPFStateResponse - 780, // 1723: forge.Forge.ComponentPowerControl:output_type -> forge.ComponentPowerControlResponse - 778, // 1724: forge.Forge.GetComponentInventory:output_type -> forge.GetComponentInventoryResponse - 786, // 1725: forge.Forge.UpdateComponentFirmware:output_type -> forge.UpdateComponentFirmwareResponse - 788, // 1726: forge.Forge.GetComponentFirmwareStatus:output_type -> forge.GetComponentFirmwareStatusResponse - 791, // 1727: forge.Forge.ListComponentFirmwareVersions:output_type -> forge.ListComponentFirmwareVersionsResponse - 1318, // [1318:1728] is the sub-list for method output_type - 908, // [908:1318] is the sub-list for method input_type - 908, // [908:908] is the sub-list for extension type_name - 908, // [908:908] is the sub-list for extension extendee - 0, // [0:908] is the sub-list for field type_name + 858, // 39: forge.VpcCreationRequest.id:type_name -> common.VpcId + 226, // 40: forge.VpcCreationRequest.metadata:type_name -> forge.Metadata + 859, // 41: forge.VpcCreationRequest.default_nvlink_logical_partition_id:type_name -> common.NVLinkLogicalPartitionId + 58, // 42: forge.VpcCreationRequest.routing_profile_type:type_name -> forge.RoutingProfileType + 858, // 43: forge.VpcUpdateRequest.id:type_name -> common.VpcId + 226, // 44: forge.VpcUpdateRequest.metadata:type_name -> forge.Metadata + 859, // 45: forge.VpcUpdateRequest.default_nvlink_logical_partition_id:type_name -> common.NVLinkLogicalPartitionId + 128, // 46: forge.VpcUpdateResult.vpc:type_name -> forge.Vpc + 858, // 47: forge.VpcUpdateVirtualizationRequest.id:type_name -> common.VpcId + 3, // 48: forge.VpcUpdateVirtualizationRequest.network_virtualization_type:type_name -> forge.VpcVirtualizationType + 858, // 49: forge.VpcDeletionRequest.id:type_name -> common.VpcId + 128, // 50: forge.VpcList.vpcs:type_name -> forge.Vpc + 860, // 51: forge.VpcPrefix.id:type_name -> common.VpcPrefixId + 858, // 52: forge.VpcPrefix.vpc_id:type_name -> common.VpcId + 138, // 53: forge.VpcPrefix.config:type_name -> forge.VpcPrefixConfig + 139, // 54: forge.VpcPrefix.status:type_name -> forge.VpcPrefixStatus + 226, // 55: forge.VpcPrefix.metadata:type_name -> forge.Metadata + 860, // 56: forge.VpcPrefixCreationRequest.id:type_name -> common.VpcPrefixId + 858, // 57: forge.VpcPrefixCreationRequest.vpc_id:type_name -> common.VpcId + 138, // 58: forge.VpcPrefixCreationRequest.config:type_name -> forge.VpcPrefixConfig + 226, // 59: forge.VpcPrefixCreationRequest.metadata:type_name -> forge.Metadata + 858, // 60: forge.VpcPrefixSearchQuery.vpc_id:type_name -> common.VpcId + 860, // 61: forge.VpcPrefixSearchQuery.tenant_prefix_id:type_name -> common.VpcPrefixId + 4, // 62: forge.VpcPrefixSearchQuery.prefix_match_type:type_name -> forge.PrefixMatchType + 860, // 63: forge.VpcPrefixGetRequest.vpc_prefix_ids:type_name -> common.VpcPrefixId + 860, // 64: forge.VpcPrefixIdList.vpc_prefix_ids:type_name -> common.VpcPrefixId + 137, // 65: forge.VpcPrefixList.vpc_prefixes:type_name -> forge.VpcPrefix + 860, // 66: forge.VpcPrefixUpdateRequest.id:type_name -> common.VpcPrefixId + 138, // 67: forge.VpcPrefixUpdateRequest.config:type_name -> forge.VpcPrefixConfig + 226, // 68: forge.VpcPrefixUpdateRequest.metadata:type_name -> forge.Metadata + 860, // 69: forge.VpcPrefixDeletionRequest.id:type_name -> common.VpcPrefixId + 861, // 70: forge.VpcPeering.id:type_name -> common.VpcPeeringId + 858, // 71: forge.VpcPeering.vpc_id:type_name -> common.VpcId + 858, // 72: forge.VpcPeering.peer_vpc_id:type_name -> common.VpcId + 861, // 73: forge.VpcPeeringIdList.vpc_peering_ids:type_name -> common.VpcPeeringId + 148, // 74: forge.VpcPeeringList.vpc_peerings:type_name -> forge.VpcPeering + 858, // 75: forge.VpcPeeringCreationRequest.vpc_id:type_name -> common.VpcId + 858, // 76: forge.VpcPeeringCreationRequest.peer_vpc_id:type_name -> common.VpcId + 861, // 77: forge.VpcPeeringCreationRequest.id:type_name -> common.VpcPeeringId + 858, // 78: forge.VpcPeeringSearchFilter.vpc_id:type_name -> common.VpcId + 861, // 79: forge.VpcPeeringsByIdsRequest.vpc_peering_ids:type_name -> common.VpcPeeringId + 861, // 80: forge.VpcPeeringDeletionRequest.id:type_name -> common.VpcPeeringId + 5, // 81: forge.IBPartitionStatus.state:type_name -> forge.TenantState + 302, // 82: forge.IBPartitionStatus.state_reason:type_name -> forge.ControllerStateReason + 304, // 83: forge.IBPartitionStatus.state_sla:type_name -> forge.StateSla + 862, // 84: forge.IBPartition.id:type_name -> common.IBPartitionId + 156, // 85: forge.IBPartition.config:type_name -> forge.IBPartitionConfig + 157, // 86: forge.IBPartition.status:type_name -> forge.IBPartitionStatus + 226, // 87: forge.IBPartition.metadata:type_name -> forge.Metadata + 158, // 88: forge.IBPartitionList.ib_partitions:type_name -> forge.IBPartition + 156, // 89: forge.IBPartitionCreationRequest.config:type_name -> forge.IBPartitionConfig + 862, // 90: forge.IBPartitionCreationRequest.id:type_name -> common.IBPartitionId + 226, // 91: forge.IBPartitionCreationRequest.metadata:type_name -> forge.Metadata + 862, // 92: forge.IBPartitionUpdateRequest.id:type_name -> common.IBPartitionId + 156, // 93: forge.IBPartitionUpdateRequest.config:type_name -> forge.IBPartitionConfig + 226, // 94: forge.IBPartitionUpdateRequest.metadata:type_name -> forge.Metadata + 862, // 95: forge.IBPartitionDeletionRequest.id:type_name -> common.IBPartitionId + 862, // 96: forge.IBPartitionsByIdsRequest.ib_partition_ids:type_name -> common.IBPartitionId + 862, // 97: forge.IBPartitionIdList.ib_partition_ids:type_name -> common.IBPartitionId + 302, // 98: forge.PowerShelfStatus.state_reason:type_name -> forge.ControllerStateReason + 304, // 99: forge.PowerShelfStatus.state_sla:type_name -> forge.StateSla + 863, // 100: forge.PowerShelf.id:type_name -> common.PowerShelfId + 167, // 101: forge.PowerShelf.config:type_name -> forge.PowerShelfConfig + 168, // 102: forge.PowerShelf.status:type_name -> forge.PowerShelfStatus + 857, // 103: forge.PowerShelf.deleted:type_name -> google.protobuf.Timestamp + 226, // 104: forge.PowerShelf.metadata:type_name -> forge.Metadata + 291, // 105: forge.PowerShelf.bmc_info:type_name -> forge.BmcInfo + 864, // 106: forge.PowerShelf.rack_id:type_name -> common.RackId + 169, // 107: forge.PowerShelfList.power_shelves:type_name -> forge.PowerShelf + 167, // 108: forge.PowerShelfCreationRequest.config:type_name -> forge.PowerShelfConfig + 863, // 109: forge.PowerShelfCreationRequest.id:type_name -> common.PowerShelfId + 863, // 110: forge.PowerShelfDeletionRequest.id:type_name -> common.PowerShelfId + 857, // 111: forge.PowerShelfStateHistoryRecord.time:type_name -> google.protobuf.Timestamp + 863, // 112: forge.PowerShelfStateHistoriesRequest.power_shelf_ids:type_name -> common.PowerShelfId + 836, // 113: forge.PowerShelfStateHistories.histories:type_name -> forge.PowerShelfStateHistories.HistoriesEntry + 174, // 114: forge.PowerShelfStateHistoryRecords.records:type_name -> forge.PowerShelfStateHistoryRecord + 863, // 115: forge.PowerShelfQuery.power_shelf_id:type_name -> common.PowerShelfId + 864, // 116: forge.PowerShelfSearchFilter.rack_id:type_name -> common.RackId + 6, // 117: forge.PowerShelfSearchFilter.deleted:type_name -> forge.DeletedFilter + 863, // 118: forge.PowerShelvesByIdsRequest.power_shelf_ids:type_name -> common.PowerShelfId + 226, // 119: forge.ExpectedPowerShelf.metadata:type_name -> forge.Metadata + 864, // 120: forge.ExpectedPowerShelf.rack_id:type_name -> common.RackId + 865, // 121: forge.ExpectedPowerShelf.expected_power_shelf_id:type_name -> common.UUID + 865, // 122: forge.ExpectedPowerShelfRequest.expected_power_shelf_id:type_name -> common.UUID + 181, // 123: forge.ExpectedPowerShelfList.expected_power_shelves:type_name -> forge.ExpectedPowerShelf + 185, // 124: forge.LinkedExpectedPowerShelfList.expected_power_shelves:type_name -> forge.LinkedExpectedPowerShelf + 863, // 125: forge.LinkedExpectedPowerShelf.power_shelf_id:type_name -> common.PowerShelfId + 865, // 126: forge.LinkedExpectedPowerShelf.expected_power_shelf_id:type_name -> common.UUID + 864, // 127: forge.LinkedExpectedPowerShelf.rack_id:type_name -> common.RackId + 187, // 128: forge.SwitchConfig.fabric_manager_config:type_name -> forge.FabricManagerConfig + 837, // 129: forge.FabricManagerConfig.config_map:type_name -> forge.FabricManagerConfig.ConfigMapEntry + 302, // 130: forge.SwitchStatus.state_reason:type_name -> forge.ControllerStateReason + 304, // 131: forge.SwitchStatus.state_sla:type_name -> forge.StateSla + 866, // 132: forge.Switch.id:type_name -> common.SwitchId + 186, // 133: forge.Switch.config:type_name -> forge.SwitchConfig + 188, // 134: forge.Switch.status:type_name -> forge.SwitchStatus + 857, // 135: forge.Switch.deleted:type_name -> google.protobuf.Timestamp + 291, // 136: forge.Switch.bmc_info:type_name -> forge.BmcInfo + 226, // 137: forge.Switch.metadata:type_name -> forge.Metadata + 864, // 138: forge.Switch.rack_id:type_name -> common.RackId + 189, // 139: forge.SwitchList.switches:type_name -> forge.Switch + 186, // 140: forge.SwitchCreationRequest.config:type_name -> forge.SwitchConfig + 865, // 141: forge.SwitchCreationRequest.id:type_name -> common.UUID + 866, // 142: forge.SwitchDeletionRequest.id:type_name -> common.SwitchId + 857, // 143: forge.SwitchStateHistoryRecord.time:type_name -> google.protobuf.Timestamp + 866, // 144: forge.SwitchStateHistoriesRequest.switch_ids:type_name -> common.SwitchId + 838, // 145: forge.SwitchStateHistories.histories:type_name -> forge.SwitchStateHistories.HistoriesEntry + 194, // 146: forge.SwitchStateHistoryRecords.records:type_name -> forge.SwitchStateHistoryRecord + 866, // 147: forge.SwitchQuery.switch_id:type_name -> common.SwitchId + 864, // 148: forge.SwitchSearchFilter.rack_id:type_name -> common.RackId + 6, // 149: forge.SwitchSearchFilter.deleted:type_name -> forge.DeletedFilter + 866, // 150: forge.SwitchesByIdsRequest.switch_ids:type_name -> common.SwitchId + 226, // 151: forge.ExpectedSwitch.metadata:type_name -> forge.Metadata + 864, // 152: forge.ExpectedSwitch.rack_id:type_name -> common.RackId + 865, // 153: forge.ExpectedSwitch.expected_switch_id:type_name -> common.UUID + 865, // 154: forge.ExpectedSwitchRequest.expected_switch_id:type_name -> common.UUID + 201, // 155: forge.ExpectedSwitchList.expected_switches:type_name -> forge.ExpectedSwitch + 205, // 156: forge.LinkedExpectedSwitchList.expected_switches:type_name -> forge.LinkedExpectedSwitch + 866, // 157: forge.LinkedExpectedSwitch.switch_id:type_name -> common.SwitchId + 865, // 158: forge.LinkedExpectedSwitch.expected_switch_id:type_name -> common.UUID + 864, // 159: forge.LinkedExpectedSwitch.rack_id:type_name -> common.RackId + 864, // 160: forge.ExpectedRack.rack_id:type_name -> common.RackId + 226, // 161: forge.ExpectedRack.metadata:type_name -> forge.Metadata + 206, // 162: forge.ExpectedRackList.expected_racks:type_name -> forge.ExpectedRack + 857, // 163: forge.NetworkSegmentStateHistory.time:type_name -> google.protobuf.Timestamp + 867, // 164: forge.NetworkSegment.id:type_name -> common.NetworkSegmentId + 858, // 165: forge.NetworkSegment.vpc_id:type_name -> common.VpcId + 868, // 166: forge.NetworkSegment.subdomain_id:type_name -> common.DomainId + 220, // 167: forge.NetworkSegment.prefixes:type_name -> forge.NetworkPrefix + 5, // 168: forge.NetworkSegment.state:type_name -> forge.TenantState + 211, // 169: forge.NetworkSegment.history:type_name -> forge.NetworkSegmentStateHistory + 302, // 170: forge.NetworkSegment.state_reason:type_name -> forge.ControllerStateReason + 304, // 171: forge.NetworkSegment.state_sla:type_name -> forge.StateSla + 857, // 172: forge.NetworkSegment.created:type_name -> google.protobuf.Timestamp + 857, // 173: forge.NetworkSegment.updated:type_name -> google.protobuf.Timestamp + 857, // 174: forge.NetworkSegment.deleted:type_name -> google.protobuf.Timestamp + 7, // 175: forge.NetworkSegment.segment_type:type_name -> forge.NetworkSegmentType + 8, // 176: forge.NetworkSegment.flags:type_name -> forge.NetworkSegmentFlag + 858, // 177: forge.NetworkSegmentCreationRequest.vpc_id:type_name -> common.VpcId + 868, // 178: forge.NetworkSegmentCreationRequest.subdomain_id:type_name -> common.DomainId + 220, // 179: forge.NetworkSegmentCreationRequest.prefixes:type_name -> forge.NetworkPrefix + 7, // 180: forge.NetworkSegmentCreationRequest.segment_type:type_name -> forge.NetworkSegmentType + 867, // 181: forge.NetworkSegmentCreationRequest.id:type_name -> common.NetworkSegmentId + 867, // 182: forge.NetworkSegmentDeletionRequest.id:type_name -> common.NetworkSegmentId + 867, // 183: forge.NetworkSegmentIdList.network_segments_ids:type_name -> common.NetworkSegmentId + 867, // 184: forge.NetworkSegmentsByIdsRequest.network_segments_ids:type_name -> common.NetworkSegmentId + 869, // 185: forge.NetworkPrefix.id:type_name -> common.NetworkPrefixId + 856, // 186: forge.InstancePowerRequest.machine_id:type_name -> common.MachineId + 65, // 187: forge.InstancePowerRequest.operation:type_name -> forge.InstancePowerRequest.Operation + 870, // 188: forge.InstancePowerRequest.instance_id:type_name -> common.InstanceId + 254, // 189: forge.InstanceList.instances:type_name -> forge.Instance + 225, // 190: forge.Metadata.labels:type_name -> forge.Label + 225, // 191: forge.InstanceSearchFilter.label:type_name -> forge.Label + 870, // 192: forge.InstanceIdList.instance_ids:type_name -> common.InstanceId + 870, // 193: forge.InstancesByIdsRequest.instance_ids:type_name -> common.InstanceId + 856, // 194: forge.InstanceAllocationRequest.machine_id:type_name -> common.MachineId + 239, // 195: forge.InstanceAllocationRequest.config:type_name -> forge.InstanceConfig + 870, // 196: forge.InstanceAllocationRequest.instance_id:type_name -> common.InstanceId + 226, // 197: forge.InstanceAllocationRequest.metadata:type_name -> forge.Metadata + 230, // 198: forge.BatchInstanceAllocationRequest.instance_requests:type_name -> forge.InstanceAllocationRequest + 254, // 199: forge.BatchInstanceAllocationResponse.instances:type_name -> forge.Instance + 9, // 200: forge.IpxeTemplateArtifact.cache_strategy:type_name -> forge.IpxeTemplateArtifactCacheStrategy + 10, // 201: forge.IpxeTemplate.scope:type_name -> forge.IpxeTemplateScope + 871, // 202: forge.IpxeTemplate.id:type_name -> common.IpxeTemplateId + 238, // 203: forge.InstanceOperatingSystemConfig.ipxe:type_name -> forge.InlineIpxe + 865, // 204: forge.InstanceOperatingSystemConfig.os_image_id:type_name -> common.UUID + 872, // 205: forge.InstanceOperatingSystemConfig.operating_system_id:type_name -> common.OperatingSystemId + 236, // 206: forge.InstanceConfig.tenant:type_name -> forge.TenantConfig + 237, // 207: forge.InstanceConfig.os:type_name -> forge.InstanceOperatingSystemConfig + 240, // 208: forge.InstanceConfig.network:type_name -> forge.InstanceNetworkConfig + 241, // 209: forge.InstanceConfig.infiniband:type_name -> forge.InstanceInfinibandConfig + 243, // 210: forge.InstanceConfig.dpu_extension_services:type_name -> forge.InstanceDpuExtensionServicesConfig + 244, // 211: forge.InstanceConfig.nvlink:type_name -> forge.InstanceNVLinkConfig + 256, // 212: forge.InstanceNetworkConfig.interfaces:type_name -> forge.InstanceInterfaceConfig + 257, // 213: forge.InstanceInfinibandConfig.ib_interfaces:type_name -> forge.InstanceIBInterfaceConfig + 242, // 214: forge.InstanceDpuExtensionServicesConfig.service_configs:type_name -> forge.InstanceDpuExtensionServiceConfig + 261, // 215: forge.InstanceNVLinkConfig.gpu_configs:type_name -> forge.InstanceNVLinkGpuConfig + 870, // 216: forge.InstanceOperatingSystemUpdateRequest.instance_id:type_name -> common.InstanceId + 237, // 217: forge.InstanceOperatingSystemUpdateRequest.os:type_name -> forge.InstanceOperatingSystemConfig + 870, // 218: forge.InstanceConfigUpdateRequest.instance_id:type_name -> common.InstanceId + 239, // 219: forge.InstanceConfigUpdateRequest.config:type_name -> forge.InstanceConfig + 226, // 220: forge.InstanceConfigUpdateRequest.metadata:type_name -> forge.Metadata + 305, // 221: forge.InstanceStatus.tenant:type_name -> forge.InstanceTenantStatus + 248, // 222: forge.InstanceStatus.network:type_name -> forge.InstanceNetworkStatus + 249, // 223: forge.InstanceStatus.infiniband:type_name -> forge.InstanceInfinibandStatus + 252, // 224: forge.InstanceStatus.dpu_extension_services:type_name -> forge.InstanceDpuExtensionServicesStatus + 17, // 225: forge.InstanceStatus.configs_synced:type_name -> forge.SyncState + 255, // 226: forge.InstanceStatus.update:type_name -> forge.InstanceUpdateStatus + 253, // 227: forge.InstanceStatus.nvlink:type_name -> forge.InstanceNVLinkStatus + 258, // 228: forge.InstanceNetworkStatus.interfaces:type_name -> forge.InstanceInterfaceStatus + 17, // 229: forge.InstanceNetworkStatus.configs_synced:type_name -> forge.SyncState + 259, // 230: forge.InstanceInfinibandStatus.ib_interfaces:type_name -> forge.InstanceIBInterfaceStatus + 17, // 231: forge.InstanceInfinibandStatus.configs_synced:type_name -> forge.SyncState + 856, // 232: forge.DpuExtensionServiceStatus.dpu_machine_id:type_name -> common.MachineId + 56, // 233: forge.DpuExtensionServiceStatus.status:type_name -> forge.DpuExtensionServiceDeploymentStatus + 398, // 234: forge.DpuExtensionServiceStatus.components:type_name -> forge.DpuExtensionServiceComponent + 56, // 235: forge.InstanceDpuExtensionServiceStatus.deployment_status:type_name -> forge.DpuExtensionServiceDeploymentStatus + 250, // 236: forge.InstanceDpuExtensionServiceStatus.dpu_statuses:type_name -> forge.DpuExtensionServiceStatus + 251, // 237: forge.InstanceDpuExtensionServicesStatus.dpu_extension_services:type_name -> forge.InstanceDpuExtensionServiceStatus + 17, // 238: forge.InstanceDpuExtensionServicesStatus.configs_synced:type_name -> forge.SyncState + 260, // 239: forge.InstanceNVLinkStatus.gpu_statuses:type_name -> forge.InstanceNVLinkGpuStatus + 17, // 240: forge.InstanceNVLinkStatus.configs_synced:type_name -> forge.SyncState + 870, // 241: forge.Instance.id:type_name -> common.InstanceId + 856, // 242: forge.Instance.machine_id:type_name -> common.MachineId + 226, // 243: forge.Instance.metadata:type_name -> forge.Metadata + 239, // 244: forge.Instance.config:type_name -> forge.InstanceConfig + 247, // 245: forge.Instance.status:type_name -> forge.InstanceStatus + 66, // 246: forge.InstanceUpdateStatus.module:type_name -> forge.InstanceUpdateStatus.Module + 857, // 247: forge.InstanceUpdateStatus.trigger_received_at:type_name -> google.protobuf.Timestamp + 857, // 248: forge.InstanceUpdateStatus.update_triggered_at:type_name -> google.protobuf.Timestamp + 28, // 249: forge.InstanceInterfaceConfig.function_type:type_name -> forge.InterfaceFunctionType + 867, // 250: forge.InstanceInterfaceConfig.network_segment_id:type_name -> common.NetworkSegmentId + 867, // 251: forge.InstanceInterfaceConfig.segment_id:type_name -> common.NetworkSegmentId + 860, // 252: forge.InstanceInterfaceConfig.vpc_prefix_id:type_name -> common.VpcPrefixId + 28, // 253: forge.InstanceIBInterfaceConfig.function_type:type_name -> forge.InterfaceFunctionType + 862, // 254: forge.InstanceIBInterfaceConfig.ib_partition_id:type_name -> common.IBPartitionId + 873, // 255: forge.InstanceNVLinkGpuStatus.domain_id:type_name -> common.NVLinkDomainId + 859, // 256: forge.InstanceNVLinkGpuStatus.logical_partition_id:type_name -> common.NVLinkLogicalPartitionId + 859, // 257: forge.InstanceNVLinkGpuConfig.logical_partition_id:type_name -> common.NVLinkLogicalPartitionId + 870, // 258: forge.InstancePhoneHomeLastContactRequest.instance_id:type_name -> common.InstanceId + 857, // 259: forge.InstancePhoneHomeLastContactResponse.timestamp:type_name -> google.protobuf.Timestamp + 11, // 260: forge.Issue.category:type_name -> forge.IssueCategory + 870, // 261: forge.InstanceReleaseRequest.id:type_name -> common.InstanceId + 264, // 262: forge.InstanceReleaseRequest.issue:type_name -> forge.Issue + 856, // 263: forge.MachinesByIdsRequest.machine_ids:type_name -> common.MachineId + 864, // 264: forge.MachineSearchConfig.rack_id:type_name -> common.RackId + 856, // 265: forge.MachineStateHistoriesRequest.machine_ids:type_name -> common.MachineId + 839, // 266: forge.MachineStateHistories.histories:type_name -> forge.MachineStateHistories.HistoriesEntry + 306, // 267: forge.MachineStateHistoryRecords.records:type_name -> forge.MachineEvent + 856, // 268: forge.MachineHealthHistoriesRequest.machine_ids:type_name -> common.MachineId + 857, // 269: forge.MachineHealthHistoriesRequest.start_time:type_name -> google.protobuf.Timestamp + 857, // 270: forge.MachineHealthHistoriesRequest.end_time:type_name -> google.protobuf.Timestamp + 840, // 271: forge.HealthHistories.histories:type_name -> forge.HealthHistories.HistoriesEntry + 275, // 272: forge.HealthHistoryRecords.records:type_name -> forge.HealthHistoryRecord + 874, // 273: forge.HealthHistoryRecord.health:type_name -> health.HealthReport + 857, // 274: forge.HealthHistoryRecord.time:type_name -> google.protobuf.Timestamp + 410, // 275: forge.TenantList.tenants:type_name -> forge.Tenant + 307, // 276: forge.InterfaceList.interfaces:type_name -> forge.MachineInterface + 292, // 277: forge.MachineList.machines:type_name -> forge.Machine + 875, // 278: forge.InterfaceDeleteQuery.id:type_name -> common.MachineInterfaceId + 875, // 279: forge.InterfaceSearchQuery.id:type_name -> common.MachineInterfaceId + 875, // 280: forge.AssignStaticAddressRequest.interface_id:type_name -> common.MachineInterfaceId + 875, // 281: forge.AssignStaticAddressResponse.interface_id:type_name -> common.MachineInterfaceId + 12, // 282: forge.AssignStaticAddressResponse.status:type_name -> forge.AssignStaticAddressStatus + 875, // 283: forge.RemoveStaticAddressRequest.interface_id:type_name -> common.MachineInterfaceId + 875, // 284: forge.RemoveStaticAddressResponse.interface_id:type_name -> common.MachineInterfaceId + 13, // 285: forge.RemoveStaticAddressResponse.status:type_name -> forge.RemoveStaticAddressStatus + 875, // 286: forge.FindInterfaceAddressesRequest.interface_id:type_name -> common.MachineInterfaceId + 875, // 287: forge.FindInterfaceAddressesResponse.interface_id:type_name -> common.MachineInterfaceId + 289, // 288: forge.FindInterfaceAddressesResponse.addresses:type_name -> forge.InterfaceAddress + 856, // 289: forge.Machine.id:type_name -> common.MachineId + 302, // 290: forge.Machine.state_reason:type_name -> forge.ControllerStateReason + 304, // 291: forge.Machine.state_sla:type_name -> forge.StateSla + 306, // 292: forge.Machine.events:type_name -> forge.MachineEvent + 307, // 293: forge.Machine.interfaces:type_name -> forge.MachineInterface + 876, // 294: forge.Machine.discovery_info:type_name -> machine_discovery.DiscoveryInfo + 14, // 295: forge.Machine.machine_type:type_name -> forge.MachineType + 291, // 296: forge.Machine.bmc_info:type_name -> forge.BmcInfo + 857, // 297: forge.Machine.last_reboot_time:type_name -> google.protobuf.Timestamp + 857, // 298: forge.Machine.last_observation_time:type_name -> google.protobuf.Timestamp + 857, // 299: forge.Machine.maintenance_start_time:type_name -> google.protobuf.Timestamp + 856, // 300: forge.Machine.associated_host_machine_id:type_name -> common.MachineId + 299, // 301: forge.Machine.inventory:type_name -> forge.MachineComponentInventory + 857, // 302: forge.Machine.last_reboot_requested_time:type_name -> google.protobuf.Timestamp + 856, // 303: forge.Machine.associated_dpu_machine_ids:type_name -> common.MachineId + 874, // 304: forge.Machine.health:type_name -> health.HealthReport + 301, // 305: forge.Machine.health_overrides:type_name -> forge.HealthOverrideOrigin + 308, // 306: forge.Machine.ib_status:type_name -> forge.InfinibandStatusObservation + 226, // 307: forge.Machine.metadata:type_name -> forge.Metadata + 293, // 308: forge.Machine.instance_network_restrictions:type_name -> forge.InstanceNetworkRestrictions + 547, // 309: forge.Machine.capabilities:type_name -> forge.MachineCapabilitiesSet + 620, // 310: forge.Machine.hw_sku_status:type_name -> forge.SkuStatus + 337, // 311: forge.Machine.quarantine_state:type_name -> forge.ManagedHostQuarantineState + 670, // 312: forge.Machine.nvlink_info:type_name -> forge.MachineNVLinkInfo + 673, // 313: forge.Machine.nvlink_status_observation:type_name -> forge.MachineNVLinkStatusObservation + 864, // 314: forge.Machine.rack_id:type_name -> common.RackId + 15, // 315: forge.InstanceNetworkRestrictions.network_segment_membership_type:type_name -> forge.InstanceNetworkSegmentMembershipType + 867, // 316: forge.InstanceNetworkRestrictions.network_segment_ids:type_name -> common.NetworkSegmentId + 856, // 317: forge.MachineMetadataUpdateRequest.machine_id:type_name -> common.MachineId + 226, // 318: forge.MachineMetadataUpdateRequest.metadata:type_name -> forge.Metadata + 864, // 319: forge.RackMetadataUpdateRequest.rack_id:type_name -> common.RackId + 226, // 320: forge.RackMetadataUpdateRequest.metadata:type_name -> forge.Metadata + 866, // 321: forge.SwitchMetadataUpdateRequest.switch_id:type_name -> common.SwitchId + 226, // 322: forge.SwitchMetadataUpdateRequest.metadata:type_name -> forge.Metadata + 863, // 323: forge.PowerShelfMetadataUpdateRequest.power_shelf_id:type_name -> common.PowerShelfId + 226, // 324: forge.PowerShelfMetadataUpdateRequest.metadata:type_name -> forge.Metadata + 856, // 325: forge.DpuAgentInventoryReport.machine_id:type_name -> common.MachineId + 299, // 326: forge.DpuAgentInventoryReport.inventory:type_name -> forge.MachineComponentInventory + 300, // 327: forge.MachineComponentInventory.components:type_name -> forge.MachineInventorySoftwareComponent + 29, // 328: forge.HealthOverrideOrigin.mode:type_name -> forge.OverrideMode + 16, // 329: forge.ControllerStateReason.outcome:type_name -> forge.ControllerStateOutcome + 303, // 330: forge.ControllerStateReason.source_ref:type_name -> forge.ControllerStateSourceReference + 877, // 331: forge.StateSla.sla:type_name -> google.protobuf.Duration + 5, // 332: forge.InstanceTenantStatus.state:type_name -> forge.TenantState + 857, // 333: forge.MachineEvent.time:type_name -> google.protobuf.Timestamp + 875, // 334: forge.MachineInterface.id:type_name -> common.MachineInterfaceId + 856, // 335: forge.MachineInterface.attached_dpu_machine_id:type_name -> common.MachineId + 856, // 336: forge.MachineInterface.machine_id:type_name -> common.MachineId + 867, // 337: forge.MachineInterface.segment_id:type_name -> common.NetworkSegmentId + 868, // 338: forge.MachineInterface.domain_id:type_name -> common.DomainId + 857, // 339: forge.MachineInterface.created:type_name -> google.protobuf.Timestamp + 857, // 340: forge.MachineInterface.last_dhcp:type_name -> google.protobuf.Timestamp + 863, // 341: forge.MachineInterface.power_shelf_id:type_name -> common.PowerShelfId + 866, // 342: forge.MachineInterface.switch_id:type_name -> common.SwitchId + 19, // 343: forge.MachineInterface.association_type:type_name -> forge.InterfaceAssociationType + 309, // 344: forge.InfinibandStatusObservation.ib_interfaces:type_name -> forge.MachineIbInterface + 857, // 345: forge.InfinibandStatusObservation.observed_at:type_name -> google.protobuf.Timestamp + 878, // 346: forge.MachineIbInterface.associated_pkeys:type_name -> common.StringList + 878, // 347: forge.MachineIbInterface.associated_partition_ids:type_name -> common.StringList + 20, // 348: forge.ExpireDhcpLeaseResponse.status:type_name -> forge.ExpireDhcpLeaseStatus + 856, // 349: forge.DhcpRecord.machine_id:type_name -> common.MachineId + 875, // 350: forge.DhcpRecord.machine_interface_id:type_name -> common.MachineInterfaceId + 867, // 351: forge.DhcpRecord.segment_id:type_name -> common.NetworkSegmentId + 868, // 352: forge.DhcpRecord.subdomain_id:type_name -> common.DomainId + 857, // 353: forge.DhcpRecord.last_invalidation_time:type_name -> google.protobuf.Timestamp + 212, // 354: forge.NetworkSegmentList.network_segments:type_name -> forge.NetworkSegment + 21, // 355: forge.SSHKeyValidationResponse.role:type_name -> forge.UserRoles + 319, // 356: forge.GetBmcCredentialsResponse.credentials:type_name -> forge.BmcCredentials + 727, // 357: forge.BmcCredentials.username_password:type_name -> forge.UsernamePassword + 728, // 358: forge.BmcCredentials.session_token:type_name -> forge.SessionToken + 326, // 359: forge.SshRequest.endpoint_request:type_name -> forge.BmcEndpointRequest + 328, // 360: forge.CopyBfbToDpuRshimRequest.ssh_request:type_name -> forge.SshRequest + 856, // 361: forge.UpdateMachineHardwareInfoRequest.machine_id:type_name -> common.MachineId + 331, // 362: forge.UpdateMachineHardwareInfoRequest.info:type_name -> forge.MachineHardwareInfo + 22, // 363: forge.UpdateMachineHardwareInfoRequest.update_type:type_name -> forge.MachineHardwareInfoUpdateType + 879, // 364: forge.MachineHardwareInfo.gpus:type_name -> machine_discovery.Gpu + 856, // 365: forge.ManagedHostNetworkConfigRequest.dpu_machine_id:type_name -> common.MachineId + 344, // 366: forge.ManagedHostNetworkConfigResponse.managed_host_config:type_name -> forge.ManagedHostNetworkConfig + 345, // 367: forge.ManagedHostNetworkConfigResponse.admin_interface:type_name -> forge.FlatInterfaceConfig + 345, // 368: forge.ManagedHostNetworkConfigResponse.tenant_interfaces:type_name -> forge.FlatInterfaceConfig + 870, // 369: forge.ManagedHostNetworkConfigResponse.instance_id:type_name -> common.InstanceId + 3, // 370: forge.ManagedHostNetworkConfigResponse.network_virtualization_type:type_name -> forge.VpcVirtualizationType + 24, // 371: forge.ManagedHostNetworkConfigResponse.vpc_isolation_behavior:type_name -> forge.VpcIsolationBehaviorType + 254, // 372: forge.ManagedHostNetworkConfigResponse.instance:type_name -> forge.Instance + 880, // 373: forge.ManagedHostNetworkConfigResponse.common_internal_route_target:type_name -> common.RouteTarget + 880, // 374: forge.ManagedHostNetworkConfigResponse.additional_route_target_imports:type_name -> common.RouteTarget + 598, // 375: forge.ManagedHostNetworkConfigResponse.network_security_policy_overrides:type_name -> forge.ResolvedNetworkSecurityGroupRule + 336, // 376: forge.ManagedHostNetworkConfigResponse.dpu_extension_services:type_name -> forge.ManagedHostDpuExtensionServiceConfig + 334, // 377: forge.ManagedHostNetworkConfigResponse.traffic_intercept_config:type_name -> forge.TrafficInterceptConfig + 762, // 378: forge.ManagedHostNetworkConfigResponse.routing_profile:type_name -> forge.RoutingProfile + 335, // 379: forge.TrafficInterceptConfig.bridging:type_name -> forge.TrafficInterceptBridging + 55, // 380: forge.ManagedHostDpuExtensionServiceConfig.service_type:type_name -> forge.DpuExtensionServiceType + 729, // 381: forge.ManagedHostDpuExtensionServiceConfig.credential:type_name -> forge.DpuExtensionServiceCredential + 748, // 382: forge.ManagedHostDpuExtensionServiceConfig.observability:type_name -> forge.DpuExtensionServiceObservability + 23, // 383: forge.ManagedHostQuarantineState.mode:type_name -> forge.ManagedHostQuarantineMode + 856, // 384: forge.GetManagedHostQuarantineStateRequest.machine_id:type_name -> common.MachineId + 337, // 385: forge.GetManagedHostQuarantineStateResponse.quarantine_state:type_name -> forge.ManagedHostQuarantineState + 856, // 386: forge.SetManagedHostQuarantineStateRequest.machine_id:type_name -> common.MachineId + 337, // 387: forge.SetManagedHostQuarantineStateRequest.quarantine_state:type_name -> forge.ManagedHostQuarantineState + 337, // 388: forge.SetManagedHostQuarantineStateResponse.prior_quarantine_state:type_name -> forge.ManagedHostQuarantineState + 856, // 389: forge.ClearManagedHostQuarantineStateRequest.machine_id:type_name -> common.MachineId + 337, // 390: forge.ClearManagedHostQuarantineStateResponse.prior_quarantine_state:type_name -> forge.ManagedHostQuarantineState + 337, // 391: forge.ManagedHostNetworkConfig.quarantine_state:type_name -> forge.ManagedHostQuarantineState + 28, // 392: forge.FlatInterfaceConfig.function_type:type_name -> forge.InterfaceFunctionType + 346, // 393: forge.FlatInterfaceConfig.network_security_group:type_name -> forge.FlatInterfaceNetworkSecurityGroupConfig + 865, // 394: forge.FlatInterfaceConfig.internal_uuid:type_name -> common.UUID + 44, // 395: forge.FlatInterfaceNetworkSecurityGroupConfig.source:type_name -> forge.NetworkSecurityGroupSource + 598, // 396: forge.FlatInterfaceNetworkSecurityGroupConfig.rules:type_name -> forge.ResolvedNetworkSecurityGroupRule + 395, // 397: forge.ManagedHostNetworkStatusResponse.all:type_name -> forge.DpuNetworkStatus + 857, // 398: forge.DpuAgentUpgradeCheckRequest.binary_mtime:type_name -> google.protobuf.Timestamp + 25, // 399: forge.DpuAgentUpgradePolicyRequest.new_policy:type_name -> forge.AgentUpgradePolicy + 25, // 400: forge.DpuAgentUpgradePolicyResponse.active_policy:type_name -> forge.AgentUpgradePolicy + 326, // 401: forge.LockdownRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 856, // 402: forge.LockdownRequest.machine_id:type_name -> common.MachineId + 26, // 403: forge.LockdownRequest.action:type_name -> forge.LockdownAction + 326, // 404: forge.LockdownStatusRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 856, // 405: forge.LockdownStatusRequest.machine_id:type_name -> common.MachineId + 326, // 406: forge.MachineSetupStatusRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 326, // 407: forge.MachineSetupRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 326, // 408: forge.SetDpuFirstBootOrderRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 326, // 409: forge.AdminRebootRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 326, // 410: forge.AdminBmcResetRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 326, // 411: forge.EnableInfiniteBootRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 326, // 412: forge.IsInfiniteBootEnabledRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 856, // 413: forge.BMCMetaDataGetRequest.machine_id:type_name -> common.MachineId + 21, // 414: forge.BMCMetaDataGetRequest.role:type_name -> forge.UserRoles + 27, // 415: forge.BMCMetaDataGetRequest.request_type:type_name -> forge.BMCRequestType + 326, // 416: forge.BMCMetaDataGetRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 856, // 417: forge.MachineCredentialsUpdateRequest.machine_id:type_name -> common.MachineId + 841, // 418: forge.MachineCredentialsUpdateRequest.credentials:type_name -> forge.MachineCredentialsUpdateRequest.Credentials + 856, // 419: forge.ForgeAgentControlRequest.machine_id:type_name -> common.MachineId + 68, // 420: forge.ForgeAgentControlResponse.action:type_name -> forge.ForgeAgentControlResponse.Action + 842, // 421: forge.ForgeAgentControlResponse.data:type_name -> forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo + 875, // 422: forge.MachineDiscoveryInfo.machine_interface_id:type_name -> common.MachineInterfaceId + 876, // 423: forge.MachineDiscoveryInfo.info:type_name -> machine_discovery.DiscoveryInfo + 856, // 424: forge.MachineDiscoveryCompletedRequest.machine_id:type_name -> common.MachineId + 856, // 425: forge.MachineCleanupInfo.machine_id:type_name -> common.MachineId + 844, // 426: forge.MachineCleanupInfo.nvme:type_name -> forge.MachineCleanupInfo.CleanupStepResult + 844, // 427: forge.MachineCleanupInfo.ram:type_name -> forge.MachineCleanupInfo.CleanupStepResult + 844, // 428: forge.MachineCleanupInfo.mem_overwrite:type_name -> forge.MachineCleanupInfo.CleanupStepResult + 844, // 429: forge.MachineCleanupInfo.ib:type_name -> forge.MachineCleanupInfo.CleanupStepResult + 69, // 430: forge.MachineCleanupInfo.result:type_name -> forge.MachineCleanupInfo.CleanupResult + 381, // 431: forge.MachineCertificateResult.machine_certificate:type_name -> forge.MachineCertificate + 856, // 432: forge.MachineDiscoveryResult.machine_id:type_name -> common.MachineId + 381, // 433: forge.MachineDiscoveryResult.machine_certificate:type_name -> forge.MachineCertificate + 104, // 434: forge.MachineDiscoveryResult.attest_key_challenge:type_name -> forge.AttestKeyBindChallenge + 875, // 435: forge.MachineDiscoveryResult.machine_interface_id:type_name -> common.MachineInterfaceId + 856, // 436: forge.ForgeScoutErrorReport.machine_id:type_name -> common.MachineId + 875, // 437: forge.ForgeScoutErrorReport.machine_interface_id:type_name -> common.MachineInterfaceId + 18, // 438: forge.PxeInstructionRequest.arch:type_name -> forge.MachineArchitecture + 875, // 439: forge.PxeInstructionRequest.interface_id:type_name -> common.MachineInterfaceId + 307, // 440: forge.CloudInitDiscoveryInstructions.machine_interface:type_name -> forge.MachineInterface + 768, // 441: forge.CloudInitDiscoveryInstructions.domain:type_name -> forge.PxeDomain + 391, // 442: forge.CloudInitInstructions.discovery_instructions:type_name -> forge.CloudInitDiscoveryInstructions + 392, // 443: forge.CloudInitInstructions.metadata:type_name -> forge.CloudInitMetaData + 856, // 444: forge.DpuNetworkStatus.dpu_machine_id:type_name -> common.MachineId + 857, // 445: forge.DpuNetworkStatus.observed_at:type_name -> google.protobuf.Timestamp + 407, // 446: forge.DpuNetworkStatus.interfaces:type_name -> forge.InstanceInterfaceStatusObservation + 870, // 447: forge.DpuNetworkStatus.instance_id:type_name -> common.InstanceId + 874, // 448: forge.DpuNetworkStatus.dpu_health:type_name -> health.HealthReport + 408, // 449: forge.DpuNetworkStatus.fabric_interfaces:type_name -> forge.FabricInterfaceData + 396, // 450: forge.DpuNetworkStatus.last_dhcp_requests:type_name -> forge.LastDhcpRequest + 397, // 451: forge.DpuNetworkStatus.dpu_extension_services:type_name -> forge.DpuExtensionServiceStatusObservation + 875, // 452: forge.LastDhcpRequest.host_interface_id:type_name -> common.MachineInterfaceId + 55, // 453: forge.DpuExtensionServiceStatusObservation.service_type:type_name -> forge.DpuExtensionServiceType + 56, // 454: forge.DpuExtensionServiceStatusObservation.state:type_name -> forge.DpuExtensionServiceDeploymentStatus + 398, // 455: forge.DpuExtensionServiceStatusObservation.components:type_name -> forge.DpuExtensionServiceComponent + 874, // 456: forge.OptionalHealthReport.report:type_name -> health.HealthReport + 874, // 457: forge.HealthReportOverride.report:type_name -> health.HealthReport + 29, // 458: forge.HealthReportOverride.mode:type_name -> forge.OverrideMode + 856, // 459: forge.InsertHealthReportOverrideRequest.machine_id:type_name -> common.MachineId + 400, // 460: forge.InsertHealthReportOverrideRequest.override:type_name -> forge.HealthReportOverride + 864, // 461: forge.InsertRackHealthReportOverrideRequest.rack_id:type_name -> common.RackId + 400, // 462: forge.InsertRackHealthReportOverrideRequest.override:type_name -> forge.HealthReportOverride + 864, // 463: forge.RemoveRackHealthReportOverrideRequest.rack_id:type_name -> common.RackId + 864, // 464: forge.ListRackHealthReportOverridesRequest.rack_id:type_name -> common.RackId + 400, // 465: forge.ListHealthReportOverrideResponse.overrides:type_name -> forge.HealthReportOverride + 856, // 466: forge.RemoveHealthReportOverrideRequest.machine_id:type_name -> common.MachineId + 28, // 467: forge.InstanceInterfaceStatusObservation.function_type:type_name -> forge.InterfaceFunctionType + 592, // 468: forge.InstanceInterfaceStatusObservation.network_security_group:type_name -> forge.NetworkSecurityGroupStatus + 865, // 469: forge.InstanceInterfaceStatusObservation.internal_uuid:type_name -> common.UUID + 409, // 470: forge.FabricInterfaceData.link_data:type_name -> forge.LinkData + 226, // 471: forge.Tenant.metadata:type_name -> forge.Metadata + 58, // 472: forge.Tenant.routing_profile_type:type_name -> forge.RoutingProfileType + 226, // 473: forge.CreateTenantRequest.metadata:type_name -> forge.Metadata + 58, // 474: forge.CreateTenantRequest.routing_profile_type:type_name -> forge.RoutingProfileType + 410, // 475: forge.CreateTenantResponse.tenant:type_name -> forge.Tenant + 226, // 476: forge.UpdateTenantRequest.metadata:type_name -> forge.Metadata + 58, // 477: forge.UpdateTenantRequest.routing_profile_type:type_name -> forge.RoutingProfileType + 410, // 478: forge.UpdateTenantResponse.tenant:type_name -> forge.Tenant + 410, // 479: forge.FindTenantResponse.tenant:type_name -> forge.Tenant + 418, // 480: forge.TenantKeysetContent.public_keys:type_name -> forge.TenantPublicKey + 417, // 481: forge.TenantKeyset.keyset_identifier:type_name -> forge.TenantKeysetIdentifier + 419, // 482: forge.TenantKeyset.keyset_content:type_name -> forge.TenantKeysetContent + 417, // 483: forge.CreateTenantKeysetRequest.keyset_identifier:type_name -> forge.TenantKeysetIdentifier + 419, // 484: forge.CreateTenantKeysetRequest.keyset_content:type_name -> forge.TenantKeysetContent + 420, // 485: forge.CreateTenantKeysetResponse.keyset:type_name -> forge.TenantKeyset + 420, // 486: forge.TenantKeySetList.keyset:type_name -> forge.TenantKeyset + 417, // 487: forge.UpdateTenantKeysetRequest.keyset_identifier:type_name -> forge.TenantKeysetIdentifier + 419, // 488: forge.UpdateTenantKeysetRequest.keyset_content:type_name -> forge.TenantKeysetContent + 417, // 489: forge.DeleteTenantKeysetRequest.keyset_identifier:type_name -> forge.TenantKeysetIdentifier + 417, // 490: forge.TenantKeysetIdList.keyset_ids:type_name -> forge.TenantKeysetIdentifier + 417, // 491: forge.TenantKeysetsByIdsRequest.keyset_ids:type_name -> forge.TenantKeysetIdentifier + 435, // 492: forge.ResourcePools.pools:type_name -> forge.ResourcePool + 31, // 493: forge.MaintenanceRequest.operation:type_name -> forge.MaintenanceOperation + 856, // 494: forge.MaintenanceRequest.host_id:type_name -> common.MachineId + 32, // 495: forge.SetDynamicConfigRequest.setting:type_name -> forge.ConfigSetting + 459, // 496: forge.FindIpAddressResponse.matches:type_name -> forge.IpAddressMatch + 865, // 497: forge.IdentifyUuidRequest.uuid:type_name -> common.UUID + 865, // 498: forge.IdentifyUuidResponse.uuid:type_name -> common.UUID + 33, // 499: forge.IdentifyUuidResponse.object_type:type_name -> forge.UuidType + 34, // 500: forge.IdentifyMacResponse.object_type:type_name -> forge.MacOwner + 856, // 501: forge.IdentifySerialResponse.machine_id:type_name -> common.MachineId + 856, // 502: forge.DpuReprovisioningRequest.dpu_id:type_name -> common.MachineId + 70, // 503: forge.DpuReprovisioningRequest.mode:type_name -> forge.DpuReprovisioningRequest.Mode + 35, // 504: forge.DpuReprovisioningRequest.initiator:type_name -> forge.UpdateInitiator + 856, // 505: forge.DpuReprovisioningRequest.machine_id:type_name -> common.MachineId + 845, // 506: forge.DpuReprovisioningListResponse.dpus:type_name -> forge.DpuReprovisioningListResponse.DpuReprovisioningListItem + 856, // 507: forge.HostReprovisioningRequest.machine_id:type_name -> common.MachineId + 71, // 508: forge.HostReprovisioningRequest.mode:type_name -> forge.HostReprovisioningRequest.Mode + 35, // 509: forge.HostReprovisioningRequest.initiator:type_name -> forge.UpdateInitiator + 846, // 510: forge.HostReprovisioningListResponse.hosts:type_name -> forge.HostReprovisioningListResponse.HostReprovisioningListItem + 456, // 511: forge.GetDpuInfoListResponse.dpu_list:type_name -> forge.DpuInfo + 36, // 512: forge.IpAddressMatch.ip_type:type_name -> forge.IpType + 875, // 513: forge.MachineBootOverride.machine_interface_id:type_name -> common.MachineInterfaceId + 856, // 514: forge.ConnectedDevice.id:type_name -> common.MachineId + 461, // 515: forge.ConnectedDeviceList.connected_devices:type_name -> forge.ConnectedDevice + 467, // 516: forge.MachineIdBmcIpPairs.pairs:type_name -> forge.MachineIdBmcIp + 856, // 517: forge.MachineIdBmcIp.machine_id:type_name -> common.MachineId + 461, // 518: forge.NetworkDevice.devices:type_name -> forge.ConnectedDevice + 468, // 519: forge.NetworkTopologyData.network_devices:type_name -> forge.NetworkDevice + 37, // 520: forge.RouteServers.source_type:type_name -> forge.RouteServerSourceType + 474, // 521: forge.RouteServerEntries.route_servers:type_name -> forge.RouteServer + 37, // 522: forge.RouteServer.source_type:type_name -> forge.RouteServerSourceType + 856, // 523: forge.SetHostUefiPasswordRequest.host_id:type_name -> common.MachineId + 856, // 524: forge.ClearHostUefiPasswordRequest.host_id:type_name -> common.MachineId + 865, // 525: forge.OsImageAttributes.id:type_name -> common.UUID + 479, // 526: forge.OsImage.attributes:type_name -> forge.OsImageAttributes + 38, // 527: forge.OsImage.status:type_name -> forge.OsImageStatus + 480, // 528: forge.ListOsImageResponse.images:type_name -> forge.OsImage + 865, // 529: forge.DeleteOsImageRequest.id:type_name -> common.UUID + 871, // 530: forge.GetIpxeTemplateRequest.id:type_name -> common.IpxeTemplateId + 235, // 531: forge.IpxeTemplateList.templates:type_name -> forge.IpxeTemplate + 226, // 532: forge.ExpectedMachine.metadata:type_name -> forge.Metadata + 865, // 533: forge.ExpectedMachine.id:type_name -> common.UUID + 488, // 534: forge.ExpectedMachine.host_nics:type_name -> forge.ExpectedHostNic + 864, // 535: forge.ExpectedMachine.rack_id:type_name -> common.RackId + 865, // 536: forge.ExpectedMachineRequest.id:type_name -> common.UUID + 489, // 537: forge.ExpectedMachineList.expected_machines:type_name -> forge.ExpectedMachine + 493, // 538: forge.LinkedExpectedMachineList.expected_machines:type_name -> forge.LinkedExpectedMachine + 856, // 539: forge.LinkedExpectedMachine.machine_id:type_name -> common.MachineId + 865, // 540: forge.LinkedExpectedMachine.expected_machine_id:type_name -> common.UUID + 491, // 541: forge.BatchExpectedMachineOperationRequest.expected_machines:type_name -> forge.ExpectedMachineList + 865, // 542: forge.ExpectedMachineOperationResult.id:type_name -> common.UUID + 489, // 543: forge.ExpectedMachineOperationResult.expected_machine:type_name -> forge.ExpectedMachine + 495, // 544: forge.BatchExpectedMachineOperationResponse.results:type_name -> forge.ExpectedMachineOperationResult + 856, // 545: forge.MachineRebootCompletedRequest.machine_id:type_name -> common.MachineId + 856, // 546: forge.MachineValidationCompletedRequest.machine_id:type_name -> common.MachineId + 865, // 547: forge.MachineValidationCompletedRequest.validation_id:type_name -> common.UUID + 857, // 548: forge.MachineValidationResult.start_time:type_name -> google.protobuf.Timestamp + 857, // 549: forge.MachineValidationResult.end_time:type_name -> google.protobuf.Timestamp + 865, // 550: forge.MachineValidationResult.validation_id:type_name -> common.UUID + 501, // 551: forge.MachineValidationResultPostRequest.result:type_name -> forge.MachineValidationResult + 501, // 552: forge.MachineValidationResultList.results:type_name -> forge.MachineValidationResult + 856, // 553: forge.MachineValidationGetRequest.machine_id:type_name -> common.MachineId + 865, // 554: forge.MachineValidationGetRequest.validation_id:type_name -> common.UUID + 39, // 555: forge.MachineValidationStatus.started:type_name -> forge.MachineValidationStarted + 40, // 556: forge.MachineValidationStatus.in_progress:type_name -> forge.MachineValidationInProgress + 41, // 557: forge.MachineValidationStatus.completed:type_name -> forge.MachineValidationCompleted + 865, // 558: forge.MachineValidationRun.validation_id:type_name -> common.UUID + 856, // 559: forge.MachineValidationRun.machine_id:type_name -> common.MachineId + 857, // 560: forge.MachineValidationRun.start_time:type_name -> google.protobuf.Timestamp + 857, // 561: forge.MachineValidationRun.end_time:type_name -> google.protobuf.Timestamp + 505, // 562: forge.MachineValidationRun.status:type_name -> forge.MachineValidationStatus + 877, // 563: forge.MachineValidationRun.duration_to_complete:type_name -> google.protobuf.Duration + 856, // 564: forge.MachineSetAutoUpdateRequest.machine_id:type_name -> common.MachineId + 72, // 565: forge.MachineSetAutoUpdateRequest.action:type_name -> forge.MachineSetAutoUpdateRequest.SetAutoupdateAction + 857, // 566: forge.MachineValidationExternalConfig.timestamp:type_name -> google.protobuf.Timestamp + 510, // 567: forge.GetMachineValidationExternalConfigResponse.config:type_name -> forge.MachineValidationExternalConfig + 510, // 568: forge.GetMachineValidationExternalConfigsResponse.configs:type_name -> forge.MachineValidationExternalConfig + 856, // 569: forge.MachineValidationOnDemandRequest.machine_id:type_name -> common.MachineId + 73, // 570: forge.MachineValidationOnDemandRequest.action:type_name -> forge.MachineValidationOnDemandRequest.Action + 865, // 571: forge.MachineValidationOnDemandResponse.validation_id:type_name -> common.UUID + 326, // 572: forge.AdminPowerControlRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 74, // 573: forge.AdminPowerControlRequest.action:type_name -> forge.AdminPowerControlRequest.SystemPowerControl + 856, // 574: forge.GetRedfishJobStateRequest.machine_id:type_name -> common.MachineId + 75, // 575: forge.GetRedfishJobStateResponse.job_state:type_name -> forge.GetRedfishJobStateResponse.RedfishJobState + 506, // 576: forge.MachineValidationRunList.runs:type_name -> forge.MachineValidationRun + 856, // 577: forge.MachineValidationRunListGetRequest.machine_id:type_name -> common.MachineId + 847, // 578: forge.MachineValidationTestUpdateRequest.payload:type_name -> forge.MachineValidationTestUpdateRequest.Payload + 533, // 579: forge.MachineValidationTestsGetResponse.tests:type_name -> forge.MachineValidationTest + 865, // 580: forge.MachineValidationRunRequest.validation_id:type_name -> common.UUID + 877, // 581: forge.MachineValidationRunRequest.duration_to_complete:type_name -> google.protobuf.Duration + 42, // 582: forge.MachineCapabilityAttributesGpu.device_type:type_name -> forge.MachineCapabilityDeviceType + 42, // 583: forge.MachineCapabilityAttributesNetwork.device_type:type_name -> forge.MachineCapabilityDeviceType + 540, // 584: forge.MachineCapabilitiesSet.cpu:type_name -> forge.MachineCapabilityAttributesCpu + 541, // 585: forge.MachineCapabilitiesSet.gpu:type_name -> forge.MachineCapabilityAttributesGpu + 542, // 586: forge.MachineCapabilitiesSet.memory:type_name -> forge.MachineCapabilityAttributesMemory + 543, // 587: forge.MachineCapabilitiesSet.storage:type_name -> forge.MachineCapabilityAttributesStorage + 544, // 588: forge.MachineCapabilitiesSet.network:type_name -> forge.MachineCapabilityAttributesNetwork + 545, // 589: forge.MachineCapabilitiesSet.infiniband:type_name -> forge.MachineCapabilityAttributesInfiniband + 546, // 590: forge.MachineCapabilitiesSet.dpu:type_name -> forge.MachineCapabilityAttributesDpu + 550, // 591: forge.InstanceTypeAttributes.desired_capabilities:type_name -> forge.InstanceTypeMachineCapabilityFilterAttributes + 548, // 592: forge.InstanceType.attributes:type_name -> forge.InstanceTypeAttributes + 226, // 593: forge.InstanceType.metadata:type_name -> forge.Metadata + 649, // 594: forge.InstanceType.allocation_stats:type_name -> forge.InstanceTypeAllocationStats + 43, // 595: forge.InstanceTypeMachineCapabilityFilterAttributes.capability_type:type_name -> forge.MachineCapabilityType + 881, // 596: forge.InstanceTypeMachineCapabilityFilterAttributes.inactive_devices:type_name -> common.Uint32List + 42, // 597: forge.InstanceTypeMachineCapabilityFilterAttributes.device_type:type_name -> forge.MachineCapabilityDeviceType + 226, // 598: forge.CreateInstanceTypeRequest.metadata:type_name -> forge.Metadata + 548, // 599: forge.CreateInstanceTypeRequest.instance_type_attributes:type_name -> forge.InstanceTypeAttributes + 549, // 600: forge.CreateInstanceTypeResponse.instance_type:type_name -> forge.InstanceType + 549, // 601: forge.FindInstanceTypesByIdsResponse.instance_types:type_name -> forge.InstanceType + 549, // 602: forge.UpdateInstanceTypeResponse.instance_type:type_name -> forge.InstanceType + 226, // 603: forge.UpdateInstanceTypeRequest.metadata:type_name -> forge.Metadata + 548, // 604: forge.UpdateInstanceTypeRequest.instance_type_attributes:type_name -> forge.InstanceTypeAttributes + 848, // 605: forge.RedfishBrowseResponse.headers:type_name -> forge.RedfishBrowseResponse.HeadersEntry + 569, // 606: forge.RedfishListActionsResponse.actions:type_name -> forge.RedfishAction + 857, // 607: forge.RedfishAction.approver_dates:type_name -> google.protobuf.Timestamp + 857, // 608: forge.RedfishAction.applied_at:type_name -> google.protobuf.Timestamp + 570, // 609: forge.RedfishAction.results:type_name -> forge.OptionalRedfishActionResult + 571, // 610: forge.OptionalRedfishActionResult.result:type_name -> forge.RedfishActionResult + 849, // 611: forge.RedfishActionResult.headers:type_name -> forge.RedfishActionResult.HeadersEntry + 857, // 612: forge.RedfishActionResult.completed_at:type_name -> google.protobuf.Timestamp + 850, // 613: forge.UfmBrowseResponse.headers:type_name -> forge.UfmBrowseResponse.HeadersEntry + 597, // 614: forge.NetworkSecurityGroupAttributes.rules:type_name -> forge.NetworkSecurityGroupRuleAttributes + 226, // 615: forge.NetworkSecurityGroup.metadata:type_name -> forge.Metadata + 580, // 616: forge.NetworkSecurityGroup.attributes:type_name -> forge.NetworkSecurityGroupAttributes + 226, // 617: forge.CreateNetworkSecurityGroupRequest.metadata:type_name -> forge.Metadata + 580, // 618: forge.CreateNetworkSecurityGroupRequest.network_security_group_attributes:type_name -> forge.NetworkSecurityGroupAttributes + 581, // 619: forge.CreateNetworkSecurityGroupResponse.network_security_group:type_name -> forge.NetworkSecurityGroup + 581, // 620: forge.FindNetworkSecurityGroupsByIdsResponse.network_security_groups:type_name -> forge.NetworkSecurityGroup + 581, // 621: forge.UpdateNetworkSecurityGroupResponse.network_security_group:type_name -> forge.NetworkSecurityGroup + 226, // 622: forge.UpdateNetworkSecurityGroupRequest.metadata:type_name -> forge.Metadata + 580, // 623: forge.UpdateNetworkSecurityGroupRequest.network_security_group_attributes:type_name -> forge.NetworkSecurityGroupAttributes + 44, // 624: forge.NetworkSecurityGroupStatus.source:type_name -> forge.NetworkSecurityGroupSource + 45, // 625: forge.NetworkSecurityGroupPropagationObjectStatus.status:type_name -> forge.NetworkSecurityGroupPropagationStatus + 593, // 626: forge.GetNetworkSecurityGroupPropagationStatusResponse.vpcs:type_name -> forge.NetworkSecurityGroupPropagationObjectStatus + 593, // 627: forge.GetNetworkSecurityGroupPropagationStatusResponse.instances:type_name -> forge.NetworkSecurityGroupPropagationObjectStatus + 595, // 628: forge.GetNetworkSecurityGroupPropagationStatusRequest.network_security_group_ids:type_name -> forge.NetworkSecurityGroupIdList + 46, // 629: forge.NetworkSecurityGroupRuleAttributes.direction:type_name -> forge.NetworkSecurityGroupRuleDirection + 47, // 630: forge.NetworkSecurityGroupRuleAttributes.protocol:type_name -> forge.NetworkSecurityGroupRuleProtocol + 48, // 631: forge.NetworkSecurityGroupRuleAttributes.action:type_name -> forge.NetworkSecurityGroupRuleAction + 597, // 632: forge.ResolvedNetworkSecurityGroupRule.rule:type_name -> forge.NetworkSecurityGroupRuleAttributes + 600, // 633: forge.GetNetworkSecurityGroupAttachmentsResponse.attachments:type_name -> forge.NetworkSecurityGroupAttachments + 604, // 634: forge.GetDesiredFirmwareVersionsResponse.entries:type_name -> forge.DesiredFirmwareVersionEntry + 851, // 635: forge.DesiredFirmwareVersionEntry.component_versions:type_name -> forge.DesiredFirmwareVersionEntry.ComponentVersionsEntry + 605, // 636: forge.SkuComponents.chassis:type_name -> forge.SkuComponentChassis + 606, // 637: forge.SkuComponents.cpus:type_name -> forge.SkuComponentCpu + 607, // 638: forge.SkuComponents.gpus:type_name -> forge.SkuComponentGpu + 608, // 639: forge.SkuComponents.ethernet_devices:type_name -> forge.SkuComponentEthernetDevices + 609, // 640: forge.SkuComponents.infiniband_devices:type_name -> forge.SkuComponentInfinibandDevices + 610, // 641: forge.SkuComponents.storage:type_name -> forge.SkuComponentStorage + 612, // 642: forge.SkuComponents.memory:type_name -> forge.SkuComponentMemory + 613, // 643: forge.SkuComponents.tpm:type_name -> forge.SkuComponentTpm + 857, // 644: forge.Sku.created:type_name -> google.protobuf.Timestamp + 614, // 645: forge.Sku.components:type_name -> forge.SkuComponents + 856, // 646: forge.Sku.associated_machine_ids:type_name -> common.MachineId + 856, // 647: forge.SkuMachinePair.machine_id:type_name -> common.MachineId + 856, // 648: forge.RemoveSkuRequest.machine_id:type_name -> common.MachineId + 615, // 649: forge.SkuList.skus:type_name -> forge.Sku + 857, // 650: forge.SkuStatus.verify_request_time:type_name -> google.protobuf.Timestamp + 857, // 651: forge.SkuStatus.last_match_attempt:type_name -> google.protobuf.Timestamp + 857, // 652: forge.SkuStatus.last_generate_attempt:type_name -> google.protobuf.Timestamp + 882, // 653: forge.DpaInterface.id:type_name -> common.DpaInterfaceId + 856, // 654: forge.DpaInterface.machine_id:type_name -> common.MachineId + 857, // 655: forge.DpaInterface.created:type_name -> google.protobuf.Timestamp + 857, // 656: forge.DpaInterface.updated:type_name -> google.protobuf.Timestamp + 857, // 657: forge.DpaInterface.deleted:type_name -> google.protobuf.Timestamp + 628, // 658: forge.DpaInterface.history:type_name -> forge.DpaInterfaceStateHistoryRecord + 857, // 659: forge.DpaInterface.last_hb_time:type_name -> google.protobuf.Timestamp + 856, // 660: forge.DpaInterfaceCreationRequest.machine_id:type_name -> common.MachineId + 882, // 661: forge.DpaInterfaceIdList.ids:type_name -> common.DpaInterfaceId + 882, // 662: forge.DpaInterfacesByIdsRequest.ids:type_name -> common.DpaInterfaceId + 623, // 663: forge.DpaInterfaceList.interfaces:type_name -> forge.DpaInterface + 857, // 664: forge.DpaInterfaceStateHistoryRecord.time:type_name -> google.protobuf.Timestamp + 882, // 665: forge.DpaNetworkObservationSetRequest.id:type_name -> common.DpaInterfaceId + 882, // 666: forge.DpaInterfaceDeletionRequest.id:type_name -> common.DpaInterfaceId + 856, // 667: forge.PowerOptionRequest.machine_id:type_name -> common.MachineId + 856, // 668: forge.PowerOptionUpdateRequest.machine_id:type_name -> common.MachineId + 49, // 669: forge.PowerOptionUpdateRequest.power_state:type_name -> forge.PowerState + 49, // 670: forge.PowerOptions.desired_state:type_name -> forge.PowerState + 857, // 671: forge.PowerOptions.desired_state_updated_at:type_name -> google.protobuf.Timestamp + 49, // 672: forge.PowerOptions.actual_state:type_name -> forge.PowerState + 857, // 673: forge.PowerOptions.actual_state_updated_at:type_name -> google.protobuf.Timestamp + 856, // 674: forge.PowerOptions.host_id:type_name -> common.MachineId + 857, // 675: forge.PowerOptions.next_power_state_fetch_at:type_name -> google.protobuf.Timestamp + 857, // 676: forge.PowerOptions.tried_triggering_on_at:type_name -> google.protobuf.Timestamp + 857, // 677: forge.PowerOptions.wait_until_time_before_performing_next_power_action:type_name -> google.protobuf.Timestamp + 635, // 678: forge.PowerOptionResponse.response:type_name -> forge.PowerOptions + 883, // 679: forge.ComputeAllocation.id:type_name -> common.ComputeAllocationId + 637, // 680: forge.ComputeAllocation.attributes:type_name -> forge.ComputeAllocationAttributes + 226, // 681: forge.ComputeAllocation.metadata:type_name -> forge.Metadata + 883, // 682: forge.CreateComputeAllocationRequest.id:type_name -> common.ComputeAllocationId + 226, // 683: forge.CreateComputeAllocationRequest.metadata:type_name -> forge.Metadata + 637, // 684: forge.CreateComputeAllocationRequest.attributes:type_name -> forge.ComputeAllocationAttributes + 638, // 685: forge.CreateComputeAllocationResponse.allocation:type_name -> forge.ComputeAllocation + 883, // 686: forge.FindComputeAllocationIdsResponse.ids:type_name -> common.ComputeAllocationId + 883, // 687: forge.FindComputeAllocationsByIdsRequest.ids:type_name -> common.ComputeAllocationId + 638, // 688: forge.FindComputeAllocationsByIdsResponse.allocations:type_name -> forge.ComputeAllocation + 638, // 689: forge.UpdateComputeAllocationResponse.allocation:type_name -> forge.ComputeAllocation + 883, // 690: forge.UpdateComputeAllocationRequest.id:type_name -> common.ComputeAllocationId + 226, // 691: forge.UpdateComputeAllocationRequest.metadata:type_name -> forge.Metadata + 637, // 692: forge.UpdateComputeAllocationRequest.attributes:type_name -> forge.ComputeAllocationAttributes + 883, // 693: forge.DeleteComputeAllocationRequest.id:type_name -> common.ComputeAllocationId + 656, // 694: forge.GetRackResponse.rack:type_name -> forge.Rack + 656, // 695: forge.RackList.racks:type_name -> forge.Rack + 864, // 696: forge.RackIdList.rack_ids:type_name -> common.RackId + 864, // 697: forge.RacksByIdsRequest.rack_ids:type_name -> common.RackId + 864, // 698: forge.Rack.id:type_name -> common.RackId + 856, // 699: forge.Rack.compute_trays:type_name -> common.MachineId + 863, // 700: forge.Rack.power_shelves:type_name -> common.PowerShelfId + 866, // 701: forge.Rack.switches:type_name -> common.SwitchId + 857, // 702: forge.Rack.created:type_name -> google.protobuf.Timestamp + 857, // 703: forge.Rack.updated:type_name -> google.protobuf.Timestamp + 857, // 704: forge.Rack.deleted:type_name -> google.protobuf.Timestamp + 874, // 705: forge.Rack.health:type_name -> health.HealthReport + 301, // 706: forge.Rack.health_overrides:type_name -> forge.HealthOverrideOrigin + 226, // 707: forge.Rack.metadata:type_name -> forge.Metadata + 857, // 708: forge.RackStateHistoryRecord.time:type_name -> google.protobuf.Timestamp + 864, // 709: forge.RackStateHistoriesRequest.rack_ids:type_name -> common.RackId + 852, // 710: forge.RackStateHistories.histories:type_name -> forge.RackStateHistories.HistoriesEntry + 657, // 711: forge.RackStateHistoryRecords.records:type_name -> forge.RackStateHistoryRecord + 50, // 712: forge.RackCapabilitiesSet.rack_hardware_type:type_name -> forge.RackHardwareType + 51, // 713: forge.RackCapabilitiesSet.rack_hardware_topology:type_name -> forge.RackHardwareTopology + 52, // 714: forge.RackCapabilitiesSet.rack_hardware_class:type_name -> forge.RackHardwareClass + 662, // 715: forge.RackCapabilitiesSet.compute:type_name -> forge.RackCapabilityCompute + 663, // 716: forge.RackCapabilitiesSet.switch:type_name -> forge.RackCapabilitySwitch + 664, // 717: forge.RackCapabilitiesSet.power_shelf:type_name -> forge.RackCapabilityPowerShelf + 864, // 718: forge.GetRackCapabilitiesRequest.rack_id:type_name -> common.RackId + 864, // 719: forge.GetRackCapabilitiesResponse.rack_id:type_name -> common.RackId + 665, // 720: forge.GetRackCapabilitiesResponse.capabilities:type_name -> forge.RackCapabilitiesSet + 53, // 721: forge.RackManagerForgeRequest.cmd:type_name -> forge.RackManagerForgeCmd + 873, // 722: forge.MachineNVLinkInfo.domain_uuid:type_name -> common.NVLinkDomainId + 672, // 723: forge.MachineNVLinkInfo.gpus:type_name -> forge.NVLinkGpu + 856, // 724: forge.UpdateMachineNvLinkInfoRequest.machine_id:type_name -> common.MachineId + 670, // 725: forge.UpdateMachineNvLinkInfoRequest.nvlink_info:type_name -> forge.MachineNVLinkInfo + 674, // 726: forge.MachineNVLinkStatusObservation.gpu_status:type_name -> forge.MachineNVLinkGpuStatusObservation + 884, // 727: forge.MachineNVLinkGpuStatusObservation.partition_id:type_name -> common.NVLinkPartitionId + 859, // 728: forge.MachineNVLinkGpuStatusObservation.logical_partition_id:type_name -> common.NVLinkLogicalPartitionId + 873, // 729: forge.MachineNVLinkGpuStatusObservation.domain_id:type_name -> common.NVLinkDomainId + 853, // 730: forge.NmxmBrowseResponse.headers:type_name -> forge.NmxmBrowseResponse.HeadersEntry + 884, // 731: forge.NVLinkPartition.id:type_name -> common.NVLinkPartitionId + 873, // 732: forge.NVLinkPartition.domain_uuid:type_name -> common.NVLinkDomainId + 859, // 733: forge.NVLinkPartition.logical_partition_id:type_name -> common.NVLinkLogicalPartitionId + 677, // 734: forge.NVLinkPartitionList.partitions:type_name -> forge.NVLinkPartition + 865, // 735: forge.NVLinkPartitionQuery.id:type_name -> common.UUID + 679, // 736: forge.NVLinkPartitionQuery.search_config:type_name -> forge.NVLinkPartitionSearchConfig + 884, // 737: forge.NVLinkPartitionsByIdsRequest.partition_ids:type_name -> common.NVLinkPartitionId + 884, // 738: forge.NVLinkPartitionIdList.partition_ids:type_name -> common.NVLinkPartitionId + 226, // 739: forge.NVLinkLogicalPartitionConfig.metadata:type_name -> forge.Metadata + 5, // 740: forge.NVLinkLogicalPartitionStatus.state:type_name -> forge.TenantState + 859, // 741: forge.NVLinkLogicalPartition.id:type_name -> common.NVLinkLogicalPartitionId + 685, // 742: forge.NVLinkLogicalPartition.config:type_name -> forge.NVLinkLogicalPartitionConfig + 686, // 743: forge.NVLinkLogicalPartition.status:type_name -> forge.NVLinkLogicalPartitionStatus + 857, // 744: forge.NVLinkLogicalPartition.created:type_name -> google.protobuf.Timestamp + 687, // 745: forge.NVLinkLogicalPartitionList.partitions:type_name -> forge.NVLinkLogicalPartition + 685, // 746: forge.NVLinkLogicalPartitionCreationRequest.config:type_name -> forge.NVLinkLogicalPartitionConfig + 859, // 747: forge.NVLinkLogicalPartitionCreationRequest.id:type_name -> common.NVLinkLogicalPartitionId + 859, // 748: forge.NVLinkLogicalPartitionDeletionRequest.id:type_name -> common.NVLinkLogicalPartitionId + 859, // 749: forge.NVLinkLogicalPartitionsByIdsRequest.partition_ids:type_name -> common.NVLinkLogicalPartitionId + 859, // 750: forge.NVLinkLogicalPartitionIdList.partition_ids:type_name -> common.NVLinkLogicalPartitionId + 859, // 751: forge.NVLinkLogicalPartitionUpdateRequest.id:type_name -> common.NVLinkLogicalPartitionId + 685, // 752: forge.NVLinkLogicalPartitionUpdateRequest.config:type_name -> forge.NVLinkLogicalPartitionConfig + 326, // 753: forge.CreateBmcUserRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 326, // 754: forge.DeleteBmcUserRequest.bmc_endpoint_request:type_name -> forge.BmcEndpointRequest + 856, // 755: forge.SetFirmwareUpdateTimeWindowRequest.machine_ids:type_name -> common.MachineId + 857, // 756: forge.SetFirmwareUpdateTimeWindowRequest.start_timestamp:type_name -> google.protobuf.Timestamp + 857, // 757: forge.SetFirmwareUpdateTimeWindowRequest.end_timestamp:type_name -> google.protobuf.Timestamp + 705, // 758: forge.ListHostFirmwareResponse.available:type_name -> forge.AvailableHostFirmware + 54, // 759: forge.TrimTableRequest.target:type_name -> forge.TrimTableTarget + 226, // 760: forge.CreateRemediationRequest.metadata:type_name -> forge.Metadata + 885, // 761: forge.CreateRemediationResponse.remediation_id:type_name -> common.RemediationId + 885, // 762: forge.RemediationIdList.remediation_ids:type_name -> common.RemediationId + 712, // 763: forge.RemediationList.remediations:type_name -> forge.Remediation + 885, // 764: forge.Remediation.id:type_name -> common.RemediationId + 226, // 765: forge.Remediation.metadata:type_name -> forge.Metadata + 857, // 766: forge.Remediation.creation_time:type_name -> google.protobuf.Timestamp + 885, // 767: forge.ApproveRemediationRequest.remediation_id:type_name -> common.RemediationId + 885, // 768: forge.RevokeRemediationRequest.remediation_id:type_name -> common.RemediationId + 885, // 769: forge.EnableRemediationRequest.remediation_id:type_name -> common.RemediationId + 885, // 770: forge.DisableRemediationRequest.remediation_id:type_name -> common.RemediationId + 885, // 771: forge.FindAppliedRemediationIdsRequest.remediation_id:type_name -> common.RemediationId + 856, // 772: forge.FindAppliedRemediationIdsRequest.dpu_machine_id:type_name -> common.MachineId + 885, // 773: forge.AppliedRemediationIdList.remediation_ids:type_name -> common.RemediationId + 856, // 774: forge.AppliedRemediationIdList.dpu_machine_ids:type_name -> common.MachineId + 885, // 775: forge.FindAppliedRemediationsRequest.remediation_id:type_name -> common.RemediationId + 856, // 776: forge.FindAppliedRemediationsRequest.dpu_machine_id:type_name -> common.MachineId + 885, // 777: forge.AppliedRemediation.remediation_id:type_name -> common.RemediationId + 856, // 778: forge.AppliedRemediation.dpu_machine_id:type_name -> common.MachineId + 857, // 779: forge.AppliedRemediation.applied_time:type_name -> google.protobuf.Timestamp + 226, // 780: forge.AppliedRemediation.metadata:type_name -> forge.Metadata + 720, // 781: forge.AppliedRemediationList.applied_remediations:type_name -> forge.AppliedRemediation + 856, // 782: forge.GetNextRemediationForMachineRequest.dpu_machine_id:type_name -> common.MachineId + 885, // 783: forge.GetNextRemediationForMachineResponse.remediation_id:type_name -> common.RemediationId + 885, // 784: forge.RemediationAppliedRequest.remediation_id:type_name -> common.RemediationId + 856, // 785: forge.RemediationAppliedRequest.dpu_machine_id:type_name -> common.MachineId + 725, // 786: forge.RemediationAppliedRequest.status:type_name -> forge.RemediationApplicationStatus + 226, // 787: forge.RemediationApplicationStatus.metadata:type_name -> forge.Metadata + 856, // 788: forge.SetPrimaryDpuRequest.host_machine_id:type_name -> common.MachineId + 856, // 789: forge.SetPrimaryDpuRequest.dpu_machine_id:type_name -> common.MachineId + 727, // 790: forge.DpuExtensionServiceCredential.username_password:type_name -> forge.UsernamePassword + 748, // 791: forge.DpuExtensionServiceVersionInfo.observability:type_name -> forge.DpuExtensionServiceObservability + 55, // 792: forge.DpuExtensionService.service_type:type_name -> forge.DpuExtensionServiceType + 730, // 793: forge.DpuExtensionService.latest_version_info:type_name -> forge.DpuExtensionServiceVersionInfo + 55, // 794: forge.CreateDpuExtensionServiceRequest.service_type:type_name -> forge.DpuExtensionServiceType + 729, // 795: forge.CreateDpuExtensionServiceRequest.credential:type_name -> forge.DpuExtensionServiceCredential + 748, // 796: forge.CreateDpuExtensionServiceRequest.observability:type_name -> forge.DpuExtensionServiceObservability + 729, // 797: forge.UpdateDpuExtensionServiceRequest.credential:type_name -> forge.DpuExtensionServiceCredential + 748, // 798: forge.UpdateDpuExtensionServiceRequest.observability:type_name -> forge.DpuExtensionServiceObservability + 55, // 799: forge.DpuExtensionServiceSearchFilter.service_type:type_name -> forge.DpuExtensionServiceType + 731, // 800: forge.DpuExtensionServiceList.services:type_name -> forge.DpuExtensionService + 730, // 801: forge.DpuExtensionServiceVersionInfoList.version_infos:type_name -> forge.DpuExtensionServiceVersionInfo + 744, // 802: forge.FindInstancesByDpuExtensionServiceResponse.instances:type_name -> forge.InstanceDpuExtensionServiceInfo + 745, // 803: forge.DpuExtensionServiceObservabilityConfig.prometheus:type_name -> forge.DpuExtensionServiceObservabilityConfigPrometheus + 746, // 804: forge.DpuExtensionServiceObservabilityConfig.logging:type_name -> forge.DpuExtensionServiceObservabilityConfigLogging + 747, // 805: forge.DpuExtensionServiceObservability.configs:type_name -> forge.DpuExtensionServiceObservabilityConfig + 865, // 806: forge.ScoutStreamApiBoundMessage.flow_uuid:type_name -> common.UUID + 751, // 807: forge.ScoutStreamApiBoundMessage.init:type_name -> forge.ScoutStreamInitRequest + 886, // 808: forge.ScoutStreamApiBoundMessage.mlx_device_lockdown_response:type_name -> mlx_device.MlxDeviceLockdownResponse + 887, // 809: forge.ScoutStreamApiBoundMessage.mlx_device_profile_sync_response:type_name -> mlx_device.MlxDeviceProfileSyncResponse + 888, // 810: forge.ScoutStreamApiBoundMessage.mlx_device_profile_compare_response:type_name -> mlx_device.MlxDeviceProfileCompareResponse + 889, // 811: forge.ScoutStreamApiBoundMessage.mlx_device_info_device_response:type_name -> mlx_device.MlxDeviceInfoDeviceResponse + 890, // 812: forge.ScoutStreamApiBoundMessage.mlx_device_info_report_response:type_name -> mlx_device.MlxDeviceInfoReportResponse + 891, // 813: forge.ScoutStreamApiBoundMessage.mlx_device_registry_list_response:type_name -> mlx_device.MlxDeviceRegistryListResponse + 892, // 814: forge.ScoutStreamApiBoundMessage.mlx_device_registry_show_response:type_name -> mlx_device.MlxDeviceRegistryShowResponse + 893, // 815: forge.ScoutStreamApiBoundMessage.mlx_device_config_query_response:type_name -> mlx_device.MlxDeviceConfigQueryResponse + 894, // 816: forge.ScoutStreamApiBoundMessage.mlx_device_config_set_response:type_name -> mlx_device.MlxDeviceConfigSetResponse + 895, // 817: forge.ScoutStreamApiBoundMessage.mlx_device_config_sync_response:type_name -> mlx_device.MlxDeviceConfigSyncResponse + 896, // 818: forge.ScoutStreamApiBoundMessage.mlx_device_config_compare_response:type_name -> mlx_device.MlxDeviceConfigCompareResponse + 759, // 819: forge.ScoutStreamApiBoundMessage.scout_stream_agent_ping_response:type_name -> forge.ScoutStreamAgentPingResponse + 865, // 820: forge.ScoutStreamScoutBoundMessage.flow_uuid:type_name -> common.UUID + 897, // 821: forge.ScoutStreamScoutBoundMessage.mlx_device_lockdown_lock_request:type_name -> mlx_device.MlxDeviceLockdownLockRequest + 898, // 822: forge.ScoutStreamScoutBoundMessage.mlx_device_lockdown_unlock_request:type_name -> mlx_device.MlxDeviceLockdownUnlockRequest + 899, // 823: forge.ScoutStreamScoutBoundMessage.mlx_device_lockdown_status_request:type_name -> mlx_device.MlxDeviceLockdownStatusRequest + 900, // 824: forge.ScoutStreamScoutBoundMessage.mlx_device_profile_sync_request:type_name -> mlx_device.MlxDeviceProfileSyncRequest + 901, // 825: forge.ScoutStreamScoutBoundMessage.mlx_device_profile_compare_request:type_name -> mlx_device.MlxDeviceProfileCompareRequest + 902, // 826: forge.ScoutStreamScoutBoundMessage.mlx_device_info_device_request:type_name -> mlx_device.MlxDeviceInfoDeviceRequest + 903, // 827: forge.ScoutStreamScoutBoundMessage.mlx_device_info_report_request:type_name -> mlx_device.MlxDeviceInfoReportRequest + 904, // 828: forge.ScoutStreamScoutBoundMessage.mlx_device_registry_list_request:type_name -> mlx_device.MlxDeviceRegistryListRequest + 905, // 829: forge.ScoutStreamScoutBoundMessage.mlx_device_registry_show_request:type_name -> mlx_device.MlxDeviceRegistryShowRequest + 906, // 830: forge.ScoutStreamScoutBoundMessage.mlx_device_config_query_request:type_name -> mlx_device.MlxDeviceConfigQueryRequest + 907, // 831: forge.ScoutStreamScoutBoundMessage.mlx_device_config_set_request:type_name -> mlx_device.MlxDeviceConfigSetRequest + 908, // 832: forge.ScoutStreamScoutBoundMessage.mlx_device_config_sync_request:type_name -> mlx_device.MlxDeviceConfigSyncRequest + 909, // 833: forge.ScoutStreamScoutBoundMessage.mlx_device_config_compare_request:type_name -> mlx_device.MlxDeviceConfigCompareRequest + 758, // 834: forge.ScoutStreamScoutBoundMessage.scout_stream_agent_ping_request:type_name -> forge.ScoutStreamAgentPingRequest + 856, // 835: forge.ScoutStreamInitRequest.machine_id:type_name -> common.MachineId + 760, // 836: forge.ScoutStreamShowConnectionsResponse.scout_stream_connections:type_name -> forge.ScoutStreamConnectionInfo + 856, // 837: forge.ScoutStreamDisconnectRequest.machine_id:type_name -> common.MachineId + 856, // 838: forge.ScoutStreamDisconnectResponse.machine_id:type_name -> common.MachineId + 856, // 839: forge.ScoutStreamAdminPingRequest.machine_id:type_name -> common.MachineId + 761, // 840: forge.ScoutStreamAgentPingResponse.error:type_name -> forge.ScoutStreamError + 856, // 841: forge.ScoutStreamConnectionInfo.machine_id:type_name -> common.MachineId + 57, // 842: forge.ScoutStreamError.status:type_name -> forge.ScoutStreamErrorStatus + 880, // 843: forge.RoutingProfile.route_target_imports:type_name -> common.RouteTarget + 880, // 844: forge.RoutingProfile.route_targets_on_exports:type_name -> common.RouteTarget + 868, // 845: forge.DomainLegacy.id:type_name -> common.DomainId + 857, // 846: forge.DomainLegacy.created:type_name -> google.protobuf.Timestamp + 857, // 847: forge.DomainLegacy.updated:type_name -> google.protobuf.Timestamp + 857, // 848: forge.DomainLegacy.deleted:type_name -> google.protobuf.Timestamp + 763, // 849: forge.DomainListLegacy.domains:type_name -> forge.DomainLegacy + 868, // 850: forge.DomainDeletionLegacy.id:type_name -> common.DomainId + 868, // 851: forge.DomainSearchQueryLegacy.id:type_name -> common.DomainId + 910, // 852: forge.PxeDomain.new_domain:type_name -> dns.Domain + 763, // 853: forge.PxeDomain.legacy_domain:type_name -> forge.DomainLegacy + 856, // 854: forge.MachinePositionQuery.machine_ids:type_name -> common.MachineId + 771, // 855: forge.MachinePositionInfoList.machine_position_info:type_name -> forge.MachinePositionInfo + 856, // 856: forge.MachinePositionInfo.machine_id:type_name -> common.MachineId + 866, // 857: forge.MachinePositionInfo.switch_id:type_name -> common.SwitchId + 863, // 858: forge.MachinePositionInfo.power_shelf_id:type_name -> common.PowerShelfId + 772, // 859: forge.RackFirmwareList.configs:type_name -> forge.RackFirmware + 864, // 860: forge.RackFirmwareApplyRequest.rack_id:type_name -> common.RackId + 781, // 861: forge.RackFirmwareApplyResponse.device_results:type_name -> forge.DeviceUpdateResult + 782, // 862: forge.DeviceUpdateResult.node_jobs:type_name -> forge.NodeJobInfo + 854, // 863: forge.RackFirmwareHistoryResponse.histories:type_name -> forge.RackFirmwareHistoryResponse.HistoriesEntry + 788, // 864: forge.RackFirmwareHistoryRecords.records:type_name -> forge.RackFirmwareHistoryRecord + 856, // 865: forge.ModifyDPFStateRequest.machine_id:type_name -> common.MachineId + 855, // 866: forge.DPFStateResponse.dpf_states:type_name -> forge.DPFStateResponse.DPFState + 856, // 867: forge.GetDPFStateRequest.machine_ids:type_name -> common.MachineId + 59, // 868: forge.ComponentResult.status:type_name -> forge.ComponentManagerStatusCode + 866, // 869: forge.SwitchIdList.ids:type_name -> common.SwitchId + 863, // 870: forge.PowerShelfIdList.ids:type_name -> common.PowerShelfId + 911, // 871: forge.GetComponentInventoryRequest.machine_ids:type_name -> common.MachineIdList + 793, // 872: forge.GetComponentInventoryRequest.switch_ids:type_name -> forge.SwitchIdList + 794, // 873: forge.GetComponentInventoryRequest.power_shelf_ids:type_name -> forge.PowerShelfIdList + 792, // 874: forge.ComponentInventoryEntry.result:type_name -> forge.ComponentResult + 912, // 875: forge.ComponentInventoryEntry.report:type_name -> site_explorer.EndpointExplorationReport + 796, // 876: forge.GetComponentInventoryResponse.entries:type_name -> forge.ComponentInventoryEntry + 911, // 877: forge.ComponentPowerControlRequest.machine_ids:type_name -> common.MachineIdList + 793, // 878: forge.ComponentPowerControlRequest.switch_ids:type_name -> forge.SwitchIdList + 794, // 879: forge.ComponentPowerControlRequest.power_shelf_ids:type_name -> forge.PowerShelfIdList + 913, // 880: forge.ComponentPowerControlRequest.action:type_name -> common.SystemPowerControl + 792, // 881: forge.ComponentPowerControlResponse.results:type_name -> forge.ComponentResult + 792, // 882: forge.FirmwareUpdateStatus.result:type_name -> forge.ComponentResult + 60, // 883: forge.FirmwareUpdateStatus.state:type_name -> forge.FirmwareUpdateState + 857, // 884: forge.FirmwareUpdateStatus.updated_at:type_name -> google.protobuf.Timestamp + 911, // 885: forge.UpdateComputeTrayFirmwareTarget.machine_ids:type_name -> common.MachineIdList + 63, // 886: forge.UpdateComputeTrayFirmwareTarget.components:type_name -> forge.ComputeTrayComponent + 793, // 887: forge.UpdateSwitchFirmwareTarget.switch_ids:type_name -> forge.SwitchIdList + 61, // 888: forge.UpdateSwitchFirmwareTarget.components:type_name -> forge.NvSwitchComponent + 794, // 889: forge.UpdatePowerShelfFirmwareTarget.power_shelf_ids:type_name -> forge.PowerShelfIdList + 62, // 890: forge.UpdatePowerShelfFirmwareTarget.components:type_name -> forge.PowerShelfComponent + 801, // 891: forge.UpdateComponentFirmwareRequest.compute_trays:type_name -> forge.UpdateComputeTrayFirmwareTarget + 802, // 892: forge.UpdateComponentFirmwareRequest.switches:type_name -> forge.UpdateSwitchFirmwareTarget + 803, // 893: forge.UpdateComponentFirmwareRequest.power_shelves:type_name -> forge.UpdatePowerShelfFirmwareTarget + 792, // 894: forge.UpdateComponentFirmwareResponse.results:type_name -> forge.ComponentResult + 911, // 895: forge.GetComponentFirmwareStatusRequest.machine_ids:type_name -> common.MachineIdList + 793, // 896: forge.GetComponentFirmwareStatusRequest.switch_ids:type_name -> forge.SwitchIdList + 794, // 897: forge.GetComponentFirmwareStatusRequest.power_shelf_ids:type_name -> forge.PowerShelfIdList + 800, // 898: forge.GetComponentFirmwareStatusResponse.statuses:type_name -> forge.FirmwareUpdateStatus + 911, // 899: forge.ListComponentFirmwareVersionsRequest.machine_ids:type_name -> common.MachineIdList + 793, // 900: forge.ListComponentFirmwareVersionsRequest.switch_ids:type_name -> forge.SwitchIdList + 794, // 901: forge.ListComponentFirmwareVersionsRequest.power_shelf_ids:type_name -> forge.PowerShelfIdList + 792, // 902: forge.DeviceFirmwareVersions.result:type_name -> forge.ComponentResult + 809, // 903: forge.ListComponentFirmwareVersionsResponse.devices:type_name -> forge.DeviceFirmwareVersions + 866, // 904: forge.AdminForceDeleteSwitchRequest.switch_id:type_name -> common.SwitchId + 863, // 905: forge.AdminForceDeletePowerShelfRequest.power_shelf_id:type_name -> common.PowerShelfId + 872, // 906: forge.OperatingSystem.id:type_name -> common.OperatingSystemId + 64, // 907: forge.OperatingSystem.type:type_name -> forge.OperatingSystemType + 5, // 908: forge.OperatingSystem.status:type_name -> forge.TenantState + 871, // 909: forge.OperatingSystem.ipxe_template_id:type_name -> common.IpxeTemplateId + 233, // 910: forge.OperatingSystem.ipxe_template_parameters:type_name -> forge.IpxeTemplateParameter + 234, // 911: forge.OperatingSystem.ipxe_template_artifacts:type_name -> forge.IpxeTemplateArtifact + 872, // 912: forge.CreateOperatingSystemRequest.id:type_name -> common.OperatingSystemId + 871, // 913: forge.CreateOperatingSystemRequest.ipxe_template_id:type_name -> common.IpxeTemplateId + 233, // 914: forge.CreateOperatingSystemRequest.ipxe_template_parameters:type_name -> forge.IpxeTemplateParameter + 234, // 915: forge.CreateOperatingSystemRequest.ipxe_template_artifacts:type_name -> forge.IpxeTemplateArtifact + 233, // 916: forge.IpxeTemplateParameters.items:type_name -> forge.IpxeTemplateParameter + 234, // 917: forge.IpxeTemplateArtifacts.items:type_name -> forge.IpxeTemplateArtifact + 872, // 918: forge.UpdateOperatingSystemRequest.id:type_name -> common.OperatingSystemId + 871, // 919: forge.UpdateOperatingSystemRequest.ipxe_template_id:type_name -> common.IpxeTemplateId + 817, // 920: forge.UpdateOperatingSystemRequest.ipxe_template_parameters:type_name -> forge.IpxeTemplateParameters + 818, // 921: forge.UpdateOperatingSystemRequest.ipxe_template_artifacts:type_name -> forge.IpxeTemplateArtifacts + 872, // 922: forge.DeleteOperatingSystemRequest.id:type_name -> common.OperatingSystemId + 872, // 923: forge.OperatingSystemIdList.ids:type_name -> common.OperatingSystemId + 872, // 924: forge.OperatingSystemsByIdsRequest.ids:type_name -> common.OperatingSystemId + 815, // 925: forge.OperatingSystemList.operating_systems:type_name -> forge.OperatingSystem + 872, // 926: forge.GetOperatingSystemCachableIpxeTemplateArtifactsRequest.id:type_name -> common.OperatingSystemId + 234, // 927: forge.IpxeTemplateArtifactList.artifacts:type_name -> forge.IpxeTemplateArtifact + 872, // 928: forge.UpdateOperatingSystemIpxeTemplateArtifactRequest.id:type_name -> common.OperatingSystemId + 828, // 929: forge.UpdateOperatingSystemIpxeTemplateArtifactRequest.updates:type_name -> forge.IpxeTemplateArtifactUpdateRequest + 865, // 930: forge.AttestationResponse.AttestationDeviceData.nonce:type_name -> common.UUID + 856, // 931: forge.AttestationResponse.AttestationMachineData.machine_id:type_name -> common.MachineId + 857, // 932: forge.AttestationResponse.AttestationMachineData.requested_at:type_name -> google.protobuf.Timestamp + 857, // 933: forge.AttestationResponse.AttestationMachineData.started_at:type_name -> google.protobuf.Timestamp + 857, // 934: forge.AttestationResponse.AttestationMachineData.canceled_at:type_name -> google.protobuf.Timestamp + 830, // 935: forge.AttestationResponse.AttestationMachineData.device_data:type_name -> forge.AttestationResponse.AttestationDeviceData + 835, // 936: forge.DNSMessage.DNSResponse.rrs:type_name -> forge.DNSMessage.DNSResponse.DNSRR + 177, // 937: forge.PowerShelfStateHistories.HistoriesEntry.value:type_name -> forge.PowerShelfStateHistoryRecords + 197, // 938: forge.SwitchStateHistories.HistoriesEntry.value:type_name -> forge.SwitchStateHistoryRecords + 271, // 939: forge.MachineStateHistories.HistoriesEntry.value:type_name -> forge.MachineStateHistoryRecords + 274, // 940: forge.HealthHistories.HistoriesEntry.value:type_name -> forge.HealthHistoryRecords + 67, // 941: forge.MachineCredentialsUpdateRequest.Credentials.credential_purpose:type_name -> forge.MachineCredentialsUpdateRequest.CredentialPurpose + 843, // 942: forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo.pair:type_name -> forge.ForgeAgentControlResponse.ForgeAgentControlExtraInfo.KeyValuePair + 69, // 943: forge.MachineCleanupInfo.CleanupStepResult.result:type_name -> forge.MachineCleanupInfo.CleanupResult + 856, // 944: forge.DpuReprovisioningListResponse.DpuReprovisioningListItem.id:type_name -> common.MachineId + 857, // 945: forge.DpuReprovisioningListResponse.DpuReprovisioningListItem.requested_at:type_name -> google.protobuf.Timestamp + 857, // 946: forge.DpuReprovisioningListResponse.DpuReprovisioningListItem.initiated_at:type_name -> google.protobuf.Timestamp + 856, // 947: forge.HostReprovisioningListResponse.HostReprovisioningListItem.id:type_name -> common.MachineId + 857, // 948: forge.HostReprovisioningListResponse.HostReprovisioningListItem.requested_at:type_name -> google.protobuf.Timestamp + 857, // 949: forge.HostReprovisioningListResponse.HostReprovisioningListItem.initiated_at:type_name -> google.protobuf.Timestamp + 660, // 950: forge.RackStateHistories.HistoriesEntry.value:type_name -> forge.RackStateHistoryRecords + 787, // 951: forge.RackFirmwareHistoryResponse.HistoriesEntry.value:type_name -> forge.RackFirmwareHistoryRecords + 856, // 952: forge.DPFStateResponse.DPFState.machine_id:type_name -> common.MachineId + 111, // 953: forge.Forge.Version:input_type -> forge.VersionRequest + 914, // 954: forge.Forge.CreateDomain:input_type -> dns.CreateDomainRequest + 915, // 955: forge.Forge.UpdateDomain:input_type -> dns.UpdateDomainRequest + 916, // 956: forge.Forge.DeleteDomain:input_type -> dns.DomainDeletionRequest + 917, // 957: forge.Forge.FindDomain:input_type -> dns.DomainSearchQuery + 763, // 958: forge.Forge.CreateDomainLegacy:input_type -> forge.DomainLegacy + 763, // 959: forge.Forge.UpdateDomainLegacy:input_type -> forge.DomainLegacy + 765, // 960: forge.Forge.DeleteDomainLegacy:input_type -> forge.DomainDeletionLegacy + 767, // 961: forge.Forge.FindDomainLegacy:input_type -> forge.DomainSearchQueryLegacy + 129, // 962: forge.Forge.CreateVpc:input_type -> forge.VpcCreationRequest + 130, // 963: forge.Forge.UpdateVpc:input_type -> forge.VpcUpdateRequest + 132, // 964: forge.Forge.UpdateVpcVirtualization:input_type -> forge.VpcUpdateVirtualizationRequest + 134, // 965: forge.Forge.DeleteVpc:input_type -> forge.VpcDeletionRequest + 123, // 966: forge.Forge.FindVpcIds:input_type -> forge.VpcSearchFilter + 125, // 967: forge.Forge.FindVpcsByIds:input_type -> forge.VpcsByIdsRequest + 140, // 968: forge.Forge.CreateVpcPrefix:input_type -> forge.VpcPrefixCreationRequest + 141, // 969: forge.Forge.SearchVpcPrefixes:input_type -> forge.VpcPrefixSearchQuery + 142, // 970: forge.Forge.GetVpcPrefixes:input_type -> forge.VpcPrefixGetRequest + 145, // 971: forge.Forge.UpdateVpcPrefix:input_type -> forge.VpcPrefixUpdateRequest + 146, // 972: forge.Forge.DeleteVpcPrefix:input_type -> forge.VpcPrefixDeletionRequest + 151, // 973: forge.Forge.CreateVpcPeering:input_type -> forge.VpcPeeringCreationRequest + 152, // 974: forge.Forge.FindVpcPeeringIds:input_type -> forge.VpcPeeringSearchFilter + 153, // 975: forge.Forge.FindVpcPeeringsByIds:input_type -> forge.VpcPeeringsByIdsRequest + 154, // 976: forge.Forge.DeleteVpcPeering:input_type -> forge.VpcPeeringDeletionRequest + 217, // 977: forge.Forge.FindNetworkSegmentIds:input_type -> forge.NetworkSegmentSearchFilter + 219, // 978: forge.Forge.FindNetworkSegmentsByIds:input_type -> forge.NetworkSegmentsByIdsRequest + 213, // 979: forge.Forge.CreateNetworkSegment:input_type -> forge.NetworkSegmentCreationRequest + 214, // 980: forge.Forge.DeleteNetworkSegment:input_type -> forge.NetworkSegmentDeletionRequest + 122, // 981: forge.Forge.NetworkSegmentsForVpc:input_type -> forge.VpcSearchQuery + 164, // 982: forge.Forge.FindIBPartitionIds:input_type -> forge.IBPartitionSearchFilter + 165, // 983: forge.Forge.FindIBPartitionsByIds:input_type -> forge.IBPartitionsByIdsRequest + 160, // 984: forge.Forge.CreateIBPartition:input_type -> forge.IBPartitionCreationRequest + 161, // 985: forge.Forge.UpdateIBPartition:input_type -> forge.IBPartitionUpdateRequest + 162, // 986: forge.Forge.DeleteIBPartition:input_type -> forge.IBPartitionDeletionRequest + 126, // 987: forge.Forge.IBPartitionsForTenant:input_type -> forge.TenantSearchQuery + 178, // 988: forge.Forge.FindPowerShelves:input_type -> forge.PowerShelfQuery + 179, // 989: forge.Forge.FindPowerShelfIds:input_type -> forge.PowerShelfSearchFilter + 180, // 990: forge.Forge.FindPowerShelvesByIds:input_type -> forge.PowerShelvesByIdsRequest + 172, // 991: forge.Forge.DeletePowerShelf:input_type -> forge.PowerShelfDeletionRequest + 813, // 992: forge.Forge.AdminForceDeletePowerShelf:input_type -> forge.AdminForceDeletePowerShelfRequest + 198, // 993: forge.Forge.FindSwitches:input_type -> forge.SwitchQuery + 199, // 994: forge.Forge.FindSwitchIds:input_type -> forge.SwitchSearchFilter + 200, // 995: forge.Forge.FindSwitchesByIds:input_type -> forge.SwitchesByIdsRequest + 192, // 996: forge.Forge.DeleteSwitch:input_type -> forge.SwitchDeletionRequest + 811, // 997: forge.Forge.AdminForceDeleteSwitch:input_type -> forge.AdminForceDeleteSwitchRequest + 209, // 998: forge.Forge.FindIBFabricIds:input_type -> forge.IBFabricSearchFilter + 230, // 999: forge.Forge.AllocateInstance:input_type -> forge.InstanceAllocationRequest + 231, // 1000: forge.Forge.AllocateInstances:input_type -> forge.BatchInstanceAllocationRequest + 265, // 1001: forge.Forge.ReleaseInstance:input_type -> forge.InstanceReleaseRequest + 245, // 1002: forge.Forge.UpdateInstanceOperatingSystem:input_type -> forge.InstanceOperatingSystemUpdateRequest + 246, // 1003: forge.Forge.UpdateInstanceConfig:input_type -> forge.InstanceConfigUpdateRequest + 227, // 1004: forge.Forge.FindInstanceIds:input_type -> forge.InstanceSearchFilter + 229, // 1005: forge.Forge.FindInstancesByIds:input_type -> forge.InstancesByIdsRequest + 856, // 1006: forge.Forge.FindInstanceByMachineID:input_type -> common.MachineId + 332, // 1007: forge.Forge.GetManagedHostNetworkConfig:input_type -> forge.ManagedHostNetworkConfigRequest + 395, // 1008: forge.Forge.RecordDpuNetworkStatus:input_type -> forge.DpuNetworkStatus + 856, // 1009: forge.Forge.ListHealthReportOverrides:input_type -> common.MachineId + 401, // 1010: forge.Forge.InsertHealthReportOverride:input_type -> forge.InsertHealthReportOverrideRequest + 406, // 1011: forge.Forge.RemoveHealthReportOverride:input_type -> forge.RemoveHealthReportOverrideRequest + 404, // 1012: forge.Forge.ListRackHealthReportOverrides:input_type -> forge.ListRackHealthReportOverridesRequest + 402, // 1013: forge.Forge.InsertRackHealthReportOverride:input_type -> forge.InsertRackHealthReportOverrideRequest + 403, // 1014: forge.Forge.RemoveRackHealthReportOverride:input_type -> forge.RemoveRackHealthReportOverrideRequest + 349, // 1015: forge.Forge.DpuAgentUpgradeCheck:input_type -> forge.DpuAgentUpgradeCheckRequest + 351, // 1016: forge.Forge.DpuAgentUpgradePolicyAction:input_type -> forge.DpuAgentUpgradePolicyRequest + 918, // 1017: forge.Forge.LookupRecord:input_type -> dns.DnsResourceRecordLookupRequest + 833, // 1018: forge.Forge.LookupRecordLegacy:input_type -> forge.DNSMessage.DNSQuestion + 919, // 1019: forge.Forge.GetAllDomains:input_type -> dns.GetAllDomainsRequest + 920, // 1020: forge.Forge.GetAllDomainMetadata:input_type -> dns.DomainMetadataRequest + 222, // 1021: forge.Forge.InvokeInstancePower:input_type -> forge.InstancePowerRequest + 376, // 1022: forge.Forge.ForgeAgentControl:input_type -> forge.ForgeAgentControlRequest + 378, // 1023: forge.Forge.DiscoverMachine:input_type -> forge.MachineDiscoveryInfo + 382, // 1024: forge.Forge.RenewMachineCertificate:input_type -> forge.MachineCertificateRenewRequest + 379, // 1025: forge.Forge.DiscoveryCompleted:input_type -> forge.MachineDiscoveryCompletedRequest + 380, // 1026: forge.Forge.CleanupMachineCompleted:input_type -> forge.MachineCleanupInfo + 387, // 1027: forge.Forge.ReportForgeScoutError:input_type -> forge.ForgeScoutErrorReport + 310, // 1028: forge.Forge.DiscoverDhcp:input_type -> forge.DhcpDiscovery + 311, // 1029: forge.Forge.ExpireDhcpLease:input_type -> forge.ExpireDhcpLeaseRequest + 284, // 1030: forge.Forge.AssignStaticAddress:input_type -> forge.AssignStaticAddressRequest + 286, // 1031: forge.Forge.RemoveStaticAddress:input_type -> forge.RemoveStaticAddressRequest + 288, // 1032: forge.Forge.FindInterfaceAddresses:input_type -> forge.FindInterfaceAddressesRequest + 283, // 1033: forge.Forge.FindInterfaces:input_type -> forge.InterfaceSearchQuery + 282, // 1034: forge.Forge.DeleteInterface:input_type -> forge.InterfaceDeleteQuery + 442, // 1035: forge.Forge.FindIpAddress:input_type -> forge.FindIpAddressRequest + 268, // 1036: forge.Forge.FindMachineIds:input_type -> forge.MachineSearchConfig + 267, // 1037: forge.Forge.FindMachinesByIds:input_type -> forge.MachinesByIdsRequest + 269, // 1038: forge.Forge.FindMachineStateHistories:input_type -> forge.MachineStateHistoriesRequest + 272, // 1039: forge.Forge.FindMachineHealthHistories:input_type -> forge.MachineHealthHistoriesRequest + 175, // 1040: forge.Forge.FindPowerShelfStateHistories:input_type -> forge.PowerShelfStateHistoriesRequest + 658, // 1041: forge.Forge.FindRackStateHistories:input_type -> forge.RackStateHistoriesRequest + 195, // 1042: forge.Forge.FindSwitchStateHistories:input_type -> forge.SwitchStateHistoriesRequest + 277, // 1043: forge.Forge.FindTenantOrganizationIds:input_type -> forge.TenantSearchFilter + 276, // 1044: forge.Forge.FindTenantsByOrganizationIds:input_type -> forge.TenantByOrganizationIdsRequest + 911, // 1045: forge.Forge.FindConnectedDevicesByDpuMachineIds:input_type -> common.MachineIdList + 463, // 1046: forge.Forge.FindMachineIdsByBmcIps:input_type -> forge.BmcIpList + 464, // 1047: forge.Forge.FindMacAddressByBmcIp:input_type -> forge.BmcIp + 444, // 1048: forge.Forge.IdentifyUuid:input_type -> forge.IdentifyUuidRequest + 446, // 1049: forge.Forge.IdentifyMac:input_type -> forge.IdentifyMacRequest + 448, // 1050: forge.Forge.IdentifySerial:input_type -> forge.IdentifySerialRequest + 372, // 1051: forge.Forge.GetBMCMetaData:input_type -> forge.BMCMetaDataGetRequest + 374, // 1052: forge.Forge.UpdateMachineCredentials:input_type -> forge.MachineCredentialsUpdateRequest + 389, // 1053: forge.Forge.GetPxeInstructions:input_type -> forge.PxeInstructionRequest + 393, // 1054: forge.Forge.GetCloudInitInstructions:input_type -> forge.CloudInitInstructionsRequest + 114, // 1055: forge.Forge.Echo:input_type -> forge.EchoRequest + 411, // 1056: forge.Forge.CreateTenant:input_type -> forge.CreateTenantRequest + 415, // 1057: forge.Forge.FindTenant:input_type -> forge.FindTenantRequest + 413, // 1058: forge.Forge.UpdateTenant:input_type -> forge.UpdateTenantRequest + 421, // 1059: forge.Forge.CreateTenantKeyset:input_type -> forge.CreateTenantKeysetRequest + 428, // 1060: forge.Forge.FindTenantKeysetIds:input_type -> forge.TenantKeysetSearchFilter + 430, // 1061: forge.Forge.FindTenantKeysetsByIds:input_type -> forge.TenantKeysetsByIdsRequest + 424, // 1062: forge.Forge.UpdateTenantKeyset:input_type -> forge.UpdateTenantKeysetRequest + 426, // 1063: forge.Forge.DeleteTenantKeyset:input_type -> forge.DeleteTenantKeysetRequest + 431, // 1064: forge.Forge.ValidateTenantPublicKey:input_type -> forge.ValidateTenantPublicKeyRequest + 317, // 1065: forge.Forge.GetBmcCredentials:input_type -> forge.GetBmcCredentialsRequest + 347, // 1066: forge.Forge.GetAllManagedHostNetworkStatus:input_type -> forge.ManagedHostNetworkStatusRequest + 320, // 1067: forge.Forge.GetSiteExplorationReport:input_type -> forge.GetSiteExplorationRequest + 321, // 1068: forge.Forge.ClearSiteExplorationError:input_type -> forge.ClearSiteExplorationErrorRequest + 326, // 1069: forge.Forge.IsBmcInManagedHost:input_type -> forge.BmcEndpointRequest + 326, // 1070: forge.Forge.BmcCredentialStatus:input_type -> forge.BmcEndpointRequest + 326, // 1071: forge.Forge.Explore:input_type -> forge.BmcEndpointRequest + 322, // 1072: forge.Forge.ReExploreEndpoint:input_type -> forge.ReExploreEndpointRequest + 323, // 1073: forge.Forge.DeleteExploredEndpoint:input_type -> forge.DeleteExploredEndpointRequest + 324, // 1074: forge.Forge.PauseExploredEndpointRemediation:input_type -> forge.PauseExploredEndpointRemediationRequest + 921, // 1075: forge.Forge.FindExploredEndpointIds:input_type -> site_explorer.ExploredEndpointSearchFilter + 922, // 1076: forge.Forge.FindExploredEndpointsByIds:input_type -> site_explorer.ExploredEndpointsByIdsRequest + 923, // 1077: forge.Forge.FindExploredManagedHostIds:input_type -> site_explorer.ExploredManagedHostSearchFilter + 924, // 1078: forge.Forge.FindExploredManagedHostsByIds:input_type -> site_explorer.ExploredManagedHostsByIdsRequest + 330, // 1079: forge.Forge.UpdateMachineHardwareInfo:input_type -> forge.UpdateMachineHardwareInfoRequest + 353, // 1080: forge.Forge.AdminForceDeleteMachine:input_type -> forge.AdminForceDeleteMachineRequest + 433, // 1081: forge.Forge.AdminListResourcePools:input_type -> forge.ListResourcePoolsRequest + 436, // 1082: forge.Forge.AdminGrowResourcePool:input_type -> forge.GrowResourcePoolRequest + 294, // 1083: forge.Forge.UpdateMachineMetadata:input_type -> forge.MachineMetadataUpdateRequest + 295, // 1084: forge.Forge.UpdateRackMetadata:input_type -> forge.RackMetadataUpdateRequest + 296, // 1085: forge.Forge.UpdateSwitchMetadata:input_type -> forge.SwitchMetadataUpdateRequest + 297, // 1086: forge.Forge.UpdatePowerShelfMetadata:input_type -> forge.PowerShelfMetadataUpdateRequest + 671, // 1087: forge.Forge.UpdateMachineNvLinkInfo:input_type -> forge.UpdateMachineNvLinkInfoRequest + 440, // 1088: forge.Forge.SetMaintenance:input_type -> forge.MaintenanceRequest + 441, // 1089: forge.Forge.SetDynamicConfig:input_type -> forge.SetDynamicConfigRequest + 450, // 1090: forge.Forge.TriggerDpuReprovisioning:input_type -> forge.DpuReprovisioningRequest + 451, // 1091: forge.Forge.ListDpuWaitingForReprovisioning:input_type -> forge.DpuReprovisioningListRequest + 453, // 1092: forge.Forge.TriggerHostReprovisioning:input_type -> forge.HostReprovisioningRequest + 454, // 1093: forge.Forge.ListHostsWaitingForReprovisioning:input_type -> forge.HostReprovisioningListRequest + 856, // 1094: forge.Forge.MarkManualFirmwareUpgradeComplete:input_type -> common.MachineId + 457, // 1095: forge.Forge.GetDpuInfoList:input_type -> forge.GetDpuInfoListRequest + 875, // 1096: forge.Forge.GetMachineBootOverride:input_type -> common.MachineInterfaceId + 460, // 1097: forge.Forge.SetMachineBootOverride:input_type -> forge.MachineBootOverride + 875, // 1098: forge.Forge.ClearMachineBootOverride:input_type -> common.MachineInterfaceId + 469, // 1099: forge.Forge.GetNetworkTopology:input_type -> forge.NetworkTopologyRequest + 470, // 1100: forge.Forge.FindNetworkDevicesByDeviceIds:input_type -> forge.NetworkDeviceIdList + 107, // 1101: forge.Forge.CreateCredential:input_type -> forge.CredentialCreationRequest + 108, // 1102: forge.Forge.DeleteCredential:input_type -> forge.CredentialDeletionRequest + 925, // 1103: forge.Forge.GetRouteServers:input_type -> google.protobuf.Empty + 472, // 1104: forge.Forge.AddRouteServers:input_type -> forge.RouteServers + 472, // 1105: forge.Forge.RemoveRouteServers:input_type -> forge.RouteServers + 472, // 1106: forge.Forge.ReplaceRouteServers:input_type -> forge.RouteServers + 298, // 1107: forge.Forge.UpdateAgentReportedInventory:input_type -> forge.DpuAgentInventoryReport + 262, // 1108: forge.Forge.UpdateInstancePhoneHomeLastContact:input_type -> forge.InstancePhoneHomeLastContactRequest + 475, // 1109: forge.Forge.SetHostUefiPassword:input_type -> forge.SetHostUefiPasswordRequest + 477, // 1110: forge.Forge.ClearHostUefiPassword:input_type -> forge.ClearHostUefiPasswordRequest + 489, // 1111: forge.Forge.AddExpectedMachine:input_type -> forge.ExpectedMachine + 490, // 1112: forge.Forge.DeleteExpectedMachine:input_type -> forge.ExpectedMachineRequest + 489, // 1113: forge.Forge.UpdateExpectedMachine:input_type -> forge.ExpectedMachine + 490, // 1114: forge.Forge.GetExpectedMachine:input_type -> forge.ExpectedMachineRequest + 925, // 1115: forge.Forge.GetAllExpectedMachines:input_type -> google.protobuf.Empty + 774, // 1116: forge.Forge.CreateRackFirmware:input_type -> forge.RackFirmwareCreateRequest + 775, // 1117: forge.Forge.GetRackFirmware:input_type -> forge.RackFirmwareGetRequest + 776, // 1118: forge.Forge.ListRackFirmware:input_type -> forge.RackFirmwareListRequest + 778, // 1119: forge.Forge.DeleteRackFirmware:input_type -> forge.RackFirmwareDeleteRequest + 779, // 1120: forge.Forge.ApplyRackFirmware:input_type -> forge.RackFirmwareApplyRequest + 783, // 1121: forge.Forge.GetRackFirmwareJobStatus:input_type -> forge.RackFirmwareJobStatusRequest + 785, // 1122: forge.Forge.GetRackFirmwareHistory:input_type -> forge.RackFirmwareHistoryRequest + 491, // 1123: forge.Forge.ReplaceAllExpectedMachines:input_type -> forge.ExpectedMachineList + 925, // 1124: forge.Forge.DeleteAllExpectedMachines:input_type -> google.protobuf.Empty + 925, // 1125: forge.Forge.GetAllExpectedMachinesLinked:input_type -> google.protobuf.Empty + 494, // 1126: forge.Forge.CreateExpectedMachines:input_type -> forge.BatchExpectedMachineOperationRequest + 494, // 1127: forge.Forge.UpdateExpectedMachines:input_type -> forge.BatchExpectedMachineOperationRequest + 181, // 1128: forge.Forge.AddExpectedPowerShelf:input_type -> forge.ExpectedPowerShelf + 182, // 1129: forge.Forge.DeleteExpectedPowerShelf:input_type -> forge.ExpectedPowerShelfRequest + 181, // 1130: forge.Forge.UpdateExpectedPowerShelf:input_type -> forge.ExpectedPowerShelf + 182, // 1131: forge.Forge.GetExpectedPowerShelf:input_type -> forge.ExpectedPowerShelfRequest + 925, // 1132: forge.Forge.GetAllExpectedPowerShelves:input_type -> google.protobuf.Empty + 183, // 1133: forge.Forge.ReplaceAllExpectedPowerShelves:input_type -> forge.ExpectedPowerShelfList + 925, // 1134: forge.Forge.DeleteAllExpectedPowerShelves:input_type -> google.protobuf.Empty + 925, // 1135: forge.Forge.GetAllExpectedPowerShelvesLinked:input_type -> google.protobuf.Empty + 201, // 1136: forge.Forge.AddExpectedSwitch:input_type -> forge.ExpectedSwitch + 202, // 1137: forge.Forge.DeleteExpectedSwitch:input_type -> forge.ExpectedSwitchRequest + 201, // 1138: forge.Forge.UpdateExpectedSwitch:input_type -> forge.ExpectedSwitch + 202, // 1139: forge.Forge.GetExpectedSwitch:input_type -> forge.ExpectedSwitchRequest + 925, // 1140: forge.Forge.GetAllExpectedSwitches:input_type -> google.protobuf.Empty + 203, // 1141: forge.Forge.ReplaceAllExpectedSwitches:input_type -> forge.ExpectedSwitchList + 925, // 1142: forge.Forge.DeleteAllExpectedSwitches:input_type -> google.protobuf.Empty + 925, // 1143: forge.Forge.GetAllExpectedSwitchesLinked:input_type -> google.protobuf.Empty + 206, // 1144: forge.Forge.AddExpectedRack:input_type -> forge.ExpectedRack + 207, // 1145: forge.Forge.DeleteExpectedRack:input_type -> forge.ExpectedRackRequest + 206, // 1146: forge.Forge.UpdateExpectedRack:input_type -> forge.ExpectedRack + 207, // 1147: forge.Forge.GetExpectedRack:input_type -> forge.ExpectedRackRequest + 925, // 1148: forge.Forge.GetAllExpectedRacks:input_type -> google.protobuf.Empty + 208, // 1149: forge.Forge.ReplaceAllExpectedRacks:input_type -> forge.ExpectedRackList + 925, // 1150: forge.Forge.DeleteAllExpectedRacks:input_type -> google.protobuf.Empty + 105, // 1151: forge.Forge.AttestQuote:input_type -> forge.AttestQuoteRequest + 551, // 1152: forge.Forge.CreateInstanceType:input_type -> forge.CreateInstanceTypeRequest + 553, // 1153: forge.Forge.FindInstanceTypeIds:input_type -> forge.FindInstanceTypeIdsRequest + 555, // 1154: forge.Forge.FindInstanceTypesByIds:input_type -> forge.FindInstanceTypesByIdsRequest + 560, // 1155: forge.Forge.UpdateInstanceType:input_type -> forge.UpdateInstanceTypeRequest + 557, // 1156: forge.Forge.DeleteInstanceType:input_type -> forge.DeleteInstanceTypeRequest + 561, // 1157: forge.Forge.AssociateMachinesWithInstanceType:input_type -> forge.AssociateMachinesWithInstanceTypeRequest + 563, // 1158: forge.Forge.RemoveMachineInstanceTypeAssociation:input_type -> forge.RemoveMachineInstanceTypeAssociationRequest + 926, // 1159: forge.Forge.CreateMeasurementBundle:input_type -> measured_boot.CreateMeasurementBundleRequest + 927, // 1160: forge.Forge.DeleteMeasurementBundle:input_type -> measured_boot.DeleteMeasurementBundleRequest + 928, // 1161: forge.Forge.RenameMeasurementBundle:input_type -> measured_boot.RenameMeasurementBundleRequest + 929, // 1162: forge.Forge.UpdateMeasurementBundle:input_type -> measured_boot.UpdateMeasurementBundleRequest + 930, // 1163: forge.Forge.ShowMeasurementBundle:input_type -> measured_boot.ShowMeasurementBundleRequest + 931, // 1164: forge.Forge.ShowMeasurementBundles:input_type -> measured_boot.ShowMeasurementBundlesRequest + 932, // 1165: forge.Forge.ListMeasurementBundles:input_type -> measured_boot.ListMeasurementBundlesRequest + 933, // 1166: forge.Forge.ListMeasurementBundleMachines:input_type -> measured_boot.ListMeasurementBundleMachinesRequest + 934, // 1167: forge.Forge.FindClosestBundleMatch:input_type -> measured_boot.FindClosestBundleMatchRequest + 935, // 1168: forge.Forge.DeleteMeasurementJournal:input_type -> measured_boot.DeleteMeasurementJournalRequest + 936, // 1169: forge.Forge.ShowMeasurementJournal:input_type -> measured_boot.ShowMeasurementJournalRequest + 937, // 1170: forge.Forge.ShowMeasurementJournals:input_type -> measured_boot.ShowMeasurementJournalsRequest + 938, // 1171: forge.Forge.ListMeasurementJournal:input_type -> measured_boot.ListMeasurementJournalRequest + 939, // 1172: forge.Forge.AttestCandidateMachine:input_type -> measured_boot.AttestCandidateMachineRequest + 940, // 1173: forge.Forge.ShowCandidateMachine:input_type -> measured_boot.ShowCandidateMachineRequest + 941, // 1174: forge.Forge.ShowCandidateMachines:input_type -> measured_boot.ShowCandidateMachinesRequest + 942, // 1175: forge.Forge.ListCandidateMachines:input_type -> measured_boot.ListCandidateMachinesRequest + 943, // 1176: forge.Forge.CreateMeasurementSystemProfile:input_type -> measured_boot.CreateMeasurementSystemProfileRequest + 944, // 1177: forge.Forge.DeleteMeasurementSystemProfile:input_type -> measured_boot.DeleteMeasurementSystemProfileRequest + 945, // 1178: forge.Forge.RenameMeasurementSystemProfile:input_type -> measured_boot.RenameMeasurementSystemProfileRequest + 946, // 1179: forge.Forge.ShowMeasurementSystemProfile:input_type -> measured_boot.ShowMeasurementSystemProfileRequest + 947, // 1180: forge.Forge.ShowMeasurementSystemProfiles:input_type -> measured_boot.ShowMeasurementSystemProfilesRequest + 948, // 1181: forge.Forge.ListMeasurementSystemProfiles:input_type -> measured_boot.ListMeasurementSystemProfilesRequest + 949, // 1182: forge.Forge.ListMeasurementSystemProfileBundles:input_type -> measured_boot.ListMeasurementSystemProfileBundlesRequest + 950, // 1183: forge.Forge.ListMeasurementSystemProfileMachines:input_type -> measured_boot.ListMeasurementSystemProfileMachinesRequest + 951, // 1184: forge.Forge.CreateMeasurementReport:input_type -> measured_boot.CreateMeasurementReportRequest + 952, // 1185: forge.Forge.DeleteMeasurementReport:input_type -> measured_boot.DeleteMeasurementReportRequest + 953, // 1186: forge.Forge.PromoteMeasurementReport:input_type -> measured_boot.PromoteMeasurementReportRequest + 954, // 1187: forge.Forge.RevokeMeasurementReport:input_type -> measured_boot.RevokeMeasurementReportRequest + 955, // 1188: forge.Forge.ShowMeasurementReportForId:input_type -> measured_boot.ShowMeasurementReportForIdRequest + 956, // 1189: forge.Forge.ShowMeasurementReportsForMachine:input_type -> measured_boot.ShowMeasurementReportsForMachineRequest + 957, // 1190: forge.Forge.ShowMeasurementReports:input_type -> measured_boot.ShowMeasurementReportsRequest + 958, // 1191: forge.Forge.ListMeasurementReport:input_type -> measured_boot.ListMeasurementReportRequest + 959, // 1192: forge.Forge.MatchMeasurementReport:input_type -> measured_boot.MatchMeasurementReportRequest + 960, // 1193: forge.Forge.ImportSiteMeasurements:input_type -> measured_boot.ImportSiteMeasurementsRequest + 961, // 1194: forge.Forge.ExportSiteMeasurements:input_type -> measured_boot.ExportSiteMeasurementsRequest + 962, // 1195: forge.Forge.AddMeasurementTrustedMachine:input_type -> measured_boot.AddMeasurementTrustedMachineRequest + 963, // 1196: forge.Forge.RemoveMeasurementTrustedMachine:input_type -> measured_boot.RemoveMeasurementTrustedMachineRequest + 964, // 1197: forge.Forge.AddMeasurementTrustedProfile:input_type -> measured_boot.AddMeasurementTrustedProfileRequest + 965, // 1198: forge.Forge.RemoveMeasurementTrustedProfile:input_type -> measured_boot.RemoveMeasurementTrustedProfileRequest + 966, // 1199: forge.Forge.ListMeasurementTrustedMachines:input_type -> measured_boot.ListMeasurementTrustedMachinesRequest + 967, // 1200: forge.Forge.ListMeasurementTrustedProfiles:input_type -> measured_boot.ListMeasurementTrustedProfilesRequest + 968, // 1201: forge.Forge.ListAttestationSummary:input_type -> measured_boot.ListAttestationSummaryRequest + 582, // 1202: forge.Forge.CreateNetworkSecurityGroup:input_type -> forge.CreateNetworkSecurityGroupRequest + 584, // 1203: forge.Forge.FindNetworkSecurityGroupIds:input_type -> forge.FindNetworkSecurityGroupIdsRequest + 586, // 1204: forge.Forge.FindNetworkSecurityGroupsByIds:input_type -> forge.FindNetworkSecurityGroupsByIdsRequest + 589, // 1205: forge.Forge.UpdateNetworkSecurityGroup:input_type -> forge.UpdateNetworkSecurityGroupRequest + 590, // 1206: forge.Forge.DeleteNetworkSecurityGroup:input_type -> forge.DeleteNetworkSecurityGroupRequest + 596, // 1207: forge.Forge.GetNetworkSecurityGroupPropagationStatus:input_type -> forge.GetNetworkSecurityGroupPropagationStatusRequest + 599, // 1208: forge.Forge.GetNetworkSecurityGroupAttachments:input_type -> forge.GetNetworkSecurityGroupAttachmentsRequest + 479, // 1209: forge.Forge.CreateOsImage:input_type -> forge.OsImageAttributes + 483, // 1210: forge.Forge.DeleteOsImage:input_type -> forge.DeleteOsImageRequest + 481, // 1211: forge.Forge.ListOsImage:input_type -> forge.ListOsImageRequest + 865, // 1212: forge.Forge.GetOsImage:input_type -> common.UUID + 479, // 1213: forge.Forge.UpdateOsImage:input_type -> forge.OsImageAttributes + 485, // 1214: forge.Forge.GetIpxeTemplate:input_type -> forge.GetIpxeTemplateRequest + 486, // 1215: forge.Forge.ListIpxeTemplates:input_type -> forge.ListIpxeTemplatesRequest + 498, // 1216: forge.Forge.RebootCompleted:input_type -> forge.MachineRebootCompletedRequest + 502, // 1217: forge.Forge.PersistValidationResult:input_type -> forge.MachineValidationResultPostRequest + 504, // 1218: forge.Forge.GetMachineValidationResults:input_type -> forge.MachineValidationGetRequest + 499, // 1219: forge.Forge.MachineValidationCompleted:input_type -> forge.MachineValidationCompletedRequest + 507, // 1220: forge.Forge.MachineSetAutoUpdate:input_type -> forge.MachineSetAutoUpdateRequest + 509, // 1221: forge.Forge.GetMachineValidationExternalConfig:input_type -> forge.GetMachineValidationExternalConfigRequest + 512, // 1222: forge.Forge.GetMachineValidationExternalConfigs:input_type -> forge.GetMachineValidationExternalConfigsRequest + 514, // 1223: forge.Forge.AddUpdateMachineValidationExternalConfig:input_type -> forge.AddUpdateMachineValidationExternalConfigRequest + 523, // 1224: forge.Forge.GetMachineValidationRuns:input_type -> forge.MachineValidationRunListGetRequest + 515, // 1225: forge.Forge.RemoveMachineValidationExternalConfig:input_type -> forge.RemoveMachineValidationExternalConfigRequest + 526, // 1226: forge.Forge.GetMachineValidationTests:input_type -> forge.MachineValidationTestsGetRequest + 528, // 1227: forge.Forge.AddMachineValidationTest:input_type -> forge.MachineValidationTestAddRequest + 527, // 1228: forge.Forge.UpdateMachineValidationTest:input_type -> forge.MachineValidationTestUpdateRequest + 531, // 1229: forge.Forge.MachineValidationTestVerfied:input_type -> forge.MachineValidationTestVerfiedRequest + 535, // 1230: forge.Forge.MachineValidationTestNextVersion:input_type -> forge.MachineValidationTestNextVersionRequest + 536, // 1231: forge.Forge.MachineValidationTestEnableDisableTest:input_type -> forge.MachineValidationTestEnableDisableTestRequest + 538, // 1232: forge.Forge.UpdateMachineValidationRun:input_type -> forge.MachineValidationRunRequest + 366, // 1233: forge.Forge.AdminBmcReset:input_type -> forge.AdminBmcResetRequest + 518, // 1234: forge.Forge.AdminPowerControl:input_type -> forge.AdminPowerControlRequest + 326, // 1235: forge.Forge.DisableSecureBoot:input_type -> forge.BmcEndpointRequest + 356, // 1236: forge.Forge.Lockdown:input_type -> forge.LockdownRequest + 358, // 1237: forge.Forge.LockdownStatus:input_type -> forge.LockdownStatusRequest + 360, // 1238: forge.Forge.MachineSetup:input_type -> forge.MachineSetupRequest + 362, // 1239: forge.Forge.SetDpuFirstBootOrder:input_type -> forge.SetDpuFirstBootOrderRequest + 697, // 1240: forge.Forge.CreateBmcUser:input_type -> forge.CreateBmcUserRequest + 699, // 1241: forge.Forge.DeleteBmcUser:input_type -> forge.DeleteBmcUserRequest + 368, // 1242: forge.Forge.EnableInfiniteBoot:input_type -> forge.EnableInfiniteBootRequest + 370, // 1243: forge.Forge.IsInfiniteBootEnabled:input_type -> forge.IsInfiniteBootEnabledRequest + 516, // 1244: forge.Forge.OnDemandMachineValidation:input_type -> forge.MachineValidationOnDemandRequest + 101, // 1245: forge.Forge.TpmAddCaCert:input_type -> forge.TpmCaCert + 925, // 1246: forge.Forge.TpmShowCaCerts:input_type -> google.protobuf.Empty + 925, // 1247: forge.Forge.TpmShowUnmatchedEkCerts:input_type -> google.protobuf.Empty + 98, // 1248: forge.Forge.TpmDeleteCaCert:input_type -> forge.TpmCaCertId + 565, // 1249: forge.Forge.RedfishBrowse:input_type -> forge.RedfishBrowseRequest + 567, // 1250: forge.Forge.RedfishListActions:input_type -> forge.RedfishListActionsRequest + 572, // 1251: forge.Forge.RedfishCreateAction:input_type -> forge.RedfishCreateActionRequest + 574, // 1252: forge.Forge.RedfishApproveAction:input_type -> forge.RedfishActionID + 574, // 1253: forge.Forge.RedfishApplyAction:input_type -> forge.RedfishActionID + 574, // 1254: forge.Forge.RedfishCancelAction:input_type -> forge.RedfishActionID + 578, // 1255: forge.Forge.UfmBrowse:input_type -> forge.UfmBrowseRequest + 602, // 1256: forge.Forge.GetDesiredFirmwareVersions:input_type -> forge.GetDesiredFirmwareVersionsRequest + 618, // 1257: forge.Forge.CreateSku:input_type -> forge.SkuList + 856, // 1258: forge.Forge.GenerateSkuFromMachine:input_type -> common.MachineId + 856, // 1259: forge.Forge.VerifySkuForMachine:input_type -> common.MachineId + 616, // 1260: forge.Forge.AssignSkuToMachine:input_type -> forge.SkuMachinePair + 617, // 1261: forge.Forge.RemoveSkuAssociation:input_type -> forge.RemoveSkuRequest + 619, // 1262: forge.Forge.DeleteSku:input_type -> forge.SkuIdList + 925, // 1263: forge.Forge.GetAllSkuIds:input_type -> google.protobuf.Empty + 621, // 1264: forge.Forge.FindSkusByIds:input_type -> forge.SkusByIdsRequest + 632, // 1265: forge.Forge.UpdateSkuMetadata:input_type -> forge.SkuUpdateMetadataRequest + 615, // 1266: forge.Forge.ReplaceSku:input_type -> forge.Sku + 338, // 1267: forge.Forge.GetManagedHostQuarantineState:input_type -> forge.GetManagedHostQuarantineStateRequest + 340, // 1268: forge.Forge.SetManagedHostQuarantineState:input_type -> forge.SetManagedHostQuarantineStateRequest + 342, // 1269: forge.Forge.ClearManagedHostQuarantineState:input_type -> forge.ClearManagedHostQuarantineStateRequest + 856, // 1270: forge.Forge.ResetHostReprovisioning:input_type -> common.MachineId + 329, // 1271: forge.Forge.CopyBfbToDpuRshim:input_type -> forge.CopyBfbToDpuRshimRequest + 925, // 1272: forge.Forge.GetAllDpaInterfaceIds:input_type -> google.protobuf.Empty + 626, // 1273: forge.Forge.FindDpaInterfacesByIds:input_type -> forge.DpaInterfacesByIdsRequest + 624, // 1274: forge.Forge.CreateDpaInterface:input_type -> forge.DpaInterfaceCreationRequest + 624, // 1275: forge.Forge.EnsureDpaInterface:input_type -> forge.DpaInterfaceCreationRequest + 630, // 1276: forge.Forge.DeleteDpaInterface:input_type -> forge.DpaInterfaceDeletionRequest + 629, // 1277: forge.Forge.SetDpaNetworkObservationStatus:input_type -> forge.DpaNetworkObservationSetRequest + 633, // 1278: forge.Forge.GetPowerOptions:input_type -> forge.PowerOptionRequest + 634, // 1279: forge.Forge.UpdatePowerOption:input_type -> forge.PowerOptionUpdateRequest + 326, // 1280: forge.Forge.AllowIngestionAndPowerOn:input_type -> forge.BmcEndpointRequest + 326, // 1281: forge.Forge.DetermineMachineIngestionState:input_type -> forge.BmcEndpointRequest + 653, // 1282: forge.Forge.FindRackIds:input_type -> forge.RackSearchFilter + 655, // 1283: forge.Forge.FindRacksByIds:input_type -> forge.RacksByIdsRequest + 650, // 1284: forge.Forge.GetRack:input_type -> forge.GetRackRequest + 661, // 1285: forge.Forge.DeleteRack:input_type -> forge.DeleteRackRequest + 666, // 1286: forge.Forge.GetRackCapabilities:input_type -> forge.GetRackCapabilitiesRequest + 639, // 1287: forge.Forge.CreateComputeAllocation:input_type -> forge.CreateComputeAllocationRequest + 641, // 1288: forge.Forge.FindComputeAllocationIds:input_type -> forge.FindComputeAllocationIdsRequest + 643, // 1289: forge.Forge.FindComputeAllocationsByIds:input_type -> forge.FindComputeAllocationsByIdsRequest + 646, // 1290: forge.Forge.UpdateComputeAllocation:input_type -> forge.UpdateComputeAllocationRequest + 647, // 1291: forge.Forge.DeleteComputeAllocation:input_type -> forge.DeleteComputeAllocationRequest + 701, // 1292: forge.Forge.SetFirmwareUpdateTimeWindow:input_type -> forge.SetFirmwareUpdateTimeWindowRequest + 703, // 1293: forge.Forge.ListHostFirmware:input_type -> forge.ListHostFirmwareRequest + 969, // 1294: forge.Forge.PublishMlxDeviceReport:input_type -> mlx_device.PublishMlxDeviceReportRequest + 970, // 1295: forge.Forge.PublishMlxObservationReport:input_type -> mlx_device.PublishMlxObservationReportRequest + 706, // 1296: forge.Forge.TrimTable:input_type -> forge.TrimTableRequest + 708, // 1297: forge.Forge.CreateRemediation:input_type -> forge.CreateRemediationRequest + 713, // 1298: forge.Forge.ApproveRemediation:input_type -> forge.ApproveRemediationRequest + 714, // 1299: forge.Forge.RevokeRemediation:input_type -> forge.RevokeRemediationRequest + 715, // 1300: forge.Forge.EnableRemediation:input_type -> forge.EnableRemediationRequest + 716, // 1301: forge.Forge.DisableRemediation:input_type -> forge.DisableRemediationRequest + 925, // 1302: forge.Forge.FindRemediationIds:input_type -> google.protobuf.Empty + 710, // 1303: forge.Forge.FindRemediationsByIds:input_type -> forge.RemediationIdList + 717, // 1304: forge.Forge.FindAppliedRemediationIds:input_type -> forge.FindAppliedRemediationIdsRequest + 719, // 1305: forge.Forge.FindAppliedRemediations:input_type -> forge.FindAppliedRemediationsRequest + 722, // 1306: forge.Forge.GetNextRemediationForMachine:input_type -> forge.GetNextRemediationForMachineRequest + 724, // 1307: forge.Forge.RemediationApplied:input_type -> forge.RemediationAppliedRequest + 726, // 1308: forge.Forge.SetPrimaryDpu:input_type -> forge.SetPrimaryDpuRequest + 732, // 1309: forge.Forge.CreateDpuExtensionService:input_type -> forge.CreateDpuExtensionServiceRequest + 733, // 1310: forge.Forge.UpdateDpuExtensionService:input_type -> forge.UpdateDpuExtensionServiceRequest + 734, // 1311: forge.Forge.DeleteDpuExtensionService:input_type -> forge.DeleteDpuExtensionServiceRequest + 736, // 1312: forge.Forge.FindDpuExtensionServiceIds:input_type -> forge.DpuExtensionServiceSearchFilter + 738, // 1313: forge.Forge.FindDpuExtensionServicesByIds:input_type -> forge.DpuExtensionServicesByIdsRequest + 740, // 1314: forge.Forge.GetDpuExtensionServiceVersionsInfo:input_type -> forge.GetDpuExtensionServiceVersionsInfoRequest + 742, // 1315: forge.Forge.FindInstancesByDpuExtensionService:input_type -> forge.FindInstancesByDpuExtensionServiceRequest + 77, // 1316: forge.Forge.TriggerMachineAttestation:input_type -> forge.AttestationData + 77, // 1317: forge.Forge.CancelMachineAttestation:input_type -> forge.AttestationData + 76, // 1318: forge.Forge.FindMachineIdsUnderAttestation:input_type -> forge.AttestationIdsRequest + 78, // 1319: forge.Forge.FindMachinesUnderAttestation:input_type -> forge.AttestationMachineList + 80, // 1320: forge.Forge.SignMachineIdentity:input_type -> forge.MachineIdentityRequest + 82, // 1321: forge.Forge.GetIdentityConfiguration:input_type -> forge.GetIdentityConfigRequest + 84, // 1322: forge.Forge.SetIdentityConfiguration:input_type -> forge.IdentityConfigRequest + 82, // 1323: forge.Forge.DeleteIdentityConfiguration:input_type -> forge.GetIdentityConfigRequest + 89, // 1324: forge.Forge.GetTokenDelegation:input_type -> forge.GetTokenDelegationRequest + 91, // 1325: forge.Forge.SetTokenDelegation:input_type -> forge.TokenDelegationRequest + 89, // 1326: forge.Forge.DeleteTokenDelegation:input_type -> forge.GetTokenDelegationRequest + 94, // 1327: forge.Forge.GetJWKS:input_type -> forge.JwksRequest + 95, // 1328: forge.Forge.GetOpenIDConfiguration:input_type -> forge.OpenIdConfigRequest + 749, // 1329: forge.Forge.ScoutStream:input_type -> forge.ScoutStreamApiBoundMessage + 752, // 1330: forge.Forge.ScoutStreamShowConnections:input_type -> forge.ScoutStreamShowConnectionsRequest + 754, // 1331: forge.Forge.ScoutStreamDisconnect:input_type -> forge.ScoutStreamDisconnectRequest + 756, // 1332: forge.Forge.ScoutStreamPing:input_type -> forge.ScoutStreamAdminPingRequest + 971, // 1333: forge.Forge.MlxAdminProfileSync:input_type -> mlx_device.MlxAdminProfileSyncRequest + 972, // 1334: forge.Forge.MlxAdminProfileShow:input_type -> mlx_device.MlxAdminProfileShowRequest + 973, // 1335: forge.Forge.MlxAdminProfileCompare:input_type -> mlx_device.MlxAdminProfileCompareRequest + 974, // 1336: forge.Forge.MlxAdminProfileList:input_type -> mlx_device.MlxAdminProfileListRequest + 975, // 1337: forge.Forge.MlxAdminLockdownLock:input_type -> mlx_device.MlxAdminLockdownLockRequest + 976, // 1338: forge.Forge.MlxAdminLockdownUnlock:input_type -> mlx_device.MlxAdminLockdownUnlockRequest + 977, // 1339: forge.Forge.MlxAdminLockdownStatus:input_type -> mlx_device.MlxAdminLockdownStatusRequest + 978, // 1340: forge.Forge.MlxAdminShowDevice:input_type -> mlx_device.MlxAdminDeviceInfoRequest + 979, // 1341: forge.Forge.MlxAdminShowMachine:input_type -> mlx_device.MlxAdminDeviceReportRequest + 980, // 1342: forge.Forge.MlxAdminRegistryList:input_type -> mlx_device.MlxAdminRegistryListRequest + 981, // 1343: forge.Forge.MlxAdminRegistryShow:input_type -> mlx_device.MlxAdminRegistryShowRequest + 982, // 1344: forge.Forge.MlxAdminConfigQuery:input_type -> mlx_device.MlxAdminConfigQueryRequest + 983, // 1345: forge.Forge.MlxAdminConfigSet:input_type -> mlx_device.MlxAdminConfigSetRequest + 984, // 1346: forge.Forge.MlxAdminConfigSync:input_type -> mlx_device.MlxAdminConfigSyncRequest + 985, // 1347: forge.Forge.MlxAdminConfigCompare:input_type -> mlx_device.MlxAdminConfigCompareRequest + 681, // 1348: forge.Forge.FindNVLinkPartitionIds:input_type -> forge.NVLinkPartitionSearchFilter + 682, // 1349: forge.Forge.FindNVLinkPartitionsByIds:input_type -> forge.NVLinkPartitionsByIdsRequest + 126, // 1350: forge.Forge.NVLinkPartitionsForTenant:input_type -> forge.TenantSearchQuery + 692, // 1351: forge.Forge.FindNVLinkLogicalPartitionIds:input_type -> forge.NVLinkLogicalPartitionSearchFilter + 693, // 1352: forge.Forge.FindNVLinkLogicalPartitionsByIds:input_type -> forge.NVLinkLogicalPartitionsByIdsRequest + 689, // 1353: forge.Forge.CreateNVLinkLogicalPartition:input_type -> forge.NVLinkLogicalPartitionCreationRequest + 695, // 1354: forge.Forge.UpdateNVLinkLogicalPartition:input_type -> forge.NVLinkLogicalPartitionUpdateRequest + 690, // 1355: forge.Forge.DeleteNVLinkLogicalPartition:input_type -> forge.NVLinkLogicalPartitionDeletionRequest + 126, // 1356: forge.Forge.NVLinkLogicalPartitionsForTenant:input_type -> forge.TenantSearchQuery + 769, // 1357: forge.Forge.GetMachinePositionInfo:input_type -> forge.MachinePositionQuery + 675, // 1358: forge.Forge.NmxmBrowse:input_type -> forge.NmxmBrowseRequest + 789, // 1359: forge.Forge.ModifyDPFState:input_type -> forge.ModifyDPFStateRequest + 791, // 1360: forge.Forge.GetDPFState:input_type -> forge.GetDPFStateRequest + 798, // 1361: forge.Forge.ComponentPowerControl:input_type -> forge.ComponentPowerControlRequest + 795, // 1362: forge.Forge.GetComponentInventory:input_type -> forge.GetComponentInventoryRequest + 804, // 1363: forge.Forge.UpdateComponentFirmware:input_type -> forge.UpdateComponentFirmwareRequest + 806, // 1364: forge.Forge.GetComponentFirmwareStatus:input_type -> forge.GetComponentFirmwareStatusRequest + 808, // 1365: forge.Forge.ListComponentFirmwareVersions:input_type -> forge.ListComponentFirmwareVersionsRequest + 816, // 1366: forge.Forge.CreateOperatingSystem:input_type -> forge.CreateOperatingSystemRequest + 872, // 1367: forge.Forge.GetOperatingSystem:input_type -> common.OperatingSystemId + 819, // 1368: forge.Forge.UpdateOperatingSystem:input_type -> forge.UpdateOperatingSystemRequest + 820, // 1369: forge.Forge.DeleteOperatingSystem:input_type -> forge.DeleteOperatingSystemRequest + 822, // 1370: forge.Forge.FindOperatingSystemIds:input_type -> forge.OperatingSystemSearchFilter + 824, // 1371: forge.Forge.FindOperatingSystemsByIds:input_type -> forge.OperatingSystemsByIdsRequest + 826, // 1372: forge.Forge.GetOperatingSystemCachableIpxeTemplateArtifacts:input_type -> forge.GetOperatingSystemCachableIpxeTemplateArtifactsRequest + 829, // 1373: forge.Forge.UpdateOperatingSystemCachableIpxeTemplateArtifacts:input_type -> forge.UpdateOperatingSystemIpxeTemplateArtifactRequest + 112, // 1374: forge.Forge.Version:output_type -> forge.BuildInfo + 910, // 1375: forge.Forge.CreateDomain:output_type -> dns.Domain + 910, // 1376: forge.Forge.UpdateDomain:output_type -> dns.Domain + 986, // 1377: forge.Forge.DeleteDomain:output_type -> dns.DomainDeletionResult + 987, // 1378: forge.Forge.FindDomain:output_type -> dns.DomainList + 763, // 1379: forge.Forge.CreateDomainLegacy:output_type -> forge.DomainLegacy + 763, // 1380: forge.Forge.UpdateDomainLegacy:output_type -> forge.DomainLegacy + 766, // 1381: forge.Forge.DeleteDomainLegacy:output_type -> forge.DomainDeletionResultLegacy + 764, // 1382: forge.Forge.FindDomainLegacy:output_type -> forge.DomainListLegacy + 128, // 1383: forge.Forge.CreateVpc:output_type -> forge.Vpc + 131, // 1384: forge.Forge.UpdateVpc:output_type -> forge.VpcUpdateResult + 133, // 1385: forge.Forge.UpdateVpcVirtualization:output_type -> forge.VpcUpdateVirtualizationResult + 135, // 1386: forge.Forge.DeleteVpc:output_type -> forge.VpcDeletionResult + 124, // 1387: forge.Forge.FindVpcIds:output_type -> forge.VpcIdList + 136, // 1388: forge.Forge.FindVpcsByIds:output_type -> forge.VpcList + 137, // 1389: forge.Forge.CreateVpcPrefix:output_type -> forge.VpcPrefix + 143, // 1390: forge.Forge.SearchVpcPrefixes:output_type -> forge.VpcPrefixIdList + 144, // 1391: forge.Forge.GetVpcPrefixes:output_type -> forge.VpcPrefixList + 137, // 1392: forge.Forge.UpdateVpcPrefix:output_type -> forge.VpcPrefix + 147, // 1393: forge.Forge.DeleteVpcPrefix:output_type -> forge.VpcPrefixDeletionResult + 148, // 1394: forge.Forge.CreateVpcPeering:output_type -> forge.VpcPeering + 149, // 1395: forge.Forge.FindVpcPeeringIds:output_type -> forge.VpcPeeringIdList + 150, // 1396: forge.Forge.FindVpcPeeringsByIds:output_type -> forge.VpcPeeringList + 155, // 1397: forge.Forge.DeleteVpcPeering:output_type -> forge.VpcPeeringDeletionResult + 218, // 1398: forge.Forge.FindNetworkSegmentIds:output_type -> forge.NetworkSegmentIdList + 314, // 1399: forge.Forge.FindNetworkSegmentsByIds:output_type -> forge.NetworkSegmentList + 212, // 1400: forge.Forge.CreateNetworkSegment:output_type -> forge.NetworkSegment + 215, // 1401: forge.Forge.DeleteNetworkSegment:output_type -> forge.NetworkSegmentDeletionResult + 314, // 1402: forge.Forge.NetworkSegmentsForVpc:output_type -> forge.NetworkSegmentList + 166, // 1403: forge.Forge.FindIBPartitionIds:output_type -> forge.IBPartitionIdList + 159, // 1404: forge.Forge.FindIBPartitionsByIds:output_type -> forge.IBPartitionList + 158, // 1405: forge.Forge.CreateIBPartition:output_type -> forge.IBPartition + 158, // 1406: forge.Forge.UpdateIBPartition:output_type -> forge.IBPartition + 163, // 1407: forge.Forge.DeleteIBPartition:output_type -> forge.IBPartitionDeletionResult + 159, // 1408: forge.Forge.IBPartitionsForTenant:output_type -> forge.IBPartitionList + 170, // 1409: forge.Forge.FindPowerShelves:output_type -> forge.PowerShelfList + 794, // 1410: forge.Forge.FindPowerShelfIds:output_type -> forge.PowerShelfIdList + 170, // 1411: forge.Forge.FindPowerShelvesByIds:output_type -> forge.PowerShelfList + 173, // 1412: forge.Forge.DeletePowerShelf:output_type -> forge.PowerShelfDeletionResult + 814, // 1413: forge.Forge.AdminForceDeletePowerShelf:output_type -> forge.AdminForceDeletePowerShelfResponse + 190, // 1414: forge.Forge.FindSwitches:output_type -> forge.SwitchList + 793, // 1415: forge.Forge.FindSwitchIds:output_type -> forge.SwitchIdList + 190, // 1416: forge.Forge.FindSwitchesByIds:output_type -> forge.SwitchList + 193, // 1417: forge.Forge.DeleteSwitch:output_type -> forge.SwitchDeletionResult + 812, // 1418: forge.Forge.AdminForceDeleteSwitch:output_type -> forge.AdminForceDeleteSwitchResponse + 210, // 1419: forge.Forge.FindIBFabricIds:output_type -> forge.IBFabricIdList + 254, // 1420: forge.Forge.AllocateInstance:output_type -> forge.Instance + 232, // 1421: forge.Forge.AllocateInstances:output_type -> forge.BatchInstanceAllocationResponse + 266, // 1422: forge.Forge.ReleaseInstance:output_type -> forge.InstanceReleaseResult + 254, // 1423: forge.Forge.UpdateInstanceOperatingSystem:output_type -> forge.Instance + 254, // 1424: forge.Forge.UpdateInstanceConfig:output_type -> forge.Instance + 228, // 1425: forge.Forge.FindInstanceIds:output_type -> forge.InstanceIdList + 224, // 1426: forge.Forge.FindInstancesByIds:output_type -> forge.InstanceList + 224, // 1427: forge.Forge.FindInstanceByMachineID:output_type -> forge.InstanceList + 333, // 1428: forge.Forge.GetManagedHostNetworkConfig:output_type -> forge.ManagedHostNetworkConfigResponse + 925, // 1429: forge.Forge.RecordDpuNetworkStatus:output_type -> google.protobuf.Empty + 405, // 1430: forge.Forge.ListHealthReportOverrides:output_type -> forge.ListHealthReportOverrideResponse + 925, // 1431: forge.Forge.InsertHealthReportOverride:output_type -> google.protobuf.Empty + 925, // 1432: forge.Forge.RemoveHealthReportOverride:output_type -> google.protobuf.Empty + 405, // 1433: forge.Forge.ListRackHealthReportOverrides:output_type -> forge.ListHealthReportOverrideResponse + 925, // 1434: forge.Forge.InsertRackHealthReportOverride:output_type -> google.protobuf.Empty + 925, // 1435: forge.Forge.RemoveRackHealthReportOverride:output_type -> google.protobuf.Empty + 350, // 1436: forge.Forge.DpuAgentUpgradeCheck:output_type -> forge.DpuAgentUpgradeCheckResponse + 352, // 1437: forge.Forge.DpuAgentUpgradePolicyAction:output_type -> forge.DpuAgentUpgradePolicyResponse + 988, // 1438: forge.Forge.LookupRecord:output_type -> dns.DnsResourceRecordLookupResponse + 834, // 1439: forge.Forge.LookupRecordLegacy:output_type -> forge.DNSMessage.DNSResponse + 989, // 1440: forge.Forge.GetAllDomains:output_type -> dns.GetAllDomainsResponse + 990, // 1441: forge.Forge.GetAllDomainMetadata:output_type -> dns.DomainMetadataResponse + 223, // 1442: forge.Forge.InvokeInstancePower:output_type -> forge.InstancePowerResult + 377, // 1443: forge.Forge.ForgeAgentControl:output_type -> forge.ForgeAgentControlResponse + 384, // 1444: forge.Forge.DiscoverMachine:output_type -> forge.MachineDiscoveryResult + 383, // 1445: forge.Forge.RenewMachineCertificate:output_type -> forge.MachineCertificateResult + 385, // 1446: forge.Forge.DiscoveryCompleted:output_type -> forge.MachineDiscoveryCompletedResponse + 386, // 1447: forge.Forge.CleanupMachineCompleted:output_type -> forge.MachineCleanupResult + 388, // 1448: forge.Forge.ReportForgeScoutError:output_type -> forge.ForgeScoutErrorReportResult + 313, // 1449: forge.Forge.DiscoverDhcp:output_type -> forge.DhcpRecord + 312, // 1450: forge.Forge.ExpireDhcpLease:output_type -> forge.ExpireDhcpLeaseResponse + 285, // 1451: forge.Forge.AssignStaticAddress:output_type -> forge.AssignStaticAddressResponse + 287, // 1452: forge.Forge.RemoveStaticAddress:output_type -> forge.RemoveStaticAddressResponse + 290, // 1453: forge.Forge.FindInterfaceAddresses:output_type -> forge.FindInterfaceAddressesResponse + 280, // 1454: forge.Forge.FindInterfaces:output_type -> forge.InterfaceList + 925, // 1455: forge.Forge.DeleteInterface:output_type -> google.protobuf.Empty + 443, // 1456: forge.Forge.FindIpAddress:output_type -> forge.FindIpAddressResponse + 911, // 1457: forge.Forge.FindMachineIds:output_type -> common.MachineIdList + 281, // 1458: forge.Forge.FindMachinesByIds:output_type -> forge.MachineList + 270, // 1459: forge.Forge.FindMachineStateHistories:output_type -> forge.MachineStateHistories + 273, // 1460: forge.Forge.FindMachineHealthHistories:output_type -> forge.HealthHistories + 176, // 1461: forge.Forge.FindPowerShelfStateHistories:output_type -> forge.PowerShelfStateHistories + 659, // 1462: forge.Forge.FindRackStateHistories:output_type -> forge.RackStateHistories + 196, // 1463: forge.Forge.FindSwitchStateHistories:output_type -> forge.SwitchStateHistories + 279, // 1464: forge.Forge.FindTenantOrganizationIds:output_type -> forge.TenantOrganizationIdList + 278, // 1465: forge.Forge.FindTenantsByOrganizationIds:output_type -> forge.TenantList + 462, // 1466: forge.Forge.FindConnectedDevicesByDpuMachineIds:output_type -> forge.ConnectedDeviceList + 466, // 1467: forge.Forge.FindMachineIdsByBmcIps:output_type -> forge.MachineIdBmcIpPairs + 465, // 1468: forge.Forge.FindMacAddressByBmcIp:output_type -> forge.MacAddressBmcIp + 445, // 1469: forge.Forge.IdentifyUuid:output_type -> forge.IdentifyUuidResponse + 447, // 1470: forge.Forge.IdentifyMac:output_type -> forge.IdentifyMacResponse + 449, // 1471: forge.Forge.IdentifySerial:output_type -> forge.IdentifySerialResponse + 373, // 1472: forge.Forge.GetBMCMetaData:output_type -> forge.BMCMetaDataGetResponse + 375, // 1473: forge.Forge.UpdateMachineCredentials:output_type -> forge.MachineCredentialsUpdateResponse + 390, // 1474: forge.Forge.GetPxeInstructions:output_type -> forge.PxeInstructions + 394, // 1475: forge.Forge.GetCloudInitInstructions:output_type -> forge.CloudInitInstructions + 115, // 1476: forge.Forge.Echo:output_type -> forge.EchoResponse + 412, // 1477: forge.Forge.CreateTenant:output_type -> forge.CreateTenantResponse + 416, // 1478: forge.Forge.FindTenant:output_type -> forge.FindTenantResponse + 414, // 1479: forge.Forge.UpdateTenant:output_type -> forge.UpdateTenantResponse + 422, // 1480: forge.Forge.CreateTenantKeyset:output_type -> forge.CreateTenantKeysetResponse + 429, // 1481: forge.Forge.FindTenantKeysetIds:output_type -> forge.TenantKeysetIdList + 423, // 1482: forge.Forge.FindTenantKeysetsByIds:output_type -> forge.TenantKeySetList + 425, // 1483: forge.Forge.UpdateTenantKeyset:output_type -> forge.UpdateTenantKeysetResponse + 427, // 1484: forge.Forge.DeleteTenantKeyset:output_type -> forge.DeleteTenantKeysetResponse + 432, // 1485: forge.Forge.ValidateTenantPublicKey:output_type -> forge.ValidateTenantPublicKeyResponse + 318, // 1486: forge.Forge.GetBmcCredentials:output_type -> forge.GetBmcCredentialsResponse + 348, // 1487: forge.Forge.GetAllManagedHostNetworkStatus:output_type -> forge.ManagedHostNetworkStatusResponse + 991, // 1488: forge.Forge.GetSiteExplorationReport:output_type -> site_explorer.SiteExplorationReport + 925, // 1489: forge.Forge.ClearSiteExplorationError:output_type -> google.protobuf.Empty + 524, // 1490: forge.Forge.IsBmcInManagedHost:output_type -> forge.IsBmcInManagedHostResponse + 525, // 1491: forge.Forge.BmcCredentialStatus:output_type -> forge.BmcCredentialStatusResponse + 912, // 1492: forge.Forge.Explore:output_type -> site_explorer.EndpointExplorationReport + 925, // 1493: forge.Forge.ReExploreEndpoint:output_type -> google.protobuf.Empty + 325, // 1494: forge.Forge.DeleteExploredEndpoint:output_type -> forge.DeleteExploredEndpointResponse + 925, // 1495: forge.Forge.PauseExploredEndpointRemediation:output_type -> google.protobuf.Empty + 992, // 1496: forge.Forge.FindExploredEndpointIds:output_type -> site_explorer.ExploredEndpointIdList + 993, // 1497: forge.Forge.FindExploredEndpointsByIds:output_type -> site_explorer.ExploredEndpointList + 994, // 1498: forge.Forge.FindExploredManagedHostIds:output_type -> site_explorer.ExploredManagedHostIdList + 995, // 1499: forge.Forge.FindExploredManagedHostsByIds:output_type -> site_explorer.ExploredManagedHostList + 925, // 1500: forge.Forge.UpdateMachineHardwareInfo:output_type -> google.protobuf.Empty + 354, // 1501: forge.Forge.AdminForceDeleteMachine:output_type -> forge.AdminForceDeleteMachineResponse + 434, // 1502: forge.Forge.AdminListResourcePools:output_type -> forge.ResourcePools + 437, // 1503: forge.Forge.AdminGrowResourcePool:output_type -> forge.GrowResourcePoolResponse + 925, // 1504: forge.Forge.UpdateMachineMetadata:output_type -> google.protobuf.Empty + 925, // 1505: forge.Forge.UpdateRackMetadata:output_type -> google.protobuf.Empty + 925, // 1506: forge.Forge.UpdateSwitchMetadata:output_type -> google.protobuf.Empty + 925, // 1507: forge.Forge.UpdatePowerShelfMetadata:output_type -> google.protobuf.Empty + 925, // 1508: forge.Forge.UpdateMachineNvLinkInfo:output_type -> google.protobuf.Empty + 925, // 1509: forge.Forge.SetMaintenance:output_type -> google.protobuf.Empty + 925, // 1510: forge.Forge.SetDynamicConfig:output_type -> google.protobuf.Empty + 925, // 1511: forge.Forge.TriggerDpuReprovisioning:output_type -> google.protobuf.Empty + 452, // 1512: forge.Forge.ListDpuWaitingForReprovisioning:output_type -> forge.DpuReprovisioningListResponse + 925, // 1513: forge.Forge.TriggerHostReprovisioning:output_type -> google.protobuf.Empty + 455, // 1514: forge.Forge.ListHostsWaitingForReprovisioning:output_type -> forge.HostReprovisioningListResponse + 925, // 1515: forge.Forge.MarkManualFirmwareUpgradeComplete:output_type -> google.protobuf.Empty + 458, // 1516: forge.Forge.GetDpuInfoList:output_type -> forge.GetDpuInfoListResponse + 460, // 1517: forge.Forge.GetMachineBootOverride:output_type -> forge.MachineBootOverride + 925, // 1518: forge.Forge.SetMachineBootOverride:output_type -> google.protobuf.Empty + 925, // 1519: forge.Forge.ClearMachineBootOverride:output_type -> google.protobuf.Empty + 471, // 1520: forge.Forge.GetNetworkTopology:output_type -> forge.NetworkTopologyData + 471, // 1521: forge.Forge.FindNetworkDevicesByDeviceIds:output_type -> forge.NetworkTopologyData + 109, // 1522: forge.Forge.CreateCredential:output_type -> forge.CredentialCreationResult + 110, // 1523: forge.Forge.DeleteCredential:output_type -> forge.CredentialDeletionResult + 473, // 1524: forge.Forge.GetRouteServers:output_type -> forge.RouteServerEntries + 925, // 1525: forge.Forge.AddRouteServers:output_type -> google.protobuf.Empty + 925, // 1526: forge.Forge.RemoveRouteServers:output_type -> google.protobuf.Empty + 925, // 1527: forge.Forge.ReplaceRouteServers:output_type -> google.protobuf.Empty + 925, // 1528: forge.Forge.UpdateAgentReportedInventory:output_type -> google.protobuf.Empty + 263, // 1529: forge.Forge.UpdateInstancePhoneHomeLastContact:output_type -> forge.InstancePhoneHomeLastContactResponse + 476, // 1530: forge.Forge.SetHostUefiPassword:output_type -> forge.SetHostUefiPasswordResponse + 478, // 1531: forge.Forge.ClearHostUefiPassword:output_type -> forge.ClearHostUefiPasswordResponse + 925, // 1532: forge.Forge.AddExpectedMachine:output_type -> google.protobuf.Empty + 925, // 1533: forge.Forge.DeleteExpectedMachine:output_type -> google.protobuf.Empty + 925, // 1534: forge.Forge.UpdateExpectedMachine:output_type -> google.protobuf.Empty + 489, // 1535: forge.Forge.GetExpectedMachine:output_type -> forge.ExpectedMachine + 491, // 1536: forge.Forge.GetAllExpectedMachines:output_type -> forge.ExpectedMachineList + 772, // 1537: forge.Forge.CreateRackFirmware:output_type -> forge.RackFirmware + 772, // 1538: forge.Forge.GetRackFirmware:output_type -> forge.RackFirmware + 777, // 1539: forge.Forge.ListRackFirmware:output_type -> forge.RackFirmwareList + 925, // 1540: forge.Forge.DeleteRackFirmware:output_type -> google.protobuf.Empty + 780, // 1541: forge.Forge.ApplyRackFirmware:output_type -> forge.RackFirmwareApplyResponse + 784, // 1542: forge.Forge.GetRackFirmwareJobStatus:output_type -> forge.RackFirmwareJobStatusResponse + 786, // 1543: forge.Forge.GetRackFirmwareHistory:output_type -> forge.RackFirmwareHistoryResponse + 925, // 1544: forge.Forge.ReplaceAllExpectedMachines:output_type -> google.protobuf.Empty + 925, // 1545: forge.Forge.DeleteAllExpectedMachines:output_type -> google.protobuf.Empty + 492, // 1546: forge.Forge.GetAllExpectedMachinesLinked:output_type -> forge.LinkedExpectedMachineList + 496, // 1547: forge.Forge.CreateExpectedMachines:output_type -> forge.BatchExpectedMachineOperationResponse + 496, // 1548: forge.Forge.UpdateExpectedMachines:output_type -> forge.BatchExpectedMachineOperationResponse + 925, // 1549: forge.Forge.AddExpectedPowerShelf:output_type -> google.protobuf.Empty + 925, // 1550: forge.Forge.DeleteExpectedPowerShelf:output_type -> google.protobuf.Empty + 925, // 1551: forge.Forge.UpdateExpectedPowerShelf:output_type -> google.protobuf.Empty + 181, // 1552: forge.Forge.GetExpectedPowerShelf:output_type -> forge.ExpectedPowerShelf + 183, // 1553: forge.Forge.GetAllExpectedPowerShelves:output_type -> forge.ExpectedPowerShelfList + 925, // 1554: forge.Forge.ReplaceAllExpectedPowerShelves:output_type -> google.protobuf.Empty + 925, // 1555: forge.Forge.DeleteAllExpectedPowerShelves:output_type -> google.protobuf.Empty + 184, // 1556: forge.Forge.GetAllExpectedPowerShelvesLinked:output_type -> forge.LinkedExpectedPowerShelfList + 925, // 1557: forge.Forge.AddExpectedSwitch:output_type -> google.protobuf.Empty + 925, // 1558: forge.Forge.DeleteExpectedSwitch:output_type -> google.protobuf.Empty + 925, // 1559: forge.Forge.UpdateExpectedSwitch:output_type -> google.protobuf.Empty + 201, // 1560: forge.Forge.GetExpectedSwitch:output_type -> forge.ExpectedSwitch + 203, // 1561: forge.Forge.GetAllExpectedSwitches:output_type -> forge.ExpectedSwitchList + 925, // 1562: forge.Forge.ReplaceAllExpectedSwitches:output_type -> google.protobuf.Empty + 925, // 1563: forge.Forge.DeleteAllExpectedSwitches:output_type -> google.protobuf.Empty + 204, // 1564: forge.Forge.GetAllExpectedSwitchesLinked:output_type -> forge.LinkedExpectedSwitchList + 925, // 1565: forge.Forge.AddExpectedRack:output_type -> google.protobuf.Empty + 925, // 1566: forge.Forge.DeleteExpectedRack:output_type -> google.protobuf.Empty + 925, // 1567: forge.Forge.UpdateExpectedRack:output_type -> google.protobuf.Empty + 206, // 1568: forge.Forge.GetExpectedRack:output_type -> forge.ExpectedRack + 208, // 1569: forge.Forge.GetAllExpectedRacks:output_type -> forge.ExpectedRackList + 925, // 1570: forge.Forge.ReplaceAllExpectedRacks:output_type -> google.protobuf.Empty + 925, // 1571: forge.Forge.DeleteAllExpectedRacks:output_type -> google.protobuf.Empty + 106, // 1572: forge.Forge.AttestQuote:output_type -> forge.AttestQuoteResponse + 552, // 1573: forge.Forge.CreateInstanceType:output_type -> forge.CreateInstanceTypeResponse + 554, // 1574: forge.Forge.FindInstanceTypeIds:output_type -> forge.FindInstanceTypeIdsResponse + 556, // 1575: forge.Forge.FindInstanceTypesByIds:output_type -> forge.FindInstanceTypesByIdsResponse + 559, // 1576: forge.Forge.UpdateInstanceType:output_type -> forge.UpdateInstanceTypeResponse + 558, // 1577: forge.Forge.DeleteInstanceType:output_type -> forge.DeleteInstanceTypeResponse + 562, // 1578: forge.Forge.AssociateMachinesWithInstanceType:output_type -> forge.AssociateMachinesWithInstanceTypeResponse + 564, // 1579: forge.Forge.RemoveMachineInstanceTypeAssociation:output_type -> forge.RemoveMachineInstanceTypeAssociationResponse + 996, // 1580: forge.Forge.CreateMeasurementBundle:output_type -> measured_boot.CreateMeasurementBundleResponse + 997, // 1581: forge.Forge.DeleteMeasurementBundle:output_type -> measured_boot.DeleteMeasurementBundleResponse + 998, // 1582: forge.Forge.RenameMeasurementBundle:output_type -> measured_boot.RenameMeasurementBundleResponse + 999, // 1583: forge.Forge.UpdateMeasurementBundle:output_type -> measured_boot.UpdateMeasurementBundleResponse + 1000, // 1584: forge.Forge.ShowMeasurementBundle:output_type -> measured_boot.ShowMeasurementBundleResponse + 1001, // 1585: forge.Forge.ShowMeasurementBundles:output_type -> measured_boot.ShowMeasurementBundlesResponse + 1002, // 1586: forge.Forge.ListMeasurementBundles:output_type -> measured_boot.ListMeasurementBundlesResponse + 1003, // 1587: forge.Forge.ListMeasurementBundleMachines:output_type -> measured_boot.ListMeasurementBundleMachinesResponse + 1000, // 1588: forge.Forge.FindClosestBundleMatch:output_type -> measured_boot.ShowMeasurementBundleResponse + 1004, // 1589: forge.Forge.DeleteMeasurementJournal:output_type -> measured_boot.DeleteMeasurementJournalResponse + 1005, // 1590: forge.Forge.ShowMeasurementJournal:output_type -> measured_boot.ShowMeasurementJournalResponse + 1006, // 1591: forge.Forge.ShowMeasurementJournals:output_type -> measured_boot.ShowMeasurementJournalsResponse + 1007, // 1592: forge.Forge.ListMeasurementJournal:output_type -> measured_boot.ListMeasurementJournalResponse + 1008, // 1593: forge.Forge.AttestCandidateMachine:output_type -> measured_boot.AttestCandidateMachineResponse + 1009, // 1594: forge.Forge.ShowCandidateMachine:output_type -> measured_boot.ShowCandidateMachineResponse + 1010, // 1595: forge.Forge.ShowCandidateMachines:output_type -> measured_boot.ShowCandidateMachinesResponse + 1011, // 1596: forge.Forge.ListCandidateMachines:output_type -> measured_boot.ListCandidateMachinesResponse + 1012, // 1597: forge.Forge.CreateMeasurementSystemProfile:output_type -> measured_boot.CreateMeasurementSystemProfileResponse + 1013, // 1598: forge.Forge.DeleteMeasurementSystemProfile:output_type -> measured_boot.DeleteMeasurementSystemProfileResponse + 1014, // 1599: forge.Forge.RenameMeasurementSystemProfile:output_type -> measured_boot.RenameMeasurementSystemProfileResponse + 1015, // 1600: forge.Forge.ShowMeasurementSystemProfile:output_type -> measured_boot.ShowMeasurementSystemProfileResponse + 1016, // 1601: forge.Forge.ShowMeasurementSystemProfiles:output_type -> measured_boot.ShowMeasurementSystemProfilesResponse + 1017, // 1602: forge.Forge.ListMeasurementSystemProfiles:output_type -> measured_boot.ListMeasurementSystemProfilesResponse + 1018, // 1603: forge.Forge.ListMeasurementSystemProfileBundles:output_type -> measured_boot.ListMeasurementSystemProfileBundlesResponse + 1019, // 1604: forge.Forge.ListMeasurementSystemProfileMachines:output_type -> measured_boot.ListMeasurementSystemProfileMachinesResponse + 1020, // 1605: forge.Forge.CreateMeasurementReport:output_type -> measured_boot.CreateMeasurementReportResponse + 1021, // 1606: forge.Forge.DeleteMeasurementReport:output_type -> measured_boot.DeleteMeasurementReportResponse + 1022, // 1607: forge.Forge.PromoteMeasurementReport:output_type -> measured_boot.PromoteMeasurementReportResponse + 1023, // 1608: forge.Forge.RevokeMeasurementReport:output_type -> measured_boot.RevokeMeasurementReportResponse + 1024, // 1609: forge.Forge.ShowMeasurementReportForId:output_type -> measured_boot.ShowMeasurementReportForIdResponse + 1025, // 1610: forge.Forge.ShowMeasurementReportsForMachine:output_type -> measured_boot.ShowMeasurementReportsForMachineResponse + 1026, // 1611: forge.Forge.ShowMeasurementReports:output_type -> measured_boot.ShowMeasurementReportsResponse + 1027, // 1612: forge.Forge.ListMeasurementReport:output_type -> measured_boot.ListMeasurementReportResponse + 1028, // 1613: forge.Forge.MatchMeasurementReport:output_type -> measured_boot.MatchMeasurementReportResponse + 1029, // 1614: forge.Forge.ImportSiteMeasurements:output_type -> measured_boot.ImportSiteMeasurementsResponse + 1030, // 1615: forge.Forge.ExportSiteMeasurements:output_type -> measured_boot.ExportSiteMeasurementsResponse + 1031, // 1616: forge.Forge.AddMeasurementTrustedMachine:output_type -> measured_boot.AddMeasurementTrustedMachineResponse + 1032, // 1617: forge.Forge.RemoveMeasurementTrustedMachine:output_type -> measured_boot.RemoveMeasurementTrustedMachineResponse + 1033, // 1618: forge.Forge.AddMeasurementTrustedProfile:output_type -> measured_boot.AddMeasurementTrustedProfileResponse + 1034, // 1619: forge.Forge.RemoveMeasurementTrustedProfile:output_type -> measured_boot.RemoveMeasurementTrustedProfileResponse + 1035, // 1620: forge.Forge.ListMeasurementTrustedMachines:output_type -> measured_boot.ListMeasurementTrustedMachinesResponse + 1036, // 1621: forge.Forge.ListMeasurementTrustedProfiles:output_type -> measured_boot.ListMeasurementTrustedProfilesResponse + 1037, // 1622: forge.Forge.ListAttestationSummary:output_type -> measured_boot.ListAttestationSummaryResponse + 583, // 1623: forge.Forge.CreateNetworkSecurityGroup:output_type -> forge.CreateNetworkSecurityGroupResponse + 585, // 1624: forge.Forge.FindNetworkSecurityGroupIds:output_type -> forge.FindNetworkSecurityGroupIdsResponse + 587, // 1625: forge.Forge.FindNetworkSecurityGroupsByIds:output_type -> forge.FindNetworkSecurityGroupsByIdsResponse + 588, // 1626: forge.Forge.UpdateNetworkSecurityGroup:output_type -> forge.UpdateNetworkSecurityGroupResponse + 591, // 1627: forge.Forge.DeleteNetworkSecurityGroup:output_type -> forge.DeleteNetworkSecurityGroupResponse + 594, // 1628: forge.Forge.GetNetworkSecurityGroupPropagationStatus:output_type -> forge.GetNetworkSecurityGroupPropagationStatusResponse + 601, // 1629: forge.Forge.GetNetworkSecurityGroupAttachments:output_type -> forge.GetNetworkSecurityGroupAttachmentsResponse + 480, // 1630: forge.Forge.CreateOsImage:output_type -> forge.OsImage + 484, // 1631: forge.Forge.DeleteOsImage:output_type -> forge.DeleteOsImageResponse + 482, // 1632: forge.Forge.ListOsImage:output_type -> forge.ListOsImageResponse + 480, // 1633: forge.Forge.GetOsImage:output_type -> forge.OsImage + 480, // 1634: forge.Forge.UpdateOsImage:output_type -> forge.OsImage + 235, // 1635: forge.Forge.GetIpxeTemplate:output_type -> forge.IpxeTemplate + 487, // 1636: forge.Forge.ListIpxeTemplates:output_type -> forge.IpxeTemplateList + 497, // 1637: forge.Forge.RebootCompleted:output_type -> forge.MachineRebootCompletedResponse + 925, // 1638: forge.Forge.PersistValidationResult:output_type -> google.protobuf.Empty + 503, // 1639: forge.Forge.GetMachineValidationResults:output_type -> forge.MachineValidationResultList + 500, // 1640: forge.Forge.MachineValidationCompleted:output_type -> forge.MachineValidationCompletedResponse + 508, // 1641: forge.Forge.MachineSetAutoUpdate:output_type -> forge.MachineSetAutoUpdateResponse + 511, // 1642: forge.Forge.GetMachineValidationExternalConfig:output_type -> forge.GetMachineValidationExternalConfigResponse + 513, // 1643: forge.Forge.GetMachineValidationExternalConfigs:output_type -> forge.GetMachineValidationExternalConfigsResponse + 925, // 1644: forge.Forge.AddUpdateMachineValidationExternalConfig:output_type -> google.protobuf.Empty + 522, // 1645: forge.Forge.GetMachineValidationRuns:output_type -> forge.MachineValidationRunList + 925, // 1646: forge.Forge.RemoveMachineValidationExternalConfig:output_type -> google.protobuf.Empty + 530, // 1647: forge.Forge.GetMachineValidationTests:output_type -> forge.MachineValidationTestsGetResponse + 529, // 1648: forge.Forge.AddMachineValidationTest:output_type -> forge.MachineValidationTestAddUpdateResponse + 529, // 1649: forge.Forge.UpdateMachineValidationTest:output_type -> forge.MachineValidationTestAddUpdateResponse + 532, // 1650: forge.Forge.MachineValidationTestVerfied:output_type -> forge.MachineValidationTestVerfiedResponse + 534, // 1651: forge.Forge.MachineValidationTestNextVersion:output_type -> forge.MachineValidationTestNextVersionResponse + 537, // 1652: forge.Forge.MachineValidationTestEnableDisableTest:output_type -> forge.MachineValidationTestEnableDisableTestResponse + 539, // 1653: forge.Forge.UpdateMachineValidationRun:output_type -> forge.MachineValidationRunResponse + 367, // 1654: forge.Forge.AdminBmcReset:output_type -> forge.AdminBmcResetResponse + 519, // 1655: forge.Forge.AdminPowerControl:output_type -> forge.AdminPowerControlResponse + 355, // 1656: forge.Forge.DisableSecureBoot:output_type -> forge.DisableSecureBootResponse + 357, // 1657: forge.Forge.Lockdown:output_type -> forge.LockdownResponse + 1038, // 1658: forge.Forge.LockdownStatus:output_type -> site_explorer.LockdownStatus + 361, // 1659: forge.Forge.MachineSetup:output_type -> forge.MachineSetupResponse + 363, // 1660: forge.Forge.SetDpuFirstBootOrder:output_type -> forge.SetDpuFirstBootOrderResponse + 698, // 1661: forge.Forge.CreateBmcUser:output_type -> forge.CreateBmcUserResponse + 700, // 1662: forge.Forge.DeleteBmcUser:output_type -> forge.DeleteBmcUserResponse + 369, // 1663: forge.Forge.EnableInfiniteBoot:output_type -> forge.EnableInfiniteBootResponse + 371, // 1664: forge.Forge.IsInfiniteBootEnabled:output_type -> forge.IsInfiniteBootEnabledResponse + 517, // 1665: forge.Forge.OnDemandMachineValidation:output_type -> forge.MachineValidationOnDemandResponse + 97, // 1666: forge.Forge.TpmAddCaCert:output_type -> forge.TpmCaAddedCaStatus + 103, // 1667: forge.Forge.TpmShowCaCerts:output_type -> forge.TpmCaCertDetailCollection + 100, // 1668: forge.Forge.TpmShowUnmatchedEkCerts:output_type -> forge.TpmEkCertStatusCollection + 925, // 1669: forge.Forge.TpmDeleteCaCert:output_type -> google.protobuf.Empty + 566, // 1670: forge.Forge.RedfishBrowse:output_type -> forge.RedfishBrowseResponse + 568, // 1671: forge.Forge.RedfishListActions:output_type -> forge.RedfishListActionsResponse + 573, // 1672: forge.Forge.RedfishCreateAction:output_type -> forge.RedfishCreateActionResponse + 575, // 1673: forge.Forge.RedfishApproveAction:output_type -> forge.RedfishApproveActionResponse + 576, // 1674: forge.Forge.RedfishApplyAction:output_type -> forge.RedfishApplyActionResponse + 577, // 1675: forge.Forge.RedfishCancelAction:output_type -> forge.RedfishCancelActionResponse + 579, // 1676: forge.Forge.UfmBrowse:output_type -> forge.UfmBrowseResponse + 603, // 1677: forge.Forge.GetDesiredFirmwareVersions:output_type -> forge.GetDesiredFirmwareVersionsResponse + 619, // 1678: forge.Forge.CreateSku:output_type -> forge.SkuIdList + 615, // 1679: forge.Forge.GenerateSkuFromMachine:output_type -> forge.Sku + 925, // 1680: forge.Forge.VerifySkuForMachine:output_type -> google.protobuf.Empty + 925, // 1681: forge.Forge.AssignSkuToMachine:output_type -> google.protobuf.Empty + 925, // 1682: forge.Forge.RemoveSkuAssociation:output_type -> google.protobuf.Empty + 925, // 1683: forge.Forge.DeleteSku:output_type -> google.protobuf.Empty + 619, // 1684: forge.Forge.GetAllSkuIds:output_type -> forge.SkuIdList + 618, // 1685: forge.Forge.FindSkusByIds:output_type -> forge.SkuList + 925, // 1686: forge.Forge.UpdateSkuMetadata:output_type -> google.protobuf.Empty + 615, // 1687: forge.Forge.ReplaceSku:output_type -> forge.Sku + 339, // 1688: forge.Forge.GetManagedHostQuarantineState:output_type -> forge.GetManagedHostQuarantineStateResponse + 341, // 1689: forge.Forge.SetManagedHostQuarantineState:output_type -> forge.SetManagedHostQuarantineStateResponse + 343, // 1690: forge.Forge.ClearManagedHostQuarantineState:output_type -> forge.ClearManagedHostQuarantineStateResponse + 925, // 1691: forge.Forge.ResetHostReprovisioning:output_type -> google.protobuf.Empty + 925, // 1692: forge.Forge.CopyBfbToDpuRshim:output_type -> google.protobuf.Empty + 625, // 1693: forge.Forge.GetAllDpaInterfaceIds:output_type -> forge.DpaInterfaceIdList + 627, // 1694: forge.Forge.FindDpaInterfacesByIds:output_type -> forge.DpaInterfaceList + 623, // 1695: forge.Forge.CreateDpaInterface:output_type -> forge.DpaInterface + 623, // 1696: forge.Forge.EnsureDpaInterface:output_type -> forge.DpaInterface + 631, // 1697: forge.Forge.DeleteDpaInterface:output_type -> forge.DpaInterfaceDeletionResult + 623, // 1698: forge.Forge.SetDpaNetworkObservationStatus:output_type -> forge.DpaInterface + 636, // 1699: forge.Forge.GetPowerOptions:output_type -> forge.PowerOptionResponse + 636, // 1700: forge.Forge.UpdatePowerOption:output_type -> forge.PowerOptionResponse + 925, // 1701: forge.Forge.AllowIngestionAndPowerOn:output_type -> google.protobuf.Empty + 96, // 1702: forge.Forge.DetermineMachineIngestionState:output_type -> forge.MachineIngestionStateResponse + 654, // 1703: forge.Forge.FindRackIds:output_type -> forge.RackIdList + 652, // 1704: forge.Forge.FindRacksByIds:output_type -> forge.RackList + 651, // 1705: forge.Forge.GetRack:output_type -> forge.GetRackResponse + 925, // 1706: forge.Forge.DeleteRack:output_type -> google.protobuf.Empty + 667, // 1707: forge.Forge.GetRackCapabilities:output_type -> forge.GetRackCapabilitiesResponse + 640, // 1708: forge.Forge.CreateComputeAllocation:output_type -> forge.CreateComputeAllocationResponse + 642, // 1709: forge.Forge.FindComputeAllocationIds:output_type -> forge.FindComputeAllocationIdsResponse + 644, // 1710: forge.Forge.FindComputeAllocationsByIds:output_type -> forge.FindComputeAllocationsByIdsResponse + 645, // 1711: forge.Forge.UpdateComputeAllocation:output_type -> forge.UpdateComputeAllocationResponse + 648, // 1712: forge.Forge.DeleteComputeAllocation:output_type -> forge.DeleteComputeAllocationResponse + 702, // 1713: forge.Forge.SetFirmwareUpdateTimeWindow:output_type -> forge.SetFirmwareUpdateTimeWindowResponse + 704, // 1714: forge.Forge.ListHostFirmware:output_type -> forge.ListHostFirmwareResponse + 1039, // 1715: forge.Forge.PublishMlxDeviceReport:output_type -> mlx_device.PublishMlxDeviceReportResponse + 1040, // 1716: forge.Forge.PublishMlxObservationReport:output_type -> mlx_device.PublishMlxObservationReportResponse + 707, // 1717: forge.Forge.TrimTable:output_type -> forge.TrimTableResponse + 709, // 1718: forge.Forge.CreateRemediation:output_type -> forge.CreateRemediationResponse + 925, // 1719: forge.Forge.ApproveRemediation:output_type -> google.protobuf.Empty + 925, // 1720: forge.Forge.RevokeRemediation:output_type -> google.protobuf.Empty + 925, // 1721: forge.Forge.EnableRemediation:output_type -> google.protobuf.Empty + 925, // 1722: forge.Forge.DisableRemediation:output_type -> google.protobuf.Empty + 710, // 1723: forge.Forge.FindRemediationIds:output_type -> forge.RemediationIdList + 711, // 1724: forge.Forge.FindRemediationsByIds:output_type -> forge.RemediationList + 718, // 1725: forge.Forge.FindAppliedRemediationIds:output_type -> forge.AppliedRemediationIdList + 721, // 1726: forge.Forge.FindAppliedRemediations:output_type -> forge.AppliedRemediationList + 723, // 1727: forge.Forge.GetNextRemediationForMachine:output_type -> forge.GetNextRemediationForMachineResponse + 925, // 1728: forge.Forge.RemediationApplied:output_type -> google.protobuf.Empty + 925, // 1729: forge.Forge.SetPrimaryDpu:output_type -> google.protobuf.Empty + 731, // 1730: forge.Forge.CreateDpuExtensionService:output_type -> forge.DpuExtensionService + 731, // 1731: forge.Forge.UpdateDpuExtensionService:output_type -> forge.DpuExtensionService + 735, // 1732: forge.Forge.DeleteDpuExtensionService:output_type -> forge.DeleteDpuExtensionServiceResponse + 737, // 1733: forge.Forge.FindDpuExtensionServiceIds:output_type -> forge.DpuExtensionServiceIdList + 739, // 1734: forge.Forge.FindDpuExtensionServicesByIds:output_type -> forge.DpuExtensionServiceList + 741, // 1735: forge.Forge.GetDpuExtensionServiceVersionsInfo:output_type -> forge.DpuExtensionServiceVersionInfoList + 743, // 1736: forge.Forge.FindInstancesByDpuExtensionService:output_type -> forge.FindInstancesByDpuExtensionServiceResponse + 925, // 1737: forge.Forge.TriggerMachineAttestation:output_type -> google.protobuf.Empty + 925, // 1738: forge.Forge.CancelMachineAttestation:output_type -> google.protobuf.Empty + 911, // 1739: forge.Forge.FindMachineIdsUnderAttestation:output_type -> common.MachineIdList + 79, // 1740: forge.Forge.FindMachinesUnderAttestation:output_type -> forge.AttestationResponse + 81, // 1741: forge.Forge.SignMachineIdentity:output_type -> forge.MachineIdentityResponse + 85, // 1742: forge.Forge.GetIdentityConfiguration:output_type -> forge.IdentityConfigResponse + 85, // 1743: forge.Forge.SetIdentityConfiguration:output_type -> forge.IdentityConfigResponse + 925, // 1744: forge.Forge.DeleteIdentityConfiguration:output_type -> google.protobuf.Empty + 88, // 1745: forge.Forge.GetTokenDelegation:output_type -> forge.TokenDelegationResponse + 88, // 1746: forge.Forge.SetTokenDelegation:output_type -> forge.TokenDelegationResponse + 925, // 1747: forge.Forge.DeleteTokenDelegation:output_type -> google.protobuf.Empty + 92, // 1748: forge.Forge.GetJWKS:output_type -> forge.Jwks + 93, // 1749: forge.Forge.GetOpenIDConfiguration:output_type -> forge.OpenIdConfiguration + 750, // 1750: forge.Forge.ScoutStream:output_type -> forge.ScoutStreamScoutBoundMessage + 753, // 1751: forge.Forge.ScoutStreamShowConnections:output_type -> forge.ScoutStreamShowConnectionsResponse + 755, // 1752: forge.Forge.ScoutStreamDisconnect:output_type -> forge.ScoutStreamDisconnectResponse + 757, // 1753: forge.Forge.ScoutStreamPing:output_type -> forge.ScoutStreamAdminPingResponse + 1041, // 1754: forge.Forge.MlxAdminProfileSync:output_type -> mlx_device.MlxAdminProfileSyncResponse + 1042, // 1755: forge.Forge.MlxAdminProfileShow:output_type -> mlx_device.MlxAdminProfileShowResponse + 1043, // 1756: forge.Forge.MlxAdminProfileCompare:output_type -> mlx_device.MlxAdminProfileCompareResponse + 1044, // 1757: forge.Forge.MlxAdminProfileList:output_type -> mlx_device.MlxAdminProfileListResponse + 1045, // 1758: forge.Forge.MlxAdminLockdownLock:output_type -> mlx_device.MlxAdminLockdownLockResponse + 1046, // 1759: forge.Forge.MlxAdminLockdownUnlock:output_type -> mlx_device.MlxAdminLockdownUnlockResponse + 1047, // 1760: forge.Forge.MlxAdminLockdownStatus:output_type -> mlx_device.MlxAdminLockdownStatusResponse + 1048, // 1761: forge.Forge.MlxAdminShowDevice:output_type -> mlx_device.MlxAdminDeviceInfoResponse + 1049, // 1762: forge.Forge.MlxAdminShowMachine:output_type -> mlx_device.MlxAdminDeviceReportResponse + 1050, // 1763: forge.Forge.MlxAdminRegistryList:output_type -> mlx_device.MlxAdminRegistryListResponse + 1051, // 1764: forge.Forge.MlxAdminRegistryShow:output_type -> mlx_device.MlxAdminRegistryShowResponse + 1052, // 1765: forge.Forge.MlxAdminConfigQuery:output_type -> mlx_device.MlxAdminConfigQueryResponse + 1053, // 1766: forge.Forge.MlxAdminConfigSet:output_type -> mlx_device.MlxAdminConfigSetResponse + 1054, // 1767: forge.Forge.MlxAdminConfigSync:output_type -> mlx_device.MlxAdminConfigSyncResponse + 1055, // 1768: forge.Forge.MlxAdminConfigCompare:output_type -> mlx_device.MlxAdminConfigCompareResponse + 683, // 1769: forge.Forge.FindNVLinkPartitionIds:output_type -> forge.NVLinkPartitionIdList + 678, // 1770: forge.Forge.FindNVLinkPartitionsByIds:output_type -> forge.NVLinkPartitionList + 678, // 1771: forge.Forge.NVLinkPartitionsForTenant:output_type -> forge.NVLinkPartitionList + 694, // 1772: forge.Forge.FindNVLinkLogicalPartitionIds:output_type -> forge.NVLinkLogicalPartitionIdList + 688, // 1773: forge.Forge.FindNVLinkLogicalPartitionsByIds:output_type -> forge.NVLinkLogicalPartitionList + 687, // 1774: forge.Forge.CreateNVLinkLogicalPartition:output_type -> forge.NVLinkLogicalPartition + 696, // 1775: forge.Forge.UpdateNVLinkLogicalPartition:output_type -> forge.NVLinkLogicalPartitionUpdateResult + 691, // 1776: forge.Forge.DeleteNVLinkLogicalPartition:output_type -> forge.NVLinkLogicalPartitionDeletionResult + 688, // 1777: forge.Forge.NVLinkLogicalPartitionsForTenant:output_type -> forge.NVLinkLogicalPartitionList + 770, // 1778: forge.Forge.GetMachinePositionInfo:output_type -> forge.MachinePositionInfoList + 676, // 1779: forge.Forge.NmxmBrowse:output_type -> forge.NmxmBrowseResponse + 925, // 1780: forge.Forge.ModifyDPFState:output_type -> google.protobuf.Empty + 790, // 1781: forge.Forge.GetDPFState:output_type -> forge.DPFStateResponse + 799, // 1782: forge.Forge.ComponentPowerControl:output_type -> forge.ComponentPowerControlResponse + 797, // 1783: forge.Forge.GetComponentInventory:output_type -> forge.GetComponentInventoryResponse + 805, // 1784: forge.Forge.UpdateComponentFirmware:output_type -> forge.UpdateComponentFirmwareResponse + 807, // 1785: forge.Forge.GetComponentFirmwareStatus:output_type -> forge.GetComponentFirmwareStatusResponse + 810, // 1786: forge.Forge.ListComponentFirmwareVersions:output_type -> forge.ListComponentFirmwareVersionsResponse + 815, // 1787: forge.Forge.CreateOperatingSystem:output_type -> forge.OperatingSystem + 815, // 1788: forge.Forge.GetOperatingSystem:output_type -> forge.OperatingSystem + 815, // 1789: forge.Forge.UpdateOperatingSystem:output_type -> forge.OperatingSystem + 821, // 1790: forge.Forge.DeleteOperatingSystem:output_type -> forge.DeleteOperatingSystemResponse + 823, // 1791: forge.Forge.FindOperatingSystemIds:output_type -> forge.OperatingSystemIdList + 825, // 1792: forge.Forge.FindOperatingSystemsByIds:output_type -> forge.OperatingSystemList + 827, // 1793: forge.Forge.GetOperatingSystemCachableIpxeTemplateArtifacts:output_type -> forge.IpxeTemplateArtifactList + 827, // 1794: forge.Forge.UpdateOperatingSystemCachableIpxeTemplateArtifacts:output_type -> forge.IpxeTemplateArtifactList + 1374, // [1374:1795] is the sub-list for method output_type + 953, // [953:1374] is the sub-list for method input_type + 953, // [953:953] is the sub-list for extension type_name + 953, // [953:953] is the sub-list for extension extendee + 0, // [0:953] is the sub-list for field type_name } func init() { file_forge_carbide_proto_init() } @@ -56816,196 +59383,202 @@ func file_forge_carbide_proto_init() { file_forge_carbide_proto_msgTypes[149].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[151].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[154].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[157].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[158].OneofWrappers = []any{ - (*OperatingSystem_Ipxe)(nil), - (*OperatingSystem_OsImageId)(nil), - } - file_forge_carbide_proto_msgTypes[159].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[158].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[160].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[166].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[167].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[168].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[161].OneofWrappers = []any{ + (*InstanceOperatingSystemConfig_Ipxe)(nil), + (*InstanceOperatingSystemConfig_OsImageId)(nil), + (*InstanceOperatingSystemConfig_OperatingSystemId)(nil), + } + file_forge_carbide_proto_msgTypes[162].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[163].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[169].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[170].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[171].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[172].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[174].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[175].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[176].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[177].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[178].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[179].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[180].OneofWrappers = []any{ (*InstanceInterfaceConfig_SegmentId)(nil), (*InstanceInterfaceConfig_VpcPrefixId)(nil), } - file_forge_carbide_proto_msgTypes[178].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[179].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[180].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[181].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[186].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[182].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[183].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[184].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[189].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[198].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[204].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[212].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[213].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[192].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[201].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[207].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[215].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[216].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[217].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[218].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[223].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[228].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[229].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[230].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[219].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[220].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[221].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[226].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[231].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[232].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[233].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[234].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[240].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[237].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[243].OneofWrappers = []any{ (*BmcCredentials_UsernamePassword)(nil), (*BmcCredentials_SessionToken)(nil), } - file_forge_carbide_proto_msgTypes[243].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[246].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[247].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[248].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[249].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[250].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[254].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[255].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[251].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[253].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[257].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[258].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[260].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[262].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[264].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[261].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[263].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[265].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[266].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[272].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[277].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[279].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[267].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[268].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[269].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[275].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[280].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[281].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[282].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[283].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[285].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[287].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[289].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[291].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[284].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[286].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[288].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[290].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[292].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[293].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[294].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[295].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[296].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[297].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[298].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[299].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[301].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[302].OneofWrappers = []any{ (*MachineDiscoveryInfo_Info)(nil), } - file_forge_carbide_proto_msgTypes[310].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[312].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[313].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[314].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[315].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[316].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[318].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[320].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[325].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[319].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[321].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[323].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[328].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[330].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[331].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[332].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[333].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[334].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[339].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[345].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[349].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[354].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[361].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[362].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[380].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[381].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[382].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[389].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[390].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[396].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[397].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[398].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[335].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[337].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[342].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[348].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[352].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[357].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[364].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[365].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[383].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[384].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[385].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[392].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[393].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[399].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[400].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[401].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[402].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[406].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[407].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[408].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[411].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[403].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[404].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[405].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[412].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[413].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[414].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[417].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[419].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[422].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[423].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[423].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[425].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[428].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[429].OneofWrappers = []any{ (*MachineValidationStatus_Started)(nil), (*MachineValidationStatus_InProgress)(nil), (*MachineValidationStatus_Completed)(nil), } - file_forge_carbide_proto_msgTypes[424].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[428].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[432].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[436].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[437].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[444].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[446].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[451].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[458].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[459].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[460].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[461].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[462].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[463].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[430].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[434].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[438].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[442].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[443].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[450].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[452].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[457].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[464].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[465].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[466].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[467].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[468].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[469].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[470].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[473].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[478].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[485].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[487].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[488].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[499].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[500].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[502].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[504].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[507].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[511].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[514].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[515].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[474].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[475].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[479].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[484].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[491].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[493].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[494].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[505].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[506].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[508].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[510].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[513].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[517].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[520].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[521].OneofWrappers = []any{ (*NetworkSecurityGroupRuleAttributes_SrcPrefix)(nil), (*NetworkSecurityGroupRuleAttributes_DstPrefix)(nil), } - file_forge_carbide_proto_msgTypes[532].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[533].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[538].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[541].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[550].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[553].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[539].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[544].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[547].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[556].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[557].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[559].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[564].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[568].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[580].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[581].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[562].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[563].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[565].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[570].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[574].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[586].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[587].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[588].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[592].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[593].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[601].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[598].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[604].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[607].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[609].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[611].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[624].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[629].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[635].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[641].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[605].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[613].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[616].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[619].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[621].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[623].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[636].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[641].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[647].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[653].OneofWrappers = []any{ (*DpuExtensionServiceCredential_UsernamePassword)(nil), } - file_forge_carbide_proto_msgTypes[642].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[643].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[644].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[645].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[648].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[654].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[655].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[656].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[659].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[657].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[660].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[666].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[668].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[671].OneofWrappers = []any{ (*DpuExtensionServiceObservabilityConfig_Prometheus)(nil), (*DpuExtensionServiceObservabilityConfig_Logging)(nil), } - file_forge_carbide_proto_msgTypes[661].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[673].OneofWrappers = []any{ (*ScoutStreamApiBoundMessage_Init)(nil), (*ScoutStreamApiBoundMessage_MlxDeviceLockdownResponse)(nil), (*ScoutStreamApiBoundMessage_MlxDeviceProfileSyncResponse)(nil), @@ -57020,7 +59593,7 @@ func file_forge_carbide_proto_init() { (*ScoutStreamApiBoundMessage_MlxDeviceConfigCompareResponse)(nil), (*ScoutStreamApiBoundMessage_ScoutStreamAgentPingResponse)(nil), } - file_forge_carbide_proto_msgTypes[662].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[674].OneofWrappers = []any{ (*ScoutStreamScoutBoundMessage_MlxDeviceLockdownLockRequest)(nil), (*ScoutStreamScoutBoundMessage_MlxDeviceLockdownUnlockRequest)(nil), (*ScoutStreamScoutBoundMessage_MlxDeviceLockdownStatusRequest)(nil), @@ -57036,56 +59609,61 @@ func file_forge_carbide_proto_init() { (*ScoutStreamScoutBoundMessage_MlxDeviceConfigCompareRequest)(nil), (*ScoutStreamScoutBoundMessage_ScoutStreamAgentPingRequest)(nil), } - file_forge_carbide_proto_msgTypes[671].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[683].OneofWrappers = []any{ (*ScoutStreamAgentPingResponse_Pong)(nil), (*ScoutStreamAgentPingResponse_Error)(nil), } - file_forge_carbide_proto_msgTypes[679].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[680].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[691].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[692].OneofWrappers = []any{ (*PxeDomain_NewDomain)(nil), (*PxeDomain_LegacyDomain)(nil), } - file_forge_carbide_proto_msgTypes[683].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[707].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[695].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[719].OneofWrappers = []any{ (*GetComponentInventoryRequest_MachineIds)(nil), (*GetComponentInventoryRequest_SwitchIds)(nil), (*GetComponentInventoryRequest_PowerShelfIds)(nil), } - file_forge_carbide_proto_msgTypes[708].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[710].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[720].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[722].OneofWrappers = []any{ (*ComponentPowerControlRequest_MachineIds)(nil), (*ComponentPowerControlRequest_SwitchIds)(nil), (*ComponentPowerControlRequest_PowerShelfIds)(nil), } - file_forge_carbide_proto_msgTypes[716].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[728].OneofWrappers = []any{ (*UpdateComponentFirmwareRequest_ComputeTrays)(nil), (*UpdateComponentFirmwareRequest_Switches)(nil), (*UpdateComponentFirmwareRequest_PowerShelves)(nil), } - file_forge_carbide_proto_msgTypes[718].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[730].OneofWrappers = []any{ (*GetComponentFirmwareStatusRequest_MachineIds)(nil), (*GetComponentFirmwareStatusRequest_SwitchIds)(nil), (*GetComponentFirmwareStatusRequest_PowerShelfIds)(nil), } - file_forge_carbide_proto_msgTypes[720].OneofWrappers = []any{ + file_forge_carbide_proto_msgTypes[732].OneofWrappers = []any{ (*ListComponentFirmwareVersionsRequest_MachineIds)(nil), (*ListComponentFirmwareVersionsRequest_SwitchIds)(nil), (*ListComponentFirmwareVersionsRequest_PowerShelfIds)(nil), } - file_forge_carbide_proto_msgTypes[727].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[728].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[730].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[732].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[742].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[739].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[740].OneofWrappers = []any{} file_forge_carbide_proto_msgTypes[743].OneofWrappers = []any{} - file_forge_carbide_proto_msgTypes[744].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[746].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[752].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[754].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[755].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[757].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[759].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[769].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[770].OneofWrappers = []any{} + file_forge_carbide_proto_msgTypes[771].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_forge_carbide_proto_rawDesc), len(file_forge_carbide_proto_rawDesc)), - NumEnums: 69, - NumMessages: 753, + NumEnums: 76, + NumMessages: 780, NumExtensions: 0, NumServices: 1, }, diff --git a/workflow-schema/schema/site-agent/workflows/v1/forge_carbide_grpc.pb.go b/workflow-schema/schema/site-agent/workflows/v1/forge_carbide_grpc.pb.go index a21f225b2..6b0409a69 100644 --- a/workflow-schema/schema/site-agent/workflows/v1/forge_carbide_grpc.pb.go +++ b/workflow-schema/schema/site-agent/workflows/v1/forge_carbide_grpc.pb.go @@ -36,416 +36,427 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - Forge_Version_FullMethodName = "/forge.Forge/Version" - Forge_CreateDomain_FullMethodName = "/forge.Forge/CreateDomain" - Forge_UpdateDomain_FullMethodName = "/forge.Forge/UpdateDomain" - Forge_DeleteDomain_FullMethodName = "/forge.Forge/DeleteDomain" - Forge_FindDomain_FullMethodName = "/forge.Forge/FindDomain" - Forge_CreateDomainLegacy_FullMethodName = "/forge.Forge/CreateDomainLegacy" - Forge_UpdateDomainLegacy_FullMethodName = "/forge.Forge/UpdateDomainLegacy" - Forge_DeleteDomainLegacy_FullMethodName = "/forge.Forge/DeleteDomainLegacy" - Forge_FindDomainLegacy_FullMethodName = "/forge.Forge/FindDomainLegacy" - Forge_CreateVpc_FullMethodName = "/forge.Forge/CreateVpc" - Forge_UpdateVpc_FullMethodName = "/forge.Forge/UpdateVpc" - Forge_UpdateVpcVirtualization_FullMethodName = "/forge.Forge/UpdateVpcVirtualization" - Forge_DeleteVpc_FullMethodName = "/forge.Forge/DeleteVpc" - Forge_FindVpcIds_FullMethodName = "/forge.Forge/FindVpcIds" - Forge_FindVpcsByIds_FullMethodName = "/forge.Forge/FindVpcsByIds" - Forge_CreateVpcPrefix_FullMethodName = "/forge.Forge/CreateVpcPrefix" - Forge_SearchVpcPrefixes_FullMethodName = "/forge.Forge/SearchVpcPrefixes" - Forge_GetVpcPrefixes_FullMethodName = "/forge.Forge/GetVpcPrefixes" - Forge_UpdateVpcPrefix_FullMethodName = "/forge.Forge/UpdateVpcPrefix" - Forge_DeleteVpcPrefix_FullMethodName = "/forge.Forge/DeleteVpcPrefix" - Forge_CreateVpcPeering_FullMethodName = "/forge.Forge/CreateVpcPeering" - Forge_FindVpcPeeringIds_FullMethodName = "/forge.Forge/FindVpcPeeringIds" - Forge_FindVpcPeeringsByIds_FullMethodName = "/forge.Forge/FindVpcPeeringsByIds" - Forge_DeleteVpcPeering_FullMethodName = "/forge.Forge/DeleteVpcPeering" - Forge_FindNetworkSegmentIds_FullMethodName = "/forge.Forge/FindNetworkSegmentIds" - Forge_FindNetworkSegmentsByIds_FullMethodName = "/forge.Forge/FindNetworkSegmentsByIds" - Forge_CreateNetworkSegment_FullMethodName = "/forge.Forge/CreateNetworkSegment" - Forge_DeleteNetworkSegment_FullMethodName = "/forge.Forge/DeleteNetworkSegment" - Forge_NetworkSegmentsForVpc_FullMethodName = "/forge.Forge/NetworkSegmentsForVpc" - Forge_FindIBPartitionIds_FullMethodName = "/forge.Forge/FindIBPartitionIds" - Forge_FindIBPartitionsByIds_FullMethodName = "/forge.Forge/FindIBPartitionsByIds" - Forge_CreateIBPartition_FullMethodName = "/forge.Forge/CreateIBPartition" - Forge_UpdateIBPartition_FullMethodName = "/forge.Forge/UpdateIBPartition" - Forge_DeleteIBPartition_FullMethodName = "/forge.Forge/DeleteIBPartition" - Forge_IBPartitionsForTenant_FullMethodName = "/forge.Forge/IBPartitionsForTenant" - Forge_FindPowerShelves_FullMethodName = "/forge.Forge/FindPowerShelves" - Forge_FindPowerShelfIds_FullMethodName = "/forge.Forge/FindPowerShelfIds" - Forge_FindPowerShelvesByIds_FullMethodName = "/forge.Forge/FindPowerShelvesByIds" - Forge_DeletePowerShelf_FullMethodName = "/forge.Forge/DeletePowerShelf" - Forge_AdminForceDeletePowerShelf_FullMethodName = "/forge.Forge/AdminForceDeletePowerShelf" - Forge_FindSwitches_FullMethodName = "/forge.Forge/FindSwitches" - Forge_FindSwitchIds_FullMethodName = "/forge.Forge/FindSwitchIds" - Forge_FindSwitchesByIds_FullMethodName = "/forge.Forge/FindSwitchesByIds" - Forge_DeleteSwitch_FullMethodName = "/forge.Forge/DeleteSwitch" - Forge_AdminForceDeleteSwitch_FullMethodName = "/forge.Forge/AdminForceDeleteSwitch" - Forge_FindIBFabricIds_FullMethodName = "/forge.Forge/FindIBFabricIds" - Forge_AllocateInstance_FullMethodName = "/forge.Forge/AllocateInstance" - Forge_AllocateInstances_FullMethodName = "/forge.Forge/AllocateInstances" - Forge_ReleaseInstance_FullMethodName = "/forge.Forge/ReleaseInstance" - Forge_UpdateInstanceOperatingSystem_FullMethodName = "/forge.Forge/UpdateInstanceOperatingSystem" - Forge_UpdateInstanceConfig_FullMethodName = "/forge.Forge/UpdateInstanceConfig" - Forge_FindInstanceIds_FullMethodName = "/forge.Forge/FindInstanceIds" - Forge_FindInstancesByIds_FullMethodName = "/forge.Forge/FindInstancesByIds" - Forge_FindInstanceByMachineID_FullMethodName = "/forge.Forge/FindInstanceByMachineID" - Forge_GetManagedHostNetworkConfig_FullMethodName = "/forge.Forge/GetManagedHostNetworkConfig" - Forge_RecordDpuNetworkStatus_FullMethodName = "/forge.Forge/RecordDpuNetworkStatus" - Forge_ListHealthReportOverrides_FullMethodName = "/forge.Forge/ListHealthReportOverrides" - Forge_InsertHealthReportOverride_FullMethodName = "/forge.Forge/InsertHealthReportOverride" - Forge_RemoveHealthReportOverride_FullMethodName = "/forge.Forge/RemoveHealthReportOverride" - Forge_ListRackHealthReportOverrides_FullMethodName = "/forge.Forge/ListRackHealthReportOverrides" - Forge_InsertRackHealthReportOverride_FullMethodName = "/forge.Forge/InsertRackHealthReportOverride" - Forge_RemoveRackHealthReportOverride_FullMethodName = "/forge.Forge/RemoveRackHealthReportOverride" - Forge_DpuAgentUpgradeCheck_FullMethodName = "/forge.Forge/DpuAgentUpgradeCheck" - Forge_DpuAgentUpgradePolicyAction_FullMethodName = "/forge.Forge/DpuAgentUpgradePolicyAction" - Forge_LookupRecord_FullMethodName = "/forge.Forge/LookupRecord" - Forge_LookupRecordLegacy_FullMethodName = "/forge.Forge/LookupRecordLegacy" - Forge_GetAllDomains_FullMethodName = "/forge.Forge/GetAllDomains" - Forge_GetAllDomainMetadata_FullMethodName = "/forge.Forge/GetAllDomainMetadata" - Forge_InvokeInstancePower_FullMethodName = "/forge.Forge/InvokeInstancePower" - Forge_ForgeAgentControl_FullMethodName = "/forge.Forge/ForgeAgentControl" - Forge_DiscoverMachine_FullMethodName = "/forge.Forge/DiscoverMachine" - Forge_RenewMachineCertificate_FullMethodName = "/forge.Forge/RenewMachineCertificate" - Forge_DiscoveryCompleted_FullMethodName = "/forge.Forge/DiscoveryCompleted" - Forge_CleanupMachineCompleted_FullMethodName = "/forge.Forge/CleanupMachineCompleted" - Forge_ReportForgeScoutError_FullMethodName = "/forge.Forge/ReportForgeScoutError" - Forge_DiscoverDhcp_FullMethodName = "/forge.Forge/DiscoverDhcp" - Forge_ExpireDhcpLease_FullMethodName = "/forge.Forge/ExpireDhcpLease" - Forge_AssignStaticAddress_FullMethodName = "/forge.Forge/AssignStaticAddress" - Forge_RemoveStaticAddress_FullMethodName = "/forge.Forge/RemoveStaticAddress" - Forge_FindInterfaceAddresses_FullMethodName = "/forge.Forge/FindInterfaceAddresses" - Forge_FindInterfaces_FullMethodName = "/forge.Forge/FindInterfaces" - Forge_DeleteInterface_FullMethodName = "/forge.Forge/DeleteInterface" - Forge_FindIpAddress_FullMethodName = "/forge.Forge/FindIpAddress" - Forge_FindMachineIds_FullMethodName = "/forge.Forge/FindMachineIds" - Forge_FindMachinesByIds_FullMethodName = "/forge.Forge/FindMachinesByIds" - Forge_FindMachineStateHistories_FullMethodName = "/forge.Forge/FindMachineStateHistories" - Forge_FindMachineHealthHistories_FullMethodName = "/forge.Forge/FindMachineHealthHistories" - Forge_FindPowerShelfStateHistories_FullMethodName = "/forge.Forge/FindPowerShelfStateHistories" - Forge_FindRackStateHistories_FullMethodName = "/forge.Forge/FindRackStateHistories" - Forge_FindSwitchStateHistories_FullMethodName = "/forge.Forge/FindSwitchStateHistories" - Forge_FindTenantOrganizationIds_FullMethodName = "/forge.Forge/FindTenantOrganizationIds" - Forge_FindTenantsByOrganizationIds_FullMethodName = "/forge.Forge/FindTenantsByOrganizationIds" - Forge_FindConnectedDevicesByDpuMachineIds_FullMethodName = "/forge.Forge/FindConnectedDevicesByDpuMachineIds" - Forge_FindMachineIdsByBmcIps_FullMethodName = "/forge.Forge/FindMachineIdsByBmcIps" - Forge_FindMacAddressByBmcIp_FullMethodName = "/forge.Forge/FindMacAddressByBmcIp" - Forge_IdentifyUuid_FullMethodName = "/forge.Forge/IdentifyUuid" - Forge_IdentifyMac_FullMethodName = "/forge.Forge/IdentifyMac" - Forge_IdentifySerial_FullMethodName = "/forge.Forge/IdentifySerial" - Forge_GetBMCMetaData_FullMethodName = "/forge.Forge/GetBMCMetaData" - Forge_UpdateMachineCredentials_FullMethodName = "/forge.Forge/UpdateMachineCredentials" - Forge_GetPxeInstructions_FullMethodName = "/forge.Forge/GetPxeInstructions" - Forge_GetCloudInitInstructions_FullMethodName = "/forge.Forge/GetCloudInitInstructions" - Forge_Echo_FullMethodName = "/forge.Forge/Echo" - Forge_CreateTenant_FullMethodName = "/forge.Forge/CreateTenant" - Forge_FindTenant_FullMethodName = "/forge.Forge/FindTenant" - Forge_UpdateTenant_FullMethodName = "/forge.Forge/UpdateTenant" - Forge_CreateTenantKeyset_FullMethodName = "/forge.Forge/CreateTenantKeyset" - Forge_FindTenantKeysetIds_FullMethodName = "/forge.Forge/FindTenantKeysetIds" - Forge_FindTenantKeysetsByIds_FullMethodName = "/forge.Forge/FindTenantKeysetsByIds" - Forge_UpdateTenantKeyset_FullMethodName = "/forge.Forge/UpdateTenantKeyset" - Forge_DeleteTenantKeyset_FullMethodName = "/forge.Forge/DeleteTenantKeyset" - Forge_ValidateTenantPublicKey_FullMethodName = "/forge.Forge/ValidateTenantPublicKey" - Forge_GetBmcCredentials_FullMethodName = "/forge.Forge/GetBmcCredentials" - Forge_GetAllManagedHostNetworkStatus_FullMethodName = "/forge.Forge/GetAllManagedHostNetworkStatus" - Forge_GetSiteExplorationReport_FullMethodName = "/forge.Forge/GetSiteExplorationReport" - Forge_ClearSiteExplorationError_FullMethodName = "/forge.Forge/ClearSiteExplorationError" - Forge_IsBmcInManagedHost_FullMethodName = "/forge.Forge/IsBmcInManagedHost" - Forge_BmcCredentialStatus_FullMethodName = "/forge.Forge/BmcCredentialStatus" - Forge_Explore_FullMethodName = "/forge.Forge/Explore" - Forge_ReExploreEndpoint_FullMethodName = "/forge.Forge/ReExploreEndpoint" - Forge_DeleteExploredEndpoint_FullMethodName = "/forge.Forge/DeleteExploredEndpoint" - Forge_PauseExploredEndpointRemediation_FullMethodName = "/forge.Forge/PauseExploredEndpointRemediation" - Forge_FindExploredEndpointIds_FullMethodName = "/forge.Forge/FindExploredEndpointIds" - Forge_FindExploredEndpointsByIds_FullMethodName = "/forge.Forge/FindExploredEndpointsByIds" - Forge_FindExploredManagedHostIds_FullMethodName = "/forge.Forge/FindExploredManagedHostIds" - Forge_FindExploredManagedHostsByIds_FullMethodName = "/forge.Forge/FindExploredManagedHostsByIds" - Forge_UpdateMachineHardwareInfo_FullMethodName = "/forge.Forge/UpdateMachineHardwareInfo" - Forge_AdminForceDeleteMachine_FullMethodName = "/forge.Forge/AdminForceDeleteMachine" - Forge_AdminListResourcePools_FullMethodName = "/forge.Forge/AdminListResourcePools" - Forge_AdminGrowResourcePool_FullMethodName = "/forge.Forge/AdminGrowResourcePool" - Forge_UpdateMachineMetadata_FullMethodName = "/forge.Forge/UpdateMachineMetadata" - Forge_UpdateRackMetadata_FullMethodName = "/forge.Forge/UpdateRackMetadata" - Forge_UpdateSwitchMetadata_FullMethodName = "/forge.Forge/UpdateSwitchMetadata" - Forge_UpdatePowerShelfMetadata_FullMethodName = "/forge.Forge/UpdatePowerShelfMetadata" - Forge_UpdateMachineNvLinkInfo_FullMethodName = "/forge.Forge/UpdateMachineNvLinkInfo" - Forge_SetMaintenance_FullMethodName = "/forge.Forge/SetMaintenance" - Forge_SetDynamicConfig_FullMethodName = "/forge.Forge/SetDynamicConfig" - Forge_TriggerDpuReprovisioning_FullMethodName = "/forge.Forge/TriggerDpuReprovisioning" - Forge_ListDpuWaitingForReprovisioning_FullMethodName = "/forge.Forge/ListDpuWaitingForReprovisioning" - Forge_TriggerHostReprovisioning_FullMethodName = "/forge.Forge/TriggerHostReprovisioning" - Forge_ListHostsWaitingForReprovisioning_FullMethodName = "/forge.Forge/ListHostsWaitingForReprovisioning" - Forge_MarkManualFirmwareUpgradeComplete_FullMethodName = "/forge.Forge/MarkManualFirmwareUpgradeComplete" - Forge_GetDpuInfoList_FullMethodName = "/forge.Forge/GetDpuInfoList" - Forge_GetMachineBootOverride_FullMethodName = "/forge.Forge/GetMachineBootOverride" - Forge_SetMachineBootOverride_FullMethodName = "/forge.Forge/SetMachineBootOverride" - Forge_ClearMachineBootOverride_FullMethodName = "/forge.Forge/ClearMachineBootOverride" - Forge_GetNetworkTopology_FullMethodName = "/forge.Forge/GetNetworkTopology" - Forge_FindNetworkDevicesByDeviceIds_FullMethodName = "/forge.Forge/FindNetworkDevicesByDeviceIds" - Forge_CreateCredential_FullMethodName = "/forge.Forge/CreateCredential" - Forge_DeleteCredential_FullMethodName = "/forge.Forge/DeleteCredential" - Forge_GetRouteServers_FullMethodName = "/forge.Forge/GetRouteServers" - Forge_AddRouteServers_FullMethodName = "/forge.Forge/AddRouteServers" - Forge_RemoveRouteServers_FullMethodName = "/forge.Forge/RemoveRouteServers" - Forge_ReplaceRouteServers_FullMethodName = "/forge.Forge/ReplaceRouteServers" - Forge_UpdateAgentReportedInventory_FullMethodName = "/forge.Forge/UpdateAgentReportedInventory" - Forge_UpdateInstancePhoneHomeLastContact_FullMethodName = "/forge.Forge/UpdateInstancePhoneHomeLastContact" - Forge_SetHostUefiPassword_FullMethodName = "/forge.Forge/SetHostUefiPassword" - Forge_ClearHostUefiPassword_FullMethodName = "/forge.Forge/ClearHostUefiPassword" - Forge_AddExpectedMachine_FullMethodName = "/forge.Forge/AddExpectedMachine" - Forge_DeleteExpectedMachine_FullMethodName = "/forge.Forge/DeleteExpectedMachine" - Forge_UpdateExpectedMachine_FullMethodName = "/forge.Forge/UpdateExpectedMachine" - Forge_GetExpectedMachine_FullMethodName = "/forge.Forge/GetExpectedMachine" - Forge_GetAllExpectedMachines_FullMethodName = "/forge.Forge/GetAllExpectedMachines" - Forge_CreateRackFirmware_FullMethodName = "/forge.Forge/CreateRackFirmware" - Forge_GetRackFirmware_FullMethodName = "/forge.Forge/GetRackFirmware" - Forge_ListRackFirmware_FullMethodName = "/forge.Forge/ListRackFirmware" - Forge_DeleteRackFirmware_FullMethodName = "/forge.Forge/DeleteRackFirmware" - Forge_ApplyRackFirmware_FullMethodName = "/forge.Forge/ApplyRackFirmware" - Forge_GetRackFirmwareJobStatus_FullMethodName = "/forge.Forge/GetRackFirmwareJobStatus" - Forge_GetRackFirmwareHistory_FullMethodName = "/forge.Forge/GetRackFirmwareHistory" - Forge_ReplaceAllExpectedMachines_FullMethodName = "/forge.Forge/ReplaceAllExpectedMachines" - Forge_DeleteAllExpectedMachines_FullMethodName = "/forge.Forge/DeleteAllExpectedMachines" - Forge_GetAllExpectedMachinesLinked_FullMethodName = "/forge.Forge/GetAllExpectedMachinesLinked" - Forge_CreateExpectedMachines_FullMethodName = "/forge.Forge/CreateExpectedMachines" - Forge_UpdateExpectedMachines_FullMethodName = "/forge.Forge/UpdateExpectedMachines" - Forge_AddExpectedPowerShelf_FullMethodName = "/forge.Forge/AddExpectedPowerShelf" - Forge_DeleteExpectedPowerShelf_FullMethodName = "/forge.Forge/DeleteExpectedPowerShelf" - Forge_UpdateExpectedPowerShelf_FullMethodName = "/forge.Forge/UpdateExpectedPowerShelf" - Forge_GetExpectedPowerShelf_FullMethodName = "/forge.Forge/GetExpectedPowerShelf" - Forge_GetAllExpectedPowerShelves_FullMethodName = "/forge.Forge/GetAllExpectedPowerShelves" - Forge_ReplaceAllExpectedPowerShelves_FullMethodName = "/forge.Forge/ReplaceAllExpectedPowerShelves" - Forge_DeleteAllExpectedPowerShelves_FullMethodName = "/forge.Forge/DeleteAllExpectedPowerShelves" - Forge_GetAllExpectedPowerShelvesLinked_FullMethodName = "/forge.Forge/GetAllExpectedPowerShelvesLinked" - Forge_AddExpectedSwitch_FullMethodName = "/forge.Forge/AddExpectedSwitch" - Forge_DeleteExpectedSwitch_FullMethodName = "/forge.Forge/DeleteExpectedSwitch" - Forge_UpdateExpectedSwitch_FullMethodName = "/forge.Forge/UpdateExpectedSwitch" - Forge_GetExpectedSwitch_FullMethodName = "/forge.Forge/GetExpectedSwitch" - Forge_GetAllExpectedSwitches_FullMethodName = "/forge.Forge/GetAllExpectedSwitches" - Forge_ReplaceAllExpectedSwitches_FullMethodName = "/forge.Forge/ReplaceAllExpectedSwitches" - Forge_DeleteAllExpectedSwitches_FullMethodName = "/forge.Forge/DeleteAllExpectedSwitches" - Forge_GetAllExpectedSwitchesLinked_FullMethodName = "/forge.Forge/GetAllExpectedSwitchesLinked" - Forge_AddExpectedRack_FullMethodName = "/forge.Forge/AddExpectedRack" - Forge_DeleteExpectedRack_FullMethodName = "/forge.Forge/DeleteExpectedRack" - Forge_UpdateExpectedRack_FullMethodName = "/forge.Forge/UpdateExpectedRack" - Forge_GetExpectedRack_FullMethodName = "/forge.Forge/GetExpectedRack" - Forge_GetAllExpectedRacks_FullMethodName = "/forge.Forge/GetAllExpectedRacks" - Forge_ReplaceAllExpectedRacks_FullMethodName = "/forge.Forge/ReplaceAllExpectedRacks" - Forge_DeleteAllExpectedRacks_FullMethodName = "/forge.Forge/DeleteAllExpectedRacks" - Forge_AttestQuote_FullMethodName = "/forge.Forge/AttestQuote" - Forge_CreateInstanceType_FullMethodName = "/forge.Forge/CreateInstanceType" - Forge_FindInstanceTypeIds_FullMethodName = "/forge.Forge/FindInstanceTypeIds" - Forge_FindInstanceTypesByIds_FullMethodName = "/forge.Forge/FindInstanceTypesByIds" - Forge_UpdateInstanceType_FullMethodName = "/forge.Forge/UpdateInstanceType" - Forge_DeleteInstanceType_FullMethodName = "/forge.Forge/DeleteInstanceType" - Forge_AssociateMachinesWithInstanceType_FullMethodName = "/forge.Forge/AssociateMachinesWithInstanceType" - Forge_RemoveMachineInstanceTypeAssociation_FullMethodName = "/forge.Forge/RemoveMachineInstanceTypeAssociation" - Forge_CreateMeasurementBundle_FullMethodName = "/forge.Forge/CreateMeasurementBundle" - Forge_DeleteMeasurementBundle_FullMethodName = "/forge.Forge/DeleteMeasurementBundle" - Forge_RenameMeasurementBundle_FullMethodName = "/forge.Forge/RenameMeasurementBundle" - Forge_UpdateMeasurementBundle_FullMethodName = "/forge.Forge/UpdateMeasurementBundle" - Forge_ShowMeasurementBundle_FullMethodName = "/forge.Forge/ShowMeasurementBundle" - Forge_ShowMeasurementBundles_FullMethodName = "/forge.Forge/ShowMeasurementBundles" - Forge_ListMeasurementBundles_FullMethodName = "/forge.Forge/ListMeasurementBundles" - Forge_ListMeasurementBundleMachines_FullMethodName = "/forge.Forge/ListMeasurementBundleMachines" - Forge_FindClosestBundleMatch_FullMethodName = "/forge.Forge/FindClosestBundleMatch" - Forge_DeleteMeasurementJournal_FullMethodName = "/forge.Forge/DeleteMeasurementJournal" - Forge_ShowMeasurementJournal_FullMethodName = "/forge.Forge/ShowMeasurementJournal" - Forge_ShowMeasurementJournals_FullMethodName = "/forge.Forge/ShowMeasurementJournals" - Forge_ListMeasurementJournal_FullMethodName = "/forge.Forge/ListMeasurementJournal" - Forge_AttestCandidateMachine_FullMethodName = "/forge.Forge/AttestCandidateMachine" - Forge_ShowCandidateMachine_FullMethodName = "/forge.Forge/ShowCandidateMachine" - Forge_ShowCandidateMachines_FullMethodName = "/forge.Forge/ShowCandidateMachines" - Forge_ListCandidateMachines_FullMethodName = "/forge.Forge/ListCandidateMachines" - Forge_CreateMeasurementSystemProfile_FullMethodName = "/forge.Forge/CreateMeasurementSystemProfile" - Forge_DeleteMeasurementSystemProfile_FullMethodName = "/forge.Forge/DeleteMeasurementSystemProfile" - Forge_RenameMeasurementSystemProfile_FullMethodName = "/forge.Forge/RenameMeasurementSystemProfile" - Forge_ShowMeasurementSystemProfile_FullMethodName = "/forge.Forge/ShowMeasurementSystemProfile" - Forge_ShowMeasurementSystemProfiles_FullMethodName = "/forge.Forge/ShowMeasurementSystemProfiles" - Forge_ListMeasurementSystemProfiles_FullMethodName = "/forge.Forge/ListMeasurementSystemProfiles" - Forge_ListMeasurementSystemProfileBundles_FullMethodName = "/forge.Forge/ListMeasurementSystemProfileBundles" - Forge_ListMeasurementSystemProfileMachines_FullMethodName = "/forge.Forge/ListMeasurementSystemProfileMachines" - Forge_CreateMeasurementReport_FullMethodName = "/forge.Forge/CreateMeasurementReport" - Forge_DeleteMeasurementReport_FullMethodName = "/forge.Forge/DeleteMeasurementReport" - Forge_PromoteMeasurementReport_FullMethodName = "/forge.Forge/PromoteMeasurementReport" - Forge_RevokeMeasurementReport_FullMethodName = "/forge.Forge/RevokeMeasurementReport" - Forge_ShowMeasurementReportForId_FullMethodName = "/forge.Forge/ShowMeasurementReportForId" - Forge_ShowMeasurementReportsForMachine_FullMethodName = "/forge.Forge/ShowMeasurementReportsForMachine" - Forge_ShowMeasurementReports_FullMethodName = "/forge.Forge/ShowMeasurementReports" - Forge_ListMeasurementReport_FullMethodName = "/forge.Forge/ListMeasurementReport" - Forge_MatchMeasurementReport_FullMethodName = "/forge.Forge/MatchMeasurementReport" - Forge_ImportSiteMeasurements_FullMethodName = "/forge.Forge/ImportSiteMeasurements" - Forge_ExportSiteMeasurements_FullMethodName = "/forge.Forge/ExportSiteMeasurements" - Forge_AddMeasurementTrustedMachine_FullMethodName = "/forge.Forge/AddMeasurementTrustedMachine" - Forge_RemoveMeasurementTrustedMachine_FullMethodName = "/forge.Forge/RemoveMeasurementTrustedMachine" - Forge_AddMeasurementTrustedProfile_FullMethodName = "/forge.Forge/AddMeasurementTrustedProfile" - Forge_RemoveMeasurementTrustedProfile_FullMethodName = "/forge.Forge/RemoveMeasurementTrustedProfile" - Forge_ListMeasurementTrustedMachines_FullMethodName = "/forge.Forge/ListMeasurementTrustedMachines" - Forge_ListMeasurementTrustedProfiles_FullMethodName = "/forge.Forge/ListMeasurementTrustedProfiles" - Forge_ListAttestationSummary_FullMethodName = "/forge.Forge/ListAttestationSummary" - Forge_CreateNetworkSecurityGroup_FullMethodName = "/forge.Forge/CreateNetworkSecurityGroup" - Forge_FindNetworkSecurityGroupIds_FullMethodName = "/forge.Forge/FindNetworkSecurityGroupIds" - Forge_FindNetworkSecurityGroupsByIds_FullMethodName = "/forge.Forge/FindNetworkSecurityGroupsByIds" - Forge_UpdateNetworkSecurityGroup_FullMethodName = "/forge.Forge/UpdateNetworkSecurityGroup" - Forge_DeleteNetworkSecurityGroup_FullMethodName = "/forge.Forge/DeleteNetworkSecurityGroup" - Forge_GetNetworkSecurityGroupPropagationStatus_FullMethodName = "/forge.Forge/GetNetworkSecurityGroupPropagationStatus" - Forge_GetNetworkSecurityGroupAttachments_FullMethodName = "/forge.Forge/GetNetworkSecurityGroupAttachments" - Forge_CreateOsImage_FullMethodName = "/forge.Forge/CreateOsImage" - Forge_DeleteOsImage_FullMethodName = "/forge.Forge/DeleteOsImage" - Forge_ListOsImage_FullMethodName = "/forge.Forge/ListOsImage" - Forge_GetOsImage_FullMethodName = "/forge.Forge/GetOsImage" - Forge_UpdateOsImage_FullMethodName = "/forge.Forge/UpdateOsImage" - Forge_RebootCompleted_FullMethodName = "/forge.Forge/RebootCompleted" - Forge_PersistValidationResult_FullMethodName = "/forge.Forge/PersistValidationResult" - Forge_GetMachineValidationResults_FullMethodName = "/forge.Forge/GetMachineValidationResults" - Forge_MachineValidationCompleted_FullMethodName = "/forge.Forge/MachineValidationCompleted" - Forge_MachineSetAutoUpdate_FullMethodName = "/forge.Forge/MachineSetAutoUpdate" - Forge_GetMachineValidationExternalConfig_FullMethodName = "/forge.Forge/GetMachineValidationExternalConfig" - Forge_GetMachineValidationExternalConfigs_FullMethodName = "/forge.Forge/GetMachineValidationExternalConfigs" - Forge_AddUpdateMachineValidationExternalConfig_FullMethodName = "/forge.Forge/AddUpdateMachineValidationExternalConfig" - Forge_GetMachineValidationRuns_FullMethodName = "/forge.Forge/GetMachineValidationRuns" - Forge_RemoveMachineValidationExternalConfig_FullMethodName = "/forge.Forge/RemoveMachineValidationExternalConfig" - Forge_GetMachineValidationTests_FullMethodName = "/forge.Forge/GetMachineValidationTests" - Forge_AddMachineValidationTest_FullMethodName = "/forge.Forge/AddMachineValidationTest" - Forge_UpdateMachineValidationTest_FullMethodName = "/forge.Forge/UpdateMachineValidationTest" - Forge_MachineValidationTestVerfied_FullMethodName = "/forge.Forge/MachineValidationTestVerfied" - Forge_MachineValidationTestNextVersion_FullMethodName = "/forge.Forge/MachineValidationTestNextVersion" - Forge_MachineValidationTestEnableDisableTest_FullMethodName = "/forge.Forge/MachineValidationTestEnableDisableTest" - Forge_UpdateMachineValidationRun_FullMethodName = "/forge.Forge/UpdateMachineValidationRun" - Forge_AdminBmcReset_FullMethodName = "/forge.Forge/AdminBmcReset" - Forge_AdminPowerControl_FullMethodName = "/forge.Forge/AdminPowerControl" - Forge_DisableSecureBoot_FullMethodName = "/forge.Forge/DisableSecureBoot" - Forge_Lockdown_FullMethodName = "/forge.Forge/Lockdown" - Forge_LockdownStatus_FullMethodName = "/forge.Forge/LockdownStatus" - Forge_MachineSetup_FullMethodName = "/forge.Forge/MachineSetup" - Forge_SetDpuFirstBootOrder_FullMethodName = "/forge.Forge/SetDpuFirstBootOrder" - Forge_CreateBmcUser_FullMethodName = "/forge.Forge/CreateBmcUser" - Forge_DeleteBmcUser_FullMethodName = "/forge.Forge/DeleteBmcUser" - Forge_EnableInfiniteBoot_FullMethodName = "/forge.Forge/EnableInfiniteBoot" - Forge_IsInfiniteBootEnabled_FullMethodName = "/forge.Forge/IsInfiniteBootEnabled" - Forge_OnDemandMachineValidation_FullMethodName = "/forge.Forge/OnDemandMachineValidation" - Forge_TpmAddCaCert_FullMethodName = "/forge.Forge/TpmAddCaCert" - Forge_TpmShowCaCerts_FullMethodName = "/forge.Forge/TpmShowCaCerts" - Forge_TpmShowUnmatchedEkCerts_FullMethodName = "/forge.Forge/TpmShowUnmatchedEkCerts" - Forge_TpmDeleteCaCert_FullMethodName = "/forge.Forge/TpmDeleteCaCert" - Forge_RedfishBrowse_FullMethodName = "/forge.Forge/RedfishBrowse" - Forge_RedfishListActions_FullMethodName = "/forge.Forge/RedfishListActions" - Forge_RedfishCreateAction_FullMethodName = "/forge.Forge/RedfishCreateAction" - Forge_RedfishApproveAction_FullMethodName = "/forge.Forge/RedfishApproveAction" - Forge_RedfishApplyAction_FullMethodName = "/forge.Forge/RedfishApplyAction" - Forge_RedfishCancelAction_FullMethodName = "/forge.Forge/RedfishCancelAction" - Forge_UfmBrowse_FullMethodName = "/forge.Forge/UfmBrowse" - Forge_GetDesiredFirmwareVersions_FullMethodName = "/forge.Forge/GetDesiredFirmwareVersions" - Forge_CreateSku_FullMethodName = "/forge.Forge/CreateSku" - Forge_GenerateSkuFromMachine_FullMethodName = "/forge.Forge/GenerateSkuFromMachine" - Forge_VerifySkuForMachine_FullMethodName = "/forge.Forge/VerifySkuForMachine" - Forge_AssignSkuToMachine_FullMethodName = "/forge.Forge/AssignSkuToMachine" - Forge_RemoveSkuAssociation_FullMethodName = "/forge.Forge/RemoveSkuAssociation" - Forge_DeleteSku_FullMethodName = "/forge.Forge/DeleteSku" - Forge_GetAllSkuIds_FullMethodName = "/forge.Forge/GetAllSkuIds" - Forge_FindSkusByIds_FullMethodName = "/forge.Forge/FindSkusByIds" - Forge_UpdateSkuMetadata_FullMethodName = "/forge.Forge/UpdateSkuMetadata" - Forge_ReplaceSku_FullMethodName = "/forge.Forge/ReplaceSku" - Forge_GetManagedHostQuarantineState_FullMethodName = "/forge.Forge/GetManagedHostQuarantineState" - Forge_SetManagedHostQuarantineState_FullMethodName = "/forge.Forge/SetManagedHostQuarantineState" - Forge_ClearManagedHostQuarantineState_FullMethodName = "/forge.Forge/ClearManagedHostQuarantineState" - Forge_ResetHostReprovisioning_FullMethodName = "/forge.Forge/ResetHostReprovisioning" - Forge_CopyBfbToDpuRshim_FullMethodName = "/forge.Forge/CopyBfbToDpuRshim" - Forge_GetAllDpaInterfaceIds_FullMethodName = "/forge.Forge/GetAllDpaInterfaceIds" - Forge_FindDpaInterfacesByIds_FullMethodName = "/forge.Forge/FindDpaInterfacesByIds" - Forge_CreateDpaInterface_FullMethodName = "/forge.Forge/CreateDpaInterface" - Forge_EnsureDpaInterface_FullMethodName = "/forge.Forge/EnsureDpaInterface" - Forge_DeleteDpaInterface_FullMethodName = "/forge.Forge/DeleteDpaInterface" - Forge_SetDpaNetworkObservationStatus_FullMethodName = "/forge.Forge/SetDpaNetworkObservationStatus" - Forge_GetPowerOptions_FullMethodName = "/forge.Forge/GetPowerOptions" - Forge_UpdatePowerOption_FullMethodName = "/forge.Forge/UpdatePowerOption" - Forge_AllowIngestionAndPowerOn_FullMethodName = "/forge.Forge/AllowIngestionAndPowerOn" - Forge_DetermineMachineIngestionState_FullMethodName = "/forge.Forge/DetermineMachineIngestionState" - Forge_FindRackIds_FullMethodName = "/forge.Forge/FindRackIds" - Forge_FindRacksByIds_FullMethodName = "/forge.Forge/FindRacksByIds" - Forge_GetRack_FullMethodName = "/forge.Forge/GetRack" - Forge_DeleteRack_FullMethodName = "/forge.Forge/DeleteRack" - Forge_CreateComputeAllocation_FullMethodName = "/forge.Forge/CreateComputeAllocation" - Forge_FindComputeAllocationIds_FullMethodName = "/forge.Forge/FindComputeAllocationIds" - Forge_FindComputeAllocationsByIds_FullMethodName = "/forge.Forge/FindComputeAllocationsByIds" - Forge_UpdateComputeAllocation_FullMethodName = "/forge.Forge/UpdateComputeAllocation" - Forge_DeleteComputeAllocation_FullMethodName = "/forge.Forge/DeleteComputeAllocation" - Forge_SetFirmwareUpdateTimeWindow_FullMethodName = "/forge.Forge/SetFirmwareUpdateTimeWindow" - Forge_ListHostFirmware_FullMethodName = "/forge.Forge/ListHostFirmware" - Forge_PublishMlxDeviceReport_FullMethodName = "/forge.Forge/PublishMlxDeviceReport" - Forge_PublishMlxObservationReport_FullMethodName = "/forge.Forge/PublishMlxObservationReport" - Forge_TrimTable_FullMethodName = "/forge.Forge/TrimTable" - Forge_CreateRemediation_FullMethodName = "/forge.Forge/CreateRemediation" - Forge_ApproveRemediation_FullMethodName = "/forge.Forge/ApproveRemediation" - Forge_RevokeRemediation_FullMethodName = "/forge.Forge/RevokeRemediation" - Forge_EnableRemediation_FullMethodName = "/forge.Forge/EnableRemediation" - Forge_DisableRemediation_FullMethodName = "/forge.Forge/DisableRemediation" - Forge_FindRemediationIds_FullMethodName = "/forge.Forge/FindRemediationIds" - Forge_FindRemediationsByIds_FullMethodName = "/forge.Forge/FindRemediationsByIds" - Forge_FindAppliedRemediationIds_FullMethodName = "/forge.Forge/FindAppliedRemediationIds" - Forge_FindAppliedRemediations_FullMethodName = "/forge.Forge/FindAppliedRemediations" - Forge_GetNextRemediationForMachine_FullMethodName = "/forge.Forge/GetNextRemediationForMachine" - Forge_RemediationApplied_FullMethodName = "/forge.Forge/RemediationApplied" - Forge_SetPrimaryDpu_FullMethodName = "/forge.Forge/SetPrimaryDpu" - Forge_CreateDpuExtensionService_FullMethodName = "/forge.Forge/CreateDpuExtensionService" - Forge_UpdateDpuExtensionService_FullMethodName = "/forge.Forge/UpdateDpuExtensionService" - Forge_DeleteDpuExtensionService_FullMethodName = "/forge.Forge/DeleteDpuExtensionService" - Forge_FindDpuExtensionServiceIds_FullMethodName = "/forge.Forge/FindDpuExtensionServiceIds" - Forge_FindDpuExtensionServicesByIds_FullMethodName = "/forge.Forge/FindDpuExtensionServicesByIds" - Forge_GetDpuExtensionServiceVersionsInfo_FullMethodName = "/forge.Forge/GetDpuExtensionServiceVersionsInfo" - Forge_FindInstancesByDpuExtensionService_FullMethodName = "/forge.Forge/FindInstancesByDpuExtensionService" - Forge_TriggerMachineAttestation_FullMethodName = "/forge.Forge/TriggerMachineAttestation" - Forge_CancelMachineAttestation_FullMethodName = "/forge.Forge/CancelMachineAttestation" - Forge_FindMachineIdsUnderAttestation_FullMethodName = "/forge.Forge/FindMachineIdsUnderAttestation" - Forge_FindMachinesUnderAttestation_FullMethodName = "/forge.Forge/FindMachinesUnderAttestation" - Forge_SignMachineIdentity_FullMethodName = "/forge.Forge/SignMachineIdentity" - Forge_GetIdentityConfiguration_FullMethodName = "/forge.Forge/GetIdentityConfiguration" - Forge_SetIdentityConfiguration_FullMethodName = "/forge.Forge/SetIdentityConfiguration" - Forge_DeleteIdentityConfiguration_FullMethodName = "/forge.Forge/DeleteIdentityConfiguration" - Forge_GetTokenDelegation_FullMethodName = "/forge.Forge/GetTokenDelegation" - Forge_SetTokenDelegation_FullMethodName = "/forge.Forge/SetTokenDelegation" - Forge_DeleteTokenDelegation_FullMethodName = "/forge.Forge/DeleteTokenDelegation" - Forge_GetJWKS_FullMethodName = "/forge.Forge/GetJWKS" - Forge_GetOpenIDConfiguration_FullMethodName = "/forge.Forge/GetOpenIDConfiguration" - Forge_ScoutStream_FullMethodName = "/forge.Forge/ScoutStream" - Forge_ScoutStreamShowConnections_FullMethodName = "/forge.Forge/ScoutStreamShowConnections" - Forge_ScoutStreamDisconnect_FullMethodName = "/forge.Forge/ScoutStreamDisconnect" - Forge_ScoutStreamPing_FullMethodName = "/forge.Forge/ScoutStreamPing" - Forge_MlxAdminProfileSync_FullMethodName = "/forge.Forge/MlxAdminProfileSync" - Forge_MlxAdminProfileShow_FullMethodName = "/forge.Forge/MlxAdminProfileShow" - Forge_MlxAdminProfileCompare_FullMethodName = "/forge.Forge/MlxAdminProfileCompare" - Forge_MlxAdminProfileList_FullMethodName = "/forge.Forge/MlxAdminProfileList" - Forge_MlxAdminLockdownLock_FullMethodName = "/forge.Forge/MlxAdminLockdownLock" - Forge_MlxAdminLockdownUnlock_FullMethodName = "/forge.Forge/MlxAdminLockdownUnlock" - Forge_MlxAdminLockdownStatus_FullMethodName = "/forge.Forge/MlxAdminLockdownStatus" - Forge_MlxAdminShowDevice_FullMethodName = "/forge.Forge/MlxAdminShowDevice" - Forge_MlxAdminShowMachine_FullMethodName = "/forge.Forge/MlxAdminShowMachine" - Forge_MlxAdminRegistryList_FullMethodName = "/forge.Forge/MlxAdminRegistryList" - Forge_MlxAdminRegistryShow_FullMethodName = "/forge.Forge/MlxAdminRegistryShow" - Forge_MlxAdminConfigQuery_FullMethodName = "/forge.Forge/MlxAdminConfigQuery" - Forge_MlxAdminConfigSet_FullMethodName = "/forge.Forge/MlxAdminConfigSet" - Forge_MlxAdminConfigSync_FullMethodName = "/forge.Forge/MlxAdminConfigSync" - Forge_MlxAdminConfigCompare_FullMethodName = "/forge.Forge/MlxAdminConfigCompare" - Forge_FindNVLinkPartitionIds_FullMethodName = "/forge.Forge/FindNVLinkPartitionIds" - Forge_FindNVLinkPartitionsByIds_FullMethodName = "/forge.Forge/FindNVLinkPartitionsByIds" - Forge_NVLinkPartitionsForTenant_FullMethodName = "/forge.Forge/NVLinkPartitionsForTenant" - Forge_FindNVLinkLogicalPartitionIds_FullMethodName = "/forge.Forge/FindNVLinkLogicalPartitionIds" - Forge_FindNVLinkLogicalPartitionsByIds_FullMethodName = "/forge.Forge/FindNVLinkLogicalPartitionsByIds" - Forge_CreateNVLinkLogicalPartition_FullMethodName = "/forge.Forge/CreateNVLinkLogicalPartition" - Forge_UpdateNVLinkLogicalPartition_FullMethodName = "/forge.Forge/UpdateNVLinkLogicalPartition" - Forge_DeleteNVLinkLogicalPartition_FullMethodName = "/forge.Forge/DeleteNVLinkLogicalPartition" - Forge_NVLinkLogicalPartitionsForTenant_FullMethodName = "/forge.Forge/NVLinkLogicalPartitionsForTenant" - Forge_GetMachinePositionInfo_FullMethodName = "/forge.Forge/GetMachinePositionInfo" - Forge_NmxmBrowse_FullMethodName = "/forge.Forge/NmxmBrowse" - Forge_ModifyDPFState_FullMethodName = "/forge.Forge/ModifyDPFState" - Forge_GetDPFState_FullMethodName = "/forge.Forge/GetDPFState" - Forge_ComponentPowerControl_FullMethodName = "/forge.Forge/ComponentPowerControl" - Forge_GetComponentInventory_FullMethodName = "/forge.Forge/GetComponentInventory" - Forge_UpdateComponentFirmware_FullMethodName = "/forge.Forge/UpdateComponentFirmware" - Forge_GetComponentFirmwareStatus_FullMethodName = "/forge.Forge/GetComponentFirmwareStatus" - Forge_ListComponentFirmwareVersions_FullMethodName = "/forge.Forge/ListComponentFirmwareVersions" + Forge_Version_FullMethodName = "/forge.Forge/Version" + Forge_CreateDomain_FullMethodName = "/forge.Forge/CreateDomain" + Forge_UpdateDomain_FullMethodName = "/forge.Forge/UpdateDomain" + Forge_DeleteDomain_FullMethodName = "/forge.Forge/DeleteDomain" + Forge_FindDomain_FullMethodName = "/forge.Forge/FindDomain" + Forge_CreateDomainLegacy_FullMethodName = "/forge.Forge/CreateDomainLegacy" + Forge_UpdateDomainLegacy_FullMethodName = "/forge.Forge/UpdateDomainLegacy" + Forge_DeleteDomainLegacy_FullMethodName = "/forge.Forge/DeleteDomainLegacy" + Forge_FindDomainLegacy_FullMethodName = "/forge.Forge/FindDomainLegacy" + Forge_CreateVpc_FullMethodName = "/forge.Forge/CreateVpc" + Forge_UpdateVpc_FullMethodName = "/forge.Forge/UpdateVpc" + Forge_UpdateVpcVirtualization_FullMethodName = "/forge.Forge/UpdateVpcVirtualization" + Forge_DeleteVpc_FullMethodName = "/forge.Forge/DeleteVpc" + Forge_FindVpcIds_FullMethodName = "/forge.Forge/FindVpcIds" + Forge_FindVpcsByIds_FullMethodName = "/forge.Forge/FindVpcsByIds" + Forge_CreateVpcPrefix_FullMethodName = "/forge.Forge/CreateVpcPrefix" + Forge_SearchVpcPrefixes_FullMethodName = "/forge.Forge/SearchVpcPrefixes" + Forge_GetVpcPrefixes_FullMethodName = "/forge.Forge/GetVpcPrefixes" + Forge_UpdateVpcPrefix_FullMethodName = "/forge.Forge/UpdateVpcPrefix" + Forge_DeleteVpcPrefix_FullMethodName = "/forge.Forge/DeleteVpcPrefix" + Forge_CreateVpcPeering_FullMethodName = "/forge.Forge/CreateVpcPeering" + Forge_FindVpcPeeringIds_FullMethodName = "/forge.Forge/FindVpcPeeringIds" + Forge_FindVpcPeeringsByIds_FullMethodName = "/forge.Forge/FindVpcPeeringsByIds" + Forge_DeleteVpcPeering_FullMethodName = "/forge.Forge/DeleteVpcPeering" + Forge_FindNetworkSegmentIds_FullMethodName = "/forge.Forge/FindNetworkSegmentIds" + Forge_FindNetworkSegmentsByIds_FullMethodName = "/forge.Forge/FindNetworkSegmentsByIds" + Forge_CreateNetworkSegment_FullMethodName = "/forge.Forge/CreateNetworkSegment" + Forge_DeleteNetworkSegment_FullMethodName = "/forge.Forge/DeleteNetworkSegment" + Forge_NetworkSegmentsForVpc_FullMethodName = "/forge.Forge/NetworkSegmentsForVpc" + Forge_FindIBPartitionIds_FullMethodName = "/forge.Forge/FindIBPartitionIds" + Forge_FindIBPartitionsByIds_FullMethodName = "/forge.Forge/FindIBPartitionsByIds" + Forge_CreateIBPartition_FullMethodName = "/forge.Forge/CreateIBPartition" + Forge_UpdateIBPartition_FullMethodName = "/forge.Forge/UpdateIBPartition" + Forge_DeleteIBPartition_FullMethodName = "/forge.Forge/DeleteIBPartition" + Forge_IBPartitionsForTenant_FullMethodName = "/forge.Forge/IBPartitionsForTenant" + Forge_FindPowerShelves_FullMethodName = "/forge.Forge/FindPowerShelves" + Forge_FindPowerShelfIds_FullMethodName = "/forge.Forge/FindPowerShelfIds" + Forge_FindPowerShelvesByIds_FullMethodName = "/forge.Forge/FindPowerShelvesByIds" + Forge_DeletePowerShelf_FullMethodName = "/forge.Forge/DeletePowerShelf" + Forge_AdminForceDeletePowerShelf_FullMethodName = "/forge.Forge/AdminForceDeletePowerShelf" + Forge_FindSwitches_FullMethodName = "/forge.Forge/FindSwitches" + Forge_FindSwitchIds_FullMethodName = "/forge.Forge/FindSwitchIds" + Forge_FindSwitchesByIds_FullMethodName = "/forge.Forge/FindSwitchesByIds" + Forge_DeleteSwitch_FullMethodName = "/forge.Forge/DeleteSwitch" + Forge_AdminForceDeleteSwitch_FullMethodName = "/forge.Forge/AdminForceDeleteSwitch" + Forge_FindIBFabricIds_FullMethodName = "/forge.Forge/FindIBFabricIds" + Forge_AllocateInstance_FullMethodName = "/forge.Forge/AllocateInstance" + Forge_AllocateInstances_FullMethodName = "/forge.Forge/AllocateInstances" + Forge_ReleaseInstance_FullMethodName = "/forge.Forge/ReleaseInstance" + Forge_UpdateInstanceOperatingSystem_FullMethodName = "/forge.Forge/UpdateInstanceOperatingSystem" + Forge_UpdateInstanceConfig_FullMethodName = "/forge.Forge/UpdateInstanceConfig" + Forge_FindInstanceIds_FullMethodName = "/forge.Forge/FindInstanceIds" + Forge_FindInstancesByIds_FullMethodName = "/forge.Forge/FindInstancesByIds" + Forge_FindInstanceByMachineID_FullMethodName = "/forge.Forge/FindInstanceByMachineID" + Forge_GetManagedHostNetworkConfig_FullMethodName = "/forge.Forge/GetManagedHostNetworkConfig" + Forge_RecordDpuNetworkStatus_FullMethodName = "/forge.Forge/RecordDpuNetworkStatus" + Forge_ListHealthReportOverrides_FullMethodName = "/forge.Forge/ListHealthReportOverrides" + Forge_InsertHealthReportOverride_FullMethodName = "/forge.Forge/InsertHealthReportOverride" + Forge_RemoveHealthReportOverride_FullMethodName = "/forge.Forge/RemoveHealthReportOverride" + Forge_ListRackHealthReportOverrides_FullMethodName = "/forge.Forge/ListRackHealthReportOverrides" + Forge_InsertRackHealthReportOverride_FullMethodName = "/forge.Forge/InsertRackHealthReportOverride" + Forge_RemoveRackHealthReportOverride_FullMethodName = "/forge.Forge/RemoveRackHealthReportOverride" + Forge_DpuAgentUpgradeCheck_FullMethodName = "/forge.Forge/DpuAgentUpgradeCheck" + Forge_DpuAgentUpgradePolicyAction_FullMethodName = "/forge.Forge/DpuAgentUpgradePolicyAction" + Forge_LookupRecord_FullMethodName = "/forge.Forge/LookupRecord" + Forge_LookupRecordLegacy_FullMethodName = "/forge.Forge/LookupRecordLegacy" + Forge_GetAllDomains_FullMethodName = "/forge.Forge/GetAllDomains" + Forge_GetAllDomainMetadata_FullMethodName = "/forge.Forge/GetAllDomainMetadata" + Forge_InvokeInstancePower_FullMethodName = "/forge.Forge/InvokeInstancePower" + Forge_ForgeAgentControl_FullMethodName = "/forge.Forge/ForgeAgentControl" + Forge_DiscoverMachine_FullMethodName = "/forge.Forge/DiscoverMachine" + Forge_RenewMachineCertificate_FullMethodName = "/forge.Forge/RenewMachineCertificate" + Forge_DiscoveryCompleted_FullMethodName = "/forge.Forge/DiscoveryCompleted" + Forge_CleanupMachineCompleted_FullMethodName = "/forge.Forge/CleanupMachineCompleted" + Forge_ReportForgeScoutError_FullMethodName = "/forge.Forge/ReportForgeScoutError" + Forge_DiscoverDhcp_FullMethodName = "/forge.Forge/DiscoverDhcp" + Forge_ExpireDhcpLease_FullMethodName = "/forge.Forge/ExpireDhcpLease" + Forge_AssignStaticAddress_FullMethodName = "/forge.Forge/AssignStaticAddress" + Forge_RemoveStaticAddress_FullMethodName = "/forge.Forge/RemoveStaticAddress" + Forge_FindInterfaceAddresses_FullMethodName = "/forge.Forge/FindInterfaceAddresses" + Forge_FindInterfaces_FullMethodName = "/forge.Forge/FindInterfaces" + Forge_DeleteInterface_FullMethodName = "/forge.Forge/DeleteInterface" + Forge_FindIpAddress_FullMethodName = "/forge.Forge/FindIpAddress" + Forge_FindMachineIds_FullMethodName = "/forge.Forge/FindMachineIds" + Forge_FindMachinesByIds_FullMethodName = "/forge.Forge/FindMachinesByIds" + Forge_FindMachineStateHistories_FullMethodName = "/forge.Forge/FindMachineStateHistories" + Forge_FindMachineHealthHistories_FullMethodName = "/forge.Forge/FindMachineHealthHistories" + Forge_FindPowerShelfStateHistories_FullMethodName = "/forge.Forge/FindPowerShelfStateHistories" + Forge_FindRackStateHistories_FullMethodName = "/forge.Forge/FindRackStateHistories" + Forge_FindSwitchStateHistories_FullMethodName = "/forge.Forge/FindSwitchStateHistories" + Forge_FindTenantOrganizationIds_FullMethodName = "/forge.Forge/FindTenantOrganizationIds" + Forge_FindTenantsByOrganizationIds_FullMethodName = "/forge.Forge/FindTenantsByOrganizationIds" + Forge_FindConnectedDevicesByDpuMachineIds_FullMethodName = "/forge.Forge/FindConnectedDevicesByDpuMachineIds" + Forge_FindMachineIdsByBmcIps_FullMethodName = "/forge.Forge/FindMachineIdsByBmcIps" + Forge_FindMacAddressByBmcIp_FullMethodName = "/forge.Forge/FindMacAddressByBmcIp" + Forge_IdentifyUuid_FullMethodName = "/forge.Forge/IdentifyUuid" + Forge_IdentifyMac_FullMethodName = "/forge.Forge/IdentifyMac" + Forge_IdentifySerial_FullMethodName = "/forge.Forge/IdentifySerial" + Forge_GetBMCMetaData_FullMethodName = "/forge.Forge/GetBMCMetaData" + Forge_UpdateMachineCredentials_FullMethodName = "/forge.Forge/UpdateMachineCredentials" + Forge_GetPxeInstructions_FullMethodName = "/forge.Forge/GetPxeInstructions" + Forge_GetCloudInitInstructions_FullMethodName = "/forge.Forge/GetCloudInitInstructions" + Forge_Echo_FullMethodName = "/forge.Forge/Echo" + Forge_CreateTenant_FullMethodName = "/forge.Forge/CreateTenant" + Forge_FindTenant_FullMethodName = "/forge.Forge/FindTenant" + Forge_UpdateTenant_FullMethodName = "/forge.Forge/UpdateTenant" + Forge_CreateTenantKeyset_FullMethodName = "/forge.Forge/CreateTenantKeyset" + Forge_FindTenantKeysetIds_FullMethodName = "/forge.Forge/FindTenantKeysetIds" + Forge_FindTenantKeysetsByIds_FullMethodName = "/forge.Forge/FindTenantKeysetsByIds" + Forge_UpdateTenantKeyset_FullMethodName = "/forge.Forge/UpdateTenantKeyset" + Forge_DeleteTenantKeyset_FullMethodName = "/forge.Forge/DeleteTenantKeyset" + Forge_ValidateTenantPublicKey_FullMethodName = "/forge.Forge/ValidateTenantPublicKey" + Forge_GetBmcCredentials_FullMethodName = "/forge.Forge/GetBmcCredentials" + Forge_GetAllManagedHostNetworkStatus_FullMethodName = "/forge.Forge/GetAllManagedHostNetworkStatus" + Forge_GetSiteExplorationReport_FullMethodName = "/forge.Forge/GetSiteExplorationReport" + Forge_ClearSiteExplorationError_FullMethodName = "/forge.Forge/ClearSiteExplorationError" + Forge_IsBmcInManagedHost_FullMethodName = "/forge.Forge/IsBmcInManagedHost" + Forge_BmcCredentialStatus_FullMethodName = "/forge.Forge/BmcCredentialStatus" + Forge_Explore_FullMethodName = "/forge.Forge/Explore" + Forge_ReExploreEndpoint_FullMethodName = "/forge.Forge/ReExploreEndpoint" + Forge_DeleteExploredEndpoint_FullMethodName = "/forge.Forge/DeleteExploredEndpoint" + Forge_PauseExploredEndpointRemediation_FullMethodName = "/forge.Forge/PauseExploredEndpointRemediation" + Forge_FindExploredEndpointIds_FullMethodName = "/forge.Forge/FindExploredEndpointIds" + Forge_FindExploredEndpointsByIds_FullMethodName = "/forge.Forge/FindExploredEndpointsByIds" + Forge_FindExploredManagedHostIds_FullMethodName = "/forge.Forge/FindExploredManagedHostIds" + Forge_FindExploredManagedHostsByIds_FullMethodName = "/forge.Forge/FindExploredManagedHostsByIds" + Forge_UpdateMachineHardwareInfo_FullMethodName = "/forge.Forge/UpdateMachineHardwareInfo" + Forge_AdminForceDeleteMachine_FullMethodName = "/forge.Forge/AdminForceDeleteMachine" + Forge_AdminListResourcePools_FullMethodName = "/forge.Forge/AdminListResourcePools" + Forge_AdminGrowResourcePool_FullMethodName = "/forge.Forge/AdminGrowResourcePool" + Forge_UpdateMachineMetadata_FullMethodName = "/forge.Forge/UpdateMachineMetadata" + Forge_UpdateRackMetadata_FullMethodName = "/forge.Forge/UpdateRackMetadata" + Forge_UpdateSwitchMetadata_FullMethodName = "/forge.Forge/UpdateSwitchMetadata" + Forge_UpdatePowerShelfMetadata_FullMethodName = "/forge.Forge/UpdatePowerShelfMetadata" + Forge_UpdateMachineNvLinkInfo_FullMethodName = "/forge.Forge/UpdateMachineNvLinkInfo" + Forge_SetMaintenance_FullMethodName = "/forge.Forge/SetMaintenance" + Forge_SetDynamicConfig_FullMethodName = "/forge.Forge/SetDynamicConfig" + Forge_TriggerDpuReprovisioning_FullMethodName = "/forge.Forge/TriggerDpuReprovisioning" + Forge_ListDpuWaitingForReprovisioning_FullMethodName = "/forge.Forge/ListDpuWaitingForReprovisioning" + Forge_TriggerHostReprovisioning_FullMethodName = "/forge.Forge/TriggerHostReprovisioning" + Forge_ListHostsWaitingForReprovisioning_FullMethodName = "/forge.Forge/ListHostsWaitingForReprovisioning" + Forge_MarkManualFirmwareUpgradeComplete_FullMethodName = "/forge.Forge/MarkManualFirmwareUpgradeComplete" + Forge_GetDpuInfoList_FullMethodName = "/forge.Forge/GetDpuInfoList" + Forge_GetMachineBootOverride_FullMethodName = "/forge.Forge/GetMachineBootOverride" + Forge_SetMachineBootOverride_FullMethodName = "/forge.Forge/SetMachineBootOverride" + Forge_ClearMachineBootOverride_FullMethodName = "/forge.Forge/ClearMachineBootOverride" + Forge_GetNetworkTopology_FullMethodName = "/forge.Forge/GetNetworkTopology" + Forge_FindNetworkDevicesByDeviceIds_FullMethodName = "/forge.Forge/FindNetworkDevicesByDeviceIds" + Forge_CreateCredential_FullMethodName = "/forge.Forge/CreateCredential" + Forge_DeleteCredential_FullMethodName = "/forge.Forge/DeleteCredential" + Forge_GetRouteServers_FullMethodName = "/forge.Forge/GetRouteServers" + Forge_AddRouteServers_FullMethodName = "/forge.Forge/AddRouteServers" + Forge_RemoveRouteServers_FullMethodName = "/forge.Forge/RemoveRouteServers" + Forge_ReplaceRouteServers_FullMethodName = "/forge.Forge/ReplaceRouteServers" + Forge_UpdateAgentReportedInventory_FullMethodName = "/forge.Forge/UpdateAgentReportedInventory" + Forge_UpdateInstancePhoneHomeLastContact_FullMethodName = "/forge.Forge/UpdateInstancePhoneHomeLastContact" + Forge_SetHostUefiPassword_FullMethodName = "/forge.Forge/SetHostUefiPassword" + Forge_ClearHostUefiPassword_FullMethodName = "/forge.Forge/ClearHostUefiPassword" + Forge_AddExpectedMachine_FullMethodName = "/forge.Forge/AddExpectedMachine" + Forge_DeleteExpectedMachine_FullMethodName = "/forge.Forge/DeleteExpectedMachine" + Forge_UpdateExpectedMachine_FullMethodName = "/forge.Forge/UpdateExpectedMachine" + Forge_GetExpectedMachine_FullMethodName = "/forge.Forge/GetExpectedMachine" + Forge_GetAllExpectedMachines_FullMethodName = "/forge.Forge/GetAllExpectedMachines" + Forge_CreateRackFirmware_FullMethodName = "/forge.Forge/CreateRackFirmware" + Forge_GetRackFirmware_FullMethodName = "/forge.Forge/GetRackFirmware" + Forge_ListRackFirmware_FullMethodName = "/forge.Forge/ListRackFirmware" + Forge_DeleteRackFirmware_FullMethodName = "/forge.Forge/DeleteRackFirmware" + Forge_ApplyRackFirmware_FullMethodName = "/forge.Forge/ApplyRackFirmware" + Forge_GetRackFirmwareJobStatus_FullMethodName = "/forge.Forge/GetRackFirmwareJobStatus" + Forge_GetRackFirmwareHistory_FullMethodName = "/forge.Forge/GetRackFirmwareHistory" + Forge_ReplaceAllExpectedMachines_FullMethodName = "/forge.Forge/ReplaceAllExpectedMachines" + Forge_DeleteAllExpectedMachines_FullMethodName = "/forge.Forge/DeleteAllExpectedMachines" + Forge_GetAllExpectedMachinesLinked_FullMethodName = "/forge.Forge/GetAllExpectedMachinesLinked" + Forge_CreateExpectedMachines_FullMethodName = "/forge.Forge/CreateExpectedMachines" + Forge_UpdateExpectedMachines_FullMethodName = "/forge.Forge/UpdateExpectedMachines" + Forge_AddExpectedPowerShelf_FullMethodName = "/forge.Forge/AddExpectedPowerShelf" + Forge_DeleteExpectedPowerShelf_FullMethodName = "/forge.Forge/DeleteExpectedPowerShelf" + Forge_UpdateExpectedPowerShelf_FullMethodName = "/forge.Forge/UpdateExpectedPowerShelf" + Forge_GetExpectedPowerShelf_FullMethodName = "/forge.Forge/GetExpectedPowerShelf" + Forge_GetAllExpectedPowerShelves_FullMethodName = "/forge.Forge/GetAllExpectedPowerShelves" + Forge_ReplaceAllExpectedPowerShelves_FullMethodName = "/forge.Forge/ReplaceAllExpectedPowerShelves" + Forge_DeleteAllExpectedPowerShelves_FullMethodName = "/forge.Forge/DeleteAllExpectedPowerShelves" + Forge_GetAllExpectedPowerShelvesLinked_FullMethodName = "/forge.Forge/GetAllExpectedPowerShelvesLinked" + Forge_AddExpectedSwitch_FullMethodName = "/forge.Forge/AddExpectedSwitch" + Forge_DeleteExpectedSwitch_FullMethodName = "/forge.Forge/DeleteExpectedSwitch" + Forge_UpdateExpectedSwitch_FullMethodName = "/forge.Forge/UpdateExpectedSwitch" + Forge_GetExpectedSwitch_FullMethodName = "/forge.Forge/GetExpectedSwitch" + Forge_GetAllExpectedSwitches_FullMethodName = "/forge.Forge/GetAllExpectedSwitches" + Forge_ReplaceAllExpectedSwitches_FullMethodName = "/forge.Forge/ReplaceAllExpectedSwitches" + Forge_DeleteAllExpectedSwitches_FullMethodName = "/forge.Forge/DeleteAllExpectedSwitches" + Forge_GetAllExpectedSwitchesLinked_FullMethodName = "/forge.Forge/GetAllExpectedSwitchesLinked" + Forge_AddExpectedRack_FullMethodName = "/forge.Forge/AddExpectedRack" + Forge_DeleteExpectedRack_FullMethodName = "/forge.Forge/DeleteExpectedRack" + Forge_UpdateExpectedRack_FullMethodName = "/forge.Forge/UpdateExpectedRack" + Forge_GetExpectedRack_FullMethodName = "/forge.Forge/GetExpectedRack" + Forge_GetAllExpectedRacks_FullMethodName = "/forge.Forge/GetAllExpectedRacks" + Forge_ReplaceAllExpectedRacks_FullMethodName = "/forge.Forge/ReplaceAllExpectedRacks" + Forge_DeleteAllExpectedRacks_FullMethodName = "/forge.Forge/DeleteAllExpectedRacks" + Forge_AttestQuote_FullMethodName = "/forge.Forge/AttestQuote" + Forge_CreateInstanceType_FullMethodName = "/forge.Forge/CreateInstanceType" + Forge_FindInstanceTypeIds_FullMethodName = "/forge.Forge/FindInstanceTypeIds" + Forge_FindInstanceTypesByIds_FullMethodName = "/forge.Forge/FindInstanceTypesByIds" + Forge_UpdateInstanceType_FullMethodName = "/forge.Forge/UpdateInstanceType" + Forge_DeleteInstanceType_FullMethodName = "/forge.Forge/DeleteInstanceType" + Forge_AssociateMachinesWithInstanceType_FullMethodName = "/forge.Forge/AssociateMachinesWithInstanceType" + Forge_RemoveMachineInstanceTypeAssociation_FullMethodName = "/forge.Forge/RemoveMachineInstanceTypeAssociation" + Forge_CreateMeasurementBundle_FullMethodName = "/forge.Forge/CreateMeasurementBundle" + Forge_DeleteMeasurementBundle_FullMethodName = "/forge.Forge/DeleteMeasurementBundle" + Forge_RenameMeasurementBundle_FullMethodName = "/forge.Forge/RenameMeasurementBundle" + Forge_UpdateMeasurementBundle_FullMethodName = "/forge.Forge/UpdateMeasurementBundle" + Forge_ShowMeasurementBundle_FullMethodName = "/forge.Forge/ShowMeasurementBundle" + Forge_ShowMeasurementBundles_FullMethodName = "/forge.Forge/ShowMeasurementBundles" + Forge_ListMeasurementBundles_FullMethodName = "/forge.Forge/ListMeasurementBundles" + Forge_ListMeasurementBundleMachines_FullMethodName = "/forge.Forge/ListMeasurementBundleMachines" + Forge_FindClosestBundleMatch_FullMethodName = "/forge.Forge/FindClosestBundleMatch" + Forge_DeleteMeasurementJournal_FullMethodName = "/forge.Forge/DeleteMeasurementJournal" + Forge_ShowMeasurementJournal_FullMethodName = "/forge.Forge/ShowMeasurementJournal" + Forge_ShowMeasurementJournals_FullMethodName = "/forge.Forge/ShowMeasurementJournals" + Forge_ListMeasurementJournal_FullMethodName = "/forge.Forge/ListMeasurementJournal" + Forge_AttestCandidateMachine_FullMethodName = "/forge.Forge/AttestCandidateMachine" + Forge_ShowCandidateMachine_FullMethodName = "/forge.Forge/ShowCandidateMachine" + Forge_ShowCandidateMachines_FullMethodName = "/forge.Forge/ShowCandidateMachines" + Forge_ListCandidateMachines_FullMethodName = "/forge.Forge/ListCandidateMachines" + Forge_CreateMeasurementSystemProfile_FullMethodName = "/forge.Forge/CreateMeasurementSystemProfile" + Forge_DeleteMeasurementSystemProfile_FullMethodName = "/forge.Forge/DeleteMeasurementSystemProfile" + Forge_RenameMeasurementSystemProfile_FullMethodName = "/forge.Forge/RenameMeasurementSystemProfile" + Forge_ShowMeasurementSystemProfile_FullMethodName = "/forge.Forge/ShowMeasurementSystemProfile" + Forge_ShowMeasurementSystemProfiles_FullMethodName = "/forge.Forge/ShowMeasurementSystemProfiles" + Forge_ListMeasurementSystemProfiles_FullMethodName = "/forge.Forge/ListMeasurementSystemProfiles" + Forge_ListMeasurementSystemProfileBundles_FullMethodName = "/forge.Forge/ListMeasurementSystemProfileBundles" + Forge_ListMeasurementSystemProfileMachines_FullMethodName = "/forge.Forge/ListMeasurementSystemProfileMachines" + Forge_CreateMeasurementReport_FullMethodName = "/forge.Forge/CreateMeasurementReport" + Forge_DeleteMeasurementReport_FullMethodName = "/forge.Forge/DeleteMeasurementReport" + Forge_PromoteMeasurementReport_FullMethodName = "/forge.Forge/PromoteMeasurementReport" + Forge_RevokeMeasurementReport_FullMethodName = "/forge.Forge/RevokeMeasurementReport" + Forge_ShowMeasurementReportForId_FullMethodName = "/forge.Forge/ShowMeasurementReportForId" + Forge_ShowMeasurementReportsForMachine_FullMethodName = "/forge.Forge/ShowMeasurementReportsForMachine" + Forge_ShowMeasurementReports_FullMethodName = "/forge.Forge/ShowMeasurementReports" + Forge_ListMeasurementReport_FullMethodName = "/forge.Forge/ListMeasurementReport" + Forge_MatchMeasurementReport_FullMethodName = "/forge.Forge/MatchMeasurementReport" + Forge_ImportSiteMeasurements_FullMethodName = "/forge.Forge/ImportSiteMeasurements" + Forge_ExportSiteMeasurements_FullMethodName = "/forge.Forge/ExportSiteMeasurements" + Forge_AddMeasurementTrustedMachine_FullMethodName = "/forge.Forge/AddMeasurementTrustedMachine" + Forge_RemoveMeasurementTrustedMachine_FullMethodName = "/forge.Forge/RemoveMeasurementTrustedMachine" + Forge_AddMeasurementTrustedProfile_FullMethodName = "/forge.Forge/AddMeasurementTrustedProfile" + Forge_RemoveMeasurementTrustedProfile_FullMethodName = "/forge.Forge/RemoveMeasurementTrustedProfile" + Forge_ListMeasurementTrustedMachines_FullMethodName = "/forge.Forge/ListMeasurementTrustedMachines" + Forge_ListMeasurementTrustedProfiles_FullMethodName = "/forge.Forge/ListMeasurementTrustedProfiles" + Forge_ListAttestationSummary_FullMethodName = "/forge.Forge/ListAttestationSummary" + Forge_CreateNetworkSecurityGroup_FullMethodName = "/forge.Forge/CreateNetworkSecurityGroup" + Forge_FindNetworkSecurityGroupIds_FullMethodName = "/forge.Forge/FindNetworkSecurityGroupIds" + Forge_FindNetworkSecurityGroupsByIds_FullMethodName = "/forge.Forge/FindNetworkSecurityGroupsByIds" + Forge_UpdateNetworkSecurityGroup_FullMethodName = "/forge.Forge/UpdateNetworkSecurityGroup" + Forge_DeleteNetworkSecurityGroup_FullMethodName = "/forge.Forge/DeleteNetworkSecurityGroup" + Forge_GetNetworkSecurityGroupPropagationStatus_FullMethodName = "/forge.Forge/GetNetworkSecurityGroupPropagationStatus" + Forge_GetNetworkSecurityGroupAttachments_FullMethodName = "/forge.Forge/GetNetworkSecurityGroupAttachments" + Forge_CreateOsImage_FullMethodName = "/forge.Forge/CreateOsImage" + Forge_DeleteOsImage_FullMethodName = "/forge.Forge/DeleteOsImage" + Forge_ListOsImage_FullMethodName = "/forge.Forge/ListOsImage" + Forge_GetOsImage_FullMethodName = "/forge.Forge/GetOsImage" + Forge_UpdateOsImage_FullMethodName = "/forge.Forge/UpdateOsImage" + Forge_GetIpxeTemplate_FullMethodName = "/forge.Forge/GetIpxeTemplate" + Forge_ListIpxeTemplates_FullMethodName = "/forge.Forge/ListIpxeTemplates" + Forge_RebootCompleted_FullMethodName = "/forge.Forge/RebootCompleted" + Forge_PersistValidationResult_FullMethodName = "/forge.Forge/PersistValidationResult" + Forge_GetMachineValidationResults_FullMethodName = "/forge.Forge/GetMachineValidationResults" + Forge_MachineValidationCompleted_FullMethodName = "/forge.Forge/MachineValidationCompleted" + Forge_MachineSetAutoUpdate_FullMethodName = "/forge.Forge/MachineSetAutoUpdate" + Forge_GetMachineValidationExternalConfig_FullMethodName = "/forge.Forge/GetMachineValidationExternalConfig" + Forge_GetMachineValidationExternalConfigs_FullMethodName = "/forge.Forge/GetMachineValidationExternalConfigs" + Forge_AddUpdateMachineValidationExternalConfig_FullMethodName = "/forge.Forge/AddUpdateMachineValidationExternalConfig" + Forge_GetMachineValidationRuns_FullMethodName = "/forge.Forge/GetMachineValidationRuns" + Forge_RemoveMachineValidationExternalConfig_FullMethodName = "/forge.Forge/RemoveMachineValidationExternalConfig" + Forge_GetMachineValidationTests_FullMethodName = "/forge.Forge/GetMachineValidationTests" + Forge_AddMachineValidationTest_FullMethodName = "/forge.Forge/AddMachineValidationTest" + Forge_UpdateMachineValidationTest_FullMethodName = "/forge.Forge/UpdateMachineValidationTest" + Forge_MachineValidationTestVerfied_FullMethodName = "/forge.Forge/MachineValidationTestVerfied" + Forge_MachineValidationTestNextVersion_FullMethodName = "/forge.Forge/MachineValidationTestNextVersion" + Forge_MachineValidationTestEnableDisableTest_FullMethodName = "/forge.Forge/MachineValidationTestEnableDisableTest" + Forge_UpdateMachineValidationRun_FullMethodName = "/forge.Forge/UpdateMachineValidationRun" + Forge_AdminBmcReset_FullMethodName = "/forge.Forge/AdminBmcReset" + Forge_AdminPowerControl_FullMethodName = "/forge.Forge/AdminPowerControl" + Forge_DisableSecureBoot_FullMethodName = "/forge.Forge/DisableSecureBoot" + Forge_Lockdown_FullMethodName = "/forge.Forge/Lockdown" + Forge_LockdownStatus_FullMethodName = "/forge.Forge/LockdownStatus" + Forge_MachineSetup_FullMethodName = "/forge.Forge/MachineSetup" + Forge_SetDpuFirstBootOrder_FullMethodName = "/forge.Forge/SetDpuFirstBootOrder" + Forge_CreateBmcUser_FullMethodName = "/forge.Forge/CreateBmcUser" + Forge_DeleteBmcUser_FullMethodName = "/forge.Forge/DeleteBmcUser" + Forge_EnableInfiniteBoot_FullMethodName = "/forge.Forge/EnableInfiniteBoot" + Forge_IsInfiniteBootEnabled_FullMethodName = "/forge.Forge/IsInfiniteBootEnabled" + Forge_OnDemandMachineValidation_FullMethodName = "/forge.Forge/OnDemandMachineValidation" + Forge_TpmAddCaCert_FullMethodName = "/forge.Forge/TpmAddCaCert" + Forge_TpmShowCaCerts_FullMethodName = "/forge.Forge/TpmShowCaCerts" + Forge_TpmShowUnmatchedEkCerts_FullMethodName = "/forge.Forge/TpmShowUnmatchedEkCerts" + Forge_TpmDeleteCaCert_FullMethodName = "/forge.Forge/TpmDeleteCaCert" + Forge_RedfishBrowse_FullMethodName = "/forge.Forge/RedfishBrowse" + Forge_RedfishListActions_FullMethodName = "/forge.Forge/RedfishListActions" + Forge_RedfishCreateAction_FullMethodName = "/forge.Forge/RedfishCreateAction" + Forge_RedfishApproveAction_FullMethodName = "/forge.Forge/RedfishApproveAction" + Forge_RedfishApplyAction_FullMethodName = "/forge.Forge/RedfishApplyAction" + Forge_RedfishCancelAction_FullMethodName = "/forge.Forge/RedfishCancelAction" + Forge_UfmBrowse_FullMethodName = "/forge.Forge/UfmBrowse" + Forge_GetDesiredFirmwareVersions_FullMethodName = "/forge.Forge/GetDesiredFirmwareVersions" + Forge_CreateSku_FullMethodName = "/forge.Forge/CreateSku" + Forge_GenerateSkuFromMachine_FullMethodName = "/forge.Forge/GenerateSkuFromMachine" + Forge_VerifySkuForMachine_FullMethodName = "/forge.Forge/VerifySkuForMachine" + Forge_AssignSkuToMachine_FullMethodName = "/forge.Forge/AssignSkuToMachine" + Forge_RemoveSkuAssociation_FullMethodName = "/forge.Forge/RemoveSkuAssociation" + Forge_DeleteSku_FullMethodName = "/forge.Forge/DeleteSku" + Forge_GetAllSkuIds_FullMethodName = "/forge.Forge/GetAllSkuIds" + Forge_FindSkusByIds_FullMethodName = "/forge.Forge/FindSkusByIds" + Forge_UpdateSkuMetadata_FullMethodName = "/forge.Forge/UpdateSkuMetadata" + Forge_ReplaceSku_FullMethodName = "/forge.Forge/ReplaceSku" + Forge_GetManagedHostQuarantineState_FullMethodName = "/forge.Forge/GetManagedHostQuarantineState" + Forge_SetManagedHostQuarantineState_FullMethodName = "/forge.Forge/SetManagedHostQuarantineState" + Forge_ClearManagedHostQuarantineState_FullMethodName = "/forge.Forge/ClearManagedHostQuarantineState" + Forge_ResetHostReprovisioning_FullMethodName = "/forge.Forge/ResetHostReprovisioning" + Forge_CopyBfbToDpuRshim_FullMethodName = "/forge.Forge/CopyBfbToDpuRshim" + Forge_GetAllDpaInterfaceIds_FullMethodName = "/forge.Forge/GetAllDpaInterfaceIds" + Forge_FindDpaInterfacesByIds_FullMethodName = "/forge.Forge/FindDpaInterfacesByIds" + Forge_CreateDpaInterface_FullMethodName = "/forge.Forge/CreateDpaInterface" + Forge_EnsureDpaInterface_FullMethodName = "/forge.Forge/EnsureDpaInterface" + Forge_DeleteDpaInterface_FullMethodName = "/forge.Forge/DeleteDpaInterface" + Forge_SetDpaNetworkObservationStatus_FullMethodName = "/forge.Forge/SetDpaNetworkObservationStatus" + Forge_GetPowerOptions_FullMethodName = "/forge.Forge/GetPowerOptions" + Forge_UpdatePowerOption_FullMethodName = "/forge.Forge/UpdatePowerOption" + Forge_AllowIngestionAndPowerOn_FullMethodName = "/forge.Forge/AllowIngestionAndPowerOn" + Forge_DetermineMachineIngestionState_FullMethodName = "/forge.Forge/DetermineMachineIngestionState" + Forge_FindRackIds_FullMethodName = "/forge.Forge/FindRackIds" + Forge_FindRacksByIds_FullMethodName = "/forge.Forge/FindRacksByIds" + Forge_GetRack_FullMethodName = "/forge.Forge/GetRack" + Forge_DeleteRack_FullMethodName = "/forge.Forge/DeleteRack" + Forge_GetRackCapabilities_FullMethodName = "/forge.Forge/GetRackCapabilities" + Forge_CreateComputeAllocation_FullMethodName = "/forge.Forge/CreateComputeAllocation" + Forge_FindComputeAllocationIds_FullMethodName = "/forge.Forge/FindComputeAllocationIds" + Forge_FindComputeAllocationsByIds_FullMethodName = "/forge.Forge/FindComputeAllocationsByIds" + Forge_UpdateComputeAllocation_FullMethodName = "/forge.Forge/UpdateComputeAllocation" + Forge_DeleteComputeAllocation_FullMethodName = "/forge.Forge/DeleteComputeAllocation" + Forge_SetFirmwareUpdateTimeWindow_FullMethodName = "/forge.Forge/SetFirmwareUpdateTimeWindow" + Forge_ListHostFirmware_FullMethodName = "/forge.Forge/ListHostFirmware" + Forge_PublishMlxDeviceReport_FullMethodName = "/forge.Forge/PublishMlxDeviceReport" + Forge_PublishMlxObservationReport_FullMethodName = "/forge.Forge/PublishMlxObservationReport" + Forge_TrimTable_FullMethodName = "/forge.Forge/TrimTable" + Forge_CreateRemediation_FullMethodName = "/forge.Forge/CreateRemediation" + Forge_ApproveRemediation_FullMethodName = "/forge.Forge/ApproveRemediation" + Forge_RevokeRemediation_FullMethodName = "/forge.Forge/RevokeRemediation" + Forge_EnableRemediation_FullMethodName = "/forge.Forge/EnableRemediation" + Forge_DisableRemediation_FullMethodName = "/forge.Forge/DisableRemediation" + Forge_FindRemediationIds_FullMethodName = "/forge.Forge/FindRemediationIds" + Forge_FindRemediationsByIds_FullMethodName = "/forge.Forge/FindRemediationsByIds" + Forge_FindAppliedRemediationIds_FullMethodName = "/forge.Forge/FindAppliedRemediationIds" + Forge_FindAppliedRemediations_FullMethodName = "/forge.Forge/FindAppliedRemediations" + Forge_GetNextRemediationForMachine_FullMethodName = "/forge.Forge/GetNextRemediationForMachine" + Forge_RemediationApplied_FullMethodName = "/forge.Forge/RemediationApplied" + Forge_SetPrimaryDpu_FullMethodName = "/forge.Forge/SetPrimaryDpu" + Forge_CreateDpuExtensionService_FullMethodName = "/forge.Forge/CreateDpuExtensionService" + Forge_UpdateDpuExtensionService_FullMethodName = "/forge.Forge/UpdateDpuExtensionService" + Forge_DeleteDpuExtensionService_FullMethodName = "/forge.Forge/DeleteDpuExtensionService" + Forge_FindDpuExtensionServiceIds_FullMethodName = "/forge.Forge/FindDpuExtensionServiceIds" + Forge_FindDpuExtensionServicesByIds_FullMethodName = "/forge.Forge/FindDpuExtensionServicesByIds" + Forge_GetDpuExtensionServiceVersionsInfo_FullMethodName = "/forge.Forge/GetDpuExtensionServiceVersionsInfo" + Forge_FindInstancesByDpuExtensionService_FullMethodName = "/forge.Forge/FindInstancesByDpuExtensionService" + Forge_TriggerMachineAttestation_FullMethodName = "/forge.Forge/TriggerMachineAttestation" + Forge_CancelMachineAttestation_FullMethodName = "/forge.Forge/CancelMachineAttestation" + Forge_FindMachineIdsUnderAttestation_FullMethodName = "/forge.Forge/FindMachineIdsUnderAttestation" + Forge_FindMachinesUnderAttestation_FullMethodName = "/forge.Forge/FindMachinesUnderAttestation" + Forge_SignMachineIdentity_FullMethodName = "/forge.Forge/SignMachineIdentity" + Forge_GetIdentityConfiguration_FullMethodName = "/forge.Forge/GetIdentityConfiguration" + Forge_SetIdentityConfiguration_FullMethodName = "/forge.Forge/SetIdentityConfiguration" + Forge_DeleteIdentityConfiguration_FullMethodName = "/forge.Forge/DeleteIdentityConfiguration" + Forge_GetTokenDelegation_FullMethodName = "/forge.Forge/GetTokenDelegation" + Forge_SetTokenDelegation_FullMethodName = "/forge.Forge/SetTokenDelegation" + Forge_DeleteTokenDelegation_FullMethodName = "/forge.Forge/DeleteTokenDelegation" + Forge_GetJWKS_FullMethodName = "/forge.Forge/GetJWKS" + Forge_GetOpenIDConfiguration_FullMethodName = "/forge.Forge/GetOpenIDConfiguration" + Forge_ScoutStream_FullMethodName = "/forge.Forge/ScoutStream" + Forge_ScoutStreamShowConnections_FullMethodName = "/forge.Forge/ScoutStreamShowConnections" + Forge_ScoutStreamDisconnect_FullMethodName = "/forge.Forge/ScoutStreamDisconnect" + Forge_ScoutStreamPing_FullMethodName = "/forge.Forge/ScoutStreamPing" + Forge_MlxAdminProfileSync_FullMethodName = "/forge.Forge/MlxAdminProfileSync" + Forge_MlxAdminProfileShow_FullMethodName = "/forge.Forge/MlxAdminProfileShow" + Forge_MlxAdminProfileCompare_FullMethodName = "/forge.Forge/MlxAdminProfileCompare" + Forge_MlxAdminProfileList_FullMethodName = "/forge.Forge/MlxAdminProfileList" + Forge_MlxAdminLockdownLock_FullMethodName = "/forge.Forge/MlxAdminLockdownLock" + Forge_MlxAdminLockdownUnlock_FullMethodName = "/forge.Forge/MlxAdminLockdownUnlock" + Forge_MlxAdminLockdownStatus_FullMethodName = "/forge.Forge/MlxAdminLockdownStatus" + Forge_MlxAdminShowDevice_FullMethodName = "/forge.Forge/MlxAdminShowDevice" + Forge_MlxAdminShowMachine_FullMethodName = "/forge.Forge/MlxAdminShowMachine" + Forge_MlxAdminRegistryList_FullMethodName = "/forge.Forge/MlxAdminRegistryList" + Forge_MlxAdminRegistryShow_FullMethodName = "/forge.Forge/MlxAdminRegistryShow" + Forge_MlxAdminConfigQuery_FullMethodName = "/forge.Forge/MlxAdminConfigQuery" + Forge_MlxAdminConfigSet_FullMethodName = "/forge.Forge/MlxAdminConfigSet" + Forge_MlxAdminConfigSync_FullMethodName = "/forge.Forge/MlxAdminConfigSync" + Forge_MlxAdminConfigCompare_FullMethodName = "/forge.Forge/MlxAdminConfigCompare" + Forge_FindNVLinkPartitionIds_FullMethodName = "/forge.Forge/FindNVLinkPartitionIds" + Forge_FindNVLinkPartitionsByIds_FullMethodName = "/forge.Forge/FindNVLinkPartitionsByIds" + Forge_NVLinkPartitionsForTenant_FullMethodName = "/forge.Forge/NVLinkPartitionsForTenant" + Forge_FindNVLinkLogicalPartitionIds_FullMethodName = "/forge.Forge/FindNVLinkLogicalPartitionIds" + Forge_FindNVLinkLogicalPartitionsByIds_FullMethodName = "/forge.Forge/FindNVLinkLogicalPartitionsByIds" + Forge_CreateNVLinkLogicalPartition_FullMethodName = "/forge.Forge/CreateNVLinkLogicalPartition" + Forge_UpdateNVLinkLogicalPartition_FullMethodName = "/forge.Forge/UpdateNVLinkLogicalPartition" + Forge_DeleteNVLinkLogicalPartition_FullMethodName = "/forge.Forge/DeleteNVLinkLogicalPartition" + Forge_NVLinkLogicalPartitionsForTenant_FullMethodName = "/forge.Forge/NVLinkLogicalPartitionsForTenant" + Forge_GetMachinePositionInfo_FullMethodName = "/forge.Forge/GetMachinePositionInfo" + Forge_NmxmBrowse_FullMethodName = "/forge.Forge/NmxmBrowse" + Forge_ModifyDPFState_FullMethodName = "/forge.Forge/ModifyDPFState" + Forge_GetDPFState_FullMethodName = "/forge.Forge/GetDPFState" + Forge_ComponentPowerControl_FullMethodName = "/forge.Forge/ComponentPowerControl" + Forge_GetComponentInventory_FullMethodName = "/forge.Forge/GetComponentInventory" + Forge_UpdateComponentFirmware_FullMethodName = "/forge.Forge/UpdateComponentFirmware" + Forge_GetComponentFirmwareStatus_FullMethodName = "/forge.Forge/GetComponentFirmwareStatus" + Forge_ListComponentFirmwareVersions_FullMethodName = "/forge.Forge/ListComponentFirmwareVersions" + Forge_CreateOperatingSystem_FullMethodName = "/forge.Forge/CreateOperatingSystem" + Forge_GetOperatingSystem_FullMethodName = "/forge.Forge/GetOperatingSystem" + Forge_UpdateOperatingSystem_FullMethodName = "/forge.Forge/UpdateOperatingSystem" + Forge_DeleteOperatingSystem_FullMethodName = "/forge.Forge/DeleteOperatingSystem" + Forge_FindOperatingSystemIds_FullMethodName = "/forge.Forge/FindOperatingSystemIds" + Forge_FindOperatingSystemsByIds_FullMethodName = "/forge.Forge/FindOperatingSystemsByIds" + Forge_GetOperatingSystemCachableIpxeTemplateArtifacts_FullMethodName = "/forge.Forge/GetOperatingSystemCachableIpxeTemplateArtifacts" + Forge_UpdateOperatingSystemCachableIpxeTemplateArtifacts_FullMethodName = "/forge.Forge/UpdateOperatingSystemCachableIpxeTemplateArtifacts" ) // ForgeClient is the client API for Forge service. @@ -875,6 +886,9 @@ type ForgeClient interface { ListOsImage(ctx context.Context, in *ListOsImageRequest, opts ...grpc.CallOption) (*ListOsImageResponse, error) GetOsImage(ctx context.Context, in *UUID, opts ...grpc.CallOption) (*OsImage, error) UpdateOsImage(ctx context.Context, in *OsImageAttributes, opts ...grpc.CallOption) (*OsImage, error) + // iPXE Script Template management + GetIpxeTemplate(ctx context.Context, in *GetIpxeTemplateRequest, opts ...grpc.CallOption) (*IpxeTemplate, error) + ListIpxeTemplates(ctx context.Context, in *ListIpxeTemplatesRequest, opts ...grpc.CallOption) (*IpxeTemplateList, error) RebootCompleted(ctx context.Context, in *MachineRebootCompletedRequest, opts ...grpc.CallOption) (*MachineRebootCompletedResponse, error) // Validation result Persist PersistValidationResult(ctx context.Context, in *MachineValidationResultPostRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) @@ -984,6 +998,7 @@ type ForgeClient interface { // Deprecated: Use FindRackIds GetRack(ctx context.Context, in *GetRackRequest, opts ...grpc.CallOption) (*GetRackResponse, error) DeleteRack(ctx context.Context, in *DeleteRackRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + GetRackCapabilities(ctx context.Context, in *GetRackCapabilitiesRequest, opts ...grpc.CallOption) (*GetRackCapabilitiesResponse, error) // Compute Allocations CreateComputeAllocation(ctx context.Context, in *CreateComputeAllocationRequest, opts ...grpc.CallOption) (*CreateComputeAllocationResponse, error) FindComputeAllocationIds(ctx context.Context, in *FindComputeAllocationIdsRequest, opts ...grpc.CallOption) (*FindComputeAllocationIdsResponse, error) @@ -1143,6 +1158,18 @@ type ForgeClient interface { UpdateComponentFirmware(ctx context.Context, in *UpdateComponentFirmwareRequest, opts ...grpc.CallOption) (*UpdateComponentFirmwareResponse, error) GetComponentFirmwareStatus(ctx context.Context, in *GetComponentFirmwareStatusRequest, opts ...grpc.CallOption) (*GetComponentFirmwareStatusResponse, error) ListComponentFirmwareVersions(ctx context.Context, in *ListComponentFirmwareVersionsRequest, opts ...grpc.CallOption) (*ListComponentFirmwareVersionsResponse, error) + // Operating System library + CreateOperatingSystem(ctx context.Context, in *CreateOperatingSystemRequest, opts ...grpc.CallOption) (*OperatingSystem, error) + GetOperatingSystem(ctx context.Context, in *OperatingSystemId, opts ...grpc.CallOption) (*OperatingSystem, error) + UpdateOperatingSystem(ctx context.Context, in *UpdateOperatingSystemRequest, opts ...grpc.CallOption) (*OperatingSystem, error) + DeleteOperatingSystem(ctx context.Context, in *DeleteOperatingSystemRequest, opts ...grpc.CallOption) (*DeleteOperatingSystemResponse, error) + FindOperatingSystemIds(ctx context.Context, in *OperatingSystemSearchFilter, opts ...grpc.CallOption) (*OperatingSystemIdList, error) + FindOperatingSystemsByIds(ctx context.Context, in *OperatingSystemsByIdsRequest, opts ...grpc.CallOption) (*OperatingSystemList, error) + // Returns the ordered artifact list for an OS definition without fetching the full record. + GetOperatingSystemCachableIpxeTemplateArtifacts(ctx context.Context, in *GetOperatingSystemCachableIpxeTemplateArtifactsRequest, opts ...grpc.CallOption) (*IpxeTemplateArtifactList, error) + // Updates the cached_url field of named artifacts in-place, leaving all other artifact fields + // and OS definition fields (including ipxe_definition_hash) unchanged. + UpdateOperatingSystemCachableIpxeTemplateArtifacts(ctx context.Context, in *UpdateOperatingSystemIpxeTemplateArtifactRequest, opts ...grpc.CallOption) (*IpxeTemplateArtifactList, error) } type forgeClient struct { @@ -3768,6 +3795,26 @@ func (c *forgeClient) UpdateOsImage(ctx context.Context, in *OsImageAttributes, return out, nil } +func (c *forgeClient) GetIpxeTemplate(ctx context.Context, in *GetIpxeTemplateRequest, opts ...grpc.CallOption) (*IpxeTemplate, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IpxeTemplate) + err := c.cc.Invoke(ctx, Forge_GetIpxeTemplate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *forgeClient) ListIpxeTemplates(ctx context.Context, in *ListIpxeTemplatesRequest, opts ...grpc.CallOption) (*IpxeTemplateList, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IpxeTemplateList) + err := c.cc.Invoke(ctx, Forge_ListIpxeTemplates_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *forgeClient) RebootCompleted(ctx context.Context, in *MachineRebootCompletedRequest, opts ...grpc.CallOption) (*MachineRebootCompletedResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(MachineRebootCompletedResponse) @@ -4468,6 +4515,16 @@ func (c *forgeClient) DeleteRack(ctx context.Context, in *DeleteRackRequest, opt return out, nil } +func (c *forgeClient) GetRackCapabilities(ctx context.Context, in *GetRackCapabilitiesRequest, opts ...grpc.CallOption) (*GetRackCapabilitiesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetRackCapabilitiesResponse) + err := c.cc.Invoke(ctx, Forge_GetRackCapabilities_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *forgeClient) CreateComputeAllocation(ctx context.Context, in *CreateComputeAllocationRequest, opts ...grpc.CallOption) (*CreateComputeAllocationResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateComputeAllocationResponse) @@ -5261,6 +5318,86 @@ func (c *forgeClient) ListComponentFirmwareVersions(ctx context.Context, in *Lis return out, nil } +func (c *forgeClient) CreateOperatingSystem(ctx context.Context, in *CreateOperatingSystemRequest, opts ...grpc.CallOption) (*OperatingSystem, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(OperatingSystem) + err := c.cc.Invoke(ctx, Forge_CreateOperatingSystem_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *forgeClient) GetOperatingSystem(ctx context.Context, in *OperatingSystemId, opts ...grpc.CallOption) (*OperatingSystem, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(OperatingSystem) + err := c.cc.Invoke(ctx, Forge_GetOperatingSystem_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *forgeClient) UpdateOperatingSystem(ctx context.Context, in *UpdateOperatingSystemRequest, opts ...grpc.CallOption) (*OperatingSystem, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(OperatingSystem) + err := c.cc.Invoke(ctx, Forge_UpdateOperatingSystem_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *forgeClient) DeleteOperatingSystem(ctx context.Context, in *DeleteOperatingSystemRequest, opts ...grpc.CallOption) (*DeleteOperatingSystemResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(DeleteOperatingSystemResponse) + err := c.cc.Invoke(ctx, Forge_DeleteOperatingSystem_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *forgeClient) FindOperatingSystemIds(ctx context.Context, in *OperatingSystemSearchFilter, opts ...grpc.CallOption) (*OperatingSystemIdList, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(OperatingSystemIdList) + err := c.cc.Invoke(ctx, Forge_FindOperatingSystemIds_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *forgeClient) FindOperatingSystemsByIds(ctx context.Context, in *OperatingSystemsByIdsRequest, opts ...grpc.CallOption) (*OperatingSystemList, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(OperatingSystemList) + err := c.cc.Invoke(ctx, Forge_FindOperatingSystemsByIds_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *forgeClient) GetOperatingSystemCachableIpxeTemplateArtifacts(ctx context.Context, in *GetOperatingSystemCachableIpxeTemplateArtifactsRequest, opts ...grpc.CallOption) (*IpxeTemplateArtifactList, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IpxeTemplateArtifactList) + err := c.cc.Invoke(ctx, Forge_GetOperatingSystemCachableIpxeTemplateArtifacts_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *forgeClient) UpdateOperatingSystemCachableIpxeTemplateArtifacts(ctx context.Context, in *UpdateOperatingSystemIpxeTemplateArtifactRequest, opts ...grpc.CallOption) (*IpxeTemplateArtifactList, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(IpxeTemplateArtifactList) + err := c.cc.Invoke(ctx, Forge_UpdateOperatingSystemCachableIpxeTemplateArtifacts_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // ForgeServer is the server API for Forge service. // All implementations should embed UnimplementedForgeServer // for forward compatibility. @@ -5688,6 +5825,9 @@ type ForgeServer interface { ListOsImage(context.Context, *ListOsImageRequest) (*ListOsImageResponse, error) GetOsImage(context.Context, *UUID) (*OsImage, error) UpdateOsImage(context.Context, *OsImageAttributes) (*OsImage, error) + // iPXE Script Template management + GetIpxeTemplate(context.Context, *GetIpxeTemplateRequest) (*IpxeTemplate, error) + ListIpxeTemplates(context.Context, *ListIpxeTemplatesRequest) (*IpxeTemplateList, error) RebootCompleted(context.Context, *MachineRebootCompletedRequest) (*MachineRebootCompletedResponse, error) // Validation result Persist PersistValidationResult(context.Context, *MachineValidationResultPostRequest) (*emptypb.Empty, error) @@ -5797,6 +5937,7 @@ type ForgeServer interface { // Deprecated: Use FindRackIds GetRack(context.Context, *GetRackRequest) (*GetRackResponse, error) DeleteRack(context.Context, *DeleteRackRequest) (*emptypb.Empty, error) + GetRackCapabilities(context.Context, *GetRackCapabilitiesRequest) (*GetRackCapabilitiesResponse, error) // Compute Allocations CreateComputeAllocation(context.Context, *CreateComputeAllocationRequest) (*CreateComputeAllocationResponse, error) FindComputeAllocationIds(context.Context, *FindComputeAllocationIdsRequest) (*FindComputeAllocationIdsResponse, error) @@ -5956,6 +6097,18 @@ type ForgeServer interface { UpdateComponentFirmware(context.Context, *UpdateComponentFirmwareRequest) (*UpdateComponentFirmwareResponse, error) GetComponentFirmwareStatus(context.Context, *GetComponentFirmwareStatusRequest) (*GetComponentFirmwareStatusResponse, error) ListComponentFirmwareVersions(context.Context, *ListComponentFirmwareVersionsRequest) (*ListComponentFirmwareVersionsResponse, error) + // Operating System library + CreateOperatingSystem(context.Context, *CreateOperatingSystemRequest) (*OperatingSystem, error) + GetOperatingSystem(context.Context, *OperatingSystemId) (*OperatingSystem, error) + UpdateOperatingSystem(context.Context, *UpdateOperatingSystemRequest) (*OperatingSystem, error) + DeleteOperatingSystem(context.Context, *DeleteOperatingSystemRequest) (*DeleteOperatingSystemResponse, error) + FindOperatingSystemIds(context.Context, *OperatingSystemSearchFilter) (*OperatingSystemIdList, error) + FindOperatingSystemsByIds(context.Context, *OperatingSystemsByIdsRequest) (*OperatingSystemList, error) + // Returns the ordered artifact list for an OS definition without fetching the full record. + GetOperatingSystemCachableIpxeTemplateArtifacts(context.Context, *GetOperatingSystemCachableIpxeTemplateArtifactsRequest) (*IpxeTemplateArtifactList, error) + // Updates the cached_url field of named artifacts in-place, leaving all other artifact fields + // and OS definition fields (including ipxe_definition_hash) unchanged. + UpdateOperatingSystemCachableIpxeTemplateArtifacts(context.Context, *UpdateOperatingSystemIpxeTemplateArtifactRequest) (*IpxeTemplateArtifactList, error) } // UnimplementedForgeServer should be embedded to have @@ -6748,6 +6901,12 @@ func (UnimplementedForgeServer) GetOsImage(context.Context, *UUID) (*OsImage, er func (UnimplementedForgeServer) UpdateOsImage(context.Context, *OsImageAttributes) (*OsImage, error) { return nil, status.Error(codes.Unimplemented, "method UpdateOsImage not implemented") } +func (UnimplementedForgeServer) GetIpxeTemplate(context.Context, *GetIpxeTemplateRequest) (*IpxeTemplate, error) { + return nil, status.Error(codes.Unimplemented, "method GetIpxeTemplate not implemented") +} +func (UnimplementedForgeServer) ListIpxeTemplates(context.Context, *ListIpxeTemplatesRequest) (*IpxeTemplateList, error) { + return nil, status.Error(codes.Unimplemented, "method ListIpxeTemplates not implemented") +} func (UnimplementedForgeServer) RebootCompleted(context.Context, *MachineRebootCompletedRequest) (*MachineRebootCompletedResponse, error) { return nil, status.Error(codes.Unimplemented, "method RebootCompleted not implemented") } @@ -6958,6 +7117,9 @@ func (UnimplementedForgeServer) GetRack(context.Context, *GetRackRequest) (*GetR func (UnimplementedForgeServer) DeleteRack(context.Context, *DeleteRackRequest) (*emptypb.Empty, error) { return nil, status.Error(codes.Unimplemented, "method DeleteRack not implemented") } +func (UnimplementedForgeServer) GetRackCapabilities(context.Context, *GetRackCapabilitiesRequest) (*GetRackCapabilitiesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetRackCapabilities not implemented") +} func (UnimplementedForgeServer) CreateComputeAllocation(context.Context, *CreateComputeAllocationRequest) (*CreateComputeAllocationResponse, error) { return nil, status.Error(codes.Unimplemented, "method CreateComputeAllocation not implemented") } @@ -7195,6 +7357,30 @@ func (UnimplementedForgeServer) GetComponentFirmwareStatus(context.Context, *Get func (UnimplementedForgeServer) ListComponentFirmwareVersions(context.Context, *ListComponentFirmwareVersionsRequest) (*ListComponentFirmwareVersionsResponse, error) { return nil, status.Error(codes.Unimplemented, "method ListComponentFirmwareVersions not implemented") } +func (UnimplementedForgeServer) CreateOperatingSystem(context.Context, *CreateOperatingSystemRequest) (*OperatingSystem, error) { + return nil, status.Error(codes.Unimplemented, "method CreateOperatingSystem not implemented") +} +func (UnimplementedForgeServer) GetOperatingSystem(context.Context, *OperatingSystemId) (*OperatingSystem, error) { + return nil, status.Error(codes.Unimplemented, "method GetOperatingSystem not implemented") +} +func (UnimplementedForgeServer) UpdateOperatingSystem(context.Context, *UpdateOperatingSystemRequest) (*OperatingSystem, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateOperatingSystem not implemented") +} +func (UnimplementedForgeServer) DeleteOperatingSystem(context.Context, *DeleteOperatingSystemRequest) (*DeleteOperatingSystemResponse, error) { + return nil, status.Error(codes.Unimplemented, "method DeleteOperatingSystem not implemented") +} +func (UnimplementedForgeServer) FindOperatingSystemIds(context.Context, *OperatingSystemSearchFilter) (*OperatingSystemIdList, error) { + return nil, status.Error(codes.Unimplemented, "method FindOperatingSystemIds not implemented") +} +func (UnimplementedForgeServer) FindOperatingSystemsByIds(context.Context, *OperatingSystemsByIdsRequest) (*OperatingSystemList, error) { + return nil, status.Error(codes.Unimplemented, "method FindOperatingSystemsByIds not implemented") +} +func (UnimplementedForgeServer) GetOperatingSystemCachableIpxeTemplateArtifacts(context.Context, *GetOperatingSystemCachableIpxeTemplateArtifactsRequest) (*IpxeTemplateArtifactList, error) { + return nil, status.Error(codes.Unimplemented, "method GetOperatingSystemCachableIpxeTemplateArtifacts not implemented") +} +func (UnimplementedForgeServer) UpdateOperatingSystemCachableIpxeTemplateArtifacts(context.Context, *UpdateOperatingSystemIpxeTemplateArtifactRequest) (*IpxeTemplateArtifactList, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateOperatingSystemCachableIpxeTemplateArtifacts not implemented") +} func (UnimplementedForgeServer) testEmbeddedByValue() {} // UnsafeForgeServer may be embedded to opt out of forward compatibility for this service. @@ -11913,6 +12099,42 @@ func _Forge_UpdateOsImage_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Forge_GetIpxeTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetIpxeTemplateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).GetIpxeTemplate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_GetIpxeTemplate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).GetIpxeTemplate(ctx, req.(*GetIpxeTemplateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Forge_ListIpxeTemplates_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListIpxeTemplatesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).ListIpxeTemplates(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_ListIpxeTemplates_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).ListIpxeTemplates(ctx, req.(*ListIpxeTemplatesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Forge_RebootCompleted_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MachineRebootCompletedRequest) if err := dec(in); err != nil { @@ -13173,6 +13395,24 @@ func _Forge_DeleteRack_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Forge_GetRackCapabilities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRackCapabilitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).GetRackCapabilities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_GetRackCapabilities_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).GetRackCapabilities(ctx, req.(*GetRackCapabilitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Forge_CreateComputeAllocation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreateComputeAllocationRequest) if err := dec(in); err != nil { @@ -14584,6 +14824,150 @@ func _Forge_ListComponentFirmwareVersions_Handler(srv interface{}, ctx context.C return interceptor(ctx, in, info, handler) } +func _Forge_CreateOperatingSystem_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateOperatingSystemRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).CreateOperatingSystem(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_CreateOperatingSystem_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).CreateOperatingSystem(ctx, req.(*CreateOperatingSystemRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Forge_GetOperatingSystem_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OperatingSystemId) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).GetOperatingSystem(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_GetOperatingSystem_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).GetOperatingSystem(ctx, req.(*OperatingSystemId)) + } + return interceptor(ctx, in, info, handler) +} + +func _Forge_UpdateOperatingSystem_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateOperatingSystemRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).UpdateOperatingSystem(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_UpdateOperatingSystem_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).UpdateOperatingSystem(ctx, req.(*UpdateOperatingSystemRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Forge_DeleteOperatingSystem_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteOperatingSystemRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).DeleteOperatingSystem(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_DeleteOperatingSystem_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).DeleteOperatingSystem(ctx, req.(*DeleteOperatingSystemRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Forge_FindOperatingSystemIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OperatingSystemSearchFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).FindOperatingSystemIds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_FindOperatingSystemIds_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).FindOperatingSystemIds(ctx, req.(*OperatingSystemSearchFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Forge_FindOperatingSystemsByIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OperatingSystemsByIdsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).FindOperatingSystemsByIds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_FindOperatingSystemsByIds_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).FindOperatingSystemsByIds(ctx, req.(*OperatingSystemsByIdsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Forge_GetOperatingSystemCachableIpxeTemplateArtifacts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOperatingSystemCachableIpxeTemplateArtifactsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).GetOperatingSystemCachableIpxeTemplateArtifacts(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_GetOperatingSystemCachableIpxeTemplateArtifacts_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).GetOperatingSystemCachableIpxeTemplateArtifacts(ctx, req.(*GetOperatingSystemCachableIpxeTemplateArtifactsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Forge_UpdateOperatingSystemCachableIpxeTemplateArtifacts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateOperatingSystemIpxeTemplateArtifactRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ForgeServer).UpdateOperatingSystemCachableIpxeTemplateArtifacts(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Forge_UpdateOperatingSystemCachableIpxeTemplateArtifacts_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ForgeServer).UpdateOperatingSystemCachableIpxeTemplateArtifacts(ctx, req.(*UpdateOperatingSystemIpxeTemplateArtifactRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Forge_ServiceDesc is the grpc.ServiceDesc for Forge service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -15635,6 +16019,14 @@ var Forge_ServiceDesc = grpc.ServiceDesc{ MethodName: "UpdateOsImage", Handler: _Forge_UpdateOsImage_Handler, }, + { + MethodName: "GetIpxeTemplate", + Handler: _Forge_GetIpxeTemplate_Handler, + }, + { + MethodName: "ListIpxeTemplates", + Handler: _Forge_ListIpxeTemplates_Handler, + }, { MethodName: "RebootCompleted", Handler: _Forge_RebootCompleted_Handler, @@ -15915,6 +16307,10 @@ var Forge_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteRack", Handler: _Forge_DeleteRack_Handler, }, + { + MethodName: "GetRackCapabilities", + Handler: _Forge_GetRackCapabilities_Handler, + }, { MethodName: "CreateComputeAllocation", Handler: _Forge_CreateComputeAllocation_Handler, @@ -16227,6 +16623,38 @@ var Forge_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListComponentFirmwareVersions", Handler: _Forge_ListComponentFirmwareVersions_Handler, }, + { + MethodName: "CreateOperatingSystem", + Handler: _Forge_CreateOperatingSystem_Handler, + }, + { + MethodName: "GetOperatingSystem", + Handler: _Forge_GetOperatingSystem_Handler, + }, + { + MethodName: "UpdateOperatingSystem", + Handler: _Forge_UpdateOperatingSystem_Handler, + }, + { + MethodName: "DeleteOperatingSystem", + Handler: _Forge_DeleteOperatingSystem_Handler, + }, + { + MethodName: "FindOperatingSystemIds", + Handler: _Forge_FindOperatingSystemIds_Handler, + }, + { + MethodName: "FindOperatingSystemsByIds", + Handler: _Forge_FindOperatingSystemsByIds_Handler, + }, + { + MethodName: "GetOperatingSystemCachableIpxeTemplateArtifacts", + Handler: _Forge_GetOperatingSystemCachableIpxeTemplateArtifacts_Handler, + }, + { + MethodName: "UpdateOperatingSystemCachableIpxeTemplateArtifacts", + Handler: _Forge_UpdateOperatingSystemCachableIpxeTemplateArtifacts_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/workflow-schema/site-agent/workflows/v1/common_carbide.proto b/workflow-schema/site-agent/workflows/v1/common_carbide.proto index 509a434d9..4f442cf6c 100644 --- a/workflow-schema/site-agent/workflows/v1/common_carbide.proto +++ b/workflow-schema/site-agent/workflows/v1/common_carbide.proto @@ -113,6 +113,14 @@ message ComputeAllocationId { string value = 1; } +message OperatingSystemId { + string value = 1; +} + +message IpxeTemplateId { + string value = 1; +} + enum SystemPowerControl { SYSTEM_POWER_CONTROL_UNKNOWN = 0; // Power on a machine diff --git a/workflow-schema/site-agent/workflows/v1/forge_carbide.proto b/workflow-schema/site-agent/workflows/v1/forge_carbide.proto index ef0da0b92..8ec15b2cd 100644 --- a/workflow-schema/site-agent/workflows/v1/forge_carbide.proto +++ b/workflow-schema/site-agent/workflows/v1/forge_carbide.proto @@ -554,6 +554,10 @@ service Forge { rpc GetOsImage(common.UUID) returns (OsImage); rpc UpdateOsImage(OsImageAttributes) returns (OsImage); + // iPXE Script Template management + rpc GetIpxeTemplate(GetIpxeTemplateRequest) returns (IpxeTemplate); + rpc ListIpxeTemplates(ListIpxeTemplatesRequest) returns (IpxeTemplateList); + rpc RebootCompleted(MachineRebootCompletedRequest) returns (MachineRebootCompletedResponse); // Validation result Persist @@ -689,6 +693,7 @@ service Forge { // Deprecated: Use FindRackIds rpc GetRack(GetRackRequest) returns (GetRackResponse); rpc DeleteRack(DeleteRackRequest) returns (google.protobuf.Empty); + rpc GetRackCapabilities(GetRackCapabilitiesRequest) returns (GetRackCapabilitiesResponse); // // Compute Allocations @@ -880,6 +885,19 @@ service Forge { rpc UpdateComponentFirmware(UpdateComponentFirmwareRequest) returns (UpdateComponentFirmwareResponse); rpc GetComponentFirmwareStatus(GetComponentFirmwareStatusRequest) returns (GetComponentFirmwareStatusResponse); rpc ListComponentFirmwareVersions(ListComponentFirmwareVersionsRequest) returns (ListComponentFirmwareVersionsResponse); + + // Operating System library + rpc CreateOperatingSystem(CreateOperatingSystemRequest) returns (OperatingSystem); + rpc GetOperatingSystem(common.OperatingSystemId) returns (OperatingSystem); + rpc UpdateOperatingSystem(UpdateOperatingSystemRequest) returns (OperatingSystem); + rpc DeleteOperatingSystem(DeleteOperatingSystemRequest) returns (DeleteOperatingSystemResponse); + rpc FindOperatingSystemIds(OperatingSystemSearchFilter) returns (OperatingSystemIdList); + rpc FindOperatingSystemsByIds(OperatingSystemsByIdsRequest) returns (OperatingSystemList); + // Returns the ordered artifact list for an OS definition without fetching the full record. + rpc GetOperatingSystemCachableIpxeTemplateArtifacts(GetOperatingSystemCachableIpxeTemplateArtifactsRequest) returns (IpxeTemplateArtifactList); + // Updates the cached_url field of named artifacts in-place, leaving all other artifact fields + // and OS definition fields (including ipxe_definition_hash) unchanged. + rpc UpdateOperatingSystemCachableIpxeTemplateArtifacts(UpdateOperatingSystemIpxeTemplateArtifactRequest) returns (IpxeTemplateArtifactList); } message AttestationIdsRequest { @@ -1132,6 +1150,7 @@ enum CredentialType { RootBmcByMacAddress = 8; BmcForgeAdminByMacAddress = 9; NmxM = 10; + BgpSiteWideLeafPassword = 11; } message CredentialCreationRequest { @@ -1798,6 +1817,9 @@ message PowerShelf { // Version string for the current controller state (e.g. "V3-T1774905143273055"). string state_version = 9; + + // The rack that this powershelf is associated with + optional common.RackId rack_id = 10; } message PowerShelfList { @@ -1966,6 +1988,9 @@ message Switch { Metadata metadata = 8; string version = 9; + + // The rack that this switch is associated with + optional common.RackId rack_id = 10; } message SwitchList { @@ -2322,6 +2347,52 @@ message BatchInstanceAllocationResponse { repeated Instance instances = 1; } +// Parameter for iPXE template substitution or kernel command line +// Can be used to replace variables in iPXE templates or add parameters to kernel command line +// Some are "well known" like 'console', others can be custom defined by users +message IpxeTemplateParameter { + string name = 1; // Name of the parameter (used as variable in template) + string value = 2; // Value of the parameter +} + +// Artifact cache strategy +enum IpxeTemplateArtifactCacheStrategy { + CACHE_AS_NEEDED = 0; // Download and cache artifact locally if possible + LOCAL_ONLY = 1; // Artifact URL provided is only usable locally: site specific, no caching applicable. + CACHED_ONLY = 2; // Artifact URL must be cached locally or is unusable + REMOTE_ONLY = 3; // Always fetch from remote URL, never cache locally +} + +// Remote artifact to be cached locally before booting +// Examples: kernel, initrd, rootfs, qcow-imager.efi, OS image, ... +message IpxeTemplateArtifact { + string name = 1; // Name of the artifact (can be used as variable in template) + string url = 2; // Original URL for the artifact + optional string sha = 3; // Optional SHA256 checksum for the artifact + optional string auth_type = 4; // Auth type: "None", "Basic", "Bearer" + optional string auth_token = 5; // Optional auth token for the artifact + IpxeTemplateArtifactCacheStrategy cache_strategy = 6; // How to handle caching for this artifact + optional string cached_url = 7; // Local cached URL, set by carbide-core on successful download. If present overrides 'url' at boot time. +} + +// Scope for iPXE script templates. +enum IpxeTemplateScope { + INTERNAL = 0; // Carbide-core usage only + PUBLIC = 1; // Usable by tenant +} + +// Template management messages +message IpxeTemplate { + string name = 1; + string template = 2; + repeated string required_params = 3; // Error if these params are not provided or empty + string description = 4; + repeated string reserved_params = 5; // Reserved for carbide-core to provide at render time + repeated string required_artifacts = 6; // Error if these artifacts are not provided or empty + IpxeTemplateScope scope = 7; // INTERNAL = carbide-core only, PUBLIC = tenant-usable + common.IpxeTemplateId id = 8; // Stable UUID, hardcoded in templates.yaml; consistent across all sites +} + // Tenant related configuration that is set once the instance is allocated // by a tenant message TenantConfig { @@ -2329,7 +2400,7 @@ message TenantConfig { string tenant_organization_id = 1; // These fields have been used for OS configuration in the past. - // They are now replaced with the OperatingSystem message. + // They are now replaced with the InstanceOperatingSystemConfig message. reserved 11, 12, 13, 14; optional string hostname = 15; @@ -2339,11 +2410,14 @@ message TenantConfig { repeated string tenantKeysetIds = 8; // this may be empty } -message OperatingSystem { +message InstanceOperatingSystemConfig { // Contains the operating system definition based on the variant of operating system oneof variant { InlineIpxe ipxe = 1; common.UUID os_image_id = 2; + // Reference any operating system definition by ID (any variant except OS image). + // On read the actual variant (iPXE / ipxe_os_definition) is resolved from the row. + common.OperatingSystemId operating_system_id = 4; } // If this flag is set to `true` the instance will not transition to a Ready state until @@ -2378,7 +2452,7 @@ message InlineIpxe { string ipxe_script = 1; // Optional user-data that is associated with the iPXE script // This can be a cloud-init script - // Deprecated, use OperatingSystem user_data field + // Deprecated, use InstanceOperatingSystemConfig user_data field optional string user_data = 2; } @@ -2391,7 +2465,7 @@ message InstanceConfig { TenantConfig tenant = 1; // Operating system. This is required if no operating system reference is provided - OperatingSystem os = 2; + InstanceOperatingSystemConfig os = 2; // Can be used to reference an OS in the OS library based on a unique ID // string os_reference = 3; @@ -2476,7 +2550,7 @@ message InstanceOperatingSystemUpdateRequest { optional string if_version_match = 2; // Operating system. This is required if no operating system reference is provided - OperatingSystem os = 3; + InstanceOperatingSystemConfig os = 3; // Can be used to reference an OS in the OS library based on a unique ID // string os_reference = 4; } @@ -3121,6 +3195,7 @@ message Machine { optional MachineNVLinkStatusObservation nvlink_status_observation = 44; + // The rack that this machine is associated with optional common.RackId rack_id = 45; } @@ -3677,6 +3752,10 @@ message ManagedHostNetworkConfigResponse { // will still use the dynamically allocated VNI for deriving // route-targets. optional uint32 site_global_vpc_vni = 117; + + // The password the DPU should use when configuring a + // BGP session with the its TOR + optional string bgp_leaf_session_password = 118; } message TrafficInterceptConfig { @@ -4227,6 +4306,13 @@ message PxeInstructionRequest { message PxeInstructions { string pxe_script = 1; + // URL overrides for external clients (e.g. on the static-assignments + // segment). When set, carbide-pxe uses these instead of its global + // env var URLs, allowing external hosts to reach services via an + // alternate hostname or IP that they can resolve. + optional string api_url_override = 2; + optional string pxe_url_override = 3; + optional string static_pxe_url_override = 4; } message CloudInitDiscoveryInstructions { @@ -4263,6 +4349,12 @@ message CloudInitInstructions { optional string custom_cloud_init = 1; optional CloudInitDiscoveryInstructions discovery_instructions = 2; optional CloudInitMetaData metadata = 3; + // URL overrides for external clients (e.g. on the static-assignments + // segment). When set, carbide-pxe uses these instead of its global + // env var URLs, allowing external hosts to reach services via an + // alternate hostname or IP that they can resolve. + optional string api_url_override = 4; + optional string pxe_url_override = 5; } // Specifies whether a network interface is physical network function (PF) @@ -4806,6 +4898,12 @@ enum IpType { // DB records specifically say their source type is `admin`. IpTypeRouteServerFromAdminApi = 10; IpTypeDpaInterface = 11; + // IpTypeStaticBmcIp are BMC IPs that were statically assigned via + // ExpectedMachine.bmc_ip_address, ExpectedPowerShelf.bmc_ip_address, + // ExpectedSwitch.bmc_ip_address, or operator static assignment + // (AllocationType::Static / static-assignments segment), as opposed to + // a normal DHCP allocation. + IpTypeStaticBmcIp = 12; } message MachineBootOverride { @@ -4992,6 +5090,19 @@ message DeleteOsImageRequest { message DeleteOsImageResponse { } +// Request/Response messages for iPXE Script Template management +message GetIpxeTemplateRequest { + common.IpxeTemplateId id = 1; // Stable template UUID +} + +message ListIpxeTemplatesRequest { + // Empty for now +} + +message IpxeTemplateList { + repeated IpxeTemplate templates = 1; +} + message ExpectedHostNic { string mac_address = 1; @@ -5018,6 +5129,9 @@ message ExpectedMachine { // deprecated bool dpf_enabled = 12 [deprecated = true]; optional bool is_dpf_enabled = 13; + // Static BMC IP (optional). Pre-allocates a machine_interface like expected + // switches and power shelves; external IPs use the static-assignments segment. + optional string bmc_ip_address = 14; // WARNING: Following fields are not present in Core, but added directly in REST snapshot optional string name = 21; @@ -6337,6 +6451,71 @@ message DeleteRackRequest { string id = 1; } +// Rack Capabilities + +enum RackHardwareType { + RACK_HARDWARE_TYPE_UNSPECIFIED = 0; + RACK_HARDWARE_TYPE_DSX_GB200NVL_36X1 = 1; + RACK_HARDWARE_TYPE_DSX_GB200NVL_36X2 = 2; + RACK_HARDWARE_TYPE_DSX_GB200NVL_72X1 = 3; +} + +enum RackHardwareTopology { + RACK_HARDWARE_TOPOLOGY_UNSPECIFIED = 0; + RACK_HARDWARE_TOPOLOGY_GB200_NVL36R1_C2G4 = 1; + RACK_HARDWARE_TOPOLOGY_GB300_NVL36R1_C2G4 = 2; + RACK_HARDWARE_TOPOLOGY_GB200_NVL72R1_C2G4 = 3; + RACK_HARDWARE_TOPOLOGY_GB300_NVL72R1_C2G4 = 4; + RACK_HARDWARE_TOPOLOGY_VR_NVL8R1_C2G4_RTF = 5; + RACK_HARDWARE_TOPOLOGY_VR_NVL72R1_C2G4 = 6; +} + +enum RackHardwareClass { + RACK_HARDWARE_CLASS_UNSPECIFIED = 0; + RACK_HARDWARE_CLASS_DEV = 1; + RACK_HARDWARE_CLASS_PROD = 2; +} + +message RackCapabilityCompute { + optional string name = 1; + uint32 count = 2; + optional string vendor = 3; + repeated uint32 slot_ids = 4; +} + +message RackCapabilitySwitch { + optional string name = 1; + uint32 count = 2; + optional string vendor = 3; + repeated uint32 slot_ids = 4; +} + +message RackCapabilityPowerShelf { + optional string name = 1; + uint32 count = 2; + optional string vendor = 3; + repeated uint32 slot_ids = 4; +} + +message RackCapabilitiesSet { + RackHardwareType rack_hardware_type = 1; + RackHardwareTopology rack_hardware_topology = 2; + RackHardwareClass rack_hardware_class = 3; + RackCapabilityCompute compute = 4; + RackCapabilitySwitch switch = 5; + RackCapabilityPowerShelf power_shelf = 6; +} + +message GetRackCapabilitiesRequest { + common.RackId rack_id = 1; +} + +message GetRackCapabilitiesResponse { + common.RackId rack_id = 1; + string rack_type = 2; + RackCapabilitiesSet capabilities = 3; +} + // put some sample rack manager commands in for now enum RackManagerForgeCmd { InventoryGet = 0; @@ -7380,3 +7559,125 @@ message AdminForceDeletePowerShelfResponse { // Number of interfaces deleted. uint32 interfaces_deleted = 2; } + +// --- Operating System library messages --- + +// Operating system definition (CRUD resource, table operating_systems). +// Type of Operating System variant +enum OperatingSystemType { + OS_TYPE_UNSPECIFIED = 0; + OS_TYPE_IPXE = 1; // Raw inline iPXE script + OS_TYPE_TEMPLATED_IPXE = 2; // iPXE OS using an iPXE template +} + +message OperatingSystem { + common.OperatingSystemId id = 1; + string name = 2; + optional string description = 3; + string tenant_organization_id = 4; + OperatingSystemType type = 5; + TenantState status = 6; // we only use some states from TenantState + bool is_active = 7; + bool allow_override = 8; + bool phone_home_enabled = 9; + optional string user_data = 10; + string created = 11; + string updated = 12; + + // Variant: ipxe + optional string ipxe_script = 20; + // Variant: ipxe_os_definition + optional common.IpxeTemplateId ipxe_template_id = 22; + repeated IpxeTemplateParameter ipxe_template_parameters = 23; + repeated IpxeTemplateArtifact ipxe_template_artifacts = 24; + optional string ipxe_template_definition_hash = 25; +} + +message CreateOperatingSystemRequest { + string name = 1; + optional string description = 2; + string tenant_organization_id = 3; + bool is_active = 4; + bool allow_override = 5; + bool phone_home_enabled = 6; + optional string user_data = 7; + optional common.OperatingSystemId id = 8; + + // Exactly one variant must be provided to determine the type. + // This is only set for 'ipxe' variant: + optional string ipxe_script = 20; + // This is only set for 'ipxe_os_definition' variant (with optional parameters/artifacts): + optional common.IpxeTemplateId ipxe_template_id = 22; + repeated IpxeTemplateParameter ipxe_template_parameters = 23; + repeated IpxeTemplateArtifact ipxe_template_artifacts = 24; +} + +// Wrapper for repeated IpxeTemplateParameter so that an optional field can distinguish +// "not provided" (keep existing) from "provided but empty" (clear the list). +message IpxeTemplateParameters { + repeated IpxeTemplateParameter items = 1; +} + +// Wrapper for repeated IpxeTemplateArtifact (same rationale as IpxeTemplateParameters). +message IpxeTemplateArtifacts { + repeated IpxeTemplateArtifact items = 1; +} + +message UpdateOperatingSystemRequest { + common.OperatingSystemId id = 1; + optional string name = 2; + optional string description = 3; + optional bool is_active = 4; + optional bool allow_override = 5; + optional bool phone_home_enabled = 6; + optional string user_data = 7; + + optional string ipxe_script = 20; + optional common.IpxeTemplateId ipxe_template_id = 22; + optional IpxeTemplateParameters ipxe_template_parameters = 23; + optional IpxeTemplateArtifacts ipxe_template_artifacts = 24; + optional string ipxe_template_definition_hash = 25; // if provided, used as-is; otherwise recomputed +} + +message DeleteOperatingSystemRequest { + common.OperatingSystemId id = 1; +} + +message DeleteOperatingSystemResponse { +} + +message OperatingSystemSearchFilter { + optional string tenant_organization_id = 1; +} + +message OperatingSystemIdList { + repeated common.OperatingSystemId ids = 1; +} + +message OperatingSystemsByIdsRequest { + repeated common.OperatingSystemId ids = 1; +} + +message OperatingSystemList { + repeated OperatingSystem operating_systems = 1; +} + +message GetOperatingSystemCachableIpxeTemplateArtifactsRequest { + common.OperatingSystemId id = 1; +} + +message IpxeTemplateArtifactList { + repeated IpxeTemplateArtifact artifacts = 1; +} + +// A single (artifact name, cached_url) pair for UpdateOperatingSystemCachableIpxeTemplateArtifacts. +// cached_url is optional: absent means clear the cached_url on the matching artifact(s). +message IpxeTemplateArtifactUpdateRequest { + string name = 1; + optional string cached_url = 2; +} + +message UpdateOperatingSystemIpxeTemplateArtifactRequest { + common.OperatingSystemId id = 1; + repeated IpxeTemplateArtifactUpdateRequest updates = 2; +} diff --git a/workflow-schema/site-agent/workflows/v1/inventory.proto b/workflow-schema/site-agent/workflows/v1/inventory.proto index 385f08595..1c417db82 100644 --- a/workflow-schema/site-agent/workflows/v1/inventory.proto +++ b/workflow-schema/site-agent/workflows/v1/inventory.proto @@ -216,6 +216,34 @@ message OsImageInventory { InventoryPage inventory_page = 5; } +// OperatingSystemInventory - inventory info for all OS definitions periodically collected from carbide-core +message OperatingSystemInventory { + // List of Operating Systems (active records only; deletions are detected by absence) + repeated forge.OperatingSystem operating_systems = 1; + // Reported timestamp of inventory + google.protobuf.Timestamp timestamp = 2; + // Status of Inventory + InventoryStatus inventory_status = 3; + // Message for status + string status_msg = 4; + // Inventory page information + InventoryPage inventory_page = 5; +} + +// IpxeTemplateInventory - inventory info of all iPXE templates periodically collected from site +message IpxeTemplateInventory { + // List of iPXE templates + repeated forge.IpxeTemplate templates = 1; + // Reported timestamp of iPXE template inventory + google.protobuf.Timestamp timestamp = 2; + // Status of Inventory + InventoryStatus inventory_status = 3; + // Status message + string status_msg = 4; + // Inventory page information + InventoryPage inventory_page = 5; +} + // SkuInventory - inventory info of all SKUs on Site, collected periodically message SkuInventory { // Status of Inventory diff --git a/workflow/cmd/workflow/main.go b/workflow/cmd/workflow/main.go index c35cf7716..7bda4187f 100644 --- a/workflow/cmd/workflow/main.go +++ b/workflow/cmd/workflow/main.go @@ -101,6 +101,9 @@ import ( skuActivity "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/activity/sku" skuWorkflow "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/workflow/sku" + ipxeTemplateActivity "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/activity/ipxetemplate" + ipxeTemplateWorkflow "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/workflow/ipxetemplate" + vpcPrefixActivity "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/activity/vpcprefix" vpcPrefixWorkflow "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/workflow/vpcprefix" @@ -268,6 +271,9 @@ func main() { // InfiniBandPartition workflows w.RegisterWorkflow(ibpWorkflow.DeleteInfiniBandPartitionByID) + + // Operating System sync workflow (REST → core push for non-image OS) + w.RegisterWorkflow(osImageWorkflow.SynchronizeOperatingSystem) } else if tcfg.Namespace == cwfn.SiteNamespace { // Workflows triggered by Site Agent // Machine Workflows @@ -321,6 +327,12 @@ func main() { // SKU workflow w.RegisterWorkflow(skuWorkflow.UpdateSkuInventory) + // iPXE Template workflow + w.RegisterWorkflow(ipxeTemplateWorkflow.UpdateIpxeTemplateInventory) + + // OS Definition workflow (in the operatingsystem package alongside OsImage) + w.RegisterWorkflow(osImageWorkflow.UpdateOperatingSystemInventory) + // DPU Extension Service workflow w.RegisterWorkflow(dpuExtensionServiceWorkflow.UpdateDpuExtensionServiceInventory) @@ -385,6 +397,18 @@ func main() { skuManager := skuActivity.NewManageSku(dbSession, siteClientPool) w.RegisterActivity(&skuManager) + // iPXE Template activities + ipxeTemplateManager := ipxeTemplateActivity.NewManageIpxeTemplate(dbSession, siteClientPool) + w.RegisterActivity(&ipxeTemplateManager) + + // OS Definition activities (registered via the operatingsystem package) + osDefinitionManager := osImageActivity.NewManageOperatingSystemSync(dbSession, siteClientPool) + w.RegisterActivity(&osDefinitionManager) + + // OS push activities (REST → core for non-image OS) + osPushManager := osImageActivity.NewManageOperatingSystemPush(dbSession, siteClientPool) + w.RegisterActivity(&osPushManager) + // DPU Extension Service activities dpuExtensionServiceManager := dpuExtensionServiceActivity.NewManageDpuExtensionService(dbSession, siteClientPool) w.RegisterActivity(&dpuExtensionServiceManager) diff --git a/workflow/pkg/activity/ipxetemplate/ipxetemplate.go b/workflow/pkg/activity/ipxetemplate/ipxetemplate.go new file mode 100644 index 000000000..cce25362c --- /dev/null +++ b/workflow/pkg/activity/ipxetemplate/ipxetemplate.go @@ -0,0 +1,216 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ipxetemplate + +import ( + "context" + "errors" + "fmt" + "reflect" + + cdb "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" + cdbm "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" + cdbp "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/paginator" + cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" + sc "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/client/site" + "github.com/google/uuid" + "github.com/rs/zerolog/log" +) + +// ManageIpxeTemplate is an activity wrapper for managing iPXE template inventory that allows +// injecting DB access +type ManageIpxeTemplate struct { + dbSession *cdb.Session + siteClientPool *sc.ClientPool +} + +// UpdateIpxeTemplatesInDB is a Temporal activity that takes a collection of iPXE template data +// pushed by the Site Agent and reconciles the DB +func (mit ManageIpxeTemplate) UpdateIpxeTemplatesInDB(ctx context.Context, siteID uuid.UUID, inventory *cwssaws.IpxeTemplateInventory) error { + logger := log.With().Str("Activity", "UpdateIpxeTemplatesInDB").Str("Site ID", siteID.String()).Logger() + + logger.Info().Msg("Starting activity") + + if inventory == nil { + logger.Error().Msg("UpdateIpxeTemplatesInDB called with nil inventory") + return errors.New("UpdateIpxeTemplatesInDB called with nil inventory") + } + + if inventory.InventoryStatus == cwssaws.InventoryStatus_INVENTORY_STATUS_FAILED { + logger.Warn().Msg("Received failed inventory status from Site Agent, skipping inventory processing") + return nil + } + + // Ensure site exists + stDAO := cdbm.NewSiteDAO(mit.dbSession) + _, err := stDAO.GetByID(ctx, nil, siteID, nil, false) + if err != nil { + if errors.Is(err, cdb.ErrDoesNotExist) { + logger.Warn().Err(err).Msg("Received inventory for unknown or deleted Site") + } else { + logger.Error().Err(err).Msg("Failed to retrieve Site from DB") + } + return err + } + + // Initialize DAO + templateDAO := cdbm.NewIpxeTemplateDAO(mit.dbSession) + + // Fetch all existing iPXE templates for this site + filterInput := cdbm.IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{siteID}} + existingTemplates, _, err := templateDAO.GetAll(ctx, nil, filterInput, cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}) + if err != nil { + logger.Error().Err(err).Msg("Failed to get iPXE templates for Site from DB") + return err + } + + // Build a map of existing templates keyed by core template ID + existingByTemplateID := map[uuid.UUID]*cdbm.IpxeTemplate{} + for i := range existingTemplates { + existingByTemplateID[existingTemplates[i].TemplateID] = &existingTemplates[i] + } + + // Track all template IDs reported by this inventory payload + reportedTemplateIDs := map[uuid.UUID]bool{} + + if inventory.InventoryPage != nil { + logger.Info().Msgf("Received iPXE template inventory page: %d of %d, page size: %d, total count: %d", + inventory.InventoryPage.CurrentPage, inventory.InventoryPage.TotalPages, + inventory.InventoryPage.PageSize, inventory.InventoryPage.TotalItems) + + for _, idStr := range inventory.InventoryPage.ItemIds { + if tid, perr := uuid.Parse(idStr); perr == nil { + reportedTemplateIDs[tid] = true + } + } + } + + for _, reported := range inventory.GetTemplates() { + if reported == nil { + logger.Error().Msg("Received nil iPXE template entry, skipping") + continue + } + if reported.GetId() == nil || reported.GetId().GetValue() == "" { + logger.Error().Str("Name", reported.Name).Msg("Received iPXE template with empty id, skipping") + continue + } + + templateID, perr := uuid.Parse(reported.GetId().GetValue()) + if perr != nil { + logger.Error().Err(perr).Str("Name", reported.Name).Msg("Received iPXE template with invalid id, skipping") + continue + } + + // Only propagate PUBLIC templates into REST. + if reported.Scope != cwssaws.IpxeTemplateScope_PUBLIC { + logger.Debug().Str("Name", reported.Name).Str("Scope", reported.Scope.String()).Msg("Skipping non-public iPXE template") + continue + } + + reportedTemplateIDs[templateID] = true + reportedScope := ipxeScopeToString(reported.Scope) + + cur, found := existingByTemplateID[templateID] + if !found { + // Cross-site name consistency check: if any other site already has a + // template with the same ID but a different name, skip this entry. + existing, gerr := templateDAO.GetAnyByTemplateID(ctx, nil, templateID) + if gerr == nil && existing != nil && existing.Name != reported.Name { + logger.Error(). + Str("TemplateID", templateID.String()). + Str("ReportedName", reported.Name). + Str("ExistingName", existing.Name). + Str("ExistingSiteID", existing.SiteID.String()). + Msg("Template ID reused with different name across sites, skipping") + continue + } + + input := cdbm.IpxeTemplateCreateInput{ + TemplateID: templateID, + SiteID: siteID, + Name: reported.Name, + Template: reported.Template, + RequiredParams: reported.RequiredParams, + ReservedParams: reported.ReservedParams, + RequiredArtifacts: reported.RequiredArtifacts, + Scope: reportedScope, + } + if _, cerr := templateDAO.Create(ctx, nil, input); cerr != nil { + logger.Error().Err(cerr).Str("Name", reported.Name).Msg("Failed to create iPXE template in DB") + return fmt.Errorf("failed to create iPXE template %q: %w", reported.Name, cerr) + } + continue + } + + if cur.Name != reported.Name || + cur.Scope != reportedScope || + cur.Template != reported.Template || + !reflect.DeepEqual(cur.RequiredParams, reported.RequiredParams) || + !reflect.DeepEqual(cur.ReservedParams, reported.ReservedParams) || + !reflect.DeepEqual(cur.RequiredArtifacts, reported.RequiredArtifacts) { + input := cdbm.IpxeTemplateUpdateInput{ + ID: cur.ID, + Name: reported.Name, + Template: reported.Template, + RequiredParams: reported.RequiredParams, + ReservedParams: reported.ReservedParams, + RequiredArtifacts: reported.RequiredArtifacts, + Scope: reportedScope, + } + if _, uerr := templateDAO.Update(ctx, nil, input); uerr != nil { + logger.Error().Err(uerr).Str("Name", reported.Name).Msg("Failed to update iPXE template in DB") + return fmt.Errorf("failed to update iPXE template %q: %w", reported.Name, uerr) + } + } + } + + // Delete any templates present in DB but no longer reported by the Site Controller. + if inventory.InventoryPage == nil || inventory.InventoryPage.TotalPages == 0 || + inventory.InventoryPage.CurrentPage == inventory.InventoryPage.TotalPages { + for _, existing := range existingTemplates { + if reportedTemplateIDs[existing.TemplateID] { + continue + } + logger.Info().Str("Name", existing.Name).Str("TemplateID", existing.TemplateID.String()).Msg("Deleting iPXE template from DB since it was no longer reported by Site Controller") + if derr := templateDAO.Delete(ctx, nil, existing.ID); derr != nil { + logger.Error().Err(derr).Str("Name", existing.Name).Msg("Failed to delete iPXE template from DB") + return fmt.Errorf("failed to delete iPXE template %q: %w", existing.Name, derr) + } + } + } + + logger.Info().Msg("Completed activity") + return nil +} + +// NewManageIpxeTemplate returns a new ManageIpxeTemplate activity +func NewManageIpxeTemplate(dbSession *cdb.Session, siteClientPool *sc.ClientPool) ManageIpxeTemplate { + return ManageIpxeTemplate{ + dbSession: dbSession, + siteClientPool: siteClientPool, + } +} + +// ipxeScopeToString converts the IpxeTemplateScope enum from the gRPC proto +// to the lowercase string representation stored in the database. +func ipxeScopeToString(scope cwssaws.IpxeTemplateScope) string { + if scope == cwssaws.IpxeTemplateScope_PUBLIC { + return cdbm.IpxeTemplateScopePublic + } + return cdbm.IpxeTemplateScopeInternal +} diff --git a/workflow/pkg/activity/ipxetemplate/ipxetemplate_test.go b/workflow/pkg/activity/ipxetemplate/ipxetemplate_test.go new file mode 100644 index 000000000..1c8c68409 --- /dev/null +++ b/workflow/pkg/activity/ipxetemplate/ipxetemplate_test.go @@ -0,0 +1,370 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ipxetemplate + +import ( + "context" + "testing" + + "github.com/google/uuid" + "github.com/stretchr/testify/assert" + + cdb "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" + cdbm "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" + cdbp "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/paginator" + + "github.com/NVIDIA/ncx-infra-controller-rest/workflow/internal/config" + cwu "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/util" + + cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" +) + +func TestManageIpxeTemplate_Reconcile_CreateUpdateDelete(t *testing.T) { + ctx := context.Background() + _ = config.GetTestConfig() + + dbSession := cwu.TestInitDB(t) + defer dbSession.Close() + cwu.TestSetupSchema(t, dbSession) + + // Build basic graph: provider, tenant, site + ipOrg := "test-ip-org" + ipRoles := []string{"FORGE_PROVIDER_ADMIN"} + ipu := cwu.TestBuildUser(t, dbSession, uuid.NewString(), []string{ipOrg}, ipRoles) + ip := cwu.TestBuildInfrastructureProvider(t, dbSession, "test-provider", ipOrg, ipu) + site := cwu.TestBuildSite(t, dbSession, ip, "test-site", cdbm.SiteStatusRegistered, nil, ipu) + assert.NotNil(t, site) + + mit := NewManageIpxeTemplate(dbSession, cwu.TestTemporalSiteClientPool(t)) + templateDAO := cdbm.NewIpxeTemplateDAO(dbSession) + + // Stable template IDs (matching core) + kernelInitrdID := uuid.MustParse("c4b1d4f6-69ba-5f55-90cd-ab2acd002475") + ubuntuAutoinstallID := uuid.MustParse("a7850943-e3cd-5e9a-93ca-9e12f52939cc") + + // 1) Create: inventory with two PUBLIC templates + inv1 := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{ + {Id: &cwssaws.IpxeTemplateId{Value: kernelInitrdID.String()}, Name: "kernel-initrd", Scope: cwssaws.IpxeTemplateScope_PUBLIC, RequiredParams: []string{"p1"}, ReservedParams: []string{"r1"}, RequiredArtifacts: []string{"kernel"}}, + {Id: &cwssaws.IpxeTemplateId{Value: ubuntuAutoinstallID.String()}, Name: "ubuntu-autoinstall", Scope: cwssaws.IpxeTemplateScope_PUBLIC, RequiredParams: []string{}, ReservedParams: []string{}, RequiredArtifacts: []string{"iso"}}, + }, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site.ID, inv1)) + + templates, total, err := templateDAO.GetAll(ctx, nil, cdbm.IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site.ID}}, cdbp.PageInput{Limit: cdb.GetIntPtr(100)}) + assert.NoError(t, err) + assert.Equal(t, 2, total) + nameSet := map[string]bool{} + for _, tmpl := range templates { + nameSet[tmpl.Name] = true + } + assert.True(t, nameSet["kernel-initrd"]) + assert.True(t, nameSet["ubuntu-autoinstall"]) + + // 2) Update: change required params of "ubuntu-autoinstall" (still PUBLIC) + inv2 := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{ + {Id: &cwssaws.IpxeTemplateId{Value: kernelInitrdID.String()}, Name: "kernel-initrd", Scope: cwssaws.IpxeTemplateScope_PUBLIC, RequiredParams: []string{"p1"}, ReservedParams: []string{"r1"}, RequiredArtifacts: []string{"kernel"}}, + {Id: &cwssaws.IpxeTemplateId{Value: ubuntuAutoinstallID.String()}, Name: "ubuntu-autoinstall", Scope: cwssaws.IpxeTemplateScope_PUBLIC, RequiredParams: []string{"new-param"}, ReservedParams: []string{}, RequiredArtifacts: []string{"iso"}}, + }, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site.ID, inv2)) + + updated, err := templateDAO.GetBySiteAndName(ctx, nil, site.ID, "ubuntu-autoinstall") + assert.NoError(t, err) + assert.Equal(t, []string{"new-param"}, updated.RequiredParams) + + // 3) Delete: remove "ubuntu-autoinstall" from inventory + inv3 := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{ + {Id: &cwssaws.IpxeTemplateId{Value: kernelInitrdID.String()}, Name: "kernel-initrd", Scope: cwssaws.IpxeTemplateScope_PUBLIC, RequiredParams: []string{"p1"}, ReservedParams: []string{"r1"}, RequiredArtifacts: []string{"kernel"}}, + }, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site.ID, inv3)) + + _, total, err = templateDAO.GetAll(ctx, nil, cdbm.IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site.ID}}, cdbp.PageInput{Limit: cdb.GetIntPtr(100)}) + assert.NoError(t, err) + assert.Equal(t, 1, total) + + _, err = templateDAO.GetBySiteAndName(ctx, nil, site.ID, "ubuntu-autoinstall") + assert.ErrorIs(t, err, cdb.ErrDoesNotExist) +} + +func TestManageIpxeTemplate_InternalScopeFiltered(t *testing.T) { + ctx := context.Background() + _ = config.GetTestConfig() + + dbSession := cwu.TestInitDB(t) + defer dbSession.Close() + cwu.TestSetupSchema(t, dbSession) + + ipOrg := "test-ip-org" + ipRoles := []string{"FORGE_PROVIDER_ADMIN"} + ipu := cwu.TestBuildUser(t, dbSession, uuid.NewString(), []string{ipOrg}, ipRoles) + ip := cwu.TestBuildInfrastructureProvider(t, dbSession, "test-provider", ipOrg, ipu) + site := cwu.TestBuildSite(t, dbSession, ip, "test-site", cdbm.SiteStatusRegistered, nil, ipu) + + mit := NewManageIpxeTemplate(dbSession, cwu.TestTemporalSiteClientPool(t)) + templateDAO := cdbm.NewIpxeTemplateDAO(dbSession) + + publicID := uuid.MustParse("c4b1d4f6-69ba-5f55-90cd-ab2acd002475") + internalID := uuid.MustParse("a7850943-e3cd-5e9a-93ca-9e12f52939cc") + + // Inventory with one PUBLIC and one INTERNAL template + inv := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{ + {Id: &cwssaws.IpxeTemplateId{Value: publicID.String()}, Name: "public-tmpl", Scope: cwssaws.IpxeTemplateScope_PUBLIC}, + {Id: &cwssaws.IpxeTemplateId{Value: internalID.String()}, Name: "internal-tmpl", Scope: cwssaws.IpxeTemplateScope_INTERNAL}, + }, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site.ID, inv)) + + // Only the PUBLIC template should be stored + _, total, err := templateDAO.GetAll(ctx, nil, cdbm.IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site.ID}}, cdbp.PageInput{Limit: cdb.GetIntPtr(100)}) + assert.NoError(t, err) + assert.Equal(t, 1, total) + + tmpl, err := templateDAO.GetBySiteAndName(ctx, nil, site.ID, "public-tmpl") + assert.NoError(t, err) + assert.Equal(t, cdbm.IpxeTemplateScopePublic, tmpl.Scope) + + _, err = templateDAO.GetBySiteAndName(ctx, nil, site.ID, "internal-tmpl") + assert.ErrorIs(t, err, cdb.ErrDoesNotExist) +} + +func TestManageIpxeTemplate_InternalScopeDeletesExistingPublic(t *testing.T) { + ctx := context.Background() + _ = config.GetTestConfig() + + dbSession := cwu.TestInitDB(t) + defer dbSession.Close() + cwu.TestSetupSchema(t, dbSession) + + ipOrg := "test-ip-org" + ipRoles := []string{"FORGE_PROVIDER_ADMIN"} + ipu := cwu.TestBuildUser(t, dbSession, uuid.NewString(), []string{ipOrg}, ipRoles) + ip := cwu.TestBuildInfrastructureProvider(t, dbSession, "test-provider", ipOrg, ipu) + site := cwu.TestBuildSite(t, dbSession, ip, "test-site", cdbm.SiteStatusRegistered, nil, ipu) + + mit := NewManageIpxeTemplate(dbSession, cwu.TestTemporalSiteClientPool(t)) + templateDAO := cdbm.NewIpxeTemplateDAO(dbSession) + + templateID := uuid.MustParse("c4b1d4f6-69ba-5f55-90cd-ab2acd002475") + + // First sync: template is PUBLIC + inv1 := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{ + {Id: &cwssaws.IpxeTemplateId{Value: templateID.String()}, Name: "my-template", Scope: cwssaws.IpxeTemplateScope_PUBLIC}, + }, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site.ID, inv1)) + _, err := templateDAO.GetBySiteAndName(ctx, nil, site.ID, "my-template") + assert.NoError(t, err) + + // Second sync: template changed to INTERNAL — should be removed via reconciliation + inv2 := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{ + {Id: &cwssaws.IpxeTemplateId{Value: templateID.String()}, Name: "my-template", Scope: cwssaws.IpxeTemplateScope_INTERNAL}, + }, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site.ID, inv2)) + + // Template should be gone (INTERNAL filtered out, then deletion by absence) + _, total, err := templateDAO.GetAll(ctx, nil, cdbm.IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site.ID}}, cdbp.PageInput{Limit: cdb.GetIntPtr(100)}) + assert.NoError(t, err) + assert.Equal(t, 0, total) +} + +func TestManageIpxeTemplate_CrossSiteNameConflict(t *testing.T) { + ctx := context.Background() + _ = config.GetTestConfig() + + dbSession := cwu.TestInitDB(t) + defer dbSession.Close() + cwu.TestSetupSchema(t, dbSession) + + ipOrg := "test-ip-org" + ipRoles := []string{"FORGE_PROVIDER_ADMIN"} + ipu := cwu.TestBuildUser(t, dbSession, uuid.NewString(), []string{ipOrg}, ipRoles) + ip := cwu.TestBuildInfrastructureProvider(t, dbSession, "test-provider", ipOrg, ipu) + site1 := cwu.TestBuildSite(t, dbSession, ip, "site-1", cdbm.SiteStatusRegistered, nil, ipu) + site2 := cwu.TestBuildSite(t, dbSession, ip, "site-2", cdbm.SiteStatusRegistered, nil, ipu) + + mit := NewManageIpxeTemplate(dbSession, cwu.TestTemporalSiteClientPool(t)) + templateDAO := cdbm.NewIpxeTemplateDAO(dbSession) + + sharedTemplateID := uuid.MustParse("c4b1d4f6-69ba-5f55-90cd-ab2acd002475") + + // Site 1 reports template with name "kernel-initrd" + inv1 := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{ + {Id: &cwssaws.IpxeTemplateId{Value: sharedTemplateID.String()}, Name: "kernel-initrd", Scope: cwssaws.IpxeTemplateScope_PUBLIC}, + }, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site1.ID, inv1)) + + // Site 2 reports same template ID but different name — should be skipped + inv2 := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{ + {Id: &cwssaws.IpxeTemplateId{Value: sharedTemplateID.String()}, Name: "wrong-name", Scope: cwssaws.IpxeTemplateScope_PUBLIC}, + }, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site2.ID, inv2)) + + // Site 2 should have no templates (the conflicting one was skipped) + _, total, err := templateDAO.GetAll(ctx, nil, cdbm.IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site2.ID}}, cdbp.PageInput{Limit: cdb.GetIntPtr(100)}) + assert.NoError(t, err) + assert.Equal(t, 0, total) + + // Site 1 template should still be intact + tmpl, err := templateDAO.GetBySiteAndName(ctx, nil, site1.ID, "kernel-initrd") + assert.NoError(t, err) + assert.Equal(t, sharedTemplateID, tmpl.TemplateID) + + // Site 2 reports same template ID with correct name — should succeed + inv3 := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{ + {Id: &cwssaws.IpxeTemplateId{Value: sharedTemplateID.String()}, Name: "kernel-initrd", Scope: cwssaws.IpxeTemplateScope_PUBLIC}, + }, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site2.ID, inv3)) + + _, total, err = templateDAO.GetAll(ctx, nil, cdbm.IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site2.ID}}, cdbp.PageInput{Limit: cdb.GetIntPtr(100)}) + assert.NoError(t, err) + assert.Equal(t, 1, total) +} + +func TestManageIpxeTemplate_InventoryStatusFailed_Skip(t *testing.T) { + ctx := context.Background() + _ = config.GetTestConfig() + + dbSession := cwu.TestInitDB(t) + defer dbSession.Close() + cwu.TestSetupSchema(t, dbSession) + + ipOrg := "test-ip-org" + ipRoles := []string{"FORGE_PROVIDER_ADMIN"} + ipu := cwu.TestBuildUser(t, dbSession, uuid.NewString(), []string{ipOrg}, ipRoles) + ip := cwu.TestBuildInfrastructureProvider(t, dbSession, "test-provider", ipOrg, ipu) + site := cwu.TestBuildSite(t, dbSession, ip, "test-site", cdbm.SiteStatusRegistered, nil, ipu) + + // Seed one template + templateDAO := cdbm.NewIpxeTemplateDAO(dbSession) + _, err := templateDAO.Create(ctx, nil, cdbm.IpxeTemplateCreateInput{ + TemplateID: uuid.New(), + SiteID: site.ID, + Name: "existing-template", + Scope: cdbm.IpxeTemplateScopePublic, + }) + assert.NoError(t, err) + + mit := NewManageIpxeTemplate(dbSession, cwu.TestTemporalSiteClientPool(t)) + + // Send a failed inventory — nothing should change + inv := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_FAILED, + Templates: []*cwssaws.IpxeTemplate{{Id: &cwssaws.IpxeTemplateId{Value: uuid.NewString()}, Name: "other-template", Scope: cwssaws.IpxeTemplateScope_PUBLIC}}, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site.ID, inv)) + + _, total, err := templateDAO.GetAll(ctx, nil, cdbm.IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site.ID}}, cdbp.PageInput{Limit: cdb.GetIntPtr(100)}) + assert.NoError(t, err) + assert.Equal(t, 1, total) +} + +func TestManageIpxeTemplate_NilInventory(t *testing.T) { + ctx := context.Background() + _ = config.GetTestConfig() + + dbSession := cwu.TestInitDB(t) + defer dbSession.Close() + cwu.TestSetupSchema(t, dbSession) + + ipOrg := "test-ip-org" + ipRoles := []string{"FORGE_PROVIDER_ADMIN"} + ipu := cwu.TestBuildUser(t, dbSession, uuid.NewString(), []string{ipOrg}, ipRoles) + ip := cwu.TestBuildInfrastructureProvider(t, dbSession, "test-provider", ipOrg, ipu) + site := cwu.TestBuildSite(t, dbSession, ip, "test-site", cdbm.SiteStatusRegistered, nil, ipu) + + mit := NewManageIpxeTemplate(dbSession, cwu.TestTemporalSiteClientPool(t)) + + err := mit.UpdateIpxeTemplatesInDB(ctx, site.ID, nil) + assert.Error(t, err) +} + +func TestManageIpxeTemplate_EmptyInventory_DeletesAll(t *testing.T) { + ctx := context.Background() + _ = config.GetTestConfig() + + dbSession := cwu.TestInitDB(t) + defer dbSession.Close() + cwu.TestSetupSchema(t, dbSession) + + ipOrg := "test-ip-org" + ipRoles := []string{"FORGE_PROVIDER_ADMIN"} + ipu := cwu.TestBuildUser(t, dbSession, uuid.NewString(), []string{ipOrg}, ipRoles) + ip := cwu.TestBuildInfrastructureProvider(t, dbSession, "test-provider", ipOrg, ipu) + site := cwu.TestBuildSite(t, dbSession, ip, "test-site", cdbm.SiteStatusRegistered, nil, ipu) + + // Seed templates + templateDAO := cdbm.NewIpxeTemplateDAO(dbSession) + for _, name := range []string{"tmpl-a", "tmpl-b"} { + _, err := templateDAO.Create(ctx, nil, cdbm.IpxeTemplateCreateInput{TemplateID: uuid.New(), SiteID: site.ID, Name: name, Scope: cdbm.IpxeTemplateScopePublic}) + assert.NoError(t, err) + } + + mit := NewManageIpxeTemplate(dbSession, cwu.TestTemporalSiteClientPool(t)) + + // Empty success inventory should delete all + inv := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{}, + } + assert.NoError(t, mit.UpdateIpxeTemplatesInDB(ctx, site.ID, inv)) + + _, total, err := templateDAO.GetAll(ctx, nil, cdbm.IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site.ID}}, cdbp.PageInput{Limit: cdb.GetIntPtr(100)}) + assert.NoError(t, err) + assert.Equal(t, 0, total) +} + +func TestManageIpxeTemplate_UnknownSite(t *testing.T) { + ctx := context.Background() + _ = config.GetTestConfig() + + dbSession := cwu.TestInitDB(t) + defer dbSession.Close() + cwu.TestSetupSchema(t, dbSession) + + mit := NewManageIpxeTemplate(dbSession, cwu.TestTemporalSiteClientPool(t)) + + inv := &cwssaws.IpxeTemplateInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Templates: []*cwssaws.IpxeTemplate{{Id: &cwssaws.IpxeTemplateId{Value: uuid.NewString()}, Name: "kernel-initrd", Scope: cwssaws.IpxeTemplateScope_PUBLIC}}, + } + err := mit.UpdateIpxeTemplatesInDB(ctx, uuid.New(), inv) + assert.Error(t, err) +} diff --git a/workflow/pkg/activity/operatingsystem/operatingsystem.go b/workflow/pkg/activity/operatingsystem/operatingsystem.go index 3d3546d1b..1c1179fe4 100644 --- a/workflow/pkg/activity/operatingsystem/operatingsystem.go +++ b/workflow/pkg/activity/operatingsystem/operatingsystem.go @@ -20,6 +20,7 @@ package operatingsystem import ( "context" "database/sql" + "errors" "time" "github.com/google/uuid" @@ -425,3 +426,384 @@ func NewManageOsImage(dbSession *cdb.Session, siteClientPool *sc.ClientPool) Man siteClientPool: siteClientPool, } } + +// ManageOperatingSystemSync is an activity wrapper for managing carbide-core Operating System inventory. +// carbide-core and carbide-rest share the same UUID as the primary key (os.id = carbide-core id). +// Conflict resolution is timestamp-based: the side with the most recent updated (or deleted) +// timestamp is the source of truth. +type ManageOperatingSystemSync struct { + dbSession *cdb.Session + siteClientPool *sc.ClientPool +} + +// UpdateOperatingSystemsInDB reconciles the operating_system table for a Site based on Operating Systems +// reported by carbide-core via the inventory workflow. +func (mod ManageOperatingSystemSync) UpdateOperatingSystemsInDB(ctx context.Context, siteID uuid.UUID, inventory *cwssaws.OperatingSystemInventory) error { + logger := log.With().Str("Activity", "UpdateOperatingSystemsInDB").Str("Site ID", siteID.String()).Logger() + logger.Info().Msg("Starting activity") + + if inventory == nil { + return errors.New("UpdateOperatingSystemsInDB called with nil inventory") + } + if inventory.InventoryStatus == cwssaws.InventoryStatus_INVENTORY_STATUS_FAILED { + logger.Warn().Msg("Received failed inventory status from Site Agent, skipping") + return nil + } + + stDAO := cdbm.NewSiteDAO(mod.dbSession) + site, err := stDAO.GetByID(ctx, nil, siteID, nil, false) + if err != nil { + if errors.Is(err, cdb.ErrDoesNotExist) { + logger.Warn().Err(err).Msg("Received inventory for unknown or deleted Site") + } else { + logger.Error().Err(err).Msg("Failed to retrieve Site from DB") + } + return err + } + + // OSes that originate in carbide-core are owned by the infrastructure provider, not by + // any individual tenant. We tag them with the site's InfrastructureProviderID so that + // ProviderAdmin can update them and all tenants of that provider can read them. + siteProviderID := site.InfrastructureProviderID + logger.Debug().Str("infrastructure_provider_id", siteProviderID.String()).Msg("Resolved infrastructure provider from site") + + // Resolve the carbide-rest org for this site (best-effort, used for display only). + // carbide-core's TenantOrganizationId may use a different name than carbide-rest, so we + // look up the TenantSite association instead of trusting the reported org field. + tsDAO := cdbm.NewTenantSiteDAO(mod.dbSession) + tenantSites, _, tsErr := tsDAO.GetAll(ctx, nil, cdbm.TenantSiteFilterInput{ + SiteIDs: []uuid.UUID{siteID}, + }, cdbp.PageInput{Limit: cdb.GetIntPtr(1)}, nil) + + var localOrg string + if tsErr == nil && len(tenantSites) > 0 { + localOrg = tenantSites[0].TenantOrg + logger.Debug().Str("org", localOrg).Msg("Resolved org from TenantSite") + } + + osDAO := cdbm.NewOperatingSystemDAO(mod.dbSession) + + // Collect the UUIDs of all reported OS records (active only — the new Find APIs do not + // return deleted records). carbide-core and carbide-rest share the same UUID as PK. + reportedIDSet := make(map[uuid.UUID]struct{}, len(inventory.GetOperatingSystems())) + reportedIDList := make([]uuid.UUID, 0, len(inventory.GetOperatingSystems())) + for _, reported := range inventory.GetOperatingSystems() { + if reported == nil || reported.GetId().GetValue() == "" { + continue + } + id, parseErr := uuid.Parse(reported.GetId().GetValue()) + if parseErr != nil { + logger.Error().Err(parseErr).Str("ID", reported.GetId().GetValue()).Msg("Received OS with invalid UUID, skipping") + continue + } + if _, dup := reportedIDSet[id]; !dup { + reportedIDSet[id] = struct{}{} + reportedIDList = append(reportedIDList, id) + } + } + + // Fetch DB records matching the reported IDs (including soft-deleted so we can detect + // the case where carbide-rest already deleted an OS that carbide-core still reports active). + existingOSes, _, err := osDAO.GetAll(ctx, nil, cdbm.OperatingSystemFilterInput{ + OperatingSystemIds: reportedIDList, + IncludeDeleted: true, + }, cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, nil) + if err != nil { + logger.Error().Err(err).Msg("Failed to get Operating Systems from DB") + return err + } + + existingByID := map[uuid.UUID]*cdbm.OperatingSystem{} + for i := range existingOSes { + existingByID[existingOSes[i].ID] = &existingOSes[i] + } + + // Track global/limited OS IDs that need aggregate status recomputation. + globalLimitedOSIDs := map[uuid.UUID]struct{}{} + + // Create or update OSes based on the carbide-core inventory. + for _, reported := range inventory.GetOperatingSystems() { + if reported == nil || reported.GetId().GetValue() == "" { + continue + } + + osID, parseErr := uuid.Parse(reported.GetId().GetValue()) + if parseErr != nil { + continue + } + + coreUpdated, _ := time.Parse(time.RFC3339, reported.Updated) + params := protoParamsToModel(reported.IpxeTemplateParameters) + artifacts := protoArtifactsToModel(reported.IpxeTemplateArtifacts) + osType := osTypeToString(reported.Type) + + cur, found := existingByID[osID] + if !found { + // Templated iPXE OS: verify the referenced template is available at this site + // before creating the OS record. Skip silently if not available. + if osType == cdbm.OperatingSystemTypeTemplatedIPXE && reported.IpxeTemplateId != nil { + tmplUUID, parseErr := uuid.Parse(reported.IpxeTemplateId.Value) + if parseErr != nil { + logger.Error().Err(parseErr).Str("ID", osID.String()).Str("TemplateId", reported.IpxeTemplateId.Value). + Msg("invalid iPXE template UUID in OS definition") + return parseErr + } + ipxeTmplDAO := cdbm.NewIpxeTemplateDAO(mod.dbSession) + if _, tmplErr := ipxeTmplDAO.GetBySiteAndTemplateID(ctx, nil, siteID, tmplUUID); tmplErr != nil { + if errors.Is(tmplErr, cdb.ErrDoesNotExist) { + logger.Warn().Str("ID", osID.String()).Str("TemplateId", reported.IpxeTemplateId.Value). + Msg("iPXE template not available at site, skipping OS creation") + continue + } + logger.Error().Err(tmplErr).Str("ID", osID.String()).Msg("Error checking iPXE template availability at site") + return tmplErr + } + } + + // New OS from carbide-core: create it with the site's InfrastructureProviderID. + // OSes originating in carbide-core are provider-owned (not tenant-owned): ProviderAdmin + // can update them and all tenants of the provider can read them via the OR filter. + if _, cerr := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ + ID: osID, + Name: reported.Name, + Org: localOrg, + TenantID: nil, + InfrastructureProviderID: &siteProviderID, + OsType: osType, + Description: reported.Description, + UserData: reported.UserData, + IpxeScript: reported.IpxeScript, + AllowOverride: reported.AllowOverride, + PhoneHomeEnabled: reported.PhoneHomeEnabled, + IpxeTemplateId: protoTemplateIdToString(reported.IpxeTemplateId), + IpxeTemplateParameters: params, + IpxeTemplateArtifacts: artifacts, + IpxeOSHash: reported.IpxeTemplateDefinitionHash, + Status: tenantStateToRestStatus(reported.Status), + }); cerr != nil { + logger.Error().Err(cerr).Str("ID", reported.GetId().GetValue()).Msg("Failed to create Operating System in DB") + } else if !reported.IsActive { + // bun ORM hardcodes is_active=true on INSERT; correct it with an update. + inactive := false + if _, uerr := osDAO.Update(ctx, nil, cdbm.OperatingSystemUpdateInput{ + OperatingSystemId: osID, + IsActive: &inactive, + }); uerr != nil { + logger.Error().Err(uerr).Str("ID", reported.GetId().GetValue()).Msg("Failed to set is_active=false after create") + return uerr + } + } + continue + } + + // carbide-rest has already soft-deleted this OS (user-initiated via subscriber workflow). + // Do not restore it even if carbide-core still reports it as active (the delete push + // to carbide-core may be in-flight). + if cur.Deleted != nil { + continue + } + + // For global- or limited-scoped OSes, carbide-rest is the source of truth + // for the OS definition. However, we still need to record the per-site + // operational status (ControllerState) on the OSSA and aggregate the overall + // OS status from all site statuses. + if cur.IpxeOsScope != nil && *cur.IpxeOsScope != cdbm.OperatingSystemScopeLocal { + controllerState := tenantStateToRestStatus(reported.Status) + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(mod.dbSession) + ossa, ossaErr := ossaDAO.GetByOperatingSystemIDAndSiteID(ctx, nil, osID, siteID, nil) + if ossaErr != nil { + if !errors.Is(ossaErr, cdb.ErrDoesNotExist) { + logger.Error().Err(ossaErr).Str("osID", osID.String()).Msg("Failed to look up OSSA for global/limited OS") + return ossaErr + } + } else if ossa != nil { + if _, uerr := ossaDAO.Update(ctx, nil, cdbm.OperatingSystemSiteAssociationUpdateInput{ + OperatingSystemSiteAssociationID: ossa.ID, + ControllerState: &controllerState, + }); uerr != nil { + logger.Error().Err(uerr).Str("osID", osID.String()).Msg("Failed to update OSSA controller_state") + } else { + globalLimitedOSIDs[osID] = struct{}{} + } + } + continue + } + + // Both sides are active — update carbide-rest only when carbide-core is newer. + // Backfill: older records may have been created with tenant_id set and no + // infrastructure_provider_id (before this ownership model was established). + needsProviderBackfill := cur.InfrastructureProviderID == nil + needsOrgBackfill := cur.Org == "" && localOrg != "" + needsIsActiveCorrection := cur.IsActive != reported.IsActive + needsTenantClear := cur.TenantID != nil + if coreUpdated.After(cur.Updated) || needsProviderBackfill || needsOrgBackfill || needsIsActiveCorrection || needsTenantClear { + controllerState := tenantStateToRestStatus(reported.Status) + updateInput := cdbm.OperatingSystemUpdateInput{ + OperatingSystemId: cur.ID, + Name: &reported.Name, + Org: &localOrg, + TenantID: nil, + InfrastructureProviderID: &siteProviderID, + OsType: &osType, + Description: reported.Description, + UserData: reported.UserData, + IpxeScript: reported.IpxeScript, + AllowOverride: &reported.AllowOverride, + PhoneHomeEnabled: &reported.PhoneHomeEnabled, + IsActive: &reported.IsActive, + IpxeTemplateId: protoTemplateIdToString(reported.IpxeTemplateId), + IpxeTemplateParameters: ¶ms, + IpxeTemplateArtifacts: &artifacts, + IpxeOSHash: reported.IpxeTemplateDefinitionHash, + Status: &controllerState, + } + if _, uerr := osDAO.Update(ctx, nil, updateInput); uerr != nil { + logger.Error().Err(uerr).Str("ID", reported.GetId().GetValue()).Msg("Failed to update Operating System in DB") + continue + } + // Backfill: if the record previously had a tenant_id (old ownership model), clear it. + // Provider-owned OSes must not have tenant_id set. + if cur.TenantID != nil { + if _, cerr := osDAO.Clear(ctx, nil, cdbm.OperatingSystemClearInput{ + OperatingSystemId: cur.ID, + TenantID: true, + }); cerr != nil { + logger.Error().Err(cerr).Str("ID", reported.GetId().GetValue()).Msg("Failed to clear tenant_id from provider-owned OS") + return cerr + } + } + } + } + + // Deletion propagation: carbide-core's Find APIs return only active records, so any iPXE OS + // in our DB that is NOT in this inventory was deleted in carbide-core. Soft-delete it here. + // Image-based OSes are not managed by this inventory, so we restrict to iPXE types only. + // Exception: global- and limited-scoped OSes are owned by carbide-rest and must not be + // deleted based on carbide-core's inventory (carbide-core is not their source of truth). + allIpxeOSes, _, err := osDAO.GetAll(ctx, nil, cdbm.OperatingSystemFilterInput{ + OsTypes: []string{cdbm.OperatingSystemTypeIPXE, cdbm.OperatingSystemTypeTemplatedIPXE}, + InfrastructureProviderID: &siteProviderID, + }, cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, nil) + if err != nil { + logger.Error().Err(err).Msg("Failed to fetch iPXE Operating Systems from DB for deletion reconciliation") + return err + } + for _, dbOS := range allIpxeOSes { + if dbOS.IpxeOsScope != nil && *dbOS.IpxeOsScope != cdbm.OperatingSystemScopeLocal { + continue + } + if _, inCore := reportedIDSet[dbOS.ID]; !inCore { + logger.Info().Str("ID", dbOS.ID.String()).Msg("Soft-deleting iPXE OS absent from carbide-core inventory") + if derr := osDAO.Delete(ctx, nil, dbOS.ID); derr != nil { + logger.Error().Err(derr).Str("ID", dbOS.ID.String()).Msg("Failed to soft-delete OS") + } + } + } + + // Aggregate status for global/limited OSes from their per-site core statuses. + // Rule: all sites READY -> OS READY; any site not READY -> OS PROVISIONING. + if len(globalLimitedOSIDs) > 0 { + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(mod.dbSession) + for osID := range globalLimitedOSIDs { + ossas, _, gerr := ossaDAO.GetAll(ctx, nil, cdbm.OperatingSystemSiteAssociationFilterInput{ + OperatingSystemIDs: []uuid.UUID{osID}, + }, cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, nil) + if gerr != nil { + logger.Error().Err(gerr).Str("osID", osID.String()).Msg("Failed to fetch OSSAs for aggregate status") + continue + } + allReady := true + for _, o := range ossas { + if o.ControllerState == nil || *o.ControllerState != cdbm.OperatingSystemStatusReady { + allReady = false + break + } + } + aggregatedStatus := cdbm.OperatingSystemStatusProvisioning + if allReady && len(ossas) > 0 { + aggregatedStatus = cdbm.OperatingSystemStatusReady + } + if _, uerr := osDAO.Update(ctx, nil, cdbm.OperatingSystemUpdateInput{ + OperatingSystemId: osID, + Status: &aggregatedStatus, + }); uerr != nil { + logger.Error().Err(uerr).Str("osID", osID.String()).Msg("Failed to update aggregate OS status") + } + } + } + + logger.Info().Msg("Completed activity") + return nil +} + +// NewManageOperatingSystemSync returns a new ManageOperatingSystemSync activity +func NewManageOperatingSystemSync(dbSession *cdb.Session, siteClientPool *sc.ClientPool) ManageOperatingSystemSync { + return ManageOperatingSystemSync{ + dbSession: dbSession, + siteClientPool: siteClientPool, + } +} + +// tenantStateToRestStatus maps carbide-core's TenantState to the REST OperatingSystem status string. +func tenantStateToRestStatus(s cwssaws.TenantState) string { + switch s { + case cwssaws.TenantState_READY: + return cdbm.OperatingSystemStatusReady + case cwssaws.TenantState_FAILED: + return cdbm.OperatingSystemStatusError + default: + return cdbm.OperatingSystemStatusProvisioning + } +} + +// osTypeToString maps carbide-core's OperatingSystemType enum to the DB type string. +func osTypeToString(t cwssaws.OperatingSystemType) string { + switch t { + case cwssaws.OperatingSystemType_OS_TYPE_TEMPLATED_IPXE: + return cdbm.OperatingSystemTypeTemplatedIPXE + case cwssaws.OperatingSystemType_OS_TYPE_IPXE: + return cdbm.OperatingSystemTypeIPXE + default: + return cdbm.OperatingSystemTypeIPXE + } +} + +// protoTemplateIdToString extracts the UUID string from a proto IpxeTemplateId message, or nil. +func protoTemplateIdToString(id *cwssaws.IpxeTemplateId) *string { + if id == nil { + return nil + } + v := id.Value + return &v +} + +// protoParamsToModel converts proto IpxeTemplateParameter slice to DB model slice +func protoParamsToModel(params []*cwssaws.IpxeTemplateParameter) []cdbm.OperatingSystemIpxeParameter { + result := make([]cdbm.OperatingSystemIpxeParameter, 0, len(params)) + for _, p := range params { + if p == nil { + continue + } + result = append(result, cdbm.OperatingSystemIpxeParameter{Name: p.Name, Value: p.Value}) + } + return result +} + +// protoArtifactsToModel converts proto IpxeTemplateArtifact slice to DB model slice +func protoArtifactsToModel(artifacts []*cwssaws.IpxeTemplateArtifact) []cdbm.OperatingSystemIpxeArtifact { + result := make([]cdbm.OperatingSystemIpxeArtifact, 0, len(artifacts)) + for _, a := range artifacts { + if a == nil { + continue + } + result = append(result, cdbm.OperatingSystemIpxeArtifact{ + Name: a.Name, + URL: a.Url, + SHA: a.Sha, + AuthType: a.AuthType, + AuthToken: a.AuthToken, + CacheStrategy: a.GetCacheStrategy().String(), + }) + } + return result +} diff --git a/workflow/pkg/activity/operatingsystem/operatingsystem_test.go b/workflow/pkg/activity/operatingsystem/operatingsystem_test.go index 29ded4356..f577fa376 100644 --- a/workflow/pkg/activity/operatingsystem/operatingsystem_test.go +++ b/workflow/pkg/activity/operatingsystem/operatingsystem_test.go @@ -19,8 +19,10 @@ package operatingsystem import ( "context" + "os" "reflect" "testing" + "time" cdb "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" cdbm "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" @@ -35,8 +37,6 @@ import ( "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/util" "google.golang.org/protobuf/types/known/timestamppb" - "os" - tmocks "go.temporal.io/sdk/mocks" "go.temporal.io/sdk/testsuite" @@ -337,6 +337,277 @@ func TestManageOsImage_UpdateOsImageInDB(t *testing.T) { } } +func TestManageOperatingSystemSync_UpdateOperatingSystemsInDB(t *testing.T) { + dbSession := util.TestInitDB(t) + defer dbSession.Close() + + util.TestSetupSchema(t, dbSession) + + ipOrg := "test-provider-org" + ipRoles := []string{"FORGE_PROVIDER_ADMIN"} + ipu := util.TestBuildUser(t, dbSession, uuid.NewString(), []string{ipOrg}, ipRoles) + ip := util.TestBuildInfrastructureProvider(t, dbSession, "test-provider", ipOrg, ipu) + + tnOrg := "test-tenant-org" + tnRoles := []string{"FORGE_TENANT_ADMIN"} + tnu := util.TestBuildUser(t, dbSession, uuid.NewString(), []string{tnOrg}, tnRoles) + tn := util.TestBuildTenant(t, dbSession, "test-tenant", tnOrg, nil, tnu) + + st := util.TestBuildSite(t, dbSession, ip, "sync-site", cdbm.SiteStatusRegistered, nil, ipu) + assert.NotNil(t, st) + + util.TestBuildTenantSiteAssociation(t, dbSession, tnOrg, tn.ID, st.ID, ipu.ID) + + tSiteClientPool := util.TestTemporalSiteClientPool(t) + syncManager := NewManageOperatingSystemSync(dbSession, tSiteClientPool) + + t.Run("nil inventory returns error", func(t *testing.T) { + err := syncManager.UpdateOperatingSystemsInDB(context.Background(), st.ID, nil) + assert.Error(t, err) + }) + + t.Run("failed inventory status is skipped", func(t *testing.T) { + inv := &cwssaws.OperatingSystemInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_FAILED, + } + err := syncManager.UpdateOperatingSystemsInDB(context.Background(), st.ID, inv) + assert.NoError(t, err) + }) + + t.Run("creates new OS from core inventory", func(t *testing.T) { + newID := uuid.New() + now := timestamppb.Now() + inv := &cwssaws.OperatingSystemInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Timestamp: now, + OperatingSystems: []*cwssaws.OperatingSystem{ + { + Id: &cwssaws.OperatingSystemId{Value: newID.String()}, + Name: "core-os-create-test", + TenantOrganizationId: tnOrg, + Type: cwssaws.OperatingSystemType_OS_TYPE_IPXE, + Status: cwssaws.TenantState_READY, + IsActive: true, + AllowOverride: true, + PhoneHomeEnabled: false, + Created: now.AsTime().Format("2006-01-02T15:04:05Z07:00"), + Updated: now.AsTime().Format("2006-01-02T15:04:05Z07:00"), + }, + }, + } + err := syncManager.UpdateOperatingSystemsInDB(context.Background(), st.ID, inv) + assert.NoError(t, err) + + osDAO := cdbm.NewOperatingSystemDAO(dbSession) + created, getErr := osDAO.GetByID(context.Background(), nil, newID, nil) + assert.NoError(t, getErr) + assert.Equal(t, "core-os-create-test", created.Name) + assert.Equal(t, cdbm.OperatingSystemStatusReady, created.Status) + assert.NotNil(t, created.InfrastructureProviderID) + assert.Equal(t, ip.ID, *created.InfrastructureProviderID) + assert.Nil(t, created.TenantID) + }) + + t.Run("updates existing OS when core is newer", func(t *testing.T) { + existingID := uuid.New() + existingOS := &cdbm.OperatingSystem{ + ID: existingID, + Name: "existing-os-old", + Org: tnOrg, + InfrastructureProviderID: &ip.ID, + Type: cdbm.OperatingSystemTypeIPXE, + Status: cdbm.OperatingSystemStatusProvisioning, + IsActive: true, + CreatedBy: ipu.ID, + } + _, err := dbSession.DB.NewInsert().Model(existingOS).Exec(context.Background()) + assert.NoError(t, err) + + futureTime := timestamppb.Now() + inv := &cwssaws.OperatingSystemInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Timestamp: futureTime, + OperatingSystems: []*cwssaws.OperatingSystem{ + { + Id: &cwssaws.OperatingSystemId{Value: existingID.String()}, + Name: "existing-os-updated", + TenantOrganizationId: tnOrg, + Type: cwssaws.OperatingSystemType_OS_TYPE_IPXE, + Status: cwssaws.TenantState_READY, + IsActive: true, + AllowOverride: true, + PhoneHomeEnabled: true, + Created: futureTime.AsTime().Format("2006-01-02T15:04:05Z07:00"), + Updated: futureTime.AsTime().Add(1 * time.Second).Format("2006-01-02T15:04:05Z07:00"), + }, + }, + } + err = syncManager.UpdateOperatingSystemsInDB(context.Background(), st.ID, inv) + assert.NoError(t, err) + + osDAO := cdbm.NewOperatingSystemDAO(dbSession) + updated, getErr := osDAO.GetByID(context.Background(), nil, existingID, nil) + assert.NoError(t, getErr) + assert.Equal(t, "existing-os-updated", updated.Name) + assert.Equal(t, cdbm.OperatingSystemStatusReady, updated.Status) + assert.True(t, updated.PhoneHomeEnabled) + }) + + t.Run("skips global-scoped OS definition update but records core status", func(t *testing.T) { + globalID := uuid.New() + scopeGlobal := cdbm.OperatingSystemScopeGlobal + globalOS := &cdbm.OperatingSystem{ + ID: globalID, + Name: "global-os-original", + Org: tnOrg, + InfrastructureProviderID: &ip.ID, + Type: cdbm.OperatingSystemTypeIPXE, + Status: cdbm.OperatingSystemStatusProvisioning, + IsActive: true, + IpxeOsScope: &scopeGlobal, + CreatedBy: ipu.ID, + } + _, err := dbSession.DB.NewInsert().Model(globalOS).Exec(context.Background()) + assert.NoError(t, err) + + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(dbSession) + _, ossaErr := ossaDAO.Create(context.Background(), nil, cdbm.OperatingSystemSiteAssociationCreateInput{ + OperatingSystemID: globalID, + SiteID: st.ID, + Status: cdbm.OperatingSystemStatusProvisioning, + CreatedBy: ipu.ID, + }) + assert.NoError(t, ossaErr) + + futureTime := timestamppb.Now() + inv := &cwssaws.OperatingSystemInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Timestamp: futureTime, + OperatingSystems: []*cwssaws.OperatingSystem{ + { + Id: &cwssaws.OperatingSystemId{Value: globalID.String()}, + Name: "global-os-changed-in-core", + TenantOrganizationId: tnOrg, + Type: cwssaws.OperatingSystemType_OS_TYPE_IPXE, + Status: cwssaws.TenantState_READY, + IsActive: true, + Created: futureTime.AsTime().Format("2006-01-02T15:04:05Z07:00"), + Updated: futureTime.AsTime().Add(1 * time.Second).Format("2006-01-02T15:04:05Z07:00"), + }, + }, + } + err = syncManager.UpdateOperatingSystemsInDB(context.Background(), st.ID, inv) + assert.NoError(t, err) + + osDAO := cdbm.NewOperatingSystemDAO(dbSession) + unchanged, getErr := osDAO.GetByID(context.Background(), nil, globalID, nil) + assert.NoError(t, getErr) + assert.Equal(t, "global-os-original", unchanged.Name, "global OS name should not be overwritten by core") + assert.Equal(t, cdbm.OperatingSystemStatusReady, unchanged.Status, "aggregate status should be updated to READY") + }) + + t.Run("soft-deletes local OS absent from core inventory", func(t *testing.T) { + absentID := uuid.New() + absentOS := &cdbm.OperatingSystem{ + ID: absentID, + Name: "absent-os", + Org: tnOrg, + InfrastructureProviderID: &ip.ID, + Type: cdbm.OperatingSystemTypeIPXE, + Status: cdbm.OperatingSystemStatusReady, + IsActive: true, + CreatedBy: ipu.ID, + } + _, err := dbSession.DB.NewInsert().Model(absentOS).Exec(context.Background()) + assert.NoError(t, err) + + inv := &cwssaws.OperatingSystemInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Timestamp: timestamppb.Now(), + OperatingSystems: []*cwssaws.OperatingSystem{}, + } + err = syncManager.UpdateOperatingSystemsInDB(context.Background(), st.ID, inv) + assert.NoError(t, err) + + osDAO := cdbm.NewOperatingSystemDAO(dbSession) + _, getErr := osDAO.GetByID(context.Background(), nil, absentID, nil) + assert.Error(t, getErr, "absent OS should be soft-deleted and not found") + }) + + t.Run("does NOT soft-delete global-scoped OS absent from core inventory", func(t *testing.T) { + globalAbsentID := uuid.New() + scopeGlobal := cdbm.OperatingSystemScopeGlobal + globalAbsentOS := &cdbm.OperatingSystem{ + ID: globalAbsentID, + Name: "global-absent-os", + Org: tnOrg, + InfrastructureProviderID: &ip.ID, + Type: cdbm.OperatingSystemTypeIPXE, + Status: cdbm.OperatingSystemStatusReady, + IsActive: true, + IpxeOsScope: &scopeGlobal, + CreatedBy: ipu.ID, + } + _, err := dbSession.DB.NewInsert().Model(globalAbsentOS).Exec(context.Background()) + assert.NoError(t, err) + + inv := &cwssaws.OperatingSystemInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Timestamp: timestamppb.Now(), + OperatingSystems: []*cwssaws.OperatingSystem{}, + } + err = syncManager.UpdateOperatingSystemsInDB(context.Background(), st.ID, inv) + assert.NoError(t, err) + + osDAO := cdbm.NewOperatingSystemDAO(dbSession) + stillExists, getErr := osDAO.GetByID(context.Background(), nil, globalAbsentID, nil) + assert.NoError(t, getErr, "global-scoped OS must NOT be deleted by reconciliation-by-absence") + assert.Equal(t, "global-absent-os", stillExists.Name) + }) + + t.Run("does not restore soft-deleted OS even if core reports it", func(t *testing.T) { + deletedID := uuid.New() + deletedTime := time.Now().Add(-1 * time.Hour) + deletedOS := &cdbm.OperatingSystem{ + ID: deletedID, + Name: "already-deleted-os", + Org: tnOrg, + InfrastructureProviderID: &ip.ID, + Type: cdbm.OperatingSystemTypeIPXE, + Status: cdbm.OperatingSystemStatusReady, + IsActive: true, + Deleted: &deletedTime, + CreatedBy: ipu.ID, + } + _, err := dbSession.DB.NewInsert().Model(deletedOS).Exec(context.Background()) + assert.NoError(t, err) + + futureTime := timestamppb.Now() + inv := &cwssaws.OperatingSystemInventory{ + InventoryStatus: cwssaws.InventoryStatus_INVENTORY_STATUS_SUCCESS, + Timestamp: futureTime, + OperatingSystems: []*cwssaws.OperatingSystem{ + { + Id: &cwssaws.OperatingSystemId{Value: deletedID.String()}, + Name: "already-deleted-os", + TenantOrganizationId: tnOrg, + Type: cwssaws.OperatingSystemType_OS_TYPE_IPXE, + Status: cwssaws.TenantState_READY, + IsActive: true, + Created: futureTime.AsTime().Format("2006-01-02T15:04:05Z07:00"), + Updated: futureTime.AsTime().Format("2006-01-02T15:04:05Z07:00"), + }, + }, + } + err = syncManager.UpdateOperatingSystemsInDB(context.Background(), st.ID, inv) + assert.NoError(t, err) + + osDAO := cdbm.NewOperatingSystemDAO(dbSession) + _, getErr := osDAO.GetByID(context.Background(), nil, deletedID, nil) + assert.Error(t, getErr, "soft-deleted OS should remain deleted even when core reports it active") + }) +} + func TestManageOsImage_UpdateOperatingSystemStatusInDB(t *testing.T) { dbSession := util.TestInitDB(t) defer dbSession.Close() diff --git a/workflow/pkg/activity/operatingsystem/push.go b/workflow/pkg/activity/operatingsystem/push.go new file mode 100644 index 000000000..0a5e695eb --- /dev/null +++ b/workflow/pkg/activity/operatingsystem/push.go @@ -0,0 +1,527 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package operatingsystem + +import ( + "context" + "errors" + + "github.com/google/uuid" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" + + "go.temporal.io/sdk/client" + tp "go.temporal.io/sdk/temporal" + + cdb "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" + cdbm "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/model" + cdbp "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db/paginator" + + sc "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/client/site" + "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/queue" + + cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" + + swe "github.com/NVIDIA/ncx-infra-controller-rest/site-workflow/pkg/error" + + cwutil "github.com/NVIDIA/ncx-infra-controller-rest/common/pkg/util" +) + +// ManageOperatingSystemPush is an activity wrapper for pushing Operating System +// changes (create/update/delete) from REST to carbide-core via per-site workflows. +type ManageOperatingSystemPush struct { + dbSession *cdb.Session + siteClientPool *sc.ClientPool +} + +// NewManageOperatingSystemPush returns a new ManageOperatingSystemPush activity. +func NewManageOperatingSystemPush(dbSession *cdb.Session, siteClientPool *sc.ClientPool) ManageOperatingSystemPush { + return ManageOperatingSystemPush{ + dbSession: dbSession, + siteClientPool: siteClientPool, + } +} + +// SynchronizeOperatingSystemToSites propagates an OS create/update/delete to all +// associated sites. Individual site failures are logged but do not abort the loop. +func (mop ManageOperatingSystemPush) SynchronizeOperatingSystemToSites(ctx context.Context, osID uuid.UUID, operation string) error { + logger := log.With().Str("Activity", "SynchronizeOperatingSystemToSites"). + Str("OS ID", osID.String()).Str("Operation", operation).Logger() + logger.Info().Msg("starting activity") + + osDAO := cdbm.NewOperatingSystemDAO(mop.dbSession) + + os, err := osDAO.GetByID(ctx, nil, osID, nil) + if err != nil { + if errors.Is(err, cdb.ErrDoesNotExist) { + if operation == "Delete" { + logger.Info().Msg("Operating System not found, already deleted — nothing to do") + return nil + } + logger.Warn().Msg("Operating System not yet visible — will retry") + return err + } + logger.Error().Err(err).Msg("failed to retrieve Operating System from DB") + return err + } + + switch operation { + case "Create": + return mop.synchronizeCreate(ctx, logger, os) + case "Update": + return mop.synchronizeUpdate(ctx, logger, os) + case "Delete": + return mop.synchronizeDelete(ctx, logger, os) + default: + logger.Error().Str("Operation", operation).Msg("unknown synchronization operation") + return errors.New("unknown synchronization operation: " + operation) + } +} + +func (mop ManageOperatingSystemPush) synchronizeCreate(ctx context.Context, logger zerolog.Logger, os *cdbm.OperatingSystem) error { + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(mop.dbSession) + ossas, _, err := ossaDAO.GetAll(ctx, nil, + cdbm.OperatingSystemSiteAssociationFilterInput{OperatingSystemIDs: []uuid.UUID{os.ID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, nil) + if err != nil { + logger.Error().Err(err).Msg("failed to retrieve OSSAs from DB") + return err + } + + if len(ossas) == 0 { + logger.Info().Msg("no site associations, nothing to synchronize") + return nil + } + + request := mop.buildCreateRequest(os) + siteErrors := 0 + + for _, ossa := range ossas { + slogger := logger.With().Str("Site ID", ossa.SiteID.String()).Logger() + + if os.Type == cdbm.OperatingSystemTypeTemplatedIPXE { + if skip := mop.checkTemplateAvailability(ctx, slogger, ossa.SiteID, os); skip { + continue + } + } + + stc, cerr := mop.siteClientPool.GetClientByID(ossa.SiteID) + if cerr != nil { + slogger.Error().Err(cerr).Msg("failed to retrieve Temporal client for Site") + mop.updateOSSAStatus(ctx, slogger, ossaDAO, ossa.ID, cdbm.OperatingSystemSiteAssociationStatusError, "failed to connect to site") + siteErrors++ + continue + } + + workflowOptions := client.StartWorkflowOptions{ + ID: "templated-ipxe-os-create-" + ossa.SiteID.String() + "-" + os.ID.String(), + WorkflowExecutionTimeout: cwutil.WorkflowExecutionTimeout, + TaskQueue: queue.SiteTaskQueue, + } + + slogger.Info().Msg("triggering CreateOperatingSystem workflow on site") + we, werr := stc.ExecuteWorkflow(ctx, workflowOptions, "CreateOperatingSystem", request) + if werr != nil { + slogger.Error().Err(werr).Msg("failed to start CreateOperatingSystem workflow on site") + mop.updateOSSAStatus(ctx, slogger, ossaDAO, ossa.ID, cdbm.OperatingSystemSiteAssociationStatusError, "failed to start create workflow on site") + siteErrors++ + continue + } + + if werr = we.Get(ctx, nil); werr != nil { + slogger.Error().Err(werr).Msg("CreateOperatingSystem workflow failed on site") + mop.updateOSSAStatus(ctx, slogger, ossaDAO, ossa.ID, cdbm.OperatingSystemSiteAssociationStatusError, "create workflow failed on site") + siteErrors++ + continue + } + + slogger.Info().Msg("CreateOperatingSystem workflow completed on site") + mop.updateOSSAStatus(ctx, slogger, ossaDAO, ossa.ID, cdbm.OperatingSystemSiteAssociationStatusSynced, "Operating System successfully created on site") + } + + mop.updateAggregateOSStatus(ctx, logger, os, siteErrors > 0) + return nil +} + +func (mop ManageOperatingSystemPush) synchronizeUpdate(ctx context.Context, logger zerolog.Logger, os *cdbm.OperatingSystem) error { + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(mop.dbSession) + + if err := mop.expandGlobalScopeAssociations(ctx, logger, os, ossaDAO); err != nil { + return err + } + + ossas, _, err := ossaDAO.GetAll(ctx, nil, + cdbm.OperatingSystemSiteAssociationFilterInput{OperatingSystemIDs: []uuid.UUID{os.ID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, nil) + if err != nil { + logger.Error().Err(err).Msg("failed to retrieve OSSAs from DB") + return err + } + + if len(ossas) == 0 { + logger.Info().Msg("no site associations, nothing to synchronize") + return nil + } + + request := mop.buildUpdateRequest(os) + siteErrors := 0 + + for _, ossa := range ossas { + slogger := logger.With().Str("Site ID", ossa.SiteID.String()).Logger() + + if os.Type == cdbm.OperatingSystemTypeTemplatedIPXE { + if skip := mop.checkTemplateAvailability(ctx, slogger, ossa.SiteID, os); skip { + continue + } + } + + mop.updateOSSAStatus(ctx, slogger, ossaDAO, ossa.ID, cdbm.OperatingSystemSiteAssociationStatusSyncing, "received Operating System update, syncing to site") + if _, verr := ossaDAO.GenerateAndUpdateVersion(ctx, nil, ossa.ID); verr != nil { + slogger.Error().Err(verr).Msg("failed to update OSSA version") + } + + stc, cerr := mop.siteClientPool.GetClientByID(ossa.SiteID) + if cerr != nil { + slogger.Error().Err(cerr).Msg("failed to retrieve Temporal client for Site") + mop.updateOSSAStatus(ctx, slogger, ossaDAO, ossa.ID, cdbm.OperatingSystemSiteAssociationStatusError, "failed to connect to site") + siteErrors++ + continue + } + + workflowOptions := client.StartWorkflowOptions{ + ID: "ipxe-os-update-" + ossa.SiteID.String() + "-" + os.ID.String(), + WorkflowExecutionTimeout: cwutil.WorkflowExecutionTimeout, + TaskQueue: queue.SiteTaskQueue, + } + + slogger.Info().Msg("triggering UpdateOperatingSystem workflow on site") + we, werr := stc.ExecuteWorkflow(ctx, workflowOptions, "UpdateOperatingSystem", request) + if werr != nil { + slogger.Error().Err(werr).Msg("failed to start UpdateOperatingSystem workflow on site") + mop.updateOSSAStatus(ctx, slogger, ossaDAO, ossa.ID, cdbm.OperatingSystemSiteAssociationStatusError, "failed to start update workflow on site") + siteErrors++ + continue + } + + if werr = we.Get(ctx, nil); werr != nil { + slogger.Error().Err(werr).Msg("UpdateOperatingSystem workflow failed on site") + mop.updateOSSAStatus(ctx, slogger, ossaDAO, ossa.ID, cdbm.OperatingSystemSiteAssociationStatusError, "update workflow failed on site") + siteErrors++ + continue + } + + slogger.Info().Msg("UpdateOperatingSystem workflow completed on site") + mop.updateOSSAStatus(ctx, slogger, ossaDAO, ossa.ID, cdbm.OperatingSystemSiteAssociationStatusSynced, "Operating System successfully updated on site") + } + + mop.updateAggregateOSStatus(ctx, logger, os, siteErrors > 0) + return nil +} + +func (mop ManageOperatingSystemPush) synchronizeDelete(ctx context.Context, logger zerolog.Logger, os *cdbm.OperatingSystem) error { + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(mop.dbSession) + ossas, _, err := ossaDAO.GetAll(ctx, nil, + cdbm.OperatingSystemSiteAssociationFilterInput{OperatingSystemIDs: []uuid.UUID{os.ID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, nil) + if err != nil { + logger.Error().Err(err).Msg("failed to retrieve OSSAs from DB") + return err + } + + if len(ossas) == 0 { + logger.Info().Msg("no site associations, soft-deleting OS directly") + osDAO := cdbm.NewOperatingSystemDAO(mop.dbSession) + if derr := osDAO.Delete(ctx, nil, os.ID); derr != nil { + logger.Error().Err(derr).Msg("failed to soft-delete Operating System") + return derr + } + return nil + } + + deleteRequest := &cwssaws.DeleteOperatingSystemRequest{ + Id: &cwssaws.OperatingSystemId{Value: os.ID.String()}, + } + + for _, ossa := range ossas { + slogger := logger.With().Str("Site ID", ossa.SiteID.String()).Logger() + + stc, cerr := mop.siteClientPool.GetClientByID(ossa.SiteID) + if cerr != nil { + slogger.Error().Err(cerr).Msg("failed to retrieve Temporal client for Site") + continue + } + + workflowOptions := client.StartWorkflowOptions{ + ID: "ipxe-os-delete-" + ossa.SiteID.String() + "-" + os.ID.String(), + TaskQueue: queue.SiteTaskQueue, + } + + slogger.Info().Msg("triggering DeleteOperatingSystem workflow on site") + we, werr := stc.ExecuteWorkflow(ctx, workflowOptions, "DeleteOperatingSystem", deleteRequest) + if werr != nil { + slogger.Error().Err(werr).Msg("failed to start DeleteOperatingSystem workflow on site") + continue + } + + werr = we.Get(ctx, nil) + if werr != nil { + var applicationErr *tp.ApplicationError + if errors.As(werr, &applicationErr) && applicationErr.Type() == swe.ErrTypeCarbideObjectNotFound { + slogger.Warn().Msg("CarbideObjectNotFound on delete, treating as success") + werr = nil + } + } + if werr != nil { + slogger.Error().Err(werr).Msg("DeleteOperatingSystem workflow failed on site") + continue + } + + slogger.Info().Msg("DeleteOperatingSystem workflow completed on site") + if derr := ossaDAO.Delete(ctx, nil, ossa.ID); derr != nil { + slogger.Error().Err(derr).Msg("failed to delete OSSA after successful site delete") + } + } + + // Check if all associations have been cleaned up; if so, soft-delete the OS. + remaining, _, err := ossaDAO.GetAll(ctx, nil, + cdbm.OperatingSystemSiteAssociationFilterInput{OperatingSystemIDs: []uuid.UUID{os.ID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(1)}, nil) + if err != nil { + logger.Error().Err(err).Msg("failed to check remaining OSSAs after delete") + return err + } + + osDAO := cdbm.NewOperatingSystemDAO(mop.dbSession) + if len(remaining) == 0 { + if derr := osDAO.Delete(ctx, nil, os.ID); derr != nil { + logger.Error().Err(derr).Msg("failed to soft-delete Operating System after all sites cleaned up") + return derr + } + logger.Info().Msg("all site associations deleted, Operating System soft-deleted") + } + + return nil +} + +// expandGlobalScopeAssociations creates OSSAs for any new provider sites that were added +// after the OS was originally created (global scope only). +func (mop ManageOperatingSystemPush) expandGlobalScopeAssociations(ctx context.Context, logger zerolog.Logger, os *cdbm.OperatingSystem, ossaDAO cdbm.OperatingSystemSiteAssociationDAO) error { + if os.IpxeOsScope == nil || *os.IpxeOsScope != cdbm.OperatingSystemScopeGlobal { + return nil + } + if os.InfrastructureProviderID == nil { + logger.Warn().Msg("global-scope OS has no InfrastructureProviderID, skipping expansion") + return nil + } + + stDAO := cdbm.NewSiteDAO(mop.dbSession) + providerSites, _, err := stDAO.GetAll(ctx, nil, cdbm.SiteFilterInput{ + InfrastructureProviderIDs: []uuid.UUID{*os.InfrastructureProviderID}, + Statuses: []string{cdbm.SiteStatusRegistered}, + }, cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, nil) + if err != nil { + logger.Error().Err(err).Msg("failed to retrieve provider sites for global-scope expansion") + return err + } + + existingOssas, _, err := ossaDAO.GetAll(ctx, nil, + cdbm.OperatingSystemSiteAssociationFilterInput{OperatingSystemIDs: []uuid.UUID{os.ID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, nil) + if err != nil { + logger.Error().Err(err).Msg("failed to retrieve existing OSSAs for global-scope expansion") + return err + } + + existingSites := map[uuid.UUID]struct{}{} + for _, ea := range existingOssas { + existingSites[ea.SiteID] = struct{}{} + } + + sdDAO := cdbm.NewStatusDetailDAO(mop.dbSession) + for _, ps := range providerSites { + if _, ok := existingSites[ps.ID]; ok { + continue + } + ossa, serr := ossaDAO.Create(ctx, nil, cdbm.OperatingSystemSiteAssociationCreateInput{ + OperatingSystemID: os.ID, + SiteID: ps.ID, + Status: cdbm.OperatingSystemSiteAssociationStatusSyncing, + }) + if serr != nil { + logger.Error().Err(serr).Str("Site ID", ps.ID.String()).Msg("failed to create OSSA for global-scope expansion") + continue + } + sdDAO.CreateFromParams(ctx, nil, ossa.ID.String(), + cdbm.OperatingSystemSiteAssociationStatusSyncing, + cdb.GetStrPtr("auto-associated during global-scope update sync")) + if _, verr := ossaDAO.GenerateAndUpdateVersion(ctx, nil, ossa.ID); verr != nil { + logger.Error().Err(verr).Str("Site ID", ps.ID.String()).Msg("failed to update version for new OSSA") + } + } + return nil +} + +// checkTemplateAvailability returns true if the site should be skipped (template not available). +func (mop ManageOperatingSystemPush) checkTemplateAvailability(ctx context.Context, logger zerolog.Logger, siteID uuid.UUID, os *cdbm.OperatingSystem) bool { + if os.IpxeTemplateId == nil { + return false + } + tmplUUID, parseErr := uuid.Parse(*os.IpxeTemplateId) + if parseErr != nil { + logger.Error().Err(parseErr).Str("TemplateId", *os.IpxeTemplateId).Msg("invalid iPXE template UUID") + return true + } + ipxeTmplDAO := cdbm.NewIpxeTemplateDAO(mop.dbSession) + _, err := ipxeTmplDAO.GetBySiteAndTemplateID(ctx, nil, siteID, tmplUUID) + if err != nil { + if errors.Is(err, cdb.ErrDoesNotExist) { + logger.Warn().Str("TemplateId", *os.IpxeTemplateId). + Msg("iPXE template not available at site, skipping sync") + } else { + logger.Error().Err(err).Msg("error checking iPXE template availability at site") + } + return true + } + return false +} + +func (mop ManageOperatingSystemPush) buildCreateRequest(os *cdbm.OperatingSystem) *cwssaws.CreateOperatingSystemRequest { + return &cwssaws.CreateOperatingSystemRequest{ + Id: &cwssaws.OperatingSystemId{Value: os.ID.String()}, + Name: os.Name, + Description: os.Description, + TenantOrganizationId: os.Org, + IsActive: os.IsActive, + AllowOverride: os.AllowOverride, + PhoneHomeEnabled: os.PhoneHomeEnabled, + UserData: os.UserData, + IpxeScript: os.IpxeScript, + IpxeTemplateId: ipxeTemplateIdPtr(os.IpxeTemplateId), + IpxeTemplateParameters: modelParamsToProto(os.IpxeTemplateParameters), + IpxeTemplateArtifacts: modelArtifactsToProto(os.IpxeTemplateArtifacts), + } +} + +func (mop ManageOperatingSystemPush) buildUpdateRequest(os *cdbm.OperatingSystem) *cwssaws.UpdateOperatingSystemRequest { + return &cwssaws.UpdateOperatingSystemRequest{ + Id: &cwssaws.OperatingSystemId{Value: os.ID.String()}, + Name: &os.Name, + Description: os.Description, + IsActive: &os.IsActive, + AllowOverride: &os.AllowOverride, + PhoneHomeEnabled: &os.PhoneHomeEnabled, + UserData: os.UserData, + IpxeScript: os.IpxeScript, + IpxeTemplateId: ipxeTemplateIdPtr(os.IpxeTemplateId), + IpxeTemplateParameters: &cwssaws.IpxeTemplateParameters{Items: modelParamsToProto(os.IpxeTemplateParameters)}, + IpxeTemplateArtifacts: &cwssaws.IpxeTemplateArtifacts{Items: modelArtifactsToProto(os.IpxeTemplateArtifacts)}, + IpxeTemplateDefinitionHash: os.IpxeTemplateDefinitionHash, + } +} + +// updateOSSAStatus is a helper to update the OSSA status and create a status detail entry. +func (mop ManageOperatingSystemPush) updateOSSAStatus(ctx context.Context, logger zerolog.Logger, ossaDAO cdbm.OperatingSystemSiteAssociationDAO, ossaID uuid.UUID, status string, message string) { + if _, err := ossaDAO.Update(ctx, nil, cdbm.OperatingSystemSiteAssociationUpdateInput{ + OperatingSystemSiteAssociationID: ossaID, + Status: cdb.GetStrPtr(status), + }); err != nil { + logger.Error().Err(err).Str("Status", status).Msg("failed to update OSSA status") + return + } + sdDAO := cdbm.NewStatusDetailDAO(mop.dbSession) + if _, err := sdDAO.CreateFromParams(ctx, nil, ossaID.String(), status, &message); err != nil { + logger.Error().Err(err).Msg("failed to create status detail for OSSA") + } +} + +// updateAggregateOSStatus computes and writes the aggregate OS status after sync. +// If any artifact has CACHED_ONLY strategy, the OS stays Provisioning until +// the inbound inventory confirms all cached_url values are set on core. +func (mop ManageOperatingSystemPush) updateAggregateOSStatus(ctx context.Context, logger zerolog.Logger, os *cdbm.OperatingSystem, hadErrors bool) { + osDAO := cdbm.NewOperatingSystemDAO(mop.dbSession) + + var newStatus string + var statusMessage string + + if hadErrors { + newStatus = cdbm.OperatingSystemStatusError + statusMessage = "failed to sync Operating System to one or more sites" + } else if hasCachedOnlyArtifact(os.IpxeTemplateArtifacts) { + newStatus = cdbm.OperatingSystemStatusProvisioning + statusMessage = "Operating System synced to all sites, waiting for artifact caching" + } else { + newStatus = cdbm.OperatingSystemStatusReady + statusMessage = "Operating System successfully synced to all sites" + } + + if _, err := osDAO.Update(ctx, nil, cdbm.OperatingSystemUpdateInput{ + OperatingSystemId: os.ID, + Status: &newStatus, + }); err != nil { + logger.Error().Err(err).Msg("failed to update aggregate OS status") + return + } + + sdDAO := cdbm.NewStatusDetailDAO(mop.dbSession) + if _, err := sdDAO.CreateFromParams(ctx, nil, os.ID.String(), newStatus, &statusMessage); err != nil { + logger.Error().Err(err).Msg("failed to create status detail for aggregate OS status") + } +} + +func hasCachedOnlyArtifact(artifacts []cdbm.OperatingSystemIpxeArtifact) bool { + for _, a := range artifacts { + if a.CacheStrategy == cwssaws.IpxeTemplateArtifactCacheStrategy_CACHED_ONLY.String() { + return true + } + } + return false +} + +// ipxeTemplateIdPtr converts a nullable string UUID to the proto IpxeTemplateId message. +func ipxeTemplateIdPtr(id *string) *cwssaws.IpxeTemplateId { + if id == nil { + return nil + } + return &cwssaws.IpxeTemplateId{Value: *id} +} + +// modelParamsToProto converts DB model iPXE parameters to proto representation. +func modelParamsToProto(params []cdbm.OperatingSystemIpxeParameter) []*cwssaws.IpxeTemplateParameter { + result := make([]*cwssaws.IpxeTemplateParameter, 0, len(params)) + for _, p := range params { + result = append(result, &cwssaws.IpxeTemplateParameter{Name: p.Name, Value: p.Value}) + } + return result +} + +// modelArtifactsToProto converts DB model iPXE artifacts to proto representation. +func modelArtifactsToProto(artifacts []cdbm.OperatingSystemIpxeArtifact) []*cwssaws.IpxeTemplateArtifact { + result := make([]*cwssaws.IpxeTemplateArtifact, 0, len(artifacts)) + for _, a := range artifacts { + strategy := cwssaws.IpxeTemplateArtifactCacheStrategy(cwssaws.IpxeTemplateArtifactCacheStrategy_value[a.CacheStrategy]) + result = append(result, &cwssaws.IpxeTemplateArtifact{ + Name: a.Name, + Url: a.URL, + Sha: a.SHA, + AuthType: a.AuthType, + AuthToken: a.AuthToken, + CacheStrategy: strategy, + }) + } + return result +} diff --git a/workflow/pkg/util/testing.go b/workflow/pkg/util/testing.go index 3f5104a9b..6c5287d74 100644 --- a/workflow/pkg/util/testing.go +++ b/workflow/pkg/util/testing.go @@ -162,6 +162,9 @@ func TestSetupSchema(t *testing.T, dbSession *cdb.Session) { // create User table err = dbSession.DB.ResetModel(context.Background(), (*cdbm.User)(nil)) assert.Nil(t, err) + // create IpxeTemplate table + err = dbSession.DB.ResetModel(context.Background(), (*cdbm.IpxeTemplate)(nil)) + assert.Nil(t, err) } // TestBuildUser build user @@ -367,23 +370,22 @@ func TestBuildOperatingSystem(t *testing.T, dbSession *cdb.Session, name string) // TestBuildOperatingSystem build operating system func TestBuildImageOperatingSystem(t *testing.T, dbSession *cdb.Session, ipID *uuid.UUID, tenantID *uuid.UUID, name string, org string, version *string, status string) *cdbm.OperatingSystem { operatingSystem := &cdbm.OperatingSystem{ - ID: uuid.New(), - Name: name, - Org: org, - InfrastructureProviderID: ipID, - TenantID: tenantID, - ControllerOperatingSystemID: nil, - Version: version, - Type: cdbm.OperatingSystemTypeImage, - ImageURL: cdb.GetStrPtr("http://testos.net"), - ImageSHA: cdb.GetStrPtr("123213ddddsa1231asd"), - ImageAuthType: cdb.GetStrPtr("bear"), - ImageAuthToken: cdb.GetStrPtr("1211331asdadad21123"), - ImageDisk: cdb.GetStrPtr("disk"), - RootFsID: cdb.GetStrPtr("rootfsID"), - RootFsLabel: cdb.GetStrPtr("rootFsLabel"), - Status: status, - CreatedBy: uuid.New(), + ID: uuid.New(), + Name: name, + Org: org, + InfrastructureProviderID: ipID, + TenantID: tenantID, + Version: version, + Type: cdbm.OperatingSystemTypeImage, + ImageURL: cdb.GetStrPtr("http://testos.net"), + ImageSHA: cdb.GetStrPtr("123213ddddsa1231asd"), + ImageAuthType: cdb.GetStrPtr("bear"), + ImageAuthToken: cdb.GetStrPtr("1211331asdadad21123"), + ImageDisk: cdb.GetStrPtr("disk"), + RootFsID: cdb.GetStrPtr("rootfsID"), + RootFsLabel: cdb.GetStrPtr("rootFsLabel"), + Status: status, + CreatedBy: uuid.New(), } _, err := dbSession.DB.NewInsert().Model(operatingSystem).Exec(context.Background()) assert.Nil(t, err) diff --git a/workflow/pkg/workflow/ipxetemplate/update.go b/workflow/pkg/workflow/ipxetemplate/update.go new file mode 100644 index 000000000..fdd06103d --- /dev/null +++ b/workflow/pkg/workflow/ipxetemplate/update.go @@ -0,0 +1,82 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ipxetemplate + +import ( + "fmt" + "time" + + cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" + cwm "github.com/NVIDIA/ncx-infra-controller-rest/workflow/internal/metrics" + ipxeTemplateActivity "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/activity/ipxetemplate" + + "github.com/google/uuid" + "github.com/rs/zerolog/log" + + "go.temporal.io/sdk/temporal" + "go.temporal.io/sdk/workflow" +) + +// UpdateIpxeTemplateInventory is a workflow called by the Site Agent to update iPXE template +// inventory for a Site +func UpdateIpxeTemplateInventory(ctx workflow.Context, siteID string, inventory *cwssaws.IpxeTemplateInventory) (err error) { + logger := log.With().Str("Workflow", "UpdateIpxeTemplateInventory").Str("Site ID", siteID).Logger() + + startTime := workflow.Now(ctx) + + logger.Info().Msg("Starting workflow") + + parsedSiteID, err := uuid.Parse(siteID) + if err != nil { + logger.Warn().Err(err).Msg(fmt.Sprintf("workflow triggered with invalid site ID: %s", siteID)) + return err + } + + retrypolicy := &temporal.RetryPolicy{ + InitialInterval: 5 * time.Second, + BackoffCoefficient: 2.0, + MaximumInterval: 30 * time.Second, + MaximumAttempts: 2, + } + options := workflow.ActivityOptions{ + StartToCloseTimeout: 30 * time.Second, + RetryPolicy: retrypolicy, + } + + ctx = workflow.WithActivityOptions(ctx, options) + + var templateManager ipxeTemplateActivity.ManageIpxeTemplate + + err = workflow.ExecuteActivity(ctx, templateManager.UpdateIpxeTemplatesInDB, parsedSiteID, inventory).Get(ctx, nil) + if err != nil { + logger.Warn().Err(err).Msg("Failed to execute activity: UpdateIpxeTemplatesInDB") + return err + } + + logger.Info().Msg("Completing workflow") + + // Record latency for this inventory call + var inventoryMetricsManager cwm.ManageInventoryMetrics + + err = workflow.ExecuteActivity(ctx, inventoryMetricsManager.RecordLatency, parsedSiteID, "UpdateIpxeTemplateInventory", err != nil, workflow.Now(ctx).Sub(startTime)).Get(ctx, nil) + if err != nil { + logger.Warn().Err(err).Msg("Failed to execute activity: RecordLatency") + } + + return nil +} diff --git a/workflow/pkg/workflow/ipxetemplate/update_test.go b/workflow/pkg/workflow/ipxetemplate/update_test.go new file mode 100644 index 000000000..f3a6cbf2d --- /dev/null +++ b/workflow/pkg/workflow/ipxetemplate/update_test.go @@ -0,0 +1,104 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ipxetemplate + +import ( + "errors" + "testing" + + "github.com/google/uuid" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/suite" + + cwm "github.com/NVIDIA/ncx-infra-controller-rest/workflow/internal/metrics" + ipxeTemplateActivity "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/activity/ipxetemplate" + + "go.temporal.io/sdk/temporal" + "go.temporal.io/sdk/testsuite" + + cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" +) + +type UpdateIpxeTemplateTestSuite struct { + suite.Suite + testsuite.WorkflowTestSuite + + env *testsuite.TestWorkflowEnvironment +} + +func (s *UpdateIpxeTemplateTestSuite) SetupTest() { + s.env = s.NewTestWorkflowEnvironment() +} + +func (s *UpdateIpxeTemplateTestSuite) AfterTest(suiteName, testName string) { + s.env.AssertExpectations(s.T()) +} + +func (s *UpdateIpxeTemplateTestSuite) Test_UpdateIpxeTemplateInventory_Success() { + var templateManager ipxeTemplateActivity.ManageIpxeTemplate + var metricsManager cwm.ManageInventoryMetrics + + siteID := uuid.New() + inv := &cwssaws.IpxeTemplateInventory{Templates: []*cwssaws.IpxeTemplate{}} + + s.env.RegisterActivity(templateManager.UpdateIpxeTemplatesInDB) + s.env.OnActivity(templateManager.UpdateIpxeTemplatesInDB, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + s.env.RegisterActivity(metricsManager.RecordLatency) + s.env.OnActivity(metricsManager.RecordLatency, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil) + + s.env.ExecuteWorkflow(UpdateIpxeTemplateInventory, siteID.String(), inv) + s.True(s.env.IsWorkflowCompleted()) + s.NoError(s.env.GetWorkflowError()) +} + +func (s *UpdateIpxeTemplateTestSuite) Test_UpdateIpxeTemplateInventory_ActivityFails() { + var templateManager ipxeTemplateActivity.ManageIpxeTemplate + var metricsManager cwm.ManageInventoryMetrics + + siteID := uuid.New() + inv := &cwssaws.IpxeTemplateInventory{Templates: []*cwssaws.IpxeTemplate{}} + + s.env.RegisterActivity(templateManager.UpdateIpxeTemplatesInDB) + s.env.OnActivity(templateManager.UpdateIpxeTemplatesInDB, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("UpdateIpxeTemplatesInDB failure")) + + s.env.RegisterActivity(metricsManager.RecordLatency) + s.env.OnActivity(metricsManager.RecordLatency, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil).Maybe() + + s.env.ExecuteWorkflow(UpdateIpxeTemplateInventory, siteID.String(), inv) + s.True(s.env.IsWorkflowCompleted()) + err := s.env.GetWorkflowError() + s.NotNil(err) + + var applicationErr *temporal.ApplicationError + s.True(errors.As(err, &applicationErr)) + s.Equal("UpdateIpxeTemplatesInDB failure", applicationErr.Error()) +} + +func (s *UpdateIpxeTemplateTestSuite) Test_UpdateIpxeTemplateInventory_InvalidSiteID() { + inv := &cwssaws.IpxeTemplateInventory{Templates: []*cwssaws.IpxeTemplate{}} + + s.env.ExecuteWorkflow(UpdateIpxeTemplateInventory, "not-a-valid-uuid", inv) + s.True(s.env.IsWorkflowCompleted()) + err := s.env.GetWorkflowError() + s.NotNil(err) +} + +func TestUpdateIpxeTemplateTestSuite(t *testing.T) { + suite.Run(t, new(UpdateIpxeTemplateTestSuite)) +} diff --git a/workflow/pkg/workflow/operatingsystem/sync.go b/workflow/pkg/workflow/operatingsystem/sync.go new file mode 100644 index 000000000..db6cfde55 --- /dev/null +++ b/workflow/pkg/workflow/operatingsystem/sync.go @@ -0,0 +1,94 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package operatingsystem + +import ( + "context" + "time" + + "github.com/google/uuid" + "github.com/rs/zerolog/log" + + temporalEnums "go.temporal.io/api/enums/v1" + + "go.temporal.io/sdk/client" + "go.temporal.io/sdk/temporal" + "go.temporal.io/sdk/workflow" + + osActivity "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/activity/operatingsystem" + "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/queue" +) + +const ( + SyncOperationCreate = "Create" + SyncOperationUpdate = "Update" + SyncOperationDelete = "Delete" +) + +// SynchronizeOperatingSystem is a cloud-namespace Temporal workflow that propagates +// Operating System changes (create/update/delete) to all associated sites asynchronously. +func SynchronizeOperatingSystem(ctx workflow.Context, osID uuid.UUID, operation string) error { + logger := log.With().Str("Workflow", "SynchronizeOperatingSystem"). + Str("OS ID", osID.String()).Str("Operation", operation).Logger() + + logger.Info().Msg("starting workflow") + + retrypolicy := &temporal.RetryPolicy{ + InitialInterval: 2 * time.Second, + BackoffCoefficient: 2.0, + MaximumInterval: 2 * time.Minute, + MaximumAttempts: 15, + } + options := workflow.ActivityOptions{ + StartToCloseTimeout: 5 * time.Minute, + RetryPolicy: retrypolicy, + } + + ctx = workflow.WithActivityOptions(ctx, options) + + var osPushManager osActivity.ManageOperatingSystemPush + + err := workflow.ExecuteActivity(ctx, osPushManager.SynchronizeOperatingSystemToSites, osID, operation).Get(ctx, nil) + if err != nil { + logger.Warn().Err(err).Msg("failed to execute activity: SynchronizeOperatingSystemToSites") + return err + } + + logger.Info().Msg("completing workflow") + + return nil +} + +// ExecuteSynchronizeOperatingSystemWorkflow triggers the SynchronizeOperatingSystem workflow +// asynchronously on the cloud task queue. The handler does not wait for completion. +func ExecuteSynchronizeOperatingSystemWorkflow(ctx context.Context, tc client.Client, osID uuid.UUID, operation string) (*string, error) { + workflowOptions := client.StartWorkflowOptions{ + ID: "sync-os-" + osID.String() + "-" + operation, + TaskQueue: queue.CloudTaskQueue, + WorkflowIDReusePolicy: temporalEnums.WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE, + } + + we, err := tc.ExecuteWorkflow(ctx, workflowOptions, SynchronizeOperatingSystem, osID, operation) + if err != nil { + log.Error().Err(err).Msg("failed to execute SynchronizeOperatingSystem workflow") + return nil, err + } + + wid := we.GetID() + return &wid, nil +} diff --git a/workflow/pkg/workflow/operatingsystem/update.go b/workflow/pkg/workflow/operatingsystem/update.go index 3cf0a1620..00d9a1d78 100644 --- a/workflow/pkg/workflow/operatingsystem/update.go +++ b/workflow/pkg/workflow/operatingsystem/update.go @@ -22,6 +22,7 @@ import ( "time" cwm "github.com/NVIDIA/ncx-infra-controller-rest/workflow/internal/metrics" + osActivity "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/activity/operatingsystem" "github.com/google/uuid" "github.com/rs/zerolog/log" @@ -30,14 +31,13 @@ import ( "go.temporal.io/sdk/workflow" cwssaws "github.com/NVIDIA/ncx-infra-controller-rest/workflow-schema/schema/site-agent/workflows/v1" - osImageActivity "github.com/NVIDIA/ncx-infra-controller-rest/workflow/pkg/activity/operatingsystem" ) // UpdateOsImageInventory is a workflow called by Site Agent to update image based Operating System for a Site func UpdateOsImageInventory(ctx workflow.Context, siteID string, osImageInventory *cwssaws.OsImageInventory) (err error) { logger := log.With().Str("Workflow", "UpdateOsImageInventory").Str("Site ID", siteID).Logger() - startTime := time.Now() + startTime := workflow.Now(ctx) logger.Info().Msg("starting workflow") @@ -63,7 +63,7 @@ func UpdateOsImageInventory(ctx workflow.Context, siteID string, osImageInventor ctx = workflow.WithActivityOptions(ctx, options) - var osImageManager osImageActivity.ManageOsImage + var osImageManager osActivity.ManageOsImage var osImageIDs []uuid.UUID @@ -84,7 +84,7 @@ func UpdateOsImageInventory(ctx workflow.Context, siteID string, osImageInventor // Record latency for this inventory call var inventoryMetricsManager cwm.ManageInventoryMetrics - serr := workflow.ExecuteActivity(ctx, inventoryMetricsManager.RecordLatency, parsedSiteID, "UpdateOsImageInventory", err != nil, time.Since(startTime)).Get(ctx, nil) + serr := workflow.ExecuteActivity(ctx, inventoryMetricsManager.RecordLatency, parsedSiteID, "UpdateOsImageInventory", err != nil, workflow.Now(ctx).Sub(startTime)).Get(ctx, nil) if serr != nil { logger.Warn().Err(serr).Msg("failed to execute activity: RecordLatency") } @@ -94,3 +94,47 @@ func UpdateOsImageInventory(ctx workflow.Context, siteID string, osImageInventor // Return original error from inventory activity, if any return err } + +// UpdateOperatingSystemInventory is a workflow called by the Site Agent to reconcile Operating Systems +// synced from carbide-core into the operating_system table. +func UpdateOperatingSystemInventory(ctx workflow.Context, siteID string, inventory *cwssaws.OperatingSystemInventory) (err error) { + logger := log.With().Str("Workflow", "UpdateOperatingSystemInventory").Str("Site ID", siteID).Logger() + + startTime := workflow.Now(ctx) + + logger.Info().Msg("Starting workflow") + + parsedSiteID, err := uuid.Parse(siteID) + if err != nil { + logger.Warn().Err(err).Msgf("workflow triggered with invalid site ID: %s", siteID) + return err + } + + retrypolicy := &temporal.RetryPolicy{ + InitialInterval: 5 * time.Second, + BackoffCoefficient: 2.0, + MaximumInterval: 30 * time.Second, + MaximumAttempts: 2, + } + options := workflow.ActivityOptions{ + StartToCloseTimeout: 30 * time.Second, + RetryPolicy: retrypolicy, + } + ctx = workflow.WithActivityOptions(ctx, options) + + var osSyncManager osActivity.ManageOperatingSystemSync + + err = workflow.ExecuteActivity(ctx, osSyncManager.UpdateOperatingSystemsInDB, parsedSiteID, inventory).Get(ctx, nil) + if err != nil { + logger.Warn().Err(err).Msg("Failed to execute activity: UpdateOperatingSystemsInDB") + } + + logger.Info().Msg("Completing workflow") + + var inventoryMetricsManager cwm.ManageInventoryMetrics + if merr := workflow.ExecuteActivity(ctx, inventoryMetricsManager.RecordLatency, parsedSiteID, "UpdateOperatingSystemInventory", err != nil, workflow.Now(ctx).Sub(startTime)).Get(ctx, nil); merr != nil { + logger.Warn().Err(merr).Msg("Failed to execute activity: RecordLatency") + } + + return err +} From f2300ce6cd1eec9bd3df8ad9d581a172f07039a5 Mon Sep 17 00:00:00 2001 From: Patrice Breton Date: Fri, 17 Apr 2026 18:46:09 -0700 Subject: [PATCH 02/10] address PR comments, cleanup, more tests and regenerate proto, sdk and doc Signed-off-by: Patrice Breton --- api/pkg/api/handler/allocation.go | 32 + api/pkg/api/handler/instance.go | 135 +- api/pkg/api/handler/instance_test.go | 269 +- api/pkg/api/handler/instancebatch.go | 74 +- api/pkg/api/handler/ipxetemplate.go | 170 +- api/pkg/api/handler/ipxetemplate_test.go | 244 +- api/pkg/api/handler/operatingsystem.go | 932 +- .../handler/operatingsystem_ownership_test.go | 268 +- api/pkg/api/handler/operatingsystem_test.go | 65 +- api/pkg/api/model/instance.go | 16 +- api/pkg/api/model/instance_test.go | 123 + api/pkg/api/model/ipxetemplate.go | 2 +- api/pkg/api/model/operatingsystem.go | 51 +- api/pkg/api/model/operatingsystem_test.go | 354 + db/pkg/db/model/ipxetemplate.go | 48 +- db/pkg/db/model/ipxetemplate_test.go | 41 +- db/pkg/db/model/operatingsystem.go | 78 +- db/pkg/db/model/operatingsystem_test.go | 2 +- ...> 20260306120000_ipxe_os_and_templates.go} | 73 +- .../20260310100000_os_definition.go | 71 - db/pkg/migrations/20260320100000_os_scope.go | 54 - .../20260321100000_ossa_core_status.go | 53 - docs/index.html | 408 +- openapi/spec.yaml | 56 +- sdk/standard/api_ipxe_template.go | 45 +- sdk/standard/api_operating_system.go | 4 +- sdk/standard/model_ipxe_template.go | 2 +- sdk/standard/model_ipxe_template_artifact.go | 2 +- sdk/standard/model_ipxe_template_parameter.go | 2 +- sdk/standard/model_operating_system.go | 2 +- .../model_operating_system_create_request.go | 2 +- .../workflows/v1/common_carbide.pb.go | 51 +- .../workflows/v1/forge_carbide.pb.go | 7625 ++++++++--------- .../workflows/v1/forge_carbide_grpc.pb.go | 38 - .../workflows/v1/common_carbide.proto | 4 + .../workflows/v1/forge_carbide.proto | 110 +- .../pkg/activity/ipxetemplate/ipxetemplate.go | 2 +- .../ipxetemplate/ipxetemplate_test.go | 14 +- .../operatingsystem/operatingsystem.go | 108 +- .../operatingsystem/operatingsystem_test.go | 16 + 40 files changed, 5806 insertions(+), 5840 deletions(-) rename db/pkg/migrations/{20260306120000_ipxe_template.go => 20260306120000_ipxe_os_and_templates.go} (51%) delete mode 100644 db/pkg/migrations/20260310100000_os_definition.go delete mode 100644 db/pkg/migrations/20260320100000_os_scope.go delete mode 100644 db/pkg/migrations/20260321100000_ossa_core_status.go diff --git a/api/pkg/api/handler/allocation.go b/api/pkg/api/handler/allocation.go index cf6271938..d3d88fe59 100644 --- a/api/pkg/api/handler/allocation.go +++ b/api/pkg/api/handler/allocation.go @@ -458,6 +458,38 @@ func (cah CreateAllocationHandler) Handle(c echo.Context) error { } else { logger.Info().Str("Workflow ID", we.GetID()).Msg("triggered workflow to create Tenant") } + + // Auto-associate tenant-owned Global-scoped raw iPXE OSes with the new site. + // This mirrors the provider-side auto-expansion in the Site create handler. + globalTenantOSes, _, goserr := cdbm.NewOperatingSystemDAO(cah.dbSession).GetAll( + ctx, tx, + cdbm.OperatingSystemFilterInput{ + TenantIDs: []uuid.UUID{tenant.ID}, + OsTypes: []string{cdbm.OperatingSystemTypeIPXE}, + Scopes: []string{cdbm.OperatingSystemScopeGlobal}, + }, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, + nil, + ) + if goserr != nil { + logger.Error().Err(goserr).Msg("error retrieving tenant global-scoped OSes for auto-expansion") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve global-scoped OSes for tenant, DB error", nil) + } + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(cah.dbSession) + for _, gos := range globalTenantOSes { + if _, aerr := ossaDAO.Create(ctx, tx, cdbm.OperatingSystemSiteAssociationCreateInput{ + OperatingSystemID: gos.ID, + SiteID: site.ID, + Status: cdbm.OperatingSystemSiteAssociationStatusSyncing, + CreatedBy: dbUser.ID, + }); aerr != nil { + logger.Error().Err(aerr).Str("osID", gos.ID.String()).Msg("Failed to auto-associate tenant global OS with new site") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to associate global-scoped Operating Systems with new Site", nil) + } + } + if len(globalTenantOSes) > 0 { + logger.Info().Int("count", len(globalTenantOSes)).Msg("Auto-associated tenant global-scoped OSes with new site") + } } // Commit transaction diff --git a/api/pkg/api/handler/instance.go b/api/pkg/api/handler/instance.go index 690591810..828e609b5 100644 --- a/api/pkg/api/handler/instance.go +++ b/api/pkg/api/handler/instance.go @@ -80,7 +80,7 @@ func NewCreateInstanceHandler(dbSession *cdb.Session, tc temporalClient.Client, // apiRequest will be mutated for use in createFromParams. // osConfig will hold the struct/data for use with Temporal/Carbide calls. // Errors should be returned in the form of cutil.NewAPIErrorResponse -func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIInstanceCreateRequest, site *cdbm.Site) (*cwssaws.InstanceOperatingSystemConfig, *uuid.UUID, *cutil.APIError) { +func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIInstanceCreateRequest, site *cdbm.Site, tenant *cdbm.Tenant) (*cwssaws.InstanceOperatingSystemConfig, *uuid.UUID, *cutil.APIError) { ctx := c.Request().Context() @@ -138,8 +138,8 @@ func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Conte return c.Str("OperatingSystem ID", os.ID.String()) }) - // Confirm ownership between tenant and OS. - if os.TenantID.String() != apiRequest.TenantID { + // Tenant can use this OS if they created it or it is offered by Provider + if !(os.TenantID == nil || *os.TenantID == tenant.ID) { logger.Error().Msg("OperatingSystem in request is not owned by tenant") return nil, nil, cutil.NewAPIError(http.StatusBadRequest, "OperatingSystem specified in request is not owned by Tenant", nil) } @@ -186,29 +186,27 @@ func (cih CreateInstanceHandler) buildInstanceCreateRequestOsConfig(c echo.Conte // Options below should all have been set by the // earlier call to ValidateAndSetOperatingSystemData - - if cdbm.IsIPXEType(os.Type) { - return &cwssaws.InstanceOperatingSystemConfig{ - RunProvisioningInstructionsOnEveryBoot: *apiRequest.AlwaysBootWithCustomIpxe, - PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, - Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ - Ipxe: &cwssaws.InlineIpxe{ - IpxeScript: *apiRequest.IpxeScript, - }, - }, - UserData: apiRequest.UserData, - }, osID, nil - } else { - return &cwssaws.InstanceOperatingSystemConfig{ - PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, - Variant: &cwssaws.InstanceOperatingSystemConfig_OsImageId{ - OsImageId: &cwssaws.UUID{ - Value: os.ID.String(), - }, - }, - UserData: apiRequest.UserData, - }, osID, nil + result := cwssaws.InstanceOperatingSystemConfig{ + PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, + UserData: apiRequest.UserData, + } + switch os.Type { + case cdbm.OperatingSystemTypeIPXE: + result.RunProvisioningInstructionsOnEveryBoot = *apiRequest.AlwaysBootWithCustomIpxe + result.Variant = &cwssaws.InstanceOperatingSystemConfig_Ipxe{ + Ipxe: &cwssaws.InlineIpxe{IpxeScript: *apiRequest.IpxeScript}, + } + case cdbm.OperatingSystemTypeTemplatedIPXE: + result.RunProvisioningInstructionsOnEveryBoot = *apiRequest.AlwaysBootWithCustomIpxe + result.Variant = &cwssaws.InstanceOperatingSystemConfig_OperatingSystemId{ + OperatingSystemId: &cwssaws.OperatingSystemId{Value: os.ID.String()}, + } + case cdbm.OperatingSystemTypeImage: + result.Variant = &cwssaws.InstanceOperatingSystemConfig_OsImageId{ + OsImageId: &cwssaws.UUID{Value: os.ID.String()}, + } } + return &result, osID, nil } // Handle godoc @@ -323,19 +321,18 @@ func (cih CreateInstanceHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) } - // Deprecated: tenantId in request body. Infer from org when not provided. - if apiRequest.TenantID == "" { - apiRequest.TenantID = tenant.ID.String() - } - - apiTenant, err := common.GetTenantFromIDString(ctx, nil, apiRequest.TenantID, cih.dbSession) - if err != nil { - logger.Warn().Err(err).Msg("error retrieving tenant from request") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request is not valid", nil) - } - if apiTenant.ID != tenant.ID { - logger.Warn().Msg("tenant id in request does not match tenant in org") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request does not match tenant in org", nil) + // If the caller provided an explicit tenantId in the body, validate it matches the org. + // TODO: tenantId as parameter is deprecated and will need to be removed by 2026-10-01. + if apiRequest.TenantID != "" { + apiTenant, terr := common.GetTenantFromIDString(ctx, nil, apiRequest.TenantID, cih.dbSession) + if terr != nil { + logger.Warn().Err(terr).Msg("error retrieving tenant from request") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request is not valid", nil) + } + if apiTenant.ID != tenant.ID { + logger.Warn().Msg("tenant id in request does not match tenant in org") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request does not match tenant in org", nil) + } } // Validate the VPC state @@ -749,7 +746,7 @@ func (cih CreateInstanceHandler) Handle(c echo.Context) error { // apiRequest will be mutated for use in CreateFromParams. // osConfig will hold the struct/data for use with Temporal/Carbide calls. // Errors will be returned already in the form of cutil.NewAPIErrorResponse - osConfig, osID, oserr := cih.buildInstanceCreateRequestOsConfig(c, &logger, &apiRequest, site) + osConfig, osID, oserr := cih.buildInstanceCreateRequestOsConfig(c, &logger, &apiRequest, site, tenant) if oserr != nil { // buildInstanceCreateRequestOsConfig already handles logging, // so this is a bit redundant, but this log brings you to the @@ -1906,7 +1903,8 @@ func (uih UpdateInstanceHandler) buildInstanceUpdateRequestOsConfig(c echo.Conte }) // Confirm ownership between tenant and OS. - if os.TenantID.String() != instance.Tenant.ID.String() { + // Provider-owned OS (TenantID is nil) is accessible to any tenant. + if os.TenantID != nil && os.TenantID.String() != instance.Tenant.ID.String() { logger.Error().Msg("OperatingSystem in request is not owned by tenant") return nil, nil, cutil.NewAPIError(http.StatusBadRequest, "Operating system specified in request is not owned by Tenant", nil) } @@ -1987,42 +1985,35 @@ func (uih UpdateInstanceHandler) buildInstanceUpdateRequestOsConfig(c echo.Conte phoneHomeEnabled = *apiRequest.PhoneHomeEnabled } + result := cwssaws.InstanceOperatingSystemConfig{ + PhoneHomeEnabled: phoneHomeEnabled, + UserData: userData, + } if os != nil { - switch { - case cdbm.IsIPXEType(os.Type): - return &cwssaws.InstanceOperatingSystemConfig{ - RunProvisioningInstructionsOnEveryBoot: alwaysBootWithCustomIpxe, - PhoneHomeEnabled: phoneHomeEnabled, - Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ - Ipxe: &cwssaws.InlineIpxe{ - IpxeScript: *ipxeScript, - }, - }, - UserData: userData, - }, osID, nil - case os.Type == cdbm.OperatingSystemTypeImage: - return &cwssaws.InstanceOperatingSystemConfig{ - PhoneHomeEnabled: phoneHomeEnabled, - Variant: &cwssaws.InstanceOperatingSystemConfig_OsImageId{ - OsImageId: &cwssaws.UUID{ - Value: os.ID.String(), - }, - }, - UserData: userData, - }, osID, nil + switch os.Type { + case cdbm.OperatingSystemTypeIPXE: + result.RunProvisioningInstructionsOnEveryBoot = alwaysBootWithCustomIpxe + result.Variant = &cwssaws.InstanceOperatingSystemConfig_Ipxe{ + Ipxe: &cwssaws.InlineIpxe{IpxeScript: *ipxeScript}, + } + case cdbm.OperatingSystemTypeTemplatedIPXE: + result.RunProvisioningInstructionsOnEveryBoot = alwaysBootWithCustomIpxe + result.Variant = &cwssaws.InstanceOperatingSystemConfig_OperatingSystemId{ + OperatingSystemId: &cwssaws.OperatingSystemId{Value: os.ID.String()}, + } + case cdbm.OperatingSystemTypeImage: + result.Variant = &cwssaws.InstanceOperatingSystemConfig_OsImageId{ + OsImageId: &cwssaws.UUID{Value: os.ID.String()}, + } + } + } else { + result.RunProvisioningInstructionsOnEveryBoot = alwaysBootWithCustomIpxe + result.Variant = &cwssaws.InstanceOperatingSystemConfig_Ipxe{ + Ipxe: &cwssaws.InlineIpxe{IpxeScript: *ipxeScript}, } } - return &cwssaws.InstanceOperatingSystemConfig{ - RunProvisioningInstructionsOnEveryBoot: alwaysBootWithCustomIpxe, - PhoneHomeEnabled: phoneHomeEnabled, - Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ - Ipxe: &cwssaws.InlineIpxe{ - IpxeScript: *ipxeScript, - }, - }, - UserData: userData, - }, osID, nil + return &result, osID, nil } // Handle godoc diff --git a/api/pkg/api/handler/instance_test.go b/api/pkg/api/handler/instance_test.go index 78696941c..05c75c058 100644 --- a/api/pkg/api/handler/instance_test.go +++ b/api/pkg/api/handler/instance_test.go @@ -337,6 +337,29 @@ func testInstanceBuildOperatingSystem(t *testing.T, dbSession *cdb.Session, name return operatingSystem } +func testInstanceBuildProviderOperatingSystem(t *testing.T, dbSession *cdb.Session, name string, ip *cdbm.InfrastructureProvider, osType string, allowOverride bool, userData *string, phoneHomeEnabled bool, status string, user *cdbm.User) *cdbm.OperatingSystem { + operatingSystem := &cdbm.OperatingSystem{ + ID: uuid.New(), + Name: name, + InfrastructureProviderID: cdb.GetUUIDPtr(ip.ID), + Type: osType, + AllowOverride: allowOverride, + PhoneHomeEnabled: phoneHomeEnabled, + IsActive: true, + UserData: userData, + Status: status, + CreatedBy: user.ID, + } + + if cdbm.IsIPXEType(osType) { + operatingSystem.IpxeScript = cdb.GetStrPtr(common.DefaultIpxeScript) + } + + _, err := dbSession.DB.NewInsert().Model(operatingSystem).Exec(context.Background()) + assert.Nil(t, err) + return operatingSystem +} + func testInstanceBuildOperatingSystemSiteAssociation(t *testing.T, dbSession *cdb.Session, siteID, osID uuid.UUID) *cdbm.OperatingSystemSiteAssociation { ossa := &cdbm.OperatingSystemSiteAssociation{ ID: uuid.New(), @@ -760,7 +783,7 @@ func TestCreateInstanceHandler_Handle(t *testing.T) { assert.NotNil(t, mcmissing) testUpdateMachineToMissing(t, dbSession, mcmissing) - alc1 := testInstanceSiteBuildAllocationContraints(t, dbSession, al1, cdbm.AllocationResourceTypeInstanceType, ist1.ID, cdbm.AllocationConstraintTypeReserved, 9, ipu) + alc1 := testInstanceSiteBuildAllocationContraints(t, dbSession, al1, cdbm.AllocationResourceTypeInstanceType, ist1.ID, cdbm.AllocationConstraintTypeReserved, 15, ipu) assert.NotNil(t, alc1) mc1 := testInstanceBuildMachine(t, dbSession, ip.ID, st1.ID, cdb.GetBoolPtr(false), nil) @@ -823,6 +846,18 @@ func TestCreateInstanceHandler_Handle(t *testing.T) { mcinst20 := testInstanceBuildMachineInstanceType(t, dbSession, mc20, ist1) assert.NotNil(t, mcinst20) + mc21 := testInstanceBuildMachine(t, dbSession, ip.ID, st1.ID, cdb.GetBoolPtr(false), nil) + assert.NotNil(t, mc21) + assert.NotNil(t, testInstanceBuildMachineInstanceType(t, dbSession, mc21, ist1)) + + mc22 := testInstanceBuildMachine(t, dbSession, ip.ID, st1.ID, cdb.GetBoolPtr(false), nil) + assert.NotNil(t, mc22) + assert.NotNil(t, testInstanceBuildMachineInstanceType(t, dbSession, mc22, ist1)) + + mc23 := testInstanceBuildMachine(t, dbSession, ip.ID, st1.ID, cdb.GetBoolPtr(false), nil) + assert.NotNil(t, mc23) + assert.NotNil(t, testInstanceBuildMachineInstanceType(t, dbSession, mc23, ist1)) + // Tenant 1 os1 := testInstanceBuildOperatingSystem(t, dbSession, "test-operating-system-1", tn1, cdbm.OperatingSystemTypeIPXE, false, nil, true, cdbm.OperatingSystemStatusReady, tnu1) assert.NotNil(t, os1) @@ -835,6 +870,33 @@ func TestCreateInstanceHandler_Handle(t *testing.T) { osPhoneHome := testInstanceBuildOperatingSystem(t, dbSession, "test-operating-system-phonehome", tn1, cdbm.OperatingSystemTypeIPXE, true, cdb.GetStrPtr(""), true, cdbm.OperatingSystemStatusReady, tnu1) assert.NotNil(t, osPhoneHome) + // Templated iPXE OS - tenant-owned, no override + osTemplated1 := testInstanceBuildOperatingSystem(t, dbSession, "test-operating-system-templated-1", tn1, cdbm.OperatingSystemTypeTemplatedIPXE, false, nil, false, cdbm.OperatingSystemStatusReady, tnu1) + assert.NotNil(t, osTemplated1) + osTemplated1.IpxeTemplateId = cdb.GetStrPtr("test-template") + _, errOsT1 := dbSession.DB.NewUpdate().Model(osTemplated1).Column("ipxe_template_id").WherePK().Exec(context.Background()) + assert.NoError(t, errOsT1) + + // Templated iPXE OS - tenant-owned, override allowed + osTemplated2 := testInstanceBuildOperatingSystem(t, dbSession, "test-operating-system-templated-2", tn1, cdbm.OperatingSystemTypeTemplatedIPXE, true, cdb.GetStrPtr(cdmu.TestCommonCloudInit), false, cdbm.OperatingSystemStatusReady, tnu1) + assert.NotNil(t, osTemplated2) + osTemplated2.IpxeTemplateId = cdb.GetStrPtr("test-template-2") + _, errOsT2 := dbSession.DB.NewUpdate().Model(osTemplated2).Column("ipxe_template_id").WherePK().Exec(context.Background()) + assert.NoError(t, errOsT2) + + // Templated iPXE OS - deactivated + osTemplatedDeactivated := testInstanceBuildOperatingSystem(t, dbSession, "test-operating-system-templated-deactivated", tn1, cdbm.OperatingSystemTypeTemplatedIPXE, false, nil, false, cdbm.OperatingSystemStatusReady, tnu1) + assert.NotNil(t, osTemplatedDeactivated) + osTemplatedDeactivated.IsActive = false + testUpdateOSIsActive(t, dbSession, osTemplatedDeactivated) + + // Provider-owned iPXE OS (Templated) + osProviderTemplated := testInstanceBuildProviderOperatingSystem(t, dbSession, "test-operating-system-provider-templated", ip, cdbm.OperatingSystemTypeTemplatedIPXE, false, nil, false, cdbm.OperatingSystemStatusReady, ipu) + assert.NotNil(t, osProviderTemplated) + osProviderTemplated.IpxeTemplateId = cdb.GetStrPtr("provider-template") + _, errOsProv := dbSession.DB.NewUpdate().Model(osProviderTemplated).Column("ipxe_template_id").WherePK().Exec(context.Background()) + assert.NoError(t, errOsProv) + // create a default NVLink Logical Partition nvllpDefault := testBuildNVLinkLogicalPartition(t, dbSession, "test-nvllp-default", cdb.GetStrPtr("Test NVLink Logical Partition"), tnOrg, st1, tn1, cdb.GetStrPtr(cdbm.NVLinkLogicalPartitionStatusReady), false) assert.NotNil(t, nvllpDefault) @@ -2321,6 +2383,211 @@ func TestCreateInstanceHandler_Handle(t *testing.T) { }, wantErr: false, }, + // ─── Templated iPXE OS instance creation ────────────────────────── + { + name: "test Instance create with Templated iPXE OS, no override, should succeed", + fields: fields{ + dbSession: dbSession, + tc: tc, + cfg: cfg, + }, + args: args{ + reqData: &model.APIInstanceCreateRequest{ + Name: "test-instance-templated-ipxe", + TenantID: tn1.ID.String(), + InstanceTypeID: cdb.GetStrPtr(ist1.ID.String()), + VpcID: vpc1.ID.String(), + OperatingSystemID: cdb.GetStrPtr(osTemplated1.ID.String()), + Interfaces: []model.APIInterfaceCreateOrUpdateRequest{ + { + SubnetID: cdb.GetStrPtr(subnet1.ID.String()), + }, + }, + SSHKeyGroupIDs: []string{skg1.ID.String()}, + }, + reqMachine: nil, + reqOrg: tnOrg, + reqUser: tnu1, + respCode: http.StatusCreated, + respMessage: "", + }, + wantErr: false, + }, + { + name: "test Instance create with Templated iPXE OS, override allowed, user-data specified, should succeed", + fields: fields{ + dbSession: dbSession, + tc: tc, + cfg: cfg, + }, + args: args{ + reqData: &model.APIInstanceCreateRequest{ + Name: "test-instance-templated-ipxe-override", + TenantID: tn1.ID.String(), + InstanceTypeID: cdb.GetStrPtr(ist1.ID.String()), + VpcID: vpc1.ID.String(), + OperatingSystemID: cdb.GetStrPtr(osTemplated2.ID.String()), + UserData: cdb.GetStrPtr(cdmu.TestCommonCloudInit), + Interfaces: []model.APIInterfaceCreateOrUpdateRequest{ + { + SubnetID: cdb.GetStrPtr(subnet1.ID.String()), + }, + }, + SSHKeyGroupIDs: []string{skg1.ID.String()}, + }, + reqMachine: nil, + reqOrg: tnOrg, + reqUser: tnu1, + respCode: http.StatusCreated, + respMessage: "", + }, + wantErr: false, + }, + { + name: "test Instance create with Templated iPXE OS, iPXE script specified, should fail", + fields: fields{ + dbSession: dbSession, + tc: tc, + cfg: cfg, + }, + args: args{ + reqData: &model.APIInstanceCreateRequest{ + Name: "test-instance-templated-ipxe-with-script", + TenantID: tn1.ID.String(), + InstanceTypeID: cdb.GetStrPtr(ist1.ID.String()), + VpcID: vpc1.ID.String(), + OperatingSystemID: cdb.GetStrPtr(osTemplated1.ID.String()), + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + Interfaces: []model.APIInterfaceCreateOrUpdateRequest{ + { + SubnetID: cdb.GetStrPtr(subnet1.ID.String()), + }, + }, + }, + reqMachine: mc14, + reqOrg: tnOrg, + reqUser: tnu1, + respCode: http.StatusBadRequest, + respMessage: "cannot be specified with Operating System of type", + }, + wantErr: false, + }, + { + name: "test Instance create with deactivated Templated iPXE OS, should fail", + fields: fields{ + dbSession: dbSession, + tc: tc, + cfg: cfg, + }, + args: args{ + reqData: &model.APIInstanceCreateRequest{ + Name: "test-instance-templated-deactivated", + TenantID: tn1.ID.String(), + InstanceTypeID: cdb.GetStrPtr(ist1.ID.String()), + VpcID: vpc1.ID.String(), + OperatingSystemID: cdb.GetStrPtr(osTemplatedDeactivated.ID.String()), + Interfaces: []model.APIInterfaceCreateOrUpdateRequest{ + { + SubnetID: cdb.GetStrPtr(subnet1.ID.String()), + }, + }, + }, + reqMachine: mc14, + reqOrg: tnOrg, + reqUser: tnu1, + respCode: http.StatusBadRequest, + respMessage: "has been deactivated", + }, + wantErr: false, + }, + { + name: "test Instance create with Templated iPXE OS, AlwaysBootWithCustomIpxe, should fail", + fields: fields{ + dbSession: dbSession, + tc: tc, + cfg: cfg, + }, + args: args{ + reqData: &model.APIInstanceCreateRequest{ + Name: "test-instance-templated-always-boot", + TenantID: tn1.ID.String(), + InstanceTypeID: cdb.GetStrPtr(ist1.ID.String()), + VpcID: vpc1.ID.String(), + OperatingSystemID: cdb.GetStrPtr(osTemplated1.ID.String()), + AlwaysBootWithCustomIpxe: cdb.GetBoolPtr(true), + Interfaces: []model.APIInterfaceCreateOrUpdateRequest{ + { + SubnetID: cdb.GetStrPtr(subnet1.ID.String()), + }, + }, + }, + reqMachine: mc14, + reqOrg: tnOrg, + reqUser: tnu1, + respCode: http.StatusBadRequest, + respMessage: "cannot be set with Operating System of type", + }, + wantErr: false, + }, + // ─── Provider-owned OS instance creation ────────────────────────── + { + name: "test Instance create with provider-owned Templated iPXE OS, should succeed", + fields: fields{ + dbSession: dbSession, + tc: tc, + cfg: cfg, + }, + args: args{ + reqData: &model.APIInstanceCreateRequest{ + Name: "test-instance-provider-os", + TenantID: tn1.ID.String(), + InstanceTypeID: cdb.GetStrPtr(ist1.ID.String()), + VpcID: vpc1.ID.String(), + OperatingSystemID: cdb.GetStrPtr(osProviderTemplated.ID.String()), + Interfaces: []model.APIInterfaceCreateOrUpdateRequest{ + { + SubnetID: cdb.GetStrPtr(subnet1.ID.String()), + }, + }, + SSHKeyGroupIDs: []string{skg1.ID.String()}, + }, + reqMachine: nil, + reqOrg: tnOrg, + reqUser: tnu1, + respCode: http.StatusCreated, + respMessage: "", + }, + wantErr: false, + }, + { + name: "test Instance create with provider-owned OS, user-data override not allowed, should fail", + fields: fields{ + dbSession: dbSession, + tc: tc, + cfg: cfg, + }, + args: args{ + reqData: &model.APIInstanceCreateRequest{ + Name: "test-instance-provider-os-override", + TenantID: tn1.ID.String(), + InstanceTypeID: cdb.GetStrPtr(ist1.ID.String()), + VpcID: vpc1.ID.String(), + OperatingSystemID: cdb.GetStrPtr(osProviderTemplated.ID.String()), + UserData: cdb.GetStrPtr("custom user data"), + Interfaces: []model.APIInterfaceCreateOrUpdateRequest{ + { + SubnetID: cdb.GetStrPtr(subnet1.ID.String()), + }, + }, + }, + reqMachine: mc14, + reqOrg: tnOrg, + reqUser: tnu1, + respCode: http.StatusBadRequest, + respMessage: "does not allow overriding", + }, + wantErr: false, + }, { name: "test Instance create API endpoint failed, same InfiniBand interfaces specified multiple times in request", fields: fields{ diff --git a/api/pkg/api/handler/instancebatch.go b/api/pkg/api/handler/instancebatch.go index 0166e7d54..872252cfd 100644 --- a/api/pkg/api/handler/instancebatch.go +++ b/api/pkg/api/handler/instancebatch.go @@ -80,7 +80,7 @@ func NewBatchCreateInstanceHandler(dbSession *cdb.Session, tc temporalClient.Cli // buildBatchInstanceCreateRequestOsConfig validates and retrieves OS configuration for batch instance creation. // This mirrors the behavior of CreateInstanceHandler.buildInstanceCreateRequestOsConfig. // Returns: osConfig, osID, and error (matching single API pattern) -func (bcih BatchCreateInstanceHandler) buildBatchInstanceCreateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIBatchInstanceCreateRequest, site *cdbm.Site) (*cwssaws.InstanceOperatingSystemConfig, *uuid.UUID, *cutil.APIError) { +func (bcih BatchCreateInstanceHandler) buildBatchInstanceCreateRequestOsConfig(c echo.Context, logger *zerolog.Logger, apiRequest *model.APIBatchInstanceCreateRequest, site *cdbm.Site, tenant *cdbm.Tenant) (*cwssaws.InstanceOperatingSystemConfig, *uuid.UUID, *cutil.APIError) { ctx := c.Request().Context() @@ -138,8 +138,8 @@ func (bcih BatchCreateInstanceHandler) buildBatchInstanceCreateRequestOsConfig(c return c.Str("OperatingSystem ID", os.ID.String()) }) - // Confirm ownership between tenant and OS. - if os.TenantID.String() != apiRequest.TenantID { + // Tenant can use this OS if they created it or offered by Provider + if !(os.TenantID == nil || *os.TenantID == tenant.ID) { logger.Error().Msg("OperatingSystem in request is not owned by tenant") return nil, nil, cutil.NewAPIError(http.StatusBadRequest, "OperatingSystem specified in request is not owned by Tenant", nil) } @@ -190,28 +190,27 @@ func (bcih BatchCreateInstanceHandler) buildBatchInstanceCreateRequestOsConfig(c // Options below should all have been set by the // earlier call to ValidateAndSetOperatingSystemData - if cdbm.IsIPXEType(os.Type) { - return &cwssaws.InstanceOperatingSystemConfig{ - RunProvisioningInstructionsOnEveryBoot: *apiRequest.AlwaysBootWithCustomIpxe, - PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, - Variant: &cwssaws.InstanceOperatingSystemConfig_Ipxe{ - Ipxe: &cwssaws.InlineIpxe{ - IpxeScript: *apiRequest.IpxeScript, - }, - }, - UserData: apiRequest.UserData, - }, osID, nil - } else { - return &cwssaws.InstanceOperatingSystemConfig{ - PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, - Variant: &cwssaws.InstanceOperatingSystemConfig_OsImageId{ - OsImageId: &cwssaws.UUID{ - Value: os.ID.String(), - }, - }, - UserData: apiRequest.UserData, - }, osID, nil + result := cwssaws.InstanceOperatingSystemConfig{ + PhoneHomeEnabled: *apiRequest.PhoneHomeEnabled, + UserData: apiRequest.UserData, + } + switch os.Type { + case cdbm.OperatingSystemTypeIPXE: + result.RunProvisioningInstructionsOnEveryBoot = *apiRequest.AlwaysBootWithCustomIpxe + result.Variant = &cwssaws.InstanceOperatingSystemConfig_Ipxe{ + Ipxe: &cwssaws.InlineIpxe{IpxeScript: *apiRequest.IpxeScript}, + } + case cdbm.OperatingSystemTypeTemplatedIPXE: + result.RunProvisioningInstructionsOnEveryBoot = *apiRequest.AlwaysBootWithCustomIpxe + result.Variant = &cwssaws.InstanceOperatingSystemConfig_OperatingSystemId{ + OperatingSystemId: &cwssaws.OperatingSystemId{Value: os.ID.String()}, + } + case cdbm.OperatingSystemTypeImage: + result.Variant = &cwssaws.InstanceOperatingSystemConfig_OsImageId{ + OsImageId: &cwssaws.UUID{Value: os.ID.String()}, + } } + return &result, osID, nil } // Handle godoc @@ -365,19 +364,18 @@ func (bcih BatchCreateInstanceHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) } - // Deprecated: tenantId in request body. Infer from org when not provided. - if apiRequest.TenantID == "" { - apiRequest.TenantID = tenant.ID.String() - } - - apiTenant, err := common.GetTenantFromIDString(ctx, nil, apiRequest.TenantID, bcih.dbSession) - if err != nil { - logger.Warn().Err(err).Msg("error retrieving tenant from request") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request is not valid", nil) - } - if apiTenant.ID != tenant.ID { - logger.Warn().Msg("tenant id in request does not match tenant in org") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request does not match tenant in org", nil) + // If the caller provided an explicit tenantId in the body, validate it matches the org. + // TODO: tenantId as parameter is deprecated and will need to be removed by 2026-10-01. + if apiRequest.TenantID != "" { + apiTenant, terr := common.GetTenantFromIDString(ctx, nil, apiRequest.TenantID, bcih.dbSession) + if terr != nil { + logger.Warn().Err(terr).Msg("error retrieving tenant from request") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request is not valid", nil) + } + if apiTenant.ID != tenant.ID { + logger.Warn().Msg("tenant id in request does not match tenant in org") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "TenantID in request does not match tenant in org", nil) + } } // Validate the instance type @@ -838,7 +836,7 @@ func (bcih BatchCreateInstanceHandler) Handle(c echo.Context) error { // apiRequest will be mutated for use in CreateFromParams. // osConfig will hold the struct/data for use with Temporal/Carbide calls. // Errors will be returned already in the form of cutil.NewAPIErrorResponse - osConfig, osID, oserr := bcih.buildBatchInstanceCreateRequestOsConfig(c, &logger, &apiRequest, site) + osConfig, osID, oserr := bcih.buildBatchInstanceCreateRequestOsConfig(c, &logger, &apiRequest, site, tenant) if oserr != nil { // buildBatchInstanceCreateRequestOsConfig already handles logging, // so this is a bit redundant, but this log brings you to the diff --git a/api/pkg/api/handler/ipxetemplate.go b/api/pkg/api/handler/ipxetemplate.go index ae259e9e3..09d2d50b7 100644 --- a/api/pkg/api/handler/ipxetemplate.go +++ b/api/pkg/api/handler/ipxetemplate.go @@ -61,14 +61,13 @@ func NewGetAllIpxeTemplateHandler(dbSession *cdb.Session, tc tclient.Client, cfg // Handle godoc // @Summary Get all iPXE templates -// @Description Get all iPXE templates propagated from bare-metal-manager-core for a given site. Any Tenant Admin or Provider Admin/Viewer can access templates for sites they are associated with. +// @Description Get all iPXE templates propagated from bare-metal-manager-core. The `siteId` query parameter is optional and may be repeated to filter by one or more sites. When omitted, a Provider Admin/Viewer receives templates for all sites owned by their infrastructure provider; a Tenant Admin receives templates for all sites whose provider the tenant has a Tenant Account on. // @Tags iPXE Template // @Accept json // @Produce json // @Security ApiKeyAuth // @Param org path string true "Name of NGC organization" -// @Param siteId query string true "ID of Site" -// @Param scope query string false "Filter by scope ('internal' or 'public')" +// @Param siteId query []string false "Optional site ID(s); may be repeated to filter by multiple sites" // @Param pageNumber query integer false "Page number of results returned" // @Param pageSize query integer false "Number of results per page" // @Param orderBy query string false "Order by field" @@ -85,77 +84,118 @@ func (h GetAllIpxeTemplateHandler) Handle(c echo.Context) error { return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve current user", nil) } - // Validate org membership - if _, err := dbUser.OrgData.GetOrgByName(org); err != nil { - logger.Warn().Msg("could not validate org membership for user, access denied") - return cerr.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) - } - - // Validate role: Provider Admins/Viewers or any Tenant Admin + // Validate role (Provider Admin/Viewer or Tenant Admin) and org membership infrastructureProvider, tenant, apiError := common.IsProviderOrTenant(ctx, logger, h.dbSession, org, dbUser, true, false) if apiError != nil { return cerr.NewAPIErrorResponse(c, apiError.Code, apiError.Message, apiError.Data) } - // siteId is required - siteIDStr := c.QueryParam("siteId") - if siteIDStr == "" { - return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Site ID must be specified in query parameter 'siteId'", nil) + // Parse optional siteId query parameters. Multiple values (repeated + // `?siteId=...&siteId=...`) are supported. + requestedSiteIDStrs := c.QueryParams()["siteId"] + requestedSiteIDs := make([]uuid.UUID, 0, len(requestedSiteIDStrs)) + for _, s := range requestedSiteIDStrs { + if s == "" { + continue + } + parsed, perr := uuid.Parse(s) + if perr != nil { + return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Invalid siteId in query parameter: %s", s), nil) + } + requestedSiteIDs = append(requestedSiteIDs, parsed) } - site, err := common.GetSiteFromIDString(ctx, nil, siteIDStr, h.dbSession) - if err != nil { - if errors.Is(err, common.ErrInvalidID) { - return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Invalid siteId in request data", nil) + // Build the caller's authorized site set, tracking which sites come from the + // provider path vs the tenant path. A site can be in both sets for a + // dual-role caller — provider access wins (fewer restrictions). + // + // Note on tenant-path scoping: tenant access is established per-site via + // `TenantSite` associations (a tenant may be associated with some sites of + // a provider but not others). + providerSites := map[uuid.UUID]struct{}{} + tenantSites := map[uuid.UUID]struct{}{} + + if infrastructureProvider != nil { + siteDAO := cdbm.NewSiteDAO(h.dbSession) + sites, _, serr := siteDAO.GetAll(ctx, nil, + cdbm.SiteFilterInput{InfrastructureProviderIDs: []uuid.UUID{infrastructureProvider.ID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, + nil, + ) + if serr != nil { + logger.Error().Err(serr).Msg("error retrieving provider sites from DB") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve provider sites, DB error", nil) } - if errors.Is(err, cdb.ErrDoesNotExist) { - return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Site specified in request data does not exist", nil) + for i := range sites { + providerSites[sites[i].ID] = struct{}{} } - logger.Error().Err(err).Msg("error retrieving Site from DB") - return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site specified in request data, DB error", nil) } - // Validate site ownership — evaluate both roles independently so a mixed-role - // service account succeeds if either path authorizes the request. - providerAllowed := infrastructureProvider != nil && site.InfrastructureProviderID == infrastructureProvider.ID - - tenantAllowed := false - if !providerAllowed && tenant != nil { - taDAO := cdbm.NewTenantAccountDAO(h.dbSession) - _, taCount, serr := taDAO.GetAll(ctx, nil, cdbm.TenantAccountFilterInput{ - InfrastructureProviderID: &site.InfrastructureProviderID, - TenantIDs: []uuid.UUID{tenant.ID}, - }, cdbp.PageInput{}, []string{}) - if serr != nil { - logger.Error().Err(serr).Msg("error retrieving Tenant Account for Site") - return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Error retrieving Tenant Account for Site", nil) + if tenant != nil { + tsDAO := cdbm.NewTenantSiteDAO(h.dbSession) + tss, _, terr := tsDAO.GetAll(ctx, nil, + cdbm.TenantSiteFilterInput{TenantIDs: []uuid.UUID{tenant.ID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, + nil, + ) + if terr != nil { + logger.Error().Err(terr).Msg("error retrieving Tenant Site associations from DB") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Tenant Site associations, DB error", nil) + } + for i := range tss { + tenantSites[tss[i].SiteID] = struct{}{} } - tenantAllowed = taCount > 0 } - if !providerAllowed && !tenantAllowed { - logger.Warn().Msg("neither provider nor tenant authorization succeeded for Site access") - return cerr.NewAPIErrorResponse(c, http.StatusForbidden, "Current org is not authorized to access the Site specified in request data", nil) + isAuthorized := func(id uuid.UUID) bool { + if _, ok := providerSites[id]; ok { + return true + } + _, ok := tenantSites[id] + return ok } - filterInput := cdbm.IpxeTemplateFilterInput{ - SiteIDs: []uuid.UUID{site.ID}, + // Determine the effective site filter: + // - siteId(s) provided: must all be authorized; use them as-is. + // - siteId(s) omitted: use the union of provider and tenant accessible sites. + var effectiveSiteIDs []uuid.UUID + if len(requestedSiteIDs) > 0 { + for _, id := range requestedSiteIDs { + if !isAuthorized(id) { + logger.Warn().Str("siteID", id.String()).Msg("org not authorized to access requested Site") + return cerr.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Current org is not authorized to access Site: %s", id.String()), nil) + } + } + effectiveSiteIDs = requestedSiteIDs + } else { + effectiveSiteIDs = make([]uuid.UUID, 0, len(providerSites)+len(tenantSites)) + seen := map[uuid.UUID]struct{}{} + for id := range providerSites { + if _, ok := seen[id]; !ok { + seen[id] = struct{}{} + effectiveSiteIDs = append(effectiveSiteIDs, id) + } + } + for id := range tenantSites { + if _, ok := seen[id]; !ok { + seen[id] = struct{}{} + effectiveSiteIDs = append(effectiveSiteIDs, id) + } + } } - if tenantAllowed && !providerAllowed { - // Tenants may only see PUBLIC templates; ignore any scope query param. - filterInput.Scopes = []string{cdbm.IpxeTemplateScopePublic} - } else if scopeStr := c.QueryParam("scope"); scopeStr != "" { - filterInput.Scopes = []string{scopeStr} + // No authorized sites — neither provider-owned nor reachable via a tenant account. + if len(effectiveSiteIDs) == 0 { + return cerr.NewAPIErrorResponse(c, http.StatusForbidden, "Current org is not associated with any Site", nil) } // Validate pagination request pageRequest := pagination.PageRequest{} - if err = c.Bind(&pageRequest); err != nil { + if err := c.Bind(&pageRequest); err != nil { logger.Warn().Err(err).Msg("error binding pagination request data into API model") return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to parse request pagination data", nil) } - if err = pageRequest.Validate(cdbm.IpxeTemplateOrderByFields); err != nil { + if err := pageRequest.Validate(cdbm.IpxeTemplateOrderByFields); err != nil { logger.Warn().Err(err).Msg("error validating pagination request data") return cerr.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to validate pagination request data", err) } @@ -165,7 +205,7 @@ func (h GetAllIpxeTemplateHandler) Handle(c echo.Context) error { templates, total, err := templateDAO.GetAll( ctx, nil, - filterInput, + cdbm.IpxeTemplateFilterInput{SiteIDs: effectiveSiteIDs}, paginator.PageInput{ Offset: pageRequest.Offset, Limit: pageRequest.Limit, @@ -239,13 +279,8 @@ func (h GetIpxeTemplateHandler) Handle(c echo.Context) error { return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve current user", nil) } - // Validate org membership - if _, err := dbUser.OrgData.GetOrgByName(org); err != nil { - logger.Warn().Msg("could not validate org membership for user, access denied") - return cerr.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) - } - - // Validate role: Provider Admins/Viewers or any Tenant Admin + // Validate role (Provider Admin/Viewer or Tenant Admin) — this also validates + // org membership, so no separate membership check is needed here. infrastructureProvider, tenant, apiError := common.IsProviderOrTenant(ctx, logger, h.dbSession, org, dbUser, true, false) if apiError != nil { return cerr.NewAPIErrorResponse(c, apiError.Code, apiError.Message, apiError.Data) @@ -296,16 +331,16 @@ func (h GetIpxeTemplateHandler) Handle(c echo.Context) error { tenantAllowed := false if !providerAllowed && tenant != nil { - taDAO := cdbm.NewTenantAccountDAO(h.dbSession) - _, taCount, serr := taDAO.GetAll(ctx, nil, cdbm.TenantAccountFilterInput{ - InfrastructureProviderID: &site.InfrastructureProviderID, - TenantIDs: []uuid.UUID{tenant.ID}, - }, cdbp.PageInput{}, []string{}) + tsDAO := cdbm.NewTenantSiteDAO(h.dbSession) + _, tsCount, serr := tsDAO.GetAll(ctx, nil, cdbm.TenantSiteFilterInput{ + TenantIDs: []uuid.UUID{tenant.ID}, + SiteIDs: []uuid.UUID{site.ID}, + }, cdbp.PageInput{}, nil) if serr != nil { - logger.Error().Err(serr).Msg("error retrieving Tenant Account for Site") - return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Error retrieving Tenant Account for Site", nil) + logger.Error().Err(serr).Msg("error retrieving Tenant Site association for Site") + return cerr.NewAPIErrorResponse(c, http.StatusInternalServerError, "Error retrieving Tenant Site association for Site", nil) } - tenantAllowed = taCount > 0 + tenantAllowed = tsCount > 0 } if !providerAllowed && !tenantAllowed { @@ -313,11 +348,6 @@ func (h GetIpxeTemplateHandler) Handle(c echo.Context) error { return cerr.NewAPIErrorResponse(c, http.StatusForbidden, "Current org is not authorized to access the iPXE template's Site", nil) } - if tenantAllowed && !providerAllowed && tmpl.Scope == cdbm.IpxeTemplateScopeInternal { - logger.Warn().Msg("tenant attempted to access an internal iPXE template") - return cerr.NewAPIErrorResponse(c, http.StatusForbidden, "Current org is not authorized to access this iPXE template", nil) - } - logger.Info().Msg("finishing API handler") return c.JSON(http.StatusOK, model.NewAPIIpxeTemplate(tmpl)) } diff --git a/api/pkg/api/handler/ipxetemplate_test.go b/api/pkg/api/handler/ipxetemplate_test.go index 32a7ca819..4e5f8f620 100644 --- a/api/pkg/api/handler/ipxetemplate_test.go +++ b/api/pkg/api/handler/ipxetemplate_test.go @@ -47,7 +47,7 @@ func testIpxeTemplateInitDB(t *testing.T) *cdb.Session { func testIpxeTemplateHandlerSetupSchema(t *testing.T, dbSession *cdb.Session) { ctx := context.Background() - assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.TenantAccount)(nil))) + assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.TenantSite)(nil))) assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.IpxeTemplate)(nil))) assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.Tenant)(nil))) assert.Nil(t, dbSession.DB.ResetModel(ctx, (*cdbm.Site)(nil))) @@ -167,41 +167,71 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { _, err = dbSession.DB.NewInsert().Model(unmanagedSite).Exec(ctx) assert.Nil(t, err) - // Tenant with TenantAccount (has TargetedInstanceCreation, but that is irrelevant) + // Second provider-owned site with its own (Internal) template, to exercise the + // "omitted siteId", multi-siteId, and per-site tenant-association paths. + site2 := &cdbm.Site{ID: uuid.New(), Name: "test-site-2", Org: org, InfrastructureProviderID: fix.ip.ID, Status: cdbm.SiteStatusRegistered} + _, err = dbSession.DB.NewInsert().Model(site2).Exec(ctx) + assert.Nil(t, err) + + // The sync workflow only propagates Public templates into REST, so all stored + // rows are Public. We keep a second site with its own template purely to + // exercise omitted-/multi-siteId and per-site tenant-association paths. + tmpl3, err := cdbm.NewIpxeTemplateDAO(dbSession).Create(ctx, nil, cdbm.IpxeTemplateCreateInput{ + TemplateID: uuid.New(), SiteID: site2.ID, Name: "site2-public", Scope: cdbm.IpxeTemplateScopePublic, + }) + assert.Nil(t, err) + + // Tenant with a TenantSite association to fix.site only (not site2). tenantOrg := "test-tenant-org" tenantWithCapability := &cdbm.Tenant{ID: uuid.New(), Name: "test-tenant", Org: tenantOrg, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} _, err = dbSession.DB.NewInsert().Model(tenantWithCapability).Exec(ctx) assert.Nil(t, err) - tenantAccount := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-123", TenantID: &tenantWithCapability.ID, TenantOrg: tenantOrg, InfrastructureProviderID: fix.ip.ID, Status: "active"} - _, err = dbSession.DB.NewInsert().Model(tenantAccount).Exec(ctx) + tenantSite := &cdbm.TenantSite{ID: uuid.New(), TenantID: tenantWithCapability.ID, TenantOrg: tenantOrg, SiteID: fix.site.ID} + _, err = dbSession.DB.NewInsert().Model(tenantSite).Exec(ctx) assert.Nil(t, err) - // Non-privileged tenant WITH TenantAccount — should succeed (no TargetedInstanceCreation required) + // Non-privileged tenant WITH a TenantSite association — should still succeed. tenantOrgNonPriv := "test-tenant-non-priv" tenantNonPriv := &cdbm.Tenant{ID: uuid.New(), Name: "non-priv-tenant", Org: tenantOrgNonPriv, Config: &cdbm.TenantConfig{TargetedInstanceCreation: false}} _, err = dbSession.DB.NewInsert().Model(tenantNonPriv).Exec(ctx) assert.Nil(t, err) - tenantAccountNonPriv := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-np", TenantID: &tenantNonPriv.ID, TenantOrg: tenantOrgNonPriv, InfrastructureProviderID: fix.ip.ID, Status: "active"} - _, err = dbSession.DB.NewInsert().Model(tenantAccountNonPriv).Exec(ctx) + tenantSiteNonPriv := &cdbm.TenantSite{ID: uuid.New(), TenantID: tenantNonPriv.ID, TenantOrg: tenantOrgNonPriv, SiteID: fix.site.ID} + _, err = dbSession.DB.NewInsert().Model(tenantSiteNonPriv).Exec(ctx) assert.Nil(t, err) - // Tenant without TenantAccount (no site association) + // Tenant with a TenantSite to fix.site AND site2 — exercises the multi-site + // tenant path (should see Public templates from both sites). + tenantOrgTwoSites := "test-tenant-two-sites" + tenantTwoSites := &cdbm.Tenant{ID: uuid.New(), Name: "two-sites-tenant", Org: tenantOrgTwoSites, Config: &cdbm.TenantConfig{}} + _, err = dbSession.DB.NewInsert().Model(tenantTwoSites).Exec(ctx) + assert.Nil(t, err) + + tenantSiteTwoA := &cdbm.TenantSite{ID: uuid.New(), TenantID: tenantTwoSites.ID, TenantOrg: tenantOrgTwoSites, SiteID: fix.site.ID} + _, err = dbSession.DB.NewInsert().Model(tenantSiteTwoA).Exec(ctx) + assert.Nil(t, err) + + tenantSiteTwoB := &cdbm.TenantSite{ID: uuid.New(), TenantID: tenantTwoSites.ID, TenantOrg: tenantOrgTwoSites, SiteID: site2.ID} + _, err = dbSession.DB.NewInsert().Model(tenantSiteTwoB).Exec(ctx) + assert.Nil(t, err) + + // Tenant without any TenantSite association (no site access). tenantOrgNoCapability := "test-tenant-no-capability" tenantWithoutCapability := &cdbm.Tenant{ID: uuid.New(), Name: "no-cap-tenant", Org: tenantOrgNoCapability, Config: &cdbm.TenantConfig{TargetedInstanceCreation: false}} _, err = dbSession.DB.NewInsert().Model(tenantWithoutCapability).Exec(ctx) assert.Nil(t, err) - // Tenant with capability but no TenantAccount - tenantOrgNoAccount := "test-tenant-no-account" - tenantWithoutAccount := &cdbm.Tenant{ID: uuid.New(), Name: "no-account-tenant", Org: tenantOrgNoAccount, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} + // Tenant with capability but no TenantSite. + tenantOrgNoAccount := "test-tenant-no-site" + tenantWithoutAccount := &cdbm.Tenant{ID: uuid.New(), Name: "no-site-tenant", Org: tenantOrgNoAccount, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} _, err = dbSession.DB.NewInsert().Model(tenantWithoutAccount).Exec(ctx) assert.Nil(t, err) // Mixed-role org: has both a provider (different from fix.ip) and a tenant - // with a TenantAccount linked to fix.ip. A mixed-role user in this org should fail - // the provider check (site belongs to fix.ip, not mixedIP) but pass via the tenant path. + // with a TenantSite association to fix.site. A mixed-role user in this org + // should fail the provider check (site belongs to fix.ip, not mixedIP) but + // pass via the tenant path. mixedOrg := "mixed-role-org" mixedIP := &cdbm.InfrastructureProvider{ID: uuid.New(), Name: "mixed-provider", Org: mixedOrg} _, err = dbSession.DB.NewInsert().Model(mixedIP).Exec(ctx) @@ -211,38 +241,61 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { _, err = dbSession.DB.NewInsert().Model(mixedTenant).Exec(ctx) assert.Nil(t, err) - mixedTA := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-mixed", TenantID: &mixedTenant.ID, TenantOrg: mixedOrg, InfrastructureProviderID: fix.ip.ID, Status: "active"} - _, err = dbSession.DB.NewInsert().Model(mixedTA).Exec(ctx) + mixedTenantSite := &cdbm.TenantSite{ID: uuid.New(), TenantID: mixedTenant.ID, TenantOrg: mixedOrg, SiteID: fix.site.ID} + _, err = dbSession.DB.NewInsert().Model(mixedTenantSite).Exec(ctx) assert.Nil(t, err) _ = fix.tmpl1 _ = fix.tmpl2 - _ = tenantAccount - _ = tenantAccountNonPriv + _ = tmpl3 + _ = tenantSite + _ = tenantSiteNonPriv _ = tenantWithoutCapability _ = tenantWithoutAccount tests := []struct { name string - siteID string - scope string + siteIDs []string setupContext func(c echo.Context) expectedStatus int checkResponseContent func(t *testing.T, body []byte) }{ { - name: "missing siteId returns bad request", - siteID: "", + name: "omitted siteId returns all templates for provider's sites", + siteIDs: nil, setupContext: func(c echo.Context) { c.Set("user", createIpxeTemplateMockUser(org)) c.SetParamNames("orgName") c.SetParamValues(org) }, - expectedStatus: http.StatusBadRequest, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response []*model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + // tmpl1, tmpl2 on fix.site + tmpl3 on site2. + assert.Len(t, response, 3) + }, }, { - name: "successful GetAll with valid siteId", - siteID: fix.site.ID.String(), + name: "omitted siteId for tenant returns templates for tenant-accessible sites", + siteIDs: nil, + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrg)) + c.SetParamNames("orgName") + c.SetParamValues(tenantOrg) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response []*model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + // tenantOrg has a TenantSite on fix.site only, so only tmpl1 and + // tmpl2 are visible. + assert.Len(t, response, 2) + }, + }, + { + name: "multiple siteIds filters by the union", + siteIDs: []string{fix.site.ID.String(), site2.ID.String()}, setupContext: func(c echo.Context) { c.Set("user", createIpxeTemplateMockUser(org)) c.SetParamNames("orgName") @@ -252,16 +305,32 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { checkResponseContent: func(t *testing.T, body []byte) { var response []*model.APIIpxeTemplate assert.Nil(t, json.Unmarshal(body, &response)) - assert.Len(t, response, 2) - for _, tmpl := range response { - assert.Equal(t, fix.site.ID.String(), tmpl.SiteID) - } + assert.Len(t, response, 3) + }, + }, + { + name: "multiple siteIds with one unauthorized returns 403", + siteIDs: []string{fix.site.ID.String(), unmanagedSite.ID.String()}, + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName") + c.SetParamValues(org) }, + expectedStatus: http.StatusForbidden, }, { - name: "filter by scope returns subset", - siteID: fix.site.ID.String(), - scope: cdbm.IpxeTemplateScopePublic, + name: "invalid siteId returns 400", + siteIDs: []string{"not-a-uuid"}, + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateMockUser(org)) + c.SetParamNames("orgName") + c.SetParamValues(org) + }, + expectedStatus: http.StatusBadRequest, + }, + { + name: "successful GetAll with valid siteId", + siteIDs: []string{fix.site.ID.String()}, setupContext: func(c echo.Context) { c.Set("user", createIpxeTemplateMockUser(org)) c.SetParamNames("orgName") @@ -272,11 +341,14 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { var response []*model.APIIpxeTemplate assert.Nil(t, json.Unmarshal(body, &response)) assert.Len(t, response, 2) + for _, tmpl := range response { + assert.Equal(t, fix.site.ID.String(), tmpl.SiteID) + } }, }, { - name: "cannot retrieve from unmanaged site", - siteID: unmanagedSite.ID.String(), + name: "cannot retrieve from unmanaged site", + siteIDs: []string{unmanagedSite.ID.String()}, setupContext: func(c echo.Context) { c.Set("user", createIpxeTemplateMockUser(org)) c.SetParamNames("orgName") @@ -285,8 +357,8 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { expectedStatus: http.StatusForbidden, }, { - name: "missing user context returns 500", - siteID: "", + name: "missing user context returns 500", + siteIDs: nil, setupContext: func(c echo.Context) { c.SetParamNames("orgName") c.SetParamValues(org) @@ -294,8 +366,8 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { expectedStatus: http.StatusInternalServerError, }, { - name: "tenant with TenantAccount can retrieve templates", - siteID: fix.site.ID.String(), + name: "tenant with TenantSite can retrieve templates for that site", + siteIDs: []string{fix.site.ID.String()}, setupContext: func(c echo.Context) { c.Set("user", createIpxeTemplateTenantMockUser(tenantOrg)) c.SetParamNames("orgName") @@ -309,8 +381,8 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { }, }, { - name: "non-privileged tenant with TenantAccount can retrieve templates", - siteID: fix.site.ID.String(), + name: "non-privileged tenant with TenantSite can retrieve templates", + siteIDs: []string{fix.site.ID.String()}, setupContext: func(c echo.Context) { c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgNonPriv)) c.SetParamNames("orgName") @@ -324,8 +396,8 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { }, }, { - name: "tenant without TenantAccount is denied", - siteID: fix.site.ID.String(), + name: "tenant without TenantSite is denied", + siteIDs: []string{fix.site.ID.String()}, setupContext: func(c echo.Context) { c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgNoCapability)) c.SetParamNames("orgName") @@ -334,8 +406,8 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { expectedStatus: http.StatusForbidden, }, { - name: "tenant without TenantAccount with Provider is denied", - siteID: fix.site.ID.String(), + name: "tenant without TenantSite cannot access provider site", + siteIDs: []string{fix.site.ID.String()}, setupContext: func(c echo.Context) { c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgNoAccount)) c.SetParamNames("orgName") @@ -344,8 +416,8 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { expectedStatus: http.StatusForbidden, }, { - name: "mixed-role user fails provider check but passes tenant authorization", - siteID: fix.site.ID.String(), + name: "mixed-role user fails provider check but passes tenant authorization", + siteIDs: []string{fix.site.ID.String()}, setupContext: func(c echo.Context) { c.Set("user", createIpxeTemplateMixedRoleMockUser(mixedOrg)) c.SetParamNames("orgName") @@ -358,19 +430,48 @@ func TestGetAllIpxeTemplateHandler_Handle(t *testing.T) { assert.Len(t, response, 2) }, }, + // Per-site scoping: a tenant associated with fix.site (but not site2) must + // not receive templates from site2, even though both sites belong to the + // same provider. This is the bug the TenantSite-based scoping fixes. + { + name: "tenant associated with one site cannot access sibling site on same provider", + siteIDs: []string{site2.ID.String()}, + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrg)) + c.SetParamNames("orgName") + c.SetParamValues(tenantOrg) + }, + expectedStatus: http.StatusForbidden, + }, + { + name: "tenant with TenantSite on multiple sites sees templates on each", + siteIDs: nil, + setupContext: func(c echo.Context) { + c.Set("user", createIpxeTemplateTenantMockUser(tenantOrgTwoSites)) + c.SetParamNames("orgName") + c.SetParamValues(tenantOrgTwoSites) + }, + expectedStatus: http.StatusOK, + checkResponseContent: func(t *testing.T, body []byte) { + var response []*model.APIIpxeTemplate + assert.Nil(t, json.Unmarshal(body, &response)) + // tmpl1 and tmpl2 on fix.site + tmpl3 on site2 = 3 templates. + assert.Len(t, response, 3) + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { url := "/v2/org/" + org + "/carbide/ipxe-template" - if tt.siteID != "" { - url += "?siteId=" + tt.siteID + params := []string{} + for _, sid := range tt.siteIDs { + params = append(params, "siteId="+sid) } - if tt.scope != "" { - if tt.siteID != "" { - url += "&scope=" + tt.scope - } else { - url += "?scope=" + tt.scope + if len(params) > 0 { + url += "?" + params[0] + for _, p := range params[1:] { + url += "&" + p } } @@ -421,39 +522,40 @@ func TestGetIpxeTemplateHandler_Handle(t *testing.T) { }) assert.Nil(t, err) - // Tenant with TenantAccount + // Tenant with a TenantSite association to fix.site. tenantOrg := "test-tenant-org" tenantWithCapability := &cdbm.Tenant{ID: uuid.New(), Name: "test-tenant", Org: tenantOrg, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} _, err = dbSession.DB.NewInsert().Model(tenantWithCapability).Exec(ctx) assert.Nil(t, err) - tenantAccount := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-456", TenantID: &tenantWithCapability.ID, TenantOrg: tenantOrg, InfrastructureProviderID: fix.ip.ID, Status: "active"} - _, err = dbSession.DB.NewInsert().Model(tenantAccount).Exec(ctx) + tenantSiteGet := &cdbm.TenantSite{ID: uuid.New(), TenantID: tenantWithCapability.ID, TenantOrg: tenantOrg, SiteID: fix.site.ID} + _, err = dbSession.DB.NewInsert().Model(tenantSiteGet).Exec(ctx) assert.Nil(t, err) - // Non-privileged tenant WITH TenantAccount — should succeed + // Non-privileged tenant WITH a TenantSite — should succeed. tenantOrgNonPrivGet := "test-tenant-non-priv-get" tenantNonPrivGet := &cdbm.Tenant{ID: uuid.New(), Name: "non-priv-tenant-get", Org: tenantOrgNonPrivGet, Config: &cdbm.TenantConfig{TargetedInstanceCreation: false}} _, err = dbSession.DB.NewInsert().Model(tenantNonPrivGet).Exec(ctx) assert.Nil(t, err) - tenantAccountNonPrivGet := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-np-get", TenantID: &tenantNonPrivGet.ID, TenantOrg: tenantOrgNonPrivGet, InfrastructureProviderID: fix.ip.ID, Status: "active"} - _, err = dbSession.DB.NewInsert().Model(tenantAccountNonPrivGet).Exec(ctx) + tenantSiteNonPrivGet := &cdbm.TenantSite{ID: uuid.New(), TenantID: tenantNonPrivGet.ID, TenantOrg: tenantOrgNonPrivGet, SiteID: fix.site.ID} + _, err = dbSession.DB.NewInsert().Model(tenantSiteNonPrivGet).Exec(ctx) assert.Nil(t, err) - // Tenant without TenantAccount (no site association) + // Tenant without any TenantSite (no site access). tenantOrgNoCapability := "test-tenant-no-capability-get" tenantWithoutCapability := &cdbm.Tenant{ID: uuid.New(), Name: "no-cap-tenant-get", Org: tenantOrgNoCapability, Config: &cdbm.TenantConfig{TargetedInstanceCreation: false}} _, err = dbSession.DB.NewInsert().Model(tenantWithoutCapability).Exec(ctx) assert.Nil(t, err) - // Tenant with capability but no account - tenantOrgNoAccount := "test-tenant-no-account-get" - tenantWithoutAccount := &cdbm.Tenant{ID: uuid.New(), Name: "no-account-tenant-get", Org: tenantOrgNoAccount, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} + // Tenant with capability but no TenantSite. + tenantOrgNoAccount := "test-tenant-no-site-get" + tenantWithoutAccount := &cdbm.Tenant{ID: uuid.New(), Name: "no-site-tenant-get", Org: tenantOrgNoAccount, Config: &cdbm.TenantConfig{TargetedInstanceCreation: true}} _, err = dbSession.DB.NewInsert().Model(tenantWithoutAccount).Exec(ctx) assert.Nil(t, err) - // Mixed-role org: provider check fails (site belongs to fix.ip), tenant path succeeds + // Mixed-role org: provider check fails (site belongs to fix.ip), tenant path + // succeeds via TenantSite association. mixedOrg := "mixed-role-org-get" mixedIP := &cdbm.InfrastructureProvider{ID: uuid.New(), Name: "mixed-provider-get", Org: mixedOrg} _, err = dbSession.DB.NewInsert().Model(mixedIP).Exec(ctx) @@ -463,12 +565,12 @@ func TestGetIpxeTemplateHandler_Handle(t *testing.T) { _, err = dbSession.DB.NewInsert().Model(mixedTenant).Exec(ctx) assert.Nil(t, err) - mixedTA := &cdbm.TenantAccount{ID: uuid.New(), AccountNumber: "ta-mixed-get", TenantID: &mixedTenant.ID, TenantOrg: mixedOrg, InfrastructureProviderID: fix.ip.ID, Status: "active"} - _, err = dbSession.DB.NewInsert().Model(mixedTA).Exec(ctx) + mixedTenantSiteGet := &cdbm.TenantSite{ID: uuid.New(), TenantID: mixedTenant.ID, TenantOrg: mixedOrg, SiteID: fix.site.ID} + _, err = dbSession.DB.NewInsert().Model(mixedTenantSiteGet).Exec(ctx) assert.Nil(t, err) - _ = tenantAccount - _ = tenantAccountNonPrivGet + _ = tenantSiteGet + _ = tenantSiteNonPrivGet _ = tenantWithoutCapability _ = tenantWithoutAccount @@ -540,7 +642,7 @@ func TestGetIpxeTemplateHandler_Handle(t *testing.T) { expectedStatus: http.StatusInternalServerError, }, { - name: "tenant with TenantAccount can retrieve template", + name: "tenant with TenantSite can retrieve template", templateID: fix.tmpl1.TemplateID.String(), siteID: fix.site.ID.String(), setupContext: func(c echo.Context) { @@ -556,7 +658,7 @@ func TestGetIpxeTemplateHandler_Handle(t *testing.T) { }, }, { - name: "non-privileged tenant with TenantAccount can retrieve template", + name: "non-privileged tenant with TenantSite can retrieve template", templateID: fix.tmpl1.TemplateID.String(), siteID: fix.site.ID.String(), setupContext: func(c echo.Context) { @@ -572,7 +674,7 @@ func TestGetIpxeTemplateHandler_Handle(t *testing.T) { }, }, { - name: "tenant without TenantAccount is denied", + name: "tenant without TenantSite is denied", templateID: fix.tmpl1.TemplateID.String(), siteID: fix.site.ID.String(), setupContext: func(c echo.Context) { @@ -583,7 +685,7 @@ func TestGetIpxeTemplateHandler_Handle(t *testing.T) { expectedStatus: http.StatusForbidden, }, { - name: "tenant without TenantAccount with Provider is denied", + name: "tenant without TenantSite on requested site is denied", templateID: fix.tmpl1.TemplateID.String(), siteID: fix.site.ID.String(), setupContext: func(c echo.Context) { diff --git a/api/pkg/api/handler/operatingsystem.go b/api/pkg/api/handler/operatingsystem.go index bc64ee33b..0165ee772 100644 --- a/api/pkg/api/handler/operatingsystem.go +++ b/api/pkg/api/handler/operatingsystem.go @@ -38,7 +38,6 @@ import ( "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/api/model" "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/api/pagination" sc "github.com/NVIDIA/ncx-infra-controller-rest/api/pkg/client/site" - auth "github.com/NVIDIA/ncx-infra-controller-rest/auth/pkg/authorization" cutil "github.com/NVIDIA/ncx-infra-controller-rest/common/pkg/util" "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" cdb "github.com/NVIDIA/ncx-infra-controller-rest/db/pkg/db" @@ -94,43 +93,35 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve current user", nil) } - // Validate org - ok, err := auth.ValidateOrgMembership(dbUser, org) - if !ok { - if err != nil { - logger.Error().Err(err).Msg("error validating org membership for User in request") - } else { - logger.Warn().Msg("could not validate org membership for user, access denied") - } - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) + ip, tenant, apiError := common.IsProviderOrTenant(ctx, logger, csh.dbSession, org, dbUser, false, false) + if apiError != nil { + return cutil.NewAPIErrorResponse(c, apiError.Code, apiError.Message, apiError.Data) } - // Bind request data to API model before role check so we can inspect the OS type. + // Bind request data to API model before OS-type check so we can inspect the OS type. apiRequest := model.APIOperatingSystemCreateRequest{} - err = c.Bind(&apiRequest) + err := c.Bind(&apiRequest) if err != nil { logger.Warn().Err(err).Msg("error binding request data into API model") return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to parse request data, potentially invalid structure", nil) } // Infer type of OS from provided parameters: - osType := model.GetOperatingSystemType(apiRequest.IpxeScript, apiRequest.IpxeTemplateId) + osType := apiRequest.GetOperatingSystemType() + + // Image-based OS creation is not supported via this handler; Image OS + // definitions originate from carbide-core inventory synchronization. + if osType == cdbm.OperatingSystemTypeImage { + logger.Warn().Msg("attempted to create Image based Operating System via API") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Creation of Image based Operating Systems is no longer supported. Check your parameters and use ipxeScript or ipxeTemplateId.", nil) + } - // Role check: either Provider Admin or Tenant Admin can create OSes. - // Provider Admin is limited to iPXE Template-based OSes; Tenant Admin may - // create any type. Both roles are evaluated independently so a dual-role - // caller is permitted if either role authorizes the operation. When both + // Provider Admin is limited to iPXE Template-based OSes. When both roles // allow the action, Provider Admin takes priority (provider-owned OS). - isProviderAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) - isTenantAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) - allowedByProvider := isProviderAdmin && osType == cdbm.OperatingSystemTypeTemplatedIPXE - allowedByTenant := isTenantAdmin + allowedByProvider := ip != nil && osType == cdbm.OperatingSystemTypeTemplatedIPXE + allowedByTenant := tenant != nil if !allowedByProvider && !allowedByTenant { - if isProviderAdmin { - logger.Warn().Msg("provider admin attempted to create non-template OS without tenant admin role") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only create iPXE Template-based Operating Systems", nil) - } - logger.Warn().Msg("user has neither Provider Admin nor Tenant Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Creating Operating Systems requires Provider Admin or Tenant Admin role", nil) + logger.Warn().Msg("provider admin attempted to create non-template OS without tenant admin role") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only create iPXE Template-based Operating Systems", nil) } // Validate request attributes @@ -147,19 +138,9 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Error validating user data in Operating System creation request", verr) } - // Resolve the tenant for this org (needed for tenant-owned OSes and for some lookups). - tenant, err := common.GetTenantForOrg(ctx, nil, csh.dbSession, org) - if err != nil { - if err == common.ErrOrgTenantNotFound { - logger.Warn().Err(err).Msg("Org does not have a Tenant associated") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Org does not have a Tenant associated", nil) - } - logger.Error().Err(err).Msg("unable to retrieve tenant for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) - } // If the caller provided an explicit tenantId in the body, validate it matches the org. // TODO: tenantId as parameter is deprecated and will need to be removed by 2026-10-01. - if apiRequest.TenantID != nil { + if tenant != nil && apiRequest.TenantID != nil { apiTenant, terr := common.GetTenantFromIDString(ctx, nil, *apiRequest.TenantID, csh.dbSession) if terr != nil { logger.Warn().Err(terr).Msg("error retrieving tenant from request") @@ -171,22 +152,11 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { } } - // Look up InfrastructureProvider now if acting as provider — used for ownership assignment, - // name-uniqueness check, and site validation throughout the rest of the handler. - var ip *cdbm.InfrastructureProvider - if allowedByProvider { - ip, err = common.GetInfrastructureProviderForOrg(ctx, nil, csh.dbSession, org) - if err != nil { - logger.Error().Err(err).Msg("error retrieving Infrastructure Provider for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) - } - } - // Check for name uniqueness within the owner's scope. osDAO := cdbm.NewOperatingSystemDAO(csh.dbSession) uniquenessFilter := cdbm.OperatingSystemFilterInput{Names: []string{apiRequest.Name}} - if allowedByProvider && ip != nil { - uniquenessFilter.InfrastructureProviderIDs = []uuid.UUID{ip.ID} + if allowedByProvider { + uniquenessFilter.InfrastructureProviderID = &ip.ID } else { uniquenessFilter.TenantIDs = []uuid.UUID{tenant.ID} } @@ -197,7 +167,7 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { } if tot > 0 { logger.Warn().Str("name", apiRequest.Name).Msg("Operating System with same name already exists") - return cutil.NewAPIErrorResponse(c, http.StatusConflict, "Another Operating System with specified name already exists", validation.Errors{ + return cutil.NewAPIErrorResponse(c, http.StatusConflict, fmt.Sprintf("Operating System: %s with specified name already exists", oss[0].ID.String()), validation.Errors{ "id": errors.New(oss[0].ID.String()), }) } @@ -219,123 +189,112 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { txCommitted := false defer common.RollbackTx(ctx, tx, &txCommitted) - // Verify or validate site associations. - // Behaviour depends on osType, scope, and who is acting: - // - Image OS (tenant): siteIds required, validated against TenantSite - // - Image OS (provider): siteIds required, validated against provider's sites - // - Templated iPXE + scope "Global": auto-associate ALL registered provider sites - // - Templated iPXE + scope "Limited": siteIds required, validated against provider sites - // - Templated iPXE + scope "Local": no site associations (bidirectional sync via core) - // - raw iPXE: no site associations (bidirectional sync via core) - rdbst := []cdbm.Site{} + // Determine the effective scope before site-association logic: + // - Raw iPXE: always Global; validateRawIpxeOS rejects caller-supplied scope. + // - Templated iPXE: scope is provided by the caller (Global or Limited). + osScope := apiRequest.Scope + if osType == cdbm.OperatingSystemTypeIPXE { + osScope = cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal) + } + + // Resolve target sites for the Operating System. + // - Global scope: auto-discover all registered sites for the owner (provider or tenant). + // - Limited scope: use explicitly requested siteIds, validated for existence and ownership. + // Note: scope "Local" is rejected at validation — Local OS are only created in carbide-core. dbossd := []cdbm.StatusDetail{} - sttsmap := map[uuid.UUID]*cdbm.TenantSite{} // populated only for tenant-owned image-based OS - - isGlobal := osType == cdbm.OperatingSystemTypeTemplatedIPXE && apiRequest.Scope != nil && *apiRequest.Scope == cdbm.OperatingSystemScopeGlobal - isLimited := osType == cdbm.OperatingSystemTypeTemplatedIPXE && apiRequest.Scope != nil && *apiRequest.Scope == cdbm.OperatingSystemScopeLimited - - if osType == cdbm.OperatingSystemTypeImage || isLimited { - // Determine how to validate the sites: - // - limited-scope iPXE or provider image: sites must belong to the provider - // - tenant image: sites must be in TenantSite - isProviderSiteValidation := isLimited || (osType == cdbm.OperatingSystemTypeImage && allowedByProvider) - - var providerSiteID uuid.UUID - if isProviderSiteValidation { - if ip == nil { - // Provider site validation requires the InfrastructureProvider to be resolved. - ip, err = common.GetInfrastructureProviderForOrg(ctx, nil, csh.dbSession, org) - if err != nil { - logger.Error().Err(err).Msg("error retrieving Infrastructure Provider for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) - } - } - providerSiteID = ip.ID - } else { - // Tenant image: build a TenantSite map for membership validation. - tsDAO := cdbm.NewTenantSiteDAO(csh.dbSession) - tss, _, terr := tsDAO.GetAll( - ctx, - tx, - cdbm.TenantSiteFilterInput{TenantIDs: []uuid.UUID{tenant.ID}}, - cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, - nil, - ) - if terr != nil { - logger.Error().Err(terr).Msg("db error retrieving TenantSite records for Tenant") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) - } - for _, ts := range tss { - cts := ts - sttsmap[ts.SiteID] = &cts - } - } + sttsmap := map[uuid.UUID]*cdbm.TenantSite{} - for _, stID := range apiRequest.SiteIDs { - site, serr := common.GetSiteFromIDString(ctx, nil, stID, csh.dbSession) - if serr != nil { - if serr == common.ErrInvalidID { - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, invalid Site ID: %s", stID), nil) - } - if serr == cdb.ErrDoesNotExist { - return cutil.NewAPIErrorResponse(c, http.StatusNotFound, fmt.Sprintf("Failed to create Operating System, could not find Site with ID: %s ", stID), nil) - } - logger.Warn().Err(serr).Str("Site ID", stID).Msg("error retrieving Site from DB by ID") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, could not retrieve Site with ID: %s, DB error", stID), nil) - } + isGlobal := osScope != nil && *osScope == cdbm.OperatingSystemScopeGlobal + isLimited := osScope != nil && *osScope == cdbm.OperatingSystemScopeLimited - if site.Status != cdbm.SiteStatusRegistered { - logger.Warn().Str("siteID", site.ID.String()).Msg("Unable to associate Operating System to Site: Site is not in Registered state") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, Site: %s is not in Registered state", site.ID.String()), nil) - } + stDAO := cdbm.NewSiteDAO(csh.dbSession) + var targetSites []cdbm.Site + siteFilter := cdbm.SiteFilterInput{} + runSiteQuery := false - if isProviderSiteValidation { - if site.InfrastructureProviderID != providerSiteID { - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Unable to associate Operating System with Site: %s, Site does not belong to provider", stID), nil) - } - } else { - // Tenant image: site must belong to the tenant and support image-based OS. - if _, ok := sttsmap[site.ID]; !ok { - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Unable to associate Operating System with Site: %s, Tenant does not have access to Site", stID), nil) - } - if site.Config == nil || !site.Config.ImageBasedOperatingSystem { - logger.Warn().Str("siteId", stID).Msg("Image based Operating System is not supported for Site, ImageBasedOperatingSystem capability is not enabled") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Creation of Image based Operating Systems is not supported. Site must have ImageBasedOperatingSystem capability enabled.", nil) - } + if isLimited { + // Limited-scope iPXE: resolve the explicitly requested site IDs. + if ip == nil { + ip, err = common.GetInfrastructureProviderForOrg(ctx, nil, csh.dbSession, org) + if err != nil { + logger.Error().Err(err).Msg("error retrieving Infrastructure Provider for org") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) } + } - rdbst = append(rdbst, *site) + requestedSiteIDs := make([]uuid.UUID, 0, len(apiRequest.SiteIDs)) + for _, stID := range apiRequest.SiteIDs { + parsed, perr := uuid.Parse(stID) + if perr != nil { + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, invalid Site ID: %s", stID), nil) + } + requestedSiteIDs = append(requestedSiteIDs, parsed) } + siteFilter.SiteIDs = requestedSiteIDs + runSiteQuery = len(requestedSiteIDs) > 0 } else if isGlobal { - // Global scope: auto-associate with all registered sites belonging to the provider. - if ip == nil { - ipVal, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, csh.dbSession, org) - if iperr != nil { - logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) + // Global scope: auto-discover all registered sites for the owner. + siteFilter.Statuses = []string{cdbm.SiteStatusRegistered} + if allowedByProvider { + siteFilter.InfrastructureProviderIDs = []uuid.UUID{ip.ID} + runSiteQuery = true + } else { + // Tenant Global (raw iPXE): restrict to sites accessible to the tenant. + tenantSiteIDs, tserr := getTenantSiteIDs(ctx, csh.dbSession, tenant.ID) + if tserr != nil { + logger.Error().Err(tserr).Msg("error retrieving tenant site IDs for global-scope raw iPXE OS") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant sites, DB error", nil) + } + if len(tenantSiteIDs) > 0 { + siteFilter.SiteIDs = tenantSiteIDs + runSiteQuery = true } - ip = ipVal } - stDAO := cdbm.NewSiteDAO(csh.dbSession) - registeredStatus := cdbm.SiteStatusRegistered - providerSites, _, sterr := stDAO.GetAll( + } + + if runSiteQuery { + sites, _, sterr := stDAO.GetAll( ctx, nil, - cdbm.SiteFilterInput{ - InfrastructureProviderIDs: []uuid.UUID{ip.ID}, - Statuses: []string{registeredStatus}, - }, + siteFilter, cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, nil, ) if sterr != nil { - logger.Error().Err(sterr).Msg("error retrieving provider sites for global-scope OS") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve provider sites, DB error", nil) + logger.Error().Err(sterr).Msg("error retrieving sites for Operating System") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve sites, DB error", nil) } - rdbst = append(rdbst, providerSites...) + targetSites = sites } - // Create status: Image and iPXE types all start as Syncing since the definition - // is pushed to sites asynchronously via the SynchronizeOperatingSystem workflow. + // For Limited scope, ensure every requested site was found. + if isLimited && len(targetSites) != len(apiRequest.SiteIDs) { + found := make(map[uuid.UUID]struct{}, len(targetSites)) + for i := range targetSites { + found[targetSites[i].ID] = struct{}{} + } + for _, stID := range apiRequest.SiteIDs { + parsed, _ := uuid.Parse(stID) + if _, ok := found[parsed]; !ok { + return cutil.NewAPIErrorResponse(c, http.StatusNotFound, fmt.Sprintf("Failed to create Operating System, could not find Site with ID: %s ", stID), nil) + } + } + } + + // Validate all target sites: must be in Registered state and, for Limited scope, + // must belong to the caller's infrastructure provider (if set). + for i := range targetSites { + st := &targetSites[i] + if st.Status != cdbm.SiteStatusRegistered { + logger.Warn().Str("siteID", st.ID.String()).Msg("Unable to associate Operating System to Site: Site is not in Registered state") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to create Operating System, Site: %s is not in Registered state", st.ID.String()), nil) + } + if isLimited && ip != nil && st.InfrastructureProviderID != ip.ID { + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Unable to associate Operating System with Site: %s, Site does not belong to provider", st.ID.String()), nil) + } + } + + // Create status: starts as Syncing since the definition is pushed to sites + // asynchronously via the SynchronizeOperatingSystem workflow. osStatus := cdbm.OperatingSystemStatusSyncing osStatusMessage := "received Operating System creation request, syncing" @@ -345,15 +304,6 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { var ownerTenantID *uuid.UUID var ownerProviderID *uuid.UUID if allowedByProvider { - if ip == nil { - // ip may not yet be resolved if the request had no scope/sites requiring it. - ipVal, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, csh.dbSession, org) - if iperr != nil { - logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org during OS create") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) - } - ip = ipVal - } ownerProviderID = &ip.ID } else { ownerTenantID = &tenant.ID @@ -377,8 +327,8 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { IpxeScript: apiRequest.IpxeScript, IpxeTemplateId: apiRequest.IpxeTemplateId, IpxeTemplateParameters: apiRequest.IpxeTemplateParameters, - IpxeTemplateArtifacts: stripCachedURLFromArtifacts(apiRequest.IpxeTemplateArtifacts), - IpxeOsScope: apiRequest.Scope, + IpxeTemplateArtifacts: apiRequest.IpxeTemplateArtifacts, + IpxeOsScope: osScope, UserData: apiRequest.UserData, IsCloudInit: apiRequest.IsCloudInit, AllowOverride: apiRequest.AllowOverride, @@ -410,7 +360,7 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { // Create Operating System Site Associations ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(csh.dbSession) - for _, st := range rdbst { + for _, st := range targetSites { // Create Operating System Site Association ossa, serr := ossaDAO.Create( ctx, @@ -461,6 +411,7 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { } // Trigger async workflow before committing so a failure to enqueue rolls back the transaction. + // Note: first run WILL fail since data is not committed so we rely on retry. We choose that initial inocuous failure vs failing to queue silently. if cdbm.IsIPXEType(osType) && len(dbossa) > 0 { wid, werr := osWorkflow.ExecuteSynchronizeOperatingSystemWorkflow(ctx, csh.tc, os.ID, osWorkflow.SyncOperationCreate) if werr != nil { @@ -478,45 +429,6 @@ func (csh CreateOperatingSystemHandler) Handle(c echo.Context) error { } txCommitted = true - // Image-based OSes still use the synchronous per-site workflow pattern (post-commit). - if osType == cdbm.OperatingSystemTypeImage { - for _, ossa := range dbossa { - stc, serr := csh.scp.GetClientByID(ossa.SiteID) - if serr != nil { - logger.Error().Err(serr).Msg("failed to retrieve Temporal client for Site") - continue - } - workflowOptions := temporalClient.StartWorkflowOptions{ - ID: "image-os-create-" + ossa.SiteID.String() + "-" + os.ID.String() + "-" + *ossa.Version, - WorkflowExecutionTimeout: cutil.WorkflowExecutionTimeout, - TaskQueue: queue.SiteTaskQueue, - } - workflowInput := &cwssaws.OsImageAttributes{ - Id: &cwssaws.UUID{Value: os.ID.String()}, - Name: &os.Name, - TenantOrganizationId: tenant.Org, - Description: os.Description, - SourceUrl: *os.ImageURL, - Digest: *os.ImageSHA, - CreateVolume: os.EnableBlockStorage, - AuthType: os.ImageAuthType, - AuthToken: os.ImageAuthToken, - RootfsId: os.RootFsID, - RootfsLabel: os.RootFsLabel, - } - sctx, cancel := context.WithTimeout(ctx, cutil.WorkflowContextTimeout) - defer cancel() - we, werr := stc.ExecuteWorkflow(sctx, workflowOptions, "CreateOsImage", workflowInput) - if werr != nil { - logger.Error().Err(werr).Msg("failed to start CreateOsImage workflow") - continue - } - if werr = we.Get(sctx, nil); werr != nil { - logger.Error().Err(werr).Str("Workflow ID", we.GetID()).Msg("CreateOsImage workflow failed") - } - } - } - // create response apiOperatingSystem := model.NewAPIOperatingSystem(os, dbossd, dbossa, sttsmap) logger.Info().Msg("finishing API handler") @@ -570,28 +482,14 @@ func (gash GetAllOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve current user", nil) } - // Validate org - ok, err := auth.ValidateOrgMembership(dbUser, org) - if !ok { - if err != nil { - logger.Error().Err(err).Msg("error validating org membership for User in request") - } else { - logger.Warn().Msg("could not validate org membership for user, access denied") - } - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) - } - - // Validate role: Tenant Admin or Provider Admin may list Operating Systems. - isTenantAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) - isProviderAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) - if !isTenantAdmin && !isProviderAdmin { - logger.Warn().Msg("user does not have Tenant Admin or Provider Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin or Provider Admin role with org", nil) + ip, tenant, apiError := common.IsProviderOrTenant(ctx, logger, gash.dbSession, org, dbUser, false, false) + if apiError != nil { + return cutil.NewAPIErrorResponse(c, apiError.Code, apiError.Message, apiError.Data) } // Validate pagination request pageRequest := pagination.PageRequest{} - err = c.Bind(&pageRequest) + err := c.Bind(&pageRequest) if err != nil { logger.Warn().Err(err).Msg("error binding pagination request data into API model") return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to parse request pagination data", nil) @@ -604,32 +502,32 @@ func (gash GetAllOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to validate pagination request data", err) } - // Validate the tenant associated with the org - tenant, err := common.GetTenantForOrg(ctx, nil, gash.dbSession, org) - if err != nil { - if err == common.ErrOrgTenantNotFound { - logger.Warn().Err(err).Msg("Org does not have a Tenant associated") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Org does not have a Tenant associated", nil) + // Visibility rules: + // Provider admin: sees only provider-created entries (no tenant entries). + // Tenant admin: sees own entries + provider entries at tenant-accessible sites. + // Dual-role: visibility is the union of both (own tenant + own provider). + filter := cdbm.OperatingSystemFilterInput{} + + switch { + case ip != nil && tenant == nil: + // Provider admin only: sees only provider-created entries. + filter.InfrastructureProviderID = &ip.ID + case tenant != nil && ip == nil: + // Tenant admin only: own entries + provider entries at tenant-accessible sites. + filter.TenantIDs = []uuid.UUID{tenant.ID} + if providerIP, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, gash.dbSession, org); iperr == nil { + filter.InfrastructureProviderID = &providerIP.ID + tenantSiteIDs, tsErr := getTenantSiteIDs(ctx, gash.dbSession, tenant.ID) + if tsErr != nil { + logger.Error().Err(tsErr).Msg("error retrieving tenant site IDs for visibility filter") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to determine site access for tenant", nil) + } + filter.ProviderOSVisibleAtSiteIDs = &tenantSiteIDs } - logger.Error().Err(err).Msg("unable to retrieve tenant for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) - } - - // Both Tenant Admin and Provider Admin can see OSes belonging to their tenant and to their - // infrastructure provider. Look up the provider (best-effort: no provider = tenant-only view). - // We intentionally do NOT filter by Org here: the stored org on synced OSes reflects the - // carbide-rest tenant org at the time of sync, which is authoritative. TenantIDs already - // gives the correct per-tenant scope. - var providerID *uuid.UUID - if ip, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, gash.dbSession, org); iperr == nil { - providerID = &ip.ID - } - - filter := cdbm.OperatingSystemFilterInput{ - TenantIDs: []uuid.UUID{tenant.ID}, - } - if providerID != nil { - filter.InfrastructureProviderIDs = []uuid.UUID{*providerID} + case tenant != nil && ip != nil: + // Dual-role: own tenant + own provider entries, no site restriction. + filter.TenantIDs = []uuid.UUID{tenant.ID} + filter.InfrastructureProviderID = &ip.ID } // Get and validate includeRelation params @@ -655,15 +553,19 @@ func (gash GetAllOperatingSystemHandler) Handle(c echo.Context) error { // Determine if caller has access to the requested site. // Tenant path: TenantSite association exists. // Provider path: site belongs to the caller's infrastructure provider. - _, tsErr := tsDAO.GetByTenantIDAndSiteID(ctx, nil, tenant.ID, site.ID, nil) - if tsErr != nil { - if tsErr != cdb.ErrDoesNotExist { + tenantHasAccess := false + if tenant != nil { + _, tsErr := tsDAO.GetByTenantIDAndSiteID(ctx, nil, tenant.ID, site.ID, nil) + if tsErr == nil { + tenantHasAccess = true + } else if tsErr != cdb.ErrDoesNotExist { logger.Warn().Err(tsErr).Msg("error retrieving Tenant Site association from DB") return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Failed to determine if Tenant has access to Site specified in query, DB error", nil) } - if !isProviderAdmin || providerID == nil || site.InfrastructureProviderID != *providerID { - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Caller is not associated with Site specified in query", nil) - } + } + providerHasAccess := ip != nil && site.InfrastructureProviderID == ip.ID + if !tenantHasAccess && !providerHasAccess { + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Caller is not associated with Site specified in query", nil) } filter.SiteIDs = append(filter.SiteIDs, site.ID) } @@ -699,7 +601,7 @@ func (gash GetAllOperatingSystemHandler) Handle(c echo.Context) error { statusError := validation.Errors{ "status": errors.New(status), } - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Invalid Status value in query", statusError) + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Invalid Status value in query: %s", status), statusError) } filter.Statuses = append(filter.Statuses, status) } @@ -774,30 +676,33 @@ func (gash GetAllOperatingSystemHandler) Handle(c echo.Context) error { dbossaMap[dbossa.OperatingSystemID] = append(dbossaMap[dbossa.OperatingSystemID], curVal) } - // Get all TenantSite records for the Tenant + // Get all TenantSite records for the Tenant (only relevant when the caller + // is acting as a Tenant; provider-only admins have no tenant-site context). sttsmap := map[uuid.UUID]*cdbm.TenantSite{} - tsDAO = cdbm.NewTenantSiteDAO(gash.dbSession) - tss, _, err := tsDAO.GetAll( - ctx, - nil, - cdbm.TenantSiteFilterInput{ - TenantIDs: []uuid.UUID{tenant.ID}, - SiteIDs: siteIDs, - }, - cdbp.PageInput{ - Limit: cdb.GetIntPtr(cdbp.TotalLimit), - }, - nil, - ) - if err != nil { - logger.Error().Err(err).Msg("db error retrieving TenantSite records for Tenant") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) - } + if tenant != nil { + tsDAO = cdbm.NewTenantSiteDAO(gash.dbSession) + tss, _, err := tsDAO.GetAll( + ctx, + nil, + cdbm.TenantSiteFilterInput{ + TenantIDs: []uuid.UUID{tenant.ID}, + SiteIDs: siteIDs, + }, + cdbp.PageInput{ + Limit: cdb.GetIntPtr(cdbp.TotalLimit), + }, + nil, + ) + if err != nil { + logger.Error().Err(err).Msg("db error retrieving TenantSite records for Tenant") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) + } - for _, ts := range tss { - curVal := ts - sttsmap[ts.SiteID] = &curVal + for _, ts := range tss { + curVal := ts + sttsmap[ts.SiteID] = &curVal + } } // Create response @@ -866,22 +771,9 @@ func (gsh GetOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve current user", nil) } - // Validate org - ok, err := auth.ValidateOrgMembership(dbUser, org) - if !ok { - if err != nil { - logger.Error().Err(err).Msg("error validating org membership for User in request") - } else { - logger.Warn().Msg("could not validate org membership for user, access denied") - } - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) - } - - // Validate role: Tenant Admin or Provider Admin may retrieve a single Operating System. - if !auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) && - !auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) { - logger.Warn().Msg("user does not have Tenant Admin or Provider Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin or Provider Admin role with org", nil) + ip, tenant, apiError := common.IsProviderOrTenant(ctx, logger, gsh.dbSession, org, dbUser, false, false) + if apiError != nil { + return cutil.NewAPIErrorResponse(c, apiError.Code, apiError.Message, apiError.Data) } // Get and validate includeRelation params @@ -905,17 +797,6 @@ func (gsh GetOperatingSystemHandler) Handle(c echo.Context) error { osDAO := cdbm.NewOperatingSystemDAO(gsh.dbSession) - // Validate the tenant for which this OperatingSystem is being retrieved - tenant, err := common.GetTenantForOrg(ctx, nil, gsh.dbSession, org) - if err != nil { - if err == common.ErrOrgTenantNotFound { - logger.Warn().Err(err).Msg("Org does not have a Tenant associated") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Org does not have a Tenant associated", nil) - } - logger.Error().Err(err).Msg("unable to retrieve tenant for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) - } - // Check that operating system exists os, err := osDAO.GetByID(ctx, nil, sID, qIncludeRelations) if err != nil { @@ -926,24 +807,70 @@ func (gsh GetOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Could not retrieve OperatingSystem to update", nil) } - // Verify the caller can see this OS: it must belong to their tenant or their infrastructure provider. - ownedByTenant := os.TenantID != nil && *os.TenantID == tenant.ID - ownedByProvider := false - if os.InfrastructureProviderID != nil { - ip, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, gsh.dbSession, org) - if iperr != nil && iperr != common.ErrOrgInstrastructureProviderNotFound { - logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) - } - if iperr == nil { - ownedByProvider = *os.InfrastructureProviderID == ip.ID + // Visibility check with role-based rules: + // Provider admin: can only see provider-owned entries. + // Tenant admin: can see own entries + provider entries at accessible sites. + // Dual-role: can see both tenant and provider entries. + ownedByTenant := tenant != nil && os.TenantID != nil && *os.TenantID == tenant.ID + ownedByProvider := ip != nil && os.InfrastructureProviderID != nil && *os.InfrastructureProviderID == ip.ID + + // A tenant-only caller may also view provider-owned OSes belonging to the org's + // provider (subject to site-scoped visibility checked below). Lazy-fetch the + // org's provider to evaluate that case. + if !ownedByProvider && ip == nil && os.InfrastructureProviderID != nil { + if providerIP, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, gsh.dbSession, org); iperr == nil { + ownedByProvider = *os.InfrastructureProviderID == providerIP.ID } } + if !ownedByTenant && !ownedByProvider { logger.Warn().Msg("operating system does not belong to the tenant or provider in org") return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Operating System does not belong to the tenant or infrastructure provider in org", nil) } + // If caller has dual role (Tenant+Provider) we already know we can go forward. + // Otherwise we need additional checks: + if !(tenant != nil && ip != nil) { + if ip != nil && !ownedByProvider { + logger.Warn().Msg("provider admin cannot view tenant-owned operating system") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Operating System does not belong to the infrastructure provider in org", nil) + } + if tenant != nil && !ownedByTenant && ownedByProvider { + // Tenant admin seeing a provider-owned entry: verify site-scoped visibility. + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(gsh.dbSession) + ossas, _, ossaErr := ossaDAO.GetAll(ctx, nil, + cdbm.OperatingSystemSiteAssociationFilterInput{OperatingSystemIDs: []uuid.UUID{os.ID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, + nil, + ) + if ossaErr != nil { + logger.Error().Err(ossaErr).Msg("error retrieving OS site associations for visibility check") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to verify site access for Operating System", nil) + } + + tenantSiteIDs, tsErr := getTenantSiteIDs(ctx, gsh.dbSession, tenant.ID) + if tsErr != nil { + logger.Error().Err(tsErr).Msg("error retrieving tenant site IDs for visibility check") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to determine site access for tenant", nil) + } + tsSet := make(map[uuid.UUID]struct{}, len(tenantSiteIDs)) + for _, sid := range tenantSiteIDs { + tsSet[sid] = struct{}{} + } + visible := false + for _, ossa := range ossas { + if _, ok := tsSet[ossa.SiteID]; ok { + visible = true + break + } + } + if !visible { + logger.Warn().Msg("provider-owned OS has no site associations at sites accessible to the tenant") + return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Operating System is not associated with any site accessible to the caller", nil) + } + } + } + // get status details for the response sdDAO := cdbm.NewStatusDetailDAO(gsh.dbSession) ssds, err := sdDAO.GetRecentByEntityIDs(ctx, nil, []string{os.ID.String()}, common.RECENT_STATUS_DETAIL_COUNT) @@ -952,7 +879,7 @@ func (gsh GetOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Status Details for OperatingSystem", nil) } - // Get all OperatingSystemSiteAssociations (both Image and iPXE types may have them). + // Get all OperatingSystemSiteAssociations (both iPXE and Image types may have them). ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(gsh.dbSession) dbossas, _, err := ossaDAO.GetAll( ctx, @@ -970,28 +897,31 @@ func (gsh GetOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) } - // Get all TenantSite records for the Tenant + // Get all TenantSite records for the Tenant (only relevant when the caller + // is acting as a Tenant; provider-only admins have no tenant-site context). sttsmap := map[uuid.UUID]*cdbm.TenantSite{} - tsDAO := cdbm.NewTenantSiteDAO(gsh.dbSession) - tss, _, err := tsDAO.GetAll( - ctx, - nil, - cdbm.TenantSiteFilterInput{ - TenantIDs: []uuid.UUID{tenant.ID}, - }, - cdbp.PageInput{ - Limit: cdb.GetIntPtr(cdbp.TotalLimit), - }, - nil, - ) - if err != nil { - logger.Error().Err(err).Msg("db error retrieving TenantSite records for Tenant") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) - } + if tenant != nil { + tsDAO := cdbm.NewTenantSiteDAO(gsh.dbSession) + tss, _, err := tsDAO.GetAll( + ctx, + nil, + cdbm.TenantSiteFilterInput{ + TenantIDs: []uuid.UUID{tenant.ID}, + }, + cdbp.PageInput{ + Limit: cdb.GetIntPtr(cdbp.TotalLimit), + }, + nil, + ) + if err != nil { + logger.Error().Err(err).Msg("db error retrieving TenantSite records for Tenant") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) + } - for _, ts := range tss { - cts := ts - sttsmap[ts.SiteID] = &cts + for _, ts := range tss { + cts := ts + sttsmap[ts.SiteID] = &cts + } } // Send response @@ -1043,23 +973,9 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve current user", nil) } - // Validate org - ok, err := auth.ValidateOrgMembership(dbUser, org) - if !ok { - if err != nil { - logger.Error().Err(err).Msg("error validating org membership for User in request") - } else { - logger.Warn().Msg("could not validate org membership for user, access denied") - } - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) - } - - // Validate role: Tenant Admin or Provider Admin may update Operating Systems (with different ownership rules). - isTenantAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) - isProviderAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) - if !isTenantAdmin && !isProviderAdmin { - logger.Warn().Msg("user does not have Tenant Admin or Provider Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin or Provider Admin role with org", nil) + ip, tenant, apiError := common.IsProviderOrTenant(ctx, logger, ush.dbSession, org, dbUser, false, false) + if apiError != nil { + return cutil.NewAPIErrorResponse(c, apiError.Code, apiError.Message, apiError.Data) } // Get os ID from URL param @@ -1094,6 +1010,13 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Could not retrieve OperatingSystem to update", nil) } + // Image-based OS updates are not supported via this handler; Image OS + // definitions are managed through carbide-core inventory synchronization. + if os.Type == cdbm.OperatingSystemTypeImage { + logger.Warn().Msg("attempted to update Image based Operating System via API") + return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Updating Image based Operating Systems is not supported", nil) + } + // Validate request attributes verr := apiRequest.Validate(os) if verr != nil { @@ -1108,41 +1031,23 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Error validating user data in Operating System creation request", verr) } - // Validate the tenant for which this OperatingSystem is being updated - tenant, err := common.GetTenantForOrg(ctx, nil, ush.dbSession, org) - if err != nil { - if err == common.ErrOrgTenantNotFound { - logger.Warn().Err(err).Msg("Org does not have a Tenant associated") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Org does not have a Tenant associated", nil) - } - logger.Error().Err(err).Msg("unable to retrieve tenant for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) - } - // Enforce ownership: both roles are evaluated independently so a dual-role // caller is permitted if either role authorizes the operation. - ownedByTenant := os.TenantID != nil && *os.TenantID == tenant.ID && os.InfrastructureProviderID == nil + ownedByTenant := tenant != nil && os.TenantID != nil && *os.TenantID == tenant.ID && os.InfrastructureProviderID == nil ownedByProvider := false - if isProviderAdmin && os.InfrastructureProviderID != nil { - ip, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, ush.dbSession, org) - if iperr != nil { - logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) - } + if ip != nil && os.InfrastructureProviderID != nil { if *os.InfrastructureProviderID != ip.ID { logger.Warn().Msg("provider admin cannot update operating system owned by a different provider") return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only update Operating Systems owned by their own provider", nil) } ownedByProvider = true } - allowedByProvider := isProviderAdmin && ownedByProvider - allowedByTenant := isTenantAdmin && ownedByTenant - if !allowedByProvider && !allowedByTenant { - if isProviderAdmin && !isTenantAdmin { + if !ownedByProvider && !ownedByTenant { + if ip != nil && tenant == nil { logger.Warn().Msg("provider admin cannot update tenant-owned operating system") return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only update provider-owned Operating Systems", nil) } - if isTenantAdmin && !isProviderAdmin { + if tenant != nil && ip == nil { logger.Warn().Msg("tenant admin cannot update provider-owned operating system") return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Tenant Admin can only update their own Operating Systems", nil) } @@ -1154,7 +1059,7 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { if apiRequest.Name != nil && *apiRequest.Name != os.Name { uniquenessFilter := cdbm.OperatingSystemFilterInput{Names: []string{*apiRequest.Name}} if os.InfrastructureProviderID != nil { - uniquenessFilter.InfrastructureProviderIDs = []uuid.UUID{*os.InfrastructureProviderID} + uniquenessFilter.InfrastructureProviderID = os.InfrastructureProviderID } else { uniquenessFilter.TenantIDs = []uuid.UUID{tenant.ID} } @@ -1170,7 +1075,7 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to update OperatingSystem due to DB error", nil) } if tot > 0 { - return cutil.NewAPIErrorResponse(c, http.StatusConflict, "Another Operating System with specified name already exists", validation.Errors{ + return cutil.NewAPIErrorResponse(c, http.StatusConflict, fmt.Sprintf("Operating System: %s with specified name already exists", oss[0].ID.String()), validation.Errors{ "id": errors.New(oss[0].ID.String()), }) } @@ -1179,60 +1084,6 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { dbossas := []cdbm.OperatingSystemSiteAssociation{} sttsmap := map[uuid.UUID]*cdbm.TenantSite{} ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(ush.dbSession) - tsDAO := cdbm.NewTenantSiteDAO(ush.dbSession) - - // Verify Tenant Site Association - // Verify if Site is in Registered state - if os.Type == cdbm.OperatingSystemTypeImage { - dbossas, _, err = ossaDAO.GetAll( - ctx, - nil, - cdbm.OperatingSystemSiteAssociationFilterInput{ - OperatingSystemIDs: []uuid.UUID{os.ID}, - }, - cdbp.PageInput{}, - []string{cdbm.SiteRelationName}, - ) - if err != nil { - logger.Error().Err(err).Msg("error retrieving Operating System Site associations from DB") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) - } - - // Get all TenantSite records for the Tenant - tss, _, err := tsDAO.GetAll( - ctx, - nil, - cdbm.TenantSiteFilterInput{ - TenantIDs: []uuid.UUID{tenant.ID}, - }, - cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, - nil, - ) - if err != nil { - logger.Error().Err(err).Msg("db error retrieving TenantSite records for Tenant") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Site associations for Tenant, DB error", nil) - } - - for _, ts := range tss { - cts := ts - sttsmap[ts.SiteID] = &cts - } - - // Verify if associated Site is not registered state - // Verify if current tenant not associated Site - for _, dbosa := range dbossas { - if dbosa.Site.Status != cdbm.SiteStatusRegistered { - logger.Warn().Msg(fmt.Sprintf("unable to update Operating System. Site: %s. Site is not in Registered state", dbosa.Site.Name)) - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Failed to update Operating System, Associated Site: %s is not in Registered state", dbosa.Site.Name), nil) - } - - // Validate the TenantSite exists for current tenant and this site - _, ok := sttsmap[dbosa.SiteID] - if !ok { - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, fmt.Sprintf("Unable to update associate Operating System with Site: %s, Tenant does not have access to Site", dbosa.Site.Name), nil) - } - } - } // start a database transaction tx, err := cdb.BeginTx(ctx, ush.dbSession, &sql.TxOptions{}) @@ -1244,7 +1095,7 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { defer common.RollbackTx(ctx, tx, &txCommitted) // Save update status in DB. - // Both Image and iPXE types go to Syncing since updates are pushed asynchronously. + // Status goes to Syncing since updates are pushed asynchronously. osStatus := db.GetStrPtr(cdbm.OperatingSystemStatusSyncing) osStatusMessage := "received Operating System update request, syncing" if apiRequest.IsActive != nil && !*apiRequest.IsActive { @@ -1281,7 +1132,7 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { IpxeScript: apiRequest.IpxeScript, IpxeTemplateId: apiRequest.IpxeTemplateId, IpxeTemplateParameters: apiRequest.IpxeTemplateParameters, - IpxeTemplateArtifacts: stripCachedURLFromArtifactsPtr(apiRequest.IpxeTemplateArtifacts), + IpxeTemplateArtifacts: apiRequest.IpxeTemplateArtifacts, UserData: apiRequest.UserData, IsCloudInit: apiRequest.IsCloudInit, AllowOverride: apiRequest.AllowOverride, @@ -1310,129 +1161,22 @@ func (ush UpdateOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Status Details for Operating System", nil) } - // Trigger workflows to sync the Operating System update with its Sites. - // Image-based OSes use UpdateOsImage; iPXE OSes use UpdateOperatingSystem to push the - // updated definition to carbide-core (the site controller). - if os.Type == cdbm.OperatingSystemTypeImage { - for _, dbossa := range dbossas { - _, err = ossaDAO.Update( - ctx, - tx, - cdbm.OperatingSystemSiteAssociationUpdateInput{ - OperatingSystemSiteAssociationID: dbossa.ID, - Status: cdb.GetStrPtr(cdbm.OperatingSystemSiteAssociationStatusSyncing), - }, - ) - if err != nil { - logger.Error().Err(serr).Msg("unable to update the Operating System association record in DB") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to update Operating System Site Association status, DB error", nil) - } - - // Create Status details - _, serr = sdDAO.CreateFromParams(ctx, tx, dbossa.ID.String(), *cdb.GetStrPtr(cdbm.OperatingSystemSiteAssociationStatusSyncing), - cdb.GetStrPtr("received Operating System Association update request, syncing")) - if serr != nil { - logger.Error().Err(serr).Msg("error creating Status Detail DB entry") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to create Status Detail for Operating System Site Association", nil) - } - - // Update Operating System Association version - updatedOssa, err := ossaDAO.GenerateAndUpdateVersion(ctx, tx, dbossa.ID) - if err != nil { - logger.Error().Err(err).Msg("error updating version for updated Operating System Association") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to set version for updated Operating System Site Association, DB error", nil) - } - - // Get the temporal client for the site we are working with. - stc, err := ush.scp.GetClientByID(dbossa.SiteID) - if err != nil { - logger.Error().Err(err).Msg("failed to retrieve Temporal client for Site") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve client for Site", nil) - } - - updateOsRequest := &cwssaws.OsImageAttributes{ - Id: &cwssaws.UUID{Value: uos.ID.String()}, - Name: &uos.Name, - Description: uos.Description, - TenantOrganizationId: tenant.Org, - SourceUrl: *uos.ImageURL, - Digest: *uos.ImageSHA, - CreateVolume: uos.EnableBlockStorage, - AuthType: uos.ImageAuthType, - AuthToken: uos.ImageAuthToken, - RootfsId: uos.RootFsID, - RootfsLabel: uos.RootFsLabel, - } - - workflowOptions := temporalClient.StartWorkflowOptions{ - ID: "image-os-update-" + updatedOssa.SiteID.String() + "-" + uos.ID.String() + "-" + *updatedOssa.Version, - WorkflowExecutionTimeout: cutil.WorkflowExecutionTimeout, - TaskQueue: queue.SiteTaskQueue, - } - - logger.Info().Str("Site ID", dbossa.SiteID.String()).Msg("triggering Image based Operating System update workflow") - - // Add context deadlines - ctx, cancel := context.WithTimeout(ctx, cutil.WorkflowContextTimeout) - defer cancel() - - // Trigger Site workflow - we, err := stc.ExecuteWorkflow(ctx, workflowOptions, "UpdateOsImage", updateOsRequest) - if err != nil { - logger.Error().Err(err).Msg("failed to synchronously start Temporal workflow to update Operating System") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed start sync workflow to update Operating System on Site: %s", err), nil) - } - - wid := we.GetID() - logger.Info().Str("Workflow ID", wid).Msg("executed synchronous update Operating System workflow") - - // Block until the workflow has completed and returned success/error. - err = we.Get(ctx, nil) - if err != nil { - var timeoutErr *tp.TimeoutError - if errors.As(err, &timeoutErr) || err == context.DeadlineExceeded || ctx.Err() != nil { - - logger.Error().Err(err).Msg("failed to update Operating System, timeout occurred executing workflow on Site.") - - // Create a new context deadlines - newctx, newcancel := context.WithTimeout(context.Background(), cutil.WorkflowContextNewAfterTimeout) - defer newcancel() - - // Initiate termination workflow - serr := stc.TerminateWorkflow(newctx, wid, "", "timeout occurred executing update Operating System workflow") - if serr != nil { - logger.Error().Err(serr).Msg("failed to execute terminate Temporal workflow for updating Operating System") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed to terminate synchronous Operating System update workflow after timeout, Cloud and Site data may be de-synced: %s", serr), nil) - } - - logger.Info().Str("Workflow ID", wid).Msg("initiated terminate synchronous update Operating System workflow successfully") - - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, fmt.Sprintf("Failed to update Operating System, timeout occurred executing workflow on Site: %s", err), nil) - } - code, err := common.UnwrapWorkflowError(err) - logger.Error().Err(err).Msg("failed to synchronously execute Temporal workflow to update Operating System") - return cutil.NewAPIErrorResponse(c, code, fmt.Sprintf("Failed to execute sync workflow to update Operating System on Site: %s", err), nil) - } - logger.Info().Str("Workflow ID", wid).Str("Site ID", dbossa.SiteID.String()).Msg("completed synchronous update Operating System workflow") - } - } else if cdbm.IsIPXEType(os.Type) { - // Load existing associations for the response. - dbossas, _, err = ossaDAO.GetAll(ctx, tx, - cdbm.OperatingSystemSiteAssociationFilterInput{OperatingSystemIDs: []uuid.UUID{uos.ID}}, - cdbp.PageInput{}, []string{cdbm.SiteRelationName}) - if err != nil { - logger.Error().Err(err).Msg("error retrieving Operating System Site associations from DB") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) - } + // Load existing site associations for the response and trigger async sync workflow. + dbossas, _, err = ossaDAO.GetAll(ctx, tx, + cdbm.OperatingSystemSiteAssociationFilterInput{OperatingSystemIDs: []uuid.UUID{uos.ID}}, + cdbp.PageInput{}, []string{cdbm.SiteRelationName}) + if err != nil { + logger.Error().Err(err).Msg("error retrieving Operating System Site associations from DB") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Operating System Site associations from DB", nil) + } - // Trigger async workflow before committing so a failure to enqueue rolls back the transaction. - wid, werr := osWorkflow.ExecuteSynchronizeOperatingSystemWorkflow(ctx, ush.tc, uos.ID, osWorkflow.SyncOperationUpdate) - if werr != nil { - logger.Error().Err(werr).Msg("failed to trigger SynchronizeOperatingSystem workflow for update") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to trigger Operating System synchronization workflow", nil) - } - logger.Info().Str("Workflow ID", *wid).Msg("triggered async SynchronizeOperatingSystem workflow for update") + // Trigger async workflow before committing so a failure to enqueue rolls back the transaction. + wid, werr := osWorkflow.ExecuteSynchronizeOperatingSystemWorkflow(ctx, ush.tc, uos.ID, osWorkflow.SyncOperationUpdate) + if werr != nil { + logger.Error().Err(werr).Msg("failed to trigger SynchronizeOperatingSystem workflow for update") + return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to trigger Operating System synchronization workflow", nil) } + logger.Info().Str("Workflow ID", *wid).Msg("triggered async SynchronizeOperatingSystem workflow for update") // Commit transaction. err = tx.Commit() @@ -1490,23 +1234,9 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve current user", nil) } - // Validate org - ok, err := auth.ValidateOrgMembership(dbUser, org) - if !ok { - if err != nil { - logger.Error().Err(err).Msg("error validating org membership for User in request") - } else { - logger.Warn().Msg("could not validate org membership for user, access denied") - } - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, fmt.Sprintf("Failed to validate membership for org: %s", org), nil) - } - - // Validate role: Tenant Admin or Provider Admin may delete Operating Systems (with different ownership rules). - isTenantAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.TenantAdminRole) - isProviderAdmin := auth.ValidateUserRoles(dbUser, org, nil, auth.ProviderAdminRole) - if !isTenantAdmin && !isProviderAdmin { - logger.Warn().Msg("user does not have Tenant Admin or Provider Admin role, access denied") - return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "User does not have Tenant Admin or Provider Admin role with org", nil) + ip, tenant, apiError := common.IsProviderOrTenant(ctx, logger, dsh.dbSession, org, dbUser, false, false) + if apiError != nil { + return cutil.NewAPIErrorResponse(c, apiError.Code, apiError.Message, apiError.Data) } // Get operating system ID from URL param @@ -1520,17 +1250,6 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Invalid Operating System ID in URL", nil) } - // Validate the tenant for which this OperatingSystem is being updated - tenant, err := common.GetTenantForOrg(ctx, nil, dsh.dbSession, org) - if err != nil { - if err == common.ErrOrgTenantNotFound { - logger.Warn().Err(err).Msg("Org does not have a Tenant associated") - return cutil.NewAPIErrorResponse(c, http.StatusBadRequest, "Org does not have a Tenant associated", nil) - } - logger.Error().Err(err).Msg("unable to retrieve tenant for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve tenant for org", nil) - } - // Check that operating system exists osDAO := cdbm.NewOperatingSystemDAO(dsh.dbSession) os, err := osDAO.GetByID(ctx, nil, osID, nil) @@ -1544,28 +1263,21 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { // Enforce ownership: both roles are evaluated independently so a dual-role // caller is permitted if either role authorizes the operation. - ownedByTenantD := os.TenantID != nil && *os.TenantID == tenant.ID && os.InfrastructureProviderID == nil + ownedByTenantD := tenant != nil && os.TenantID != nil && *os.TenantID == tenant.ID && os.InfrastructureProviderID == nil ownedByProviderD := false - if isProviderAdmin && os.InfrastructureProviderID != nil { - ip, iperr := common.GetInfrastructureProviderForOrg(ctx, nil, dsh.dbSession, org) - if iperr != nil { - logger.Error().Err(iperr).Msg("error retrieving Infrastructure Provider for org") - return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Infrastructure Provider for org", nil) - } + if ip != nil && os.InfrastructureProviderID != nil { if *os.InfrastructureProviderID != ip.ID { logger.Warn().Msg("provider admin cannot delete operating system owned by a different provider") return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only delete Operating Systems owned by their own provider", nil) } ownedByProviderD = true } - allowedByProvider := isProviderAdmin && ownedByProviderD - allowedByTenant := isTenantAdmin && ownedByTenantD - if !allowedByProvider && !allowedByTenant { - if isProviderAdmin && !isTenantAdmin { + if !ownedByProviderD && !ownedByTenantD { + if ip != nil && tenant == nil { logger.Warn().Msg("provider admin cannot delete tenant-owned operating system") return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Provider Admin can only delete provider-owned Operating Systems", nil) } - if isTenantAdmin && !isProviderAdmin { + if tenant != nil && ip == nil { logger.Warn().Msg("tenant admin cannot delete provider-owned operating system") return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Tenant Admin can only delete their own Operating Systems", nil) } @@ -1573,7 +1285,7 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusForbidden, "Operating System does not belong to your tenant or infrastructure provider", nil) } - // Retrieve site associations for this Operating System (both Image and iPXE types + // Retrieve site associations for this Operating System (both iPXE and Image types // may have associations that need per-site workflow propagation on delete). ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(dsh.dbSession) ossasToDelete, _, err := ossaDAO.GetAll( @@ -1605,7 +1317,11 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { // verify no instances are using the os isDAO := cdbm.NewInstanceDAO(dsh.dbSession) - instances, _, err := isDAO.GetAll(ctx, nil, cdbm.InstanceFilterInput{TenantIDs: []uuid.UUID{tenant.ID}, OperatingSystemIDs: []uuid.UUID{os.ID}}, paginator.PageInput{}, nil) + instanceFilter := cdbm.InstanceFilterInput{OperatingSystemIDs: []uuid.UUID{os.ID}} + if tenant != nil { + instanceFilter.TenantIDs = []uuid.UUID{tenant.ID} + } + instances, _, err := isDAO.GetAll(ctx, nil, instanceFilter, paginator.PageInput{}, nil) if err != nil { logger.Error().Err(err).Msg("error retrieving Instances for Operating System from DB") return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Instances for deleting operatingsystem", nil) @@ -1634,7 +1350,7 @@ func (dsh DeleteOperatingSystemHandler) Handle(c echo.Context) error { return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to delete Operating System, could not acquire data store lock on Operating System", nil) } - // Propagate the delete to associated sites (Image via DeleteOsImage, iPXE via DeleteOperatingSystem). + // Propagate the delete to associated sites (iPXE via DeleteOperatingSystem, Image via DeleteOsImage). if len(ossasToDelete) > 0 { // Update Operating System to set status to Deleting _, err = osDAO.Update(ctx, tx, cdbm.OperatingSystemUpdateInput{OperatingSystemId: os.ID, Status: cdb.GetStrPtr(cdbm.OperatingSystemStatusDeleting)}) @@ -1789,20 +1505,20 @@ func dbArtifactsToProto(artifacts []cdbm.OperatingSystemIpxeArtifact) []*cwssaws return result } -// stripCachedURLFromArtifacts returns a copy with CachedURL cleared. -// cached_url is a core-only field that must never be stored in REST. -func stripCachedURLFromArtifacts(artifacts []cdbm.OperatingSystemIpxeArtifact) []cdbm.OperatingSystemIpxeArtifact { - for i := range artifacts { - artifacts[i].CachedURL = nil +// getTenantSiteIDs returns the IDs of all sites the given tenant has access to. +func getTenantSiteIDs(ctx context.Context, dbSession *db.Session, tenantID uuid.UUID) ([]uuid.UUID, error) { + tsDAO := cdbm.NewTenantSiteDAO(dbSession) + tss, _, err := tsDAO.GetAll(ctx, nil, + cdbm.TenantSiteFilterInput{TenantIDs: []uuid.UUID{tenantID}}, + cdbp.PageInput{Limit: cdb.GetIntPtr(cdbp.TotalLimit)}, + nil, + ) + if err != nil { + return nil, err } - return artifacts -} - -// stripCachedURLFromArtifactsPtr is the pointer-to-slice variant for update requests. -func stripCachedURLFromArtifactsPtr(artifacts *[]cdbm.OperatingSystemIpxeArtifact) *[]cdbm.OperatingSystemIpxeArtifact { - if artifacts == nil { - return nil + ids := make([]uuid.UUID, len(tss)) + for i, ts := range tss { + ids[i] = ts.SiteID } - stripped := stripCachedURLFromArtifacts(*artifacts) - return &stripped + return ids, nil } diff --git a/api/pkg/api/handler/operatingsystem_ownership_test.go b/api/pkg/api/handler/operatingsystem_ownership_test.go index 3b896d6ee..957d22468 100644 --- a/api/pkg/api/handler/operatingsystem_ownership_test.go +++ b/api/pkg/api/handler/operatingsystem_ownership_test.go @@ -33,8 +33,9 @@ // for ownership assignment // // Cross-ownership visibility (GetAll / GetByID) -// - Any user whose org has both a Tenant and an InfrastructureProvider -// can see OSes owned by either entity. +// - Provider Admin sees only provider-owned OSes (none from tenants). +// - Tenant Admin sees own OSes + provider-owned OSes that have site +// associations at sites accessible to the tenant. // // Mutation enforcement (Update / Delete) // - Provider Admin can mutate only provider-owned OSes. @@ -360,16 +361,18 @@ func TestOperatingSystemHandler_Create_ProviderAndTenantOwnership(t *testing.T) // ─── GetAll: cross-ownership visibility ────────────────────────────────────── -// TestOperatingSystemHandler_GetAll_CrossOwnership verifies that any user whose -// org resolves both a Tenant and an InfrastructureProvider can see OSes owned -// by either entity in a single GetAll call. +// TestOperatingSystemHandler_GetAll_CrossOwnership verifies role-based +// visibility rules: +// - Provider Admin sees only provider-owned OSes. +// - Tenant Admin sees own OSes + provider-owned OSes at accessible sites. +// - Dual-role user sees the union. func TestOperatingSystemHandler_GetAll_CrossOwnership(t *testing.T) { env := newOwnershipTestEnv(t) ctx := context.Background() osDAO := cdbm.NewOperatingSystemDAO(env.dbSession) - // Seed one provider-owned OS. + // Seed one provider-owned OS with a site association so the tenant can see it. provOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ Name: "synced-from-core", Org: env.sharedOrg, @@ -377,26 +380,33 @@ func TestOperatingSystemHandler_GetAll_CrossOwnership(t *testing.T) { InfrastructureProviderID: &env.ip.ID, OsType: cdbm.OperatingSystemTypeIPXE, IpxeScript: cdb.GetStrPtr("#!ipxe\nchain http://boot.example.com"), + IpxeOsScope: cdb.GetStrPtr(cdbm.OperatingSystemScopeLocal), Status: cdbm.OperatingSystemStatusReady, CreatedBy: env.ipUser.ID, }) require.NoError(t, err) + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(env.dbSession) + _, err = ossaDAO.Create(ctx, nil, cdbm.OperatingSystemSiteAssociationCreateInput{ + OperatingSystemID: provOS.ID, + SiteID: env.site.ID, + Status: cdbm.OperatingSystemSiteAssociationStatusSynced, + }) + require.NoError(t, err) + // Seed one tenant-owned OS. tnOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ - Name: "tenant-os", - Org: env.sharedOrg, - TenantID: &env.tenant.ID, - OsType: cdbm.OperatingSystemTypeIPXE, - IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), - Status: cdbm.OperatingSystemStatusReady, - CreatedBy: env.tnUser.ID, + Name: "tenant-os", + Org: env.sharedOrg, + TenantID: &env.tenant.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + IpxeOsScope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.tnUser.ID, }) require.NoError(t, err) - _ = provOS - _ = tnOS - execGetAll := func(t *testing.T, user *cdbm.User) []model.APIOperatingSystem { t.Helper() tracer, ctx := otelTraceCtx(t) @@ -427,25 +437,24 @@ func TestOperatingSystemHandler_GetAll_CrossOwnership(t *testing.T) { return rsp } - t.Run("provider admin sees both provider-owned and tenant-owned OSes", func(t *testing.T) { + t.Run("provider admin sees only provider-owned OS", func(t *testing.T) { oss := execGetAll(t, env.ipUser) - assert.GreaterOrEqual(t, len(oss), 2, "expected at least the two seeded OSes") ids := make([]string, len(oss)) for i, o := range oss { ids[i] = o.ID } assert.Contains(t, ids, provOS.ID.String()) - assert.Contains(t, ids, tnOS.ID.String()) + assert.NotContains(t, ids, tnOS.ID.String(), "provider admin must not see tenant-owned OS") }) - t.Run("tenant admin sees both provider-owned and tenant-owned OSes", func(t *testing.T) { + t.Run("tenant admin sees own and provider-owned OS at accessible site", func(t *testing.T) { oss := execGetAll(t, env.tnUser) assert.GreaterOrEqual(t, len(oss), 2) ids := make([]string, len(oss)) for i, o := range oss { ids[i] = o.ID } - assert.Contains(t, ids, provOS.ID.String()) + assert.Contains(t, ids, provOS.ID.String(), "tenant should see provider OS at accessible site") assert.Contains(t, ids, tnOS.ID.String()) }) @@ -457,15 +466,17 @@ func TestOperatingSystemHandler_GetAll_CrossOwnership(t *testing.T) { // ─── GetByID: cross-ownership visibility ───────────────────────────────────── -// TestOperatingSystemHandler_GetByID_CrossOwnership verifies that any user -// whose org has both a Tenant and a Provider can fetch an individual OS -// regardless of which entity owns it. +// TestOperatingSystemHandler_GetByID_CrossOwnership verifies role-based +// visibility for individual OS fetches: +// - Provider Admin can fetch provider-owned OS, but NOT tenant-owned. +// - Tenant Admin can fetch own OS + provider-owned OS at accessible sites. func TestOperatingSystemHandler_GetByID_CrossOwnership(t *testing.T) { env := newOwnershipTestEnv(t) ctx := context.Background() osDAO := cdbm.NewOperatingSystemDAO(env.dbSession) + // Provider-owned OS with site association (visible to tenant via site). provOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ Name: "prov-single", Org: env.sharedOrg, @@ -473,19 +484,29 @@ func TestOperatingSystemHandler_GetByID_CrossOwnership(t *testing.T) { InfrastructureProviderID: &env.ip.ID, OsType: cdbm.OperatingSystemTypeIPXE, IpxeScript: cdb.GetStrPtr("#!ipxe"), + IpxeOsScope: cdb.GetStrPtr(cdbm.OperatingSystemScopeLocal), Status: cdbm.OperatingSystemStatusReady, CreatedBy: env.ipUser.ID, }) require.NoError(t, err) + ossaDAO := cdbm.NewOperatingSystemSiteAssociationDAO(env.dbSession) + _, err = ossaDAO.Create(ctx, nil, cdbm.OperatingSystemSiteAssociationCreateInput{ + OperatingSystemID: provOS.ID, + SiteID: env.site.ID, + Status: cdbm.OperatingSystemSiteAssociationStatusSynced, + }) + require.NoError(t, err) + tnOS, err := osDAO.Create(ctx, nil, cdbm.OperatingSystemCreateInput{ - Name: "tenant-single", - Org: env.sharedOrg, - TenantID: &env.tenant.ID, - OsType: cdbm.OperatingSystemTypeIPXE, - IpxeScript: cdb.GetStrPtr("#!ipxe"), - Status: cdbm.OperatingSystemStatusReady, - CreatedBy: env.tnUser.ID, + Name: "tenant-single", + Org: env.sharedOrg, + TenantID: &env.tenant.ID, + OsType: cdbm.OperatingSystemTypeIPXE, + IpxeScript: cdb.GetStrPtr("#!ipxe"), + IpxeOsScope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + Status: cdbm.OperatingSystemStatusReady, + CreatedBy: env.tnUser.ID, }) require.NoError(t, err) @@ -520,14 +541,14 @@ func TestOperatingSystemHandler_GetByID_CrossOwnership(t *testing.T) { assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) }) - t.Run("tenant admin gets provider-owned OS", func(t *testing.T) { + t.Run("tenant admin gets provider-owned OS at accessible site", func(t *testing.T) { rec := execGetByID(t, env.tnUser, provOS.ID.String()) assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) }) - t.Run("provider admin gets tenant-owned OS", func(t *testing.T) { + t.Run("provider admin cannot get tenant-owned OS", func(t *testing.T) { rec := execGetByID(t, env.ipUser, tnOS.ID.String()) - assert.Equal(t, http.StatusOK, rec.Code, rec.Body.String()) + assert.Equal(t, http.StatusForbidden, rec.Code, rec.Body.String()) }) t.Run("tenant admin gets tenant-owned OS", func(t *testing.T) { @@ -758,3 +779,182 @@ func TestOperatingSystemHandler_Delete_OwnershipEnforcement(t *testing.T) { assert.Equal(t, http.StatusAccepted, rec.Code, rec.Body.String()) }) } + +// ─── Create: scope and site-association behaviour ───────────────────────────── + +// TestOperatingSystemHandler_Create_ScopeAndSiteAssociation verifies that: +// - Templated iPXE with Global scope auto-associates with all registered provider sites +// - Templated iPXE with Limited scope associates only with specified sites +// - Raw iPXE auto-sets scope to Global and auto-associates with tenant-accessible sites +// - Response includes correct scope, type, and site associations +func TestOperatingSystemHandler_Create_ScopeAndSiteAssociation(t *testing.T) { + env := newOwnershipTestEnv(t) + + scopeGlobal := cdbm.OperatingSystemScopeGlobal + scopeLimited := cdbm.OperatingSystemScopeLimited + templateName := "test-template" + + tests := []struct { + name string + user *cdbm.User + body model.APIOperatingSystemCreateRequest + wantStatus int + wantType string + wantScope *string + wantSiteCount int + wantProviderOwned bool + }{ + { + name: "provider admin template iPXE global scope → auto-associates with provider sites", + user: env.ipUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "prov-global-" + uuid.NewString(), + IpxeTemplateId: &templateName, + Scope: &scopeGlobal, + }, + wantStatus: http.StatusCreated, + wantType: cdbm.OperatingSystemTypeTemplatedIPXE, + wantScope: &scopeGlobal, + wantSiteCount: 1, // one registered site in env + wantProviderOwned: true, + }, + { + name: "provider admin template iPXE limited scope → associates with specified sites", + user: env.ipUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "prov-limited-" + uuid.NewString(), + IpxeTemplateId: &templateName, + Scope: &scopeLimited, + SiteIDs: []string{env.site.ID.String()}, + }, + wantStatus: http.StatusCreated, + wantType: cdbm.OperatingSystemTypeTemplatedIPXE, + wantScope: &scopeLimited, + wantSiteCount: 1, + wantProviderOwned: true, + }, + { + name: "tenant admin raw iPXE → scope auto-set to Global, associates with tenant sites", + user: env.tnUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "tn-raw-ipxe-" + uuid.NewString(), + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + }, + wantStatus: http.StatusCreated, + wantType: cdbm.OperatingSystemTypeIPXE, + wantScope: &scopeGlobal, + wantSiteCount: 1, // tenant has access to env.site + }, + { + name: "tenant admin template iPXE global scope → tenant-owned, associates with tenant sites", + user: env.tnUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "tn-tmpl-global-" + uuid.NewString(), + IpxeTemplateId: &templateName, + Scope: &scopeGlobal, + }, + wantStatus: http.StatusCreated, + wantType: cdbm.OperatingSystemTypeTemplatedIPXE, + wantScope: &scopeGlobal, + wantSiteCount: 1, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + rec := env.execCreateOS(t, tc.user, tc.body) + require.Equal(t, tc.wantStatus, rec.Code, "response body: %s", rec.Body.String()) + + var rsp model.APIOperatingSystem + require.NoError(t, json.Unmarshal(rec.Body.Bytes(), &rsp)) + + require.NotNil(t, rsp.Type, "type must be set") + assert.Equal(t, tc.wantType, *rsp.Type) + + if tc.wantScope != nil { + require.NotNil(t, rsp.Scope, "scope must be set in response") + assert.Equal(t, *tc.wantScope, *rsp.Scope) + } + + assert.Len(t, rsp.SiteAssociations, tc.wantSiteCount, + "expected %d site associations, got %d", tc.wantSiteCount, len(rsp.SiteAssociations)) + + if tc.wantProviderOwned { + assert.NotNil(t, rsp.InfrastructureProviderID) + assert.Nil(t, rsp.TenantID) + } else { + assert.Nil(t, rsp.InfrastructureProviderID) + assert.NotNil(t, rsp.TenantID) + } + + assert.Equal(t, cdbm.OperatingSystemStatusSyncing, rsp.Status) + assert.True(t, len(rsp.StatusHistory) >= 1, "expected at least one status history entry") + }) + } +} + +// ─── Create: validation error paths for scope ───────────────────────────────── + +// TestOperatingSystemHandler_Create_ScopeValidationErrors verifies API-level +// rejection of invalid scope combinations that the model validation covers. +func TestOperatingSystemHandler_Create_ScopeValidationErrors(t *testing.T) { + env := newOwnershipTestEnv(t) + + scopeLocal := cdbm.OperatingSystemScopeLocal + scopeLimited := cdbm.OperatingSystemScopeLimited + templateName := "test-template" + + tests := []struct { + name string + user *cdbm.User + body model.APIOperatingSystemCreateRequest + wantStatus int + }{ + { + name: "template iPXE with Local scope → 400", + user: env.ipUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "tmpl-local-" + uuid.NewString(), + IpxeTemplateId: &templateName, + Scope: &scopeLocal, + }, + wantStatus: http.StatusBadRequest, + }, + { + name: "template iPXE with Limited scope but no siteIds → 400", + user: env.ipUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "tmpl-limited-nosites-" + uuid.NewString(), + IpxeTemplateId: &templateName, + Scope: &scopeLimited, + }, + wantStatus: http.StatusBadRequest, + }, + { + name: "template iPXE missing scope entirely → 400", + user: env.ipUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "tmpl-noscope-" + uuid.NewString(), + IpxeTemplateId: &templateName, + }, + wantStatus: http.StatusBadRequest, + }, + { + name: "raw iPXE with scope specified → 400", + user: env.tnUser, + body: model.APIOperatingSystemCreateRequest{ + Name: "raw-ipxe-scope-" + uuid.NewString(), + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + Scope: &scopeLimited, + }, + wantStatus: http.StatusBadRequest, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + rec := env.execCreateOS(t, tc.user, tc.body) + assert.Equal(t, tc.wantStatus, rec.Code, "response body: %s", rec.Body.String()) + }) + } +} diff --git a/api/pkg/api/handler/operatingsystem_test.go b/api/pkg/api/handler/operatingsystem_test.go index 0fc47b9e4..86851195f 100644 --- a/api/pkg/api/handler/operatingsystem_test.go +++ b/api/pkg/api/handler/operatingsystem_test.go @@ -1697,32 +1697,22 @@ func TestOperatingSystemHandler_Update(t *testing.T) { verifyChildSpanner: true, }, { - name: "should succeed to deactivate active OS", + name: "should reject deactivate on Image OS", reqOrgName: ipOrg1, user: user, reqBody: string(okBodyDeactivate), osID: os10.ID.String(), - expectedErr: false, - expectedStatus: http.StatusOK, - - expectedName: updReqDeactivate.Name, - expectedDesc: updReqDeactivate.Description, - expectedIsActive: cdb.GetBoolPtr(false), - expectedDeactivationNote: updReqDeactivate.DeactivationNote, + expectedErr: true, + expectedStatus: http.StatusBadRequest, }, { - name: "should succeed to deactivate active OS without Deactivation Note", + name: "should reject deactivate on Image OS without Deactivation Note", reqOrgName: ipOrg1, user: user, reqBody: string(okBodyDeactivateNoNote), osID: os11.ID.String(), - expectedErr: false, - expectedStatus: http.StatusOK, - - expectedName: updReqDeactivateNoNote.Name, - expectedDesc: updReqDeactivateNoNote.Description, - expectedIsActive: cdb.GetBoolPtr(false), - expectedDeactivationNote: updReqDeactivateNoNote.DeactivationNote, + expectedErr: true, + expectedStatus: http.StatusBadRequest, }, { name: "should fail to change Deactivation Note for an active OS", @@ -1734,53 +1724,42 @@ func TestOperatingSystemHandler_Update(t *testing.T) { expectedStatus: http.StatusBadRequest, }, { - name: "should succeed to change Deactivation Note on deactivated OS", + name: "should reject change of Deactivation Note on deactivated Image OS", reqOrgName: ipOrg1, user: user, reqBody: string(okBodyChangeNote), osID: os12.ID.String(), - expectedErr: false, - expectedStatus: http.StatusOK, - - expectedName: updReqChangeNote.Name, - expectedDesc: updReqChangeNote.Description, - expectedIsActive: cdb.GetBoolPtr(false), - expectedDeactivationNote: updReqChangeNote.DeactivationNote, + expectedErr: true, + expectedStatus: http.StatusBadRequest, }, { - name: "should succeed to activate deactivated OS (3/4)", + name: "should reject activate on deactivated Image OS", reqOrgName: ipOrg1, user: user, reqBody: string(okBodyActivate), osID: os13.ID.String(), - expectedErr: false, - expectedStatus: http.StatusOK, - - expectedName: updReqActivate.Name, - expectedDesc: updReqActivate.Description, - expectedIsActive: cdb.GetBoolPtr(false), - expectedDeactivationNote: nil, + expectedErr: true, + expectedStatus: http.StatusBadRequest, }, { - name: "success when updated with required valid imageURL attribute", - reqOrgName: ipOrg1, - user: user, - reqBody: string(okBodyImageUrl), - reqUpdateModel: &updReqImageUrl, - osID: os5.ID.String(), - expectedErr: false, - expectedStatus: http.StatusOK, - expectedImageURL: cdb.GetStrPtr("http://newimagepath.iso"), + name: "should reject imageURL update on Image OS", + reqOrgName: ipOrg1, + user: user, + reqBody: string(okBodyImageUrl), + reqUpdateModel: &updReqImageUrl, + osID: os5.ID.String(), + expectedErr: true, + expectedStatus: http.StatusBadRequest, }, { - name: "error when updated with required valid imageURL attribute failed with context deadline error", + name: "should reject imageURL update on Image OS in second org", reqOrgName: ipOrg2, user: user, reqBody: string(okBodyImageUrl), reqUpdateModel: &updReqImageUrl, osID: os9.ID.String(), expectedErr: true, - expectedStatus: http.StatusInternalServerError, + expectedStatus: http.StatusBadRequest, }, } for _, tc := range tests { diff --git a/api/pkg/api/model/instance.go b/api/pkg/api/model/instance.go index 2a60f189c..9aed1f8fd 100644 --- a/api/pkg/api/model/instance.go +++ b/api/pkg/api/model/instance.go @@ -584,7 +584,9 @@ func (icr *APIInstanceCreateRequest) ValidateAndSetOperatingSystemData(cfg *conf // Merge things in from OS when not // found in request. - if mergedIpxeScript == nil { + // Templated iPXE uses server-side template resolution, so the OS's + // inline ipxeScript must not be copied into the request. + if mergedIpxeScript == nil && os.Type == cdbm.OperatingSystemTypeIPXE { // If no script was sent in the request, and the // request is selecting the operating system, // give it precedence. @@ -914,7 +916,9 @@ func (bicr *APIBatchInstanceCreateRequest) ValidateAndSetOperatingSystemData(cfg // Merge things in from OS when not // found in request. - if mergedIpxeScript == nil { + // Templated iPXE uses server-side template resolution, so the OS's + // inline ipxeScript must not be copied into the request. + if mergedIpxeScript == nil && os.Type == cdbm.OperatingSystemTypeIPXE { mergedIpxeScript = os.IpxeScript bicr.IpxeScript = mergedIpxeScript } @@ -1152,18 +1156,20 @@ func (iur *APIInstanceUpdateRequest) ValidateAndSetOperatingSystemData(cfg *conf // Merge things in from OS and/or instance when not // found in request. if mergedIpxeScript == nil { - if iur.OperatingSystemID != nil { + if iur.OperatingSystemID != nil && os.Type == cdbm.OperatingSystemTypeIPXE { // If no script was sent in the request, and the - // request is changing the operating system, + // request is changing to a raw iPXE operating system, // give it precedence. // I.e., the caller has said, "Switch the base OS," // but has not sent in any override for iPXE script, // so the script of the base OS will be used. + // Templated iPXE uses server-side template resolution, + // so we must not copy the OS's inline ipxeScript. mergedIpxeScript = os.IpxeScript // Set it so the DB gets updated. iur.IpxeScript = mergedIpxeScript - } else { + } else if iur.OperatingSystemID == nil { // If no script was sent in the request AND no // change in base OS is being requested, then // use the existing iPXE script of the instance. diff --git a/api/pkg/api/model/instance_test.go b/api/pkg/api/model/instance_test.go index 12664b526..3e3d282b1 100644 --- a/api/pkg/api/model/instance_test.go +++ b/api/pkg/api/model/instance_test.go @@ -1106,6 +1106,38 @@ func TestAPIInstanceCreateRequest_ValidateAndSetOperatingSystemData(t *testing.T imageOSDeactivated.IsActive = false imageOSDeactivated.ID = uuid.New() + templatedIpxeOs := &cdbm.OperatingSystem{ + ID: uuid.New(), + Name: "templated-ipxe-os", + IpxeScript: nil, + IpxeTemplateId: cdb.GetStrPtr("my-template"), + UserData: nil, + PhoneHomeEnabled: false, + IsActive: true, + Status: cdbm.OperatingSystemStatusReady, + AllowOverride: false, + Type: cdbm.OperatingSystemTypeTemplatedIPXE, + CreatedBy: uuid.New(), + } + + templatedIpxeOsDeactivated := new(cdbm.OperatingSystem) + *templatedIpxeOsDeactivated = *templatedIpxeOs + templatedIpxeOsDeactivated.IsActive = false + templatedIpxeOsDeactivated.ID = uuid.New() + + providerOwnedIpxeOs := &cdbm.OperatingSystem{ + ID: uuid.New(), + Name: "provider-ipxe-os", + IpxeTemplateId: cdb.GetStrPtr("provider-template"), + PhoneHomeEnabled: false, + IsActive: true, + Status: cdbm.OperatingSystemStatusReady, + AllowOverride: false, + Type: cdbm.OperatingSystemTypeTemplatedIPXE, + InfrastructureProviderID: cdb.GetUUIDPtr(uuid.New()), + CreatedBy: uuid.New(), + } + tests := []struct { name string fields fields @@ -1387,6 +1419,97 @@ func TestAPIInstanceCreateRequest_ValidateAndSetOperatingSystemData(t *testing.T cfg: cfg1, os: os, }, + // ─── Templated iPXE OS instance creation ────────────────────────── + { + name: "templated iPXE os selected, no override, phone-home enabled, should succeed", + fields: fields{ + Name: "test-name", + Description: cdb.GetStrPtr("Test description"), + TenantID: uuid.NewString(), + InstanceTypeID: uuid.NewString(), + VpcID: uuid.NewString(), + OperatingSystemID: cdb.GetStrPtr(templatedIpxeOs.ID.String()), + PhoneHomeEnabled: cdb.GetBoolPtr(true), + }, + os: templatedIpxeOs, + cfg: cfg1, + wantErr: false, + }, + { + name: "templated iPXE os selected, iPXE script specified, should fail", + fields: fields{ + Name: "test-name", + Description: cdb.GetStrPtr("Test description"), + TenantID: uuid.NewString(), + InstanceTypeID: uuid.NewString(), + VpcID: uuid.NewString(), + OperatingSystemID: cdb.GetStrPtr(templatedIpxeOs.ID.String()), + IpxeScript: cdb.GetStrPtr("#!ipxe\nboot"), + }, + os: templatedIpxeOs, + cfg: cfg1, + wantErr: true, + }, + { + name: "deactivated templated iPXE os selected, should fail", + fields: fields{ + Name: "test-name", + Description: cdb.GetStrPtr("Test description"), + TenantID: uuid.NewString(), + InstanceTypeID: uuid.NewString(), + VpcID: uuid.NewString(), + OperatingSystemID: cdb.GetStrPtr(templatedIpxeOsDeactivated.ID.String()), + }, + os: templatedIpxeOsDeactivated, + cfg: cfg1, + wantErr: true, + }, + { + name: "templated iPXE os, AlwaysBootWithCustomIpxe, should fail", + fields: fields{ + Name: "test-name", + Description: cdb.GetStrPtr("Test description"), + TenantID: uuid.NewString(), + InstanceTypeID: uuid.NewString(), + VpcID: uuid.NewString(), + OperatingSystemID: cdb.GetStrPtr(templatedIpxeOs.ID.String()), + AlwaysBootWithCustomIpxe: cdb.GetBoolPtr(true), + }, + os: templatedIpxeOs, + cfg: cfg1, + wantErr: true, + }, + // ─── Provider-owned OS instance creation ────────────────────────── + { + name: "provider-owned templated iPXE os, no override, phone-home enabled, should succeed", + fields: fields{ + Name: "test-name", + Description: cdb.GetStrPtr("Test description"), + TenantID: uuid.NewString(), + InstanceTypeID: uuid.NewString(), + VpcID: uuid.NewString(), + OperatingSystemID: cdb.GetStrPtr(providerOwnedIpxeOs.ID.String()), + PhoneHomeEnabled: cdb.GetBoolPtr(true), + }, + os: providerOwnedIpxeOs, + cfg: cfg1, + wantErr: false, + }, + { + name: "provider-owned templated iPXE os, user-data specified but no override, should fail", + fields: fields{ + Name: "test-name", + Description: cdb.GetStrPtr("Test description"), + TenantID: uuid.NewString(), + InstanceTypeID: uuid.NewString(), + VpcID: uuid.NewString(), + OperatingSystemID: cdb.GetStrPtr(providerOwnedIpxeOs.ID.String()), + UserData: cdb.GetStrPtr("custom user data"), + }, + os: providerOwnedIpxeOs, + cfg: cfg1, + wantErr: true, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/api/pkg/api/model/ipxetemplate.go b/api/pkg/api/model/ipxetemplate.go index b03fd760e..8541b466e 100644 --- a/api/pkg/api/model/ipxetemplate.go +++ b/api/pkg/api/model/ipxetemplate.go @@ -29,7 +29,7 @@ type APIIpxeTemplate struct { ID string `json:"id"` // SiteID is the ID of the Site this template was retrieved from SiteID string `json:"siteId"` - // Name is the unique template name (e.g. "ubuntu-autoinstall", "kernel-initrd") + // Name is the template name, unique per site (e.g. "ubuntu-autoinstall", "kernel-initrd") Name string `json:"name"` // Template is the raw iPXE script content Template string `json:"template"` diff --git a/api/pkg/api/model/operatingsystem.go b/api/pkg/api/model/operatingsystem.go index 98f2e351f..d6ef50ac3 100644 --- a/api/pkg/api/model/operatingsystem.go +++ b/api/pkg/api/model/operatingsystem.go @@ -88,9 +88,9 @@ type APIOperatingSystemCreateRequest struct { // IpxeTemplateArtifacts are the artifacts (kernel, initrd, ISO, …) for the iPXE OS definition IpxeTemplateArtifacts []cdbm.OperatingSystemIpxeArtifact `json:"ipxeTemplateArtifacts"` // Scope controls the synchronization direction between carbide-rest and carbide-core. - // Allowed values: "Local" (single site, bidirectional), "Global" (rest→core, all sites), - // "Limited" (rest→core, specific sites listed in siteIds). - // Required for Templated iPXE Operating Systems; must be nil for all other types. + // Allowed values: "Global" (rest→core, all sites), "Limited" (rest→core, specific sites + // listed in siteIds). Required for Templated iPXE OS; rejected for other types + // (validateRawIpxeOS / validateImageOS). The handler defaults raw iPXE to "Global". Scope *string `json:"scope"` } @@ -123,7 +123,7 @@ func (oscr APIOperatingSystemCreateRequest) Validate() error { } } - osType := GetOperatingSystemType(oscr.IpxeScript, oscr.IpxeTemplateId) + osType := oscr.GetOperatingSystemType() if osType == cdbm.OperatingSystemTypeImage && oscr.ImageURL == nil { return validation.Errors{ @@ -144,12 +144,12 @@ func (oscr APIOperatingSystemCreateRequest) Validate() error { } switch osType { - case cdbm.OperatingSystemTypeImage: - return oscr.validateImageOS() case cdbm.OperatingSystemTypeIPXE: return oscr.validateRawIpxeOS() case cdbm.OperatingSystemTypeTemplatedIPXE: return oscr.validateTemplatedIpxeOS() + case cdbm.OperatingSystemTypeImage: + return oscr.validateImageOS() } return nil @@ -281,11 +281,15 @@ func (oscr APIOperatingSystemCreateRequest) validateTemplatedIpxeOS() error { } switch *oscr.Scope { - case cdbm.OperatingSystemScopeLocal, cdbm.OperatingSystemScopeGlobal, cdbm.OperatingSystemScopeLimited: + case cdbm.OperatingSystemScopeGlobal, cdbm.OperatingSystemScopeLimited: // valid + case cdbm.OperatingSystemScopeLocal: + return validation.Errors{ + "scope": errors.New("scope 'Local' cannot be specified at creation; Local Operating Systems are created in carbide-core"), + } default: return validation.Errors{ - "scope": errors.New("scope must be one of 'Local', 'Global', or 'Limited'"), + "scope": errors.New("scope must be one of 'Global' or 'Limited'"), } } @@ -462,11 +466,19 @@ func (osur APIOperatingSystemUpdateRequest) Validate(existingOS *cdbm.OperatingS } } - // verify if os created with ipxe script, if yes reject the update if imageURL provided + // Reject cross-type field assignments (iPXE → Templated iPXE → Image). if cdbm.IsIPXEType(existingOS.Type) && osur.ImageURL != nil { return validation.Errors{ "imageURL": errors.New("unable to set image URL for iPXE based Operating System"), } + } else if existingOS.Type == cdbm.OperatingSystemTypeIPXE && osur.IpxeTemplateId != nil { + return validation.Errors{ + "ipxeTemplateId": errors.New("unable to set iPXE template for raw iPXE Operating System"), + } + } else if existingOS.Type == cdbm.OperatingSystemTypeTemplatedIPXE && osur.IpxeScript != nil { + return validation.Errors{ + "ipxeScript": errors.New("unable to set iPXE script for templated iPXE Operating System"), + } } else if existingOS.Type == cdbm.OperatingSystemTypeImage && osur.IpxeScript != nil { return validation.Errors{ "ipxeScript": errors.New("unable to set iPXE script for image based Operating System"), @@ -738,6 +750,9 @@ type APIOperatingSystem struct { IpxeTemplateParameters []cdbm.OperatingSystemIpxeParameter `json:"ipxeTemplateParameters"` // IpxeTemplateArtifacts are the artifacts (kernel, initrd, ISO, …) for the iPXE OS definition IpxeTemplateArtifacts []cdbm.OperatingSystemIpxeArtifact `json:"ipxeTemplateArtifacts"` + // Scope controls the synchronization direction between carbide-rest and carbide-core. + // One of "Local" (default), "Global", or "Limited". Only valid for Templated iPXE OSes. + Scope *string `json:"scope"` // PhoneHomeEnabled is an attribute which is specified by user if Operating System needs to be enabled for phone home or not PhoneHomeEnabled bool `json:"phoneHomeEnabled"` // UserData is the user data for the Operating System @@ -758,9 +773,6 @@ type APIOperatingSystem struct { StatusHistory []APIStatusDetail `json:"statusHistory"` // SiteAssociations is the list of Sites associated with the Operating System SiteAssociations []APIOperatingSystemSiteAssociation `json:"siteAssociations"` - // Scope controls the synchronization direction between carbide-rest and carbide-core. - // One of "Local" (default), "Global", or "Limited". Only valid for Templated iPXE OSes. - Scope *string `json:"scope"` // CreatedAt indicates the ISO datetime string for when the entity was created Created time.Time `json:"created"` // UpdatedAt indicates the ISO datetime string for when the entity was last updated @@ -785,6 +797,7 @@ func NewAPIOperatingSystem(dbOS *cdbm.OperatingSystem, dbsds []cdbm.StatusDetail IpxeTemplateId: dbOS.IpxeTemplateId, IpxeTemplateParameters: dbOS.IpxeTemplateParameters, IpxeTemplateArtifacts: dbOS.IpxeTemplateArtifacts, + Scope: dbOS.IpxeOsScope, PhoneHomeEnabled: dbOS.PhoneHomeEnabled, UserData: dbOS.UserData, IsCloudInit: dbOS.IsCloudInit, @@ -793,7 +806,6 @@ func NewAPIOperatingSystem(dbOS *cdbm.OperatingSystem, dbsds []cdbm.StatusDetail IsActive: dbOS.IsActive, DeactivationNote: dbOS.DeactivationNote, Status: dbOS.Status, - Scope: dbOS.IpxeOsScope, Created: dbOS.Created, Updated: dbOS.Updated, } @@ -822,14 +834,15 @@ func NewAPIOperatingSystem(dbOS *cdbm.OperatingSystem, dbsds []cdbm.StatusDetail return &apiOperatingSystem } -// GetOperatingSystemType returns the OperatingSystem type based on the source fields. -func GetOperatingSystemType(ipxeScript, ipxeTemplateId *string) string { - if ipxeTemplateId != nil { - return cdbm.OperatingSystemTypeTemplatedIPXE - } - if ipxeScript != nil { +// GetOperatingSystemType returns the OperatingSystem type inferred from the +// create request's source fields (`IpxeScript`, `IpxeTemplateId`, or neither). +func (oscr APIOperatingSystemCreateRequest) GetOperatingSystemType() string { + if oscr.IpxeScript != nil { return cdbm.OperatingSystemTypeIPXE } + if oscr.IpxeTemplateId != nil { + return cdbm.OperatingSystemTypeTemplatedIPXE + } return cdbm.OperatingSystemTypeImage } diff --git a/api/pkg/api/model/operatingsystem_test.go b/api/pkg/api/model/operatingsystem_test.go index e5a8d68a3..fdf03b656 100644 --- a/api/pkg/api/model/operatingsystem_test.go +++ b/api/pkg/api/model/operatingsystem_test.go @@ -195,6 +195,268 @@ func TestAPIOperatingSystemCreateRequest_Validate(t *testing.T) { obj: APIOperatingSystemCreateRequest{Name: "abc", TenantID: cdb.GetStrPtr(uuid.New().String()), ImageURL: cdb.GetStrPtr("http://iso.net/iso"), SiteIDs: []string{uuid.NewString()}, ImageSHA: cdb.GetStrPtr("a1efca12ea51069abb123bf9c77889fcc2a31cc5483fc14d115e44fdf07c7980"), RootFsID: cdb.GetStrPtr("666c2eee-193d-42db-a490-4c444342bd4e"), IsCloudInit: true, AllowOverride: false, ImageDisk: cdb.GetStrPtr(""), ImageAuthType: cdb.GetStrPtr(""), ImageAuthToken: cdb.GetStrPtr("")}, expectErr: false, }, + // ─── Templated iPXE OS validation ───────────────────────────────── + { + desc: "ok when valid templated iPXE with global scope", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-global", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + IpxeTemplateParameters: []cdbm.OperatingSystemIpxeParameter{ + {Name: "kernel_params", Value: "ip=dhcp"}, + }, + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "http://files.example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED"}, + }, + }, + expectErr: false, + }, + { + desc: "ok when valid templated iPXE with limited scope and siteIds", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-limited", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeLimited), + SiteIDs: []string{uuid.NewString()}, + }, + expectErr: false, + }, + { + desc: "error when templated iPXE missing scope", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-no-scope", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + }, + expectErr: true, + }, + { + desc: "error when templated iPXE with scope Local", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-local", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeLocal), + }, + expectErr: true, + }, + { + desc: "error when templated iPXE with invalid scope", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-bad-scope", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr("InvalidScope"), + }, + expectErr: true, + }, + { + desc: "error when templated iPXE with limited scope but no siteIds", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-limited-no-sites", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeLimited), + }, + expectErr: true, + }, + { + desc: "error when templated iPXE with global scope and siteIds", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-global-with-sites", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + SiteIDs: []string{uuid.NewString()}, + }, + expectErr: true, + }, + { + desc: "error when both ipxeScript and ipxeTemplateId specified", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-conflict", + IpxeScript: cdb.GetStrPtr("ipxe"), + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + }, + expectErr: true, + }, + { + desc: "error when ipxeTemplateId is empty string", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-empty-id", + IpxeTemplateId: cdb.GetStrPtr(""), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + }, + expectErr: true, + }, + { + desc: "error when ipxeTemplateId is whitespace only", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-ws-id", + IpxeTemplateId: cdb.GetStrPtr(" "), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + }, + expectErr: true, + }, + { + desc: "error when templated iPXE has image fields", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-image-fields", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + ImageSHA: cdb.GetStrPtr("abc123"), + }, + expectErr: true, + }, + { + desc: "error when template parameter has empty name", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-bad-param", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + IpxeTemplateParameters: []cdbm.OperatingSystemIpxeParameter{ + {Name: "", Value: "val"}, + }, + }, + expectErr: true, + }, + { + desc: "error when template artifact has empty name", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-bad-art-name", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "", URL: "http://example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED"}, + }, + }, + expectErr: true, + }, + { + desc: "error when template artifact has empty URL", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-bad-art-url", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "", CacheStrategy: "CACHE_AS_NEEDED"}, + }, + }, + expectErr: true, + }, + { + desc: "error when template artifact has invalid cacheStrategy", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-bad-art-cache", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "http://example.com/vmlinuz", CacheStrategy: "INVALID_STRATEGY"}, + }, + }, + expectErr: true, + }, + { + desc: "error when template artifact has authType without authToken", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-art-auth-notoken", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "http://example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED", AuthType: cdb.GetStrPtr("Bearer")}, + }, + }, + expectErr: true, + }, + { + desc: "error when template artifact has authToken without authType", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-art-token-notype", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "http://example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED", AuthToken: cdb.GetStrPtr("secret")}, + }, + }, + expectErr: true, + }, + { + desc: "error when template artifact has invalid authType", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-art-bad-authtype", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "http://example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED", AuthType: cdb.GetStrPtr("VAPID"), AuthToken: cdb.GetStrPtr("secret")}, + }, + }, + expectErr: true, + }, + { + desc: "ok when template artifact has valid auth pair", + obj: APIOperatingSystemCreateRequest{ + Name: "tmpl-os-art-valid-auth", + IpxeTemplateId: cdb.GetStrPtr("my-template"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "kernel", URL: "http://example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED", AuthType: cdb.GetStrPtr("Bearer"), AuthToken: cdb.GetStrPtr("secret")}, + }, + }, + expectErr: false, + }, + { + desc: "error when raw iPXE has scope specified", + obj: APIOperatingSystemCreateRequest{ + Name: "raw-ipxe-with-scope", + IpxeScript: cdb.GetStrPtr("ipxe-script"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + }, + expectErr: true, + }, + { + desc: "error when raw iPXE has template parameters", + obj: APIOperatingSystemCreateRequest{ + Name: "raw-ipxe-with-params", + IpxeScript: cdb.GetStrPtr("ipxe-script"), + IpxeTemplateParameters: []cdbm.OperatingSystemIpxeParameter{ + {Name: "k", Value: "v"}, + }, + }, + expectErr: true, + }, + { + desc: "error when raw iPXE has template artifacts", + obj: APIOperatingSystemCreateRequest{ + Name: "raw-ipxe-with-arts", + IpxeScript: cdb.GetStrPtr("ipxe-script"), + IpxeTemplateArtifacts: []cdbm.OperatingSystemIpxeArtifact{ + {Name: "k", URL: "http://example.com", CacheStrategy: "CACHE_AS_NEEDED"}, + }, + }, + expectErr: true, + }, + { + desc: "error when image OS has scope specified", + obj: APIOperatingSystemCreateRequest{ + Name: "image-os-with-scope", + ImageURL: cdb.GetStrPtr("http://iso.net/iso"), + SiteIDs: []string{uuid.NewString()}, + ImageSHA: cdb.GetStrPtr("a1efca12ea51069abb123bf9c77889fcc2a31cc5483fc14d115e44fdf07c7980"), + RootFsID: cdb.GetStrPtr("666c2eee-193d-42db-a490-4c444342bd4e"), + Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal), + }, + expectErr: true, + }, + { + desc: "error when image OS has template parameters", + obj: APIOperatingSystemCreateRequest{ + Name: "image-os-with-params", + ImageURL: cdb.GetStrPtr("http://iso.net/iso"), + SiteIDs: []string{uuid.NewString()}, + ImageSHA: cdb.GetStrPtr("a1efca12ea51069abb123bf9c77889fcc2a31cc5483fc14d115e44fdf07c7980"), + RootFsID: cdb.GetStrPtr("666c2eee-193d-42db-a490-4c444342bd4e"), + IpxeTemplateParameters: []cdbm.OperatingSystemIpxeParameter{ + {Name: "k", Value: "v"}, + }, + }, + expectErr: true, + }, } for _, tc := range tests { t.Run(tc.desc, func(t *testing.T) { @@ -228,6 +490,15 @@ func TestAPIOperatingSystemUpdateRequest_Validate(t *testing.T) { CreatedBy: uuid.New(), } + existingTemplatedIpxeOS := &cdbm.OperatingSystem{ + ID: uuid.New(), + Name: "tmpl-os", + Status: cdbm.OperatingSystemStatusReady, + Type: cdbm.OperatingSystemTypeTemplatedIPXE, + IsActive: true, + CreatedBy: uuid.New(), + } + existingImageBasedOSWithFSLabel := &cdbm.OperatingSystem{ ID: uuid.New(), Name: "abc", @@ -353,6 +624,89 @@ func TestAPIOperatingSystemUpdateRequest_Validate(t *testing.T) { obj: APIOperatingSystemUpdateRequest{Name: cdb.GetStrPtr("ab"), ImageURL: cdb.GetStrPtr("http://iso.net/iso"), ImageSHA: cdb.GetStrPtr("a1efca12ea51069abb123bf9c77889fcc2a31cc5483fc14d115e44fdf07c7980"), RootFsID: cdb.GetStrPtr("666c2eee-193d-42db-a490-4c444342bd4e"), ImageDisk: cdb.GetStrPtr(""), ImageAuthType: cdb.GetStrPtr(""), ImageAuthToken: cdb.GetStrPtr("")}, expectErr: false, }, + // ─── Templated iPXE update validation ───────────────────────────── + { + desc: "error when scope is specified on update", + obj: APIOperatingSystemUpdateRequest{Name: cdb.GetStrPtr("updated-tmpl"), Scope: cdb.GetStrPtr(cdbm.OperatingSystemScopeGlobal)}, + existingOS: existingTemplatedIpxeOS, + expectErr: true, + }, + { + desc: "error when ipxeTemplateParameters specified for raw iPXE OS", + obj: APIOperatingSystemUpdateRequest{IpxeTemplateParameters: &[]cdbm.OperatingSystemIpxeParameter{{Name: "k", Value: "v"}}}, + existingOS: existingIpxeBasedOS, + expectErr: true, + }, + { + desc: "error when ipxeTemplateArtifacts specified for raw iPXE OS", + obj: APIOperatingSystemUpdateRequest{IpxeTemplateArtifacts: &[]cdbm.OperatingSystemIpxeArtifact{{Name: "kernel", URL: "http://example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED"}}}, + existingOS: existingIpxeBasedOS, + expectErr: true, + }, + { + desc: "error when ipxeTemplateParameters specified for image OS", + obj: APIOperatingSystemUpdateRequest{IpxeTemplateParameters: &[]cdbm.OperatingSystemIpxeParameter{{Name: "k", Value: "v"}}}, + existingOS: existingImageBasedOS, + expectErr: true, + }, + { + desc: "error when ipxeTemplateArtifacts specified for image OS", + obj: APIOperatingSystemUpdateRequest{IpxeTemplateArtifacts: &[]cdbm.OperatingSystemIpxeArtifact{{Name: "kernel", URL: "http://example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED"}}}, + existingOS: existingImageBasedOS, + expectErr: true, + }, + { + desc: "ok when ipxeTemplateParameters updated for templated iPXE OS", + obj: APIOperatingSystemUpdateRequest{IpxeTemplateParameters: &[]cdbm.OperatingSystemIpxeParameter{{Name: "kernel_params", Value: "ip=dhcp"}}}, + existingOS: existingTemplatedIpxeOS, + expectErr: false, + }, + { + desc: "ok when ipxeTemplateArtifacts updated for templated iPXE OS", + obj: APIOperatingSystemUpdateRequest{IpxeTemplateArtifacts: &[]cdbm.OperatingSystemIpxeArtifact{{Name: "kernel", URL: "http://example.com/vmlinuz", CacheStrategy: "CACHE_AS_NEEDED"}}}, + existingOS: existingTemplatedIpxeOS, + expectErr: false, + }, + { + desc: "error when ipxeTemplateId set on image OS update", + obj: APIOperatingSystemUpdateRequest{IpxeTemplateId: cdb.GetStrPtr("my-template")}, + existingOS: existingImageBasedOS, + expectErr: true, + }, + { + desc: "error when ipxeTemplateId set on raw iPXE OS update", + obj: APIOperatingSystemUpdateRequest{IpxeTemplateId: cdb.GetStrPtr("my-template")}, + existingOS: existingIpxeBasedOS, + expectErr: true, + }, + { + desc: "error when ipxeScript set on templated iPXE OS update", + obj: APIOperatingSystemUpdateRequest{IpxeScript: cdb.GetStrPtr("chain --autofree https://boot.example.com")}, + existingOS: existingTemplatedIpxeOS, + expectErr: true, + }, + { + desc: "error when ipxeScript and ipxeTemplateId both on update", + obj: APIOperatingSystemUpdateRequest{IpxeScript: cdb.GetStrPtr("script"), IpxeTemplateId: cdb.GetStrPtr("tmpl")}, + existingOS: existingTemplatedIpxeOS, + expectErr: true, + }, + { + desc: "error when template parameter has blank name on update", + obj: APIOperatingSystemUpdateRequest{ + IpxeTemplateParameters: &[]cdbm.OperatingSystemIpxeParameter{{Name: " ", Value: "v"}}, + }, + existingOS: existingTemplatedIpxeOS, + expectErr: true, + }, + { + desc: "error when template artifact has invalid cacheStrategy on update", + obj: APIOperatingSystemUpdateRequest{ + IpxeTemplateArtifacts: &[]cdbm.OperatingSystemIpxeArtifact{{Name: "k", URL: "http://example.com/k", CacheStrategy: "BAD"}}, + }, + existingOS: existingTemplatedIpxeOS, + expectErr: true, + }, } for _, tc := range tests { diff --git a/db/pkg/db/model/ipxetemplate.go b/db/pkg/db/model/ipxetemplate.go index 97b8c2aad..b754dfe14 100644 --- a/db/pkg/db/model/ipxetemplate.go +++ b/db/pkg/db/model/ipxetemplate.go @@ -88,7 +88,7 @@ type IpxeTemplateCreateInput struct { // IpxeTemplateUpdateInput are input parameters for the Update method type IpxeTemplateUpdateInput struct { - ID uuid.UUID + IpxeTemplateID uuid.UUID Name string Template string RequiredParams []string @@ -97,11 +97,12 @@ type IpxeTemplateUpdateInput struct { Scope string } -// IpxeTemplateFilterInput are input parameters for the filter/GetAll method +// IpxeTemplateFilterInput are input parameters for the filter/GetAll method. +// Note: only `Public`-scoped templates are ever propagated into REST (see the +// workflow activity `UpdateIpxeTemplatesInDB`), so there is no scope filter. type IpxeTemplateFilterInput struct { SiteIDs []uuid.UUID Names []string - Scopes []string } var _ bun.BeforeAppendModelHook = (*IpxeTemplate)(nil) @@ -138,8 +139,6 @@ type IpxeTemplateDAO interface { GetAll(ctx context.Context, tx *db.Tx, filter IpxeTemplateFilterInput, page paginator.PageInput) ([]IpxeTemplate, int, error) // Get returns the row for the specified ID Get(ctx context.Context, tx *db.Tx, id uuid.UUID) (*IpxeTemplate, error) - // GetBySiteAndName returns the row for the specified site and template name - GetBySiteAndName(ctx context.Context, tx *db.Tx, siteID uuid.UUID, name string) (*IpxeTemplate, error) // GetBySiteAndTemplateID returns the row for the specified site and core template ID GetBySiteAndTemplateID(ctx context.Context, tx *db.Tx, siteID uuid.UUID, templateID uuid.UUID) (*IpxeTemplate, error) // GetAnyByTemplateID returns any single row matching the core template ID (across all sites). @@ -203,32 +202,6 @@ func (itd IpxeTemplateSQLDAO) Get(ctx context.Context, tx *db.Tx, id uuid.UUID) return it, nil } -// GetBySiteAndName returns an IpxeTemplate by site ID and template name -// Returns db.ErrDoesNotExist if the record is not found -func (itd IpxeTemplateSQLDAO) GetBySiteAndName(ctx context.Context, tx *db.Tx, siteID uuid.UUID, name string) (*IpxeTemplate, error) { - ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.GetBySiteAndName") - if span != nil { - defer span.End() - itd.tracerSpan.SetAttribute(span, "site_id", siteID) - itd.tracerSpan.SetAttribute(span, "name", name) - } - - it := &IpxeTemplate{} - - err := db.GetIDB(tx, itd.dbSession).NewSelect().Model(it). - Where("ipxet.site_id = ?", siteID). - Where("ipxet.name = ?", name). - Scan(ctx) - if err != nil { - if err == sql.ErrNoRows { - return nil, db.ErrDoesNotExist - } - return nil, err - } - - return it, nil -} - // GetBySiteAndTemplateID returns an IpxeTemplate by site ID and core template ID // Returns db.ErrDoesNotExist if the record is not found func (itd IpxeTemplateSQLDAO) GetBySiteAndTemplateID(ctx context.Context, tx *db.Tx, siteID uuid.UUID, templateID uuid.UUID) (*IpxeTemplate, error) { @@ -296,13 +269,6 @@ func (itd IpxeTemplateSQLDAO) setQueryWithFilter(filter IpxeTemplateFilterInput, } } - if len(filter.Scopes) > 0 { - query = query.Where("ipxet.scope IN (?)", bun.In(filter.Scopes)) - if span != nil { - itd.tracerSpan.SetAttribute(span, "scopes", filter.Scopes) - } - } - return query, nil } @@ -345,10 +311,10 @@ func (itd IpxeTemplateSQLDAO) Update(ctx context.Context, tx *db.Tx, input IpxeT ctx, span := itd.tracerSpan.CreateChildInCurrentContext(ctx, "IpxeTemplateDAO.Update") if span != nil { defer span.End() - itd.tracerSpan.SetAttribute(span, "id", input.ID) + itd.tracerSpan.SetAttribute(span, "id", input.IpxeTemplateID) } - it := &IpxeTemplate{ID: input.ID} + it := &IpxeTemplate{ID: input.IpxeTemplateID} updatedFields := []string{"name", "template", "required_params", "reserved_params", "required_artifacts", "scope", "updated"} it.Name = input.Name @@ -358,7 +324,7 @@ func (itd IpxeTemplateSQLDAO) Update(ctx context.Context, tx *db.Tx, input IpxeT it.RequiredArtifacts = input.RequiredArtifacts it.Scope = input.Scope - _, err := db.GetIDB(tx, itd.dbSession).NewUpdate().Model(it).Column(updatedFields...).Where("ipxet.id = ?", input.ID).Exec(ctx) + _, err := db.GetIDB(tx, itd.dbSession).NewUpdate().Model(it).Column(updatedFields...).Where("ipxet.id = ?", input.IpxeTemplateID).Exec(ctx) if err != nil { return nil, err } diff --git a/db/pkg/db/model/ipxetemplate_test.go b/db/pkg/db/model/ipxetemplate_test.go index b5ed6cfc2..229d0f2b4 100644 --- a/db/pkg/db/model/ipxetemplate_test.go +++ b/db/pkg/db/model/ipxetemplate_test.go @@ -159,43 +159,6 @@ func TestIpxeTemplateSQLDAO_Get(t *testing.T) { } } -func TestIpxeTemplateSQLDAO_GetBySiteAndName(t *testing.T) { - ctx := context.Background() - dbSession := testIpxeTemplateInitDB(t) - defer dbSession.Close() - testIpxeTemplateSetupSchema(t, dbSession) - - user := TestBuildUser(t, dbSession, "test-user", "test-org", []string{"admin"}) - ip := TestBuildInfrastructureProvider(t, dbSession, "test-provider", "test-org", user) - site := TestBuildSite(t, dbSession, ip, "test-site", user) - - dao := NewIpxeTemplateDAO(dbSession) - testIpxeTemplateCreate(ctx, t, dao, site.ID, "ubuntu-autoinstall", IpxeTemplateScopePublic) - - tests := []struct { - desc string - siteID uuid.UUID - name string - expectError bool - }{ - {desc: "existing template", siteID: site.ID, name: "ubuntu-autoinstall"}, - {desc: "wrong name", siteID: site.ID, name: "does-not-exist", expectError: true}, - {desc: "wrong site", siteID: uuid.New(), name: "ubuntu-autoinstall", expectError: true}, - } - - for _, tc := range tests { - t.Run(tc.desc, func(t *testing.T) { - got, err := dao.GetBySiteAndName(ctx, nil, tc.siteID, tc.name) - assert.Equal(t, tc.expectError, err != nil) - if !tc.expectError { - require.NotNil(t, got) - assert.Equal(t, tc.name, got.Name) - assert.Equal(t, tc.siteID, got.SiteID) - } - }) - } -} - func TestIpxeTemplateSQLDAO_GetAll(t *testing.T) { ctx := context.Background() dbSession := testIpxeTemplateInitDB(t) @@ -221,8 +184,6 @@ func TestIpxeTemplateSQLDAO_GetAll(t *testing.T) { {desc: "no filter returns all", expectedCount: 3, expectedTotal: db.GetIntPtr(3)}, {desc: "filter by site", filter: IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{site.ID}}, expectedCount: 3}, {desc: "filter by name", filter: IpxeTemplateFilterInput{Names: []string{"kernel-initrd"}}, expectedCount: 1}, - {desc: "filter by scope public", filter: IpxeTemplateFilterInput{Scopes: []string{IpxeTemplateScopePublic}}, expectedCount: 2}, - {desc: "filter by scope internal", filter: IpxeTemplateFilterInput{Scopes: []string{IpxeTemplateScopeInternal}}, expectedCount: 1}, {desc: "limit applies", page: paginator.PageInput{Offset: db.GetIntPtr(0), Limit: db.GetIntPtr(2)}, expectedCount: 2, expectedTotal: db.GetIntPtr(3)}, {desc: "offset applies", page: paginator.PageInput{Offset: db.GetIntPtr(1)}, expectedCount: 2, expectedTotal: db.GetIntPtr(3)}, {desc: "unknown site returns empty", filter: IpxeTemplateFilterInput{SiteIDs: []uuid.UUID{uuid.New()}}, expectedCount: 0}, @@ -255,7 +216,7 @@ func TestIpxeTemplateSQLDAO_Update(t *testing.T) { // Update scope and params updated, err := dao.Update(ctx, nil, IpxeTemplateUpdateInput{ - ID: created.ID, + IpxeTemplateID: created.ID, Name: "kernel-initrd", RequiredParams: []string{"kernel_params", "extra_option"}, ReservedParams: []string{"base_url"}, diff --git a/db/pkg/db/model/operatingsystem.go b/db/pkg/db/model/operatingsystem.go index 4758b2942..b46e419a8 100644 --- a/db/pkg/db/model/operatingsystem.go +++ b/db/pkg/db/model/operatingsystem.go @@ -50,11 +50,11 @@ const ( // OperatingSystemRelationName is the relation name for the OperatingSystem model OperatingSystemRelationName = "OperatingSystem" - // OperatingSystemScopeLocal is the default scope: single site, bidirectional sync, most-recently-updated wins. + // OperatingSystemScopeLocal means single site, bidirectional sync (provider-owned OS from carbide-core). OperatingSystemScopeLocal = "Local" // OperatingSystemScopeLimited means carbide-rest is the source of truth for a fixed list of sites. OperatingSystemScopeLimited = "Limited" - // OperatingSystemScopeGlobal means carbide-rest is the source of truth for all provider sites. + // OperatingSystemScopeGlobal means carbide-rest is the source of truth for all owner sites. OperatingSystemScopeGlobal = "Global" // OperatingSystemTypeIPXE is the raw iPXE script based OperatingSystem type OperatingSystemTypeIPXE = "iPXE" @@ -119,7 +119,6 @@ type OperatingSystemIpxeArtifact struct { AuthType *string `json:"authType,omitempty"` AuthToken *string `json:"authToken,omitempty"` CacheStrategy string `json:"cacheStrategy"` - CachedURL *string `json:"cached_url,omitempty"` } // OperatingSystem describes the attributes of the operating system @@ -151,9 +150,11 @@ type OperatingSystem struct { IpxeTemplateArtifacts []OperatingSystemIpxeArtifact `bun:"ipxe_template_artifacts,type:jsonb"` IpxeTemplateDefinitionHash *string `bun:"ipxe_template_definition_hash"` // IpxeOsScope controls synchronization direction between carbide-rest and carbide-core. - // Nil / "Local" means bidirectional (most-recently-updated wins). + // "Local" means bidirectional, provider-owned from carbide-core. // "Global" and "Limited" mean carbide-rest is the source of truth. - // Only valid for Templated iPXE Operating Systems. + // Set for all iPXE types (raw and templated); nil for Image-type OS. + // Tenant raw iPXE is auto-set to "Global"; provider iPXE from core is "Local". + // Legacy records with nil scope are treated as "Local" and backfilled by migration. IpxeOsScope *string `bun:"ipxe_os_scope"` UserData *string `bun:"user_data"` IsCloudInit bool `bun:"is_cloud_init,notnull"` @@ -265,23 +266,28 @@ type OperatingSystemClearInput struct { type OperatingSystemFilterInput struct { InfrastructureProviderID *uuid.UUID TenantIDs []uuid.UUID - // InfrastructureProviderIDs, when set together with TenantIDs, widens the result set with - // an OR: the query returns OSes owned by any of the given tenants OR any of the given providers. - // When used alone (without TenantIDs) it is an AND filter like the other fields. - InfrastructureProviderIDs []uuid.UUID - SiteIDs []uuid.UUID - Names []string - Orgs []string - OsTypes []string - Statuses []string - SearchQuery *string - OperatingSystemIds []uuid.UUID - IsActive *bool + SiteIDs []uuid.UUID + Names []string + Orgs []string + OsTypes []string + Statuses []string + SearchQuery *string + OperatingSystemIds []uuid.UUID + IsActive *bool // Scopes filters by the scope field (e.g. "Global", "Limited", "Local"). Scopes []string // IncludeDeleted includes soft-deleted records in the result. // Used by the inventory sync to detect and propagate deletions from carbide-core. IncludeDeleted bool + + // ProviderOSVisibleAtSiteIDs restricts provider-owned OS visibility when + // InfrastructureProviderID is set together with TenantIDs (tenant admin view). + // Only provider-owned OSes with at least one site association at one of these + // sites are included. If nil, no cross-ownership provider entries are shown + // alongside tenant entries (default). If set to an empty slice, no provider + // entries match. This field is ignored when InfrastructureProviderID is used + // without TenantIDs (provider-only view). + ProviderOSVisibleAtSiteIDs *[]uuid.UUID } var _ bun.BeforeAppendModelHook = (*OperatingSystem)(nil) @@ -452,27 +458,39 @@ func (ossd OperatingSystemSQLDAO) GetAll(ctx context.Context, tx *db.Tx, filter query = query.Where("os.org IN (?)", bun.In(filter.Orgs)) ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "filter.org", filter.Orgs) } - if filter.InfrastructureProviderID != nil { - query = query.Where("os.infrastructure_provider_id = ?", *filter.InfrastructureProviderID) - ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "infrastructure_provider_id", filter.InfrastructureProviderID.String()) - } - // When both TenantIDs and InfrastructureProviderIDs are set, widen the result with OR so that - // tenant admins and provider admins can see all OSes belonging to either their tenant or their - // provider. When only TenantIDs is set it behaves as a plain AND filter (legacy behaviour). + hasTenants := len(filter.TenantIDs) > 0 + hasProvider := filter.InfrastructureProviderID != nil + hasSiteScope := filter.ProviderOSVisibleAtSiteIDs != nil + switch { - case len(filter.TenantIDs) > 0 && len(filter.InfrastructureProviderIDs) > 0: + case hasTenants && hasProvider && hasSiteScope: + // Tenant admin view: own tenant entries + provider entries at accessible sites. + query = query.WhereGroup(" AND ", func(q *bun.SelectQuery) *bun.SelectQuery { + q = q.Where("os.tenant_id IN (?)", bun.In(filter.TenantIDs)) + if len(*filter.ProviderOSVisibleAtSiteIDs) > 0 { + q = q.WhereOr( + "(os.infrastructure_provider_id = ? AND EXISTS (SELECT 1 FROM operating_system_site_association WHERE operating_system_id = os.id AND deleted IS NULL AND site_id IN (?)))", + *filter.InfrastructureProviderID, bun.In(*filter.ProviderOSVisibleAtSiteIDs), + ) + } + return q + }) + ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "tenant_with_provider_at_sites", filter.TenantIDs) + case hasTenants && hasProvider: + // Dual-role view: own tenant entries + own provider entries, no site restriction. query = query.WhereGroup(" AND ", func(q *bun.SelectQuery) *bun.SelectQuery { return q. Where("os.tenant_id IN (?)", bun.In(filter.TenantIDs)). - WhereOr("os.infrastructure_provider_id IN (?)", bun.In(filter.InfrastructureProviderIDs)) + WhereOr("os.infrastructure_provider_id = ?", *filter.InfrastructureProviderID) }) ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "tenant_or_provider", filter.TenantIDs) - case len(filter.TenantIDs) > 0: + case hasTenants: query = query.Where("os.tenant_id IN (?)", bun.In(filter.TenantIDs)) ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "tenant_id", filter.TenantIDs) - case len(filter.InfrastructureProviderIDs) > 0: - query = query.Where("os.infrastructure_provider_id IN (?)", bun.In(filter.InfrastructureProviderIDs)) - ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "infrastructure_provider_ids", filter.InfrastructureProviderIDs) + case hasProvider: + // Provider-only view: only provider-owned entries. + query = query.Where("os.infrastructure_provider_id = ?", *filter.InfrastructureProviderID) + ossd.tracerSpan.SetAttribute(operatingSystemSQLDAOSpan, "infrastructure_provider_id", filter.InfrastructureProviderID.String()) } if filter.OsTypes != nil { query = query.Where("os.type IN (?)", bun.In(filter.OsTypes)) diff --git a/db/pkg/db/model/operatingsystem_test.go b/db/pkg/db/model/operatingsystem_test.go index 769d57144..d406002c1 100644 --- a/db/pkg/db/model/operatingsystem_test.go +++ b/db/pkg/db/model/operatingsystem_test.go @@ -844,7 +844,7 @@ func TestOperatingSystemSQLDAO_GetAll(t *testing.T) { ipID: nil, tenantIDs: nil, osNames: nil, - osTypes: []string{OperatingSystemTypeImage, OperatingSystemTypeIPXE}, + osTypes: []string{OperatingSystemTypeIPXE, OperatingSystemTypeImage}, expectedCount: paginator.DefaultLimit, expectedTotal: db.GetIntPtr(totalCount + testJoinCount), expectedError: false, diff --git a/db/pkg/migrations/20260306120000_ipxe_template.go b/db/pkg/migrations/20260306120000_ipxe_os_and_templates.go similarity index 51% rename from db/pkg/migrations/20260306120000_ipxe_template.go rename to db/pkg/migrations/20260306120000_ipxe_os_and_templates.go index b1e2c5bfd..b4bfc66c8 100644 --- a/db/pkg/migrations/20260306120000_ipxe_template.go +++ b/db/pkg/migrations/20260306120000_ipxe_os_and_templates.go @@ -33,50 +33,101 @@ func init() { handlePanic(terr, "failed to begin transaction") } - // create ipxe_template table - _, err := tx.NewCreateTable().Model((*model.IpxeTemplate)(nil)).IfNotExists().Exec(ctx) - handleError(tx, err) + // ── iPXE Template table ────────────────────────────────────────── - // template column - _, err = tx.Exec("ALTER TABLE ipxe_template ADD COLUMN IF NOT EXISTS template TEXT NOT NULL DEFAULT ''") + _, err := tx.NewCreateTable().Model((*model.IpxeTemplate)(nil)).IfNotExists().Exec(ctx) handleError(tx, err) - // unique constraint to prevent duplicate templates per site _, err = tx.Exec("ALTER TABLE ipxe_template DROP CONSTRAINT IF EXISTS ipxe_template_site_id_name_key") handleError(tx, err) _, err = tx.Exec("ALTER TABLE ipxe_template ADD CONSTRAINT ipxe_template_site_id_name_key UNIQUE (site_id, name)") handleError(tx, err) - // index for site_id _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_site_id_idx") handleError(tx, err) _, err = tx.Exec("CREATE INDEX ipxe_template_site_id_idx ON ipxe_template(site_id)") handleError(tx, err) - // index for name _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_name_idx") handleError(tx, err) _, err = tx.Exec("CREATE INDEX ipxe_template_name_idx ON ipxe_template(name)") handleError(tx, err) - // index for scope _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_scope_idx") handleError(tx, err) _, err = tx.Exec("CREATE INDEX ipxe_template_scope_idx ON ipxe_template(scope)") handleError(tx, err) - // index for created _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_created_idx") handleError(tx, err) _, err = tx.Exec("CREATE INDEX ipxe_template_created_idx ON ipxe_template(created)") handleError(tx, err) - // index for updated _, err = tx.Exec("DROP INDEX IF EXISTS ipxe_template_updated_idx") handleError(tx, err) _, err = tx.Exec("CREATE INDEX ipxe_template_updated_idx ON ipxe_template(updated)") handleError(tx, err) + // ── Operating System: iPXE definition columns ──────────────────── + + _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_id TEXT NULL") + handleError(tx, err) + + _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_parameters JSONB NULL") + handleError(tx, err) + + _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_artifacts JSONB NULL") + handleError(tx, err) + + _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_definition_hash TEXT NULL") + handleError(tx, err) + + // controller_operating_system_id is no longer needed: the primary key is the same on + // both sides, so drop the column and its index if they still exist. + _, err = tx.Exec("DROP INDEX IF EXISTS operating_system_controller_os_id_idx") + handleError(tx, err) + + _, err = tx.Exec("ALTER TABLE operating_system DROP COLUMN IF EXISTS controller_operating_system_id") + handleError(tx, err) + + // ── Operating System: scope column ─────────────────────────────── + + _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_os_scope TEXT NULL") + handleError(tx, err) + + // ── Operating System Site Association: controller state ────────── + + _, err = tx.Exec("ALTER TABLE operating_system_site_association ADD COLUMN IF NOT EXISTS controller_state TEXT NULL") + handleError(tx, err) + + // ── Backfill ipxe_os_scope for existing iPXE-type OS records ──── + // + // Tenant-owned raw iPXE → Global (preserves legacy behavior: tenant + // can use it for any Instance at any accessible site). + // Provider-owned iPXE (from carbide-core inventory) → Local (single + // site, bidirectional sync). + // Image-type OS entries are left as NULL since scope does not apply. + + _, err = tx.Exec(` + UPDATE operating_system + SET ipxe_os_scope = 'Global' + WHERE ipxe_os_scope IS NULL + AND type = 'iPXE' + AND tenant_id IS NOT NULL + AND deleted IS NULL + `) + handleError(tx, err) + + _, err = tx.Exec(` + UPDATE operating_system + SET ipxe_os_scope = 'Local' + WHERE ipxe_os_scope IS NULL + AND type IN ('iPXE', 'Templated iPXE') + AND tenant_id IS NULL + AND deleted IS NULL + `) + handleError(tx, err) + terr = tx.Commit() if terr != nil { handlePanic(terr, "failed to commit transaction") diff --git a/db/pkg/migrations/20260310100000_os_definition.go b/db/pkg/migrations/20260310100000_os_definition.go deleted file mode 100644 index 6188313d9..000000000 --- a/db/pkg/migrations/20260310100000_os_definition.go +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package migrations - -import ( - "context" - "database/sql" - "fmt" - - "github.com/uptrace/bun" -) - -func init() { - Migrations.MustRegister(func(ctx context.Context, db *bun.DB) error { - tx, terr := db.BeginTx(ctx, &sql.TxOptions{}) - if terr != nil { - handlePanic(terr, "failed to begin transaction") - } - - // Add iPXE definition columns to the operating_system table. - // These fields are populated for OS definitions synced from carbide-core (type = iPXE). - // The primary key (id) is shared between carbide-core and carbide-rest: both sides use - // the same UUID, enforced by the inventory sync workflows. - - _, err := tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_id TEXT NULL") - handleError(tx, err) - - _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_parameters JSONB NULL") - handleError(tx, err) - - _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_artifacts JSONB NULL") - handleError(tx, err) - - _, err = tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_template_definition_hash TEXT NULL") - handleError(tx, err) - - // controller_operating_system_id is no longer needed: the primary key is the same on - // both sides, so drop the column and its index if they still exist. - _, err = tx.Exec("DROP INDEX IF EXISTS operating_system_controller_os_id_idx") - handleError(tx, err) - - _, err = tx.Exec("ALTER TABLE operating_system DROP COLUMN IF EXISTS controller_operating_system_id") - handleError(tx, err) - - terr = tx.Commit() - if terr != nil { - handlePanic(terr, "failed to commit transaction") - } - - fmt.Print(" [up migration] ") - return nil - }, func(ctx context.Context, db *bun.DB) error { - fmt.Print(" [down migration] No action taken") - return nil - }) -} diff --git a/db/pkg/migrations/20260320100000_os_scope.go b/db/pkg/migrations/20260320100000_os_scope.go deleted file mode 100644 index 268156117..000000000 --- a/db/pkg/migrations/20260320100000_os_scope.go +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package migrations - -import ( - "context" - "database/sql" - "fmt" - - "github.com/uptrace/bun" -) - -func init() { - Migrations.MustRegister(func(ctx context.Context, db *bun.DB) error { - tx, terr := db.BeginTx(ctx, &sql.TxOptions{}) - if terr != nil { - handlePanic(terr, "failed to begin transaction") - } - - // Add scope column to operating_system. - // Controls the synchronization direction for iPXE-based OSes between carbide-rest and carbide-core: - // local (default) – bidirectional, most-recently-updated wins - // global – carbide-rest is source of truth for all provider sites - // limited – carbide-rest is source of truth for a fixed list of sites - _, err := tx.Exec("ALTER TABLE operating_system ADD COLUMN IF NOT EXISTS ipxe_os_scope TEXT NULL") - handleError(tx, err) - - terr = tx.Commit() - if terr != nil { - handlePanic(terr, "failed to commit transaction") - } - - fmt.Print(" [up migration] ") - return nil - }, func(ctx context.Context, db *bun.DB) error { - fmt.Print(" [down migration] No action taken") - return nil - }) -} diff --git a/db/pkg/migrations/20260321100000_ossa_core_status.go b/db/pkg/migrations/20260321100000_ossa_core_status.go deleted file mode 100644 index c0ad2d129..000000000 --- a/db/pkg/migrations/20260321100000_ossa_core_status.go +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package migrations - -import ( - "context" - "database/sql" - "fmt" - - "github.com/uptrace/bun" -) - -func init() { - Migrations.MustRegister(func(ctx context.Context, db *bun.DB) error { - tx, terr := db.BeginTx(ctx, &sql.TxOptions{}) - if terr != nil { - handlePanic(terr, "failed to begin transaction") - } - - // Stores the per-site operational status reported by carbide-core (TenantState). - // Used by global/limited-scoped OSes to compute an aggregate status: - // all sites READY -> OS status = READY - // any site not READY -> OS status = PROVISIONING - _, err := tx.Exec("ALTER TABLE operating_system_site_association ADD COLUMN IF NOT EXISTS controller_state TEXT NULL") - handleError(tx, err) - - terr = tx.Commit() - if terr != nil { - handlePanic(terr, "failed to commit transaction") - } - - fmt.Print(" [up migration] ") - return nil - }, func(ctx context.Context, db *bun.DB) error { - fmt.Print(" [down migration] No action taken") - return nil - }) -} diff --git a/docs/index.html b/docs/index.html index f9e785443..ea109115f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -444,7 +444,7 @@ -

NCX Infra Controller REST API (1.4.0)

Download OpenAPI specification:

License: Apache-2.0

NCX Infra Controller REST API (1.3.0)

Download OpenAPI specification:

License: Apache-2.0

NCX Infra Controller REST API is the centralized RESTful gateway to access NCX Infra Controller service

NCX Infra Controller REST API allows users to create and manage resources e.g. VPC, Subnets, Instances across all connected NCX Infra Controller datacenters, also referred to as Sites.

@@ -1634,8 +1634,6 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Legacy attribute, contains the same value as ID

networkVirtualizationType
string
Enum: "ETHERNET_VIRTUALIZER" "FNN"

Network virtualization type of the VPC

-
routingProfile
string or null [ 3 .. 64 ] characters

Routing profile type for the VPC. Populated when Site has Native Networking enabled and network virtualization type is FNN.

requestedVni
integer or null [ 1 .. 65535 ]

Explicitly requested VNI for the VPC if one was requested at creation time

vni
integer or null [ 1 .. 65535 ]
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

ID of the Site where the VPC should be created

networkVirtualizationType
string or null
Enum: "ETHERNET_VIRTUALIZER" "FNN"

Network virtualization type of the VPC. If no value is specified, then defaults to FNN if Site has native networking enabled, or ETHERNET_VIRTUALIZER if native networking is disabled

-
routingProfile
string or null [ 3 .. 64 ] characters

Specify routing profile for the VPC. Only supported when networkVirtualizationType is set to FNN, or when networkVirtualizationType is omitted and Site has Native Networking enabled. Requires Tenant to have elevated privilege. Current accepted values are privileged-internal, internal, and external.

networkSecurityGroupId
string or null

ID of the Network Security Group to attach to the VPC

vni
integer or null [ 1 .. 65535 ]
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Legacy attribute, contains the same value as ID

networkVirtualizationType
string
Enum: "ETHERNET_VIRTUALIZER" "FNN"

Network virtualization type of the VPC

-
routingProfile
string or null [ 3 .. 64 ] characters

Routing profile type for the VPC. Populated when Site has Native Networking enabled and network virtualization type is FNN.

requestedVni
integer or null [ 1 .. 65535 ]

Explicitly requested VNI for the VPC if one was requested at creation time

vni
integer or null [ 1 .. 65535 ]
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Legacy attribute, contains the same value as ID

networkVirtualizationType
string
Enum: "ETHERNET_VIRTUALIZER" "FNN"

Network virtualization type of the VPC

-
routingProfile
string or null [ 3 .. 64 ] characters

Routing profile type for the VPC. Populated when Site has Native Networking enabled and network virtualization type is FNN.

requestedVni
integer or null [ 1 .. 65535 ]

Explicitly requested VNI for the VPC if one was requested at creation time

vni
integer or null [ 1 .. 65535 ]
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Legacy attribute, contains the same value as ID

networkVirtualizationType
string
Enum: "ETHERNET_VIRTUALIZER" "FNN"

Network virtualization type of the VPC

-
routingProfile
string or null [ 3 .. 64 ] characters

Routing profile type for the VPC. Populated when Site has Native Networking enabled and network virtualization type is FNN.

requestedVni
integer or null [ 1 .. 65535 ]

Explicitly requested VNI for the VPC if one was requested at creation time

vni
integer or null [ 1 .. 65535 ]
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Legacy attribute, contains the same value as ID

networkVirtualizationType
string
Enum: "ETHERNET_VIRTUALIZER" "FNN"

Network virtualization type of the VPC

-
routingProfile
string or null [ 3 .. 64 ] characters

Routing profile type for the VPC. Populated when Site has Native Networking enabled and network virtualization type is FNN.

requestedVni
integer or null [ 1 .. 65535 ]

Explicitly requested VNI for the VPC if one was requested at creation time

vni
integer or null [ 1 .. 65535 ]
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Human readable name for the VPC Prefix

vpcId
required
string <uuid>

ID of the VPC

-
ipBlockId
required
string <uuid>

ID of the IP Block to allocate the VPC Prefix from

-
prefixLength
required
integer [ 8 .. 31 ]
ipBlockId
string <uuid>
prefixLength
required
integer [ 8 .. 31 ]

Prefix length for the VPC Prefix. Valid range is 8 to 31, and max usable value depends on prefix length of parent IP Block.

Responses

bmcMacAddress
required
string^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$

MAC address of the Expected Machine's BMC (Baseboard Management Controller)

-
defaultBmcUsername
string or null <= 20 characters
bmcUsername
string or null <= 20 characters

Username for accessing the Expected Machine's BMC

-
defaultBmcPassword
string or null <= 50 characters
bmcPassword
string or null <= 50 characters

Password for accessing the Expected Machine's BMC

chassisSerialNumber
required
string [ 1 .. 100 ] characters

Serial number of the Expected Machine's chassis

@@ -2502,7 +2488,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Request samples

Content type
application/json
{
  • "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "bmcMacAddress": "00:1A:2B:3C:4D:5E",
  • "defaultBmcUsername": "admin",
  • "defaultBmcPassword": "password123",
  • "chassisSerialNumber": "CHASSIS-12345",
  • "fallbackDPUSerialNumbers": [
    ],
  • "labels": {
    }
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "bmcMacAddress": "00:1A:2B:3C:4D:5E",
  • "chassisSerialNumber": "CHASSIS-12345",
  • "fallbackDPUSerialNumbers": [
    ],
  • "skuId": "lenovo.sr650v2.cpu.1",
  • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
  • "rackId": "rack-01",
  • "manufacturer": "Lenovo",
  • "labels": {
    },
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Retrieve all Expected Machines

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/expected-machine

Request samples

Content type
application/json
{
  • "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "bmcMacAddress": "00:1A:2B:3C:4D:5E",
  • "bmcUsername": "admin",
  • "bmcPassword": "password123",
  • "chassisSerialNumber": "CHASSIS-12345",
  • "fallbackDPUSerialNumbers": [
    ],
  • "labels": {
    }
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "bmcMacAddress": "00:1A:2B:3C:4D:5E",
  • "chassisSerialNumber": "CHASSIS-12345",
  • "fallbackDPUSerialNumbers": [
    ],
  • "skuId": "lenovo.sr650v2.cpu.1",
  • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
  • "rackId": "rack-01",
  • "manufacturer": "Lenovo",
  • "labels": {
    },
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Retrieve all Expected Machines

Retrieve all Expected Machines.

@@ -2658,9 +2644,9 @@

Typical API Call Flow for Tenant

Required for batch update operations.

bmcMacAddress
string or null^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$

MAC address of the Expected Machine's BMC (Baseboard Management Controller)

-
defaultBmcUsername
string or null <= 20 characters
bmcUsername
string or null <= 20 characters

Username for accessing the Expected Machine's BMC

-
defaultBmcPassword
string or null <= 50 characters
bmcPassword
string or null <= 50 characters

Password for accessing the Expected Machine's BMC

chassisSerialNumber
string or null [ 1 .. 100 ] characters

Serial number of the Expected Machine's chassis

@@ -2740,7 +2726,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when requested object is not found

Request samples

Content type
application/json
{
  • "defaultBmcUsername": "newadmin",
  • "defaultBmcPassword": "newpassword123",
  • "chassisSerialNumber": "CHASSIS-54321",
  • "labels": {
    }
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "bmcMacAddress": "00:1A:2B:3C:4D:5E",
  • "chassisSerialNumber": "CHASSIS-12345",
  • "fallbackDPUSerialNumbers": [
    ],
  • "skuId": "lenovo.sr650v2.cpu.1",
  • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
  • "rackId": "rack-01",
  • "manufacturer": "Lenovo",
  • "labels": {
    },
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Delete Expected Machine

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/expected-machine/{expectedMachineId}

Request samples

Content type
application/json
{
  • "bmcUsername": "newadmin",
  • "bmcPassword": "newpassword123",
  • "chassisSerialNumber": "CHASSIS-54321",
  • "labels": {
    }
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "bmcMacAddress": "00:1A:2B:3C:4D:5E",
  • "chassisSerialNumber": "CHASSIS-12345",
  • "fallbackDPUSerialNumbers": [
    ],
  • "skuId": "lenovo.sr650v2.cpu.1",
  • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
  • "rackId": "rack-01",
  • "manufacturer": "Lenovo",
  • "labels": {
    },
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Delete Expected Machine

Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

ID of the site the Expected Machine belongs to

bmcMacAddress
required
string^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$

MAC address of the Expected Machine's BMC (Baseboard Management Controller)

-
defaultBmcUsername
string or null <= 20 characters
bmcUsername
string or null <= 20 characters

Username for accessing the Expected Machine's BMC

-
defaultBmcPassword
string or null <= 50 characters
bmcPassword
string or null <= 50 characters

Password for accessing the Expected Machine's BMC

chassisSerialNumber
required
string [ 1 .. 100 ] characters

Serial number of the Expected Machine's chassis

@@ -2858,7 +2844,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Request samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Response samples

Content type
application/json
[
  • {
    }
]

Batch Update Expected Machines

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/expected-machine/batch

Request samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Response samples

Content type
application/json
[
  • {
    }
]

Batch Update Expected Machines

Typical API Call Flow for Tenant

Required for batch update operations.

bmcMacAddress
string or null^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$

MAC address of the Expected Machine's BMC (Baseboard Management Controller)

-
defaultBmcUsername
string or null <= 20 characters
bmcUsername
string or null <= 20 characters

Username for accessing the Expected Machine's BMC

-
defaultBmcPassword
string or null <= 50 characters
bmcPassword
string or null <= 50 characters

Password for accessing the Expected Machine's BMC

chassisSerialNumber
string or null [ 1 .. 100 ] characters

Serial number of the Expected Machine's chassis

@@ -2962,7 +2948,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

One or more Expected Machines not found

Request samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Response samples

Content type
application/json
[
  • {
    }
]

Expected Power Shelf

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/expected-machine/batch

Request samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Response samples

Content type
application/json
[
  • {
    }
]

Expected Power Shelf

Expected Power Shelf identifies a Power Shelf that is expected to be discovered at a Site. Infrastructure Providers can pre-register Expected Power Shelves using BMC credentials and serial numbers to help with Power Shelf discovery and ingestion.

@@ -4078,7 +4064,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Name of the Org

query Parameters
siteId
string

Filter Operating Systems by Site ID. Can be specified multiple times to filter on more than one ID.

-
type
string
Enum: "Image" "iPXE"
type
string
Enum: "iPXE" "Templated iPXE" "Image"

Filter Operating Systems by Type

status
string

Filter Operating Systems by Status. Can be specified multiple times to filter on more than one status.

@@ -4106,7 +4092,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Specified if a Provider owns the Operating System

tenantId
string or null <uuid>

Specified if a Tenant owns the Operating System

-
type
string
Enum: "iPXE" "Image"
type
string
Enum: "iPXE" "Templated iPXE" "Image"

Type of the Operating System

imageUrl
string or null <uri>

Original URL from where the Operating System image can be retrieved

@@ -4122,8 +4108,16 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Root filesystem UUID, only applicable for image based Operating System

rootFsLabel
string or null

Root filesystem label, only applicable for image based Operating System

-
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based Operating System

+
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based Operating System. Mutually exclusive with ipxeTemplateId

+
ipxeTemplateId
string or null

Name of the iPXE template used by this Operating System. Mutually exclusive with ipxeScript

+
Array of objects (IpxeTemplateParameter)

Parameters passed to the iPXE template for variable substitution

+
Array of objects (IpxeTemplateArtifact)

Artifacts (kernel, initrd, etc.) for the iPXE OS definition

+
scope
string or null
Enum: "Local" "Global" "Limited"

Synchronization scope for iPXE Operating Systems; nil for Image OS. Local: single site, bidirectional sync (provider-owned, originating from carbide-core). Global: rest-to-core for all owner sites. Limited: rest-to-core for specific sites

userData
string or null

User data for the Operating System

isCloudInit
boolean
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Response samples

Content type
application/json
Example
[
  • {
    }
]

Create Operating System

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/operating-system

Response samples

Content type
application/json
Example
[
  • {
    }
]

Create Operating System

Create an Operating System for the org.

-

Either infrastructureProviderId or tenantId must be provided in request data. Both cannot be provided at the same time.

+

Either infrastructureProviderId or tenantId must be provided in request data. Both cannot be provided at the same time. For iPXE template-based OS definitions, Provider Admin may omit tenantId and have ownership resolved automatically.

If infrastructureProviderId is provided in request data, then org must have an Infrastructure Provider entity and its ID should match the query param value. User must have FORGE_PROVIDER_ADMIN role.

If tenantId is provided in request data, then org must have a Tenant entity and its ID should match the query param value. User must have FORGE_TENANT_ADMIN role.

-

Only Tenants are allowed to create Operating System for MVP.

+

Tenants can create iPXE script-based or Image-based Operating Systems. Provider Admins can create iPXE template-based Operating Systems (using ipxeTemplateId).

+

ipxeScript, ipxeTemplateId, and imageUrl are mutually exclusive — only one may be specified. When ipxeTemplateId is used, ipxeTemplateParameters and ipxeTemplateArtifacts can be provided to configure the template.

+

The scope field is required for Templated iPXE OSes and controls synchronization direction: Global (rest-to-core for all sites) or Limited (rest-to-core for sites in siteIds). Local scope cannot be specified at creation — Local Operating Systems originate in carbide-core and are synced to rest via inventory. Must not be specified for other OS types.

Authorizations:
JWTBearerToken
path Parameters
org
required
string

Name of the Org

Request Body schema: application/json
name
required
string [ 2 .. 256 ] characters
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Deprecated: Infrastructure Provider is now inferred from org membership.

tenantId
string or null <uuid>
Deprecated

Deprecated: Tenant is now inferred from org membership.

-
siteIds
Array of strings <uuid> [ items <uuid > ]

Specified only one Site if an Operating System is Image based, more than one Site is not supported"

-
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based OS. Cannot be specified if imageUrl is specified

+
siteIds
Array of strings <uuid> [ items <uuid > ]

For Image-based OS, specify exactly one Site. For limited-scope Templated iPXE OS, specify the target provider sites

+
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based OS. Mutually exclusive with ipxeTemplateId and imageUrl

+
ipxeTemplateId
string or null

Name of an iPXE template to use. Mutually exclusive with ipxeScript and imageUrl. Only Provider Admin can create template-based OSes

+
Array of objects (IpxeTemplateParameter)

Parameters to pass to the iPXE template for variable substitution

+
Array of objects (IpxeTemplateArtifact)

Artifacts (kernel, initrd, etc.) required for the iPXE OS definition

+
scope
string or null
Enum: "Global" "Limited"

Synchronization scope. Required for Templated iPXE OS created by Provider Admin (when ipxeTemplateId is specified); must not be set for other types. Raw iPXE OS scope is auto-set to Global. Image OS scope is always nil

imageUrl
string or null <uri>

Original URL from where the Operating System image can be retreived from, required for image based OS. Cannot be specified if ipxeScript is specified

imageSha
string or null
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Specified if a Provider owns the Operating System

tenantId
string or null <uuid>

Specified if a Tenant owns the Operating System

-
type
string
Enum: "iPXE" "Image"
type
string
Enum: "iPXE" "Templated iPXE" "Image"

Type of the Operating System

imageUrl
string or null <uri>

Original URL from where the Operating System image can be retrieved

@@ -4224,8 +4230,16 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Root filesystem UUID, only applicable for image based Operating System

rootFsLabel
string or null

Root filesystem label, only applicable for image based Operating System

-
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based Operating System

+
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based Operating System. Mutually exclusive with ipxeTemplateId

+
ipxeTemplateId
string or null

Name of the iPXE template used by this Operating System. Mutually exclusive with ipxeScript

+
Array of objects (IpxeTemplateParameter)

Parameters passed to the iPXE template for variable substitution

+
Array of objects (IpxeTemplateArtifact)

Artifacts (kernel, initrd, etc.) for the iPXE OS definition

+
scope
string or null
Enum: "Local" "Global" "Limited"

Synchronization scope for iPXE Operating Systems; nil for Image OS. Local: single site, bidirectional sync (provider-owned, originating from carbide-core). Global: rest-to-core for all owner sites. Limited: rest-to-core for specific sites

userData
string or null

User data for the Operating System

isCloudInit
boolean
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Request samples

Content type
application/json
Example
{
  • "name": "ubuntu-official-22.04",
  • "description": "Official Ubuntu 22.04",
  • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\n shell",
  • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
  • "isCloudInit": true,
  • "phoneHomeEnabled": true,
  • "allowOverride": false
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "ubuntu-22.04",
  • "description": "Ubuntu 22.04",
  • "infrastructureProviderId": null,
  • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "type": "iPXE",
  • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\n shell",
  • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
  • "isCloudInit": true,
  • "phoneHomeEnabled": false,
  • "allowOverride": false,
  • "imageAuthToken": null,
  • "imageAuthType": null,
  • "imageDisk": null,
  • "imageSha": null,
  • "imageUrl": null,
  • "rootFsId": null,
  • "rootFsLabel": null,
  • "siteAssociations": [ ],
  • "isActive": true,
  • "deactivationNote": null,
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Retrieve Operating System

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/operating-system

Request samples

Content type
application/json
Example
{
  • "name": "ubuntu-official-22.04",
  • "description": "Official Ubuntu 22.04",
  • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\n shell",
  • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
  • "isCloudInit": true,
  • "phoneHomeEnabled": true,
  • "allowOverride": false
}

Response samples

Content type
application/json
Example
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "ubuntu-22.04",
  • "description": "Ubuntu 22.04",
  • "infrastructureProviderId": null,
  • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "type": "iPXE",
  • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\n shell",
  • "ipxeTemplateId": null,
  • "ipxeTemplateParameters": [ ],
  • "ipxeTemplateArtifacts": [ ],
  • "scope": "Global",
  • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
  • "isCloudInit": true,
  • "phoneHomeEnabled": false,
  • "allowOverride": false,
  • "imageAuthToken": null,
  • "imageAuthType": null,
  • "imageDisk": null,
  • "imageSha": null,
  • "imageUrl": null,
  • "rootFsId": null,
  • "rootFsLabel": null,
  • "siteAssociations": [ ],
  • "isActive": true,
  • "deactivationNote": null,
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Retrieve Operating System

Get an Operating System by ID

@@ -4278,7 +4292,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Specified if a Provider owns the Operating System

tenantId
string or null <uuid>

Specified if a Tenant owns the Operating System

-
type
string
Enum: "iPXE" "Image"
type
string
Enum: "iPXE" "Templated iPXE" "Image"

Type of the Operating System

imageUrl
string or null <uri>

Original URL from where the Operating System image can be retrieved

@@ -4294,8 +4308,16 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Root filesystem UUID, only applicable for image based Operating System

rootFsLabel
string or null

Root filesystem label, only applicable for image based Operating System

-
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based Operating System

+
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based Operating System. Mutually exclusive with ipxeTemplateId

+
ipxeTemplateId
string or null

Name of the iPXE template used by this Operating System. Mutually exclusive with ipxeScript

+
Array of objects (IpxeTemplateParameter)

Parameters passed to the iPXE template for variable substitution

+
Array of objects (IpxeTemplateArtifact)

Artifacts (kernel, initrd, etc.) for the iPXE OS definition

+
scope
string or null
Enum: "Local" "Global" "Limited"

Synchronization scope for iPXE Operating Systems; nil for Image OS. Local: single site, bidirectional sync (provider-owned, originating from carbide-core). Global: rest-to-core for all owner sites. Limited: rest-to-core for specific sites

userData
string or null

User data for the Operating System

isCloudInit
boolean
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Response samples

Content type
application/json
Example
{
  • "id": "42b0f982-5c61-4d2f-a018-41ece61f4641",
  • "name": "debian-12-amd64",
  • "description": "Official Debian 12 for AMD/Intel",
  • "infrastructureProviderId": null,
  • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "type": "Image",
  • "imageSha": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae",
  • "imageAuthType": "Bearer",
  • "imageAuthToken": "acbd18db4cc2f85cedef654fccc4a4d8",
  • "imageDisk": "/dev/sda",
  • "rootFsId": "6c2ac315-3040-4728-94eb-b66d320206c1",
  • "rootFsLabel": null,
  • "ipxeScript": null,
  • "userData": null,
  • "isCloudInit": true,
  • "phoneHomeEnabled": false,
  • "allowOverride": false,
  • "siteAssociations": [
    ],
  • "isActive": true,
  • "deactivationNote": null,
  • "status": "Syncing",
  • "statusHistory": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Delete Operating System

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/operating-system/{operatingSystemId}

Response samples

Content type
application/json
Example
{
  • "id": "42b0f982-5c61-4d2f-a018-41ece61f4641",
  • "name": "debian-12-amd64",
  • "description": "Official Debian 12 for AMD/Intel",
  • "infrastructureProviderId": null,
  • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "type": "Image",
  • "imageSha": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae",
  • "imageAuthType": "Bearer",
  • "imageAuthToken": "acbd18db4cc2f85cedef654fccc4a4d8",
  • "imageDisk": "/dev/sda",
  • "rootFsId": "6c2ac315-3040-4728-94eb-b66d320206c1",
  • "rootFsLabel": null,
  • "ipxeScript": null,
  • "ipxeTemplateId": null,
  • "ipxeTemplateParameters": [ ],
  • "ipxeTemplateArtifacts": [ ],
  • "scope": null,
  • "userData": null,
  • "isCloudInit": true,
  • "phoneHomeEnabled": false,
  • "allowOverride": false,
  • "siteAssociations": [
    ],
  • "isActive": true,
  • "deactivationNote": null,
  • "status": "Syncing",
  • "statusHistory": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Delete Operating System

Delete an Operating System by ID

@@ -4341,9 +4363,11 @@

Typical API Call Flow for Tenant

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/operating-system/{operatingSystemId}

Response samples

Content type
application/json
{
  • "source": "carbide",
  • "message": "User is not allowed to perform this action",
  • "data": null
}

Update Operating System

Update an Operating System by ID

If the Operating System has infrastructureProviderId set, then org must have an Infrastructure Provider entity and its ID should match the Operating System Infrastructure Provider ID. User must have FORGE_PROVIDER_ADMIN authorization role. Provider must own the Operating System.

If the Operating System has tenantId set, then org must have a Tenant entity and its ID should match the Operating System Tenant ID. User must have FORGE_TENANT_ADMIN role. Tenant must own the Operating System.

+

The type and scope of an Operating System cannot be changed after creation.

Authorizations:
JWTBearerToken
path Parameters
org
required
string

Name of the Org

operatingSystemId
required
string
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Name of the Operating System

description
string or null

Optional description of the Operating System

-
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based OS. Cannot be specified if imageUrl is specified

+
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based OS. Mutually exclusive with ipxeTemplateId and imageUrl

+
ipxeTemplateId
string or null

Name of an iPXE template to use. Mutually exclusive with ipxeScript and imageUrl

+
Array of objects (IpxeTemplateParameter)

Parameters to pass to the iPXE template. If omitted the existing parameters are kept; if set to an empty array the parameters are cleared

+
Array of objects (IpxeTemplateArtifact)

Artifacts for the iPXE OS definition. If omitted the existing artifacts are kept; if set to an empty array the artifacts are cleared

imageUrl
string or null <uri>

Original URL from where the Operating System image can be retreived from, required for image based OS

imageSha
string or null
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Specified if a Provider owns the Operating System

tenantId
string or null <uuid>

Specified if a Tenant owns the Operating System

-
type
string
Enum: "iPXE" "Image"
type
string
Enum: "iPXE" "Templated iPXE" "Image"

Type of the Operating System

imageUrl
string or null <uri>

Original URL from where the Operating System image can be retrieved

@@ -4408,8 +4438,16 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

Root filesystem UUID, only applicable for image based Operating System

rootFsLabel
string or null

Root filesystem label, only applicable for image based Operating System

-
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based Operating System

+
ipxeScript
string or null

iPXE script or URL, only applicable for iPXE based Operating System. Mutually exclusive with ipxeTemplateId

+
ipxeTemplateId
string or null

Name of the iPXE template used by this Operating System. Mutually exclusive with ipxeScript

+
Array of objects (IpxeTemplateParameter)

Parameters passed to the iPXE template for variable substitution

+
Array of objects (IpxeTemplateArtifact)

Artifacts (kernel, initrd, etc.) for the iPXE OS definition

+
scope
string or null
Enum: "Local" "Global" "Limited"

Synchronization scope for iPXE Operating Systems; nil for Image OS. Local: single site, bidirectional sync (provider-owned, originating from carbide-core). Global: rest-to-core for all owner sites. Limited: rest-to-core for specific sites

userData
string or null

User data for the Operating System

isCloudInit
boolean
Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Request samples

Content type
application/json
{
  • "name": "ubuntu-22.04-lts",
  • "description": "Ubuntu 22.04 LTS",
  • "allowOverride": true
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "ubuntu-22.04-lts",
  • "description": "Ubuntu 22.04 LTS",
  • "infrastructureProviderId": null,
  • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "type": "iPXE",
  • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\n shell",
  • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
  • "isCloudInit": true,
  • "allowOverride": true,
  • "phoneHomeEnabled": true,
  • "imageAuthToken": null,
  • "imageAuthType": null,
  • "imageDisk": null,
  • "imageSha": null,
  • "imageUrl": null,
  • "rootFsId": null,
  • "rootFsLabel": null,
  • "siteAssociations": [ ],
  • "isActive": true,
  • "deactivationNote": null,
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Instance Type

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/operating-system/{operatingSystemId}

Request samples

Content type
application/json
{
  • "name": "ubuntu-22.04-lts",
  • "description": "Ubuntu 22.04 LTS",
  • "allowOverride": true
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "ubuntu-22.04-lts",
  • "description": "Ubuntu 22.04 LTS",
  • "infrastructureProviderId": null,
  • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
  • "type": "iPXE",
  • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\n shell",
  • "ipxeTemplateId": null,
  • "ipxeTemplateParameters": [ ],
  • "ipxeTemplateArtifacts": [ ],
  • "scope": "Global",
  • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
  • "isCloudInit": true,
  • "allowOverride": true,
  • "phoneHomeEnabled": true,
  • "imageAuthToken": null,
  • "imageAuthType": null,
  • "imageDisk": null,
  • "imageSha": null,
  • "imageUrl": null,
  • "rootFsId": null,
  • "rootFsLabel": null,
  • "siteAssociations": [ ],
  • "isActive": true,
  • "deactivationNote": null,
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

iPXE Template

iPXE Templates are boot script templates propagated from bare-metal-manager-core. They are read-only in the REST API.

+

Templates define the iPXE boot script structure with variable placeholders for parameters and artifact references. They can be used when creating iPXE template-based Operating System definitions.

+

Retrieve all iPXE Templates

Retrieve all iPXE templates propagated from bare-metal-manager-core. Templates are propagated one-way from core and are read-only.

+

The siteId query parameter is optional and may be repeated to filter by one or more sites. When omitted, the caller receives templates for every site they are authorized to see:

+
    +
  • Provider Admins/Viewers: templates for every site owned by their infrastructure provider.
  • +
  • Tenant Admins: templates for every site the tenant is associated with via a Tenant/Site association.
  • +
+

When siteId is provided, every requested site must be authorized for the caller.

+

Only Public-scoped templates are ever propagated from bare-metal-manager-core into this service, so no scope filter is offered.

+
Authorizations:
JWTBearerToken
path Parameters
org
required
string

Name of the Org

+
query Parameters
siteId
Array of strings <uuid> [ items <uuid > ]

Optional ID(s) of one or more Sites whose templates to retrieve. Repeat the parameter to request multiple sites. When omitted, templates are returned for every site the caller is authorized to see.

+
pageNumber
integer >= 1
Default: 1
Example: pageNumber=1

Page number for pagination query

+
pageSize
integer [ 1 .. 100 ]
Example: pageSize=20

Page size for pagination query

+
orderBy
string
Enum: "NAME_ASC" "NAME_DESC" "CREATED_ASC" "CREATED_DESC" "UPDATED_ASC" "UPDATED_DESC"

Ordering for pagination query

+

Responses

Response Headers
X-Pagination
string
Example: "{\"pageNumber\":1,\"pageSize\":20,\"total\":5,\"orderBy\": \"CREATED_DESC\"}"

Pagination result in JSON format

+
Response Schema: application/json
Array
id
string <uuid>

Stable template UUID from core, consistent across all sites

+
siteId
string <uuid>

ID of the Site this template was retrieved from

+
name
string

Unique template name (e.g. ubuntu-autoinstall, kernel-initrd)

+
template
string

Raw iPXE script content with template variables

+
requiredParams
Array of strings

Parameters that must be provided to render the template

+
reservedParams
Array of strings

Parameters reserved by the template that cannot be user-supplied

+
requiredArtifacts
Array of strings

Artifact names (e.g. kernel, initrd) required for the template

+
scope
string
Enum: "Internal" "Public"

Visibility of this template: Internal or Public

+
created
string <date-time>

Date/time when the template was created

+
updated
string <date-time>

Date/time when the template was last updated

+

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve iPXE Template

Retrieve an iPXE template by ID.

+

Provider Admins/Viewers can access templates for their provider's sites. Tenant Admins can access templates for sites the tenant is associated with via a Tenant/Site association.

+
Authorizations:
JWTBearerToken
path Parameters
org
required
string

Name of the Org

+
id
required
string <uuid>

ID of the iPXE Template

+

Responses

Response Schema: application/json
id
string <uuid>

Stable template UUID from core, consistent across all sites

+
siteId
string <uuid>

ID of the Site this template was retrieved from

+
name
string

Unique template name (e.g. ubuntu-autoinstall, kernel-initrd)

+
template
string

Raw iPXE script content with template variables

+
requiredParams
Array of strings

Parameters that must be provided to render the template

+
reservedParams
Array of strings

Parameters reserved by the template that cannot be user-supplied

+
requiredArtifacts
Array of strings

Artifact names (e.g. kernel, initrd) required for the template

+
scope
string
Enum: "Internal" "Public"

Visibility of this template: Internal or Public

+
created
string <date-time>

Date/time when the template was created

+
updated
string <date-time>

Date/time when the template was last updated

+

Response samples

Content type
application/json
{
  • "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  • "siteId": "4b36152c-f48d-4bcc-a722-0fd8e2ad209a",
  • "name": "ubuntu-autoinstall",
  • "template": "#!ipxe\nkernel {{.kernel}} autoinstall ds=nocloud-net\ninitrd {{.initrd}}\nboot || imgfree\nshell",
  • "requiredParams": [
    ],
  • "reservedParams": [
    ],
  • "requiredArtifacts": [
    ],
  • "scope": "Public",
  • "created": "2025-10-15T10:30:00Z",
  • "updated": "2025-10-15T10:30:00Z"
}

Instance Type

Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Response samples

Content type
application/json
Example
[
  • {
    }
]

Create an Instance Type

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/type

Response samples

Content type
application/json
Example
[
  • {
    }
]

Create an Instance Type

Create an Instance Type for Infrastructure Provider.

Org must have an Infrastructure Provider entity. User must have FORGE_PROVIDER_ADMIN authorization role.

@@ -4516,7 +4650,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Request samples

Content type
application/json
Example
{
  • "name": "x3.large",
  • "description": "Part of X family, the X3 Large features increased compute power",
  • "siteId": "8d97fa69-9199-49ff-bcf3-168c62d3874e",
  • "labels": {
    },
  • "machineCapabilities": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "x3.large",
  • "description": "Part of X family, the X3 Large features increased compute power",
  • "infrastructureProviderId": "5f2cc306-76e9-4fca-9186-950c9ef9a74e",
  • "siteId": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "labels": {
    },
  • "machineCapabilities": [
    ],
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "deprecations": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Retrieve an Instance Type

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/type

Request samples

Content type
application/json
Example
{
  • "name": "x3.large",
  • "description": "Part of X family, the X3 Large features increased compute power",
  • "siteId": "8d97fa69-9199-49ff-bcf3-168c62d3874e",
  • "labels": {
    },
  • "machineCapabilities": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "x3.large",
  • "description": "Part of X family, the X3 Large features increased compute power",
  • "infrastructureProviderId": "5f2cc306-76e9-4fca-9186-950c9ef9a74e",
  • "siteId": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "labels": {
    },
  • "machineCapabilities": [
    ],
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "deprecations": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Retrieve an Instance Type

Get an Instance Type by ID.

@@ -4544,7 +4678,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "x3.large",
  • "description": "Part of X family, the X3 Large features increased compute power",
  • "infrastructureProviderId": "5f2cc306-76e9-4fca-9186-950c9ef9a74e",
  • "siteId": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "labels": {
    },
  • "machineCapabilities": [
    ],
  • "allocationStats": {
    },
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "deprecations": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Delete Instance Type

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/type/{instanceTypeId}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "x3.large",
  • "description": "Part of X family, the X3 Large features increased compute power",
  • "infrastructureProviderId": "5f2cc306-76e9-4fca-9186-950c9ef9a74e",
  • "siteId": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "labels": {
    },
  • "machineCapabilities": [
    ],
  • "allocationStats": {
    },
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "deprecations": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Delete Instance Type

Delete an Instance Type by ID.

Org must have an Infrastructure Provider entity that owns the Instance Type. User must have FORGE_PROVIDER_ADMIN authorization role.

@@ -4558,7 +4692,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Response samples

Content type
application/json
{
  • "source": "carbide",
  • "message": "User is not allowed to perform this action",
  • "data": null
}

Update Instance Type

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/type/{instanceTypeId}

Response samples

Content type
application/json
{
  • "source": "carbide",
  • "message": "User is not allowed to perform this action",
  • "data": null
}

Update Instance Type

Update an Instance Type by ID.

Org must have an Infrastructure Provider entity that owns the Instance Type. User must have FORGE_PROVIDER_ADMIN authorization role.

@@ -4578,7 +4712,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Request samples

Content type
application/json
{
  • "description": "Updated version of the X3 Large family of machines",
  • "labels": {
    },
  • "machineCapabilities": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "x3.large",
  • "description": "Updated version of the X3 Large family of machines",
  • "infrastructureProviderId": "5f2cc306-76e9-4fca-9186-950c9ef9a74e",
  • "siteId": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "labels": {
    },
  • "machineCapabilities": [
    ],
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "deprecations": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Retrieve all Machines/Instance Type associations

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/type/{instanceTypeId}

Request samples

Content type
application/json
{
  • "description": "Updated version of the X3 Large family of machines",
  • "labels": {
    },
  • "machineCapabilities": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "x3.large",
  • "description": "Updated version of the X3 Large family of machines",
  • "infrastructureProviderId": "5f2cc306-76e9-4fca-9186-950c9ef9a74e",
  • "siteId": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
  • "labels": {
    },
  • "machineCapabilities": [
    ],
  • "status": "Pending",
  • "statusHistory": [
    ],
  • "deprecations": [
    ],
  • "created": "2019-08-24T14:15:22Z",
  • "updated": "2019-08-24T14:15:22Z"
}

Retrieve all Machines/Instance Type associations

Get all Machines for a given Instance Type

Org must have an Infrastructure Provider entity that owns the Instance Type and the Machine. User must have FORGE_PROVIDER_ADMIN authorization role.

@@ -4602,7 +4736,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Create a Machine/Instance Type association

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/type/{instanceTypeId}/machine

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Create a Machine/Instance Type association

Associate a Machine to an Instance Type

Org must have an Infrastructure Provider entity that owns the Instance Type and the Machine. User must have FORGE_PROVIDER_ADMIN authorization role.

@@ -4620,7 +4754,7 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Request samples

Content type
application/json
{
  • "machineIds": [
    ]
}

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Delete a Machine/Instance Type association

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/type/{instanceTypeId}/machine

Request samples

Content type
application/json
{
  • "machineIds": [
    ]
}

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Delete a Machine/Instance Type association

Delete a Machine's association with an Instance Type.

@@ -4638,12 +4772,13 @@

Typical API Call Flow for Tenant

" class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

Error response when user is not authorized to call an endpoint or retrieve/modify objects

Response samples

Content type
application/json
{
  • "source": "carbide",
  • "message": "User is not allowed to perform this action",
  • "data": null
}

Instance

https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/type/{instanceTypeId}/machine/{machineAssociationId}

Response samples

Content type
application/json
{
  • "source": "carbide",
  • "message": "User is not allowed to perform this action",
  • "data": null
}

Instance

Instance is a Machine provisioned with an Operating System by a Tenant and attached to one or more VPC Prefixes or Subnets.

Deprecation history:

@@ -4651,6 +4786,7 @@

Typical API Call Flow for Tenant

  • sshUrl was deprecated in favor of serialConsoleUrl and was removed on April 25th, 2023 0:00 UTC. Please use serialConsoleUrl instead.
  • instanceSubnets was deprecated in favor of interfaces and was removed on May 10th, 2023 0:00 UTC. Please use interfaces instead.
  • sshkeygroups was deprecated in favor of sshKeyGroups and was removed on September 4th, 2025 0:00 UTC. Please use sshKeyGroups instead.
  • +
  • allocationId was deprecated, and removed on September 6th, 2025 0:00 UTC.
  • Retrieve all Instances

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    Example
    [
    • {
      }
    ]

    Create an Instance

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance

    Response samples

    Content type
    application/json
    Example
    [
    • {
      }
    ]

    Create an Instance

    Create an Instance for Tenant.

    Org must have a Tenant entity. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -4818,7 +4954,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "name": "spark-monitor-1",
    • "description": "Node for monitoring Spark",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\nshell",
    • "alwaysBootWithCustomIpxe": true,
    • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
    • "labels": {
      },
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "sshKeyGroupIds": [
      ]
    }

    Response samples

    Content type
    application/json
    Example
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "spark-monitor-1",
    • "description": "Node for monitoring Spark",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "controllerInstanceId": null,
    • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\nshell",
    • "alwaysBootWithCustomIpxe": true,
    • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
    • "labels": {
      },
    • "isUpdatePending": false,
    • "serialConsoleUrl": "ssh://user@carbide.acme.com",
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "dpuExtensionServiceDeployments": [ ],
    • "sshKeyGroupIds": [
      ],
    • "sshKeyGroups": [
      ],
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "deprecations": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Batch Create Instances

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance

    Request samples

    Content type
    application/json
    Example
    {
    • "name": "spark-monitor-1",
    • "description": "Node for monitoring Spark",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\nshell",
    • "alwaysBootWithCustomIpxe": true,
    • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
    • "labels": {
      },
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "sshKeyGroupIds": [
      ]
    }

    Response samples

    Content type
    application/json
    Example
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "spark-monitor-1",
    • "description": "Node for monitoring Spark",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "controllerInstanceId": null,
    • "ipxeScript": "#!ipxe\nkernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz\ninitrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz\nboot || imgfree\nshell",
    • "alwaysBootWithCustomIpxe": true,
    • "userData": "#cloud-config\nautoinstall:\n apt:\n geoip: true\n preserve_sources_list: false\n primary:\n - arches: [amd64, i386]\n uri: http://archive.ubuntu.com/ubuntu\n - arches: [default]\n uri: http://ports.ubuntu.com/ubuntu-ports",
    • "labels": {
      },
    • "isUpdatePending": false,
    • "serialConsoleUrl": "ssh://user@carbide.acme.com",
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "dpuExtensionServiceDeployments": [ ],
    • "sshKeyGroupIds": [
      ],
    • "sshKeyGroups": [
      ],
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "deprecations": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Batch Create Instances

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "namePrefix": "gpu-worker",
    • "count": 4,
    • "description": "GPU worker nodes for distributed training",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "topologyOptimized": true,
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "sshKeyGroupIds": [
      ]
    }

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      }
    ]

    Retrieve Instance

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/batch

    Request samples

    Content type
    application/json
    Example
    {
    • "namePrefix": "gpu-worker",
    • "count": 4,
    • "description": "GPU worker nodes for distributed training",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "topologyOptimized": true,
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "sshKeyGroupIds": [
      ]
    }

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      }
    ]

    Retrieve Instance

    Get an Instance by ID

    Org must have a Tenant entity. Instance must belong to Tenant. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -4966,7 +5102,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "spark-monitor-1",
    • "description": "Node for monitoring Spark",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "controllerInstanceId": null,
    • "ipxeScript": null,
    • "alwaysBootWithCustomIpxe": false,
    • "userData": null,
    • "networkSecurityGroupId": "c602eb90-3039-11f0-997a-b38d4fc8389e",
    • "networkSecurityGroupPropagationDetails": {
      },
    • "networkSecurityGroupInherited": false,
    • "labels": {
      },
    • "isUpdatePending": false,
    • "serialConsoleUrl": "ssh://user@carbide.acme.com",
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "dpuExtensionServiceDeployments": [
      ],
    • "sshKeyGroupIds": [
      ],
    • "sshKeyGroups": [
      ],
    • "tpmEkCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxVENDQWJ5Z0F3SUJBZ0lVTEE1ZHFPK1E5OXZQM3VYRTRKcjBncVRtOW93d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQW9NQ2s1MmFXUnBZU0JEYjNKNw==",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "deprecations": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete Instance

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/{instanceId}

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "spark-monitor-1",
    • "description": "Node for monitoring Spark",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "controllerInstanceId": null,
    • "ipxeScript": null,
    • "alwaysBootWithCustomIpxe": false,
    • "userData": null,
    • "networkSecurityGroupId": "c602eb90-3039-11f0-997a-b38d4fc8389e",
    • "networkSecurityGroupPropagationDetails": {
      },
    • "networkSecurityGroupInherited": false,
    • "labels": {
      },
    • "isUpdatePending": false,
    • "serialConsoleUrl": "ssh://user@carbide.acme.com",
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "dpuExtensionServiceDeployments": [
      ],
    • "sshKeyGroupIds": [
      ],
    • "sshKeyGroups": [
      ],
    • "tpmEkCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxVENDQWJ5Z0F3SUJBZ0lVTEE1ZHFPK1E5OXZQM3VYRTRKcjBncVRtOW93d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQW9NQ2s1MmFXUnBZU0JEYjNKNw==",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "deprecations": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete Instance

    Delete an Instance by ID

    Org must have a Tenant entity. Instance must belong to Tenant. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -4984,7 +5120,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Accepted

    Request samples

    Content type
    application/json
    {
    • "machineHealthIssue": {
      },
    • "isRepairTenant": false
    }

    Update Instance

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/{instanceId}

    Request samples

    Content type
    application/json
    {
    • "machineHealthIssue": {
      },
    • "isRepairTenant": false
    }

    Update Instance

    Update an Instance by ID

    Org must have a Tenant entity. Instance must belong to Tenant. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -5070,7 +5206,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    {
    • "name": "spark-monitor-1",
    • "description": "Spark Monitor Node 1",
    • "triggerReboot": true,
    • "rebootWithCustomIpxe": true,
    • "applyUpdatesOnReboot": true,
    • "sshKeyGroupIds": [
      ],
    • "labels": {
      },
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "dpuExtensionServiceDeployments": [
      ]
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "spark-monitor-2",
    • "description": "Spark Monitor Node 1",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "controllerInstanceId": "158fc2bc-f2fb-4e1f-a5a4-2211062d14df",
    • "ipxeScript": null,
    • "alwaysBootWithCustomIpxe": false,
    • "userData": null,
    • "labels": {
      },
    • "isUpdatePending": false,
    • "serialConsoleUrl": "ssh://user@carbide.acme.com",
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "dpuExtensionServiceDeployments": [
      ],
    • "sshKeyGroupIds": [
      ],
    • "sshKeyGroups": [
      ],
    • "tpmEkCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxVENDQWJ5Z0F3SUJBZ0lVTEE1ZHFPK1E5OXZQM3VYRTRKcjBncVRtOW93d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQW9NQ2s1MmFXUnBZU0JEYjNKNw==",
    • "status": "Rebooting",
    • "statusHistory": [
      ],
    • "deprecations": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve Instance status history

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/{instanceId}

    Request samples

    Content type
    application/json
    {
    • "name": "spark-monitor-1",
    • "description": "Spark Monitor Node 1",
    • "triggerReboot": true,
    • "rebootWithCustomIpxe": true,
    • "applyUpdatesOnReboot": true,
    • "sshKeyGroupIds": [
      ],
    • "labels": {
      },
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "nvLinkInterfaces": [
      ],
    • "dpuExtensionServiceDeployments": [
      ]
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "spark-monitor-2",
    • "description": "Spark Monitor Node 1",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "41e36058-8403-4086-a9b8-39cb5bc9cb98",
    • "vpcId": "5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3",
    • "machineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "operatingSystemId": "eaeb86ee-c435-444e-9e01-8346f67f194b",
    • "controllerInstanceId": "158fc2bc-f2fb-4e1f-a5a4-2211062d14df",
    • "ipxeScript": null,
    • "alwaysBootWithCustomIpxe": false,
    • "userData": null,
    • "labels": {
      },
    • "isUpdatePending": false,
    • "serialConsoleUrl": "ssh://user@carbide.acme.com",
    • "interfaces": [
      ],
    • "infinibandInterfaces": [
      ],
    • "dpuExtensionServiceDeployments": [
      ],
    • "sshKeyGroupIds": [
      ],
    • "sshKeyGroups": [
      ],
    • "tpmEkCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxVENDQWJ5Z0F3SUJBZ0lVTEE1ZHFPK1E5OXZQM3VYRTRKcjBncVRtOW93d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQW9NQ2s1MmFXUnBZU0JEYjNKNw==",
    • "status": "Rebooting",
    • "statusHistory": [
      ],
    • "deprecations": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve Instance status history

    Get Instance status history

    Org must have a Tenant entity. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -5092,7 +5228,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve all Interfaces

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/{instanceId}/status-history

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve all Interfaces

    Get all Interfaces for an Instance

    Org must have a Tenant entity. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -5130,7 +5266,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      }
    ]

    Retrieve all Instance InfiniBand Interfaces

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/{instanceId}/interface

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      }
    ]

    Retrieve all Instance InfiniBand Interfaces

    Get all InfiniBand Interfaces for an Instance

    Org must have a Tenant entity. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -5164,7 +5300,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      }
    ]

    Machine

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/instance/{instanceId}/nvlink-interface

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      }
    ]

    Machine

    Machine is a physical server that contains CPUs, GPUs, memory, storage, and networking hardware. Machines are the physical building blocks of a Site.

    Retrieve all Machines

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve a Machine

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/machine

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve a Machine

    Org must have either an Infrastructure Provider entity or a Tenant entity.

    @@ -5338,7 +5474,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    Example
    {
    • "id": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "2e016c02-2c67-48aa-b289-5d3ca6320c52",
    • "instanceId": "59bdaaff-3998-4fd9-a140-8749beeb605e",
    • "tenantId": "99819e6e-4017-4021-9edd-ea1bdf4dbd59",
    • "controllerMachineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "controllerMachineType": "x86_64",
    • "hwSkuDeviceType": "cpu",
    • "vendor": "Lenovo",
    • "productName": "ThinkSystem SR670 V2",
    • "serialNumber": "J1060ACR.D3KS2CS001G",
    • "machineCapabilities": [
      ],
    • "machineInterfaces": [
      ],
    • "maintenanceMessage": null,
    • "health": {
      },
    • "labels": {
      },
    • "status": "Ready",
    • "isUsableByTenant": true,
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Update Machine

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/machine/{machineId}

    Response samples

    Content type
    application/json
    Example
    {
    • "id": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "2e016c02-2c67-48aa-b289-5d3ca6320c52",
    • "instanceId": "59bdaaff-3998-4fd9-a140-8749beeb605e",
    • "tenantId": "99819e6e-4017-4021-9edd-ea1bdf4dbd59",
    • "controllerMachineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "controllerMachineType": "x86_64",
    • "hwSkuDeviceType": "cpu",
    • "vendor": "Lenovo",
    • "productName": "ThinkSystem SR670 V2",
    • "serialNumber": "J1060ACR.D3KS2CS001G",
    • "machineCapabilities": [
      ],
    • "machineInterfaces": [
      ],
    • "maintenanceMessage": null,
    • "health": {
      },
    • "labels": {
      },
    • "status": "Ready",
    • "isUsableByTenant": true,
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Update Machine

    Update a Machine

    @@ -5396,7 +5532,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

    Indicates whether the machine is usable by or currently in use by a tenant.

    Array of objects (StatusDetail)
    created
    string <date-time>
    updated
    string <date-time>

    Request samples

    Content type
    application/json
    Example
    {
    • "instanceTypeId": "2e016c02-2c67-48aa-b289-5d3ca6320c52"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "2e016c02-2c67-48aa-b289-5d3ca6320c52",
    • "instanceId": "59bdaaff-3998-4fd9-a140-8749beeb605e",
    • "tenantId": "99819e6e-4017-4021-9edd-ea1bdf4dbd59",
    • "controllerMachineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "controllerMachineType": "x86_64",
    • "hwSkuDeviceType": "cpu",
    • "vendor": "Lenovo",
    • "productName": "ThinkSystem SR670 V2",
    • "serialNumber": "J1060ACR.D3KS2CS001G",
    • "machineCapabilities": [
      ],
    • "machineInterfaces": [
      ],
    • "maintenanceMessage": null,
    • "health": {
      },
    • "labels": {
      },
    • "status": "Ready",
    • "isUsableByTenant": true,
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete a Machine from a Site

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/machine/{machineId}

    Request samples

    Content type
    application/json
    Example
    {
    • "instanceTypeId": "2e016c02-2c67-48aa-b289-5d3ca6320c52"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "instanceTypeId": "2e016c02-2c67-48aa-b289-5d3ca6320c52",
    • "instanceId": "59bdaaff-3998-4fd9-a140-8749beeb605e",
    • "tenantId": "99819e6e-4017-4021-9edd-ea1bdf4dbd59",
    • "controllerMachineId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "controllerMachineType": "x86_64",
    • "hwSkuDeviceType": "cpu",
    • "vendor": "Lenovo",
    • "productName": "ThinkSystem SR670 V2",
    • "serialNumber": "J1060ACR.D3KS2CS001G",
    • "machineCapabilities": [
      ],
    • "machineInterfaces": [
      ],
    • "maintenanceMessage": null,
    • "health": {
      },
    • "labels": {
      },
    • "status": "Ready",
    • "isUsableByTenant": true,
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete a Machine from a Site

    Org must have an Infrastructure Provider entity. Machine must belong to the Provider. User must have FORGE_PROVIDER_ADMIN authorization role. Machine must meet certain criteria to be eligible for deletion.

    Authorizations:
    JWTBearerToken
    path Parameters
    org
    required
    string

    Name of the Org

    @@ -5416,7 +5552,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Describes an error response for 500 Internal Server Error

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "Error validating request data",
    • "data": {
      }
    }

    Retrieve Machine status history

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/machine/{machineId}

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "Error validating request data",
    • "data": {
      }
    }

    Retrieve Machine status history

    Org must have either an Infrastructure Provider entity or a Tenant entity.

    @@ -5440,7 +5576,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve GPU stats for machines at a site

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/machine/{machineId}/status-history

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve GPU stats for machines at a site

    Returns GPU summary stats grouped by GPU name for machines at the specified site.

    User must have FORGE_PROVIDER_ADMIN authorization role. The specified site must belong to the Provider.

    @@ -5460,7 +5596,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve machine instance type assignment summary for a site

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/machine/gpu/stats

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve machine instance type assignment summary for a site

    Returns machine counts grouped by assigned (has instance type) vs unassigned, broken down by status.

    User must have FORGE_PROVIDER_ADMIN authorization role. The specified site must belong to the Provider.

    @@ -5478,7 +5614,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "assigned": {
      },
    • "unassigned": {
      }
    }

    Retrieve detailed per-instance-type machine stats for a site

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/machine/instance-type/stats/summary

    Response samples

    Content type
    application/json
    {
    • "assigned": {
      },
    • "unassigned": {
      }
    }

    Retrieve detailed per-instance-type machine stats for a site

    Returns machine stats for each instance type including allocation details and tenant breakdown.

    User must have FORGE_PROVIDER_ADMIN authorization role. The specified site must belong to the Provider.

    @@ -5504,7 +5640,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve all Machine Capabilities

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/machine/instance-type/stats

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve all Machine Capabilities

    Get all distinct Machine Capabilities across all Machines

    Org must have an Infrastructure Provider entity. User must have FORGE_PROVIDER_ADMIN authorization role.

    @@ -5562,7 +5698,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      },
    • {
      },
    • {
      },
    • {
      },
    • {
      }
    ]

    Machine Capability

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/machine-capability

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      },
    • {
      },
    • {
      },
    • {
      },
    • {
      }
    ]

    Machine Capability

    Machine Capability defines the hardware capabilities of a Machine. Machine Capabilities can be used to group Machines into Instance Types.

    Rack

    Rack is a physical enclosure that contains a number of Machines. Racks are the physical building blocks of a Site.

    @@ -5610,7 +5746,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve a Rack

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve a Rack

    Get a Rack by ID.

    Org must have an Infrastructure Provider entity. User must have FORGE_PROVIDER_ADMIN authorization role.

    @@ -5646,7 +5782,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when requested object is not found

    Response samples

    Content type
    application/json
    {
    • "id": "550e8400-e29b-41d4-a716-446655440000",
    • "name": "Rack-01",
    • "manufacturer": "Dell",
    • "model": "PowerEdge R750",
    • "serialNumber": "SN-RACK-001",
    • "description": "Primary compute rack",
    • "location": {
      },
    • "components": [
      ]
    }

    Validate Racks

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/{id}

    Response samples

    Content type
    application/json
    {
    • "id": "550e8400-e29b-41d4-a716-446655440000",
    • "name": "Rack-01",
    • "manufacturer": "Dell",
    • "model": "PowerEdge R750",
    • "serialNumber": "SN-RACK-001",
    • "description": "Primary compute rack",
    • "location": {
      },
    • "components": [
      ]
    }

    Validate Racks

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    Example
    {
    • "diffs": [ ],
    • "totalDiffs": 0,
    • "missingCount": 0,
    • "unexpectedCount": 0,
    • "driftCount": 0,
    • "matchCount": 10
    }

    Validate a Rack

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/validation

    Response samples

    Content type
    application/json
    Example
    {
    • "diffs": [ ],
    • "totalDiffs": 0,
    • "missingCount": 0,
    • "unexpectedCount": 0,
    • "driftCount": 0,
    • "matchCount": 10
    }

    Validate a Rack

    Validate a Rack's components by comparing expected vs actual state.

    @@ -5714,7 +5850,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    Example
    {
    • "diffs": [ ],
    • "totalDiffs": 0,
    • "missingCount": 0,
    • "unexpectedCount": 0,
    • "driftCount": 0,
    • "matchCount": 5
    }

    Power control Racks

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/{id}/validation

    Response samples

    Content type
    application/json
    Example
    {
    • "diffs": [ ],
    • "totalDiffs": 0,
    • "missingCount": 0,
    • "unexpectedCount": 0,
    • "driftCount": 0,
    • "matchCount": 5
    }

    Power control Racks

    Power control Racks with optional filters. If no filter is specified, targets all racks in the Site.

    @@ -5738,7 +5874,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "state": "off"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Power control a Rack

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/power

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "state": "off"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Power control a Rack

    Power control a Rack identified by Rack UUID.

    @@ -5776,7 +5912,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "state": "on"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Firmware update Racks

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/{id}/power

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "state": "on"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Firmware update Racks

    Update firmware on Racks with optional name filter. If no filter is specified, targets all racks in the Site.

    Org must have an Infrastructure Provider entity. User must have FORGE_PROVIDER_ADMIN authorization role.

    @@ -5798,7 +5934,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Firmware update a Rack

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/firmware

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Firmware update a Rack

    Update firmware on a Rack identified by Rack UUID.

    Org must have an Infrastructure Provider entity. User must have FORGE_PROVIDER_ADMIN authorization role.

    @@ -5820,7 +5956,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "version": "24.11.0"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Bring up Racks

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/{id}/firmware

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "version": "24.11.0"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Bring up Racks

    Bring up Racks with optional name filter. If no filter is specified, targets all racks in the Site.

    Org must have an Infrastructure Provider entity. User must have FORGE_PROVIDER_ADMIN authorization role.

    @@ -5842,7 +5978,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Bring up a Rack

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/bringup

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Bring up a Rack

    Bring up a Rack identified by Rack UUID.

    Org must have an Infrastructure Provider entity. User must have FORGE_PROVIDER_ADMIN authorization role.

    @@ -5864,7 +6000,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Retrieve a Task

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/{id}/bringup

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Retrieve a Task

    Get a Task by UUID.

    @@ -5902,7 +6038,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when requested object is not found

    Response samples

    Content type
    application/json
    {
    • "id": "550e8400-e29b-41d4-a716-446655440000",
    • "status": "Running",
    • "description": "Power on rack components",
    • "message": "Processing 3 of 5 components"
    }

    Tray

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/task/{id}

    Response samples

    Content type
    application/json
    {
    • "id": "550e8400-e29b-41d4-a716-446655440000",
    • "status": "Running",
    • "description": "Power on rack components",
    • "message": "Processing 3 of 5 components"
    }

    Tray

    Tray represents a component within a Rack.

    Retrieve all Trays

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve a Tray

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/tray

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Retrieve a Tray

    Get a Tray by ID.

    Org must have an Infrastructure Provider entity. User must have FORGE_PROVIDER_ADMIN authorization role.

    @@ -6018,7 +6154,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when requested object is not found

    Response samples

    Content type
    application/json
    {
    • "id": "660e8400-e29b-41d4-a716-446655440001",
    • "componentId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "type": "compute",
    • "name": "compute-tray-1",
    • "manufacturer": "NVIDIA",
    • "model": "GB200",
    • "serialNumber": "TSN001",
    • "description": "Compute tray in slot 1",
    • "firmwareVersion": "2.1.0",
    • "powerState": "on",
    • "position": {
      },
    • "rackId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Validate Trays

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/tray/{id}

    Response samples

    Content type
    application/json
    {
    • "id": "660e8400-e29b-41d4-a716-446655440001",
    • "componentId": "fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g",
    • "type": "compute",
    • "name": "compute-tray-1",
    • "manufacturer": "NVIDIA",
    • "model": "GB200",
    • "serialNumber": "TSN001",
    • "description": "Compute tray in slot 1",
    • "firmwareVersion": "2.1.0",
    • "powerState": "on",
    • "position": {
      },
    • "rackId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Validate Trays

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "diffs": [ ],
    • "totalDiffs": 0,
    • "missingCount": 0,
    • "unexpectedCount": 0,
    • "driftCount": 0,
    • "matchCount": 10
    }

    Validate a Tray

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/tray/validation

    Response samples

    Content type
    application/json
    {
    • "diffs": [ ],
    • "totalDiffs": 0,
    • "missingCount": 0,
    • "unexpectedCount": 0,
    • "driftCount": 0,
    • "matchCount": 10
    }

    Validate a Tray

    Validate a Tray by comparing expected vs actual state.

    @@ -6094,7 +6230,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "diffs": [ ],
    • "totalDiffs": 0,
    • "missingCount": 0,
    • "unexpectedCount": 0,
    • "driftCount": 0,
    • "matchCount": 5
    }

    Power control Trays

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/tray/{id}/validation

    Response samples

    Content type
    application/json
    {
    • "diffs": [ ],
    • "totalDiffs": 0,
    • "missingCount": 0,
    • "unexpectedCount": 0,
    • "driftCount": 0,
    • "matchCount": 5
    }

    Power control Trays

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "state": "on"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Power control a Tray

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/tray/power

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "state": "on"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Power control a Tray

    Power control a Tray identified by Tray UUID.

    @@ -6170,7 +6306,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "state": "on"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Firmware update Trays

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/tray/{id}/power

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "state": "on"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Firmware update Trays

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Firmware update a Tray

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/tray/firmware

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Firmware update a Tray

    Update firmware on a Tray identified by Tray UUID.

    Org must have an Infrastructure Provider entity. User must have FORGE_PROVIDER_ADMIN authorization role.

    @@ -6228,7 +6364,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "version": "24.11.0"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Network Security Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/tray/{id}/firmware

    Request samples

    Content type
    application/json
    Example
    {
    • "siteId": "550e8400-e29b-41d4-a716-446655440000",
    • "version": "24.11.0"
    }

    Response samples

    Content type
    application/json
    {
    • "taskIds": [
      ]
    }

    Network Security Group

    Network Security Group is a security policy that controls the traffic flowing between Instances.

    Retrieve all Network Security Groups

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Describes an error response for 501 Not Implemented

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create Network Security Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/network-security-group

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create Network Security Group

    Create a Network Security Group for Tenant.

    Org must have a Tenant entity. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -6296,7 +6432,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Describes an error response for 501 Not Implemented

    Request samples

    Content type
    application/json
    {
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "siteId": "188a8f32-0001-45cf-b243-f62720a22cc4",
    • "rules": [
      ],
    • "labels": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "id": "2a21cf79-ea5e-4d28-b585-2e78948fcefb",
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "siteId": "56f1a3ed-3653-454f-b861-9136207be660",
    • "tenantId": "79595ebe-934f-4f19-bc74-c16aefd0c57a",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "rules": [
      ],
    • "labels": {
      },
    • "created": "2025-02-26T18:17:44.861317-05:00",
    • "updated": "2025-02-26T18:17:44.861317-05:00"
    }

    Retrieve Network Security Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/network-security-group

    Request samples

    Content type
    application/json
    {
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "siteId": "188a8f32-0001-45cf-b243-f62720a22cc4",
    • "rules": [
      ],
    • "labels": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "id": "2a21cf79-ea5e-4d28-b585-2e78948fcefb",
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "siteId": "56f1a3ed-3653-454f-b861-9136207be660",
    • "tenantId": "79595ebe-934f-4f19-bc74-c16aefd0c57a",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "rules": [
      ],
    • "labels": {
      },
    • "created": "2025-02-26T18:17:44.861317-05:00",
    • "updated": "2025-02-26T18:17:44.861317-05:00"
    }

    Retrieve Network Security Group

    Get a Network Security Group by ID

    Org must have a Tenant entity. Instance must belong to Tenant. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -6322,7 +6458,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Describes an error response for 501 Not Implemented

    Response samples

    Content type
    application/json
    {
    • "id": "2a21cf79-ea5e-4d28-b585-2e78948fcefb",
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "siteId": "56f1a3ed-3653-454f-b861-9136207be660",
    • "tenantId": "79595ebe-934f-4f19-bc74-c16aefd0c57a",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "rules": [
      ],
    • "labels": {
      },
    • "created": "2025-02-26T18:17:44.861317-05:00",
    • "updated": "2025-02-26T18:17:44.861317-05:00"
    }

    Update Network Security Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/network-security-group/{networkSecurityGroupId}

    Response samples

    Content type
    application/json
    {
    • "id": "2a21cf79-ea5e-4d28-b585-2e78948fcefb",
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "siteId": "56f1a3ed-3653-454f-b861-9136207be660",
    • "tenantId": "79595ebe-934f-4f19-bc74-c16aefd0c57a",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "rules": [
      ],
    • "labels": {
      },
    • "created": "2025-02-26T18:17:44.861317-05:00",
    • "updated": "2025-02-26T18:17:44.861317-05:00"
    }

    Update Network Security Group

    Update a Network Security Group by ID

    @@ -6352,7 +6488,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Describes an error response for 501 Not Implemented

    Request samples

    Content type
    application/json
    {
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "rules": [
      ],
    • "labels": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "id": "2a21cf79-ea5e-4d28-b585-2e78948fcefb",
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "siteId": "56f1a3ed-3653-454f-b861-9136207be660",
    • "tenantId": "79595ebe-934f-4f19-bc74-c16aefd0c57a",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "rules": [
      ],
    • "labels": {
      },
    • "created": "2025-02-26T18:17:44.861317-05:00",
    • "updated": "2025-02-26T18:17:44.861317-05:00"
    }

    Delete Network Security Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/network-security-group/{networkSecurityGroupId}

    Request samples

    Content type
    application/json
    {
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "rules": [
      ],
    • "labels": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "id": "2a21cf79-ea5e-4d28-b585-2e78948fcefb",
    • "name": "Spark VPC Firewall",
    • "description": "Security policies for machines in Spark VPC",
    • "siteId": "56f1a3ed-3653-454f-b861-9136207be660",
    • "tenantId": "79595ebe-934f-4f19-bc74-c16aefd0c57a",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "rules": [
      ],
    • "labels": {
      },
    • "created": "2025-02-26T18:17:44.861317-05:00",
    • "updated": "2025-02-26T18:17:44.861317-05:00"
    }

    Delete Network Security Group

    Delete a Network Security Group by ID

    @@ -6378,7 +6514,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Describes an error response for 501 Not Implemented

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "Error validating request data",
    • "data": {
      }
    }

    IP Block

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/network-security-group/{networkSecurityGroupId}

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "Error validating request data",
    • "data": {
      }
    }

    IP Block

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create IP Block

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/ipblock

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create IP Block

    Create an IP block for the org.

    @@ -6460,7 +6596,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    {
    • "name": "Public Network Overlay for Site SJC4",
    • "description": "This is the primary IP overlay for SJC4. All IPs are publicly routable",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "routingType": "Public",
    • "prefix": "202.168.1.0",
    • "prefixLength": 24,
    • "protocolVersion": "IPv4"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "Public Network Overlay for Site SJC4",
    • "description": "This is the primary IP overlay for SJC4. All IPs are publicly routable",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "tenantId": null,
    • "routingType": "Public",
    • "prefix": "202.168.1.0",
    • "prefixLength": 24,
    • "protocolVersion": "IPv4",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve IP Block

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/ipblock

    Request samples

    Content type
    application/json
    {
    • "name": "Public Network Overlay for Site SJC4",
    • "description": "This is the primary IP overlay for SJC4. All IPs are publicly routable",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "routingType": "Public",
    • "prefix": "202.168.1.0",
    • "prefixLength": 24,
    • "protocolVersion": "IPv4"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "Public Network Overlay for Site SJC4",
    • "description": "This is the primary IP overlay for SJC4. All IPs are publicly routable",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "tenantId": null,
    • "routingType": "Public",
    • "prefix": "202.168.1.0",
    • "prefixLength": 24,
    • "protocolVersion": "IPv4",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve IP Block

    Retrieve an IP Block by ID.

    User must have FORGE_PROVIDER_ADMIN or FORGE_TENANT_ADMIN role.

    @@ -6490,7 +6626,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "Public Network Overlay for Site SJC4",
    • "description": "This is the primary IP overlay for SJC4. All IPs are publicly routable",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "tenantId": null,
    • "routingType": "Public",
    • "prefix": "202.168.16.0",
    • "prefixLength": 20,
    • "protocolVersion": "IPv4",
    • "usageStats": {
      },
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete IP Block

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/ipblock/{ipBlockId}

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "Public Network Overlay for Site SJC4",
    • "description": "This is the primary IP overlay for SJC4. All IPs are publicly routable",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "tenantId": null,
    • "routingType": "Public",
    • "prefix": "202.168.16.0",
    • "prefixLength": 20,
    • "protocolVersion": "IPv4",
    • "usageStats": {
      },
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete IP Block

    Delete an IP block

    @@ -6508,7 +6644,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "Error validating request data",
    • "data": {
      }
    }

    Update IP Block

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/ipblock/{ipBlockId}

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "Error validating request data",
    • "data": {
      }
    }

    Update IP Block

    Update an existing IP Block

    @@ -6530,7 +6666,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

    Status values for IP Block objects

    Array of objects (StatusDetail)
    Array of objects (Deprecation)
    created
    string <date-time>
    updated
    string <date-time>

    Request samples

    Content type
    application/json
    {
    • "name": "Public Network Overlay for Site SJC-4",
    • "description": "This is the primary IP overlay for SJC-4. All IPs are publicly routable"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "Public Network Overlay for Site SJC-4",
    • "description": "This is the primary IP overlay for SJC-4. All IPs are publicly routable",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "tenantId": null,
    • "routingType": "Public",
    • "prefix": "202.168.16.0",
    • "prefixLength": 20,
    • "protocolVersion": "IPv4",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve All Derived IP Blocks

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/ipblock/{ipBlockId}

    Request samples

    Content type
    application/json
    {
    • "name": "Public Network Overlay for Site SJC-4",
    • "description": "This is the primary IP overlay for SJC-4. All IPs are publicly routable"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "Public Network Overlay for Site SJC-4",
    • "description": "This is the primary IP overlay for SJC-4. All IPs are publicly routable",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "infrastructureProviderId": "e94bcfda-f6cb-42e4-80ec-516811e5abbf",
    • "tenantId": null,
    • "routingType": "Public",
    • "prefix": "202.168.16.0",
    • "prefixLength": 20,
    • "protocolVersion": "IPv4",
    • "status": "Pending",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve All Derived IP Blocks

    Retrieve all child IP Blocks allocated to Tenants from a specific Provider super IP Block. When allocations are created from a super block, individual Tenant IP Blocks are created as a result.

    @@ -6568,7 +6704,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    DPU Extension Service

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/ipblock/{ipBlockId}/derived

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    DPU Extension Service

    DPU Extension Service allows users to run custom services in the DPUs of their Instances. Currently K8s pods are the only supported service type.

    Retrieve all DPU Extension Services

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create DPU Extension Service

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/dpu-extension-service

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create DPU Extension Service

    Create a DPU Extension Service for the current Tenant.

    Org must have a Tenant entity. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -6676,7 +6812,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    {
    • "name": "busybox",
    • "description": "Single, multi-call executable that contains stripped-down versions of common Unix utilities",
    • "serviceType": "KubernetesPod",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "data": "apiVersion: apps/v1\\nkind: Deployment\\nmetadata:\\n name: busybox-deployment\\n labels:\\n app: busybox\\nspec:\\n replicas: 1 # You can adjust the number of desired replicas here\\n selector:\\n matchLabels:\\n app: busybox\\n template:\\n metadata:\\n labels:\\n app: busybox\\n spec:\\n containers:\\n - name: busybox-container\\n image: busybox:latest # You can specify a different BusyBox image tag\\n command: [\"sh\", \"-c\", \"echo \\'BusyBox container running\\' && sleep 3600\"]",
    • "credentials": {},
    • "observability": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "busybox",
    • "description": "Single, multi-call executable that contains stripped-down versions of common Unix utilities",
    • "serviceType": "KubernetesPod",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "V1-T1761856992374052",
    • "versionInfo": {
      },
    • "activeVersions": [
      ],
    • "status": "Ready",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve DPU Extension Service

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/dpu-extension-service

    Request samples

    Content type
    application/json
    {
    • "name": "busybox",
    • "description": "Single, multi-call executable that contains stripped-down versions of common Unix utilities",
    • "serviceType": "KubernetesPod",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "data": "apiVersion: apps/v1\\nkind: Deployment\\nmetadata:\\n name: busybox-deployment\\n labels:\\n app: busybox\\nspec:\\n replicas: 1 # You can adjust the number of desired replicas here\\n selector:\\n matchLabels:\\n app: busybox\\n template:\\n metadata:\\n labels:\\n app: busybox\\n spec:\\n containers:\\n - name: busybox-container\\n image: busybox:latest # You can specify a different BusyBox image tag\\n command: [\"sh\", \"-c\", \"echo \\'BusyBox container running\\' && sleep 3600\"]",
    • "credentials": {},
    • "observability": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "busybox",
    • "description": "Single, multi-call executable that contains stripped-down versions of common Unix utilities",
    • "serviceType": "KubernetesPod",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "V1-T1761856992374052",
    • "versionInfo": {
      },
    • "activeVersions": [
      ],
    • "status": "Ready",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve DPU Extension Service

    Retrieve a DPU Extension Service for the current Tenant by ID

    @@ -6716,7 +6852,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "busybox",
    • "description": "Single, multi-call executable that contains stripped-down versions of common Unix utilities",
    • "serviceType": "KubernetesPod",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "V1-T1761856992374052",
    • "versionInfo": {
      },
    • "activeVersions": [
      ],
    • "status": "Ready",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete DPU Extension Service

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/dpu-extension-service/{dpuExtensionServiceId}

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "busybox",
    • "description": "Single, multi-call executable that contains stripped-down versions of common Unix utilities",
    • "serviceType": "KubernetesPod",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "V1-T1761856992374052",
    • "versionInfo": {
      },
    • "activeVersions": [
      ],
    • "status": "Ready",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete DPU Extension Service

    Delete a specific DPU Extension Service by ID. All versions will be deleted.

    @@ -6732,7 +6868,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "User is not allowed to perform this action",
    • "data": null
    }

    Update DPU Extension Service

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/dpu-extension-service/{dpuExtensionServiceId}

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "User is not allowed to perform this action",
    • "data": null
    }

    Update DPU Extension Service

    Update a specific DPU Extension Service.

    @@ -6788,7 +6924,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when requested object is not found

    Request samples

    Content type
    application/json
    {
    • "name": "busybox-ha",
    • "data": "apiVersion: apps/v1\\nkind: Deployment\\nmetadata:\\n name: busybox-deployment\\n labels:\\n app: busybox\\nspec:\\n replicas: 3 # You can adjust the number of desired replicas here\\n selector:\\n matchLabels:\\n app: busybox\\n template:\\n metadata:\\n labels:\\n app: busybox\\n spec:\\n containers:\\n - name: busybox-container\\n image: busybox:latest # You can specify a different BusyBox image tag\\n command: [\"sh\", \"-c\", \"echo \\'BusyBox container running\\' && sleep 3600\"]",
    • "credentials": {},
    • "observability": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "busybox",
    • "description": "Single, multi-call executable that contains stripped-down versions of common Unix utilities",
    • "serviceType": "KubernetesPod",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "V1-T1761856992374052",
    • "versionInfo": {
      },
    • "activeVersions": [
      ],
    • "status": "Ready",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve DPU Extension Service Version

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/dpu-extension-service/{dpuExtensionServiceId}

    Request samples

    Content type
    application/json
    {
    • "name": "busybox-ha",
    • "data": "apiVersion: apps/v1\\nkind: Deployment\\nmetadata:\\n name: busybox-deployment\\n labels:\\n app: busybox\\nspec:\\n replicas: 3 # You can adjust the number of desired replicas here\\n selector:\\n matchLabels:\\n app: busybox\\n template:\\n metadata:\\n labels:\\n app: busybox\\n spec:\\n containers:\\n - name: busybox-container\\n image: busybox:latest # You can specify a different BusyBox image tag\\n command: [\"sh\", \"-c\", \"echo \\'BusyBox container running\\' && sleep 3600\"]",
    • "credentials": {},
    • "observability": {
      }
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "busybox",
    • "description": "Single, multi-call executable that contains stripped-down versions of common Unix utilities",
    • "serviceType": "KubernetesPod",
    • "siteId": "60189e9c-7d12-438c-b9ca-6998d9c364b1",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "V1-T1761856992374052",
    • "versionInfo": {
      },
    • "activeVersions": [
      ],
    • "status": "Ready",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve DPU Extension Service Version

    Retrieve details for a specific version of a DPU Extension Service.

    @@ -6816,7 +6952,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when requested object is not found

    Response samples

    Content type
    application/json
    {
    • "version": "V1-T1761856992374052",
    • "data": "apiVersion: apps/v1\\nkind: Deployment\\nmetadata:\\n name: busybox-deployment\\n labels:\\n app: busybox\\nspec:\\n replicas: 1 # You can adjust the number of desired replicas here\\n selector:\\n matchLabels:\\n app: busybox\\n template:\\n metadata:\\n labels:\\n app: busybox\\n spec:\\n containers:\\n - name: busybox-container\\n image: busybox:latest # You can specify a different BusyBox image tag\\n command: [\"sh\", \"-c\", \"echo \\'BusyBox container running\\' && sleep 3600\"]",
    • "hasCredentials": true,
    • "created": "2019-08-24T14:15:22Z",
    • "observability": {
      }
    }

    Delete DPU Extension Service Version

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/dpu-extension-service/{dpuExtensionServiceId}/version/{version}

    Response samples

    Content type
    application/json
    {
    • "version": "V1-T1761856992374052",
    • "data": "apiVersion: apps/v1\\nkind: Deployment\\nmetadata:\\n name: busybox-deployment\\n labels:\\n app: busybox\\nspec:\\n replicas: 1 # You can adjust the number of desired replicas here\\n selector:\\n matchLabels:\\n app: busybox\\n template:\\n metadata:\\n labels:\\n app: busybox\\n spec:\\n containers:\\n - name: busybox-container\\n image: busybox:latest # You can specify a different BusyBox image tag\\n command: [\"sh\", \"-c\", \"echo \\'BusyBox container running\\' && sleep 3600\"]",
    • "hasCredentials": true,
    • "created": "2019-08-24T14:15:22Z",
    • "observability": {
      }
    }

    Delete DPU Extension Service Version

    Delete a specific version of a DPU Extension Service.

    @@ -6834,7 +6970,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "User is not allowed to perform this action",
    • "data": null
    }

    SSH Key Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/dpu-extension-service/{dpuExtensionServiceId}/version/{version}

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "User is not allowed to perform this action",
    • "data": null
    }

    SSH Key Group

    SSH Key Groups allow grouping several SSH Keys together so they can be synced to Sites and used to access the Serial Console of Instances.

    Retrieve all SSH Key Groups

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create SSH Key Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkeygroup

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create SSH Key Group

    Create an SSH Key Group for the current Tenant.

    Org must have a Tenant entity. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -6924,7 +7060,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    {
    • "name": "reno-integration-sre",
    • "description": "SRE access SSH keys for Reno Integration",
    • "siteIds": [
      ],
    • "sshKeyIds": [
      ]
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-integration-sre",
    • "description": "SRE access SSH keys for Reno Integration",
    • "org": "wdksahew1rqf",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "fbc692b61ffef6fbfc38a3833f6b7e7ae508da75",
    • "siteAssociations": [
      ],
    • "sshKeys": [
      ],
    • "status": "Syncing",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve an SSH Key Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkeygroup

    Request samples

    Content type
    application/json
    {
    • "name": "reno-integration-sre",
    • "description": "SRE access SSH keys for Reno Integration",
    • "siteIds": [
      ],
    • "sshKeyIds": [
      ]
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-integration-sre",
    • "description": "SRE access SSH keys for Reno Integration",
    • "org": "wdksahew1rqf",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "fbc692b61ffef6fbfc38a3833f6b7e7ae508da75",
    • "siteAssociations": [
      ],
    • "sshKeys": [
      ],
    • "status": "Syncing",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve an SSH Key Group

    Retrieve an SSH Key Group for the current Tenant by ID

    @@ -6962,7 +7098,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-integration-sre",
    • "description": "SRE access SSH keys for Reno Integration",
    • "org": "wdksahew1rqf",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "fbc692b61ffef6fbfc38a3833f6b7e7ae508da75",
    • "siteAssociations": [
      ],
    • "sshKeys": [
      ],
    • "status": "Syncing",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete an SSH Key Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkeygroup/{sshKeyGroupId}

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-integration-sre",
    • "description": "SRE access SSH keys for Reno Integration",
    • "org": "wdksahew1rqf",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "fbc692b61ffef6fbfc38a3833f6b7e7ae508da75",
    • "siteAssociations": [
      ],
    • "sshKeys": [
      ],
    • "status": "Syncing",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete an SSH Key Group

    Delete a specific SSH key Group.

    @@ -6978,7 +7114,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "User is not allowed to perform this action",
    • "data": null
    }

    Update an SSH Key Group

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkeygroup/{sshKeyGroupId}

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "User is not allowed to perform this action",
    • "data": null
    }

    Update an SSH Key Group

    Update a specific SSH Key Group.

    @@ -7026,7 +7162,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    {
    • "name": "reno-int-sre",
    • "description": "SRE access SSH keys for Reno Integration Site",
    • "siteIds": [
      ],
    • "sshKeyIds": [
      ],
    • "version": "fbc692b61ffef6fbfc38a3833f6b7e7ae508da75"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-int-sre",
    • "description": "SRE access SSH keys for Reno Integration Site",
    • "org": "wdksahew1rqf",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "fbc692b61ffef6fbfc38a3833f6b7e7ae508da75",
    • "siteAssociations": [
      ],
    • "sshKeys": [
      ],
    • "status": "Syncing",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    SSH Key

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkeygroup/{sshKeyGroupId}

    Request samples

    Content type
    application/json
    {
    • "name": "reno-int-sre",
    • "description": "SRE access SSH keys for Reno Integration Site",
    • "siteIds": [
      ],
    • "sshKeyIds": [
      ],
    • "version": "fbc692b61ffef6fbfc38a3833f6b7e7ae508da75"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-int-sre",
    • "description": "SRE access SSH keys for Reno Integration Site",
    • "org": "wdksahew1rqf",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "version": "fbc692b61ffef6fbfc38a3833f6b7e7ae508da75",
    • "siteAssociations": [
      ],
    • "sshKeys": [
      ],
    • "status": "Syncing",
    • "statusHistory": [
      ],
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    SSH Key

    SSH Key is a public key that can be used to access the Serial Console of an Instance.

    Retrieve all SSH Keys

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create SSH Key

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkey

    Response samples

    Content type
    application/json
    [
    • {
      }
    ]

    Create SSH Key

    Create an SSH Key for the current Tenant. If an SSH Key Group is specified, all Sites associated with the SSH Key Group must be online.

    Org must have a Tenant entity. User must have FORGE_TENANT_ADMIN authorization role.

    @@ -7086,7 +7222,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    {
    • "name": "reno-sre-access",
    • "publicKey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICip4hl6WjuVHs60PeikVUs0sWE/kPhk2D0rRHWsIuyL jdoe@test.com",
    • "sshKeyGroupId": "86ca8cab-b285-4c2d-9e00-25c88810dc2e"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-sre-access",
    • "org": "xskkpgqpeakn",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "fingerprint": "CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ",
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve an SSH key

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkey

    Request samples

    Content type
    application/json
    {
    • "name": "reno-sre-access",
    • "publicKey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICip4hl6WjuVHs60PeikVUs0sWE/kPhk2D0rRHWsIuyL jdoe@test.com",
    • "sshKeyGroupId": "86ca8cab-b285-4c2d-9e00-25c88810dc2e"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-sre-access",
    • "org": "xskkpgqpeakn",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "fingerprint": "CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ",
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Retrieve an SSH key

    Retrieve an SSH key for the current Tenant by ID

    @@ -7108,7 +7244,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "staging-sre-access",
    • "org": "xskkpgqpeakn",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "fingerprint": "CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ",
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete an SSH Key

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkey/{sshKeyId}

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "staging-sre-access",
    • "org": "xskkpgqpeakn",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "fingerprint": "CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ",
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Delete an SSH Key

    Delete an SSH key for the current Tenant by ID.

    @@ -7124,7 +7260,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "User is not allowed to perform this action",
    • "data": null
    }

    Update an SSH Key

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkey/{sshKeyId}

    Response samples

    Content type
    application/json
    {
    • "source": "carbide",
    • "message": "User is not allowed to perform this action",
    • "data": null
    }

    Update an SSH Key

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Request samples

    Content type
    application/json
    {
    • "name": "reno-sre-access-v2"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-sre-access-v2",
    • "org": "xskkpgqpeakn",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "fingerprint": "CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ",
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    User

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/sshkey/{sshKeyId}

    Request samples

    Content type
    application/json
    {
    • "name": "reno-sre-access-v2"
    }

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "name": "reno-sre-access-v2",
    • "org": "xskkpgqpeakn",
    • "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0",
    • "fingerprint": "CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ",
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    User

    User is a logical entity that identifies individuals operating on behalf of an organization.

    Retrieve Current User

    Retrieve details of the current user.

    @@ -7166,7 +7302,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

    The date that the user was created.

    updated
    string <date-time>

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "email": "janed@nvidia.com",
    • "firstName": "Jane",
    • "lastName": "Doe",
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Audit

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/user/current

    Response samples

    Content type
    application/json
    {
    • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    • "email": "janed@nvidia.com",
    • "firstName": "Jane",
    • "lastName": "Doe",
    • "created": "2019-08-24T14:15:22Z",
    • "updated": "2019-08-24T14:15:22Z"
    }

    Audit

    Audit is a record of actions taken by users on the API.

    Retrieve all Audit Log Entries

    Typical API Call Flow for Tenant " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      }
    ]

    Retrieve Audit Log Entry

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/audit

    Response samples

    Content type
    application/json
    [
    • {
      },
    • {
      }
    ]

    Retrieve Audit Log Entry

    Retrieve a specific Audit Log Entry by ID

    User must have FORGE_PROVIDER_ADMIN or FORGE_TENANT_ADMIN authorization role

    @@ -7262,7 +7398,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou sc-cjERFZ dXXcln fTBBlJ dkmSdy">

    Error response when user is not authorized to call an endpoint or retrieve/modify objects

    Response samples

    Content type
    application/json
    {
    • "id": "e313b3ca-c47a-4ec1-a79b-a147fad51a50",
    • "endpoint": "/v2/org/test-org-1/carbide/ep",
    • "queryParams": "{\"test\":[\"1234\"]}",
    • "method": "POST",
    • "body": "{\"key1\":\"value1\"}",
    • "statusCode": 200,
    • "clientIP": "12.123.43.112",
    • "userID": "5d9fe319-14d4-40e3-8e5a-7d79e680d55b",
    • "user": {
      },
    • "orgName": "test-org-1",
    • "timestamp": "2024-12-04T21:06:33.849293-08:00",
    • "durationMs": 250,
    • "apiVersion": "0.1.91"
    }

    Metadata

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/audit/{auditEntryId}

    Response samples

    Content type
    application/json
    {
    • "id": "e313b3ca-c47a-4ec1-a79b-a147fad51a50",
    • "endpoint": "/v2/org/test-org-1/carbide/ep",
    • "queryParams": "{\"test\":[\"1234\"]}",
    • "method": "POST",
    • "body": "{\"key1\":\"value1\"}",
    • "statusCode": 200,
    • "clientIP": "12.123.43.112",
    • "userID": "5d9fe319-14d4-40e3-8e5a-7d79e680d55b",
    • "user": {
      },
    • "orgName": "test-org-1",
    • "timestamp": "2024-12-04T21:06:33.849293-08:00",
    • "durationMs": 250,
    • "apiVersion": "0.1.91"
    }

    Metadata

    Metadata describes various system level attributes of the API service.

    Retrieve metadata about the API server

    Retrieve system metadata providing information about the API server

    @@ -7276,7 +7412,7 @@

    Typical API Call Flow for Tenant

    " class="sc-iKGpAq sc-cCYyou dXXcln cFvDiF">

    Date/time when the API was built

    Response samples

    Content type
    application/json
    {
    • "version": "0.1.24",
    • "buildTime": "2019-08-24T14:15:22Z"
    }

    Deprecations

    https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/metadata

    Response samples

    Content type
    application/json
    {
    • "version": "0.1.24",
    • "buildTime": "2019-08-24T14:15:22Z"
    }

    Deprecations

    Typical API Call Flow for Tenant <li><code>sshUrl</code> was deprecated in favor of <code>serialConsoleUrl</code> and was removed on April 25th, 2023 0:00 UTC. Please use <code>serialConsoleUrl</code> instead.</li> <li><code>instanceSubnets</code> was deprecated in favor of <code>interfaces</code> and was removed on May 10th, 2023 0:00 UTC. Please use <code>interfaces</code> instead.</li> <li><code>sshkeygroups</code> was deprecated in favor of <code>sshKeyGroups</code> and was removed on September 4th, 2025 0:00 UTC. Please use <code>sshKeyGroups</code> instead.</li> +<li><code>allocationId</code> was deprecated, and removed on September 6th, 2025 0:00 UTC.</li> </ul> <p>IP Block:</p> <ul> @@ -7335,6 +7472,7 @@

    Typical API Call Flow for Tenant

  • sshUrl was deprecated in favor of serialConsoleUrl and was removed on April 25th, 2023 0:00 UTC. Please use serialConsoleUrl instead.
  • instanceSubnets was deprecated in favor of interfaces and was removed on May 10th, 2023 0:00 UTC. Please use interfaces instead.
  • sshkeygroups was deprecated in favor of sshKeyGroups and was removed on September 4th, 2025 0:00 UTC. Please use sshKeyGroups instead.
  • +
  • allocationId was deprecated, and removed on September 6th, 2025 0:00 UTC.
  • IP Block:

      @@ -7346,7 +7484,7 @@

      Typical API Call Flow for Tenant