mirror of
https://github.com/kestra-io/kestra.git
synced 2025-12-23 21:04:39 -05:00
refactor: remove rendering from Docker (#7439)
rendering is done in the CommandsWrapper so no need to render again in the task runner
This commit is contained in:
@@ -131,24 +131,6 @@ public abstract class TaskRunner<T extends TaskRunnerDetailResult> implements Pl
|
|||||||
return windowsToUnixPath(workingDir + "/" + relativePath);
|
return windowsToUnixPath(workingDir + "/" + relativePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> renderCommands(RunContext runContext, TaskCommands taskCommands) throws IllegalVariableEvaluationException, IOException {
|
|
||||||
List<String> renderedCommands = this.renderCommandsFromList(runContext, taskCommands, taskCommands.getCommands());
|
|
||||||
List<String> renderedBeforeCommands = this.renderCommandsFromList(runContext, taskCommands, taskCommands.getBeforeCommands());
|
|
||||||
List<String> renderedInterpreter = this.renderCommandsFromList(runContext, taskCommands, taskCommands.getInterpreter());
|
|
||||||
|
|
||||||
return Stream.of(renderedInterpreter, renderedBeforeCommands, renderedCommands)
|
|
||||||
.flatMap(Collection::stream).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<String> renderCommandsFromList(RunContext runContext, TaskCommands taskCommands, Property<List<String>> commands) throws IllegalVariableEvaluationException, IOException {
|
|
||||||
return ScriptService.replaceInternalStorage(
|
|
||||||
runContext,
|
|
||||||
this.additionalVars(runContext, taskCommands),
|
|
||||||
commands,
|
|
||||||
this instanceof RemoteRunnerInterface
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** {@inheritDoc} **/
|
/** {@inheritDoc} **/
|
||||||
@Override
|
@Override
|
||||||
public void kill() {
|
public void kill() {
|
||||||
|
|||||||
@@ -428,7 +428,7 @@ public class Docker extends TaskRunner<Docker.DockerTaskRunnerDetailResult> {
|
|||||||
// start container
|
// start container
|
||||||
dockerClient.startContainerCmd(exec.getId()).exec();
|
dockerClient.startContainerCmd(exec.getId()).exec();
|
||||||
|
|
||||||
List<String> renderedCommands = this.renderCommands(runContext, taskCommands);
|
List<String> renderedCommands = runContext.render(taskCommands.getCommands()).asList(String.class);
|
||||||
|
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug(
|
logger.debug(
|
||||||
@@ -780,7 +780,7 @@ public class Docker extends TaskRunner<Docker.DockerTaskRunnerDetailResult> {
|
|||||||
|
|
||||||
return container
|
return container
|
||||||
.withHostConfig(hostConfig)
|
.withHostConfig(hostConfig)
|
||||||
.withCmd(this.renderCommands(runContext, taskCommands))
|
.withCmd(runContext.render(taskCommands.getCommands()).asList(String.class))
|
||||||
.withAttachStderr(true)
|
.withAttachStderr(true)
|
||||||
.withAttachStdout(true);
|
.withAttachStdout(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,52 +124,4 @@ class LogConsumerTest {
|
|||||||
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).filter(m -> m.getMessage().contains("Trace 2")).count(), is(1L));
|
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).filter(m -> m.getMessage().contains("Trace 2")).count(), is(1L));
|
||||||
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).count(), greaterThanOrEqualTo(5L));
|
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).count(), greaterThanOrEqualTo(5L));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
void logs_dynamicProperties() throws Exception {
|
|
||||||
List<LogEntry> logs = new ArrayList<>();
|
|
||||||
Flux<LogEntry> receive = TestsUtils.receive(logQueue, l -> logs.add(l.getLeft()));
|
|
||||||
|
|
||||||
RunContext runContext = TestsUtils.mockRunContext(runContextFactory, TASK, Map.of(
|
|
||||||
"text", "World",
|
|
||||||
"error", "Error",
|
|
||||||
"trace", "Trace 2",
|
|
||||||
"interpreter", "sh"
|
|
||||||
));
|
|
||||||
TaskCommands taskCommands = new CommandsWrapper(runContext)
|
|
||||||
.withInterpreter(propertyFromList(List.of("/bin/{{ inputs.interpreter }}", "-c")))
|
|
||||||
.withCommands(propertyFromList(List.of(
|
|
||||||
"""
|
|
||||||
echo '::{"logs": [{"level":"INFO","message":"Hello World"}]}::'
|
|
||||||
echo '::{"logs": [{"level":"ERROR","message":"Hello {{ inputs.error }}"}]}::'
|
|
||||||
echo '::{"logs": [{"level":"TRACE","message":"Hello Trace workdir:{{workingDir}}"}, {"level":"TRACE","message":"Hello {{ inputs.trace }}"}]}::'
|
|
||||||
""")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
Docker.from(DockerOptions.builder().image("alpine").build()).run(
|
|
||||||
runContext,
|
|
||||||
taskCommands,
|
|
||||||
Collections.emptyList()
|
|
||||||
);
|
|
||||||
|
|
||||||
receive.blockLast();
|
|
||||||
|
|
||||||
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.INFO)).count(), is(1L));
|
|
||||||
String beforeLogMessage = logs.stream().filter(m -> m.getLevel().equals(Level.INFO)).findFirst().orElseThrow().getMessage();
|
|
||||||
assertThat(beforeLogMessage, is("Hello World"));
|
|
||||||
|
|
||||||
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.ERROR)).count(), is(1L));
|
|
||||||
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).filter(m -> m.getMessage().contains("Trace 2")).count(), is(1L));
|
|
||||||
|
|
||||||
Optional<String> logWithWorkingDir = logs.stream().filter(m -> m.getLevel().equals(Level.TRACE))
|
|
||||||
.map(LogEntry::getMessage)
|
|
||||||
.filter(message -> message.contains("Hello Trace workdir")).findFirst();
|
|
||||||
|
|
||||||
assertThat(logWithWorkingDir.isPresent(), is(true));
|
|
||||||
String workingDir = logWithWorkingDir.get().split(":")[1];
|
|
||||||
assertThat(workingDir, containsString("/tmp/"));
|
|
||||||
|
|
||||||
assertThat(logs.stream().filter(m -> m.getLevel().equals(Level.TRACE)).count(), greaterThanOrEqualTo(5L));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user