X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sliver_lxc.py;h=44194ed7d7cba61acd18326738e68026667f2715;hb=ecee05390277f57b02d21ffca0195292bde1defa;hp=9ca2aa83d5e2d149b7e87d47c80dfc17b71b4645;hpb=619f6ee406f8e11a5054c1e2c988f6eb95bce324;p=nodemanager.git diff --git a/sliver_lxc.py b/sliver_lxc.py index 9ca2aa8..44194ed 100644 --- a/sliver_lxc.py +++ b/sliver_lxc.py @@ -13,7 +13,7 @@ from string import Template # vsys probably should not be a plugin # the thing is, the right way to handle stuff would be that # if slivers get created by doing a,b,c -# then they sohuld be delted by doing c,b,a +# then they should be deleted by doing c,b,a # the current ordering model for vsys plugins completely fails to capture that from plugins.vsys import removeSliverFromVsys, startService as vsysStartService @@ -78,6 +78,19 @@ class Sliver_LXC(Sliver_Libvirt, Initscript): logger.verbose ('sliver_lxc: %s create'%(name)) conn = Sliver_Libvirt.getConnection(Sliver_LXC.TYPE) + vref = rec['vref'] + if vref is None: + vref = "lxc-f18-x86_64" + logger.log("sliver_libvirt: %s: WARNING - no vref attached, using hard-wired default %s" % (name,vref)) + + # compute guest arch from vref + # essentially we want x86_64 (default) or i686 here for libvirt + try: + (x,y,arch)=vref.split('-') + arch = "x86_64" if arch.find("64")>=0 else "i686" + except: + arch='x86_64' + # Get the type of image from vref myplc tags specified as: # pldistro = lxc # fcdistro = squeeze @@ -90,10 +103,8 @@ class Sliver_LXC(Sliver_Libvirt, Initscript): if arch == 'i386': arch = 'i686' - vref = rec['vref'] - if vref is None: - vref = "lxc-f18-x86_64" - logger.log("sliver_libvirt: %s: WARNING - no vref attached, using hard-wired default %s" % (name,vref)) + + refImgDir = os.path.join(Sliver_LXC.REF_IMG_BASE_DIR, vref) containerDir = os.path.join(Sliver_LXC.CON_BASE_DIR, name) @@ -111,7 +122,7 @@ class Sliver_LXC(Sliver_Libvirt, Initscript): # # if /vservers/foo does not exist, it creates /vservers/foo # # but if it does exist, then it creates /vservers/foo/image !! # # so we need to check the expected container rootfs does not exist yet -# # this hopefully could be removed in a future release +# # this hopefully could be removed in a future release # if os.path.exists (containerDir): # logger.log("sliver_lxc: %s: WARNING cleaning up pre-existing %s"%(name,containerDir)) # command = ['btrfs', 'subvolume', 'delete', containerDir] @@ -211,7 +222,7 @@ class Sliver_LXC(Sliver_Libvirt, Initscript): logger.log_exc("exception while updating /etc/sudoers") # customizations for the user environment - root or slice uid - # we save the whole business in /etc/planetlab.profile + # we save the whole business in /etc/planetlab.profile # and source this file for both root and the slice uid's .profile # prompt for slice owner, + LD_PRELOAD for transparently wrap bind pl_profile=os.path.join(containerDir,"etc/planetlab.profile") @@ -247,7 +258,7 @@ unset pathmunge # if dir is not yet existing let's forget it for now if not os.path.isdir(os.path.dirname(from_root)): continue found=False - try: + try: contents=file(from_root).readlines() for content in contents: if content==enforced_line: found=True @@ -331,7 +342,7 @@ unset pathmunge # Remove rootfs of destroyed domain command = ['btrfs', 'subvolume', 'delete', containerDir] logger.log_call(command, timeout=BTRFS_TIMEOUT) - + # For some reason I am seeing this : #log_call: running command btrfs subvolume delete /vservers/inri_sl1 #log_call: ERROR: cannot delete '/vservers/inri_sl1' - Device or resource busy