-The naive way to do this is to know, a-priori, which machines have the software, and constrain the requirements expression so that your job only matches those machines. This is often problematic and hard to maintain. A better solution involves a two-step process. +The naive way to do this is to know ahead of time exactly which machines have the software, and then constrain the =Requirements= expression of the job so that it only matches those machines. Knowing ahead of time is problematic and difficult to maintain as the pool changes. A better solution uses this two-step process. -First, you need to tell the machines to report that they have special -software installed, and second, you need to tell the jobs to require -machines that have that software. +First, each machine that has the special software installed needs to advertise its availability in its machine ClassAd. Second, the job identifies in its submit description file that it requires a machine that has the special software. -To tell the machines to report the presence of special software, first -add a parameter to their configuration files like so: +A machine advertises the presence of special software in its local configuration file, as in this example: {code} HAS_MY_SOFTWARE = True {endcode} -And then, if there are already STARTD_ATTRS defined in that file, add -HAS_MY_SOFTWARE to them, or, if not, add the line: +Also, if =STARTD_ATTRS= is already defined in that file, add +=HAS_MY_SOFTWARE= to the list. If =STARTD_ATTRS= is not already in +that local configuration file, add the line: {code} STARTD_ATTRS = HAS_MY_SOFTWARE, $(STARTD_ATTRS) {endcode} -Note For these changes to take effect, each condor_startd you update -needs to be reconfigured with condor_reconfig -startd. +For this configuration change to take effect, the condor_startd on that machine +needs to be reconfigured. Use =condor_reconfig -startd=. Each machine with +the configuration change must be reconfigured. -You can double-check that this has been correctly added by running the condor_status command: +Double check that this has been correctly implemented by running the condor_status command: {code} condor_status -constraint HAS_MY_SOFTWARE {endcode} -Next, to tell your jobs to only run on machines that have this -software, add a requirements statement to their submit files like so: +Jobs that need to run on the machines with the special software installedadd a =Requirements= command to their submit description file: {code} Requirements = (HAS_MY_SOFTWARE =?= True) {endcode} -Note Be sure to use =?= instead of == so that if a machine doesn't have -the HAS_MY_SOFTWARE parameter defined, the job's Requirements -expression will not evaluate to ``undefined'', preventing it from -running anywhere! +Be sure to use =?= instead of ==, so that if a machine does not have +the =HAS_MY_SOFTWARE= configuration variable defined, the job's =Requirements= +expression will not evaluate to =Undefined=, preventing the job from +running anywhere.