- nvme: Retrieve HostNQN from a first active fabrics connection
- tests: Add a simple unit test for the NVMe module Resolves: RHEL-11541
This commit is contained in:
parent
fdcd46eb2d
commit
1618b022c0
@ -23,7 +23,7 @@ index 17bead15e..5ac41cffa 100644
|
||||
-from . import util
|
||||
+
|
||||
+import gi
|
||||
+gi.require_version("BlockDev", "3.0")
|
||||
+gi.require_version("BlockDev", "2.0")
|
||||
+
|
||||
+from gi.repository import BlockDev as blockdev
|
||||
|
||||
|
58
0019-nvme-hostnqn_from_active_fabrics_connection.patch
Normal file
58
0019-nvme-hostnqn_from_active_fabrics_connection.patch
Normal file
@ -0,0 +1,58 @@
|
||||
From 63da3cb8a40500c889c8faa4326f81d16997a3c8 Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Bzatek <tbzatek@redhat.com>
|
||||
Date: Mon, 27 Nov 2023 18:55:55 +0100
|
||||
Subject: [PATCH] nvme: Retrieve HostNQN from a first active fabrics connection
|
||||
|
||||
When no /etc/hostnqn exists, look for any active NVMe over Fabrics
|
||||
connections and take the values from a first one, rather than
|
||||
generating new ones.
|
||||
---
|
||||
blivet/nvme.py | 21 +++++++++++++++++++++
|
||||
1 file changed, 21 insertions(+)
|
||||
|
||||
diff --git a/blivet/nvme.py b/blivet/nvme.py
|
||||
index 5ac41cffa..2e4686e68 100644
|
||||
--- a/blivet/nvme.py
|
||||
+++ b/blivet/nvme.py
|
||||
@@ -18,6 +18,7 @@
|
||||
#
|
||||
|
||||
import os
|
||||
+import glob
|
||||
|
||||
from . import errors
|
||||
|
||||
@@ -54,6 +55,22 @@ def __call__(self):
|
||||
def __deepcopy__(self, memo_dict): # pylint: disable=unused-argument
|
||||
return self
|
||||
|
||||
+ def _retrieve_fabrics_hostnqn(self):
|
||||
+ for d in glob.glob('/sys/class/nvme-fabrics/ctl/nvme*/'):
|
||||
+ try:
|
||||
+ # invalidate old values
|
||||
+ self._hostnqn = None
|
||||
+ self._hostid = None
|
||||
+ # read from sysfs
|
||||
+ with open(os.path.join(d, 'hostnqn')) as f:
|
||||
+ self._hostnqn = f.readline().strip()
|
||||
+ with open(os.path.join(d, 'hostid')) as f:
|
||||
+ self._hostid = f.readline().strip()
|
||||
+ if self._hostnqn:
|
||||
+ break
|
||||
+ except Exception: # pylint: disable=broad-except
|
||||
+ pass
|
||||
+
|
||||
def startup(self):
|
||||
if self.started:
|
||||
return
|
||||
@@ -61,6 +78,10 @@ def startup(self):
|
||||
self._hostnqn = blockdev.nvme_get_host_nqn()
|
||||
self._hostid = blockdev.nvme_get_host_id()
|
||||
if not self._hostnqn:
|
||||
+ # see if there are any active fabrics connections and take their values over
|
||||
+ self._retrieve_fabrics_hostnqn()
|
||||
+ if not self._hostnqn:
|
||||
+ # generate new values
|
||||
self._hostnqn = blockdev.nvme_generate_host_nqn()
|
||||
if not self._hostnqn:
|
||||
raise errors.NVMeError("Failed to generate HostNQN")
|
67
0020-nvme-add_unit_tests.patch
Normal file
67
0020-nvme-add_unit_tests.patch
Normal file
@ -0,0 +1,67 @@
|
||||
From c807e234dfd07f3d0005c71501f0300284cd580b Mon Sep 17 00:00:00 2001
|
||||
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||
Date: Wed, 6 Dec 2023 11:47:31 +0100
|
||||
Subject: [PATCH] tests: Add a simple unit test for the NVMe module
|
||||
|
||||
---
|
||||
tests/unit_tests/__init__.py | 1 +
|
||||
tests/unit_tests/nvme_test.py | 38 +++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 39 insertions(+)
|
||||
create mode 100644 tests/unit_tests/nvme_test.py
|
||||
|
||||
diff --git a/tests/unit_tests/__init__.py b/tests/unit_tests/__init__.py
|
||||
index 589366e0f..62bef67f5 100644
|
||||
--- a/tests/unit_tests/__init__.py
|
||||
+++ b/tests/unit_tests/__init__.py
|
||||
@@ -9,6 +9,7 @@
|
||||
from .devicetree_test import *
|
||||
from .events_test import *
|
||||
from .misc_test import *
|
||||
+from .nvme_test import *
|
||||
from .parentlist_test import *
|
||||
from .populator_test import *
|
||||
from .size_test import *
|
||||
diff --git a/tests/unit_tests/nvme_test.py b/tests/unit_tests/nvme_test.py
|
||||
new file mode 100644
|
||||
index 000000000..cb948687f
|
||||
--- /dev/null
|
||||
+++ b/tests/unit_tests/nvme_test.py
|
||||
@@ -0,0 +1,38 @@
|
||||
+import unittest
|
||||
+
|
||||
+try:
|
||||
+ from unittest.mock import patch
|
||||
+except ImportError:
|
||||
+ from mock import patch
|
||||
+
|
||||
+from blivet.nvme import nvme
|
||||
+
|
||||
+
|
||||
+class NVMeModuleTestCase(unittest.TestCase):
|
||||
+
|
||||
+ host_nqn = "nqn.2014-08.org.nvmexpress:uuid:01234567-8900-abcd-efff-abcdabcdabcd"
|
||||
+
|
||||
+ @patch("blivet.nvme.os")
|
||||
+ @patch("blivet.nvme.blockdev")
|
||||
+ def test_nvme_module(self, bd, os):
|
||||
+ self.assertIsNotNone(nvme)
|
||||
+ bd.nvme_get_host_nqn.return_value = self.host_nqn
|
||||
+ bd.nvme_get_host_id.return_value = None # None = generate from host_nqn
|
||||
+ os.path.isdir.return_value = False
|
||||
+
|
||||
+ # startup
|
||||
+ with patch.object(nvme, "write") as write:
|
||||
+ nvme.startup()
|
||||
+ write.assert_called_once_with("/", overwrite=False)
|
||||
+
|
||||
+ self.assertTrue(nvme.started)
|
||||
+ self.assertEqual(nvme._hostnqn, self.host_nqn)
|
||||
+ self.assertEqual(nvme._hostid, "01234567-8900-abcd-efff-abcdabcdabcd")
|
||||
+
|
||||
+ # write
|
||||
+ with patch("blivet.nvme.open") as op:
|
||||
+ nvme.write("/test")
|
||||
+
|
||||
+ os.makedirs.assert_called_with("/test/etc/nvme/", 0o755)
|
||||
+ op.assert_any_call("/test/etc/nvme/hostnqn", "w")
|
||||
+ op.assert_any_call("/test/etc/nvme/hostid", "w")
|
@ -23,7 +23,7 @@ Version: 3.6.0
|
||||
|
||||
#%%global prerelease .b2
|
||||
# prerelease, if defined, should be something like .a1, .b1, .b2.dev1, or .c2
|
||||
Release: 10%{?prerelease}%{?dist}
|
||||
Release: 11%{?prerelease}%{?dist}
|
||||
Epoch: 1
|
||||
License: LGPLv2+
|
||||
%global realname blivet
|
||||
@ -48,6 +48,8 @@ Patch14: 0015-Add-support-for-filesystem-online-resize.patch
|
||||
Patch15: 0016-Backport-iSCSI-initiator-name-related-fixes.patch
|
||||
Patch16: 0017-nvme-additional-rpms-for-dracut.patch
|
||||
Patch17: 0018-nvme-TP4126-fixes-1.patch
|
||||
Patch18: 0019-nvme-hostnqn_from_active_fabrics_connection.patch
|
||||
Patch19: 0020-nvme-add_unit_tests.patch
|
||||
|
||||
# Versions of required components (done so we make sure the buildrequires
|
||||
# match the requires versions of things).
|
||||
@ -211,6 +213,10 @@ configuration.
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Dec 11 2023 Tomas Bzatek <tbzatek@redhat.com> - 3.6.0-11
|
||||
- nvme: Retrieve HostNQN from a first active fabrics connection
|
||||
- tests: Add a simple unit test for the NVMe module
|
||||
Resolves: RHEL-11541
|
||||
|
||||
* Tue Sep 26 2023 Tomas Bzatek <tbzatek@redhat.com> - 3.6.0-10
|
||||
- nvme: Require additional rpms for dracut
|
||||
|
Loading…
Reference in New Issue
Block a user