Class: Mumukit::IsolatedEnvironment
- Inherits:
-
Object
- Object
- Mumukit::IsolatedEnvironment
- Defined in:
- lib/mumukit/isolated_environment.rb
Instance Attribute Summary collapse
-
#container ⇒ Object
Returns the value of attribute container.
Instance Method Summary collapse
Instance Attribute Details
#container ⇒ Object
Returns the value of attribute container.
7 8 9 |
# File 'lib/mumukit/isolated_environment.rb', line 7 def container @container end |
Instance Method Details
#configure!(*files) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/mumukit/isolated_environment.rb', line 9 def configure!(*files) filenames = files.map { |it| File.absolute_path(it.path) } dirnames = filenames.map { |it| Pathname.new(it).dirname } binds = dirnames.map { |it| "#{it}:#{it}" } volumes = Hash[[dirnames.map { |it| [it, {}] }]] command = yield(*filenames).split self.container = Docker::Container.create( 'Image' => Mumukit.config.docker_image, 'Cmd' => command, 'NetworkDisabled' => true, 'HostConfig' => { 'Binds' => binds}, 'Volumes' => volumes) end |
#destroy! ⇒ Object
44 45 46 47 48 49 |
# File 'lib/mumukit/isolated_environment.rb', line 44 def destroy! if container container.stop container.delete end end |
#run! ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/mumukit/isolated_environment.rb', line 28 def run! container.start container.wait(Mumukit.config.command_time_limit) exit = container.json['State']['ExitCode'] out = container.streaming_logs(stdout: true, stderr: true) if exit == 0 [out, :passed] else [out, :failed] end rescue Docker::Error::TimeoutError => e [I18n.t('mumukit.time_exceeded', limit: Mumukit.config.command_time_limit), :aborted] end |