diff --git a/config/application.rb b/config/application.rb index 91c8782d..c481b600 100644 --- a/config/application.rb +++ b/config/application.rb @@ -49,6 +49,9 @@ module CodeOcean config.after_initialize do # Initialize the counters according to the db Prometheus::Controller.initialize_metrics + + # Initialize the runner environment + Runner.strategy_class.initialize_environment end end end diff --git a/config/initializers/docker.rb b/config/initializers/docker.rb deleted file mode 100644 index 518d2d46..00000000 --- a/config/initializers/docker.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -require 'docker_client' - -DockerClient.initialize_environment unless Rails.env.test? && `which docker`.blank? diff --git a/lib/runner/strategy.rb b/lib/runner/strategy.rb index 418c679e..9a19b77b 100644 --- a/lib/runner/strategy.rb +++ b/lib/runner/strategy.rb @@ -9,6 +9,10 @@ class Runner::Strategy raise NotImplementedError end + def self.initialize_environment + raise NotImplementedError + end + def self.available_images raise NotImplementedError end diff --git a/lib/runner/strategy/docker_container_pool.rb b/lib/runner/strategy/docker_container_pool.rb index 272278a3..056da47d 100644 --- a/lib/runner/strategy/docker_container_pool.rb +++ b/lib/runner/strategy/docker_container_pool.rb @@ -8,6 +8,10 @@ class Runner::Strategy::DockerContainerPool < Runner::Strategy @config ||= CodeOcean::Config.new(:docker).read(erb: true) end + def self.initialize_environment + DockerClient.initialize_environment unless Rails.env.test? && `which docker`.blank? + end + def self.available_images DockerClient.check_availability! DockerClient.image_tags diff --git a/lib/runner/strategy/poseidon.rb b/lib/runner/strategy/poseidon.rb index d3c27bd2..15f7d8e9 100644 --- a/lib/runner/strategy/poseidon.rb +++ b/lib/runner/strategy/poseidon.rb @@ -13,6 +13,11 @@ class Runner::Strategy::Poseidon < Runner::Strategy @config ||= CodeOcean::Config.new(:code_ocean).read[:runner_management] || {} end + def self.initialize_environment + # There is no additional initialization required for Poseidon + nil + end + def self.available_images # Images are pulled when needed for a new execution environment # and cleaned up automatically if no longer in use.