added getCredentialFromReistry() method
[sfa.git] / geni / slicemgr.py
index 0a8b1e6..9138923 100644 (file)
@@ -58,7 +58,7 @@ class SliceMgr(GeniServer):
         self.nodes = SimpleStorage(nodes_file)
         self.nodes.load()
         
         self.nodes = SimpleStorage(nodes_file)
         self.nodes.load()
         
-        slices_file = os.sep.join([self.server_basedir, 'smgr' + self.hrn + '.slices'])
+        slices_file = os.sep.join([self.server_basedir, 'smgr.' + self.hrn + '.slices'])
         self.slices = SimpleStorage(slices_file)
         self.slices.load()
 
         self.slices = SimpleStorage(slices_file)
         self.slices.load()
 
@@ -79,22 +79,29 @@ class SliceMgr(GeniServer):
         Attempt to load credential from file if it exists. If it doesnt get
         credential from registry.
         """
         Attempt to load credential from file if it exists. If it doesnt get
         credential from registry.
         """
-
-        self_cred_filename = self.server_basedir + os.sep + "smgr." + self.hrn + ".cred"
-        ma_cred_filename = self.server_basedir + os.sep + "smgr." + self.hrn + ".sa.cred"
         
         # see if this file exists
         
         # see if this file exists
+        ma_cred_filename = self.server_basedir + os.sep + "smgr." + self.hrn + ".sa.cred"
         try:
             self.credential = Credential(filename = ma_cred_filename)
         except IOError:
         try:
             self.credential = Credential(filename = ma_cred_filename)
         except IOError:
-            # get self credential
-            self_cred = self.registry.get_credential(None, 'ma', self.hrn)
-            self_cred.save_to_file(self_cred_filename, save_parents=True)
+            self.credential = self.getCrednetialFromRegistry()
+            
+        
+    def getCredentialFromRegistry(self):
+        """
+        Get our current credential from the registry.
+        """
+        # get self credential
+        self_cred_filename = self.server_basedir + os.sep + "smgr." + self.hrn + ".cred"
+        self_cred = self.registry.get_credential(None, 'ma', self.hrn)
+        self_cred.save_to_file(self_cred_filename, save_parents=True)
 
 
-            # get ma credential
-            ma_cred = self.registry.get_credential(self_cred, 'sa', self.hrn)
-            ma_cred.save_to_file(ma_cred_filename, save_parents=True)
-            self.credential = ma_cred
+        # get ma credential
+        ma_cred_filename = self.server_basedir + os.sep + "smgr." + self.hrn + ".sa.cred"
+        ma_cred = self.registry.get_credential(self_cred, 'sa', self.hrn)
+        ma_cred.save_to_file(ma_cred_filename, save_parents=True)
+        return ma_cred        
 
     def connectRegistry(self):
         """
 
     def connectRegistry(self):
         """
@@ -195,17 +202,15 @@ class SliceMgr(GeniServer):
         for aggregate in aggregates:
             try:
                 # get the rspec from the aggregate
         for aggregate in aggregates:
             try:
                 # get the rspec from the aggregate
-                agg_server = self.aggregates[aggregate]
                 agg_rspec = self.aggregates[aggregate].list_nodes(self.credential)
                 agg_rspec = self.aggregates[aggregate].list_nodes(self.credential)
-                
                 # extract the netspec from each aggregates rspec
                 rspec.parseString(agg_rspec)
                 # extract the netspec from each aggregates rspec
                 rspec.parseString(agg_rspec)
-                networks.extend(rspec.getDictsByTagName('NetSpec'))
+                networks.extend([{'NetSpec': rspec.getDictsByTagName('NetSpec')}])
             except:
                 # XX print out to some error log
                 print "Error calling list nodes at aggregate %s" % aggregate
                 raise    
             except:
                 # XX print out to some error log
                 print "Error calling list nodes at aggregate %s" % aggregate
                 raise    
-   
+  
         # create the rspec dict
         resources = {'networks': networks, 'start_time': start_time, 'duration': duration}
         resourceDict = {'Rspec': resources} 
         # create the rspec dict
         resources = {'networks': networks, 'start_time': start_time, 'duration': duration}
         resourceDict = {'Rspec': resources} 
@@ -247,9 +252,13 @@ class SliceMgr(GeniServer):
         Return a list of components managed by this slice manager.
         """
         # Reload components list
         Return a list of components managed by this slice manager.
         """
         # Reload components list
-        now = datetime.datetime.now()
-        if not self.nodes.has_key('threshold') or not self.nodes['threshold'] or not self.nodes.has_key('timestamp') or not self.nodes['timestamp'] or now > self.nodes['threshold']:
+        if not self.nodes.has_key('threshold') or not self.nodes['threshold'] or not self.nodes.has_key('timestamp') or not self.nodes['timestamp']:
             self.refresh_components()
             self.refresh_components()
+        else:
+            now = datetime.datetime.now()
+            threshold = datetime.datetime.fromtimestamp(time.mktime(time.strptime(self.nodes['threshold'], self.time_format)))
+            if  now > threshold:
+                self.refresh_components()
         return self.nodes[format]
    
      
         return self.nodes[format]
    
      
@@ -274,34 +283,30 @@ class SliceMgr(GeniServer):
         Return the current rspec for the specified slice.
         """
 
         Return the current rspec for the specified slice.
         """
 
-        if slice_hrn in self.slices.keys():
-            # check if we alreay have this slices state saved
-            return  self.slices[slice_hrn]
-        else:
-            # request this slices state from all known aggregates
-            rspec = Rspec()
-            rspecdicts = []
-            networks = []
-            for hrn in self.aggregates.keys():
-                # check if the slice has resources at this hrn
-                slice_resources = self.aggregates[hrn].get_resources(self.credential, slice_hrn)
-                rspec.parseString(slice_resources)
-                networks.extend(rspec.getDictsByTagName('NetSpec'))
+        # request this slices state from all known aggregates
+        rspec = Rspec()
+        rspecdicts = []
+        networks = []
+        for hrn in self.aggregates.keys():
+            # check if the slice has resources at this hrn
+            slice_resources = self.aggregates[hrn].get_resources(self.credential, slice_hrn)
+            rspec.parseString(slice_resources)
+            networks.extend({'NetSpec': rspec.getDictsByTagName('NetSpec')})
             
             
-            # merge all these rspecs into one
-            start_time = int(datetime.datetime.now().strftime("%s"))
-            end_time = start_time
-            duration = end_time - start_time
+        # merge all these rspecs into one
+        start_time = int(datetime.datetime.now().strftime("%s"))
+        end_time = start_time
+        duration = end_time - start_time
     
     
-            resources = {'networks': networks, 'start_time': start_time, 'duration': duration}
-            resourceDict = {'Rspec': resources}
-            # convert rspec dict to xml
-            rspec.parseDict(resourceDict)
-            # save this slices resources
-            self.slices[slice_hrn] = rspec.toxml()
-            self.slices.write()
+        resources = {'networks': networks, 'start_time': start_time, 'duration': duration}
+        resourceDict = {'Rspec': resources}
+        # convert rspec dict to xml
+        rspec.parseDict(resourceDict)
+        # save this slices resources
+        #self.slices[slice_hrn] = rspec.toxml()
+        #self.slices.write()
          
          
-            return rspec.toxml()
+        return rspec.toxml()
  
     def createSlice(self, cred, slice_hrn, rspec):
         """
  
     def createSlice(self, cred, slice_hrn, rspec):
         """