patch by Thomas Dreibholz - ovs-vsctl and not ovs-ovsctl
[nodemanager.git] / slivermanager.py
index 4e10b04..4a3c3eb 100644 (file)
@@ -7,7 +7,8 @@ also to make inter-sliver resource loans.  The sliver manager is also
 responsible for handling delegation accounts.
 """
 
-import string,re
+import string
+import re
 import time
 
 import logger
@@ -23,17 +24,23 @@ try:
     sliver_class_to_register = sliver_lxc.Sliver_LXC
     sliver_password_shell = sliver_lxc.Sliver_LXC.SHELL
 except:
-    import sliver_vs
-    implementation='vs'
-    sliver_default_type='sliver.VServer'
-    sliver_class_to_register = sliver_vs.Sliver_VS
-    sliver_password_shell = sliver_vs.Sliver_VS.SHELL
+    try:
+        import sliver_vs
+        implementation='vs'
+        sliver_default_type='sliver.VServer'
+        sliver_class_to_register = sliver_vs.Sliver_VS
+        sliver_password_shell = sliver_vs.Sliver_VS.SHELL
+    except:
+        logger.log("Could not import either sliver_lxc or sliver_vs - bailing out")
+        exit(1)
 
 # just being safe
-try : from plnode.bwlimit import bwmin, bwmax
-except: bwmin, bwmax = 8, 1000*1000*1000
+try:
+    from plnode.bwlimit import bwmin, bwmax
+except:
+    bwmin, bwmax = 8, 1000*1000*1000
 
-priority=10
+priority = 10
 
 
 DEFAULT_ALLOCATION = {
@@ -42,6 +49,7 @@ DEFAULT_ALLOCATION = {
     'cpu_pct': 0, # percent CPU reserved
     'cpu_share': 1, # proportional share
     'cpu_cores': "0b", # reserved cpu cores <num_cores>[b]
+    'cpu_freezable': 0, # freeze processes if cpu_cores is 0
     # bandwidth parameters
     'net_min_rate': bwmin / 1000, # kbps
     'net_max_rate': bwmax / 1000, # kbps
@@ -130,9 +138,12 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True):
     node_id = None
     try:
         f = open('/etc/planetlab/node_id')
-        try: node_id = int(f.read())
-        finally: f.close()
-    except: logger.log_exc("slivermanager: GetSlivers failed to read /etc/planetlab/node_id")
+        try:
+            node_id = int(f.read())
+        finally:
+            f.close()
+    except:
+        logger.log_exc("slivermanager: GetSlivers failed to read /etc/planetlab/node_id")
 
     if data.has_key('node_id') and data['node_id'] != node_id: return
 
@@ -144,7 +155,7 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True):
     # Take initscripts (global) returned by API, build a hash scriptname->code
     iscripts_hash = {}
     if 'initscripts' not in data:
-        logger.log_missing_data("slivermanager.GetSlivers",'initscripts')
+        logger.log_missing_data("slivermanager.GetSlivers", 'initscripts')
         return
     for initscript_rec in data['initscripts']:
         logger.verbose("slivermanager: initscript: %s" % initscript_rec['name'])
@@ -178,9 +189,9 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True):
 
         ### set initscripts; set empty rec['initscript'] if not
         # if tag 'initscript_code' is set, that's what we use
-        iscode = attributes.get('initscript_code','')
+        iscode = attributes.get('initscript_code', '')
         if iscode:
-            rec['initscript']=iscode
+            rec['initscript'] = iscode
         else:
             isname = attributes.get('initscript')
             if isname is not None and isname in iscripts_hash:
@@ -207,10 +218,11 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True):
                 rspec[key] = attributes[key]
 
         # also export tags in rspec so they make it to the sliver_vs.start call
-        rspec['tags']=attributes
+        rspec['tags'] = attributes
 
         database.db.deliver_record(rec)
-    if fullupdate: database.db.set_min_timestamp(data['timestamp'])
+    if fullupdate:
+        database.db.set_min_timestamp(data['timestamp'])
     # slivers are created here.
     database.db.sync()