condor 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +26 -0
- data/bin/condor-exec +75 -0
- data/lib/condor.rb +108 -0
- data/test/test_condor.rb +35 -0
- metadata +54 -0
data/README
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
= Ruby Wrapper for Condor
|
2
|
+
|
3
|
+
This is a Ruby wrapper for the {Condor}[http://www.cs.wisc.edu/condor/] distributed computing framework.
|
4
|
+
|
5
|
+
It consists of a wrapper for a Condor submit file and a program, <tt>condor-exec</tt>, that submits an arbitrary command line as a Condor job. For example:
|
6
|
+
|
7
|
+
condor-exec prog --option arg1 arg2
|
8
|
+
|
9
|
+
queues up a job for the +prog+ with arguments <tt>--option arg1 arg2</tt>. To pass options to <tt>condor-exec</tt> itself, place them before +prog+. For example:
|
10
|
+
|
11
|
+
condor-exec --universe=MPI prog --option arg1 arg2
|
12
|
+
|
13
|
+
= History
|
14
|
+
|
15
|
+
1.0.0:: Basic submit file wrapper; <tt>condor-exec</tt> program
|
16
|
+
|
17
|
+
= Copyright
|
18
|
+
|
19
|
+
Copyright 2009, William Patrick McNeill
|
20
|
+
|
21
|
+
This program is distributed under the GNU General Public License.
|
22
|
+
|
23
|
+
|
24
|
+
= Author
|
25
|
+
|
26
|
+
W.P. McNeill mailto:billmcn@gmail.com
|
data/bin/condor-exec
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
# Copyright 2009 William Patrick McNeill
|
4
|
+
#
|
5
|
+
# This file is part of the Condor Ruby Wrapper.
|
6
|
+
#
|
7
|
+
# The Condor Ruby Wrapper is free software; you can redistribute it and/or
|
8
|
+
# modify it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or (at your
|
10
|
+
# option) any later version.
|
11
|
+
#
|
12
|
+
# The Condor Ruby Wrapper is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
15
|
+
# Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License along with
|
18
|
+
# editalign; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
19
|
+
# St, Fifth Floor, Boston, MA 02110-1301 USA
|
20
|
+
|
21
|
+
# This program runs the specified command line as a Condor job.
|
22
|
+
|
23
|
+
require "condor"
|
24
|
+
require "optparse"
|
25
|
+
|
26
|
+
class CommandPassingOptionParser < OptionParser
|
27
|
+
# Treat all switches before the first non-switch as options for this
|
28
|
+
# program. Treat switches after as options to be passed down to the program
|
29
|
+
# run by Condor.
|
30
|
+
def parse_command_line(argv = default_argv)
|
31
|
+
first_non_option_index = 0
|
32
|
+
argv.each_with_index do |arg, i|
|
33
|
+
first_non_option_index = i
|
34
|
+
break if arg !~ /^-/
|
35
|
+
end
|
36
|
+
parse(argv[0..first_non_option_index])
|
37
|
+
argv[first_non_option_index..argv.length]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
options = {}
|
42
|
+
p = CommandPassingOptionParser.new do |opts|
|
43
|
+
opts.banner = <<EOS
|
44
|
+
Usage: #{File.basename(__FILE__)} [options] command [arguments]
|
45
|
+
|
46
|
+
This program launches the specified command line as a Condor process by
|
47
|
+
writing a submit file and calling Condor submit.
|
48
|
+
|
49
|
+
It creates a condor_submit.nnn file in the current directory along with
|
50
|
+
*.output and *.error files named after the program being run. It also creates
|
51
|
+
a Condor log file in the system temporary directory.
|
52
|
+
|
53
|
+
Switch options appearing before the first non-switch argument are passed to
|
54
|
+
#{File.basename(__FILE__)}. Switch optios appearing after the first
|
55
|
+
non-switch argument are treated as arguments to the command.
|
56
|
+
|
57
|
+
Options:
|
58
|
+
EOS
|
59
|
+
|
60
|
+
opts.on("-gVALUE", "--getenv VALUE", "Get environment") do |value|
|
61
|
+
options[:getenv] = value
|
62
|
+
end
|
63
|
+
|
64
|
+
opts.on("-tVALUE", "--transfer-executable VALUE", "Transfer executable") do |value|
|
65
|
+
options[:transfer_executable] = value
|
66
|
+
end
|
67
|
+
|
68
|
+
opts.on("-uVALUE", "--universe VALUE", "Universe") do |value|
|
69
|
+
options[:universe] = value
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
command_line = p.parse_command_line
|
75
|
+
Condor.submit(command_line.shift, command_line, options)
|
data/lib/condor.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
# Copyright 2009 William Patrick McNeill
|
2
|
+
#
|
3
|
+
# This file is part of the Condor Ruby Wrapper.
|
4
|
+
#
|
5
|
+
# The Condor Ruby Wrapper is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation; either version 2 of the License, or (at your
|
8
|
+
# option) any later version.
|
9
|
+
#
|
10
|
+
# The Condor Ruby Wrapper is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
13
|
+
# Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License along with
|
16
|
+
# editalign; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
17
|
+
# St, Fifth Floor, Boston, MA 02110-1301 USA
|
18
|
+
|
19
|
+
require "erb"
|
20
|
+
require "tempfile"
|
21
|
+
|
22
|
+
# Wrapper for the Condor distributed computing system.
|
23
|
+
module Condor
|
24
|
+
|
25
|
+
VERSION = "1.0.0"
|
26
|
+
|
27
|
+
# The text of a file that can be sent to the condor_submit program.
|
28
|
+
class SubmitFile < ERB
|
29
|
+
# Specify a single executable and a list of argument sets. Each element
|
30
|
+
# of argument_list is a set of arguments. One job will be queued up for
|
31
|
+
# each set of arguments.
|
32
|
+
def initialize(executable, argument_list, options = {})
|
33
|
+
# Get defaults for any unspecified options.
|
34
|
+
@options = {
|
35
|
+
:getenv => "true",
|
36
|
+
:transfer_executable => "false",
|
37
|
+
:universe => "vanilla"}.merge!(options)
|
38
|
+
# Create the submit file text.
|
39
|
+
@executable = executable
|
40
|
+
@argument_list = argument_list
|
41
|
+
@log = File.join(Dir::tmpdir, "#{ENV['USER']}.condor.$(Cluster).$(Process)")
|
42
|
+
@output = current_dir_log_file("output")
|
43
|
+
@error = current_dir_log_file("error")
|
44
|
+
# Create the header common to all the jobs.
|
45
|
+
template = <<-EOTEXT
|
46
|
+
Universe = <%= @options[:universe] %>
|
47
|
+
getenv = <%= @options[:getenv] %>
|
48
|
+
transfer_executable = <%= @options[:transfer_executable] %>
|
49
|
+
Log = <%= @log %>
|
50
|
+
Executable = <%= @executable %>
|
51
|
+
EOTEXT
|
52
|
+
# Queue up the arguments for each individual job.
|
53
|
+
argument_list.each_with_index do |arguments, i|
|
54
|
+
template += <<-EOTEXT
|
55
|
+
|
56
|
+
arguments = <%= @argument_list[#{i}].join(" ") %>
|
57
|
+
output = <%= @output %>
|
58
|
+
error = <%= @error %>
|
59
|
+
Queue
|
60
|
+
EOTEXT
|
61
|
+
end
|
62
|
+
super(template)
|
63
|
+
end
|
64
|
+
|
65
|
+
# Allocate the name of a temporary file in the current directory.
|
66
|
+
def current_dir_log_file(name)
|
67
|
+
"#{File.basename(@executable).strip}.$(Cluster).$(Process).#{name}"
|
68
|
+
end
|
69
|
+
|
70
|
+
# Return a string that can serve as a Condor submit file.
|
71
|
+
def to_s
|
72
|
+
result(binding)
|
73
|
+
end
|
74
|
+
|
75
|
+
private :current_dir_log_file
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
# This runs the specified executable and arguments as a Condor command. The
|
80
|
+
# function creates a condor_submit.nnn file in the current directory. STDOUT
|
81
|
+
# and STDERR are routed to *.output and *.error files with the names of the
|
82
|
+
# executable and the process ID in the name. The Condor log file is written
|
83
|
+
# to the system's temporary directory.
|
84
|
+
def Condor.submit(executable, arguments, options = {})
|
85
|
+
if executable.nil? or executable.empty?
|
86
|
+
raise "You must specify a command to run"
|
87
|
+
end
|
88
|
+
# Get full path to the command. BUGBUG This is UNIX specific.
|
89
|
+
executable = `which #{executable} 2> /dev/null`.strip
|
90
|
+
raise "Invalid executable #{executable}" if executable.empty?
|
91
|
+
# Create a unique submit file name of the form condor_submit.nnn.
|
92
|
+
n = 0
|
93
|
+
while n < 1000
|
94
|
+
ext = sprintf("%03d", n)
|
95
|
+
submit_name = "condor_submit.#{ext}"
|
96
|
+
break if not File.exists?(submit_name)
|
97
|
+
n += 1
|
98
|
+
end
|
99
|
+
raise "Cannot create unique submit file name" if n == 1000
|
100
|
+
# Write Condor information to the submit file.
|
101
|
+
File.open(submit_name, "w") do |file|
|
102
|
+
file << Condor::SubmitFile.new(executable, [arguments], options).to_s
|
103
|
+
end
|
104
|
+
# Submit the Condor job.
|
105
|
+
`condor_submit #{submit_name}`
|
106
|
+
end
|
107
|
+
|
108
|
+
end # Condor
|
data/test/test_condor.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
#--
|
4
|
+
|
5
|
+
# Copyright 2007-2008 William Patrick McNeill
|
6
|
+
#
|
7
|
+
# This file is part of the Condor Ruby Wrapper.
|
8
|
+
#
|
9
|
+
# The Condor Ruby Wrapper is free software; you can redistribute it and/or
|
10
|
+
# modify it under the terms of the GNU General Public License as published by
|
11
|
+
# the Free Software Foundation; either version 2 of the License, or (at your
|
12
|
+
# option) any later version.
|
13
|
+
#
|
14
|
+
# The CondorRuby Wrapper is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
17
|
+
# Public License for more details.
|
18
|
+
#
|
19
|
+
# You should have received a copy of the GNU General Public License along with
|
20
|
+
# editalign; if not, write to the Free Software Foundation, Inc., 51 Franklin
|
21
|
+
# St, Fifth Floor, Boston, MA 02110-1301 USA
|
22
|
+
#
|
23
|
+
#++
|
24
|
+
|
25
|
+
# Test cases for the Condor module
|
26
|
+
|
27
|
+
require "test/unit"
|
28
|
+
require "condor"
|
29
|
+
|
30
|
+
|
31
|
+
class CondorTestCase < Test::Unit::TestCase
|
32
|
+
def test_submit_file
|
33
|
+
s = Condor::SubmitFile.new("ruby", "arg1 arg2")
|
34
|
+
end
|
35
|
+
end # CondorTestCase
|
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.2
|
3
|
+
specification_version: 1
|
4
|
+
name: condor
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.0.0
|
7
|
+
date: 2009-01-16 00:00:00 -08:00
|
8
|
+
summary: Ruby wrapper for the Condor distributed computing system
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: billmcn@gmail.com
|
12
|
+
homepage: http://condor.rubyforge.org/
|
13
|
+
rubyforge_project: condor
|
14
|
+
description: This module is a Ruby wrapper for the Condor distributed computing system.
|
15
|
+
autorequire:
|
16
|
+
default_executable: bin/condor-exec
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- W.P. McNeill
|
31
|
+
files:
|
32
|
+
- test/test_condor.rb
|
33
|
+
- lib/condor.rb
|
34
|
+
- bin/condor-exec
|
35
|
+
- README
|
36
|
+
test_files:
|
37
|
+
- test/test_condor.rb
|
38
|
+
rdoc_options:
|
39
|
+
- - --title
|
40
|
+
- Condor -- distributed computing
|
41
|
+
- --main
|
42
|
+
- README
|
43
|
+
- --line-numbers
|
44
|
+
- --inline-source
|
45
|
+
extra_rdoc_files:
|
46
|
+
- README
|
47
|
+
executables:
|
48
|
+
- condor-exec
|
49
|
+
extensions: []
|
50
|
+
|
51
|
+
requirements: []
|
52
|
+
|
53
|
+
dependencies: []
|
54
|
+
|