formatting
authorTony Mack <tmack@cs.princeton.edu>
Mon, 26 Jan 2009 23:02:45 +0000 (23:02 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Mon, 26 Jan 2009 23:02:45 +0000 (23:02 +0000)
plc/slicemgr.py

index a0f2801..ed40691 100644 (file)
@@ -38,113 +38,113 @@ class SliceMgr(GeniServer):
 
     def __init__(self, ip, port, key_file, cert_file, config = "/usr/share/geniwrapper/util/geni_config"):
         GeniServer.__init__(ip, port, key_file, cert_file)
-       self.key_file = key_file
-       self.cert_file = cert_file
-       self.conf = Config(config)
+           self.key_file = key_file
+           self.cert_file = cert_file
+           self.conf = Config(config)
         basedir = self.conf.GENI_BASE_DIR + os.sep
         server_basedir = basedir + os.sep + "plc" + os.sep
-       self.hrn = conf.GENI_INTERFACE_HRN
+           self.hrn = conf.GENI_INTERFACE_HRN
        
-       # Get list of aggregates this sm talks to
-       aggregates_file = server_basedir + os.sep + 'aggregates'
-       self.load_aggregates(aggregates_file) 
-       self.components_file = os.sep.join([server_basedir, 'components', 'slicemgr.' + hrn + '.comp'])
-       self.slices_file = os.sep.join([server_basedir, 'components', 'slicemgr' + hrn + '.slices'])
-       self.timestamp_file = os.sep.join([server_basedir, 'components', 'slicemgr' + hrn + '.timestamp']) 
-       self.components_ttl = components_ttl
-       self.policy['whitelist'] = []
+           # Get list of aggregates this sm talks to
+           aggregates_file = server_basedir + os.sep + 'aggregates'
+           self.load_aggregates(aggregates_file) 
+           self.components_file = os.sep.join([server_basedir, 'components', 'slicemgr.' + hrn + '.comp'])
+           self.slices_file = os.sep.join([server_basedir, 'components', 'slicemgr' + hrn + '.slices'])
+           self.timestamp_file = os.sep.join([server_basedir, 'components', 'slicemgr' + hrn + '.timestamp']) 
+           self.components_ttl = components_ttl
+           self.policy['whitelist'] = []
         self.policy['blacklist'] = []
-       self.connect()
+           self.connect()
 
     def load_aggregates(self, aggregates_file):
-       """
-       Get info about the aggregates available to us from file and create 
+           """
+           Get info about the aggregates available to us from file and create 
         an xmlrpc connection to each. If any info is invalid, skip it. 
-       """
-       lines = []
+           """
+           lines = []
         try:
-           f = open(aggregates_file, 'r')
-           lines = f.readlines()
-           f.close()
-       except: raise 
+               f = open(aggregates_file, 'r')
+               lines = f.readlines()
+               f.close()
+           except: raise 
        
-       for line in lines:
-           # Skip comments
-           if line.strip.startswith("#"):
-               continue
-           agg_info = line.split("\t").split(" ")
+           for line in lines:
+               # Skip comments
+               if line.strip.startswith("#"):
+                       continue
+               agg_info = line.split("\t").split(" ")
            
-           # skip invalid info
-           if len(agg_info) != 3:
-               continue
+               # skip invalid info
+               if len(agg_info) != 3:
+                       continue
 
-           # create xmlrpc connection using GeniClient
-           hrn, address, port = agg_info[0], agg_info[1], agg_info[2]
-           url = 'https://%(address)s:%(port)s' % locals()
-           self.aggregates[hrn] = GeniClient(url, self.key_file, self.cert_file)
+               # create xmlrpc connection using GeniClient
+               hrn, address, port = agg_info[0], agg_info[1], agg_info[2]
+               url = 'https://%(address)s:%(port)s' % locals()
+               self.aggregates[hrn] = GeniClient(url, self.key_file, self.cert_file)
 
 
     def item_hrns(self, items):
-       """
-       Take a list of items (components or slices) and return a dictionary where
-       the key is the authoritative hrn and the value is a list of items at that 
-       hrn.
-       """
-       item_hrns = {}
-       agg_hrns = self.aggregates.keys()
-       for agg_hrn in agg_hrns:
-           item_hrns[agg_hrn] = []
-       for item in items:
+           """
+           Take a list of items (components or slices) and return a dictionary where
+           the key is the authoritative hrn and the value is a list of items at that 
+           hrn.
+           """
+           item_hrns = {}
+           agg_hrns = self.aggregates.keys()
            for agg_hrn in agg_hrns:
-               if item.startswith(agg_hrn):
-                  item_hrns[agg_hrn] = item
+               item_hrns[agg_hrn] = []
+           for item in items:
+               for agg_hrn in agg_hrns:
+                       if item.startswith(agg_hrn):
+                           item_hrns[agg_hrn] = item
 
-       return item_hrns        
+           return item_hrns    
                        
 
     def hostname_to_hrn(self, login_base, hostname):
-       """
-       Convert hrn to plantelab name.
-       """
+           """
+           Convert hrn to plantelab name.
+           """
         genihostname = "_".join(hostname.split("."))
         return ".".join([self.hrn, login_base, genihostname])
 
     def slicename_to_hrn(self, slicename):
-       """
-       Convert hrn to planetlab name.
-       """
+           """
+           Convert hrn to planetlab name.
+           """
         slicename = slicename.replace("_", ".")
         return ".".join([self.hrn, slicename])
 
     def refresh_components(self):
-       """
-       Update the cached list of nodes.
-       """
-       print "refreshing"
+           """
+           Update the cached list of nodes.
+           """
+           print "refreshing"
        
-       aggregates = self.aggregates.keys()
-       all_nodes = []
-       all_slices = []
-       for aggregate in aggregates:
-           try:
-               # resolve components hostnames
-               nodes = self.aggregates[aggregate].get_components()
-               all_nodes.extend(nodes) 
-               # update timestamp and threshold
-               self.timestamp = datetime.datetime.now()
-               delta = datetime.timedelta(hours=self.components_ttl)
-               self.threshold = self.timestamp + delta 
-           except:
-               # XX print out to some error log
-               pass    
+           aggregates = self.aggregates.keys()
+           all_nodes = []
+           all_slices = []
+           for aggregate in aggregates:
+               try:
+                       # resolve components hostnames
+                   nodes = self.aggregates[aggregate].get_components()
+                       all_nodes.extend(nodes) 
+                       # update timestamp and threshold
+                       self.timestamp = datetime.datetime.now()
+                       delta = datetime.timedelta(hours=self.components_ttl)
+                       self.threshold = self.timestamp + delta 
+               except:
+                   # XX print out to some error log
+                   pass        
    
-       self.components = all_nodes
-       f = open(self.components_file, 'w')
-       f.write(str(self.components))
-       f.close()
-       f = open(self.timestamp_file, 'w')
-       f.write(str(self.threshold))
-       f.close()
+           self.components = all_nodes
+           f = open(self.components_file, 'w')
+           f.write(str(self.components))
+           f.close()
+           f = open(self.timestamp_file, 'w')
+           f.write(str(self.threshold))
+           f.close()
  
     def load_components(self):
        """
@@ -193,11 +193,11 @@ class SliceMgr(GeniServer):
         self.policy['blacklist'] = blacklist
  
     def load_slices(self):
-       """
-       Read current slice instantiation states.
-       """
-       print "loading slices"
-       if os.path.exists(self.slices_file):
+           """
+           Read current slice instantiation states.
+           """
+           print "loading slices"
+           if os.path.exists(self.slices_file):
             f = open(self.components_file, 'r')
             self.slices = eval(f.read())
             f.close()  
@@ -213,125 +213,125 @@ class SliceMgr(GeniServer):
 
 
     def get_components(self):
-       """
-       Return a list of components managed by this slice manager.
-       """
-       # Reload components list
-       now = datetime.datetime.now()
-       #self.load_components()
-       if not self.threshold or not self.timestamp or now > self.threshold:
-           self.refresh_components()
-       elif now < self.threshold and not self.components: 
-           self.load_components()
-       return self.components
+           """
+           Return a list of components managed by this slice manager.
+           """
+           # Reload components list
+           now = datetime.datetime.now()
+           #self.load_components()
+           if not self.threshold or not self.timestamp or now > self.threshold:
+               self.refresh_components()
+           elif now < self.threshold and not self.components: 
+               self.load_components()
+           return self.components
    
      
     def get_slices(self):
-       """
-       Return a list of instnatiated managed by this slice manager.
-       """
-       now = datetime.datetime.now()
-       #self.load_components()
-       if not self.threshold or not self.timestamp or now > self.threshold:
-           self.refresh_components()
-       elif now < self.threshold and not self.slices:
-           self.load_components()
-       return self.slices
+           """
+           Return a list of instnatiated managed by this slice manager.
+           """
+           now = datetime.datetime.now()
+           #self.load_components()
+           if not self.threshold or not self.timestamp or now > self.threshold:
+               self.refresh_components()
+           elif now < self.threshold and not self.slices:
+               self.load_components()
+           return self.slices
 
     def get_slivers(self, hrn):
-       """
-       Return the list of slices instantiated at the specified component.
-       """
+           """
+           Return the list of slices instantiated at the specified component.
+           """
 
-       # hrn is assumed to be a component hrn
-       if hrn not in self.slices:
-           raise RecordNotFound(hrn)
+           # hrn is assumed to be a component hrn
+           if hrn not in self.slices:
+               raise RecordNotFound(hrn)
        
-       return self.slices[hrn]
+           return self.slices[hrn]
 
     def get_rspec(self, hrn, type):
-       #rspec = Rspec()
-       if type in ['node']:
-           nodes = self.shell.GetNodes(self.auth)
-       elif type in ['slice']:
-           slices = self.shell.GetSlices(self.auth)
-       elif type in ['aggregate']:
-           pass
+           #rspec = Rspec()
+           if type in ['node']:
+               nodes = self.shell.GetNodes(self.auth)
+           elif type in ['slice']:
+               slices = self.shell.GetSlices(self.auth)
+           elif type in ['aggregate']:
+               pass
 
     def get_resources(self, slice_hrn):
-       """
-       Return the current rspec for the specified slice.
-       """
-       slicename = hrn_to_plcslicename(slice_hrn)
-       rspec = self.get_rspec(slicenamem, 'slice' )
+           """
+           Return the current rspec for the specified slice.
+           """
+           slicename = hrn_to_plcslicename(slice_hrn)
+           rspec = self.get_rspec(slicenamem, 'slice' )
         
-       return rspec
+           return rspec
  
     def create_slice(self, slice_hrn, rspec, attributes):
-       """
-       Instantiate the specified slice according to whats defined in the rspec.
-       """
-       slicename = self.hrn_to_plcslicename(slice_hrn)
-       #spec = Rspec(rspec)
-       node_hrns = []
-       #for netspec in spec['networks]:
-       #    networkname = netspec['name']
-       #    nodespec = spec['networks']['nodes']
-       #    nodes = [nspec['name'] for nspec in nodespec]
-       #    node_hrns = [networkname + node for node in nodes]
-       #    
-       self.db.AddSliceToNodes(slice_hrn, node_hrns)
-       return 1
+           """
+           Instantiate the specified slice according to whats defined in the rspec.
+           """
+           slicename = self.hrn_to_plcslicename(slice_hrn)
+           #spec = Rspec(rspec)
+           node_hrns = []
+           #for netspec in spec['networks]:
+           #    networkname = netspec['name']
+           #    nodespec = spec['networks']['nodes']
+           #    nodes = [nspec['name'] for nspec in nodespec]
+           #    node_hrns = [networkname + node for node in nodes]
+           #    
+           self.db.AddSliceToNodes(slice_hrn, node_hrns)
+           return 1
        
     def delete_slice_(self, slice_hrn):
-       """
-       Remove this slice from all components it was previouly associated with and 
-       free up the resources it was using.
-       """
-       self.db.DeleteSliceFromNodes(self.auth, slicename, self.components)
-       return 1
+           """
+           Remove this slice from all components it was previouly associated with and 
+           free up the resources it was using.
+           """
+           self.db.DeleteSliceFromNodes(self.auth, slicename, self.components)
+           return 1
 
     def start_slice(self, slice_hrn):
-       """
-       Stop the slice at plc.
-       """
-       slicename = hrn_to_plcslicename(slice_hrn)
-       slices = self.shell.GetSlices(self.auth, {'name': slicename}, ['slice_id'])
-       if not slices:
-           raise RecordNotFound(slice_hrn)
-       slice_id = slices[0]
-       atrribtes = self.shell.GetSliceAttributes({'slice_id': slice_id, 'name': 'enabled'}, ['slice_attribute_id'])
-       attribute_id = attreibutes[0] 
-       self.shell.UpdateSliceAttribute(self.auth, attribute_id, "1" )
-       return 1
+           """
+           Stop the slice at plc.
+           """
+           slicename = hrn_to_plcslicename(slice_hrn)
+           slices = self.shell.GetSlices(self.auth, {'name': slicename}, ['slice_id'])
+           if not slices:
+               raise RecordNotFound(slice_hrn)
+           slice_id = slices[0]
+           atrribtes = self.shell.GetSliceAttributes({'slice_id': slice_id, 'name': 'enabled'}, ['slice_attribute_id'])
+           attribute_id = attreibutes[0] 
+           self.shell.UpdateSliceAttribute(self.auth, attribute_id, "1" )
+           return 1
 
     def stop_slice(self, slice_hrn):
-       """
-       Stop the slice at plc
-       """
-       slicename = hrn_to_plcslicename(slice_hrn)
-       slices = self.shell.GetSlices(self.auth, {'name': slicename}, ['slice_id'])
+           """
+           Stop the slice at plc
+           """
+           slicename = hrn_to_plcslicename(slice_hrn)
+           slices = self.shell.GetSlices(self.auth, {'name': slicename}, ['slice_id'])
         if not slices:
             raise RecordNotFound(slice_hrn)
         slice_id = slices[0]
         atrribtes = self.shell.GetSliceAttributes({'slice_id': slice_id, 'name': 'enabled'}, ['slice_attribute_id'])
         attribute_id = attreibutes[0]
-       self.shell.UpdateSliceAttribute(self.auth, attribute_id, "0")
-       return 1
+           self.shell.UpdateSliceAttribute(self.auth, attribute_id, "0")
+           return 1
 
     def reset_slice(self, slice_hrn):
-       """
-       Reset the slice
-       """
-       slicename = self.hrn_to_plcslicename(slice_hrn)
-       return 1
+           """
+           Reset the slice
+           """
+           slicename = self.hrn_to_plcslicename(slice_hrn)
+           return 1
 
     def get_policy(self):
-       """
-       Return the policy of this slice manager.
-       """
+           """
+           Return the policy of this slice manager.
+           """
        
-       return self.policy
+           return self.policy