
com.hubspot.singularity.executor.TemplateManager Maven / Gradle / Ivy
package com.hubspot.singularity.executor;
import static java.nio.charset.StandardCharsets.UTF_8;
import java.io.BufferedWriter;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import com.github.jknack.handlebars.Template;
import com.google.common.base.Throwables;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import com.hubspot.singularity.executor.config.SingularityExecutorModule;
import com.hubspot.singularity.executor.models.DockerContext;
import com.hubspot.singularity.executor.models.EnvironmentContext;
import com.hubspot.singularity.executor.models.LogrotateCronTemplateContext;
import com.hubspot.singularity.executor.models.LogrotateTemplateContext;
import com.hubspot.singularity.executor.models.RunnerContext;
@Singleton
public class TemplateManager {
private final Template runnerTemplate;
private final Template environmentTemplate;
private final Template logrotateTemplate;
private final Template logrotateCronTemplate;
private final Template dockerTemplate;
@Inject
public TemplateManager(@Named(SingularityExecutorModule.RUNNER_TEMPLATE) Template runnerTemplate,
@Named(SingularityExecutorModule.ENVIRONMENT_TEMPLATE) Template environmentTemplate,
@Named(SingularityExecutorModule.LOGROTATE_TEMPLATE) Template logrotateTemplate,
@Named(SingularityExecutorModule.LOGROTATE_CRON_TEMPLATE) Template logrotateCronTemplate,
@Named(SingularityExecutorModule.DOCKER_TEMPLATE) Template dockerTemplate
) {
this.runnerTemplate = runnerTemplate;
this.environmentTemplate = environmentTemplate;
this.logrotateTemplate = logrotateTemplate;
this.logrotateCronTemplate = logrotateCronTemplate;
this.dockerTemplate = dockerTemplate;
}
public void writeRunnerScript(Path destination, RunnerContext runnerContext) {
writeTemplate(destination, runnerTemplate, runnerContext);
}
public void writeEnvironmentScript(Path destination, EnvironmentContext environmentContext) {
writeTemplate(destination, environmentTemplate, environmentContext);
}
public void writeLogrotateFile(Path destination, LogrotateTemplateContext logRotateContext) {
writeTemplate(destination, logrotateTemplate, logRotateContext);
}
public boolean writeCronEntryForLogrotate(Path destination, LogrotateCronTemplateContext logrotateCronTemplateContext) {
writeTemplate(destination, logrotateCronTemplate, logrotateCronTemplateContext);
final File destinationFile = destination.toFile();
// ensure file is 644 -- java file permissions are so lame :/
return destinationFile.setExecutable(false, false) &&
destinationFile.setReadable(true, false) &&
destinationFile.setWritable(false, false) &&
destinationFile.setWritable(true);
}
public void writeDockerScript(Path destination, DockerContext dockerContext) {
writeTemplate(destination, dockerTemplate, dockerContext);
}
private void writeTemplate(Path path, Template template, Object context) {
try (final BufferedWriter writer = Files.newBufferedWriter(path, UTF_8)) {
template.apply(context, writer);
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy