diff --git a/core/src/main/java/io/kestra/core/runners/DefaultRunContext.java b/core/src/main/java/io/kestra/core/runners/DefaultRunContext.java index cfb2c6fb6b..59bfc96f2b 100644 --- a/core/src/main/java/io/kestra/core/runners/DefaultRunContext.java +++ b/core/src/main/java/io/kestra/core/runners/DefaultRunContext.java @@ -6,10 +6,12 @@ import com.google.common.base.CaseFormat; import com.google.common.collect.ImmutableMap; import io.kestra.core.exceptions.IllegalVariableEvaluationException; import io.kestra.core.metrics.MetricRegistry; +import io.kestra.core.models.Plugin; import io.kestra.core.models.executions.AbstractMetricEntry; import io.kestra.core.models.property.Property; import io.kestra.core.models.tasks.Task; import io.kestra.core.models.triggers.AbstractTrigger; +import io.kestra.core.plugins.PluginConfigurations; import io.kestra.core.services.KVStoreService; import io.kestra.core.storages.Storage; import io.kestra.core.storages.StorageInterface; @@ -235,6 +237,14 @@ public class DefaultRunContext extends RunContext { return runContext; } + @Override + public RunContext cloneForPlugin(Plugin plugin) { + PluginConfigurations pluginConfigurations = applicationContext.getBean(PluginConfigurations.class); + DefaultRunContext runContext = clone(); + runContext.pluginConfiguration = pluginConfigurations.getConfigurationByPluginTypeOrAliases(plugin.getType(), plugin.getClass()); + return runContext; + } + /** * {@inheritDoc} */ diff --git a/core/src/main/java/io/kestra/core/runners/RunContext.java b/core/src/main/java/io/kestra/core/runners/RunContext.java index 7431bf6fe9..458ecc6235 100644 --- a/core/src/main/java/io/kestra/core/runners/RunContext.java +++ b/core/src/main/java/io/kestra/core/runners/RunContext.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import io.kestra.core.encryption.EncryptionService; import io.kestra.core.exceptions.IllegalVariableEvaluationException; +import io.kestra.core.models.Plugin; import io.kestra.core.models.executions.AbstractMetricEntry; import io.kestra.core.models.property.Property; import io.kestra.core.models.property.PropertyContext; @@ -204,4 +205,10 @@ public abstract class RunContext implements PropertyContext { * when Namespace ACLs are used (EE). */ public abstract AclChecker acl(); + + /** + * Clone this run context for a specific plugin. + * @return a new run context with the plugin configuration of the given plugin. + */ + public abstract RunContext cloneForPlugin(Plugin plugin); } diff --git a/core/src/main/java/io/kestra/core/runners/RunContextInitializer.java b/core/src/main/java/io/kestra/core/runners/RunContextInitializer.java index 5156252934..c5890c1225 100644 --- a/core/src/main/java/io/kestra/core/runners/RunContextInitializer.java +++ b/core/src/main/java/io/kestra/core/runners/RunContextInitializer.java @@ -1,10 +1,8 @@ package io.kestra.core.runners; import com.google.common.collect.Lists; -import io.kestra.core.models.Plugin; import io.kestra.core.models.executions.TaskRun; import io.kestra.core.models.tasks.Task; -import io.kestra.core.models.tasks.runners.TaskRunner; import io.kestra.core.models.triggers.AbstractTrigger; import io.kestra.core.models.triggers.TriggerContext; import io.kestra.core.plugins.PluginConfigurations; @@ -53,20 +51,6 @@ public class RunContextInitializer { @Value("${kestra.encryption.secret-key}") protected Optional secretKey; - /** - * Initializes the given {@link RunContext} for the given {@link Plugin}. - * - * @param runContext The {@link RunContext} to initialize. - * @param plugin The {@link TaskRunner} used for initialization. - * @return The {@link RunContext} to initialize - */ - public DefaultRunContext forPlugin(final DefaultRunContext runContext, - final Plugin plugin) { - runContext.init(applicationContext); - runContext.setPluginConfiguration(pluginConfigurations.getConfigurationByPluginTypeOrAliases(plugin.getType(), plugin.getClass())); - return runContext; - } - /** * Initializes the given {@link RunContext} for the given {@link WorkerTask} for executor. * diff --git a/script/src/main/java/io/kestra/plugin/scripts/exec/scripts/runners/CommandsWrapper.java b/script/src/main/java/io/kestra/plugin/scripts/exec/scripts/runners/CommandsWrapper.java index a7f81b58cf..9efb7fe092 100644 --- a/script/src/main/java/io/kestra/plugin/scripts/exec/scripts/runners/CommandsWrapper.java +++ b/script/src/main/java/io/kestra/plugin/scripts/exec/scripts/runners/CommandsWrapper.java @@ -157,9 +157,7 @@ public class CommandsWrapper implements TaskCommands { FilesService.inputFiles(runContext, realTaskRunner.additionalVars(runContext, this), this.inputFiles); } - RunContextInitializer initializer = ((DefaultRunContext) runContext).getApplicationContext().getBean(RunContextInitializer.class); - - RunContext taskRunnerRunContext = initializer.forPlugin(((DefaultRunContext) runContext).clone(), realTaskRunner); + RunContext taskRunnerRunContext = runContext.cloneForPlugin(realTaskRunner); List renderedCommands = this.renderCommands(runContext, commands); List renderedBeforeCommands = this.renderCommands(runContext, beforeCommands); diff --git a/worker/src/main/java/io/kestra/worker/DefaultWorker.java b/worker/src/main/java/io/kestra/worker/DefaultWorker.java index 81830993a6..785fd9ad30 100644 --- a/worker/src/main/java/io/kestra/worker/DefaultWorker.java +++ b/worker/src/main/java/io/kestra/worker/DefaultWorker.java @@ -402,7 +402,7 @@ public class DefaultWorker implements Worker { WorkerTask currentWorkerTask = workingDirectory.workerTask( workerTask.getTaskRun(), currentTask, - runContextInitializer.forPlugin(runContext, currentTask) + runContext.cloneForPlugin(currentTask) ); // all tasks will be handled immediately by the worker