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):
203 if isinstance(job_id,list) and len(job_id) == 1:
210 jobs = oar.parser.SendRequest("GET_reserved_nodes", username = 'avakian')
211 print "\r\n OAR GET_reserved_nodes ",jobs
215 jobs = oar.parser.SendRequest("GET_jobs")
216 print "\r\n OAR GET_jobs ",jobs
219 jobs = oar.parser.SendRequest("GET_jobs_id", job_id, 'avakian')
220 print "\r\n OAR GET_jobs_id ",jobs
222 uri = '/oarapi/jobs/details.json?state=Running,Waiting,Launching&user=avakian'
223 raw_json = get_stuff(oar,uri)
224 print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
226 uri = '/oarapi/jobs/' + job_id +'.json'
227 raw_json = get_stuff(oar,uri)
228 print "\r\n OAR ",uri,raw_json, "\r\n KKK \t",raw_json.keys()
230 uri = '/oarapi/jobs/' + job_id + '/resources.json'
231 raw_json = get_stuff(oar,uri)
232 print "\r\n OAR ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
234 time_format = "%Y-%m-%d %H:%M:%S"
236 server_timestamp,server_tz = oar.parser.SendRequest("GET_timezone")
238 print "\r\n OAR GetTimezone ",server_timestamp, server_tz
239 print(datetime.fromtimestamp(int(server_timestamp)).strftime('%Y-%m-%d %H:%M:%S'))
241 uri = '/oarapi/resources/full.json'
242 raw_json = get_stuff(oar,uri)
243 print "\r\n OAR ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
245 uri = '/oarapi/jobs.json?user=avakian'
246 raw_json = get_stuff(oar,uri)
247 print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
250 def TestSlabDriver(job_id = None):
253 if isinstance(job_id,list) and len(job_id) == 1:
255 slabdriver = SlabDriver(Config())
256 nodes = slabdriver.GetReservedNodes(username='avakian')
257 print "\r\n \r\n" ,nodes
259 l = slabdriver.GetSlices(slice_filter = '269', slice_filter_type = 'record_id_user')
262 print "\r\n \r\nGetSlices", l
264 persons = slabdriver.GetPersons()
265 print "\r\n \r\n GetPersons", persons
266 #slabdriver.DeleteJobs(job_id,'senslab2.avakian_slice')
269 def TestSfi(arg = None):
271 print " ================= SFI.PY RESOURCES ============="
272 listing = os.system("sfi.py list senslab2")
275 resources = os.system("sfi.py resources")
278 slab = os.system("sfi.py resources -r slab")
281 resourcesall = os.system("sfi.py resources -l all")
284 print "================= SFI.PY RESOURCES -R SLAB -L ALL ============="
285 slaball = os.system("sfi.py resources -r slab -l all")
286 filename = "/home/savakian/flab-sfa/avakian_adv.rspec"
287 rspecfile = open(filename,"w")
288 r = os.popen("sfi.py resources -l all")
289 for i in r.readlines():
293 print " ================= SFI.PY SHOW SLICE ============="
294 slices_rec = os.system("sfi.py resources senslab2.avakian_slice")
296 print " ================= SFI.PY SHOW USER ============="
297 show_slice = os.system("sfi.py show senslab2.avakian_slice")
299 print " ================= SFI.PY SHOW NODE ============="
300 show = os.system("sfi.py show senslab2.avakian")
302 print " ================= SFI.PY SLICES ============="
303 show_node = os.system("sfi.py show senslab2.node67.grenoble.senslab.info")
305 print " ================= SFI.PY LIST SLICE ============="
306 slices = os.system("sfi.py slices")
308 print " ================= SFI.PY STATUS SLICE ============="
309 status_slice = os.system("sfi.py status senslab2.avakian_slice")
311 print " ================= SFI.PY DELETE SLICE ============="
312 status_slice = os.system("sfi.py delete senslab2.avakian_slice")
314 print " ================= SFI.PY CREATE SLICE ============="
315 create = os.system("sfi.py create senslab2.avakian_slice /home/savakian/flab-sfa/rspec_sfa.rspec")
318 def RunAll(job_id = 1):
321 TestSlabDriver(job_id)
325 supported_options = {
328 'driver': TestSlabDriver,
333 opts = parse_options()
336 supported_options[opt](opts[opt])
339 if __name__ == "__main__":