+import sys
+
from sfa.util.faults import MissingSfaInfo
from sfa.util.sfalogging import logger
from sfa.util.table import SfaTable
# SlabDriver should be really only about talking to the senslab testbed
## thierry : please avoid wildcard imports :)
-from sfa.senslab.OARrestapi import *
-from sfa.senslab.SenslabImportUsers import *
+from sfa.senslab.OARrestapi import OARapi
+from sfa.senslab.LDAPapi import LDAPapi
+from sfa.senslab.SenslabImportUsers import SenslabImportUsers
+from sfa.senslab.parsing import parse_filter
def list_to_dict(recs, key):
"""
#print>>sys.stderr, " \r\n \t\t list_to_dict : rec %s \r\n \t\t list_to_dict keys %s" %(recs,keys)
return dict(zip(keys, recs))
-class SlabDriver:
+# thierry : note
+# this inheritance scheme is so that the driver object can receive
+# GetNodes or GetSites sorts of calls directly
+# and thus minimize the differences in the managers with the pl version
+class SlabDriver ():
def __init__(self, config):
+
self.config=config
self.hrn = config.SFA_INTERFACE_HRN
-
+
+ self.root_auth = config.SFA_REGISTRY_ROOT_AUTH
+
+
print >>sys.stderr, "\r\n_____________ SFA SENSLAB DRIVER \r\n"
- # thierry : note
- # this class chould be able to somehow call this API
- # in the pl case see the PlShell class that does exactly that
- # I mean, the rest of the code is going to make calls like
- # api.driver.GetNodes
- # which will result in this class (SlabDriver) receiving the GetNodes call
- # you might wish for example to have SlabDriver inherit the OARapi class instead
+ # thierry - just to not break the rest of this code
+ #self.oar = OARapi()
+ #self.users = SenslabImportUsers()
self.oar = OARapi()
- self.users = SenslabImportUsers()
+ self.ldap = LDAPapi()
+ self.users = SenslabImportUsers()
self.time_format = "%Y-%m-%d %H:%M:%S"
#self.logger=sfa_logger()
- print >>sys.stderr, "\r\n \t\t___________PSFA SENSLAN /API.PY __init__ STOP ",self.interface #dir(self)
+
+ def GetPersons(self, person_filter=None, return_fields=None):
+
+ person_list = self.ldap.ldapFind({'authority': self.root_auth })
+ return_person_list = parse_filter(person_list,person_filter ,'persons', return_fields)
+ return return_person_list
+
+ def GetNodes(self,node_filter= None, return_fields=None):
+
+ self.oar.parser.SendRequest("GET_resources_full")
+ node_dict = self.oar.parser.GetNodesFromOARParse()
+ return_node_list = []
+
+ if not (node_filter or return_fields):
+ return_node_list = node_dict.values()
+ return return_node_list
+
+ return_node_list= parse_filter(node_dict.values(),node_filter ,'node', return_fields)
+ return return_node_list
+
##
# Convert SFA fields to PLC fields for use when registering up updating
# registry record in the PLC database
# get pl records
nodes, sites, slices, persons, keys = {}, {}, {}, {}, {}
if node_ids:
- node_list = self.oar.GetNodes( node_ids)
+ node_list = self.GetNodes( node_ids)
#print>>sys.stderr, " \r\n \t\t\t BEFORE LIST_TO_DICT_NODES node_ids : %s" %(node_ids)
nodes = list_to_dict(node_list, 'node_id')
if site_ids:
slices = list_to_dict(slice_list, 'slice_id')
if person_ids:
#print>>sys.stderr, " \r\n \t\t \t fill_record_pl_info BEFORE GetPersons person_ids: %s" %(person_ids)
- person_list = self.users.GetPersons( person_ids)
+ person_list = self.GetPersons( person_ids)
persons = list_to_dict(person_list, 'person_id')
#print>>sys.stderr, "\r\n fill_record_pl_info persons %s \r\n \t\t person_ids %s " %(persons, person_ids)
for person in persons:
sites = list_to_dict(site_list, 'site_id')
#print>>sys.stderr, " \r\n \r\n \t\t ____ site_list %s \r\n \t\t____ sites %s " % (site_list,sites)
if person_ids:
- person_list = self.users.GetPersons( person_ids, ['person_id', 'email'])
+ person_list = self.GetPersons( person_ids, ['person_id', 'email'])
#print>>sys.stderr, " \r\n \r\n \t\t____ person_lists %s " %(person_list)
persons = list_to_dict(person_list, 'person_id')
if slice_ids:
slice_list = self.users.GetSlices( slice_ids, ['slice_id', 'name'])
slices = list_to_dict(slice_list, 'slice_id')
if node_ids:
- node_list = self.oar.GetNodes( node_ids, ['node_id', 'hostname'])
+ node_list = self.GetNodes( node_ids, ['node_id', 'hostname'])
nodes = list_to_dict(node_list, 'node_id')
# convert ids to hrns
site_pis = {}
if site_ids:
pi_filter = {'|roles': ['pi'], '|site_ids': site_ids}
- pi_list = SenslabUsers.GetPersons( pi_filter, ['person_id', 'site_ids'])
+ pi_list = self.GetPersons( pi_filter, ['person_id', 'site_ids'])
#print>>sys.stderr, "\r\n \r\n _fill_record_sfa_info ___ GetPersons ['person_id', 'site_ids'] pi_ilist %s" %(pi_list)
for pi in pi_list:
# get the pl records
pl_person_list, pl_persons = [], {}
- pl_person_list = SenslabUsers.GetPersons(person_ids, ['person_id', 'roles'])
+ pl_person_list = self.GetPersons(person_ids, ['person_id', 'roles'])
pl_persons = list_to_dict(pl_person_list, 'person_id')
#print>>sys.stderr, "\r\n \r\n _fill_record_sfa_info ___ _list %s \r\n \t\t SenslabUsers.GetPersons ['person_id', 'roles'] pl_persons %s \r\n records %s" %(pl_person_list, pl_persons,records)
# fill sfa info