Changed Rspec --> RSpec throughout.
[sfa.git] / sfa / plc / nodes.py
index 9a2902e..3fb3e98 100644 (file)
@@ -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()