Skip to content

Commit 33591fb

Browse files
authored
Add ability to parse --entrypoint from createOptions passed to the service containers (#39)
* Add logic to parse entrypoint from createOptions * Fix test * Fix test
1 parent 3e95ace commit 33591fb

File tree

3 files changed

+45
-4
lines changed

3 files changed

+45
-4
lines changed

packages/k8s/src/hooks/prepare-job.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ import {
3535
SCRIPT_EXECUTOR_ENTRY_POINT_ARGS,
3636
getNumberOfHost,
3737
sleep,
38-
generateServicesName
38+
generateServicesName,
39+
getEntryPointAndArgs
3940
} from '../k8s/utils'
4041
import {
4142
CONTAINER_EXTENSION_PREFIX,
@@ -76,7 +77,8 @@ export async function prepareJob(
7677
service,
7778
generateContainerName(service.image),
7879
false,
79-
extension
80+
extension,
81+
service.createOptions
8082
)
8183
})
8284
}
@@ -285,7 +287,8 @@ export function createContainerSpec(
285287
container: JobContainerInfo,
286288
name: string,
287289
jobContainer = false,
288-
extension?: k8s.V1PodTemplateSpec
290+
extension?: k8s.V1PodTemplateSpec,
291+
createOptions?: string
289292
): k8s.V1Container {
290293
if (!container.entryPoint && jobContainer) {
291294
container.entryPoint = DEFAULT_CONTAINER_ENTRY_POINT
@@ -305,6 +308,20 @@ export function createContainerSpec(
305308
}
306309
}
307310

311+
if (!jobContainer && createOptions && createOptions?.length > 0) {
312+
core.debug(
313+
`overriding service container ${JSON.stringify(
314+
container
315+
)} with createOptions ${createOptions}`
316+
)
317+
const entryPointAndArgs = getEntryPointAndArgs(createOptions)
318+
if (entryPointAndArgs.length > 1) {
319+
core.debug(`overriding container entry points with ${entryPointAndArgs}`)
320+
container.entryPoint = entryPointAndArgs[0]
321+
container.entryPointArgs = entryPointAndArgs.slice(1)
322+
}
323+
}
324+
308325
const podContainer = {
309326
name,
310327
image: container.image,

packages/k8s/src/k8s/utils.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,3 +465,16 @@ export function createScriptExecutorContainer(
465465
initContainer.volumeMounts.push(scriptExecutorVolumeMount)
466466
return initContainer
467467
}
468+
469+
const entrypointRegex = /--entrypoint=\[(.*?)\]/
470+
471+
export function getEntryPointAndArgs(createOptions: string): string[] {
472+
const match = createOptions.match(entrypointRegex)
473+
474+
if (!match || match[1] === undefined) {
475+
core.debug(`no match for createoptions ${createOptions}`)
476+
return []
477+
}
478+
479+
return match[1].split(',').map(item => item.trim())
480+
}

packages/k8s/tests/k8s-utils-test.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import {
1212
createScriptExecutorContainer,
1313
getNumberOfHost,
1414
ENV_NUMBER_OF_HOSTS,
15-
generateServicesName
15+
generateServicesName,
16+
getEntryPointAndArgs
1617
} from '../src/k8s/utils'
1718
import * as k8s from '@kubernetes/client-node'
1819
import { TestHelper } from './test-setup'
@@ -378,6 +379,16 @@ describe('k8s utils', () => {
378379
})
379380
})
380381

382+
describe('getEntryPointAndArgs', () => {
383+
it('should return correct entrypoint and argument', () => {
384+
expect(getEntryPointAndArgs(`--blah`)).toEqual([])
385+
expect(getEntryPointAndArgs(`--entrypoint=["/foo"]`)).toEqual(['"/foo"'])
386+
expect(
387+
getEntryPointAndArgs(`--entrypoint=["/foo", "--a", "--b"]`)
388+
).toEqual(['"/foo"', '"--a"', '"--b"'])
389+
})
390+
})
391+
381392
describe('create script executor container', () => {
382393
it('should install script executor at the volume mount location', () => {
383394
const executorVolumeMount = new k8s.V1VolumeMount()

0 commit comments

Comments
 (0)