[PATCH 2/4] Keep lvm and md metadata separate from udev info.
David Lehman
dlehman at redhat.com
Mon Aug 4 15:15:22 UTC 2014
We can't inject data into pyudev.Device instances like we could when
the udev db entries were plain dicts.
---
blivet/devicetree.py | 39 +++++++++++++++++++++------------------
1 file changed, 21 insertions(+), 18 deletions(-)
diff --git a/blivet/devicetree.py b/blivet/devicetree.py
index 755f782..e4ce79b 100644
--- a/blivet/devicetree.py
+++ b/blivet/devicetree.py
@@ -1519,11 +1519,13 @@ class DeviceTree(object):
lv_dev.logSize, lv_dev.vgSpaceUsed)
def handleUdevLVMPVFormat(self, info, device):
+ # pylint: disable=unused-argument
log_method_call(self, name=device.name, type=device.format.type)
+ pv_info = self.pvInfo.get(device.path, {})
# lookup/create the VG and LVs
try:
- vg_name = udev.device_get_vg_name(info)
- vg_uuid = udev.device_get_vg_uuid(info)
+ vg_name = udev.device_get_vg_name(pv_info)
+ vg_uuid = udev.device_get_vg_uuid(pv_info)
except KeyError:
# no vg name means no vg -- we're done with this pv
return
@@ -1537,12 +1539,12 @@ class DeviceTree(object):
vg_device.parents.append(device)
else:
try:
- vg_size = udev.device_get_vg_size(info)
- vg_free = udev.device_get_vg_free(info)
- pe_size = udev.device_get_vg_extent_size(info)
- pe_count = udev.device_get_vg_extent_count(info)
- pe_free = udev.device_get_vg_free_extents(info)
- pv_count = udev.device_get_vg_pv_count(info)
+ vg_size = udev.device_get_vg_size(pv_info)
+ vg_free = udev.device_get_vg_free(pv_info)
+ pe_size = udev.device_get_vg_extent_size(pv_info)
+ pe_count = udev.device_get_vg_extent_count(pv_info)
+ pe_free = udev.device_get_vg_free_extents(pv_info)
+ pv_count = udev.device_get_vg_pv_count(pv_info)
except (KeyError, ValueError) as e:
log.warning("invalid data for %s: %s", device.name, e)
return
@@ -1562,8 +1564,9 @@ class DeviceTree(object):
self.handleVgLvs(vg_device)
def handleUdevMDMemberFormat(self, info, device):
+ # pylint: disable=unused-argument
log_method_call(self, name=device.name, type=device.format.type)
-
+ md_info = mdraid.mdexamine(device.path)
md_array = self.getDeviceByUuid(device.format.mdUuid, incomplete=True)
if device.format.mdUuid and md_array:
md_array.parents.append(device)
@@ -1571,9 +1574,9 @@ class DeviceTree(object):
# create the array with just this one member
try:
# level is reported as, eg: "raid1"
- md_level = udev.device_get_md_level(info)
- md_devices = udev.device_get_md_devices(info)
- md_uuid = udev.device_get_md_uuid(info)
+ md_level = udev.device_get_md_level(md_info)
+ md_devices = udev.device_get_md_devices(md_info)
+ md_uuid = udev.device_get_md_uuid(md_info)
except (KeyError, ValueError) as e:
log.warning("invalid data for %s: %s", device.name, e)
return
@@ -1616,10 +1619,10 @@ class DeviceTree(object):
# mdexamine yields MD_METADATA only for metadata version > 0.90
# if MD_METADATA is missing, assume metadata version is 0.90
- md_metadata = md_metadata or udev.device_get_md_metadata(info) or "0.90"
+ md_metadata = md_metadata or udev.device_get_md_metadata(md_info) or "0.90"
if not md_name:
- md_path = info.get("DEVICE", "")
+ md_path = md_info.get("DEVICE", "")
if md_path:
md_name = devicePathToName(md_path)
if re.match(r'md\d+$', md_name):
@@ -1823,18 +1826,18 @@ class DeviceTree(object):
kwargs["biosraid"] = udev.device_is_biosraid_member(info)
elif format_type == "LVM2_member":
# lvm
- info.update(self.pvInfo.get(device.path, {}))
+ pv_info = self.pvInfo.get(device.path, {})
try:
- kwargs["vgName"] = udev.device_get_vg_name(info)
+ kwargs["vgName"] = udev.device_get_vg_name(pv_info)
except KeyError:
log.warning("PV %s has no vg_name", name)
try:
- kwargs["vgUuid"] = udev.device_get_vg_uuid(info)
+ kwargs["vgUuid"] = udev.device_get_vg_uuid(pv_info)
except KeyError:
log.warning("PV %s has no vg_uuid", name)
try:
- kwargs["peStart"] = udev.device_get_pv_pe_start(info)
+ kwargs["peStart"] = udev.device_get_pv_pe_start(pv_info)
except KeyError:
log.warning("PV %s has no pe_start", name)
elif format_type == "vfat":
--
1.9.3
More information about the anaconda-patches
mailing list