From 417feaf3df056b3f559d054f3769f11718b0acf0 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Mon, 13 Jul 2026 15:53:18 +0200 Subject: [PATCH] nvmetcli: store DHCHAP attributes The DHCHAP authentication is stored under hosts/, and are starting with 'dhchap_'. So add a 'dhchap' attribute group for the host object to correctly save and restore DHCHAP values. Signed-off-by: Hannes Reinecke Signed-off-by: Daniel Wagner --- nvmet/nvme.py | 5 ++++- nvmet/test_nvmet.py | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/nvmet/nvme.py b/nvmet/nvme.py index 5bc1485..5899c75 100644 --- a/nvmet/nvme.py +++ b/nvmet/nvme.py @@ -1144,6 +1144,7 @@ def __init__(self, nqn, mode='any'): ''' super().__init__() + self.attr_groups = ['dhchap'] self.nqn = nqn self._path = f"{self.configfs_dir}/hosts/{nqn}" self._create_in_cfs(mode) @@ -1161,11 +1162,13 @@ def setup(cls, t, err_func): return try: - Host(t['nqn']) + h = Host(t['nqn']) except CFSError as e: err_func(f"Could not create Host object: {e}") return + h._setup_attrs(t, err_func) + def dump(self): ''' Returns a dict with the config of the object. diff --git a/nvmet/test_nvmet.py b/nvmet/test_nvmet.py index 5c5e781..4fd1c4c 100644 --- a/nvmet/test_nvmet.py +++ b/nvmet/test_nvmet.py @@ -468,7 +468,8 @@ def test_save_restore(self): root = nvme.Root() root.clear_existing() - nvme.Host(nqn='hostnqn', mode='create') + h = nvme.Host(nqn='hostnqn', mode='create') + h.set_attr('dhchap', 'dhgroup', 'ffdhe2048') s = nvme.Subsystem(nqn='testnqn', mode='create') s.add_allowed_host(nqn='hostnqn') @@ -503,7 +504,7 @@ def test_save_restore(self): root.restore_from_file('test.json', True) # rebuild our view of the world - nvme.Host(nqn='hostnqn', mode='lookup') + h = nvme.Host(nqn='hostnqn', mode='lookup') s = nvme.Subsystem(nqn='testnqn', mode='lookup') s2 = nvme.Subsystem(nqn='testnqn2', mode='lookup') n = nvme.Namespace(s, nsid=42, mode='lookup') @@ -518,6 +519,7 @@ def test_save_restore(self): self.assertEqual(n.get_attr('device', 'path'), NVMET_TEST_DEVICES[0]) self.assertEqual(n.get_attr('device', 'nguid'), nguid) + self.assertEqual(h.get_attr('dhchap', 'dhgroup'), 'ffdhe2048') self.assertEqual(p.get_attr('addr', 'trtype'), 'loop') self.assertEqual(p.get_attr('addr', 'adrfam'), 'ipv4') self.assertEqual(p.get_attr('addr', 'traddr'), '192.168.0.1')