Skip to content

Commit

Permalink
Merge branch '3.9-devel'
Browse files Browse the repository at this point in the history
  • Loading branch information
vojtechtrefny committed Dec 12, 2023
2 parents e521a7e + c55b3cc commit 9ed960a
Show file tree
Hide file tree
Showing 26 changed files with 351 additions and 528 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ To install these dependencies use following commands:
# dnf install python3-blockdev libblockdev-plugins-all python3-bytesize libbytesize python3-pyparted parted libselinux-python3
* On Debian and Ubuntu based distributions:

# apt-get install python3-blockdev python3-bytesize python3-parted python3-selinux gir1.2-blockdev-3.0 libblockdev-lvm3 libblockdev-btrfs3 libblockdev-swap3 libblockdev-loop3 libblockdev-crypto3 libblockdev-mpath3 libblockdev-dm3 libblockdev-mdraid3 libblockdev-nvdimm3 libblockdev-fs3
# apt-get install python3-blockdev python3-bytesize python3-parted python3-selinux gir1.2-blockdev-3.0 libblockdev-lvm3 libblockdev-btrfs3 libblockdev-swap3 libblockdev-loop3 libblockdev-crypto3 libblockdev-mpath3 libblockdev-dm3 libblockdev-mdraid3 libblockdev-fs3

### Development

Expand Down
4 changes: 2 additions & 2 deletions blivet/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,9 @@ def log_bd_message(level, msg):
from gi.repository import GLib
from gi.repository import BlockDev as blockdev
if arch.is_s390():
_REQUESTED_PLUGIN_NAMES = set(("lvm", "btrfs", "swap", "crypto", "loop", "mdraid", "mpath", "dm", "s390", "nvdimm", "nvme", "fs"))
_REQUESTED_PLUGIN_NAMES = set(("lvm", "btrfs", "swap", "crypto", "loop", "mdraid", "mpath", "dm", "s390", "nvme", "fs"))
else:
_REQUESTED_PLUGIN_NAMES = set(("lvm", "btrfs", "swap", "crypto", "loop", "mdraid", "mpath", "dm", "nvdimm", "nvme", "fs"))
_REQUESTED_PLUGIN_NAMES = set(("lvm", "btrfs", "swap", "crypto", "loop", "mdraid", "mpath", "dm", "nvme", "fs"))

_requested_plugins = blockdev.plugin_specs_from_names(_REQUESTED_PLUGIN_NAMES)
try:
Expand Down
2 changes: 1 addition & 1 deletion blivet/devices/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from .lib import device_path_to_name, device_name_to_disk_by_path, ParentList
from .device import Device
from .storage import StorageDevice
from .disk import DiskDevice, DiskFile, MultipathDevice, iScsiDiskDevice, FcoeDiskDevice, DASDDevice, ZFCPDiskDevice, NVDIMMNamespaceDevice, NVMeNamespaceDevice, NVMeFabricsNamespaceDevice
from .disk import DiskDevice, DiskFile, MultipathDevice, iScsiDiskDevice, FcoeDiskDevice, DASDDevice, ZFCPDiskDevice, NVMeNamespaceDevice, NVMeFabricsNamespaceDevice
from .partition import PartitionDevice
from .dm import DMDevice, DMLinearDevice, DMCryptDevice, DMIntegrityDevice, DM_MAJORS
from .luks import LUKSDevice, IntegrityDevice
Expand Down
11 changes: 10 additions & 1 deletion blivet/devices/btrfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import os
import copy
import tempfile
import uuid

import gi
gi.require_version("BlockDev", "3.0")
Expand Down Expand Up @@ -204,6 +205,9 @@ def __init__(self, *args, **kwargs):
self.subvolumes = []
self.size_policy = self.size

if not self.exists and not self.uuid:
self.uuid = str(uuid.uuid4())

if self.parents and not self.format.type:
label = getattr(self.parents[0].format, "label", None)
self.format = get_format("btrfs",
Expand Down Expand Up @@ -455,11 +459,16 @@ def _create(self):
md_level = str(self.metadata_level)
else:
md_level = None
if self.uuid:
extra = {"-U": self.uuid}
else:
extra = None
try:
blockdev.btrfs.create_volume([d.path for d in self.parents],
label=self.format.label,
data_level=data_level,
md_level=md_level)
md_level=md_level,
extra=extra)
except (blockdev.BtrfsError, blockdev.BlockDevNotImplementedError) as err:
raise errors.BTRFSError(err)

Expand Down
59 changes: 2 additions & 57 deletions blivet/devices/disk.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,10 +469,12 @@ def __init__(self, device, **kwargs):
:keyword hba_id: ???
:keyword wwpn: ???
:keyword fcp_lun: ???
:keyword id_path: string from udev-builtin-path_id
"""
self.hba_id = kwargs.pop("hba_id")
self.wwpn = kwargs.pop("wwpn")
self.fcp_lun = kwargs.pop("fcp_lun")
self.id_path = kwargs.pop("id_path")
DiskDevice.__init__(self, device, **kwargs)
self._clear_local_tags()
self.tags.add(Tags.remote)
Expand Down Expand Up @@ -586,63 +588,6 @@ def dracut_setup_args(self):
return set(["rd.dasd=%s" % self.busid])


class NVDIMMNamespaceDevice(DiskDevice):

""" Non-volatile memory namespace """
_type = "nvdimm"
_packages = ["ndctl"]

def __init__(self, device, **kwargs):
"""
:param name: the device name (generally a device node's basename)
:type name: str
:keyword exists: does this device exist?
:type exists: bool
:keyword size: the device's size
:type size: :class:`~.size.Size`
:keyword parents: a list of parent devices
:type parents: list of :class:`StorageDevice`
:keyword format: this device's formatting
:type format: :class:`~.formats.DeviceFormat` or a subclass of it
:keyword mode: mode of the namespace
:type mode: str
:keyword devname: name of the namespace (e.g. 'namespace0.0')
:type devname: str
:keyword sector_size: sector size of the namespace in sector mode
:type sector_size: str
"""
self.mode = kwargs.pop("mode")
self.devname = kwargs.pop("devname")
self.id_path = kwargs.pop("id_path")
self._sector_size = kwargs.pop("sector_size")

DiskDevice.__init__(self, device, **kwargs)

self._clear_local_tags()
self.tags.add(Tags.local)
self.tags.add(Tags.nvdimm)

def __repr__(self):
s = DiskDevice.__repr__(self)
s += (" mode = %(mode)s devname = %(devname)s" %
{"mode": self.mode,
"devname": self.devname})
if self.sector_size:
s += (" sector size = %(sector_size)s" % {"sector_size": self.sector_size})
return s

@property
def description(self):
return "NVDIMM namespace %(devname)s in %(mode)s mode exported as %(path)s" \
% {'devname': self.devname,
'mode': self.mode,
'path': self.path}

@property
def sector_size(self):
return self._sector_size


NVMeController = namedtuple("NVMeController", ["name", "serial", "nvme_ver", "id", "subsysnqn",
"transport", "transport_address"])

Expand Down
1 change: 0 additions & 1 deletion blivet/devices/lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
class Tags(str, Enum):
"""Tags that describe various classes of disk."""
local = 'local'
nvdimm = 'nvdimm'
nvme = 'nvme'
remote = 'remote'
removable = 'removable'
Expand Down
6 changes: 5 additions & 1 deletion blivet/devices/md.py
Original file line number Diff line number Diff line change
Expand Up @@ -634,6 +634,8 @@ def _remove(self, member):
blockdev.md.remove(self.path, member.path, fail)
except blockdev.MDRaidError as err:
raise errors.MDRaidError(err)
finally:
member.format.md_uuid = None

def _add(self, member):
""" Add a member device to an array.
Expand All @@ -644,7 +646,7 @@ def _add(self, member):
"""
self.setup()

raid_devices = None
raid_devices = 0
try:
if not self.level.has_redundancy():
if self.level is not raid.Linear:
Expand All @@ -656,6 +658,8 @@ def _add(self, member):
blockdev.md.add(self.path, member.path, raid_devs=raid_devices)
except blockdev.MDRaidError as err:
raise errors.MDRaidError(err)
finally:
member.format.md_uuid = self.uuid

@property
def format_args(self):
Expand Down
21 changes: 21 additions & 0 deletions blivet/nvme.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#

import os
import glob

from . import errors

Expand Down Expand Up @@ -54,13 +55,33 @@ 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

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")
Expand Down
2 changes: 1 addition & 1 deletion blivet/populator/helpers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from .btrfs import BTRFSFormatPopulator
from .boot import EFIFormatPopulator, MacEFIFormatPopulator
from .disk import DiskDevicePopulator, iScsiDevicePopulator, FCoEDevicePopulator, MDBiosRaidDevicePopulator, DASDDevicePopulator, ZFCPDevicePopulator, NVDIMMNamespaceDevicePopulator, NVMeNamespaceDevicePopulator, NVMeFabricsNamespaceDevicePopulator
from .disk import DiskDevicePopulator, iScsiDevicePopulator, FCoEDevicePopulator, MDBiosRaidDevicePopulator, DASDDevicePopulator, ZFCPDevicePopulator, NVMeNamespaceDevicePopulator, NVMeFabricsNamespaceDevicePopulator
from .disklabel import DiskLabelFormatPopulator
from .dm import DMDevicePopulator
from .loop import LoopDevicePopulator
Expand Down
29 changes: 2 additions & 27 deletions blivet/populator/helpers/disk.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
from ... import udev
from ... import util
from ...devices import DASDDevice, DiskDevice, FcoeDiskDevice, iScsiDiskDevice
from ...devices import MDBiosRaidArrayDevice, ZFCPDiskDevice, NVDIMMNamespaceDevice
from ...devices import MDBiosRaidArrayDevice, ZFCPDiskDevice
from ...devices import NVMeNamespaceDevice, NVMeFabricsNamespaceDevice
from ...devices import device_path_to_name
from ...storage_log import log_method_call
Expand Down Expand Up @@ -223,39 +223,14 @@ def match(cls, data):
def _get_kwargs(self):
kwargs = super(ZFCPDevicePopulator, self)._get_kwargs()

kwargs["id_path"] = udev.device_get_path(self.data)
for attr in ['hba_id', 'wwpn', 'fcp_lun']:
kwargs[attr] = udev.device_get_zfcp_attribute(self.data, attr=attr)

log.info("%s is a zfcp device", udev.device_get_name(self.data))
return kwargs


class NVDIMMNamespaceDevicePopulator(DiskDevicePopulator):
priority = 20

_device_class = NVDIMMNamespaceDevice

@classmethod
def match(cls, data):
return (super(NVDIMMNamespaceDevicePopulator, NVDIMMNamespaceDevicePopulator).match(data) and
udev.device_is_nvdimm_namespace(data))

def _get_kwargs(self):
kwargs = super(NVDIMMNamespaceDevicePopulator, self)._get_kwargs()

from ...static_data import nvdimm
ninfo = nvdimm.get_namespace_info(self.data.get("DEVNAME"))

kwargs["mode"] = blockdev.nvdimm_namespace_get_mode_str(ninfo.mode)
kwargs["devname"] = ninfo.dev
kwargs["uuid"] = ninfo.uuid
kwargs["sector_size"] = ninfo.sector_size
kwargs["id_path"] = udev.device_get_path(self.data)

log.info("%s is an NVDIMM namespace device", udev.device_get_name(self.data))
return kwargs


class NVMeNamespaceDevicePopulator(DiskDevicePopulator):
priority = 20

Expand Down
1 change: 0 additions & 1 deletion blivet/static_data/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from .lvm_info import lvs_info, pvs_info, vgs_info
from .luks_data import luks_data
from .mpath_info import mpath_members
from .nvdimm import nvdimm
from .stratis_info import stratis_info
Loading

0 comments on commit 9ed960a

Please sign in to comment.