Remove usage of DockerClient from execution_environments_controller.rb
This commit is contained in:
@ -133,12 +133,12 @@ class ExecutionEnvironmentsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def set_docker_images
|
def set_docker_images
|
||||||
DockerClient.check_availability!
|
@docker_images ||= ExecutionEnvironment.pluck(:docker_image)
|
||||||
@docker_images = DockerClient.image_tags.sort
|
@docker_images += Runner.strategy_class.available_images
|
||||||
rescue DockerClient::Error => e
|
rescue Runner::Error::InternalServerError => e
|
||||||
@docker_images = []
|
|
||||||
flash[:warning] = e.message
|
flash[:warning] = e.message
|
||||||
Sentry.capture_exception(e)
|
ensure
|
||||||
|
@docker_images = @docker_images.sort.uniq
|
||||||
end
|
end
|
||||||
private :set_docker_images
|
private :set_docker_images
|
||||||
|
|
||||||
|
@ -9,6 +9,10 @@ class Runner::Strategy
|
|||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.available_images
|
||||||
|
raise NotImplementedError
|
||||||
|
end
|
||||||
|
|
||||||
def self.sync_environment(_environment)
|
def self.sync_environment(_environment)
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
end
|
end
|
||||||
|
@ -8,6 +8,13 @@ class Runner::Strategy::DockerContainerPool < Runner::Strategy
|
|||||||
@config ||= CodeOcean::Config.new(:docker).read(erb: true)
|
@config ||= CodeOcean::Config.new(:docker).read(erb: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.available_images
|
||||||
|
DockerClient.check_availability!
|
||||||
|
DockerClient.image_tags
|
||||||
|
rescue DockerClient::Error => e
|
||||||
|
raise Runner::Error::InternalServerError.new(e.message)
|
||||||
|
end
|
||||||
|
|
||||||
def self.sync_environment(_environment)
|
def self.sync_environment(_environment)
|
||||||
# There is no dedicated sync mechanism yet
|
# There is no dedicated sync mechanism yet
|
||||||
true
|
true
|
||||||
|
@ -13,6 +13,13 @@ class Runner::Strategy::Poseidon < Runner::Strategy
|
|||||||
@config ||= CodeOcean::Config.new(:code_ocean).read[:runner_management] || {}
|
@config ||= CodeOcean::Config.new(:code_ocean).read[:runner_management] || {}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.available_images
|
||||||
|
# Images are pulled when needed for a new execution environment
|
||||||
|
# and cleaned up automatically if no longer in use.
|
||||||
|
# Hence, there is no additional image that we need to return
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
|
||||||
def self.headers
|
def self.headers
|
||||||
@headers ||= {'Content-Type' => 'application/json', 'Poseidon-Token' => config[:token]}
|
@headers ||= {'Content-Type' => 'application/json', 'Poseidon-Token' => config[:token]}
|
||||||
end
|
end
|
||||||
|
@ -114,6 +114,7 @@ describe ExecutionEnvironmentsController do
|
|||||||
let(:docker_images) { [1, 2, 3] }
|
let(:docker_images) { [1, 2, 3] }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
allow(Runner).to receive(:strategy_class).and_return Runner::Strategy::DockerContainerPool
|
||||||
allow(DockerClient).to receive(:check_availability!).at_least(:once)
|
allow(DockerClient).to receive(:check_availability!).at_least(:once)
|
||||||
allow(DockerClient).to receive(:image_tags).and_return(docker_images)
|
allow(DockerClient).to receive(:image_tags).and_return(docker_images)
|
||||||
controller.send(:set_docker_images)
|
controller.send(:set_docker_images)
|
||||||
@ -126,6 +127,7 @@ describe ExecutionEnvironmentsController do
|
|||||||
let(:error_message) { 'Docker is unavailable' }
|
let(:error_message) { 'Docker is unavailable' }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
allow(Runner).to receive(:strategy_class).and_return Runner::Strategy::DockerContainerPool
|
||||||
allow(DockerClient).to receive(:check_availability!).at_least(:once).and_raise(DockerClient::Error.new(error_message))
|
allow(DockerClient).to receive(:check_availability!).at_least(:once).and_raise(DockerClient::Error.new(error_message))
|
||||||
controller.send(:set_docker_images)
|
controller.send(:set_docker_images)
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user