Added in a number of python exposed vserver constants.
[util-vserver.git] / python / vserver.py
index a3a1563..1c85a94 100644 (file)
@@ -17,6 +17,7 @@ import vserverimpl, vduimpl
 import cpulimit, bwlimit
 
 from vserverimpl import VS_SCHED_CPU_GUARANTEED as SCHED_CPU_GUARANTEED
+from vserverimpl import DLIMIT_INF
 
 
 
@@ -85,11 +86,13 @@ class VServer:
         f.close()
         todo = newvars.copy()
         changed = False
+        offset = 0
         for m in self.config_var_re.finditer(data):
             (key, val) = m.groups()
             newval = todo.pop(key, None)
             if newval != None:
-                data = data[:m.start(2)] + str(newval) + data[m.end(2):]
+                data = data[:offset+m.start(2)] + str(newval) + data[offset+m.end(2):]
+                offset += len(str(newval)) - (m.end(2)-m.start(2))
                 changed = True
         for (newkey, newval) in todo.items():
             data += "%s=%s\n" % (newkey, newval)
@@ -104,14 +107,7 @@ class VServer:
         f.write(data)
         f.close()
 
-        # 'copy' original file, rename new to original
-        backup = filename + ".old"
-        try:
-            os.unlink(backup)
-        except OSError, ex:
-            if ex.errno != errno.ENOENT:
-                raise
-        os.link(filename, backup)
+        # replace old file with new
         os.rename(newfile, filename)
 
     def __do_chroot(self):
@@ -212,17 +208,23 @@ class VServer:
         ret = vserverimpl.getrlimit(self.ctx,6)
         return ret
 
-    def set_bwlimit(self, maxrate, minrate = 1, share = None, dev = "eth0"):
+    def set_bwlimit(self, minrate = bwlimit.bwmin, maxrate = None,
+                    exempt_min = None, exempt_max = None,
+                    share = None, dev = "eth0"):
 
-        if maxrate != 0:
-            bwlimit.on(self.ctx, dev, share, minrate, maxrate)
-        else:
+        if minrate is None:
             bwlimit.off(self.ctx, dev)
+        else:
+            bwlimit.on(self.ctx, dev, share,
+                       minrate, maxrate, exempt_min, exempt_max)
 
     def get_bwlimit(self, dev = "eth0"):
 
+        result = bwlimit.get(self.ctx)
         # result of bwlimit.get is (ctx, share, minrate, maxrate)
-        return bwlimit.get(self.ctx)[1:]
+        if result:
+            result = result[1:]
+        return result
 
     def open(self, filename, mode = "r", bufsize = -1):