From c7d5a90366986021df62a1419b2b0dcb51046b4e Mon Sep 17 00:00:00 2001 From: chotai Date: Thu, 2 Jan 2025 11:02:37 +0100 Subject: [PATCH] Update lookup service to call portal-backend instead of GitHub --- .../controllers/deploy-terminal.js | 6 +- src/api/deploy/controllers/deploy-service.js | 4 +- .../deploy/helpers/lookup-tenant-service.js | 44 +++------ .../helpers/lookup-tenant-service.test.js | 98 ------------------- .../helpers/bulk-update-tf-svc-infra.js | 2 +- .../helpers/bulk-update-tf-svc-infra.test.js | 4 +- 6 files changed, 22 insertions(+), 136 deletions(-) delete mode 100644 src/api/deploy/helpers/lookup-tenant-service.test.js diff --git a/src/api/deploy-terminal/controllers/deploy-terminal.js b/src/api/deploy-terminal/controllers/deploy-terminal.js index 8c398f53..e8c4ec21 100644 --- a/src/api/deploy-terminal/controllers/deploy-terminal.js +++ b/src/api/deploy-terminal/controllers/deploy-terminal.js @@ -38,13 +38,13 @@ const deployTerminalController = { ) } - const tenant = await lookupTenantService( + const service = await lookupTenantService( payload.service, payload.environment, logger ) - if (!tenant?.zone) { + if (!service?.zone) { logger.error( `failed to find zone for ${payload.service} in ${payload.environment}` ) @@ -61,7 +61,7 @@ const deployTerminalController = { user, token, environment: payload.environment, - zone: tenant.zone, + zone: service.zone, service: payload.service }) diff --git a/src/api/deploy/controllers/deploy-service.js b/src/api/deploy/controllers/deploy-service.js index 2b003dd7..6081f21d 100644 --- a/src/api/deploy/controllers/deploy-service.js +++ b/src/api/deploy/controllers/deploy-service.js @@ -93,7 +93,7 @@ const deployServiceController = { service.zone, user, configLatestCommitSha, - service.service_code, + service.serviceCode, request ) @@ -109,7 +109,7 @@ const deployServiceController = { service.zone, user, configLatestCommitSha, - service.service_code, + service.serviceCode, shouldDeployByFile, logger ) diff --git a/src/api/deploy/helpers/lookup-tenant-service.js b/src/api/deploy/helpers/lookup-tenant-service.js index 852b14d4..ad766655 100644 --- a/src/api/deploy/helpers/lookup-tenant-service.js +++ b/src/api/deploy/helpers/lookup-tenant-service.js @@ -1,41 +1,27 @@ -import Joi from 'joi' - -import { getContent } from '~/src/helpers/github/get-content.js' import { config } from '~/src/config/index.js' - -const org = config.get('github.org') -const repo = config.get('github.repos.cdpTfSvcInfra') - -const schema = Joi.object({ - zone: Joi.string().valid('public', 'protected').required(), - service_code: Joi.any(), - mongo: Joi.boolean(), - redis: Joi.boolean(), - test_suite: Joi.string() -}).unknown(true) +import { fetcher } from '~/src/helpers/fetcher.js' +import Boom from '@hapi/boom' /** - * Get service from the multi-file version of tenants.json + * Get service from portal-backend * @param {string} service * @param {string} environment * @param {Logger} logger - * @param {string} ref * @returns {Promise} */ -async function lookupTenantService(service, environment, logger, ref = 'main') { - const filePath = `environments/${environment}/tenants/${service}.json` - try { - const data = await getContent(org, repo, filePath, ref) - if (!data) { - logger.warn(`Tenant environment file ${filePath} from GitHub not found`) - return undefined - } - const service = JSON.parse(data) - Joi.assert(service, schema) // Check file in correct format - return service - } catch (error) { - logger.error(error, `Error attempting to retrieve ${filePath} from GitHub`) +async function lookupTenantService(service, environment, logger) { + const url = `${config.get('portalBackendUrl')}/tenant-services/${service}/${environment}` + const response = await fetcher(url, { + method: 'get', + headers: { 'Content-Type': 'application/json' } + }) + const json = await response.json() + + if (response.ok) { + return json } + logger.error(`Service lookup failed: ${json.message}`) + throw Boom.boomify(new Error(json.message), { statusCode: response.status }) } export { lookupTenantService } diff --git a/src/api/deploy/helpers/lookup-tenant-service.test.js b/src/api/deploy/helpers/lookup-tenant-service.test.js deleted file mode 100644 index 8cf923b5..00000000 --- a/src/api/deploy/helpers/lookup-tenant-service.test.js +++ /dev/null @@ -1,98 +0,0 @@ -import { getContent } from '~/src/helpers/github/get-content.js' -import { config } from '~/src/config/index.js' -import { lookupTenantService } from '~/src/api/deploy/helpers/lookup-tenant-service.js' -import { createLogger } from '~/src/helpers/logging/logger.js' - -jest.mock('~/src/helpers/github/get-content', () => ({ - getContent: jest.fn() -})) -const mockGetContent = getContent -const logger = createLogger() - -describe('lookupTenantService', () => { - const org = config.get('github.org') - const repo = config.get('github.repos.cdpTfSvcInfra') - - afterEach(() => { - jest.clearAllMocks() - }) - - test('should get the tenant service from the single file version when present', async () => { - const tenant = { - zone: 'public', - mongo: false, - redis: true, - service_code: 'ABC' - } - - getContent.mockResolvedValue(JSON.stringify(tenant)) - - const result = await lookupTenantService('someService', 'dev', logger) - - expect(mockGetContent).toHaveBeenCalledWith( - org, - repo, - 'environments/dev/tenants/someService.json', - 'main' - ) - expect(result).toEqual(tenant) - }) - - test('should return nothing when the service doesnt exist', async () => { - getContent.mockResolvedValue(null) - - const result = await lookupTenantService('someService', 'dev', logger) - - expect(mockGetContent).toHaveBeenCalledTimes(1) - expect(result).toBeUndefined() - }) - - test('should use a different ref when specified', async () => { - const tenants = [ - { - someService: { - zone: 'public', - mongo: false, - redis: true, - service_code: 'ABC' - } - } - ] - - getContent - .mockReturnValueOnce(null) - .mockResolvedValue(JSON.stringify(tenants)) - - await lookupTenantService('someService', 'dev', logger, '87428fc5') - - expect(mockGetContent).toHaveBeenNthCalledWith( - 1, - org, - repo, - 'environments/dev/tenants/someService.json', - '87428fc5' - ) - }) - - test('should get the tenant service from the single file version when present even if it has extra fields', async () => { - const tenant = { - zone: 'public', - mongo: false, - redis: true, - service_code: 'ABC', - postgres: true - } - - getContent.mockResolvedValue(JSON.stringify(tenant)) - - const result = await lookupTenantService('someService', 'dev', logger) - - expect(mockGetContent).toHaveBeenCalledWith( - org, - repo, - 'environments/dev/tenants/someService.json', - 'main' - ) - expect(result).toEqual(tenant) - }) -}) diff --git a/src/listeners/github/helpers/bulk-update-tf-svc-infra.js b/src/listeners/github/helpers/bulk-update-tf-svc-infra.js index 882a7e71..20fe30e8 100644 --- a/src/listeners/github/helpers/bulk-update-tf-svc-infra.js +++ b/src/listeners/github/helpers/bulk-update-tf-svc-infra.js @@ -46,7 +46,7 @@ const bulkUpdateTfSvcInfra = async (db, trimmedWorkflow, status) => { const serviceName = serviceToUpdate.name let runMode = 'Service' - if (serviceToUpdate?.tenantConfig?.test_suite) { + if (serviceToUpdate?.tenantConfig?.testSuite) { runMode = 'Job' } diff --git a/src/listeners/github/helpers/bulk-update-tf-svc-infra.test.js b/src/listeners/github/helpers/bulk-update-tf-svc-infra.test.js index 9ab6e692..f691f42e 100644 --- a/src/listeners/github/helpers/bulk-update-tf-svc-infra.test.js +++ b/src/listeners/github/helpers/bulk-update-tf-svc-infra.test.js @@ -93,10 +93,8 @@ describe('bulkUpdateTtfSvcInfra', () => { } ]) lookupTenantService.mockResolvedValue({ - test_suite: 'test1', + testSuite: 'test1', zone: 'public', - mongo: false, - redis: false, service_code: 'TST' })