X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sliver_vs.py;h=8a762188d3488393d9f8c2732105650958e2ef89;hb=ecee05390277f57b02d21ffca0195292bde1defa;hp=1d90f16c544a7872f1676dc24d5e0e6d60a4cc9d;hpb=6ec82e6a49df218bcbf4337d85d8d87dc8273824;p=nodemanager.git diff --git a/sliver_vs.py b/sliver_vs.py index 1d90f16..8a76218 100644 --- a/sliver_vs.py +++ b/sliver_vs.py @@ -84,11 +84,10 @@ class Sliver_VS(vserver.VServer, Account, Initscript): logger.verbose('sliver_vs: %s: create'%name) vref = rec['vref'] if vref is None: - logger.log("sliver_vs: %s: ERROR - no vref attached, this is unexpected"%(name)) # added by caglar # band-aid for short period as old API doesn't have GetSliceFamily function - #return vref = "planetlab-f8-i386" + logger.log("sliver_vs: %s: ERROR - no vref attached, using hard-wired default %s"%(name,vref)) # used to look in /etc/planetlab/family, # now relies on the 'GetSliceFamily' extra attribute in GetSlivers() @@ -99,7 +98,7 @@ class Sliver_VS(vserver.VServer, Account, Initscript): logger.log ("sliver_vs: %s: ERROR Could not create sliver - vreference image %s not found"%(name,vref)) return - # guess arch + # compute guest personality try: (x,y,arch)=vref.split('-') # mh, this of course applies when 'vref' is e.g. 'netflow' @@ -107,11 +106,7 @@ class Sliver_VS(vserver.VServer, Account, Initscript): except: arch='i386' - def personality (arch): - personality="linux32" - if arch.find("64")>=0: - personality="linux64" - return personality + def personality (arch): return "linux64" if arch.find("64") >=0 else "linux32" command=[] # be verbose @@ -134,8 +129,15 @@ class Sliver_VS(vserver.VServer, Account, Initscript): @staticmethod def destroy(name): + # need to umount before we trash, otherwise we end up with sequels in + # /vservers/slicename/ (namely in home/ ) + # also because this is a static method we cannot check for 'omf_control' + # but it is no big deal as umount_ssh_dir checks before it umounts.. + Account.umount_ssh_dir(name) + logger.log("sliver_vs: destroying %s"%name) logger.log_call(['/bin/bash','-x','/usr/sbin/vuserdel', name, ]) + def configure(self, rec): # in case we update nodemanager.. self.install_and_enable_vinit() @@ -153,25 +155,25 @@ class Sliver_VS(vserver.VServer, Account, Initscript): def start(self, delay=0): if self.rspec['enabled'] <= 0: logger.log('sliver_vs: not starting %s, is not enabled'%self.name) + return + logger.log('sliver_vs: %s: starting in %d seconds' % (self.name, delay)) + time.sleep(delay) + # the generic /etc/init.d/vinit script is permanently refreshed, and enabled + self.install_and_enable_vinit() + # expose .ssh for omf_friendly slivers + if 'omf_control' in self.rspec['tags']: + Account.mount_ssh_dir(self.name) + # if a change has occured in the slice initscript, reflect this in /etc/init.d/vinit.slice + self.refresh_slice_vinit() + child_pid = os.fork() + if child_pid == 0: + # VServer.start calls fork() internally, + # so just close the nonstandard fds and fork once to avoid creating zombies + tools.close_nonstandard_fds() + vserver.VServer.start(self) + os._exit(0) else: - logger.log('sliver_vs: %s: starting in %d seconds' % (self.name, delay)) - time.sleep(delay) - # the generic /etc/init.d/vinit script is permanently refreshed, and enabled - self.install_and_enable_vinit() - # expose .ssh for omf_friendly slivers - if 'omf_control' in self.rspec['tags']: - self.expose_ssh_dir() - # if a change has occured in the slice initscript, reflect this in /etc/init.d/vinit.slice - self.refresh_slice_vinit() - child_pid = os.fork() - if child_pid == 0: - # VServer.start calls fork() internally, - # so just close the nonstandard fds and fork once to avoid creating zombies - tools.close_nonstandard_fds() - vserver.VServer.start(self) - os._exit(0) - else: - os.waitpid(child_pid, 0) + os.waitpid(child_pid, 0) def stop(self): logger.log('sliver_vs: %s: stopping' % self.name)