vgchange is required so that /dev/mapper/* and /dev/planetlab/* show up when upgrading
[bootmanager.git] / source / steps / InstallBootstrapFS.py
index 8875394..0442097 100644 (file)
@@ -15,6 +15,7 @@ import time
 
 from Exceptions import *
 import utils
+import systeminfo
 import BootServerRequest
 import BootAPI
 
@@ -78,6 +79,19 @@ def Run(vars, upgrade, log):
 
     bs_request = BootServerRequest.BootServerRequest(vars)
     
+    # in upgrade mode, since we skip InstallPartitionDisks
+    # we need to run this
+    if upgrade:
+        log.write("Upgrade mode init : Scanning for devices\n")
+        systeminfo.get_block_devices_dict(vars, log)
+        utils.sysexec_noerr("vgscan --mknodes", log)
+        utils.sysexec_noerr("vgchange -ay", log)
+
+    # debugging info - show in either mode
+    utils.display_disks_status(PARTITIONS, "In InstallBootstrapFS", log)
+
+    utils.breakpoint("we need to make /dev/mapper/* appear")
+
     log.write("turning on swap space\n")
     utils.sysexec("swapon {}".format(PARTITIONS["swap"]), log)
 
@@ -238,10 +252,12 @@ def Run(vars, upgrade, log):
 def CleanupSysimgBeforeUpgrade(sysimg, target_nodefamily, log):
 
     areas_to_cleanup = [
-        '/usr/lib',
+        '/boot',
+        '/usr',
         '/var',
         '/etc',
-        '/boot',
+        '/run',
+        '/vsys',
     ]
 
     target_pldistro, target_fcdistro, target_arch = target_nodefamily.split('-')
@@ -257,6 +273,7 @@ def CleanupSysimgBeforeUpgrade(sysimg, target_nodefamily, log):
                 if line.startswith(prefix):
                     installed_nodefamily = line.replace(prefix,"").strip()
                     installed_pldistro, installed_fcdistro, installed_arch = installed_nodefamily.split('-')
+                    # do not break here, bm-install is additive, we want the last one..
         with open("{}/etc/planetlab/virt".format(sysimg)) as infile:
             installed_virt = infile.read().strip()
     except Exception as e:
@@ -266,7 +283,11 @@ def CleanupSysimgBeforeUpgrade(sysimg, target_nodefamily, log):
     # moving from vservers to lxc also means another filesystem
     # so plain reinstall is the only option
     if installed_virt != 'lxc':
-        raise BootManagerException("Can only upgrade nodes running lxc containers (vservers not supported)")
+        message = """Can only upgrade nodes already running lxc containers
+a node running vservers has its /vservers/ partition formatted as ext3 
+and we need btrfs to move to containers
+your only option here is reinstall"""
+        raise BootManagerException(message)
 
     # changing arch is not reasonable either
     if target_arch != installed_arch: