will be used to contain executable files which can be executed as hookscripts
Signed-off-by: Dominik Csapak <[email protected]> --- changes from v1: * less empty lines * do not use lc for sorting * some reordered checks * removal of unused/unnecessary variables PVE/Storage.pm | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- PVE/Storage/Plugin.pm | 3 +++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/PVE/Storage.pm b/PVE/Storage.pm index 89a6c71..7d0e0f1 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -772,6 +772,48 @@ sub vdisk_free { $rpcenv->fork_worker('imgdel', undef, $authuser, $cleanup_worker); } +# lists all files in the scripts directory which are exectuable +sub script_list { + my ($cfg, $storeid) = @_; + + my $ids = $cfg->{ids}; + + storage_check_enabled($cfg, $storeid) if ($storeid); + + my $res = {}; + + foreach my $sid (keys %$ids) { + next if $storeid && $storeid ne $sid; + next if !storage_check_enabled($cfg, $sid, undef, 1); + + my $scfg = $ids->{$sid}; + next if !$scfg->{content}->{scripts}; + + activate_storage($cfg, $sid); + + if ($scfg->{path}) { + my $plugin = PVE::Storage::Plugin->lookup($scfg->{type}); + my $path = $plugin->get_subdir($scfg, 'scripts'); + + foreach my $fn (<$path/*>) { + next if -d $fn || ! -x $fn; + + push @{$res->{$sid}}, { + volid => "$sid:scripts/". basename($fn), + format => 'script', + size => -s $fn, + }; + } + } + + if ($res->{$sid}) { + @{$res->{$sid}} = sort {$a->{volid} cmp $b->{volid} } @{$res->{$sid}}; + } + } + + return $res; +} + #list iso or openvz template ($tt = <iso|vztmpl|backup>) sub template_list { my ($cfg, $storeid, $tt) = @_; @@ -887,7 +929,7 @@ sub vdisk_list { sub volume_list { my ($cfg, $storeid, $vmid, $content) = @_; - my @ctypes = qw(images vztmpl iso backup); + my @ctypes = qw(images vztmpl iso backup scripts); my $cts = $content ? [ $content ] : [ @ctypes ]; @@ -909,6 +951,8 @@ sub volume_list { @{$data->{$storeid}} = grep { $_->{volid} =~ m/\S+-$vmid-\S+/ } @{$data->{$storeid}}; } } + } elsif ($ct eq 'scripts') { + $data = script_list($cfg, $storeid); } next if !$data || !$data->{$storeid}; @@ -1518,7 +1562,7 @@ sub complete_storage_enabled { sub complete_content_type { my ($cmdname, $pname, $cvalue) = @_; - return [qw(rootdir images vztmpl iso backup)]; + return [qw(rootdir images vztmpl iso backup scripts)]; } sub complete_volume { diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm index e0c2a4e..4990255 100644 --- a/PVE/Storage/Plugin.pm +++ b/PVE/Storage/Plugin.pm @@ -427,6 +427,8 @@ sub parse_volname { return ('backup', $fn, $2); } return ('backup', $fn); + } elsif ($volname =~ m!^scripts/([^/]+)$!) { + return ('scripts', $1); } die "unable to parse directory volume name '$volname'\n"; @@ -438,6 +440,7 @@ my $vtype_subdirs = { iso => 'template/iso', vztmpl => 'template/cache', backup => 'dump', + scripts => 'scripts', }; sub get_subdir { -- 2.11.0 _______________________________________________ pve-devel mailing list [email protected] https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
