[pve-devel] [PATCH 03/31] rbd: add volume_protect
We use the rbd protect command to protect a snapshot. This is mandatory for clone a snapshot. The rbd volume need to be at format V2 Signed-off-by: Alexandre Derumier aderum...@odiso.com --- PVE/Storage/RBDPlugin.pm | 42 +- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm index 948be0d..b08fe54 100644 --- a/PVE/Storage/RBDPlugin.pm +++ b/PVE/Storage/RBDPlugin.pm @@ -21,7 +21,6 @@ my $rbd_cmd = sub { '--auth_supported', $scfg-{authsupported}, $op]; push @$cmd, @options if scalar(@options); - return $cmd; }; @@ -41,6 +40,7 @@ my $rados_cmd = sub { return $cmd; }; + sub rbd_ls { my ($scfg, $storeid) = @_; @@ -74,19 +74,32 @@ sub rbd_ls { } sub rbd_volume_info { -my ($scfg, $storeid, $volname) = @_; +my ($scfg, $storeid, $volname, $snap) = @_; + +my $cmd = undef; + +if($snap){ + $cmd = $rbd_cmd($scfg, $storeid, 'info', $volname, '--snap', $snap); +}else{ + $cmd = $rbd_cmd($scfg, $storeid, 'info', $volname); +} + -my $cmd = $rbd_cmd($scfg, $storeid, 'info', $volname); my $size = undef; my $parent = undef; +my $format = undef; +my $protected = undef; my $parser = sub { my $line = shift; - if ($line =~ m/size (\d+) MB in (\d+) objects/) { $size = $1; } elsif ($line =~ m/parent:\s(\S+)\/(\S+)/) { $parent = $2; + } elsif ($line =~ m/format:\s(\d+)/) { + $format = $1; + } elsif ($line =~ m/protected:\s(\S+)/) { + $protected = 1 if $1 eq True; } }; @@ -94,7 +107,7 @@ sub rbd_volume_info { $size = $size*1024*1024 if $size; -return ($size, $parent); +return ($size, $parent, $format, $protected); } sub addslashes { @@ -365,4 +378,23 @@ sub volume_has_feature { return undef; } +sub volume_protect { +my ($class, $scfg, $storeid, $volname, $snap, $read_only) = @_; + +return if !$snap; + +my (undef, undef, $format, $protected) = rbd_volume_info($scfg, $storeid, $volname, , $snap); + +die rbd image must be at format V2 if $format ne 2; + +my $action = $read_only ? protect:unprotect; + +if (($protected !$read_only) || (!$protected $read_only)){ +my $cmd = $rbd_cmd($scfg, $storeid, 'snap', $action, $volname, '--snap', $snap); +run_command($cmd, errmsg = rbd protect $volname snap $snap' error, errfunc = sub {}); +} +} + + + 1; -- 1.7.10.4 ___ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH 03/31] rbd: add volume_protect
We use the rbd protect command to protect a snapshot. This is mandatory for clone a snapshot. The rbd volume need to be at format V2 Signed-off-by: Alexandre Derumier aderum...@odiso.com --- PVE/Storage/RBDPlugin.pm | 42 +- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm index 948be0d..b08fe54 100644 --- a/PVE/Storage/RBDPlugin.pm +++ b/PVE/Storage/RBDPlugin.pm @@ -21,7 +21,6 @@ my $rbd_cmd = sub { '--auth_supported', $scfg-{authsupported}, $op]; push @$cmd, @options if scalar(@options); - return $cmd; }; @@ -41,6 +40,7 @@ my $rados_cmd = sub { return $cmd; }; + sub rbd_ls { my ($scfg, $storeid) = @_; @@ -74,19 +74,32 @@ sub rbd_ls { } sub rbd_volume_info { -my ($scfg, $storeid, $volname) = @_; +my ($scfg, $storeid, $volname, $snap) = @_; + +my $cmd = undef; + +if($snap){ + $cmd = $rbd_cmd($scfg, $storeid, 'info', $volname, '--snap', $snap); +}else{ + $cmd = $rbd_cmd($scfg, $storeid, 'info', $volname); +} + -my $cmd = $rbd_cmd($scfg, $storeid, 'info', $volname); my $size = undef; my $parent = undef; +my $format = undef; +my $protected = undef; my $parser = sub { my $line = shift; - if ($line =~ m/size (\d+) MB in (\d+) objects/) { $size = $1; } elsif ($line =~ m/parent:\s(\S+)\/(\S+)/) { $parent = $2; + } elsif ($line =~ m/format:\s(\d+)/) { + $format = $1; + } elsif ($line =~ m/protected:\s(\S+)/) { + $protected = 1 if $1 eq True; } }; @@ -94,7 +107,7 @@ sub rbd_volume_info { $size = $size*1024*1024 if $size; -return ($size, $parent); +return ($size, $parent, $format, $protected); } sub addslashes { @@ -365,4 +378,23 @@ sub volume_has_feature { return undef; } +sub volume_protect { +my ($class, $scfg, $storeid, $volname, $snap, $read_only) = @_; + +return if !$snap; + +my (undef, undef, $format, $protected) = rbd_volume_info($scfg, $storeid, $volname, , $snap); + +die rbd image must be at format V2 if $format ne 2; + +my $action = $read_only ? protect:unprotect; + +if (($protected !$read_only) || (!$protected $read_only)){ +my $cmd = $rbd_cmd($scfg, $storeid, 'snap', $action, $volname, '--snap', $snap); +run_command($cmd, errmsg = rbd protect $volname snap $snap' error, errfunc = sub {}); +} +} + + + 1; -- 1.7.10.4 ___ pve-devel mailing list pve-devel@pve.proxmox.com http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel