Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Customizable bash in startup script #1838

Merged
merged 1 commit into from Sep 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -228,6 +228,10 @@ public class SingularityExecutorConfiguration extends BaseRunnerConfiguration {

private int defaultCfsPeriod = 100000;

private String extraScriptContent = "";

private String extraDockerScriptContent = "";

public SingularityExecutorConfiguration() {
super(Optional.of("singularity-executor.log"));
}
Expand Down Expand Up @@ -666,6 +670,22 @@ public SingularityExecutorConfiguration setDefaultCfsPeriod(int defaultCfsPeriod
return this;
}

public String getExtraScriptContent() {
return extraScriptContent;
}

public void setExtraScriptContent(String extraScriptContent) {
this.extraScriptContent = extraScriptContent;
}

public String getExtraDockerScriptContent() {
return extraDockerScriptContent;
}

public void setExtraDockerScriptContent(String extraDockerScriptContent) {
this.extraDockerScriptContent = extraDockerScriptContent;
}

@Override
public String toString() {
return "SingularityExecutorConfiguration{" +
Expand Down
Expand Up @@ -22,6 +22,7 @@ public class RunnerContext {
private final boolean useFileAttributes;
private final Integer cfsQuota;
private final Integer cfsPeriod;
private final String extraScriptContent;

public RunnerContext(String cmd,
String taskAppDirectory,
Expand All @@ -36,7 +37,8 @@ public RunnerContext(String cmd,
String switchUserCommand,
boolean useFileAttributes,
Integer cfsQuota,
Integer cfsPeriod) {
Integer cfsPeriod,
String extraScriptContent) {
this.cmd = cmd;
this.taskAppDirectory = taskAppDirectory;
this.logDir = logDir;
Expand All @@ -52,6 +54,7 @@ public RunnerContext(String cmd,
this.useFileAttributes = useFileAttributes;
this.cfsQuota = cfsQuota;
this.cfsPeriod = cfsPeriod;
this.extraScriptContent = extraScriptContent;
}

public String getCmd() {
Expand Down Expand Up @@ -110,6 +113,10 @@ public Integer getCfsPeriod() {
return cfsPeriod;
}

public String getExtraScriptContent() {
return extraScriptContent;
}

@Override
public String toString() {
return "RunnerContext{" +
Expand All @@ -127,6 +134,7 @@ public String toString() {
", useFileAttributes=" + useFileAttributes +
", cfsQuota=" + cfsQuota +
", cfsPeriod=" + cfsPeriod +
", extraScriptContent=" + extraScriptContent +
'}';
}
}
Expand Up @@ -167,6 +167,7 @@ private String getExecutorUser() {

private ProcessBuilder buildProcessBuilder(TaskInfo taskInfo, SingularityTaskExecutorData executorData, String serviceLog) {
final String cmd = getCommand(executorData);
boolean isDocker = taskInfo.hasContainer() && taskInfo.getContainer().hasDocker();

RunnerContext runnerContext = new RunnerContext(
cmd,
Expand All @@ -182,11 +183,12 @@ private ProcessBuilder buildProcessBuilder(TaskInfo taskInfo, SingularityTaskExe
String.format(configuration.getSwitchUserCommandFormat(), executorData.getUser().or(configuration.getDefaultRunAsUser())),
configuration.isUseFileAttributes(),
getCfsQuota(executorData),
configuration.getDefaultCfsPeriod());
configuration.getDefaultCfsPeriod(),
isDocker ? configuration.getExtraDockerScriptContent() : configuration.getExtraScriptContent());

EnvironmentContext environmentContext = new EnvironmentContext(taskInfo);

if (taskInfo.hasContainer() && taskInfo.getContainer().hasDocker()) {
if (isDocker) {
task.getLog().info("Writing a runner script to execute {} in docker container", cmd);
templateManager.writeDockerScript(getPath("runner.sh"),
new DockerContext(environmentContext, runnerContext, configuration.getDockerPrefix(), configuration.getDockerStopTimeout(), taskInfo.getContainer().getDocker().getPrivileged()));
Expand Down
2 changes: 2 additions & 0 deletions SingularityExecutor/src/main/resources/docker.sh.hbs
Expand Up @@ -166,6 +166,8 @@ sudo chown "$user" {{{ runContext.logFile }}}
setfattr -n user.logstart -v "$(($(date +%s%N)/1000000))" {{{ runContext.logFile }}}
{{/if}}

{{{ runContext.extraScriptContent }}}

# Start up the container
env_args=({{#each envContext.env}}{{#ifHasNewLinesOrBackticks value}}-e {{#shellQuote name}}{{/shellQuote}}={{#shellQuote value}}{{/shellQuote}} {{/ifHasNewLinesOrBackticks}}{{/each}})
cmd=(sudo -E -H -u "$user" docker create "${DOCKER_OPTIONS[@]}" "${env_args[@]}" "$DOCKER_IMAGE" {{{ runContext.cmd }}})
Expand Down
2 changes: 2 additions & 0 deletions SingularityExecutor/src/main/resources/runner.sh.hbs
Expand Up @@ -116,6 +116,8 @@ sudo chown {{{ user }}} {{{ logFilePath }}}
setfattr -n user.logstart -v "$(($(date +%s%N)/1000000))" {{{ logFilePath }}}
{{/if}}

{{{ extraScriptContent }}}

# execute command
{{#if shouldChangeUser}}
echo "Executing: {{{ switchUserCommand }}} {{#if maxOpenFiles}}/bin/bash -c 'ulimit -Sn {{{maxOpenFiles}}} && {{/if}}{{{ cmd }}}{{#if maxOpenFiles}}'{{/if}} >> {{{ logFilePath }}} 2>&1"
Expand Down