- self.config = self.__read_config_file("/etc/vservers.conf")
- self.config.update(self.__read_config_file("/etc/vservers/%s.conf" %
- self.name))
- 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.remove_caps = ~CAP_SAFE
- self.ctx = int(self.config["S_CONTEXT"])
-
- config_var_re = re.compile(r"^ *([A-Z_]+)=(.*)\n?$", re.MULTILINE)
-
- def __read_config_file(self, filename):
-
- f = open(filename, "r")
- data = f.read()
- f.close()
- config = {}
- for m in self.config_var_re.finditer(data):
- (key, val) = m.groups()
- config[key] = val.strip('"')
- return config
+ self.rlimits_changed = False
+ self.dir = "%s/%s" % (vserverimpl.VSERVER_BASEDIR, name)
+ if not (os.path.isdir(self.dir) and
+ os.access(self.dir, os.R_OK | os.W_OK | os.X_OK)):
+ raise NoSuchVServer, "no such vserver: " + name
+ self.config = VServerConfig(name, "/etc/vservers/%s" % name)
+ self.remove_caps = ~vserverimpl.CAP_SAFE;
+ if vm_id == None:
+ vm_id = int(self.config.get('context'))
+ self.ctx = vm_id
+ if vm_running == None:
+ vm_running = self.is_running()
+ self.vm_running = vm_running
+
+ def have_limits_changed(self):
+ return self.rlimits_changed
+
+ def set_rlimit_limit(self,type,hard,soft,minimum):
+ """Generic set resource limit function for vserver"""
+ global RLIMITS
+ changed = False
+ try:
+ old_hard, old_soft, old_minimum = self.get_rlimit_limit(type)
+ if old_hard != VC_LIM_KEEP and old_hard <> hard: changed = True
+ if old_soft != VC_LIM_KEEP and old_soft <> soft: changed = True
+ if old_minimum != VC_LIM_KEEP and old_minimum <> minimum: changed = True
+ self.rlimits_changed = self.rlimits_changed or changed
+ except OSError, e:
+ if self.is_running(): print "Unexpected error with getrlimit for running context %d" % self.ctx
+
+ resource_type = RLIMITS[type]
+ try:
+ ret = vserverimpl.setrlimit(self.ctx,resource_type,hard,soft,minimum)
+ except OSError, e:
+ if self.is_running(): print "Unexpected error with setrlimit for running context %d" % self.ctx
+
+ def set_rlimit_config(self,type,hard,soft,minimum):
+ """Generic set resource limit function for vserver"""
+ if hard <> VC_LIM_KEEP:
+ self.config.update('rlimits/%s.hard' % type.lower(), hard)
+ if soft <> VC_LIM_KEEP:
+ self.config.update('rlimits/%s.soft' % type.lower(), soft)
+ if minimum <> VC_LIM_KEEP:
+ self.config.update('rlimits/%s.min' % type.lower(), minimum)
+ self.set_rlimit_limit(type,hard,soft,minimum)
+
+ def get_rlimit_limit(self,type):
+ """Generic get resource configuration function for vserver"""
+ global RLIMITS
+ resource_type = RLIMITS[type]
+ try:
+ ret = vserverimpl.getrlimit(self.ctx,resource_type)
+ except OSError, e:
+ print "Unexpected error with getrlimit for context %d" % self.ctx
+ ret = self.get_rlimit_config(type)
+ return ret
+
+ def get_rlimit_config(self,type):
+ """Generic get resource configuration function for vserver"""
+ hard = int(self.config.get("rlimits/%s.hard"%type.lower(),VC_LIM_KEEP))
+ soft = int(self.config.get("rlimits/%s.soft"%type.lower(),VC_LIM_KEEP))
+ minimum = int(self.config.get("rlimits/%s.min"%type.lower(),VC_LIM_KEEP))
+ return (hard,soft,minimum)
+
+ def set_WHITELISTED_config(self,whitelisted):
+ self.config.update('whitelisted', whitelisted)
+
+ def set_capabilities(self, capabilities):
+ return vserverimpl.setbcaps(self.ctx, vserverimpl.text2bcaps(capabilities))
+
+ def set_capabilities_config(self, capabilities):
+ self.config.update('bcapabilities', capabilities)
+ self.set_capabilities(capabilities)
+
+ def get_capabilities(self):
+ return vserverimpl.bcaps2text(vserverimpl.getbcaps(self.ctx))
+
+ def get_capabilities_config(self):
+ return self.config.get('bcapabilities', '')