Skip to content

Commit 7edf624

Browse files
authored
Merge pull request #1206 from navikt/bygger-formio-api-kubernetes-service-discovery
Bygger backend - Formio API kubernetes service discovery
2 parents d9c471a + 296d8b8 commit 7edf624

File tree

16 files changed

+90
-38
lines changed

16 files changed

+90
-38
lines changed

.nais/bygger/nais.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,14 @@ spec:
4848
value: {{skjemabygging-proxy-url}}
4949
- name: SKJEMABYGGING_PROXY_CLIENT_ID
5050
value: {{skjemabygging-proxy-client-id}}
51+
- name: FORMIO_API_SERVICE
52+
value: http://formio-api
5153
- name: FORMIO_PROJECT_NAME
5254
value: jvcemxwcpghcqjn
55+
{{#each environmentVars}}
56+
- name: {{this.name}}
57+
value: {{this.value}}
58+
{{/each}}
5359
envFrom:
5460
{{#each secrets as |secret|}}
5561
- secret: {{secret}}

.nais/bygger/preprod-alt.yaml

+12-1
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,21 @@ accessPolicy:
1414
- application: skjemabygging-proxy
1515
namespace: skjemadigitalisering
1616
cluster: dev-fss
17+
- application: formio-api
18+
namespace: skjemadigitalisering
19+
cluster: dev-gcp
20+
- application: formio-enterprise-server
21+
namespace: skjemadigitalisering
22+
cluster: dev-gcp
1723
external:
1824
- host: fyllut-preprod-alt.intern.dev.nav.no
1925
- host: skjemabygging-proxy.dev-fss-pub.nais.io
2026
secrets:
2127
- formio-server-access-dev
2228
- bygger-pusher-dev
23-
- github-app-installation
29+
- github-app-installation
30+
environmentVars:
31+
- name: FORMIO_API_SERVICE_PROD
32+
value: http://formio-enterprise-server
33+
- name: FORMIO_PROJECT_NAME_PROD
34+
value: jvcemxwcpghcqjn

.nais/bygger/preprod.yaml

+11
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,21 @@ accessPolicy:
1717
- application: skjemabygging-proxy
1818
namespace: skjemadigitalisering
1919
cluster: dev-fss
20+
- application: formio-api
21+
namespace: skjemadigitalisering
22+
cluster: dev-gcp
23+
- application: formio-enterprise-server
24+
namespace: skjemadigitalisering
25+
cluster: dev-gcp
2026
external:
2127
- host: fyllut-preprod.intern.dev.nav.no
2228
- host: skjemabygging-proxy.dev-fss-pub.nais.io
2329
secrets:
2430
- formio-server-access-dev
2531
- bygger-pusher-dev
2632
- github-app-installation
33+
environmentVars:
34+
- name: FORMIO_API_SERVICE_PROD
35+
value: http://formio-enterprise-server
36+
- name: FORMIO_PROJECT_NAME_PROD
37+
value: jvcemxwcpghcqjn

.nais/bygger/prod.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ accessPolicy:
1717
- application: skjemabygging-proxy
1818
namespace: skjemadigitalisering
1919
cluster: prod-fss
20+
- application: formio-api
21+
namespace: skjemadigitalisering
22+
cluster: prod-gcp
2023
external:
2124
- host: skjemabygging-proxy.prod-fss-pub.nais.io
2225
secrets:
2326
- formio-server-access
2427
- bygger-pusher
2528
- github-app-installation
29+
environmentVars: []

packages/bygger-backend/src/config/development.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export const devSkjemabyggingProxy: Partial<SkjemabyggingProxyConfig> = {
2020
};
2121

2222
export const devFormio: Partial<FormioConfig> = {
23-
projectUrl: 'https://formio-api.intern.dev.nav.no/jvcemxwcpghcqjn',
23+
apiService: 'https://formio-api.intern.dev.nav.no',
2424
projectName: 'jvcemxwcpghcqjn',
2525
roleIds: {
2626
administrator: '628ca77305690db58c974d04',
@@ -29,8 +29,9 @@ export const devFormio: Partial<FormioConfig> = {
2929
},
3030
};
3131

32-
export const prodFormio: Pick<FormioConfig, 'projectUrl'> = {
33-
projectUrl: 'https://formio-api-server.ekstern.dev.nav.no/jvcemxwcpghcqjn',
32+
export const prodFormio: Pick<FormioConfig, 'apiService' | 'projectName'> = {
33+
apiService: 'https://formio-api-server.ekstern.dev.nav.no',
34+
projectName: 'jvcemxwcpghcqjn',
3435
};
3536

3637
export const devFyllut: FyllutConfig = {

packages/bygger-backend/src/config/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ const config: ConfigType = {
6464
installationId: env('GITHUB_APP_INSTALLATION_ID'),
6565
},
6666
formio: {
67-
projectUrl: env('FORMIO_PROJECT_URL', devFormio.projectUrl),
67+
apiService: env('FORMIO_API_SERVICE', devFormio.apiService),
6868
projectName: env('FORMIO_PROJECT_NAME', devFormio.projectName),
6969
projectId: env('FORMIO_PROJECT_ID'),
7070
roleIds: {
@@ -80,7 +80,8 @@ const config: ConfigType = {
8080
prodFormio:
8181
naisClusterName !== 'prod-gcp'
8282
? {
83-
projectUrl: env('FORMIO_PROJECT_URL_PROD', prodFormio.projectUrl),
83+
apiService: env('FORMIO_API_SERVICE_PROD', prodFormio.apiService),
84+
projectName: env('FORMIO_PROJECT_NAME_PROD', prodFormio.projectName),
8485
}
8586
: undefined,
8687
fyllut: {

packages/bygger-backend/src/config/types.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export type PublishRepoConfig = {
2121
};
2222

2323
export type FormioConfig = {
24-
projectUrl: string;
24+
apiService: string;
2525
projectName: string;
2626
projectId: string;
2727
roleIds: Record<string, string>;
@@ -55,7 +55,7 @@ export type ConfigType = {
5555
skjemabyggingProxy: SkjemabyggingProxyConfig;
5656
publishRepo: PublishRepoConfig;
5757
formio: FormioConfig;
58-
prodFormio?: Pick<FormioConfig, 'projectUrl'>;
58+
prodFormio?: Pick<FormioConfig, 'apiService' | 'projectName'>;
5959
fyllut: FyllutConfig;
6060
pusher: PusherConfig;
6161
githubApp: GithubAppConfig;

packages/bygger-backend/src/routers/api/helpers/authorizedPublisher.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import nock from 'nock';
2-
import config from '../../../config';
32
import { mockRequest, mockResponse } from '../../../test/testHelpers';
3+
import { getFormioApiServiceUrl } from '../../../util/formio';
44
import authorizedPublisher from './authorizedPublisher';
55

66
describe('authorizedPublisher', () => {
7-
const projectUrl = config.formio.projectUrl;
7+
const projectUrl = getFormioApiServiceUrl();
88

99
beforeAll(() => {
1010
vi.spyOn(console, 'error').mockImplementation(() => {});

packages/bygger-backend/src/routers/formio-proxy/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import express from 'express';
22
import httpProxy from 'http-proxy';
3-
import config from '../../config';
43
import { logger } from '../../logging/logger';
4+
import { getFormioApiServiceUrl } from '../../util/formio';
55

6-
const formioProjectUrl = config.formio.projectUrl;
6+
const formioProjectUrl = getFormioApiServiceUrl();
77
const proxy = httpProxy.createProxyServer({});
88

99
const formioProxyRouter = express.Router();

packages/bygger-backend/src/services/PublisherService.test.ts

+12-10
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import { NavFormType } from '@navikt/skjemadigitalisering-shared-domain';
22
import nock from 'nock';
33
import { MockInstance } from 'vitest';
44
import { Backend } from '../Backend';
5-
import config from '../config';
5+
import { getFormioApiServiceUrl } from '../util/formio';
66
import PublisherService from './PublisherService';
77
import { formioService } from './index';
88

99
const opts = { userName: 'todd', formioToken: 'valid-formio-token' };
1010

11+
const FORMIO_API_SERVICE_URL = getFormioApiServiceUrl();
12+
1113
describe('PublisherService', () => {
1214
let publisherService: PublisherService;
1315

@@ -26,7 +28,7 @@ describe('PublisherService', () => {
2628
beforeEach(() => {
2729
backendMock = { publishForm: () => 'git-commit-hash' } as unknown as Backend;
2830
publisherService = new PublisherService(formioService, backendMock);
29-
nockScope = nock(config.formio.projectUrl)
31+
nockScope = nock(FORMIO_API_SERVICE_URL)
3032
.put(/\/form\/(\d*)$/)
3133
.times(1)
3234
.reply((uri, requestBody) => [200, requestBody]);
@@ -99,7 +101,7 @@ describe('PublisherService', () => {
99101
} as unknown as Backend;
100102
publisherService = new PublisherService(formioService, backendMock);
101103
formioServiceSpy = vi.spyOn(formioService, 'saveForm');
102-
nockScope = nock(config.formio.projectUrl)
104+
nockScope = nock(FORMIO_API_SERVICE_URL)
103105
.put(/\/form\/(\d*)$/)
104106
.times(2)
105107
.reply((uri, requestBody) => {
@@ -160,7 +162,7 @@ describe('PublisherService', () => {
160162
beforeEach(() => {
161163
backendMock = { unpublishForm: () => testGitSha } as unknown as Backend;
162164
publisherService = new PublisherService(formioService, backendMock);
163-
nockScope = nock(config.formio.projectUrl)
165+
nockScope = nock(FORMIO_API_SERVICE_URL)
164166
.put(/\/form\/(\d*)$/)
165167
.times(1)
166168
.reply((uri, requestBody) => [200, requestBody]);
@@ -197,7 +199,7 @@ describe('PublisherService', () => {
197199
},
198200
} as unknown as Backend;
199201
publisherService = new PublisherService(formioService, backendMock);
200-
nockScope = nock(config.formio.projectUrl)
202+
nockScope = nock(FORMIO_API_SERVICE_URL)
201203
.put(/\/form\/(\d*)$/)
202204
.times(2)
203205
.reply((uri, requestBody) => {
@@ -266,7 +268,7 @@ describe('PublisherService', () => {
266268
formioApiRequestBodies = [];
267269
backendMock = { publishForms: () => testGitSha } as unknown as Backend;
268270
publisherService = new PublisherService(formioService, backendMock);
269-
nockScope = nock(config.formio.projectUrl)
271+
nockScope = nock(FORMIO_API_SERVICE_URL)
270272
.put(/\/form\/(\d*)$/)
271273
.times(3)
272274
.reply((uri, requestBody) => {
@@ -338,7 +340,7 @@ describe('PublisherService', () => {
338340
},
339341
} as unknown as Backend;
340342
publisherService = new PublisherService(formioService, backendMock);
341-
nockScope = nock(config.formio.projectUrl)
343+
nockScope = nock(FORMIO_API_SERVICE_URL)
342344
.put(/\/form\/(\d*)$/)
343345
.times(6) // 3 before publish, and 3 after publish fails
344346
.reply((uri, requestBody) => {
@@ -405,20 +407,20 @@ describe('PublisherService', () => {
405407
backendMock = { publishForms: () => '123456789' } as unknown as Backend;
406408
publisherService = new PublisherService(formioService, backendMock);
407409
const formEndpoint = /\/form\/(\d*)$/;
408-
nockScope = nock(config.formio.projectUrl)
410+
nockScope = nock(FORMIO_API_SERVICE_URL)
409411
.put(formEndpoint)
410412
.times(2) // <-- formio update props succeeds on first two forms
411413
.reply((uri, requestBody) => {
412414
formioApiRequestBodies.push(requestBody as NavFormType);
413415
return [200, requestBody];
414416
});
415-
nockScope = nock(config.formio.projectUrl)
417+
nockScope = nock(FORMIO_API_SERVICE_URL)
416418
.put(formEndpoint)
417419
.reply((uri, requestBody) => {
418420
formioApiRequestBodies.push(requestBody as NavFormType);
419421
return [500, 'Internal server error']; // <-- formio update props fails on third form
420422
});
421-
nockScope = nock(config.formio.projectUrl)
423+
nockScope = nock(FORMIO_API_SERVICE_URL)
422424
.put(formEndpoint)
423425
.times(2) // <-- expecting rollback of the two first forms
424426
.reply((uri, requestBody) => {

packages/bygger-backend/src/services/ReportService.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Component, FormPropertiesType, NavFormType } from '@navikt/skjemadigita
22
import MemoryStream from 'memorystream';
33
import nock from 'nock';
44
import { ComponentProperties } from '../../../shared-domain/src/form';
5-
import config from '../config';
5+
import { getFormioApiServiceUrl } from '../util/formio';
66
import ReportService from './ReportService';
77
import { formioService } from './index';
88

@@ -52,7 +52,7 @@ describe('ReportService', () => {
5252
const createWritableStream = () => new MemoryStream(undefined, { readable: false });
5353

5454
const setupNock = (publishedForms: Partial<NavFormType>[]) => {
55-
nockScope = nock(config.formio.projectUrl)
55+
nockScope = nock(getFormioApiServiceUrl())
5656
.get(/\/form\?.*$/)
5757
.times(1)
5858
.reply(200, publishedForms);

packages/bygger-backend/src/services/formioService.test.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import { NavFormType } from '@navikt/skjemadigitalisering-shared-domain';
22
import nock from 'nock';
3-
import config from '../config';
3+
import { getFormioApiServiceUrl } from '../util/formio';
44
import { formioService } from './index';
55

6+
const FORMIO_API_SERVICE_URL = getFormioApiServiceUrl();
7+
68
describe('FormioService', () => {
79
describe('saveForm', () => {
810
describe('props modified and modifiedBy', () => {
@@ -36,7 +38,7 @@ describe('FormioService', () => {
3638
} as NavFormType;
3739

3840
beforeEach(() => {
39-
nock(config.formio.projectUrl)
41+
nock(FORMIO_API_SERVICE_URL)
4042
.put(/\/form\/(\d*)$/)
4143
.reply((uri, requestBody) => [200, requestBody]);
4244
});
@@ -82,7 +84,7 @@ describe('FormioService', () => {
8284

8385
describe('http error from formio api', () => {
8486
beforeEach(() => {
85-
nock(config.formio.projectUrl)
87+
nock(FORMIO_API_SERVICE_URL)
8688
.put(/\/form\/(\d*)$/)
8789
.reply(500);
8890
vi.spyOn(console, 'error').mockImplementation(() => {});
@@ -112,7 +114,7 @@ describe('FormioService', () => {
112114

113115
describe('saveForms', () => {
114116
beforeEach(() => {
115-
nock(config.formio.projectUrl)
117+
nock(FORMIO_API_SERVICE_URL)
116118
.put(/\/form\/(\d*)$/)
117119
.times(2)
118120
.reply((uri, requestBody) => [200, requestBody]);
@@ -139,7 +141,7 @@ describe('FormioService', () => {
139141
});
140142

141143
it('sets default properties', async () => {
142-
nock(config.formio.projectUrl)
144+
nock(FORMIO_API_SERVICE_URL)
143145
.post('/form')
144146
.reply((uri, requestBody) => [200, requestBody]);
145147
const skjemanummer = 'NAV 01-00.00';
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import { Backend } from '../Backend';
22
import config from '../config';
3+
import { getFormioApiProdServiceUrl, getFormioApiServiceUrl } from '../util/formio';
34
import PublisherService from './PublisherService';
45
import PusherService from './PusherService';
56
import ReportService from './ReportService';
67
import { createCopyService } from './copy/CopyService';
78
import { FormioService } from './formioService';
89

9-
const formioService = new FormioService(config.formio.projectUrl);
10+
const formioApiServiceUrl = getFormioApiServiceUrl();
11+
const prodFormioApiServiceUrl = getFormioApiProdServiceUrl();
12+
13+
const formioService = new FormioService(formioApiServiceUrl);
1014

1115
const backendInstance = new Backend(config, formioService);
1216

@@ -16,8 +20,8 @@ const reportService = new ReportService(formioService);
1620

1721
const pusherService = new PusherService();
1822

19-
const copyService = config.prodFormio?.projectUrl
20-
? createCopyService(new FormioService(config.prodFormio.projectUrl), formioService)
23+
const copyService = prodFormioApiServiceUrl
24+
? createCopyService(new FormioService(prodFormioApiServiceUrl), formioService)
2125
: null;
2226

2327
export { backendInstance, copyService, formioService, publisherService, pusherService, reportService };

packages/bygger-backend/src/test/test.env

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
FORMIO_PROJECT_URL=http://formio-api-server.unittest.nav.no
2+
FORMIO_PROJECT_NAME=abcd1234
3+
FORMIO_API_SERVICE=http://formio-api-server.unittest.nav.no
24

35
AZURE_APP_CLIENT_ID=a123456789
46
AZURE_APP_CLIENT_SECRET=klis4Q353qF4
@@ -11,4 +13,4 @@ GITHUB_CLIENT_SECRET=secret
1113
GITHUB_CLIENT_ID=Iv1.abcd1234
1214
GITHUB_APP_ID=1234
1315
GITHUB_APP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nqewopeopwpowerkowerkw\n-----END RSA PRIVATE KEY-----"
14-
GITHUB_APP_INSTALLATION_ID=123456
16+
GITHUB_APP_INSTALLATION_ID=123456
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import config from '../config';
2+
3+
const { formio, prodFormio } = config;
4+
5+
export const getFormioApiServiceUrl = () => `${formio.apiService}/${formio.projectName}`;
6+
export const getFormioApiProdServiceUrl = () => {
7+
if (prodFormio) {
8+
return `${prodFormio.apiService}/${prodFormio.projectName}`;
9+
}
10+
return undefined;
11+
};

packages/bygger-backend/testTools/backend/testUtils.js

+2-5
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,9 @@ import { FormioService } from '../../src/services/formioService';
33

44
const { Response } = await vi.importActual('node-fetch');
55

6-
const FORMIO_PROJECT_URL = 'https://projectApi.example.com';
6+
const FORMIO_API_SERVICE_URL = 'https://projectApi.example.com';
77

88
export const configForTest = {
9-
formio: {
10-
projectUrl: FORMIO_PROJECT_URL,
11-
},
129
publishRepo: {
1310
owner: 'publish-repo-owner',
1411
name: 'publish-repo',
@@ -25,7 +22,7 @@ export const configForTest = {
2522
};
2623

2724
export const createBackendForTest = () => {
28-
return new Backend(configForTest, new FormioService(FORMIO_PROJECT_URL));
25+
return new Backend(configForTest, new FormioService(FORMIO_API_SERVICE_URL));
2926
};
3027

3128
export const jsonToPromise = (json) => Promise.resolve(new Response(JSON.stringify(json)));

0 commit comments

Comments
 (0)