]> git.proxmox.com Git - pve-storage.git/commitdiff
Diskmanage: refactor and rename get_parttype_info
authorFabian Ebner <f.ebner@proxmox.com>
Tue, 26 Jan 2021 11:45:19 +0000 (12:45 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Sat, 6 Feb 2021 12:52:20 +0000 (13:52 +0100)
in preparation to also query the file system type from lsblk. Note that the
result now also includes devices without a parttype, so a definedness check in
get_devices_by_partuuid is needed. This will be useful when the whole device
contains a filesystem.

Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
PVE/Diskmanage.pm

index 5066232390a848306d3729ff23b0654e376cd4d4..655a4b2ebd62a62de763bff25d067ed81cb522af 100644 (file)
@@ -156,7 +156,7 @@ sub get_smart_data {
     return $smartdata;
 }
 
-sub get_parttype_info() {
+sub get_lsblk_info() {
     my $cmd = [$LSBLK, '--json', '-o', 'path,parttype'];
     my $output = "";
     my $res = {};
@@ -173,30 +173,29 @@ sub get_parttype_info() {
     warn "$@\n" if $@;
     my $list = $parsed->{blockdevices} // [];
 
-    foreach my $dev (@$list) {
-       next if !($dev->{parttype});
-       my $type = $dev->{parttype};
-       $res->{$type} = [] if !defined($res->{$type});
-       push @{$res->{$type}}, $dev->{path};
-    }
+    $res = { map {
+       $_->{path} => { parttype => $_->{parttype} }
+    } @{$list} };
 
     return $res;
 }
 
 my $get_devices_by_partuuid = sub {
-    my ($parttype_map, $uuids, $res) = @_;
+    my ($lsblk_info, $uuids, $res) = @_;
 
     $res = {} if !defined($res);
 
-    foreach my $uuid (sort keys %$uuids) {
-       map { $res->{$_} = $uuids->{$uuid} } @{$parttype_map->{$uuid}};
+    foreach my $dev (sort keys %{$lsblk_info}) {
+       my $uuid = $lsblk_info->{$dev}->{parttype};
+       next if !defined($uuid) || !defined($uuids->{$uuid});
+       $res->{$dev} = $uuids->{$uuid};
     }
 
     return $res;
 };
 
 sub get_zfs_devices {
-    my ($parttype_map) = @_;
+    my ($lsblk_info) = @_;
     my $res = {};
 
     return {} if ! -x $ZPOOL;
@@ -224,13 +223,13 @@ sub get_zfs_devices {
     };
 
 
-    $res = $get_devices_by_partuuid->($parttype_map, $uuids, $res);
+    $res = $get_devices_by_partuuid->($lsblk_info, $uuids, $res);
 
     return $res;
 }
 
 sub get_lvm_devices {
-    my ($parttype_map) = @_;
+    my ($lsblk_info) = @_;
     my $res = {};
     eval {
        run_command([$PVS, '--noheadings', '--readonly', '-o', 'pv_name'], outfunc => sub{
@@ -250,13 +249,13 @@ sub get_lvm_devices {
        "e6d6d379-f507-44c2-a23c-238f2a3df928" => 1,
     };
 
-    $res = $get_devices_by_partuuid->($parttype_map, $uuids, $res);
+    $res = $get_devices_by_partuuid->($lsblk_info, $uuids, $res);
 
     return $res;
 }
 
 sub get_ceph_journals {
-    my ($parttype_map) = @_;
+    my ($lsblk_info) = @_;
     my $res = {};
 
     my $uuids = {
@@ -266,7 +265,7 @@ sub get_ceph_journals {
        'cafecafe-9b03-4f30-b4c6-b4b80ceff106' => 4, # block
     };
 
-    $res = $get_devices_by_partuuid->($parttype_map, $uuids, $res);
+    $res = $get_devices_by_partuuid->($lsblk_info, $uuids, $res);
 
     return $res;
 }
@@ -479,14 +478,14 @@ sub get_disks {
        $mounted->{abs_path($mount->[0])} = $mount->[1];
     };
 
-    my $parttype_map = get_parttype_info();
+    my $lsblk_info = get_lsblk_info();
 
-    my $journalhash = get_ceph_journals($parttype_map);
+    my $journalhash = get_ceph_journals($lsblk_info);
     my $ceph_volume_infos = get_ceph_volume_infos();
 
-    my $zfshash = get_zfs_devices($parttype_map);
+    my $zfshash = get_zfs_devices($lsblk_info);
 
-    my $lvmhash = get_lvm_devices($parttype_map);
+    my $lvmhash = get_lvm_devices($lsblk_info);
 
     my $disk_regex = ".*";
     if (defined($disks)) {