1 ###########################################################################
2 # Copyright (C) 2012 by
3 # <savakian@sfa2.grenoble.senslab.info>
5 # Copyright: See COPYING file that comes with this distribution
7 ###########################################################################
9 from sfa.senslab.LDAPapi import *
10 import ldap.modlist as modlist
14 from sfa.util.sfalogging import logger
17 from datetime import datetime
18 from dateutil import tz
19 from time import strftime,gmtime
20 from sfa.senslab.OARrestapi import OARrestapi
23 from sfa.senslab.slabdriver import SlabDriver
24 from sfa.util.config import Config
33 if len(sys.argv) > 1 :
34 options_list = sys.argv[1:]
35 #For each valid option, execute the associated function
36 #(defined in the dictionnary supported_options)
38 valid_options_dict = {}
40 #Passing options to the script should be done like this :
41 #-10 OAR -2 SlabDriver
42 for option in options_list:
43 if option in supported_options:
44 #update the values used for the fonctions associated
47 valid_options_dict[option] = value_list
48 #empty the values list for next option
50 print valid_options_dict
53 value_list.append(option[1:])
54 print "value_list",value_list
57 return valid_options_dict
59 def TestLdap(job_id = None):
60 logger.setLevelDebug()
63 ret = ldap.conn.connect(bind=True)
65 print "TEST ldap.conn.connect(bind=True)" , ret
67 ret = ldap.conn.connect(bind=False)
69 print "TEST ldap.conn.connect(bind=False)", ret
72 ret = ldap.LdapSearch()
73 print "TEST ldap.LdapSearch ALL",ret
75 ret = ldap.LdapSearch('(uid=avakian)', [])
76 print "\r\n TEST ldap.LdapSearch ids = avakian",ret
79 password = ldap.generate_password()
80 print "\r\n TEST generate_password ",password
82 maxi = ldap.find_max_uidNumber()
83 print "\r\n TEST find_max_uidNumber " , maxi
86 data['last_name'] = "Drake"
87 data['first_name']="Tim"
88 data['givenName']= data['first_name']
89 data['mail'] = "robin@arkham.fr"
92 record['hrn'] = 'senslab2.drake'
93 record['last_name'] = "Drake"
94 record['first_name']="Tim"
95 record['mail'] = "robin@arkham.fr"
98 login = ldap.generate_login(data)
99 print "\r\n Robin \tgenerate_login ", ret
101 ret = ldap.LdapAddUser(data)
102 print "\r\n Robin \tLdapAddUser ", ret
104 req_ldap = '(uid=' + login + ')'
105 ret = ldap.LdapSearch(req_ldap, [])
106 print "\r\n Robin \tldap.LdapSearch ids = %s %s"%(login,ret )
108 password = "Thridrobin"
109 enc = ldap.encrypt_password(password)
110 print "\r\n Robin \tencrypt_password ", enc
112 ret = ldap.LdapModifyUser(record, {'userPassword':enc})
113 print "\r\n Robin \tChange password LdapModifyUser ", ret
115 dn = 'uid=' + login + ',' + ldap.baseDN
116 ret = ldap.LdapDelete(dn)
117 print "\r\n Robin \tLdapDelete ", ret
120 datanight['last_name'] = "Grayson"
121 datanight['first_name']="Dick"
122 datanight['givenName']= datanight['first_name']
123 datanight['mail'] = "nightwing@arkham.fr"
127 record_night['hrn'] = 'senslab2.grayson'
128 record_night['last_name'] = datanight['last_name']
129 record_night['first_name'] = datanight['first_name']
130 record_night['mail'] = datanight['mail']
132 ret = ldap.LdapFindUser(record_night)
133 print "\r\n Nightwing \tldap.LdapFindHrn %s : %s"%(record_night,ret)
135 ret = ldap.LdapSearch('(uid=grayson)', [])
136 print "\r\n Nightwing \tldap.LdapSearch ids = %s %s"%('grayson',ret )
138 ret = ldap.LdapAddUser(datanight)
139 print "\r\n Nightwing \tLdapAddUser ", ret
141 ret = ldap.LdapResetPassword(record_night)
142 print "\r\n Nightwing \tLdapResetPassword de %s : %s "%(record_night,ret)
144 ret = ldap.LdapDeleteUser(record_night)
145 print "\r\n Nightwing \tLdapDeleteUser ", ret
149 record_avakian['hrn']= 'senslab2.avakian'
150 record_avakian['last_name'] = 'avakian'
151 record_avakian['first_name'] = 'sandrine'
152 record_avakian['mail'] = 'sandrine.avakian@inria.fr'
153 pubkey = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwSUkJ+cr3xM47h8lFkIXJoJhg4wHakTaLJmgTXkzvUmQsQeFB2MjUZ6WAelMXj/EFz2+XkK+bcWNXwfbrLptJQ+XwGpPZlu9YV/kzO63ghVrAyEg0+p7Pn1TO9f1ZYg4R6JfP/3qwH1AsE+X3PNpIewsuEIKwd2wUCJDf5RXJTpl39GizcBFemrRqgs0bdqAN/vUT9YvtWn8fCYR5EfJHVXOK8P1KmnbuGZpk7ryz21pDMlgw13+8aYB+LPkxdv5zG54A5c6o9N3zOCblvRFWaNBqathS8y04cOYWPmyu+Q0Xccwi7vM3Ktm8RoJw+raQNwsmneJOm6KXKnjoOQeiQ== savakian@sfa2.grenoble.senslab.info"
154 ret = ldap.LdapModifyUser(record_avakian, {'sshPublicKey':pubkey})
155 print "\r\n Sandrine \tChange pubkey LdapModifyUser ", ret
158 #record_myslice['hrn']= 'senslab2.myslice'
159 #record_myslice['last_name'] = 'myslice'
160 #record_myslice['first_name'] = 'myslice'
161 #record_myslice['mail'] = 'nturro@inria.fr'
162 #pubkeymyslice = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuyRPwn8PZxjdhu+ciRuPyM0eVBn7XS7i3tym9F30UVhaCd09a/UEmGn7WJZdfsxV3hXqG1Wc766FEst97NuzHzELSuvy/rT96J0UHG4wae4pnzOLd6NwFdZh7pkPsgHMHxK9ALVE68Puu+EDSOB5bBZ9Q624wCIGxEpmuS/+X+dDBTKgG5Hi0WA1uKJwhLSbbXb38auh4FlYgXPsdpljTIJatt+zGL0Zsy6fdrsVRc5W8kr3/SmE4OMNyabKBNyxioSEuYhRSjoQAHnYoevEjZniP8IzscKK7qwelzGUfnJEzexikhsQamhAFti2ReiFfoHBRZxnSc49ioH7Kaci5w== root@rhoecos3.ipv6.lip6.fr"
164 #pubkeytestuser = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYS8tzufciTm6GdNUGHQc64OfTxFebMYUwh/Jl04IPTvjjr26uakbM0M2v33HxZ5Q7PnmPN9pB/w+a+f7a7J4cNs/tApOMg2hb6UrLaOrdnDMOs4KZlfElyDsF3Zx5QwxPYvzsKADAbDVoX4NF9PttuDLdm2l3nLSvm89jfla00GBg+K8grdOCHyYZVX/Wt7kxhXDK3AidQhKJgn+iD5GxvtWMBE+7S5kJGdRW1W10lSLBW3+VNsCrKJB2s8L55Xz/l2HNBScU7T0VcMQJrFxEXKzLPagZsMz0lfLzHESoGHIZ3Tz85DfECbTtMxLts/4KoAEc3EE+PYr2VDeAggDx testuser@myslice"
168 #password = "ReptileFight"
169 #enc = ldap.encrypt_password(password)
170 #print "\r\n sandrine \tencrypt_password ", enc
172 #ret = ldap.LdapModifyUser(record_avakian, {'userPassword':enc})
173 #print "\r\n sandrine \tChange password LdapModifyUser ", ret
177 def get_stuff(oar, uri):
181 data = json.dumps({})
183 headers['X-REMOTE_IDENT'] = 'avakian'
185 headers['content-length'] = '0' #seems that it does not work if we don't add this
188 conn = httplib.HTTPConnection(oar.oarserver['ip'],oar.oarserver['port'])
189 conn.request("GET",uri,data , headers )
190 resp = ( conn.getresponse()).read()
191 #logger.debug("OARrestapi: \t GETRequestToOARRestAPI resp %s" %( resp))
195 js = json.loads(resp)
201 def TestOAR(job_id = None):
202 print "JOB_ID", job_id
203 if isinstance(job_id,list) :
209 print "JOB_ID", job_id
211 jobs = oar.parser.SendRequest("GET_reserved_nodes", username = 'avakian')
212 print "\r\n OAR GET_reserved_nodes ",jobs
216 jobs = oar.parser.SendRequest("GET_jobs")
217 print "\r\n OAR GET_jobs ",jobs
220 jobs = oar.parser.SendRequest("GET_jobs_id", job_id, 'avakian')
221 print "\r\n OAR GET_jobs_id ",jobs
223 uri = '/oarapi/jobs/details.json?state=Running,Waiting,Launching&user=avakian'
224 raw_json = get_stuff(oar,uri)
225 print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
227 uri = '/oarapi/jobs/' + job_id +'.json'
228 raw_json = get_stuff(oar,uri)
229 print "\r\n OAR ",uri,raw_json, "\r\n KKK \t",raw_json.keys()
231 uri = '/oarapi/jobs/' + job_id + '/resources.json'
232 raw_json = get_stuff(oar,uri)
233 print "\r\n OAR ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
235 time_format = "%Y-%m-%d %H:%M:%S"
237 server_timestamp,server_tz = oar.parser.SendRequest("GET_timezone")
239 print "\r\n OAR GetTimezone ",server_timestamp, server_tz
240 print(datetime.fromtimestamp(int(server_timestamp)).strftime('%Y-%m-%d %H:%M:%S'))
242 uri = '/oarapi/resources/full.json'
243 raw_json = get_stuff(oar,uri)
244 print "\r\n OAR ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
246 uri = '/oarapi/jobs.json?user=avakian'
247 raw_json = get_stuff(oar,uri)
248 print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
251 def TestSlabDriver(job_id = None):
254 if isinstance(job_id,list) and len(job_id) == 1:
256 slabdriver = SlabDriver(Config())
257 nodes = slabdriver.GetReservedNodes(username='avakian')
258 print "\r\n \r\n" ,nodes
260 l = slabdriver.GetSlices(slice_filter = '269', slice_filter_type = 'record_id_user')
263 print "\r\n \r\nGetSlices", l
265 persons = slabdriver.GetPersons()
266 print "\r\n \r\n GetPersons", persons
267 #slabdriver.DeleteJobs(job_id,'senslab2.avakian_slice')
270 def TestSfi(arg = None):
272 print " ================= SFI.PY RESOURCES ============="
273 listing = os.system("sfi.py list senslab2")
276 resources = os.system("sfi.py resources")
279 slab = os.system("sfi.py resources -r slab")
282 resourcesall = os.system("sfi.py resources -l all")
285 print "================= SFI.PY RESOURCES -R SLAB -L ALL ============="
286 slaball = os.system("sfi.py resources -r slab -l all")
287 filename = "/home/savakian/flab-sfa/avakian_adv.rspec"
288 rspecfile = open(filename,"w")
289 r = os.popen("sfi.py resources -l all")
290 for i in r.readlines():
294 print " ================= SFI.PY SHOW SLICE ============="
295 slices_rec = os.system("sfi.py resources senslab2.avakian_slice")
297 print " ================= SFI.PY SHOW USER ============="
298 show_slice = os.system("sfi.py show senslab2.avakian_slice")
300 print " ================= SFI.PY SHOW NODE ============="
301 show = os.system("sfi.py show senslab2.avakian")
303 print " ================= SFI.PY SLICES ============="
304 show_node = os.system("sfi.py show senslab2.node67.grenoble.senslab.info")
306 print " ================= SFI.PY LIST SLICE ============="
307 slices = os.system("sfi.py slices")
309 print " ================= SFI.PY STATUS SLICE ============="
310 status_slice = os.system("sfi.py status senslab2.avakian_slice")
312 print " ================= SFI.PY DELETE SLICE ============="
313 status_slice = os.system("sfi.py delete senslab2.avakian_slice")
315 print " ================= SFI.PY CREATE SLICE ============="
316 create = os.system("sfi.py create senslab2.avakian_slice /home/savakian/flab-sfa/rspec_sfa.rspec")
319 def RunAll(job_id = 1):
322 TestSlabDriver(job_id)
326 supported_options = {
329 'driver': TestSlabDriver,
334 opts = parse_options()
337 supported_options[opt](opts[opt])
340 if __name__ == "__main__":