Sha256: a2cb48b4f1fab694c758f4970f6c235b634f1f094bfb5045555aa6a88a0adf51
Contents?: true
Size: 1.5 KB
Versions: 8
Compression:
Stored size: 1.5 KB
Contents
module Specinfra::Backend class Docker < Exec def initialize begin require 'docker' unless defined?(::Docker) rescue LoadError fail "Docker client library is not available. Try installing `docker-api' gem." end @images = [] ::Docker.url = Specinfra.configuration.docker_url @base_image = ::Docker::Image.get(Specinfra.configuration.docker_image) end def run_command(cmd, opts={}) cmd = build_command(cmd) cmd = add_pre_command(cmd) docker_run!(cmd) end def build_command(cmd) cmd end def add_pre_command(cmd) cmd end def send_file(from, to) @images << current_image.insert_local('localPath' => from, 'outputPath' => to) end private def current_image @images.last || @base_image end def docker_run!(cmd, opts={}) opts = { 'Image' => current_image.id, 'Cmd' => %W{/bin/sh -c #{cmd}}, }.merge(opts) if path = Specinfra::configuration::path (opts['Env'] ||= {})['PATH'] = path end container = ::Docker::Container.create(opts) begin container.start begin stdout, stderr = container.attach(:logs => true) result = container.wait return CommandResult.new :stdout => stdout.join, :stderr => stderr.join, :exit_status => result['StatusCode'] rescue container.kill end ensure container.delete end end end end
Version data entries
8 entries across 8 versions & 1 rubygems