X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sliver_vs.py;h=3e0067e8260327af617f7d2b8f2bf75d3c43d479;hb=e059a8ed2e9680af0f5b9664f275f514cbb46ef0;hp=ad37e3ed9e043003d25e5d599aa9b174084b789e;hpb=7ad7efcc3865f3feb58269fbd53f47efc4ec1327;p=nodemanager.git diff --git a/sliver_vs.py b/sliver_vs.py index ad37e3e..3e0067e 100644 --- a/sliver_vs.py +++ b/sliver_vs.py @@ -18,7 +18,6 @@ don't have to guess if there is a running process or not. import errno import os -import threading import time import vserver @@ -43,19 +42,20 @@ class Sliver_VS(accounts.Account, vserver.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 = {} @@ -66,6 +66,7 @@ class Sliver_VS(accounts.Account, vserver.VServer): @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: @@ -93,7 +94,7 @@ class Sliver_VS(accounts.Account, vserver.VServer): 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 @@ -128,9 +129,9 @@ class Sliver_VS(accounts.Account, vserver.VServer): 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 @@ -142,7 +143,6 @@ class Sliver_VS(accounts.Account, vserver.VServer): hard = self.rspec['%s_hard'%type] self.set_rlimit_config(limit, hard, soft, minimum) - self.set_WHITELISTED_config(self.rspec['whitelist']) self.set_capabilities_config(self.rspec['capabilities']) if self.rspec['capabilities']: logger.log('%s: setting capabilities to %s' % (self.name, self.rspec['capabilities'])) @@ -162,13 +162,17 @@ class Sliver_VS(accounts.Account, vserver.VServer): cpu_min = self.rspec['cpu_min'] cpu_share = self.rspec['cpu_share'] - if self.rspec['enabled'] > 0 and self.rspec['whitelist'] == 1: + 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) else: logger.log('%s: setting cpu share to %d' % (self.name, cpu_share)) self.set_sched_config(cpu_share, 0) + # 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():