[pve-devel] [PATCH storage v2 1/3] refactor disk/storage checks for Disk API

Dominik Csapak d.csapak at proxmox.com
Tue Sep 25 10:38:00 CEST 2018


Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
changes from v1:
* new in v2
* only refactors the checks according to thomas feedback

 PVE/API2/Disks/Directory.pm |  9 ++-------
 PVE/API2/Disks/LVM.pm       |  2 +-
 PVE/API2/Disks/LVMThin.pm   |  9 ++-------
 PVE/API2/Disks/ZFS.pm       |  8 ++------
 PVE/Diskmanage.pm           |  8 ++++++++
 PVE/Storage.pm              | 12 ++++++++++++
 6 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/PVE/API2/Disks/Directory.pm b/PVE/API2/Disks/Directory.pm
index 9d27762..f076ee7 100644
--- a/PVE/API2/Disks/Directory.pm
+++ b/PVE/API2/Disks/Directory.pm
@@ -201,13 +201,8 @@ __PACKAGE__->register_method ({
 	my $type = $param->{filesystem} // 'ext4';
 
 	$dev = PVE::Diskmanage::verify_blockdev_path($dev);
-	die "device $dev is already in use\n" if PVE::Diskmanage::disk_is_used($dev);
-
-	my $cfg = PVE::Storage::config();
-
-	if (my $scfg = PVE::Storage::storage_config($cfg, $name, 1)) {
-	    die "storage ID '$name' already defined\n";
-	}
+	PVE::Diskmanage::check_unused($dev);
+	PVE::Storage::check_available($name);
 
 	my $worker = sub {
 	    my $path = "/mnt/pve/$name";
diff --git a/PVE/API2/Disks/LVM.pm b/PVE/API2/Disks/LVM.pm
index 19fba07..009ee0d 100644
--- a/PVE/API2/Disks/LVM.pm
+++ b/PVE/API2/Disks/LVM.pm
@@ -149,7 +149,7 @@ __PACKAGE__->register_method ({
 	my $node = $param->{node};
 
 	$dev = PVE::Diskmanage::verify_blockdev_path($dev);
-	die "device $dev is already in use\n" if PVE::Diskmanage::disk_is_used($dev);
+	PVE::Diskmanage::check_unused($dev);
 
 	my $worker = sub {
 	    PVE::Diskmanage::locked_disk_action(sub {
diff --git a/PVE/API2/Disks/LVMThin.pm b/PVE/API2/Disks/LVMThin.pm
index 5b72c8c..62d3b61 100644
--- a/PVE/API2/Disks/LVMThin.pm
+++ b/PVE/API2/Disks/LVMThin.pm
@@ -103,13 +103,8 @@ __PACKAGE__->register_method ({
 	my $node = $param->{node};
 
 	$dev = PVE::Diskmanage::verify_blockdev_path($dev);
-	die "device $dev is already in use\n" if PVE::Diskmanage::disk_is_used($dev);
-
-	my $cfg = PVE::Storage::config();
-
-	if (my $scfg = PVE::Storage::storage_config($cfg, $name, 1)) {
-	    die "storage ID '$name' already defined\n";
-	}
+	PVE::Diskmanage::check_unused($dev);
+	PVE::Storage::check_available($name);
 
 	my $worker = sub {
 	    PVE::Diskmanage::locked_disk_action(sub {
diff --git a/PVE/API2/Disks/ZFS.pm b/PVE/API2/Disks/ZFS.pm
index 3c36ef9..19ccedf 100644
--- a/PVE/API2/Disks/ZFS.pm
+++ b/PVE/API2/Disks/ZFS.pm
@@ -341,14 +341,10 @@ __PACKAGE__->register_method ({
 
 	foreach my $dev (@$devs) {
 	    $dev = PVE::Diskmanage::verify_blockdev_path($dev);
-	    die "device $dev is already in use\n" if PVE::Diskmanage::disk_is_used($dev);
+	    PVE::Diskmanage::check_unused($dev);
 	}
 
-	my $cfg = PVE::Storage::config();
-
-	if (my $scfg = PVE::Storage::storage_config($cfg, $name, 1)) {
-	    die "storage ID '$name' already defined\n";
-	}
+	PVE::Storage::check_available($name);
 
 	my $numdisks = scalar(@$devs);
 	my $mindisks = {
diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm
index 1938fa8..5a5fc87 100644
--- a/PVE/Diskmanage.pm
+++ b/PVE/Diskmanage.pm
@@ -602,4 +602,12 @@ sub locked_disk_action {
     return $res;
 }
 
+sub check_unused {
+    my ($dev) = @_;
+
+    die "device $dev is already in use\n" if disk_is_used($dev);
+
+    return undef;
+}
+
 1;
diff --git a/PVE/Storage.pm b/PVE/Storage.pm
index f9732fe..81f9b67 100755
--- a/PVE/Storage.pm
+++ b/PVE/Storage.pm
@@ -1647,4 +1647,16 @@ sub get_bandwidth_limit {
     return $override;
 }
 
+# checks if the storage id is available and dies if not
+sub check_available {
+    my ($id) = @_;
+
+    my $cfg = config();
+    if (my $scfg = storage_config($cfg, $id, 1)) {
+	die "storage ID '$id' already defined\n";
+    }
+
+    return undef;
+}
+
 1;
-- 
2.11.0




More information about the pve-devel mailing list