]> git.proxmox.com Git - pve-storage.git/commitdiff
add new content type 'snippets'
authorDominik Csapak <d.csapak@proxmox.com>
Tue, 29 Jan 2019 15:28:38 +0000 (16:28 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 31 Jan 2019 10:04:29 +0000 (11:04 +0100)
will be used to contain files which can be executed as hookscripts or
contain custom cloud-init configs

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
PVE/Storage.pm
PVE/Storage/Plugin.pm

index 89a6c714cbbaeff78d2717597e0db9e8b44b700e..fc7a2ea80813210838ac6fe9b8eae9bce8d11ae7 100755 (executable)
@@ -772,6 +772,48 @@ sub vdisk_free {
     $rpcenv->fork_worker('imgdel', undef, $authuser, $cleanup_worker);
 }
 
+# lists all files in the snippets directory
+sub snippets_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}->{snippets};
+
+       activate_storage($cfg, $sid);
+
+       if ($scfg->{path}) {
+           my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
+           my $path = $plugin->get_subdir($scfg, 'snippets');
+
+           foreach my $fn (<$path/*>) {
+               next if -d $fn;
+
+               push @{$res->{$sid}}, {
+                   volid => "$sid:snippets/". basename($fn),
+                   format => 'snippet',
+                   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 snippets);
 
     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 'snippets') {
+           $data = snippets_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 snippets)];
 }
 
 sub complete_volume {
index 7dbb41dcadcdf0c5d03db7e02eee6cae750a67ca..c641981f3daad515100f7cec3ebc671bcd83e1b3 100644 (file)
@@ -428,6 +428,8 @@ sub parse_volname {
            return ('backup', $fn, $2);
        }
        return ('backup', $fn);
+    } elsif ($volname =~ m!^snippets/([^/]+)$!) {
+       return ('snippets', $1);
     }
 
     die "unable to parse directory volume name '$volname'\n";
@@ -439,6 +441,7 @@ my $vtype_subdirs = {
     iso => 'template/iso',
     vztmpl => 'template/cache',
     backup => 'dump',
+    snippets => 'snippets',
 };
 
 sub get_subdir {