54c03ce
From 00047d25ca9b4afbcc692f36617c38e82b375591 Mon Sep 17 00:00:00 2001
54c03ce
From: Peter Robinson <pbrobinson@gmail.com>
54c03ce
Date: Thu, 14 Mar 2019 13:02:47 +0000
54c03ce
Subject: [PATCH 11/13] Make whether we use UEFI configurable on devices that
54c03ce
 have legacy options
54c03ce
54c03ce
This allows us to specifiy whether a OS version supports/defaults to
54c03ce
UEFI or legacy BIOS on x86.
54c03ce
54c03ce
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
54c03ce
---
54c03ce
 oz/Fedora.py | 15 ++++++++++++---
54c03ce
 oz/Guest.py  | 15 ++++++++++-----
54c03ce
 oz/Linux.py  |  4 ++--
54c03ce
 oz/RedHat.py | 12 ++++++------
54c03ce
 4 files changed, 30 insertions(+), 16 deletions(-)
54c03ce
54c03ce
diff --git a/oz/Fedora.py b/oz/Fedora.py
54c03ce
--- a/oz/Fedora.py
54c03ce
+++ b/oz/Fedora.py
54c03ce
@@ -32,7 +32,7 @@ class FedoraConfiguration(object):
54c03ce
     """
54c03ce
     def __init__(self, has_virtio_channel, use_yum, use_dev_cdrom_device,
54c03ce
                  createpart, directkernel, default_netdev, default_diskbus,
54c03ce
-                 brokenisomethod, haverepo):
54c03ce
+                 brokenisomethod, haverepo, useuefi=False):
54c03ce
         self._has_virtio_channel = has_virtio_channel
54c03ce
         self._use_yum = use_yum
54c03ce
         self._use_dev_cdrom_device = use_dev_cdrom_device
54c03ce
@@ -42,6 +42,7 @@ class FedoraConfiguration(object):
54c03ce
         self._default_diskbus = default_diskbus
54c03ce
         self._brokenisomethod = brokenisomethod
54c03ce
         self._haverepo = haverepo
54c03ce
+        self._useuefi = useuefi
54c03ce
 
54c03ce
     @property
54c03ce
     def has_virtio_channel(self):
54c03ce
@@ -107,6 +108,13 @@ class FedoraConfiguration(object):
54c03ce
         """
54c03ce
         return self._haverepo
54c03ce
 
54c03ce
+    @property
54c03ce
+    def useuefi(self):
54c03ce
+        """
54c03ce
+        Property method for whether to default to using UEFI as firmware or legacy method.
54c03ce
+        """
54c03ce
+        return self._useuefi
54c03ce
+
54c03ce
 
54c03ce
 version_to_config = {
54c03ce
     '29': FedoraConfiguration(has_virtio_channel=True, use_yum=False,
54c03ce
@@ -235,7 +243,7 @@ class FedoraGuest(oz.RedHat.RedHatLinuxC
54c03ce
     # ignored now; we leave it in place for backwards API compatibility.
54c03ce
     def __init__(self, tdl, config, auto, nicmodel, haverepo, diskbus,  # pylint: disable=unused-argument
54c03ce
                  brokenisomethod, output_disk=None, macaddress=None,    # pylint: disable=unused-argument
54c03ce
-                 assumed_update=None):
54c03ce
+                 assumed_update=None, useuefi=False):
54c03ce
         self.config = version_to_config[tdl.update]
54c03ce
         if nicmodel is None:
54c03ce
             nicmodel = self.config.default_netdev
54c03ce
@@ -247,7 +255,8 @@ class FedoraGuest(oz.RedHat.RedHatLinuxC
54c03ce
         oz.RedHat.RedHatLinuxCDYumGuest.__init__(self, tdl, config, auto,
54c03ce
                                                  output_disk, nicmodel, diskbus,
54c03ce
                                                  True, True, self.config.directkernel,
54c03ce
-                                                 macaddress, self.config.use_yum)
54c03ce
+                                                 macaddress, self.config.use_yum,
54c03ce
+                                                 self.config.useuefi)
54c03ce
 
54c03ce
         if self.assumed_update is not None:
54c03ce
             self.log.warning("==== WARN: TDL contains Fedora update %s, which is newer than Oz knows about; pretending this is Fedora %s, but this may fail ====", tdl.update, assumed_update)
54c03ce
diff --git a/oz/Guest.py b/oz/Guest.py
54c03ce
--- a/oz/Guest.py
54c03ce
+++ b/oz/Guest.py
54c03ce
@@ -129,7 +129,7 @@ class Guest(object):
54c03ce
         self._discover_libvirt_type()
54c03ce
 
54c03ce
     def __init__(self, tdl, config, auto, output_disk, nicmodel, clockoffset,
54c03ce
-                 mousetype, diskbus, iso_allowed, url_allowed, macaddress):
54c03ce
+                 mousetype, diskbus, iso_allowed, url_allowed, macaddress, useuefi):
54c03ce
         self.tdl = tdl
54c03ce
 
54c03ce
         # for backwards compatibility
54c03ce
@@ -488,6 +488,11 @@ class Guest(object):
54c03ce
             loader, nvram = oz.ozutil.find_uefi_firmware(self.tdl.arch)
54c03ce
             oz.ozutil.lxml_subelement(osNode, "loader", loader, {'readonly': 'yes', 'type': 'pflash'})
54c03ce
             oz.ozutil.lxml_subelement(osNode, "nvram", None, {'template': nvram})
54c03ce
+        # x86_64 has legacy requirements so we check for defaults as well as for edk2
54c03ce
+        if self.tdl.arch in ["x86_64"] and self.config.useuefi == True:
54c03ce
+            loader, nvram = oz.ozutil.find_uefi_firmware(self.tdl.arch)
54c03ce
+            oz.ozutil.lxml_subelement(osNode, "loader", loader, {'readonly': 'yes', 'type': 'pflash'})
54c03ce
+            oz.ozutil.lxml_subelement(osNode, "nvram", None, {'template': nvram})
54c03ce
         # poweroff, reboot, crash
54c03ce
         oz.ozutil.lxml_subelement(domain, "on_poweroff", "destroy")
54c03ce
         oz.ozutil.lxml_subelement(domain, "on_reboot", "destroy")
54c03ce
@@ -1309,10 +1314,10 @@ class CDGuest(Guest):
54c03ce
             self.seqnum = seqnum
54c03ce
 
54c03ce
     def __init__(self, tdl, config, auto, output_disk, nicmodel, clockoffset,
54c03ce
-                 mousetype, diskbus, iso_allowed, url_allowed, macaddress):
54c03ce
+                 mousetype, diskbus, iso_allowed, url_allowed, macaddress, useuefi):
54c03ce
         Guest.__init__(self, tdl, config, auto, output_disk, nicmodel,
54c03ce
                        clockoffset, mousetype, diskbus, iso_allowed,
54c03ce
-                       url_allowed, macaddress)
54c03ce
+                       url_allowed, macaddress, useuefi)
54c03ce
 
54c03ce
         self.orig_iso = os.path.join(self.data_dir, "isos",
54c03ce
                                      self.tdl.distro + self.tdl.update + self.tdl.arch + "-" + self.tdl.installtype + ".iso")
54c03ce
@@ -1777,9 +1782,9 @@ class FDGuest(Guest):
54c03ce
     Class for guest installation via floppy disk.
54c03ce
     """
54c03ce
     def __init__(self, tdl, config, auto, output_disk, nicmodel, clockoffset,
54c03ce
-                 mousetype, diskbus, macaddress):
54c03ce
+                 mousetype, diskbus, macaddress, useuefi):
54c03ce
         Guest.__init__(self, tdl, config, auto, output_disk, nicmodel,
54c03ce
-                       clockoffset, mousetype, diskbus, False, True, macaddress)
54c03ce
+                       clockoffset, mousetype, diskbus, False, True, macaddress, useuefi)
54c03ce
         self.orig_floppy = os.path.join(self.data_dir, "floppies",
54c03ce
                                         self.tdl.distro + self.tdl.update + self.tdl.arch + ".img")
54c03ce
         self.modified_floppy_cache = os.path.join(self.data_dir, "floppies",
54c03ce
diff --git a/oz/Linux.py b/oz/Linux.py
54c03ce
--- a/oz/Linux.py
54c03ce
+++ b/oz/Linux.py
54c03ce
@@ -33,10 +33,10 @@ class LinuxCDGuest(oz.Guest.CDGuest):
54c03ce
     Class for Linux installation.
54c03ce
     """
54c03ce
     def __init__(self, tdl, config, auto, output_disk, nicmodel, diskbus,
54c03ce
-                 iso_allowed, url_allowed, macaddress):
54c03ce
+                 iso_allowed, url_allowed, macaddress, useuefi):
54c03ce
         oz.Guest.CDGuest.__init__(self, tdl, config, auto, output_disk,
54c03ce
                                   nicmodel, None, None, diskbus, iso_allowed,
54c03ce
-                                  url_allowed, macaddress)
54c03ce
+                                  url_allowed, macaddress, useuefi)
54c03ce
 
54c03ce
     def _test_ssh_connection(self, guestaddr):
54c03ce
         """
54c03ce
diff --git a/oz/RedHat.py b/oz/RedHat.py
54c03ce
--- a/oz/RedHat.py
54c03ce
+++ b/oz/RedHat.py
54c03ce
@@ -40,10 +40,10 @@ class RedHatLinuxCDGuest(oz.Linux.LinuxC
54c03ce
     Class for RedHat-based CD guests.
54c03ce
     """
54c03ce
     def __init__(self, tdl, config, auto, output_disk, nicmodel, diskbus,
54c03ce
-                 iso_allowed, url_allowed, initrdtype, macaddress):
54c03ce
+                 iso_allowed, url_allowed, initrdtype, macaddress, useuefi):
54c03ce
         oz.Linux.LinuxCDGuest.__init__(self, tdl, config, auto, output_disk,
54c03ce
                                        nicmodel, diskbus, iso_allowed,
54c03ce
-                                       url_allowed, macaddress)
54c03ce
+                                       url_allowed, macaddress, useuefi)
54c03ce
         self.crond_was_active = False
54c03ce
         self.sshd_was_active = False
54c03ce
         self.sshd_config = """\
54c03ce
@@ -722,11 +722,11 @@ class RedHatLinuxCDYumGuest(RedHatLinuxC
54c03ce
     Class for RedHat-based CD guests with yum support.
54c03ce
     """
54c03ce
     def __init__(self, tdl, config, auto, output_disk, nicmodel, diskbus,
54c03ce
-                 iso_allowed, url_allowed, initrdtype, macaddress, use_yum):
54c03ce
+                 iso_allowed, url_allowed, initrdtype, macaddress, use_yum, useuefi):
54c03ce
         oz.RedHat.RedHatLinuxCDGuest.__init__(self, tdl, config, auto,
54c03ce
                                               output_disk, nicmodel, diskbus,
54c03ce
                                               iso_allowed, url_allowed,
54c03ce
-                                              initrdtype, macaddress)
54c03ce
+                                              initrdtype, macaddress, useuefi)
54c03ce
 
54c03ce
         self.use_yum = use_yum
54c03ce
 
54c03ce
@@ -845,9 +845,9 @@ class RedHatFDGuest(oz.Guest.FDGuest):
54c03ce
     Class for RedHat-based floppy guests.
54c03ce
     """
54c03ce
     def __init__(self, tdl, config, auto, output_disk, nicmodel, diskbus,
54c03ce
-                 macaddress):
54c03ce
+                 macaddress, useuefi):
54c03ce
         oz.Guest.FDGuest.__init__(self, tdl, config, auto, output_disk,
54c03ce
-                                  nicmodel, None, None, diskbus, macaddress)
54c03ce
+                                  nicmodel, None, None, diskbus, macaddress, useuefi)
54c03ce
 
54c03ce
         if self.tdl.arch != "i386":
54c03ce
             raise oz.OzException.OzException("Invalid arch " + self.tdl.arch + "for " + self.tdl.distro + " guest")
54c03ce
-- 
54c03ce
2.20.1
54c03ce