X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sliver_vs.py;h=2554c2aac979bb87352e9ca17bbc82b72652577a;hb=4ced87d3169c9eaa821128b3cc9ba59cccb29e33;hp=ed81f9472df8da9eec66c994d9ac43fdb0ea783e;hpb=25f0e80cb3dfc0914a143aca030bd24fea7b619f;p=nodemanager.git diff --git a/sliver_vs.py b/sliver_vs.py index ed81f94..2554c2a 100644 --- a/sliver_vs.py +++ b/sliver_vs.py @@ -1,5 +1,4 @@ -# $Id$ -# $URL$ +# """VServer slivers. @@ -80,9 +79,10 @@ class Sliver_VS(accounts.Account, vserver.VServer): logger.verbose('sliver_vs: %s: create'%name) 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 - vref = "planetlab-f8-i386" #return + vref = "planetlab-f8-i386" # used to look in /etc/planetlab/family, # now relies on the 'GetSliceFamily' extra attribute in GetSlivers() @@ -167,6 +167,25 @@ class Sliver_VS(accounts.Account, vserver.VServer): logger.log("vsliver_vs: %s: Installed new initscript in %s"%(self.name,sliver_initscript)) else: logger.log("vsliver_vs: %s: Removed obsolete initscript %s"%(self.name,sliver_initscript)) + + # bind mount root side dir to sliver side + # needs to be done before sliver starts + def expose_ssh_dir (self): + try: + root_ssh="/home/%s/.ssh" + sliver_ssh="/vservers/%s/home/%s/.ssh"%(self.name,self.name) + # any of both might not exist yet + for path in [root_ssh,sliver_ssh]: + if not os.path.exists (path): + os.mkdir(path) + if not os.path.isdir (path): + raise Exception + mounts=file('/proc/mounts').read() + if mounts.find(sliver_ssh)<0: + # xxx perform mount + subprocess.call("mount --bind -o ro %s %s"%(root_ssh,sliver_ssh),shell=True) + except: + logger.log("expose_ssh_dir with slice %s failed"%self.name) def start(self, delay=0): if self.rspec['enabled'] <= 0: @@ -176,6 +195,7 @@ class Sliver_VS(accounts.Account, vserver.VServer): time.sleep(delay) # the generic /etc/init.d/vinit script is permanently refreshed, and enabled self.install_and_enable_vinit() + 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() @@ -195,7 +215,7 @@ class Sliver_VS(accounts.Account, vserver.VServer): def is_running(self): return vserver.VServer.is_running(self) - def set_resources(self,setup=False): + def set_resources(self): disk_max = self.rspec['disk_max'] logger.log('sliver_vs: %s: setting max disk usage to %d KiB' % (self.name, disk_max)) try: # if the sliver is over quota, .set_disk_limit will throw an exception @@ -232,21 +252,29 @@ class Sliver_VS(accounts.Account, vserver.VServer): cpu_pct = self.rspec['cpu_pct'] cpu_share = self.rspec['cpu_share'] - if setup: - for key in self.rspec.keys(): - if key.find('sysctl.') == 0: - sysctl=key.split('.') + count = 1 + for key in self.rspec.keys(): + if key.find('sysctl.') == 0: + sysctl=key.split('.') + try: + # /etc/vservers//sysctl// + dirname = "/etc/vservers/%s/sysctl/%s" % (self.name, count) try: - path="/proc/sys/%s" % ("/".join(sysctl[1:])) - logger.log("sliver_vs: %s: opening %s"%(self.name,path)) - flags = os.O_WRONLY - fd = os.open(path, flags) - logger.log("sliver_vs: %s: writing %s=%s"%(self.name,key,self.rspec[key])) - os.write(fd,self.rspec[key]) - os.close(fd) - except IOError, e: - logger.log("sliver_vs: %s: could not set %s=%s"%(self.name,key,self.rspec[key])) - logger.log("sliver_vs: %s: error = %s"%(self.name,e)) + os.makedirs(dirname, 0755) + except: + pass + setting = open("%s/setting" % dirname, "w") + setting.write("%s\n" % key.lstrip("sysctl.")) + setting.close() + value = open("%s/value" % dirname, "w") + value.write("%s\n" % self.rspec[key]) + value.close() + count += 1 + + logger.log("sliver_vs: %s: writing %s=%s"%(self.name,key,self.rspec[key])) + except IOError, e: + logger.log("sliver_vs: %s: could not set %s=%s"%(self.name,key,self.rspec[key])) + logger.log("sliver_vs: %s: error = %s"%(self.name,e)) if self.rspec['enabled'] > 0: