X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fplc%2Fnodes.py;h=3fb3e98435adde78f19b69db84ae177f987595b9;hb=73b163a7ea35209e0675a7c7cef367946928a96f;hp=9a2902eff511f7f23d4df6837ec7887b4d200577;hpb=07efe5cf31a5c674ec11ac23e89713ca33e7b785;p=sfa.git diff --git a/sfa/plc/nodes.py b/sfa/plc/nodes.py index 9a2902ef..3fb3e984 100644 --- a/sfa/plc/nodes.py +++ b/sfa/plc/nodes.py @@ -20,7 +20,7 @@ from sfa.server.aggregate import Aggregates class Nodes(SimpleStorage): - def __init__(self, api, ttl = 1): + def __init__(self, api, ttl = 1, caller_cred=None): self.api = api self.ttl = ttl self.threshold = None @@ -31,6 +31,7 @@ class Nodes(SimpleStorage): SimpleStorage.__init__(self, self.nodes_file) self.policy = Policy(api) self.load() + self.caller_cred=caller_cred def refresh(self): @@ -47,9 +48,8 @@ class Nodes(SimpleStorage): elif self.api.interface in ['slicemgr']: self.refresh_nodes_smgr() - def refresh_nodes_aggregate(self): - rspec = Rspec() + rspec = RSpec() rspec.parseString(self.get_rspec()) # filter nodes according to policy @@ -88,7 +88,7 @@ class Nodes(SimpleStorage): self.update(node_details) self.write() - def refresh_nodes_smgr(self): + def get_remote_resources(self, hrn = None): # convert and threshold to ints if self.has_key('timestamp') and self['timestamp']: hr_timestamp = self['timestamp'] @@ -109,27 +109,34 @@ class Nodes(SimpleStorage): aggregates = Aggregates(self.api) rspecs = {} networks = [] - rspec = Rspec() + rspec = RSpec() credential = self.api.getCredential() for aggregate in aggregates: try: + caller_cred = self.caller_cred + arg_list = [credential, hrn] + request_hash = self.api.key.compute_hash(arg_list) + # get the rspec from the aggregate - agg_rspec = aggregates[aggregate].get_resources(credential) + agg_rspec = aggregates[aggregate].get_resources(credential, hrn, request_hash, caller_cred) # extract the netspec from each aggregates rspec rspec.parseString(agg_rspec) networks.extend([{'NetSpec': rspec.getDictsByTagName('NetSpec')}]) except: # XX print out to some error log - print >> log, "Error calling list nodes at aggregate %s" % aggregate + print >> log, "Error getting resources at aggregate %s" % aggregate traceback.print_exc(log) - exc_type, exc_value, exc_traceback = sys.exc_info() - raise exc_type, exc_value + print >> log, "%s" % (traceback.format_exc()) # create the rspec dict resources = {'networks': networks, 'start_time': start_time, 'duration': duration} - resourceDict = {'Rspec': resources} + resourceDict = {'RSpec': resources} # convert rspec dict to xml rspec.parseDict(resourceDict) + return rspec + def refresh_nodes_smgr(self): + + rspec = self.get_remote_resources() # filter according to policy blist = self.policy['node_blacklist'] wlist = self.policy['node_whitelist'] @@ -149,8 +156,19 @@ class Nodes(SimpleStorage): self.update(nodedict) self.write() - def get_rspec(self, hrn = None): + + if self.api.interface in ['slicemgr']: + return self.get_rspec_smgr(hrn) + elif self.api.interface in ['aggregate']: + return self.get_rspec_aggregate(hrn) + + def get_rspec_smgr(self, hrn = None): + + rspec = self.get_remote_resources(hrn) + return rspec.toxml() + + def get_rspec_aggregate(self, hrn = None): """ Get resource information from PLC """ @@ -239,9 +257,9 @@ class Nodes(SimpleStorage): resources = {'networks': networks, 'start_time': start_time, 'duration': duration} # convert the plc dict to an rspec dict - resourceDict = RspecDict(resources) + resourceDict = RSpecDict(resources) # convert the rspec dict to xml - rspec = Rspec() + rspec = RSpec() rspec.parseDict(resourceDict) return rspec.toxml()