Merge from trunk.
[nodemanager.git] / sliver_vs.py
index ed09821..82523a5 100644 (file)
@@ -17,9 +17,9 @@ don't have to guess if there is a running process or not.
 """
 
 import errno
+import traceback
 import os, os.path
 import time
-import commands
 
 import vserver
 
@@ -68,22 +68,9 @@ class Sliver_VS(accounts.Account, vserver.VServer):
         self.slice_id = rec['slice_id']
         self.disk_usage_initialized = False
         self.initscriptchanged = False
+        self.enabled = True
         self.configure(rec)
 
-    _root_context_arch=None
-    @staticmethod 
-    def root_context_arch():
-        if not Sliver_VS._root_context_arch:
-            Sliver_VS._root_context_arch=commands.getoutput("uname -i")
-        return Sliver_VS._root_context_arch
-
-    @staticmethod
-    def personality (arch):
-        personality="linux32"
-        if arch.find("64")>=0:
-            personality="linux64"
-        return personality
-
     @staticmethod
     def create(name, vref = None):
         logger.verbose('Sliver_VS:create - name=%s'%name)
@@ -107,7 +94,7 @@ class Sliver_VS(accounts.Account, vserver.VServer):
             (pldistro,fcdistro,arch) = default.split("-")
 
             known_archs = [ 'i386', 'x86_64' ]
-            known_fcdistros = [ 'f8', 'f9', 'centos5' ]
+            known_fcdistros = [ 'centos5', 'f8', 'f9', 'f10', 'f11', 'f12' ]
             # from the slice attribute: cut dashes and try to figure the meaning
             slice_wishes = vref.split("-")
             for wish in slice_wishes:
@@ -122,9 +109,7 @@ class Sliver_VS(accounts.Account, vserver.VServer):
             refname="-".join( (pldistro,fcdistro,arch) )
 
             # check the template exists -- there's probably a better way..
-            if os.path.isdir ("/vservers/.vref/%s"% vref): refname = vref
-
-            if not os.path.isdir ("/vservers/.vref/%s"% refname):
+            if not os.path.isdir ("/vservers/.vref/%s"%refname):
                 logger.log("%s (%s) : vref %s not found, using default %s"%(
                         name,vref,refname,default))
                 refname=default
@@ -140,19 +125,24 @@ class Sliver_VS(accounts.Account, vserver.VServer):
             refname="default"
             arch="i386"
         except:
-            import traceback
             logger.log("%s (%s) : unexpected error follows - using 'default'"%(name,vref))
             logger.log(traceback.format_exc())
             refname="default"
             arch="i386"
             
+        def personality (arch):
+            personality="linux32"
+            if arch.find("64")>=0:
+                personality="linux64"
+            return personality
+
         logger.log_call('/usr/sbin/vuseradd', '-t', refname, name)
         # export slicename to the slice in /etc/slicename
         file('/vservers/%s/etc/slicename' % name, 'w').write(name)
         # set personality: only if needed (if arch's differ)
-        if Sliver_VS.root_context_arch() != arch:
-            file('/etc/vservers/%s/personality' % name, 'w').write(Sliver_VS.personality(arch))
-            logger.log('%s: set personality to %s'%(name,Sliver_VS.personality(arch)))
+        if tools.root_context_arch() != arch:
+            file('/etc/vservers/%s/personality' % name, 'w').write(personality(arch))
+            logger.log('%s: set personality to %s'%(name,personality(arch)))
 
     @staticmethod
     def destroy(name): logger.log_call('/usr/sbin/vuserdel', name)
@@ -168,8 +158,7 @@ class Sliver_VS(accounts.Account, vserver.VServer):
             self.initscript = new_initscript
             self.initscriptchanged = True
 
-        # install ssh keys
-        accounts.Account.configure(self, rec)  
+        accounts.Account.configure(self, rec)  # install ssh keys
 
     def start(self, delay=0):
         if self.rspec['enabled'] > 0:
@@ -279,6 +268,10 @@ class Sliver_VS(accounts.Account, vserver.VServer):
             if self.is_running():
                 logger.log("%s: Setting name to %s" % (self.name, self.slice_id),2)
                 self.setname(self.slice_id)
+
+            if self.enabled == False:
+                self.enabled = True
+                self.start()
  
             if False: # Does not work properly yet.
                 if self.have_limits_changed():
@@ -294,4 +287,5 @@ class Sliver_VS(accounts.Account, vserver.VServer):
         else:  # tell vsh to disable remote login by setting CPULIMIT to 0
             logger.log('%s: disabling remote login' % self.name)
             self.set_sched_config(0, 0)
+            self.enabled = False
             self.stop()