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) :
210 print "JOB_ID", job_id
212 jobs = oar.parser.SendRequest("GET_reserved_nodes", username = 'avakian')
213 print "\r\n OAR GET_reserved_nodes ",jobs
217 jobs = oar.parser.SendRequest("GET_jobs")
218 print "\r\n OAR GET_jobs ",jobs
221 jobs = oar.parser.SendRequest("GET_jobs_id", job_id, 'avakian')
222 print "\r\n OAR GET_jobs_id ",jobs
224 uri = '/oarapi/jobs/details.json?state=Running,Waiting,Launching&user=avakian'
225 raw_json = get_stuff(oar,uri)
226 print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
228 uri = '/oarapi/jobs/' + job_id +'.json'
229 raw_json = get_stuff(oar,uri)
230 print "\r\n OAR ",uri,raw_json, "\r\n KKK \t",raw_json.keys()
232 uri = '/oarapi/jobs/' + job_id + '/resources.json'
233 raw_json = get_stuff(oar,uri)
234 print "\r\n OAR ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
236 time_format = "%Y-%m-%d %H:%M:%S"
238 server_timestamp,server_tz = oar.parser.SendRequest("GET_timezone")
240 print "\r\n OAR GetTimezone ",server_timestamp, server_tz
241 print(datetime.fromtimestamp(int(server_timestamp)).strftime('%Y-%m-%d %H:%M:%S'))
243 uri = '/oarapi/resources/full.json'
244 raw_json = get_stuff(oar,uri)
245 print "\r\n OAR ",uri, raw_json, "\r\n KKK \t",raw_json.keys()
247 uri = '/oarapi/jobs.json?user=avakian'
248 raw_json = get_stuff(oar,uri)
249 print "\r\nOAR ", uri, raw_json, "\r\n KKK \t",raw_json.keys()
252 def TestSlabDriver(job_id = None):
255 if isinstance(job_id,list) and len(job_id) == 1:
257 slabdriver = SlabDriver(Config())
258 nodes = slabdriver.GetReservedNodes(username='avakian')
259 print "\r\n \r\n" ,nodes
261 l = slabdriver.GetSlices(slice_filter = '269', slice_filter_type = 'record_id_user')
264 print "\r\n \r\nGetSlices", l
266 persons = slabdriver.GetPersons()
267 print "\r\n \r\n GetPersons", persons
268 #slabdriver.DeleteJobs(job_id,'senslab2.avakian_slice')
271 def TestSfi(arg = None):
273 print " ================= SFI.PY RESOURCES ============="
274 listing = os.system("sfi.py list senslab2")
277 resources = os.system("sfi.py resources")
280 slab = os.system("sfi.py resources -r slab")
283 resourcesall = os.system("sfi.py resources -l all")
286 print "================= SFI.PY RESOURCES -R SLAB -L ALL ============="
287 slaball = os.system("sfi.py resources -r slab -l all")
288 filename = "/home/savakian/flab-sfa/avakian_adv.rspec"
289 rspecfile = open(filename,"w")
290 r = os.popen("sfi.py resources -l all")
291 for i in r.readlines():
295 print " ================= SFI.PY SHOW SLICE ============="
296 slices_rec = os.system("sfi.py resources senslab2.avakian_slice")
298 print " ================= SFI.PY SHOW USER ============="
299 show_slice = os.system("sfi.py show senslab2.avakian_slice")
301 print " ================= SFI.PY SHOW NODE ============="
302 show = os.system("sfi.py show senslab2.avakian")
304 print " ================= SFI.PY SLICES ============="
305 show_node = os.system("sfi.py show senslab2.node67.grenoble.senslab.info")
307 print " ================= SFI.PY LIST SLICE ============="
308 slices = os.system("sfi.py slices")
310 print " ================= SFI.PY STATUS SLICE ============="
311 status_slice = os.system("sfi.py status senslab2.avakian_slice")
313 print " ================= SFI.PY DELETE SLICE ============="
314 status_slice = os.system("sfi.py delete senslab2.avakian_slice")
316 print " ================= SFI.PY CREATE SLICE ============="
317 create = os.system("sfi.py create senslab2.avakian_slice /home/savakian/flab-sfa/rspec_sfa.rspec")
327 supported_options = {
330 'driver': TestSlabDriver,
335 opts = parse_options()
338 supported_options[opt](opts[opt])
341 if __name__ == "__main__":