import traceback
import os, os.path
import time
+from threading import BoundedSemaphore
import vserver
import accounts
import logger
import tools
-from threading import BoundedSemaphore
-
-globalsem = BoundedSemaphore()
# special constant that tells vserver to keep its existing settings
KEEP_LIMIT = vserver.VC_LIM_KEEP
SHELL = '/bin/vsh'
TYPE = 'sliver.VServer'
- _init_disk_info_sem = globalsem
+ _init_disk_info_sem = BoundedSemaphore()
def __init__(self, rec):
name=rec['name']
logger.verbose ('sliver_vs: %s init'%name)
try:
logger.log("sliver_vs: %s: first chance..."%name)
- vserver.VServer.__init__(self, name,logfile='/var/log/nm')
+ vserver.VServer.__init__(self, name,logfile='/var/log/nodemanager')
except Exception, err:
if not isinstance(err, vserver.NoSuchVServer):
# Probably a bad vserver or vserver configuration file
self.destroy(name)
self.create(name, rec['vref'])
logger.log("sliver_vs: %s: second chance..."%name)
- vserver.VServer.__init__(self, name,logfile='/var/log/nm')
+ vserver.VServer.__init__(self, name,logfile='/var/log/nodemanager')
self.keys = ''
self.rspec = {}
personality="linux64"
return personality
- # temporary : run vuseradd verbosely - mostly a check for log_call to work properly,
- # since the issue with the kernel seems to have been spotted
-# logger.log_call(['/usr/sbin/vuseradd', '-t', vref, name, ], timeout=10*60)
+# logger.log_call(['/usr/sbin/vuseradd', '-t', vref, name, ], timeout=15*60)
logger.log_call(['/bin/bash','-x','/usr/sbin/vuseradd', '-t', vref, name, ], timeout=15*60)
# export slicename to the slice in /etc/slicename
file('/vservers/%s/etc/slicename' % name, 'w').write(name)
file('/vservers/%s/etc/slicefamily' % name, 'w').write(vref)
# set personality: only if needed (if arch's differ)
if tools.root_context_arch() != arch:
- file('/etc/vservers/%s/personality' % name, 'w').write(personality(arch))
+ file('/etc/vservers/%s/personality' % name, 'w').write(personality(arch)+"\n")
logger.log('sliver_vs: %s: set personality to %s'%(name,personality(arch)))
@staticmethod
- def destroy(name): logger.log_call(['/usr/sbin/vuserdel', name, ])
+ def destroy(name):
+# logger.log_call(['/usr/sbin/vuserdel', name, ])
+ logger.log_call(['/bin/bash','-x','/usr/sbin/vuserdel', name, ])
def configure(self, rec):
new_rspec = rec['_rspec']
else:
os.waitpid(child_pid, 0)
self.initscriptchanged = False
- else: logger.log('sliver_vs: not starting, is not enabled', name=self.name)
+ else: logger.log('sliver_vs: not starting %s, is not enabled'%self.name)
def stop(self):
logger.log('sliver_vs: %s: stopping' % self.name)
(self.name, self.rspec['ip_addresses']))
self.set_ipaddresses_config(self.rspec['ip_addresses'])
- if self.is_running():
- logger.log("sliver_vs: %s: Setting name to %s" % (self.name, self.slice_id))
- self.setname(self.slice_id)
- ### Sapan's change needs more work
- # raise IOException, file does not get created
- # might be that /etc/vservers is not available here, are we in the chroot ?
- #logger.log("sliver_vs: %s: Storing slice id of %s for PlanetFlow" % (self.name, self.slice_id))
- #file('/etc/vservers/%s/slice_id' % self.name, 'w').write(self.slice_id)
+ #logger.log("sliver_vs: %s: Setting name to %s" % (self.name, self.slice_id))
+ #self.setname(self.slice_id)
+ #logger.log("sliver_vs: %s: Storing slice id of %s for PlanetFlow" % (self.name, self.slice_id))
+ try:
+ vserver_config_path = '/etc/vservers/%s'%self.name
+ if not os.path.exists (vserver_config_path):
+ os.makedirs (vserver_config_path)
+ file('%s/slice_id'%vserver_config_path, 'w').write("%d\n"%self.slice_id)
+ logger.log("sliver_vs: Recorded slice id %d for slice %s"%(self.slice_id,self.name))
+ except IOError,e:
+ logger.log("sliver_vs: Could not record slice_id for slice %s. Error: %s"%(self.name,str(e)))
+ except Exception,e:
+ logger.log_exc("sliver_vs: Error recording slice id: %s"%str(e),name=self.name)
+
if self.enabled == False:
self.enabled = True