INITSCRIPTS = [('/etc/rc.vinit', 'start'),
('/etc/rc.d/rc', '%(runlevel)d')]
- def __init__(self, name, vm_running = False, resources = {}):
+ def __init__(self, name, vm_id, vm_running = False, resources = {}):
self.name = name
self.config_file = "/etc/vservers/%s.conf" % name
if not (os.path.isdir(self.dir) and
os.access(self.dir, os.R_OK | os.W_OK | os.X_OK)):
raise Exception, "no such vserver: " + name
- self.config = self.__read_config_file("/etc/vservers.conf")
- self.config.update(self.__read_config_file(self.config_file))
- self.flags = 0
- flags = self.config["S_FLAGS"].split(" ")
- if "lock" in flags:
- self.flags |= FLAGS_LOCK
- if "nproc" in flags:
- self.flags |= FLAGS_NPROC
+ self.config = {}
+ for config_file in ["/etc/vservers.conf", self.config_file]:
+ try:
+ self.config.update(self.__read_config_file(config_file))
+ except IOError, ex:
+ if ex.errno != errno.ENOENT:
+ raise
self.remove_caps = ~vserverimpl.CAP_SAFE;
- self.ctx = int(self.config["S_CONTEXT"])
+ self.ctx = vm_id
self.vm_running = vm_running
self.resources = resources
def set_disklimit(self, block_limit):
# block_limit is in kB
- over_limit = False
if self.vm_running:
block_usage = vserverimpl.DLIMIT_KEEP
inode_usage = vserverimpl.DLIMIT_KEEP
# init_disk_info() must have been called to get usage values
block_usage = self.disk_blocks
inode_usage = self.disk_inodes
- if block_limit < block_usage:
- over_limit = True
vserverimpl.setdlimit(self.dir,
self.ctx,
vserverimpl.DLIMIT_INF, # inode limit
2) # %age reserved for root
- if over_limit:
- raise Exception, ("%s disk usage (%u blocks) > limit (%u)" %
- (self.name, block_usage, block_limit))
-
def get_disklimit(self):
try:
except OSError, ex:
if ex.errno == errno.ESRCH:
# get here if no vserver disk limit has been set for xid
- # set blockused to -1 to indicate no limit
blocktotal = -1
return blocktotal
self.__update_config_file(self.config_file, { "CPULIMIT": cpu_share })
if self.vm_running:
- vserverimpl.setsched(self.ctx, cpu_share, True)
+ vserverimpl.setsched(self.ctx, self.resources)
def get_sched(self):
# have no way of querying scheduler right now on a per vserver basis
ret = vserverimpl.getrlimit(self.ctx,6)
return ret
- def set_bwlimit(self, eth, limit, cap, minrate, maxrate):
- if cap == "-1":
- bwlimit.off(self.ctx,eth)
+ def set_bwlimit(self, share, minrate, maxrate = None, dev = "eth0"):
+
+ if False:
+ bwlimit.off(self.ctx, dev)
else:
- bwlimit.on(self.ctx, eth, limit, cap, minrate, maxrate)
+ bwlimit.on(self.ctx, dev, share, minrate, maxrate)
def get_bwlimit(self, eth):
# not implemented yet