+ self.rlimits_changed = False
+ self.config_file = "/etc/vservers/%s.conf" % name
+ 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 = {}
+ 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;
+ if vm_id == None:
+ vm_id = int(self.config['S_CONTEXT'])
+ self.ctx = vm_id
+ 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"""
+ resources = {}
+ if hard <> VC_LIM_KEEP:
+ resources["VS_%s_HARD"%type] = hard
+ if soft <> VC_LIM_KEEP:
+ resources["VS_%s_SOFT"%type] = soft
+ if minimum <> VC_LIM_KEEP:
+ resources["VS_%s_MINIMUM"%type] = minimum
+ if len(resources)>0:
+ self.update_resources(resources)
+ 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("VS_%s_HARD"%type,VC_LIM_KEEP))
+ soft = int(self.config.get("VS_%s_SOFT"%type,VC_LIM_KEEP))
+ minimum = int(self.config.get("VS_%s_MINIMUM"%type,VC_LIM_KEEP))
+ return (hard,soft,minimum)
+
+ def set_WHITELISTED_config(self,whitelisted):
+ resources = {'VS_WHITELISTED': whitelisted}
+ self.update_resources(resources)