diff --git a/packages/k8s/src/hooks/prepare-job.ts b/packages/k8s/src/hooks/prepare-job.ts index 4c4a681..081d8a3 100644 --- a/packages/k8s/src/hooks/prepare-job.ts +++ b/packages/k8s/src/hooks/prepare-job.ts @@ -125,10 +125,9 @@ function generateResponseFile( ) if (serviceContainers?.length) { response.context['services'] = serviceContainers.map(c => { - if (!c.ports) { - return + if (!c.ports?.length) { + return { image: c.image } } - const ctxPorts: ContextPorts = {} for (const port of c.ports) { ctxPorts[port.containerPort] = port.hostPort diff --git a/packages/k8s/src/k8s/index.ts b/packages/k8s/src/k8s/index.ts index 62f5e89..7e83f05 100644 --- a/packages/k8s/src/k8s/index.ts +++ b/packages/k8s/src/k8s/index.ts @@ -517,6 +517,9 @@ export function containerPorts( container: ContainerInfo ): k8s.V1ContainerPort[] { const ports: k8s.V1ContainerPort[] = [] + if (!container.portMappings?.length) { + return ports + } for (const portDefinition of container.portMappings) { const portProtoSplit = portDefinition.split('/') if (portProtoSplit.length > 2) { diff --git a/packages/k8s/tests/prepare-job-test.ts b/packages/k8s/tests/prepare-job-test.ts index d8494c1..f719a87 100644 --- a/packages/k8s/tests/prepare-job-test.ts +++ b/packages/k8s/tests/prepare-job-test.ts @@ -82,4 +82,18 @@ describe('Prepare job', () => { expect(services[0].command).toBe(undefined) expect(services[0].args).toBe(undefined) }) + + test.each([undefined, null, []])( + 'should not throw exception when portMapping=%p', + async pm => { + prepareJobData.args.services.forEach(s => { + s.portMappings = pm + }) + await prepareJob(prepareJobData.args, prepareJobOutputFilePath) + const content = JSON.parse( + fs.readFileSync(prepareJobOutputFilePath).toString() + ) + expect(() => content.context.services[0].image).not.toThrow() + } + ) })