[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