-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChirpTools.py
More file actions
83 lines (70 loc) · 2.35 KB
/
Copy pathChirpTools.py
File metadata and controls
83 lines (70 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import os
import socket
import CondorTools
class ChirpInfo(object):
""" Use Chirp jobAttrs to post host:port pairs """
def __init__(self,prefix):
self.prefix = prefix
self.chirp = CondorTools.CondorChirp()
self.jobAttr = "%sServer" % prefix
self.md5Attr = "%sMD5" % prefix
self.OutfileAttr = "%sOutfile" % prefix
self.UserkeyAttr = "%sUserkey" % prefix
self.UserAttr = "%sUser" % prefix
self.host = socket.getfqdn()
## Generic logging
def ulog(self, who, message):
logMessage = "%s(%s) %s:%s" % (self.host,self.prefix,who,message)
self.chirp.ulog(logMessage)
# MD5 Attributes
def postMD5(self,md5):
self.chirp.setJobAttr(self.md5Attr, "'%s'" % md5)
def clearMD5(self):
self.chirp.setJobAttr(self.md5Attr, None)
def getMD5(self):
interval = 5
maxtries = 12
md5 = self.chirp.getJobAttrWait(self.md5Attr,None,interval, maxtries)
return md5
# Port Attributes
def postPort(self,port):
self.chirp.setJobAttr(self.jobAttr, "'%s %d'" % (self.host, port))
def clearPort(self):
self.chirp.setJobAttr(self.jobAttr, None)
def getHostPort(self):
interval = 5
maxtries = 12*3
serverInfo = self.chirp.getJobAttrWait(self.jobAttr,None,interval, maxtries)
host,port = serverInfo.strip("'").split()
return (host,port)
## The attributes are written before server is declared ready
## Never explicitly cleared
# Outputfile (for SCP)
def postOutputfile(self,outfile):
if not os.path.isabs(outfile):
outfile = os.path.join(os.getcwd(),outfile)
self.chirp.setJobAttr(self.OutfileAttr, "'%s'" % outfile)
def getOutputfile(self):
return self.chirp.getJobAttr(self.OutfileAttr)
# Userkey (For SCP)
# Use Chirp for the client to send the public key
def postUserkey(self,keyfile):
"""read the contents of a keyfile and post, unless keyfile is None"""
if keyfile is None: return
f = open(keyfile,"r")
key = "'%s'" % f.readline().strip()
print "key is '%s'" % key
f.close()
self.chirp.setJobAttr(self.UserkeyAttr, key)
def getUserkey(self):
interval = 5
maxtries = 12*3
# trim off the beginning/ending '
return self.chirp.getJobAttrWait(self.UserkeyAttr,None,interval, maxtries)[1:-1]
def clearUserkey(self):
self.chirp.setJobAttr(self.UserkeyAttr, None)
# Localuser (for SCP)
def postUser(self,user):
self.chirp.setJobAttr(self.UserAttr, "'%s'" % user)
def getUser(self):
return self.chirp.getJobAttr(self.UserAttr)