Sha256: 569e1df9980e64667ad288601ca1aeff5848d3a0b0f2c41db8f94fb98e137408

Contents?: true

Size: 1.91 KB

Versions: 143

Compression:

Stored size: 1.91 KB

Contents

module Docker
  def self.run(image, cmd, options)
    mounts, job_inputs, directory, pipe = Misc.process_options options, :mounts, :job_inputs, :directory, :pipe

    if mounts
      mounts.each{|t,s| FileUtils.mkdir_p s unless File.exist? s}
      mount_cmd = mounts.sort.collect{|t,s| "-v " + ["'" + s + "'", "'" + t + "'"] * ":" } * " "
    else
      mount_cmd = ""
    end

    image_cmd = "-t #{image}"

    if directory
      Path.setup(directory) unless Path === directory
      FileUtils.mkdir_p directory unless File.directory? directory
      mount_cmd += " -v '#{directory}':/job"
      job_inputs.each do |name,obj|
        case obj
        when File 
          FileUtils.cp obj.filename, directory[name]
        when IO
          begin
            Open.write(directory[name], obj)
          ensure
            obj.join if obj.respond_to?(:join) and not obj.joined?
          end
        when String
          if obj.length < 256 and File.exist?(obj)
            FileUtils.cp obj, directory[name]
          else
            Open.write(directory[name], obj)
          end
        end
      end
    else
      TmpFile.with_file do |tmpfile|
        Path.setup(tmpfile)
        FileUtils.mkdir_p tmpfile
        mount_cmd += " -v '#{tmpfile}':/job"
        job_inputs.each do |name,obj|
          case obj
          when File 
            FileUtils.cp obj.filename, tmpfile[name]
          when IO
            begin
              Open.write(tmpfile[name], obj)
            ensure
              obj.join if obj.respond_to?(:join) and not obj.joined?
            end
          when String
            if obj.length < 256 and File.exist?(obj)
              FileUtils.cp obj, tmpfile[name]
            else
              Open.write(tmpfile[name], obj)
            end
          end
        end
        pipe = false
      end

    end
    cmd = "docker run #{mount_cmd} #{image_cmd} #{cmd}"
    CMD.cmd(cmd, :log => true, :pipe => pipe)
  end
end

Version data entries

143 entries across 143 versions & 1 rubygems

Version Path
rbbt-util-5.22.4 lib/rbbt/util/docker.rb
rbbt-util-5.22.3 lib/rbbt/util/docker.rb
rbbt-util-5.22.1 lib/rbbt/util/docker.rb
rbbt-util-5.22.0 lib/rbbt/util/docker.rb
rbbt-util-5.21.137 lib/rbbt/util/docker.rb
rbbt-util-5.21.136 lib/rbbt/util/docker.rb
rbbt-util-5.21.135 lib/rbbt/util/docker.rb
rbbt-util-5.21.134 lib/rbbt/util/docker.rb
rbbt-util-5.21.133 lib/rbbt/util/docker.rb
rbbt-util-5.21.132 lib/rbbt/util/docker.rb
rbbt-util-5.21.131 lib/rbbt/util/docker.rb
rbbt-util-5.21.130 lib/rbbt/util/docker.rb
rbbt-util-5.21.129 lib/rbbt/util/docker.rb
rbbt-util-5.21.128 lib/rbbt/util/docker.rb
rbbt-util-5.21.127 lib/rbbt/util/docker.rb
rbbt-util-5.21.126 lib/rbbt/util/docker.rb
rbbt-util-5.21.125 lib/rbbt/util/docker.rb
rbbt-util-5.21.123 lib/rbbt/util/docker.rb
rbbt-util-5.21.122 lib/rbbt/util/docker.rb
rbbt-util-5.21.121 lib/rbbt/util/docker.rb