merge changes from HEAD
[util-vserver.git] / python / vserver.py
index f455e60..c6d07b6 100644 (file)
@@ -86,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)
@@ -105,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):
@@ -213,10 +208,13 @@ 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)
+        if minrate:
+            bwlimit.on(self.ctx, dev, share,
+                       minrate, maxrate, exempt_min, exempt_max)
         else:
             bwlimit.off(self.ctx, dev)