Cgroup common interface. Used by coresched.py and sliver_libvirt.py.
authorXavi Leon <xleon@ac.upc.edu>
Thu, 8 Dec 2011 19:04:39 +0000 (14:04 -0500)
committerXavi Leon <xleon@ac.upc.edu>
Thu, 8 Dec 2011 19:04:39 +0000 (14:04 -0500)
coresched.py
sliver_libvirt.py
sliver_lxc.py

index 3954da9..3959e48 100644 (file)
@@ -7,6 +7,7 @@
 
 import logger
 import os
+import cgroups
 
 glo_coresched_simulate = False
 
@@ -40,8 +41,8 @@ class CoreSched:
         assert(filename!=None or name!=None)
 
         if filename==None:
-            filename="/dev/cgroup/" + name
-
+            filename="/dev/cgroup/" + name
+            filename=cgroups.get_base_path() + name
         data = open(filename).readline().strip()
 
         if not data:
@@ -113,12 +114,13 @@ class CoreSched:
             this might change as vservers are instantiated, so always compute
             it dynamically.
         """
-        cgroups = []
-        filenames = os.listdir("/dev/cgroup")
-        for filename in filenames:
-            if os.path.isdir(os.path.join("/dev/cgroup", filename)):
-                cgroups.append(filename)
-        return cgroups
+        return cgroups.get_cgroups()
+        #cgroups = []
+        #filenames = os.listdir("/dev/cgroup")
+        #for filename in filenames:
+        #    if os.path.isdir(os.path.join("/dev/cgroup", filename)):
+        #        cgroups.append(filename)
+        #return cgroups
 
     def decodeCoreSpec (self, cores):
         """ Decode the value of the core attribute. It's a number, followed by
@@ -245,16 +247,18 @@ class CoreSched:
             if glo_coresched_simulate:
                 print "R", "/dev/cgroup/" + cgroup + "/" + var_name, self.listToRange(cpus)
             else:
-                file("/dev/cgroup/" + cgroup + "/" + var_name, "w").write( self.listToRange(cpus) + "\n" )
+                cgroups.write(cgroup, var_name, self.listToRange(cpus))
+                #file("/dev/cgroup/" + cgroup + "/" + var_name, "w").write( self.listToRange(cpus) + "\n" )
 
     def reserveDefault (self, var_name, cpus):
-        if not os.path.exists("/etc/vservers/.defaults/cgroup"):
-            os.makedirs("/etc/vservers/.defaults/cgroup")
-
-        if glo_coresched_simulate:
-            print "RDEF", "/etc/vservers/.defaults/cgroup/" + var_name, self.listToRange(cpus)
-        else:
-            file("/etc/vservers/.defaults/cgroup/" + var_name, "w").write( self.listToRange(cpus) + "\n" )
+        #if not os.path.exists("/etc/vservers/.defaults/cgroup"):
+        #    os.makedirs("/etc/vservers/.defaults/cgroup")
+
+        #if glo_coresched_simulate:
+        #    print "RDEF", "/etc/vservers/.defaults/cgroup/" + var_name, self.listToRange(cpus)
+        #else:
+        #    file("/etc/vservers/.defaults/cgroup/" + var_name, "w").write( self.listToRange(cpus) + "\n" )
+        pass
 
     def listToRange (self, list):
         """ take a list of items [1,2,3,5,...] and return it as a range: "1-3,5"
index 990695e..52c8bde 100644 (file)
@@ -11,6 +11,7 @@ import libvirt
 import sys
 import shutil
 import bwlimit
+import cgroups
 
 from string import Template
 
@@ -24,9 +25,6 @@ STATES = {
     libvirt.VIR_DOMAIN_CRASHED: 'crashed',
 }
 
-REF_IMG_BASE_DIR = '/vservers/.lvref'
-CON_BASE_DIR     = '/vservers'
-
 connections = dict()
 
 # Helper methods
@@ -117,9 +115,9 @@ class Sliver_Libvirt(accounts.Account):
     def configure(self, rec):
 
         #sliver.[LXC/QEMU] tolower case
-        sliver_type = rec['type'].split('.')[1].lower() 
+        #sliver_type = rec['type'].split('.')[1].lower() 
 
-        BASE_DIR = '/cgroup/libvirt/%s/%s/'%(sliver_type, self.name)
+        #BASE_DIR = '/cgroup/libvirt/%s/%s/'%(sliver_type, self.name)
 
         # Disk allocation
         # No way through cgroups... figure out how to do that with user/dir quotas.
@@ -142,20 +140,17 @@ class Sliver_Libvirt(accounts.Account):
         # Memory allocation
         if rec.has_key('memlock_hard'):
             mem = rec['memlock_hard'] * 1024 # hard limit in bytes
-            with open(os.path.join(BASE_DIR, 'memory.limit_in_bytes'), 'w') as f:
-                print >>f, mem
+            cgroups.write(self.name, 'memory.limit_in_bytes', mem)
         if rec.has_key('memlock_soft'):
             mem = rec['memlock_soft'] * 1024 # soft limit in bytes
-            with open(os.path.join(BASE_DIR, 'memory.soft_limit_in_bytes'), 'w') as f:
-                print >>f, mem
+            cgroups.write(self.name, 'memory.soft_limit_in_bytes', mem)
 
         # CPU allocation
         # Only cpu_shares until figure out how to provide limits and guarantees
         # (RT_SCHED?)
         if rec.has_key('cpu_share'): 
             cpu_share = rec['cpu_share']
-            with open(os.path.join(BASE_DIR, 'cpu.shares'), 'w') as f:
-                print >>f, cpu_share
+            cgroups.write(self.name, 'cpu.shares', cpu_share)
 
         # Call the upper configure method (ssh keys...)
         accounts.Account.configure(self, rec)
index 5a0d52f..4eb5229 100644 (file)
@@ -56,8 +56,8 @@ class Sliver_LXC(lv.Sliver_Libvirt):
         # TODO: set quotas...
 
         # Set hostname. A valid hostname cannot have '_'
-        with open(os.path.join(containerDir, 'etc/hostname'), 'w') as f:
-            print >>f, name.replace('_', '-')
+        #with open(os.path.join(containerDir, 'etc/hostname'), 'w') as f:
+        #    print >>f, name.replace('_', '-')
 
         # Add slices group if not already present
         command = ['/usr/sbin/groupadd', 'slices']