X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=PVE%2FStorage%2FISCSIDirectPlugin.pm;h=9777969b39e02ee03c44aca84da332b8bb56a316;hb=a1e09e496e6d34262d4209a0bb3ffe297fc98ebf;hp=3aa28b1e91fc64929741a80c07c8bf7197b80003;hpb=3a0c324642dc19dec83e22ea13ebb6836308629c;p=pve-storage.git diff --git a/PVE/Storage/ISCSIDirectPlugin.pm b/PVE/Storage/ISCSIDirectPlugin.pm index 3aa28b1..9777969 100644 --- a/PVE/Storage/ISCSIDirectPlugin.pm +++ b/PVE/Storage/ISCSIDirectPlugin.pm @@ -36,6 +36,7 @@ sub iscsi_ls { $list->{$storeid}->{$image} = { name => $image, size => $size * $unittobytes{$unit}, + format => 'raw', }; } }); @@ -56,7 +57,8 @@ sub type { sub plugindata { return { - content => [ {images => 1, none => 1}, { images => 1 }], + content => [ {images => 1, none => 1}, { images => 1 }], + select_existing => 1, }; } @@ -67,6 +69,7 @@ sub options { nodes => { optional => 1}, disable => { optional => 1}, content => { optional => 1}, + bwlimit => { optional => 1 }, }; } @@ -77,7 +80,7 @@ sub parse_volname { if ($volname =~ m/^lun(\d+)$/) { - return ('images', $1, undef); + return ('images', $1, undef, undef, undef, undef, 'raw'); } die "unable to parse iscsi volume name '$volname'\n"; @@ -85,7 +88,10 @@ sub parse_volname { } sub path { - my ($class, $scfg, $volname) = @_; + my ($class, $scfg, $volname, $storeid, $snapname) = @_; + + die "volume snapshot is not possible on iscsi device" + if defined($snapname); my ($vtype, $lun, $vmid) = $class->parse_volname($volname); @@ -97,6 +103,17 @@ sub path { return ($path, $vmid, $vtype); } +sub create_base { + my ($class, $storeid, $scfg, $volname) = @_; + + die "can't create base images in iscsi storage\n"; +} + +sub clone_image { + my ($class, $scfg, $storeid, $volname, $vmid, $snap) = @_; + + die "can't clone images in iscsi storage\n"; +} sub alloc_image { my ($class, $storeid, $scfg, $vmid, $fmt, $name, $size) = @_; @@ -105,7 +122,7 @@ sub alloc_image { } sub free_image { - my ($class, $storeid, $scfg, $volname) = @_; + my ($class, $storeid, $scfg, $volname, $isBase) = @_; die "can't free space in iscsi storage\n"; } @@ -170,18 +187,68 @@ sub deactivate_storage { } sub activate_volume { - my ($class, $storeid, $scfg, $volname, $exclusive, $cache) = @_; + my ($class, $storeid, $scfg, $volname, $snapname, $cache) = @_; + + die "volume snapshot is not possible on iscsi device" if $snapname; + return 1; } sub deactivate_volume { - my ($class, $storeid, $scfg, $volname, $exclusive, $cache) = @_; + my ($class, $storeid, $scfg, $volname, $snapname, $cache) = @_; + + die "volume snapshot is not possible on iscsi device" if $snapname; + return 1; } sub volume_size_info { my ($class, $scfg, $storeid, $volname, $timeout) = @_; + my $vollist = iscsi_ls($scfg,$storeid); + my $info = $vollist->{$storeid}->{$volname}; + + return $info->{size}; +} + +sub volume_resize { + my ($class, $scfg, $storeid, $volname, $size, $running) = @_; + die "volume resize is not possible on iscsi device"; +} + +sub volume_snapshot { + my ($class, $scfg, $storeid, $volname, $snap) = @_; + die "volume snapshot is not possible on iscsi device"; +} + +sub volume_snapshot_rollback { + my ($class, $scfg, $storeid, $volname, $snap) = @_; + die "volume snapshot rollback is not possible on iscsi device"; +} + +sub volume_snapshot_delete { + my ($class, $scfg, $storeid, $volname, $snap) = @_; + die "volume snapshot delete is not possible on iscsi device"; +} + +sub volume_has_feature { + my ($class, $scfg, $feature, $storeid, $volname, $snapname, $running) = @_; + + my $features = { + copy => { current => 1}, + }; + + my ($vtype, $name, $vmid, $basename, $basevmid, $isBase) = + $class->parse_volname($volname); + + my $key = undef; + if($snapname){ + $key = 'snap'; + }else{ + $key = $isBase ? 'base' : 'current'; + } + return 1 if $features->{$feature}->{$key}; + return undef; }