Skip to content
This repository has been archived by the owner on Jul 4, 2024. It is now read-only.

Commit

Permalink
[HOTFIX] fix tenant regions (#3706)
Browse files Browse the repository at this point in the history
* Fix tenant regions (#3705)

* Fixes with unit tests

* e2e test

* charts

* values.yaml

* lint and fixes

* update versions
  • Loading branch information
alextargov authored Mar 7, 2024
1 parent 6ad67db commit 5e3cb09
Show file tree
Hide file tree
Showing 13 changed files with 41 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ spec:
value: "{{ (index .Values.global.tenants 40).id }}"
- name: APP_ON_DEMAND_TENANT
value: {{ .Values.global.tests.tenantFetcher.missingTenantOnDemandID }}
- name: APP_TENANT_REGION
value: {{ .Values.global.tests.tenantFetcher.tenantRegion }}
- name: APP_CA_CERT
valueFrom:
secretKeyRef:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ spec:
value: {{ .Values.global.tests.selfRegistration.region }}
- name: APP_ON_DEMAND_TENANT
value: {{ .Values.global.tests.tenantFetcher.missingTenantOnDemandID }}
- name: APP_TENANT_REGION
value: {{ .Values.global.tests.tenantFetcher.tenantRegion }}
- name: APP_TENANT_REGION_PREFIX
value: {{ .Values.global.tests.tenantFetcher.tenantRegionPrefix }}
restartPolicy: Never
---
apiVersion: v1
Expand Down
14 changes: 8 additions & 6 deletions chart/compass/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,8 @@ global:
version: "v20240301-97563d8f"
name: compass-pairing-adapter
director:
dir: prod/incubator/
version: "v20240301-1a4c377a"
dir: dev/incubator/
version: "PR-3706"
name: compass-director
hydrator:
dir: prod/incubator/
Expand Down Expand Up @@ -222,16 +222,16 @@ global:
dir:
version: "0a651695"
external_services_mock:
dir: prod/incubator/
version: "v20240228-bbf7843b"
dir: dev/incubator/
version: "PR-3706"
name: compass-external-services-mock
console:
dir: prod/incubator/
version: "v20230421-e8840c18"
name: compass-console
e2e_tests:
dir: prod/incubator/
version: "v20240229-e395d039"
dir: dev/incubator/
version: "PR-3706"
name: compass-e2e-tests
isLocalEnv: false
isForTesting: false
Expand Down Expand Up @@ -1310,6 +1310,8 @@ global:
tenantFetcher:
tenantOnDemandID: "8d42d818-d4c4-4036-b82f-b199db7ffeb5"
missingTenantOnDemandID: "subaccount-external-tnt"
tenantRegion: "us-1"
tenantRegionPrefix: "cf-"
region: "eu-1"
region2: "eu-2"
ordAggregator:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,9 +243,10 @@ func (ts *TenantsSynchronizer) SynchronizeTenant(ctx context.Context, parentTena
return ts.creator.CreateTenants(ctx, []model.BusinessTenantMappingInput{fetchedTenant})
}

for _, fetchedTenant := range fetchedTenants {
for idx := range fetchedTenants {
fetchedTenant := fetchedTenants[idx]
if fetchedTenant.Region != "" {
fetchedTenant.Region = ts.config.RegionPrefix + fetchedTenant.Region
fetchedTenants[idx].Region = ts.config.RegionPrefix + fetchedTenant.Region
}

if len(fetchedTenant.Parents) == 0 && fetchedTenant.Type != string(tenant.CostObject) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,7 @@ func TestTenantsSynchronizer_SynchronizeTenant(t *testing.T) {

jobCfg := resync.JobConfig{
TenantProvider: resync.TenantOnDemandProvider,
RegionPrefix: "cf-",
}

newSubaccountTenant := model.BusinessTenantMappingInput{ExternalTenant: newTenantID, Parents: []string{parentTenantID}, Region: region, Type: string(tenant.Subaccount)}
Expand Down Expand Up @@ -539,6 +540,7 @@ func TestTenantsSynchronizer_SynchronizeTenant(t *testing.T) {
svc := &automock.TenantCreator{}
tenantWithExistingParent := newSubaccountTenant
tenantWithExistingParent.Parents = []string{parentTenantID}
tenantWithExistingParent.Region = jobCfg.RegionPrefix + tenantWithExistingParent.Region
svc.On("FetchTenants", ctx, newTenantID).Return([]model.BusinessTenantMappingInput{newSubaccountTenant}, nil)
svc.On("CreateTenants", ctx, []model.BusinessTenantMappingInput{tenantWithExistingParent}).Return(nil)
return svc
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,10 +151,11 @@ func (tm *TenantsManager) FetchTenants(ctx context.Context, externalTenantID str
return
}

for _, tnt := range createdRegionalTenants {
for idx := range createdRegionalTenants {
tnt := createdRegionalTenants[idx]
log.C(ctx).Infof("Tenant %q found in region %s", tnt.ExternalTenant, region)
if tnt.Region == "" {
tnt.Region = region
createdRegionalTenants[idx].Region = region
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -738,6 +738,8 @@ func TestTenantManager_FetchTenant(t *testing.T) {
busTenant := fixBusinessTenantMappingInputWithCostObjectID("1", provider, "subdomain-1", region, "", tenant.Subaccount, &testLicenseType, &costObjectID)
costObjTenant := fixBusinessTenantMappingInputWithCostObjectType("id-here", provider, "", "", "", tenant.CostObject, &testLicenseType, &costObjectType)
costObjTenant.Parents = []string{}
regionalCostObjTenant := fixBusinessTenantMappingInputWithCostObjectType("id-here", provider, "", centralRegion, "", tenant.CostObject, &testLicenseType, &costObjectType)
regionalCostObjTenant.Parents = []string{}

event := fixEvent(t, "Subaccount", busTenant.Parents[0], eventFieldsFromTenant(tenant.Subaccount, jobConfig.APIConfig.TenantFieldMapping, busTenant, eventAdditionalFields))

Expand Down Expand Up @@ -804,7 +806,7 @@ func TestTenantManager_FetchTenant(t *testing.T) {

return details, []*automock.EventAPIClient{client}
},
expectedTenant: []model.BusinessTenantMappingInput{busTenant, costObjTenant},
expectedTenant: []model.BusinessTenantMappingInput{busTenant, regionalCostObjTenant},
},
{
name: "[Temporary] Success when tenant is not found",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ type TenantFieldMapping struct {
DiscriminatorField string `envconfig:"MAPPING_FIELD_DISCRIMINATOR"`
DiscriminatorValue string `envconfig:"MAPPING_VALUE_DISCRIMINATOR"`

RegionField string `envconfig:"MAPPING_FIELD_REGION" default:"APP_MAPPING_FIELD_REGION"`
RegionField string `envconfig:"MAPPING_FIELD_REGION" default:"region"`
EntityIDField string `envconfig:"MAPPING_FIELD_ENTITY_ID" default:"entityId"`
EntityTypeField string `envconfig:"MAPPING_FIELD_ENTITY_TYPE" default:"entityType"`
LicenseTypeField string `envconfig:"MAPPING_FIELD_LICENSE_TYPE" default:"licenseType"`
Expand Down
3 changes: 2 additions & 1 deletion components/external-services-mock/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ type config struct {
TrustedTenant string `envconfig:"APP_TRUSTED_TENANT"`
TrustedNewGA string `envconfig:"APP_TRUSTED_NEW_GA"`
OnDemandTenant string `envconfig:"APP_ON_DEMAND_TENANT"`
TenantRegion string `envconfig:"APP_TENANT_REGION"`

KeyLoaderConfig credloader.KeysConfig

Expand Down Expand Up @@ -306,7 +307,7 @@ func initDefaultServer(cfg config, keyCache credloader.KeysCache, key *rsa.Priva

// Tenant fetcher handlers
allowedSubaccounts := []string{cfg.OnDemandTenant, cfg.TenantConfig.TestTenantOnDemandID}
tenantFetcherHandler := tenantfetcher.NewHandler(allowedSubaccounts, cfg.DefaultTenant, cfg.DefaultCustomerTenant)
tenantFetcherHandler := tenantfetcher.NewHandler(allowedSubaccounts, cfg.DefaultTenant, cfg.DefaultCustomerTenant, cfg.TenantRegion)

router.Methods(http.MethodPost).PathPrefix("/tenant-fetcher/global-account-create/configure").HandlerFunc(tenantFetcherHandler.HandleConfigure(tenantfetcher.AccountCreationEventType))
router.Methods(http.MethodDelete).PathPrefix("/tenant-fetcher/global-account-create/reset").HandlerFunc(tenantFetcherHandler.HandleReset(tenantfetcher.AccountCreationEventType))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,17 @@ type Handler struct {
allowedTenantOnDemandIDs []string
defaultTenantID string
defaultCustomerTenantID string
tenantRegion string
}

func NewHandler(allowedTenantOnDemandIDs []string, defaultTenantID, defaultCustomerTenantID string) *Handler {
func NewHandler(allowedTenantOnDemandIDs []string, defaultTenantID, defaultCustomerTenantID, tenantRegion string) *Handler {
return &Handler{
mutex: sync.Mutex{},
mockedEvents: make(map[string][][]byte),
allowedTenantOnDemandIDs: allowedTenantOnDemandIDs,
defaultTenantID: defaultTenantID,
defaultCustomerTenantID: defaultCustomerTenantID,
tenantRegion: tenantRegion,
}
}

Expand Down Expand Up @@ -146,7 +148,7 @@ func (s *Handler) getMockEventForSubaccount(tenantOnDemandID string) []byte {
}`

if slices.Contains(s.allowedTenantOnDemandIDs, tenantOnDemandID) {
mockedEvent := fmt.Sprintf(mockSubaccountEventPattern, tenantOnDemandID, "Subaccount on demand", "subdomain", "LICENSETYPE", s.defaultTenantID, "region", s.defaultCustomerTenantID, s.defaultTenantID)
mockedEvent := fmt.Sprintf(mockSubaccountEventPattern, tenantOnDemandID, "Subaccount on demand", "subdomain", "LICENSETYPE", s.defaultTenantID, s.tenantRegion, s.defaultCustomerTenantID, s.defaultTenantID)
return []byte(mockedEvent)
}
return []byte(emptyTenantProviderResponse)
Expand Down
2 changes: 2 additions & 0 deletions installation/resources/compass-overrides-local.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ global:
enabled: true
api:
regionName: "central"
regionPrefix: "cf-"
authConfigSecretKey: "central"
endpoints:
subaccountCreated: "http://compass-external-services-mock.compass-system.svc.cluster.local:8080/tenant-fetcher/subaccount-create"
Expand All @@ -210,6 +211,7 @@ global:
labelsField: "labels"
subaccountCostObjectIDField: "costObjectId"
subaccountCostObjectTypeField: "costObjectType"
regionField: "region"
kubernetes:
configMapNamespace: "compass-system"
pollInterval: "2s"
Expand Down
3 changes: 3 additions & 0 deletions tests/tenant-fetcher/tests/handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1318,10 +1318,13 @@ func TestGetSubaccountOnDemandIfMissing(t *testing.T) {

t.Logf("Retrieving tenant %q by external id", subaccountExternalTenant)
subaccount, err := fixtures.GetTenantByExternalID(certSecuredGraphQLClient, subaccountExternalTenant)
region, regionExists := subaccount.Labels[tenantfetcher.RegionKey]

require.NoError(t, err)
require.NotNil(t, subaccount)
require.Equal(t, subaccount.ID, subaccountExternalTenant)
require.True(t, regionExists)
require.Equal(t, region, config.TenantRegionPrefix+config.TenantRegion)

t.Log("TestGetSubaccountOnDemandIfMissing checks are successful")
}
Expand Down
5 changes: 4 additions & 1 deletion tests/tenant-fetcher/tests/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,10 @@ type testConfig struct {
CertLoaderConfig credloader.CertConfig
ExternalClientCertSecretName string `envconfig:"APP_EXTERNAL_CLIENT_CERT_SECRET_NAME"`
OnDemandTenant string `envconfig:"APP_ON_DEMAND_TENANT"`
GatewayOauth string `envconfig:"APP_GATEWAY_OAUTH"`
TenantRegion string `envconfig:"APP_TENANT_REGION"`
TenantRegionPrefix string `envconfig:"APP_TENANT_REGION_PREFIX"`

GatewayOauth string `envconfig:"APP_GATEWAY_OAUTH"`
}

type TenantProviderConfig struct {
Expand Down

0 comments on commit 5e3cb09

Please sign in to comment.