[pve-devel] [PATCH storage v3 1/3] add new content type 'snippets'
Dominik Csapak
d.csapak at proxmox.com
Tue Jan 29 16:28:38 CET 2019
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 at proxmox.com>
---
chnages from v2:
* change scripts to snippets
* remove executable check
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..fc7a2ea 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 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 {
diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm
index 7dbb41d..c641981 100644
--- a/PVE/Storage/Plugin.pm
+++ b/PVE/Storage/Plugin.pm
@@ -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 {
--
2.11.0
More information about the pve-devel
mailing list