There is a way to accomplish this, but it involves getting into the
state machine a bit more here. So the startd has an _expression_ isOwner
that determines when the machine is in the "Owner" state. By default
this value is set to:
isOwner= $(START) =?= False
This means that the machine is in the Owner state when START is false.
Here's where it gets complicated. The isOwner _expression_ is purely
evaluated in the context of the machine classad, while the start
_expression_ is evaluated in the context of the job being considered and
the machine ClassAd. Thus, if you put terms in your START _expression_
that reference the job, they won't evaluate properly in your isOwner
_expression_.
The way around this is to define the isOwner to contain portions of the
START policy that only reference the machine ad, while keeping START
the same.
So let's take an example. Suppose you want to have the machine run jobs
after the keyboard is idle for 10 minutes and Foo is set to True, you
would set:
START= (KeyboardIdle > 10 * $(MINUTE)) && (Foo=?=True) Because the isOwner _expression_ has no idea what foo is, you would set it to be:
isOwner=(KeyboardIdle > 10 * $(MINUTE)) =?= False
Alternately, to keep your policies well organized you could create,
#my start policy referencing machine attributes
MY_MACHINE_START= (KeyboardIdle > 10 * $(MINUTE))
#you change MY_MACHINE_START and it changes in both
#of the appropriate places below
START = $(MY_MACHINE_START) && (Foo=?=True)
isOwner= $(MY_MACHINE_START) =?= False
Either way, the isOwner _expression_ only relies on the Machine oriented
policies in your start _expression_, while the Start _expression_
implements the full policy using machine and job attributes.