[node-patches] Change in ovirt-node[master]: move find_grub_cfg to more reusable bootloader installation ...

jboggs at redhat.com jboggs at redhat.com
Wed Feb 19 15:07:42 UTC 2014


Joey Boggs has uploaded a new change for review.

Change subject: move find_grub_cfg to more reusable bootloader installation function and wrap existing code
......................................................................

move find_grub_cfg to more reusable bootloader installation function and wrap existing code

Change-Id: I73d9cb0e8494719184b9e7c7039ca0770b7e0370
Signed-off-by: Joey Boggs <jboggs at redhat.com>
---
M src/ovirt/node/utils/system.py
M src/ovirtnode/ovirtfunctions.py
2 files changed, 49 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/87/24787/1

diff --git a/src/ovirt/node/utils/system.py b/src/ovirt/node/utils/system.py
index d8861d7..ab04f6f 100644
--- a/src/ovirt/node/utils/system.py
+++ b/src/ovirt/node/utils/system.py
@@ -68,6 +68,13 @@
     return sys.version_info[:2] == (2, 6)
 
 
+def booted_from_local_disk():
+    """If the system is running from an installed disk
+    """
+    return any(arg in open("/proc/cmdline").read().split() for arg
+               in ["LABEL=Root", "LABEL=RootBackup"])
+
+
 def is_rescue_mode():
     """If the system is running in rescue mode
     """
@@ -598,21 +605,55 @@
         return os.path.exists("/sbin/grub2-install")
 
     @staticmethod
-    def find_grub_cfg():
+    def get_grub_paths():
         cfg_path = None
+        efi_dir = None
+        grub_suffix = None
 
+        # iscsi
         if Filesystem.by_label("Boot"):
-            cfg_path = "/boot/grub/grub.conf"
-        elif os.path.ismount("/dev/.initramfs/live"):
             if not Bootloader.is_grub2():
-                cfg_path = "/dev/.initramfs/live/grub/grub.conf"
+                cfg_path = "/boot/grub/grub.conf"
             else:
-                cfg_path = "/dev/.initramfs/live/grub2/grub.cfg"
-        elif os.path.ismount("/run/initramfs/.live"):
-            cfg_path = "/liveos/grub/grub.conf"
+                cfg_path = "/boot/grub/grub.cfg"
 
+        # online grub config locations
+        if booted_from_local_disk():
+            if os.path.ismount("/dev/.initramfs/live"):
+                if not Bootloader.is_grub2():
+                    cfg_path = "/dev/.initramfs/live/grub/grub.conf"
+                else:
+                    cfg_path = "/dev/.initramfs/live/grub2/grub.cfg"
+            elif os.path.ismount("/run/initramfs/.live"):
+                cfg_path = "/liveos/grub/grub.conf"
+        # bios offline paths
         else:
+            if not Bootloader.is_grub2():
+                cfg_path = "/liveos/grub2/grub.conf"
+            else:
+                cfg_path = "/liveos/grub/grub.cfg"
+
+        # efi for grub/grub2
+        if is_efi():
+            if not os.path.exists("/boot/efi/EFI/redhat"):
+                efi_dir = "fedora"
+            else:
+                efi_dir = "redhat"
+
+            if not Bootloader.is_grub2():
+                grub_suffix = "conf"
+            else:
+                grub_suffix = "cfg"
+
+            cfg_path = "/boot/efi/EFI/%s/grub.%s" % (efi_dir, grub_suffix)
+
+        if not cfg_path:
             raise RuntimeError("Failed to find the path for grub.[cfg|conf]")
+        return cfg_path
+
+    @staticmethod
+    def find_grub_cfg():
+        cfg_path = Bootloader.get_grub_paths()
         return File(cfg_path)
 
     class Arguments(base.Base):
diff --git a/src/ovirtnode/ovirtfunctions.py b/src/ovirtnode/ovirtfunctions.py
index 40fba45..270311e 100644
--- a/src/ovirtnode/ovirtfunctions.py
+++ b/src/ovirtnode/ovirtfunctions.py
@@ -260,6 +260,7 @@
 
 # return 0 if booted from local disk
 # return 1 if booted from other media
+# legacy in ovirt.node.utils.system
 def is_booted_from_local_disk():
     ret = system_closefds("grep -q LABEL=Root /proc/cmdline")
     if ret == 0:


-- 
To view, visit http://gerrit.ovirt.org/24787
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I73d9cb0e8494719184b9e7c7039ca0770b7e0370
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-node
Gerrit-Branch: master
Gerrit-Owner: Joey Boggs <jboggs at redhat.com>



More information about the node-patches mailing list