128 lines
5.7 KiB
Diff
128 lines
5.7 KiB
Diff
From 4e699fe30da24771b80ff1fe64d7791bcb444f79 Mon Sep 17 00:00:00 2001
|
|
From: Vendula Poncova <vponcova@redhat.com>
|
|
Date: Tue, 21 Jul 2020 10:57:00 +0200
|
|
Subject: [PATCH] Allow to detect devices with the iso9660 file system as
|
|
optical media
|
|
|
|
Test that the DBus method FindOpticalMedia identifies devices with the iso9660 file
|
|
system as optical media, so it is able to find NVDIMM devices with iso9660.
|
|
|
|
The DBus method GetDevicesToIgnore of the NVDIMM module shouldn't return NVDIMM
|
|
devices with the iso9660 file system. They can be used as an installation source.
|
|
|
|
Protect all devices with the iso9660 file system. It will protect, for example, NVDIMM
|
|
devices with the iso9660 file system that can be used only as an installation source
|
|
anyway.
|
|
|
|
Related: rhbz#1856264
|
|
---
|
|
.../modules/storage/devicetree/model.py | 5 ++++
|
|
pyanaconda/modules/storage/nvdimm/nvdimm.py | 12 ++++++++-
|
|
.../module_device_tree_test.py | 27 ++++++++++++++++---
|
|
3 files changed, 39 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/pyanaconda/modules/storage/devicetree/model.py b/pyanaconda/modules/storage/devicetree/model.py
|
|
index 4d0ecdb..cdee5a8 100644
|
|
--- a/pyanaconda/modules/storage/devicetree/model.py
|
|
+++ b/pyanaconda/modules/storage/devicetree/model.py
|
|
@@ -303,6 +303,11 @@ class InstallerStorage(Blivet):
|
|
# cdroms, involves unmounting which is undesirable (see bug #1671713).
|
|
protected.extend(dev for dev in self.devicetree.devices if dev.type == "cdrom")
|
|
|
|
+ # Protect also all devices with an iso9660 file system. It will protect
|
|
+ # NVDIMM devices that can be used only as an installation source anyway
|
|
+ # (see the bug #1856264).
|
|
+ protected.extend(dev for dev in self.devicetree.devices if dev.format.type == "iso9660")
|
|
+
|
|
# Mark the collected devices as protected.
|
|
for dev in protected:
|
|
log.debug("Marking device %s as protected.", dev.name)
|
|
diff --git a/pyanaconda/modules/storage/nvdimm/nvdimm.py b/pyanaconda/modules/storage/nvdimm/nvdimm.py
|
|
index 0bbcc6e..4476dd1 100644
|
|
--- a/pyanaconda/modules/storage/nvdimm/nvdimm.py
|
|
+++ b/pyanaconda/modules/storage/nvdimm/nvdimm.py
|
|
@@ -21,6 +21,7 @@ import gi
|
|
gi.require_version("BlockDev", "2.0")
|
|
from gi.repository import BlockDev as blockdev
|
|
|
|
+from blivet import udev
|
|
from blivet.static_data import nvdimm
|
|
|
|
from pykickstart.constants import NVDIMM_ACTION_RECONFIGURE, NVDIMM_ACTION_USE
|
|
@@ -90,6 +91,9 @@ class NVDIMMModule(KickstartBaseModule):
|
|
installation, the device(s) must be specified by nvdimm kickstart
|
|
command. Also, only devices in sector mode are allowed.
|
|
|
|
+ Don't ignore devices that have an iso9660 file system. We might
|
|
+ want to use them as an installation source.
|
|
+
|
|
:return: a set of device names
|
|
"""
|
|
namespaces_to_use = self.get_namespaces_to_use()
|
|
@@ -97,7 +101,13 @@ class NVDIMMModule(KickstartBaseModule):
|
|
devices_to_ignore = set()
|
|
|
|
for ns_name, ns_info in nvdimm.namespaces.items():
|
|
- if ns_info.mode != blockdev.NVDIMMNamespaceMode.SECTOR:
|
|
+ info = udev.get_device(device_node="/dev/" + ns_info.blockdev)
|
|
+
|
|
+ if info and udev.device_get_format(info) == "iso9660":
|
|
+ log.debug("%s / %s won't be ignored - NVDIMM device has "
|
|
+ "an iso9660 file system", ns_name, ns_info.blockdev)
|
|
+ continue
|
|
+ elif ns_info.mode != blockdev.NVDIMMNamespaceMode.SECTOR:
|
|
log.debug("%s / %s will be ignored - NVDIMM device is not "
|
|
"in sector mode", ns_name, ns_info.blockdev)
|
|
elif ns_name not in namespaces_to_use and ns_info.blockdev not in devices_to_use:
|
|
diff --git a/tests/nosetests/pyanaconda_tests/module_device_tree_test.py b/tests/nosetests/pyanaconda_tests/module_device_tree_test.py
|
|
index 838c70e..5e52843 100644
|
|
--- a/tests/nosetests/pyanaconda_tests/module_device_tree_test.py
|
|
+++ b/tests/nosetests/pyanaconda_tests/module_device_tree_test.py
|
|
@@ -24,10 +24,10 @@ from unittest.mock import patch, Mock, PropertyMock
|
|
from tests.nosetests.pyanaconda_tests import patch_dbus_publish_object, check_task_creation
|
|
|
|
from blivet.devices import StorageDevice, DiskDevice, DASDDevice, ZFCPDiskDevice, PartitionDevice, \
|
|
- LUKSDevice, iScsiDiskDevice, NVDIMMNamespaceDevice, FcoeDiskDevice
|
|
+ LUKSDevice, iScsiDiskDevice, NVDIMMNamespaceDevice, FcoeDiskDevice, OpticalDevice
|
|
from blivet.errors import StorageError, FSError
|
|
from blivet.formats import get_format
|
|
-from blivet.formats.fs import FS
|
|
+from blivet.formats.fs import FS, Iso9660FS
|
|
from blivet.formats.luks import LUKS
|
|
from blivet.size import Size
|
|
|
|
@@ -627,9 +627,28 @@ class DeviceTreeInterfaceTestCase(unittest.TestCase):
|
|
str(cm.exception), "Failed to unmount dev1 from /path: Fake error."
|
|
)
|
|
|
|
- def find_install_media_test(self):
|
|
+ @patch.object(Iso9660FS, "check_module")
|
|
+ def find_install_media_test(self, check_module):
|
|
"""Test FindInstallMedia."""
|
|
- self.assertEqual(self.interface.FindOpticalMedia(), [])
|
|
+ dev1 = OpticalDevice("dev1")
|
|
+ dev1.size = Size("2 GiB")
|
|
+ dev1.format = get_format("iso9660")
|
|
+ dev1.controllable = True
|
|
+ self._add_device(dev1)
|
|
+
|
|
+ dev2 = StorageDevice("dev2")
|
|
+ dev2.size = Size("2 GiB")
|
|
+ dev2.format = get_format("iso9660")
|
|
+ dev2.controllable = True
|
|
+ self._add_device(dev2)
|
|
+
|
|
+ dev3 = StorageDevice("dev3")
|
|
+ dev3.size = Size("2 GiB")
|
|
+ dev3.format = get_format("ext4")
|
|
+ dev3.controllable = True
|
|
+ self._add_device(dev3)
|
|
+
|
|
+ self.assertEqual(self.interface.FindOpticalMedia(), ["dev1", "dev2"])
|
|
|
|
@patch.object(FS, "update_size_info")
|
|
def find_mountable_partitions_test(self, update_size_info):
|
|
--
|
|
2.23.0
|
|
|