Skip to content

Commit 7fac10e

Browse files
committed
feat(ServiceForm): add support for additional networks input
- Introduced an optional field for additional networks in the service form. - Transformed the additional networks array into a comma-separated string for input. - Updated the form submission logic to convert the comma-separated string back into an array. - Added UI elements to allow users to input additional networks in a user-friendly manner.
1 parent 35dc8b8 commit 7fac10e

File tree

14 files changed

+1285
-253
lines changed

14 files changed

+1285
-253
lines changed

projects/api/src/server/modules/container/container.model.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,14 @@ export class Container extends PersistenceModel {
358358
@Prop({ default: ['[skip ci]', '[ci skip]', '[no ci]', '[skip build]'] })
359359
skipCiPatterns?: string[] = undefined;
360360

361+
@Restricted(RoleEnum.S_EVERYONE)
362+
@Field(() => [String], {
363+
description: 'Additional Docker networks to connect to',
364+
nullable: true,
365+
})
366+
@Prop({ default: [] })
367+
additionalNetworks?: string[] = undefined;
368+
361369
// ===================================================================================================================
362370
// Methods
363371
// ===================================================================================================================

projects/api/src/server/modules/container/inputs/container-create.input.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,4 +271,12 @@ export class ContainerCreateInput extends ContainerInput {
271271
})
272272
@IsOptional()
273273
override skipCiPatterns?: string[] = undefined;
274+
275+
@Restricted(RoleEnum.S_EVERYONE)
276+
@Field(() => [String], {
277+
description: 'Additional Docker networks to connect to',
278+
nullable: true,
279+
})
280+
@IsOptional()
281+
override additionalNetworks?: string[] = undefined;
274282
}

projects/api/src/server/modules/container/inputs/container.input.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,4 +318,12 @@ export class ContainerInput extends CoreInput {
318318
})
319319
@IsOptional()
320320
skipCiPatterns?: string[] = undefined;
321+
322+
@Restricted(RoleEnum.S_EVERYONE)
323+
@Field(() => [String], {
324+
description: 'Additional Docker networks to connect to',
325+
nullable: true,
326+
})
327+
@IsOptional()
328+
additionalNetworks?: string[] = undefined;
321329
}

projects/api/src/server/modules/container/types/service/adminer/compose.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,22 @@ export async function getAdminer(container: Container): Promise<string> {
1717
middlewares.unshift(`${container.id}-auth`);
1818
}
1919

20+
// Additional networks configuration
21+
const additionalNetworks = container.additionalNetworks || [];
22+
const extraNetworkDefinitions = additionalNetworks
23+
.map(n => ` ${n}:\n external: true`)
24+
.join('\n');
25+
const extraNetworkConnections = additionalNetworks
26+
.map(n => ` - ${n}`)
27+
.join('\n');
28+
2029
return `
2130
networks:
2231
traefik-public:
2332
external: true
2433
deploy-party:
2534
external: true
35+
${extraNetworkDefinitions ? '\n' + extraNetworkDefinitions : ''}
2636
2737
services:
2838
adminer:
@@ -34,6 +44,7 @@ export async function getAdminer(container: Container): Promise<string> {
3444
networks:
3545
- traefik-public
3646
- deploy-party
47+
${extraNetworkConnections ? extraNetworkConnections + '\n' : ''}
3748
deploy:
3849
update_config:
3950
order: start-first

projects/api/src/server/modules/container/types/service/chouse-ui/compose.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,22 @@ export async function getChouseUi(container: Container): Promise<string> {
1515
middlewares.unshift(`${container.id}-auth`);
1616
}
1717

18+
// Additional networks configuration
19+
const additionalNetworks = container.additionalNetworks || [];
20+
const extraNetworkDefinitions = additionalNetworks
21+
.map(n => ` ${n}:\n external: true`)
22+
.join('\n');
23+
const extraNetworkConnections = additionalNetworks
24+
.map(n => ` - ${n}`)
25+
.join('\n');
26+
1827
return `
1928
networks:
2029
traefik-public:
2130
external: true
2231
deploy-party:
2332
external: true
33+
${extraNetworkDefinitions ? '\n' + extraNetworkDefinitions : ''}
2434
2535
services:
2636
chouse-ui:
@@ -32,6 +42,7 @@ export async function getChouseUi(container: Container): Promise<string> {
3242
networks:
3343
- traefik-public
3444
- deploy-party
45+
${extraNetworkConnections ? extraNetworkConnections + '\n' : ''}
3546
deploy:
3647
update_config:
3748
order: start-first

projects/api/src/server/modules/container/types/service/clickhouse-ui/compose.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,22 @@ export async function getClickhouseUi(container: Container): Promise<string> {
1515
middlewares.unshift(`${container.id}-auth`);
1616
}
1717

18+
// Additional networks configuration
19+
const additionalNetworks = container.additionalNetworks || [];
20+
const extraNetworkDefinitions = additionalNetworks
21+
.map(n => ` ${n}:\n external: true`)
22+
.join('\n');
23+
const extraNetworkConnections = additionalNetworks
24+
.map(n => ` - ${n}`)
25+
.join('\n');
26+
1827
return `
1928
networks:
2029
traefik-public:
2130
external: true
2231
deploy-party:
2332
external: true
33+
${extraNetworkDefinitions ? '\n' + extraNetworkDefinitions : ''}
2434
2535
services:
2636
clickhouse-ui:
@@ -32,6 +42,7 @@ export async function getClickhouseUi(container: Container): Promise<string> {
3242
networks:
3343
- traefik-public
3444
- deploy-party
45+
${extraNetworkConnections ? extraNetworkConnections + '\n' : ''}
3546
deploy:
3647
update_config:
3748
order: start-first

projects/api/src/server/modules/container/types/service/directus/compose.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
import { Container } from "../../../container.model";
22

33
export function getDirectus(container: Container): string {
4+
// Additional networks configuration
5+
const additionalNetworks = container.additionalNetworks || [];
6+
const extraNetworkDefinitions = additionalNetworks
7+
.map(n => ` ${n}:\n external: true`)
8+
.join('\n');
9+
const extraNetworkConnections = additionalNetworks
10+
.map(n => ` - ${n}`)
11+
.join('\n');
12+
413
return `
514
networks:
615
traefik-public:
@@ -9,6 +18,7 @@ export function getDirectus(container: Container): string {
918
external: true
1019
directus-internal:
1120
driver: overlay
21+
${extraNetworkDefinitions ? '\n' + extraNetworkDefinitions : ''}
1222
1323
services:
1424
database:
@@ -44,6 +54,7 @@ export function getDirectus(container: Container): string {
4454
- traefik-public
4555
- directus-internal
4656
- deploy-party
57+
${extraNetworkConnections ? extraNetworkConnections + '\n' : ''}
4758
labels:
4859
- deploy.party.id=${container.id}
4960
deploy:

projects/api/src/server/modules/container/types/service/mongo-express/compose.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,22 @@ export async function getMongoExpress(container: Container): Promise<string> {
1717
middlewares.unshift(`${container.id}-auth`);
1818
}
1919

20+
// Additional networks configuration
21+
const additionalNetworks = container.additionalNetworks || [];
22+
const extraNetworkDefinitions = additionalNetworks
23+
.map(n => ` ${n}:\n external: true`)
24+
.join('\n');
25+
const extraNetworkConnections = additionalNetworks
26+
.map(n => ` - ${n}`)
27+
.join('\n');
28+
2029
return `
2130
networks:
2231
traefik-public:
2332
external: true
2433
deploy-party:
2534
external: true
35+
${extraNetworkDefinitions ? '\n' + extraNetworkDefinitions : ''}
2636
2737
services:
2838
mongo-express:
@@ -34,6 +44,7 @@ export async function getMongoExpress(container: Container): Promise<string> {
3444
networks:
3545
- traefik-public
3646
- deploy-party
47+
${extraNetworkConnections ? extraNetworkConnections + '\n' : ''}
3748
deploy:
3849
update_config:
3950
order: start-first

projects/api/src/server/modules/container/types/service/plausible/compose.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
import { Container } from "../../../container.model";
22

33
export function getPlausible(container: Container, basePath: string): string {
4+
// Additional networks configuration
5+
const additionalNetworks = container.additionalNetworks || [];
6+
const extraNetworkDefinitions = additionalNetworks
7+
.map(n => ` ${n}:\n external: true`)
8+
.join('\n');
9+
const extraNetworkConnections = additionalNetworks
10+
.map(n => ` - ${n}`)
11+
.join('\n');
12+
413
return `
514
networks:
615
traefik-public:
716
external: true
817
deploy-party:
918
external: true
19+
${extraNetworkDefinitions ? '\n' + extraNetworkDefinitions : ''}
1020
1121
services:
1222
plausible_db:
@@ -65,7 +75,7 @@ services:
6575
- traefik-public
6676
- deploy-party
6777
- default
68-
labels:
78+
${extraNetworkConnections ? extraNetworkConnections + '\n' : ''} labels:
6979
- deploy.party.id=${container.id}
7080
deploy:
7181
placement:

projects/api/src/server/modules/container/types/service/redis-ui/compose.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,22 @@ export async function getRedisUi(container: Container): Promise<string> {
1717
middlewares.unshift(`${container.id}-auth`);
1818
}
1919

20+
// Additional networks configuration
21+
const additionalNetworks = container.additionalNetworks || [];
22+
const extraNetworkDefinitions = additionalNetworks
23+
.map(n => ` ${n}:\n external: true`)
24+
.join('\n');
25+
const extraNetworkConnections = additionalNetworks
26+
.map(n => ` - ${n}`)
27+
.join('\n');
28+
2029
return `
2130
networks:
2231
traefik-public:
2332
external: true
2433
deploy-party:
2534
external: true
35+
${extraNetworkDefinitions ? '\n' + extraNetworkDefinitions : ''}
2636
2737
volumes:
2838
redisUiSettings:
@@ -39,6 +49,7 @@ export async function getRedisUi(container: Container): Promise<string> {
3949
networks:
4050
- traefik-public
4151
- deploy-party
52+
${extraNetworkConnections ? extraNetworkConnections + '\n' : ''}
4253
deploy:
4354
update_config:
4455
order: start-first

0 commit comments

Comments
 (0)