From da518536f68508ef899a021b6f84263582e350e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Mathieu?= Date: Thu, 21 Mar 2024 14:48:08 +0100 Subject: [PATCH] feat: script runner --- .../io/kestra/plugin/gcp/cli/GCloudCLI.java | 55 +++++++++++++------ 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/kestra/plugin/gcp/cli/GCloudCLI.java b/src/main/java/io/kestra/plugin/gcp/cli/GCloudCLI.java index 6506043c..f61d9302 100644 --- a/src/main/java/io/kestra/plugin/gcp/cli/GCloudCLI.java +++ b/src/main/java/io/kestra/plugin/gcp/cli/GCloudCLI.java @@ -4,19 +4,24 @@ import io.kestra.core.models.annotations.Example; import io.kestra.core.models.annotations.Plugin; import io.kestra.core.models.annotations.PluginProperty; +import io.kestra.core.models.script.ScriptRunner; +import io.kestra.core.models.script.ScriptService; import io.kestra.core.models.tasks.*; import io.kestra.core.runners.RunContext; import io.kestra.plugin.scripts.exec.scripts.models.DockerOptions; import io.kestra.plugin.scripts.exec.scripts.models.RunnerType; import io.kestra.plugin.scripts.exec.scripts.models.ScriptOutput; import io.kestra.plugin.scripts.exec.scripts.runners.CommandsWrapper; -import io.kestra.plugin.scripts.exec.scripts.services.ScriptService; +import io.kestra.plugin.scripts.runner.docker.DockerScriptRunner; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import lombok.experimental.SuperBuilder; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; +import lombok.extern.jackson.Jacksonized; +import org.apache.commons.lang3.builder.ToStringBuilder; + import java.io.IOException; import java.nio.file.Path; import java.util.HashMap; @@ -67,6 +72,7 @@ ) } ) +@Jacksonized public class GCloudCLI extends Task implements RunnableTask, NamespaceFilesInterface, InputFilesInterface, OutputFilesInterface { private static final String DEFAULT_IMAGE = "google/cloud-sdk"; @@ -100,12 +106,23 @@ public class GCloudCLI extends Task implements RunnableTask, Names protected Map env; @Schema( - title = "Docker options when for the `DOCKER` runner.", - defaultValue = "{image=" + DEFAULT_IMAGE + ", pullPolicy=ALWAYS}" + title = "Docker options when for the `DOCKER` runner." + ) + @PluginProperty + @Deprecated + protected DockerOptions docker; + + @Schema( + title = "Docker image to use." ) + @PluginProperty(dynamic = true) + @NotEmpty + @Builder.Default + protected String containerImage = DEFAULT_IMAGE; + @PluginProperty @Builder.Default - protected DockerOptions docker = DockerOptions.builder().build(); + private ScriptRunner scriptRunner = DockerScriptRunner.builder().type("io.kestra.plugin.scripts.runner.docker.DockerScriptRunner").build(); private NamespaceFiles namespaceFiles; @@ -115,23 +132,29 @@ public class GCloudCLI extends Task implements RunnableTask, Names @Override public ScriptOutput run(RunContext runContext) throws Exception { - CommandsWrapper commands = new CommandsWrapper(runContext) - .withWarningOnStdErr(true) - .withRunnerType(RunnerType.DOCKER) - .withDockerOptions(injectDefaults(getDocker())) - .withCommands( - ScriptService.scriptCommands( - List.of("/bin/sh", "-c"), - null, - this.commands) - ); - - commands = commands.withEnv(this.getEnv(runContext)) + .withWarningOnStdErr(true) + .withContainerImage(containerImage) + .withCommands( + ScriptService.scriptCommands( + List.of("/bin/sh", "-c"), + null, + this.commands) + ) + .withEnv(this.getEnv(runContext)) .withNamespaceFiles(namespaceFiles) .withInputFiles(inputFiles) .withOutputFiles(outputFiles); + // FIXME due to serialization inclusion not_default at deserialization there is always docker options because of the pullPolicy + // this would only work when we fix that :(. + if (docker != null) { + commands = commands.withRunnerType(RunnerType.DOCKER) + .withDockerOptions(injectDefaults(getDocker())); + } else { + commands = commands.withScriptRunner(this.scriptRunner); + } + return commands.run(); }