I was talking with Todd, I think we both confused a
few things here and possibly exposed a bug.
1. The directQuery() method takes a daemon type argument, not ad
type, e.g. htcondor.DaemonTypes.Startd
2. htcondor.Collector().directQuery() will only return the
ClassAd for slot1@<startd_host>:
>>> startd_ad =
htcondor.Collector().directQuery(htcondor.DaemonTypes.Startd) #
returns a single ClassAd
>>> startd_ad['TotalSlots'] # even though there are two
slots
2L
>>> startd_ad['Name']
'
slot1@xxxxxxxxxxxxxxxxxxxxx'
Here's the bug:
>>> startd_ad =
htcondor.Collector().directQuery(htcondor.DaemonTypes.Startd,
name='
slot2@xxxxxxxxxxxxxxxxxxxxx')
>>> startd_ad['Name'] # should return
slot2@xxxxxxxxxxxxxxxxxxxxx... uh oh!
'
slot1@xxxxxxxxxxxxxxxxxxxxx'
3. There's one unique address to the Startd, which is passed
when constructing the Collector() object, and you can use that
object to query all the Startd ads:
>>> startd_addr = startd_ad['MyAddress'] # get the
address in whatever manner you like
>>> startd = htcondor.Collector(startd_addr)
>>> startd_ads = startd.query(htcondor.AdTypes.Startd)
>>> len(startd_ads) # should get ads for both slots
2
>>> for ad in startd_ads: print ad['Name']
...
slot1@xxxxxxxxxxxxxxxxxxxxx
slot2@xxxxxxxxxxxxxxxxxxxxx
htcondor.Collector.directQuery *should* work just
condor_status -direct, but clearly it doesn't at this point.
We may look to open a ticket about this.
In the meantime, if you want to get info on more than just
slot1, use the "fake" Collector object constructed with the
Startd address.
Jason Patton