import errno
import os
-import threading
import time
import vserver
SHELL = '/bin/vsh'
TYPE = 'sliver.VServer'
- _init_disk_info_sem = threading.Semaphore(1)
+ _init_disk_info_sem = tools.NMLock("/var/run/nm-disk-info.lock")
def __init__(self, rec):
+ logger.verbose ('initing Sliver_VS with name=%s'%rec['name'])
try:
- vserver.VServer.__init__(self, rec['name'])
+ vserver.VServer.__init__(self, rec['name'],logfile='/var/log/nm')
except Exception, err:
if not isinstance(err, vserver.NoSuchVServer):
# Probably a bad vserver or vserver configuration file
- logger.log_exc()
+ logger.log_exc(self.name)
logger.log('%s: recreating bad vserver' % rec['name'])
self.destroy(rec['name'])
self.create(rec['name'], rec['vref'])
- vserver.VServer.__init__(self, rec['name'])
+ vserver.VServer.__init__(self, rec['name'],logfile='/var/log/nm')
self.keys = ''
self.rspec = {}
@staticmethod
def create(name, vref = None):
+ logger.verbose('Sliver_VS:create - name=%s'%name)
if vref is not None:
logger.log_call('/usr/sbin/vuseradd', '-t', vref, name)
else:
try:
self.chroot_call(install_initscript)
self.initscriptchanged = True
- except: logger.log_exc()
+ except: logger.log_exc(self.name)
accounts.Account.configure(self, rec) # install ssh keys
logger.log('%s: computing disk usage: ended' % self.name)
self.disk_usage_initialized = True
vserver.VServer.set_disklimit(self, max(disk_max, self.disk_blocks))
- except OSError:
+ except:
logger.log('%s: failed to set max disk usage' % self.name)
- logger.log_exc()
+ logger.log_exc(self.name)
# get/set the min/soft/hard values for all of the vserver
# related RLIMITS. Note that vserver currently only
minimum = self.rspec['%s_min'%type]
soft = self.rspec['%s_soft'%type]
hard = self.rspec['%s_hard'%type]
- self.set_rlimit_config(limit, hard, soft, minimum)
+ update = self.set_rlimit(limit, hard, soft, minimum)
+ if update:
+ logger.log('%s: setting rlimit %s to (%d, %d, %d)'
+ % (self.name, type, hard, soft, minimum))
self.set_capabilities_config(self.rspec['capabilities'])
if self.rspec['capabilities']:
logger.log('%s: setting net share to %d' % (self.name, net_limits[-1]))
self.set_bwlimit(*net_limits)
- cpu_min = self.rspec['cpu_min']
+ cpu_pct = self.rspec['cpu_pct']
cpu_share = self.rspec['cpu_share']
if self.rspec['enabled'] > 0:
- if cpu_min >= 50: # at least 5%: keep people from shooting themselves in the foot
- logger.log('%s: setting cpu share to %d%% guaranteed' % (self.name, cpu_min/10.0))
- self.set_sched_config(cpu_min, vserver.SCHED_CPU_GUARANTEED)
+ if cpu_pct > 0:
+ logger.log('%s: setting cpu reservation to %d%%' % (self.name, cpu_pct))
else:
+ cpu_pct = 0
+
+ if cpu_share > 0:
logger.log('%s: setting cpu share to %d' % (self.name, cpu_share))
- self.set_sched_config(cpu_share, 0)
+ else:
+ cpu_share = 0
+
+ self.set_sched_config(cpu_pct, cpu_share)
+ # if IP address isn't set (even to 0.0.0.0), sliver won't be able to use network
+ if self.rspec['ip_addresses'] != '0.0.0.0':
+ logger.log('%s: setting IP address(es) to %s' % (self.name, self.rspec['ip_addresses']))
+ self.set_ipaddresses_config(self.rspec['ip_addresses'])
if False: # Does not work properly yet.
if self.have_limits_changed():