import logger
import os
+import cgroups
glo_coresched_simulate = False
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:
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
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"
import sys
import shutil
import bwlimit
+import cgroups
from string import Template
libvirt.VIR_DOMAIN_CRASHED: 'crashed',
}
-REF_IMG_BASE_DIR = '/vservers/.lvref'
-CON_BASE_DIR = '/vservers'
-
connections = dict()
# Helper methods
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.
# 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)
# 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']