Like any other machine attribute, you just need to advertise it in the machine classad, and then have your jobs require it.
To advertise it in the machine classad, you can either hard-code it into each machine's condor config file by adding something like this:
has_numpy = True
STARTD_EXPRS = $(STARTD_EXPRS) HAS_NUMPY
... or better yet, you can tell Condor to dynamically discover it at runtime with a script and advertise the result via a startd classad hook. To do that, install a simple has_numpy
script on each machine like so:
#!/usr/bin/env python
try:
import numpy
except ImportError:
print "has_numpy = False"
else:
print "has_numpy = True"
... and then tell Condor to run it every five minutes and stick the results in the startd classad, by adding the following to the machine's condor config file:
HASNUMPY = /usr/libexec/condor/has_numpy
STARTD_CRON_JOBLIST = $(STARTD_CRON_JOBLIST) HASNUMPY
STARTD_CRON_HASNUMPY_EXECUTABLE = $(HASNUMPY)
STARTD_CRON_HASNUMPY_PERIOD = 300
...and then ta-da (after a reconfig) your machines will dynamically detect and report whether numpy is installed and available to python scripts.
Then you just need to add a corresponding requirement to your job submit files, like so:
Requirements = (has_numpy == True)
...and your job will only run on machines where numpy is installed.