[rhel7-branch 1/1] Handle driver rpms retrieved via network (#1257916)

bcl installerbot-noreply at redhat.com
Thu Sep 10 23:08:30 UTC 2015


From: "Brian C. Lane" <bcl at redhat.com>

Resolves: rhbz#1257916
---
 dracut/driver_updates.py                  | 22 +++++++++++++++++++++-
 tests/dracut_tests/test_driver_updates.py | 26 ++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/dracut/driver_updates.py b/dracut/driver_updates.py
index 87aedc0..de18805 100755
--- a/dracut/driver_updates.py
+++ b/dracut/driver_updates.py
@@ -343,6 +343,23 @@ def _process_driver_disk(dev, interactive=False):
         else:
             print("=== No driver disks found in %s! ===\n" % dev)
 
+def process_driver_rpm(rpm):
+    try:
+        _process_driver_rpm(rpm)
+    except (subprocess.CalledProcessError, IOError) as e:
+        log.error("ERROR: %s", e)
+
+def _process_driver_rpm(rpm):
+    """
+    Process a single driver rpm. Extract it, install it, and copy the
+    rpm for Anaconda to install on the target system.
+    """
+    log.info("Examining %s", rpm)
+    new_modules = extract_drivers(repos=[os.path.dirname(rpm)])
+    if new_modules:
+        modules = grab_driver_files()
+        load_drivers(modules)
+
 def mark_finished(user_request, topdir="/tmp"):
     log.debug("marking %s complete in %s", user_request, topdir)
     append_line(topdir+"/dd_finished", user_request)
@@ -582,7 +599,10 @@ def main(args):
 
     if mode in ('--disk', '--net'):
         request, dev = args
-        process_driver_disk(dev)
+        if dev.endswith(".rpm"):
+            process_driver_rpm(dev)
+        else:
+            process_driver_disk(dev)
 
     elif mode == '--interactive':
         log.info("starting interactive mode")
diff --git a/tests/dracut_tests/test_driver_updates.py b/tests/dracut_tests/test_driver_updates.py
index 0e47c76..051cafd 100644
--- a/tests/dracut_tests/test_driver_updates.py
+++ b/tests/dracut_tests/test_driver_updates.py
@@ -485,6 +485,32 @@ def test_no_drivers(self):
         self.assertFalse(self.mocks['grab_driver_files'].called)
         self.assertFalse(self.mocks['load_drivers'].called)
 
+from driver_updates import process_driver_rpm
+class ProcessDriverRPMTestCase(unittest.TestCase):
+    def setUp(self):
+        self.frepo = {
+            '/tmp/fake': ['/mnt/DD-1'],
+        }
+        self.modlist = []
+        # set up our patches
+        patches = (
+            mock.patch("driver_updates.find_repos", side_effect=self.frepo.get),
+            mock.patch("driver_updates.extract_drivers", return_value=True),
+            mock.patch("driver_updates.load_drivers"),
+            mock.patch('driver_updates.grab_driver_files',
+                                side_effect=lambda: self.modlist),
+        )
+        self.mocks = {p.attribute:p.start() for p in patches}
+        for p in patches: self.addCleanup(p.stop)
+
+    def test_basic(self):
+        """process_driver_rpm: extract RPM, grab + load driver"""
+        rpm = '/tmp/fake/driver.rpm'
+        process_driver_rpm(rpm)
+        self.mocks['extract_drivers'].assert_called_once_with(repos="/tmp/fake")
+        self.mocks['grab_driver_files'].assert_called_once_with()
+        self.mocks['load_drivers'].assert_called_once_with(self.modlist)
+
 from driver_updates import finish, mark_finished, all_finished
 
 class FinishedTestCase(FileTestCaseBase):


-- 
To view this commit on github, visit https://github.com/rhinstaller/anaconda/commit/956390f155bb73cbf68c00c559a9573e472dcbdf


More information about the anaconda-patches mailing list