From 9cc4394296660be76ebda22b82d0fd90c85304d6 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Tue, 19 Oct 2021 23:20:34 +0200 Subject: [PATCH] Allow editing an Execution Environment with active runner management --- app/models/execution_environment.rb | 6 +++--- app/models/runner.rb | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/models/execution_environment.rb b/app/models/execution_environment.rb index 8aafa19d..863138ad 100644 --- a/app/models/execution_environment.rb +++ b/app/models/execution_environment.rb @@ -76,10 +76,10 @@ class ExecutionEnvironment < ApplicationRecord private :validate_docker_image? def working_docker_image? - DockerClient.pull(docker_image) if DockerClient.find_image_by_tag(docker_image).present? - output = DockerClient.new(execution_environment: self).execute_arbitrary_command(VALIDATION_COMMAND) + runner = Runner.for(author, self) + output = runner.execute_command(VALIDATION_COMMAND, raise_exception: true) errors.add(:docker_image, "error: #{output[:stderr]}") if output[:stderr].present? - rescue DockerClient::Error => e + rescue Runner::Error => e errors.add(:docker_image, "error: #{e}") end private :working_docker_image? diff --git a/app/models/runner.rb b/app/models/runner.rb index f9f30704..fbe317cd 100644 --- a/app/models/runner.rb +++ b/app/models/runner.rb @@ -60,7 +60,7 @@ class Runner < ApplicationRecord Time.zone.now - starting_time # execution duration end - def execute_command(command) + def execute_command(command, raise_exception: false) output = {} stdout = +'' stderr = +'' @@ -95,6 +95,9 @@ class Runner < ApplicationRecord Rails.logger.debug { "Running command `#{command}` failed: #{e.message}" } output.merge!(status: :failed, container_execution_time: e.execution_duration) ensure + # We forward the exception if requested + raise e if raise_exception && defined?(e) && e.present? + output.merge!(stdout: stdout, stderr: stderr) end end