diff --git a/changelogs/fragments/70284-facts-get-nvme-serial-from-file.yml b/changelogs/fragments/70284-facts-get-nvme-serial-from-file.yml new file mode 100644 index 00000000000..9e89436c039 --- /dev/null +++ b/changelogs/fragments/70284-facts-get-nvme-serial-from-file.yml @@ -0,0 +1,2 @@ +bugfixes: + - Facts collection - get serial number of NVMe device without sg_inq (https://github.com/ansible/ansible/issues/66663). diff --git a/lib/ansible/module_utils/facts/hardware/linux.py b/lib/ansible/module_utils/facts/hardware/linux.py index 4aee9aa5a59..0829d495c98 100644 --- a/lib/ansible/module_utils/facts/hardware/linux.py +++ b/lib/ansible/module_utils/facts/hardware/linux.py @@ -700,6 +700,9 @@ class LinuxHardware(Hardware): sg_inq = self.module.get_bin_path('sg_inq') + # we can get NVMe device's serial number from /sys/block//device/serial + serial_path = "/sys/block/%s/device/serial" % (block) + if sg_inq: device = "/dev/%s" % (block) rc, drivedata, err = self.module.run_command([sg_inq, device]) @@ -707,6 +710,10 @@ class LinuxHardware(Hardware): serial = re.search(r"Unit serial number:\s+(\w+)", drivedata) if serial: d['serial'] = serial.group(1) + else: + serial = get_file_content(serial_path) + if serial: + d['serial'] = serial for key, test in [('removable', '/removable'), ('support_discard', '/queue/discard_granularity'),