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
35 if len(sys.argv) > 1 :
36 options_list = sys.argv[1:]
37 #For each valid option, execute the associated function
38 #(defined in the dictionnary supported_options)
40 valid_options_dict = {}
42 #Passing options to the script should be done like this :
43 #-10 OAR -2 SlabDriver
44 for option in options_list:
45 if option in supported_options:
46 #update the values used for the fonctions associated
49 valid_options_dict[option] = value_list
50 #empty the values list for next option
52 print valid_options_dict
55 value_list.append(option[1:])
56 print "value_list",value_list
59 return valid_options_dict
61 def TestLdap(job_id = None):
62 logger.setLevelDebug()
65 ret = ldap.conn.connect(bind=True)
67 print "TEST ldap.conn.connect(bind=True)" , ret
69 ret = ldap.conn.connect(bind=False)
71 print "TEST ldap.conn.connect(bind=False)", ret
74 ret = ldap.LdapSearch()
75 print "TEST ldap.LdapSearch ALL",ret
77 ret = ldap.LdapSearch('(uid=avakian)', [])
78 print "\r\n TEST ldap.LdapSearch ids = avakian",ret
81 password = ldap.generate_password()
82 print "\r\n TEST generate_password ",password
84 maxi = ldap.find_max_uidNumber()
85 print "\r\n TEST find_max_uidNumber " , maxi
88 data['last_name'] = "Drake"
89 data['first_name']="Tim"
90 data['givenName']= data['first_name']
91 data['mail'] = "robin@arkham.fr"
94 record['hrn'] = 'senslab.drake'
95 record['last_name'] = "Drake"
96 record['first_name']="Tim"
97 record['mail'] = "robin@arkham.fr"
100 login = ldap.generate_login(data)
101 print "\r\n Robin \tgenerate_login ", ret, login
103 ret = ldap.LdapAddUser(data)
104 print "\r\n Robin \tLdapAddUser ", ret
106 req_ldap = '(uid=' + login + ')'
107 ret = ldap.LdapSearch(req_ldap, [])
108 print "\r\n Robin \tldap.LdapSearch ids = %s %s"%(login,ret )
110 password = "Thridrobin"
111 enc = ldap.encrypt_password(password)
112 print "\r\n Robin \tencrypt_password ", enc
114 ret = ldap.LdapModifyUser(record, {'userPassword':enc})
115 print "\r\n Robin \tChange password LdapModifyUser ", ret
117 #dn = 'uid=' + login + ',' + ldap.baseDN
118 #ret = ldap.LdapDelete(dn)
119 #print "\r\n Robin \tLdapDelete ", ret
122 datanight['last_name'] = "Grayson"
123 datanight['first_name']="Dick"
124 datanight['givenName']= datanight['first_name']
125 datanight['mail'] = "nightwing@arkham.fr"
129 record_night['hrn'] = 'senslab.grayson'
130 record_night['last_name'] = datanight['last_name']
131 record_night['first_name'] = datanight['first_name']
132 record_night['mail'] = datanight['mail']
134 ret = ldap.LdapFindUser(record_night)
135 print "\r\n Nightwing \tldap.LdapFindUser %s : %s"%(record_night,ret)
137 #ret = ldap.LdapSearch('(uid=grayson)', [])
138 #print "\r\n Nightwing \tldap.LdapSearch ids = %s %s"%('grayson',ret )
140 ret = ldap.LdapAddUser(datanight)
141 print "\r\n Nightwing \tLdapAddUser ", ret
143 ret = ldap.LdapResetPassword(record_night)
144 print "\r\n Nightwing \tLdapResetPassword de %s : %s "%(record_night,ret)
146 ret = ldap.LdapDeleteUser(record_night)
147 print "\r\n Nightwing \tLdapDeleteUser ", ret
151 #record_avakian['hrn']= 'senslab.avakian'
152 #record_avakian['last_name'] = 'avakian'
153 #record_avakian['first_name'] = 'sandrine'
154 #record_avakian['mail'] = 'sandrine.avakian@inria.fr'
155 #pubkey = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwSUkJ+cr3xM47h8lFkIXJoJhg4wHakTaLJmgTXkzvUmQsQeFB2MjUZ6WAelMXj/EFz2+XkK+bcWNXwfbrLptJQ+XwGpPZlu9YV/kzO63ghVrAyEg0+p7Pn1TO9f1ZYg4R6JfP/3qwH1AsE+X3PNpIewsuEIKwd2wUCJDf5RXJTpl39GizcBFemrRqgs0bdqAN/vUT9YvtWn8fCYR5EfJHVXOK8P1KmnbuGZpk7ryz21pDMlgw13+8aYB+LPkxdv5zG54A5c6o9N3zOCblvRFWaNBqathS8y04cOYWPmyu+Q0Xccwi7vM3Ktm8RoJw+raQNwsmneJOm6KXKnjoOQeiQ== savakian@sfa2.grenoble.senslab.info"
156 #ret = ldap.LdapModifyUser(record_night, {'sshPublicKey':pubkey})
157 #print "\r\n Sandrine \tChange pubkey LdapModifyUser ", ret
160 #record_myslice['hrn']= 'senslab.myslice'
161 #record_myslice['last_name'] = 'myslice'
162 #record_myslice['first_name'] = 'myslice'
163 #record_myslice['mail'] = 'nturro@inria.fr'
164 #pubkeymyslice = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuyRPwn8PZxjdhu+ciRuPyM0eVBn7XS7i3tym9F30UVhaCd09a/UEmGn7WJZdfsxV3hXqG1Wc766FEst97NuzHzELSuvy/rT96J0UHG4wae4pnzOLd6NwFdZh7pkPsgHMHxK9ALVE68Puu+EDSOB5bBZ9Q624wCIGxEpmuS/+X+dDBTKgG5Hi0WA1uKJwhLSbbXb38auh4FlYgXPsdpljTIJatt+zGL0Zsy6fdrsVRc5W8kr3/SmE4OMNyabKBNyxioSEuYhRSjoQAHnYoevEjZniP8IzscKK7qwelzGUfnJEzexikhsQamhAFti2ReiFfoHBRZxnSc49ioH7Kaci5w== root@rhoecos3.ipv6.lip6.fr"
166 #pubkeytestuser = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYS8tzufciTm6GdNUGHQc64OfTxFebMYUwh/Jl04IPTvjjr26uakbM0M2v33HxZ5Q7PnmPN9pB/w+a+f7a7J4cNs/tApOMg2hb6UrLaOrdnDMOs4KZlfElyDsF3Zx5QwxPYvzsKADAbDVoX4NF9PttuDLdm2l3nLSvm89jfla00GBg+K8grdOCHyYZVX/Wt7kxhXDK3AidQhKJgn+iD5GxvtWMBE+7S5kJGdRW1W10lSLBW3+VNsCrKJB2s8L55Xz/l2HNBScU7T0VcMQJrFxEXKzLPagZsMz0lfLzHESoGHIZ3Tz85DfECbTtMxLts/4KoAEc3EE+PYr2VDeAggDx testuser@myslice"
170 #password = "ReptileFight"
171 #enc = ldap.encrypt_password(password)
172 #print "\r\n sandrine \tencrypt_password ", enc
174 #ret = ldap.LdapModifyUser(record_avakian, {'userPassword':enc})
175 #print "\r\n sandrine \tChange password LdapModifyUser ", ret
179 def get_stuff(oar, uri):
183 data = json.dumps({})
185 headers['X-REMOTE_IDENT'] = 'avakian'
187 headers['content-length'] = '0' #seems that it does not work if we don't add this
190 conn = httplib.HTTPConnection(oar.oarserver['ip'],oar.oarserver['port'])
191 conn.request("GET",uri,data , headers )
192 resp = ( conn.getresponse()).read()
193 #logger.debug("OARrestapi: \t GETRequestToOARRestAPI resp %s" %( resp))
197 js = json.loads(resp)
203 def TestOAR(job_id = None):
204 print "JOB_ID", job_id
205 if isinstance(job_id,list) :
212 print "JOB_ID", job_id
214 jobs = oar.parser.SendRequest("GET_reserved_nodes", username = 'avakian')
215 print "\r\n OAR GET_reserved_nodes ",jobs
219 jobs = oar.parser.SendRequest("GET_jobs")
220 print "\r\n OAR GET_jobs ",jobs
223 jobs = oar.parser.SendRequest("GET_jobs_id", job_id, 'avakian')
224 print "\r\n OAR GET_jobs_id ",jobs
226 uri = '/oarapi/jobs/details.json?state=Running,Waiting,Launching&user=avakian'
227 raw_json = get_stuff(oar,uri)
228 print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
230 uri = '/oarapi/jobs/' + job_id +'.json'
231 raw_json = get_stuff(oar,uri)
232 print "\r\n OAR ",uri,raw_json, "\r\n KKK \t",raw_json.keys()
234 uri = '/oarapi/jobs/' + job_id + '/resources.json'
235 raw_json = get_stuff(oar,uri)
236 print "\r\n OAR ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
238 time_format = "%Y-%m-%d %H:%M:%S"
240 server_timestamp,server_tz = oar.parser.SendRequest("GET_timezone")
242 print "\r\n OAR GetTimezone ",server_timestamp, server_tz
243 print(datetime.fromtimestamp(int(server_timestamp)).strftime('%Y-%m-%d %H:%M:%S'))
245 uri = '/oarapi/resources/full.json'
246 raw_json = get_stuff(oar,uri)
247 print "\r\n OAR ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
249 uri = '/oarapi/jobs.json?user=avakian'
250 raw_json = get_stuff(oar,uri)
251 print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
256 def TestSlabDriver(job_id = None):
259 if isinstance(job_id,list) and len(job_id) == 1:
261 slabdriver = SlabDriver(Config())
263 nodes = slabdriver.GetReservedNodes()
264 print " \r\n \r\n GetReservedNodes" ,nodes
266 sl = slabdriver.GetSlices(slice_filter='senslab.avakian_slice', slice_filter_type='slice_hrn')
267 print "\r\n \r\nGetSlices", sl[0]
269 sl = slabdriver.GetSlices(slice_filter='529', slice_filter_type='record_id_user')
270 print "\r\n \r\nGetSlices", sl
272 sl = slabdriver.GetSlices()
273 print "\r\n \r\nGetSlices", sl
275 persons = slabdriver.GetPersons()
276 print "\r\n \r\n GetPersons", persons
278 leases = slabdriver.GetLeases(login='avakian')
279 print "\r\n \r\n GetLeases", leases
285 def TestSfi(arg = None):
287 print " ================= SFI.PY RESOURCES ============="
288 listing = os.system("sfi.py list senslab")
291 resources = os.system("sfi.py resources")
294 slab = os.system("sfi.py resources -r slab")
297 resourcesall = os.system("sfi.py resources -l all")
300 print "================= SFI.PY RESOURCES -R SLAB -L ALL ============="
301 slaball = os.system("sfi.py resources -r slab -l all")
302 filename = "/home/savakian/flab-sfa/avakian_adv.rspec"
303 rspecfile = open(filename,"w")
304 r = os.popen("sfi.py resources -l all")
305 for i in r.readlines():
309 print " ================= SFI.PY SHOW SLICE ============="
310 slices_rec = os.system("sfi.py resources senslab.avakian_slice")
312 print " ================= SFI.PY SHOW USER ============="
313 show_slice = os.system("sfi.py show senslab.avakian_slice")
315 print " ================= SFI.PY SHOW NODE ============="
316 show = os.system("sfi.py show senslab.avakian")
318 print " ================= SFI.PY SLICES ============="
319 show_node = os.system("sfi.py show senslab.node67.grenoble.senslab.info")
321 print " ================= SFI.PY LIST SLICE ============="
322 slices = os.system("sfi.py slices")
324 print " ================= SFI.PY STATUS SLICE ============="
325 status_slice = os.system("sfi.py status senslab.avakian_slice")
327 print " ================= SFI.PY DELETE SLICE ============="
328 status_slice = os.system("sfi.py delete senslab.avakian_slice")
330 print " ================= SFI.PY CREATE SLICE ============="
331 create = os.system("sfi.py create senslab.avakian_slice /home/savakian/flab-sfa/rspec_sfa.rspec")
333 def TestSQL(arg = None):
334 from sfa.storage.model import make_record, RegRecord, RegAuthority, RegUser, RegSlice, RegKey
335 from sfa.storage.alchemy import dbsession
336 from sqlalchemy.orm.collections import InstrumentedList
338 from sqlalchemy.orm import joinedload
340 solo_query_slice_list = dbsession.query(RegSlice).options(joinedload('reg_researchers')).filter_by(hrn='senslab.avakian_slice').first()
341 print "\r\n \r\n =========== query_slice_list RegSlice joinedload('reg_researchers') senslab.avakian first \r\n \t ",solo_query_slice_list.__dict__
343 query_slice_list = dbsession.query(RegSlice).options(joinedload('reg_researchers')).all()
344 print "\r\n \r\n =========== query_slice_list RegSlice joinedload('reg_researchers') ALL \r\n \t", query_slice_list[0].__dict__
345 return_slicerec_dictlist = []
346 record = query_slice_list[0]
347 print "\r\n \r\n =========== \r\n \t", record
349 tmp = record.__dict__
350 print "\r\n \r\n =========== \r\n \t", tmp
351 tmp['reg_researchers'] = tmp['reg_researchers'][0].__dict__
352 print "\r\n \r\n =========== \r\n \t", tmp
353 #del tmp['reg_researchers']['_sa_instance_state']
354 return_slicerec_dictlist.append(tmp)
356 print "\r\n \r\n =========== \r\n \t",return_slicerec_dictlist
366 supported_options = {
369 'driver': TestSlabDriver,
375 opts = parse_options()
378 supported_options[opt](opts[opt])
381 if __name__ == "__main__":