[pve-devel] [PATCH storage 1/2] add tagged_only option to LVM storage

Fabian Grünbichler f.gruenbichler at proxmox.com
Tue Jun 21 15:13:45 CEST 2016


to filter volumes by the 'pve-vm-ID' tag, which is set on
all volumes created via the PVE storage layer.
---
Note: this should fix setups like that described in
https://forum.proxmox.com/threads/unable-to-migrate-virtual-machines-on-drbd-storage.27757/#post-140699

 PVE/Storage/LVMPlugin.pm | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/PVE/Storage/LVMPlugin.pm b/PVE/Storage/LVMPlugin.pm
index d776e43..673d1cc 100644
--- a/PVE/Storage/LVMPlugin.pm
+++ b/PVE/Storage/LVMPlugin.pm
@@ -140,6 +140,7 @@ sub lvm_list_volumes {
 	    lv_type => $lv_type,
 	};
 	$d->{pool_lv} = $pool_lv if $pool_lv;
+	$d->{tags} = $tags if $tags;
 
 	if ($lv_type eq 't') {
 	    $data_percent ||= 0;
@@ -183,6 +184,10 @@ sub properties {
 	    description => "Wipe throughput (cstream -t parameter value).",
 	    type => 'string',
 	},
+	tagged_only => {
+	    description => "Only use logical volumes tagged with 'pve-vm-ID'.",
+	    type => 'boolean',
+	}
     };
 }
 
@@ -196,6 +201,7 @@ sub options {
         saferemove_throughput => { optional => 1 },
 	content => { optional => 1 },
         base => { fixed => 1, optional => 1 },
+	tagged_only => { optional => 1 },
     };
 }
 
@@ -339,6 +345,12 @@ sub free_image {
     return undef;
 }
 
+my $check_tags = sub {
+    my ($tags) = @_;
+
+    return defined($tags) && $tags =~ /(^|,)pve-vm-\d+(,|$)/;
+};
+
 sub list_images {
     my ($class, $storeid, $scfg, $vmid, $vollist, $cache) = @_;
 
@@ -357,6 +369,8 @@ sub list_images {
 
 	    my $info = $dat->{$volname};
 
+	    next if $scfg->{tagged_only} && !&$check_tags($info->{tags});
+
 	    next if $info->{lv_type} ne '-';
 
 	    my $volid = "$storeid:$volname";
-- 
2.1.4





More information about the pve-devel mailing list