Skip to content

Commit a8e6e5c

Browse files
committed
Fix suggested by cr
1 parent 9e879e5 commit a8e6e5c

5 files changed

Lines changed: 20 additions & 56 deletions

File tree

rest-api/api/pkg/api/handler/expectedmachine.go

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -347,24 +347,14 @@ func (gaemh GetAllExpectedMachineHandler) Handle(c echo.Context) error {
347347
}
348348

349349
if tenant != nil {
350-
privileged, err := common.TenantHasTargetedInstanceCreation(ctx, nil, gaemh.dbSession, tenant, nil)
350+
// Get the Sites where the Tenant has effective TargetedInstanceCreation,
351+
// honoring per-site TenantSite.config overrides.
352+
privilegedSiteIDs, err := common.GetPrivilegedAccessSiteIDsForTenant(ctx, nil, gaemh.dbSession, tenant)
351353
if err != nil {
352-
logger.Error().Err(err).Msg("error resolving TargetedInstanceCreation for Tenant")
354+
logger.Error().Err(err).Msg("error resolving privileged Site access for Tenant")
353355
return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to resolve Tenant capability due to DB error", nil)
354356
}
355-
if privileged {
356-
// Get IDs for all Sites the privileged Tenant has an access with
357-
tenantSiteDAO := cdbm.NewTenantSiteDAO(gaemh.dbSession)
358-
tenantSites, _, err := tenantSiteDAO.GetAll(ctx, nil, cdbm.TenantSiteFilterInput{TenantIDs: []uuid.UUID{tenant.ID}}, paginator.PageInput{Limit: cutil.GetPtr(math.MaxInt)}, nil)
359-
if err != nil {
360-
logger.Error().Err(err).Msg("error retrieving Tenant Sites from DB")
361-
return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Tenant Sites due to DB error", nil)
362-
}
363-
364-
for _, tenantSite := range tenantSites {
365-
filterInput.SiteIDs = append(filterInput.SiteIDs, tenantSite.SiteID)
366-
}
367-
}
357+
filterInput.SiteIDs = append(filterInput.SiteIDs, privilegedSiteIDs...)
368358
}
369359

370360
siteIDStr := c.QueryParam("siteId")
@@ -388,7 +378,7 @@ func (gaemh GetAllExpectedMachineHandler) Handle(c echo.Context) error {
388378
}
389379

390380
if !isAssociated && tenant != nil {
391-
// We've already populated the filter with Providers the Tenant has an account with
381+
// filterInput.SiteIDs already holds the Tenant's effective privileged Sites.
392382
isAssociated = slices.Contains(filterInput.SiteIDs, site.ID)
393383
}
394384

rest-api/api/pkg/api/handler/site.go

Lines changed: 6 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -886,43 +886,15 @@ func (gash GetAllSiteHandler) Handle(c echo.Context) error {
886886
tsMap[ts.SiteID] = &ts
887887
}
888888

889-
// If Tenant has TargetedInstanceCreation on any Ready TenantAccount,
890-
// also retrieve all Sites from Providers where that capability is enabled.
891-
privileged, serr := common.TenantHasTargetedInstanceCreation(ctx, nil, gash.dbSession, tenant, nil)
889+
// Add the Sites where the Tenant has effective TargetedInstanceCreation,
890+
// honoring per-site TenantSite.config overrides.
891+
privilegedSiteIDs, serr := common.GetPrivilegedAccessSiteIDsForTenant(ctx, nil, gash.dbSession, tenant)
892892
if serr != nil {
893-
logger.Error().Err(serr).Msg("error resolving TargetedInstanceCreation for Tenant")
893+
logger.Error().Err(serr).Msg("error resolving privileged Site access for Tenant")
894894
return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to resolve Tenant capability, DB error", nil)
895895
}
896-
if privileged {
897-
taDAO := cdbm.NewTenantAccountDAO(gash.dbSession)
898-
tas, _, serr := taDAO.GetAll(ctx, nil, cdbm.TenantAccountFilterInput{
899-
TenantIDs: []uuid.UUID{tenant.ID},
900-
Statuses: []string{cdbm.TenantAccountStatusReady},
901-
}, cdbp.PageInput{Limit: cutil.GetPtr(cdbp.TotalLimit)}, nil)
902-
if serr != nil {
903-
logger.Error().Err(serr).Msg("error retrieving Tenant Accounts for privileged Tenant")
904-
return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Tenant Accounts", nil)
905-
}
906-
907-
if len(tas) > 0 {
908-
providerIDs := make([]uuid.UUID, 0, len(tas))
909-
for _, ta := range tas {
910-
if ta.Config.TargetedInstanceCreation {
911-
providerIDs = append(providerIDs, ta.InfrastructureProviderID)
912-
}
913-
}
914-
915-
if len(providerIDs) > 0 {
916-
providerSites, _, serr := stDAO.GetAll(ctx, nil, cdbm.SiteFilterInput{InfrastructureProviderIDs: providerIDs}, paginator.PageInput{Limit: cutil.GetPtr(cdbp.TotalLimit)}, nil)
917-
if serr != nil {
918-
logger.Error().Err(serr).Msg("error retrieving Sites for Providers from Tenant Accounts")
919-
return cutil.NewAPIErrorResponse(c, http.StatusInternalServerError, "Failed to retrieve Sites for one or more Providers", nil)
920-
}
921-
for _, site := range providerSites {
922-
siteIDs.Add(site.ID)
923-
}
924-
}
925-
}
896+
for _, siteID := range privilegedSiteIDs {
897+
siteIDs.Add(siteID)
926898
}
927899
}
928900

rest-api/db/pkg/db/model/tenantsite.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,12 @@ func (tssd TenantSiteSQLDAO) Update(ctx context.Context, tx *db.Tx, input Tenant
295295
ID: input.TenantSiteID,
296296
}
297297

298+
// Validate mutually exclusive inputs before applying any write so a
299+
// rejected request cannot leave the row partially updated.
300+
if input.Config != nil && input.RemoveTargetedInstanceCreation {
301+
return nil, errors.Wrap(db.ErrInvalidParams, "Config and RemoveTargetedInstanceCreation are mutually exclusive")
302+
}
303+
298304
updatedFields := []string{}
299305

300306
if input.EnableSerialConsole != nil {
@@ -312,10 +318,6 @@ func (tssd TenantSiteSQLDAO) Update(ctx context.Context, tx *db.Tx, input Tenant
312318
}
313319
}
314320

315-
if input.Config != nil && input.RemoveTargetedInstanceCreation {
316-
return nil, errors.Wrap(db.ErrInvalidParams, "Config and RemoveTargetedInstanceCreation are mutually exclusive")
317-
}
318-
319321
switch {
320322
case input.Config != nil:
321323
_, err := db.GetIDB(tx, tssd.dbSession).NewUpdate().

rest-api/db/pkg/db/model/tenantsite_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ func TestTenantSiteSQLDAO_GetAll(t *testing.T) {
286286

287287
sites := []*Site{}
288288
siteCount := 30
289-
for i := 0; i < siteCount; i++ {
289+
for i := range siteCount {
290290
site := TestBuildSite(t, dbSession, ip, fmt.Sprintf("test-site-%d", i), ipu)
291291
sites = append(sites, site)
292292
if i%2 == 0 {

rest-api/workflow/pkg/activity/dpuextensionservice/dpuextensionservice_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func TestManageDpuExtensionService_UpdateDpuExtensionServicesInDB(t *testing.T)
9797

9898
// Build test user and tenant
9999
user := util.TestBuildUser(t, dbSession, uuid.NewString(), []string{"test-org"}, []string{"ADMIN"})
100-
tenant := util.TestBuildTenant(t, dbSession, "test-tenant", "test-org", user)
100+
tenant := util.TestBuildTenant(t, dbSession, "test-org", "test-tenant", user)
101101

102102
st := util.TestBuildSite(t, dbSession, ip, "test-site", cdbm.SiteStatusRegistered, nil, user)
103103
st2 := util.TestBuildSite(t, dbSession, ip, "test-site-2", cdbm.SiteStatusRegistered, nil, user)

0 commit comments

Comments
 (0)