my $res = [];
foreach my $ct (@$cts) {
my $data;
- if ($ct eq 'images') {
+ if ($ct eq 'images' || defined($param->{vmid})) {
$data = PVE::Storage::vdisk_list ($cfg, $storeid, $param->{vmid});
} elsif ($ct eq 'iso') {
- $data = PVE::Storage::template_list ($cfg, $storeid, 'iso')
- if !$param->{vmid};
+ $data = PVE::Storage::template_list ($cfg, $storeid, 'iso');
} elsif ($ct eq 'vztmpl') {
- $data = PVE::Storage::template_list ($cfg, $storeid, 'vztmpl')
- if !$param->{vmid};
+ $data = PVE::Storage::template_list ($cfg, $storeid, 'vztmpl');
} elsif ($ct eq 'backup') {
- $data = PVE::Storage::template_list ($cfg, $storeid, 'backup')
- if !$param->{vmid};
+ $data = PVE::Storage::template_list ($cfg, $storeid, 'backup');
}
next if !$data || !$data->{$storeid};
}
}
- # no backup to local storage
- if ($storeid && $storeid eq 'local' && $res->{backup}) {
- return undef if $noerr;
- die "storage 'local' does not support backups\n";
- }
-
return $res;
} elsif ($ct eq 'volume') {
return $value if parse_volume_id ($value, $noerr);
return $tmpldir;
}
+sub get_backup_dir {
+ my ($cfg, $storeid) = @_;
+
+ my $dir = $cfg->{ids}->{$storeid}->{path};
+ $dir .= '/dump' if $storeid eq 'local';
+
+ return $dir;
+}
+
# iscsi utility functions
sub iscsi_session_list {
my $type = $ids->{$sid}->{type};
next if !($type eq 'dir' || $type eq 'nfs');
- my $imagedir = $ids->{$sid}->{path} . "/images";
- my $isodir = get_iso_dir ($cfg, $sid);
- my $tmpldir = get_vztmpl_dir ($cfg, $sid);
+ my $imagedir = get_image_dir($cfg, $sid);
+ my $isodir = get_iso_dir($cfg, $sid);
+ my $tmpldir = get_vztmpl_dir($cfg, $sid);
+ my $backupdir = get_backup_dir($cfg, $sid);
if ($path =~ m!^$imagedir/(\d+)/([^/\s]+)$!) {
my $vmid = $1;
} elsif ($path =~ m!^$tmpldir/([^/]+\.tar\.gz)$!) {
my $name = $1;
return ('vztmpl', "$sid:vztmpl/$name");
+ } elsif ($path =~ m!^$backupdir/([^/]+\.(tar|tgz))$!) {
+ my $name = $1;
+ return ('iso', "$sid:backup/$name");
}
}
my ($vtype, $name, $vmid) = parse_volname_dir ($volname);
$owner = $vmid;
- my $imagedir = get_image_dir ($cfg, $storeid, $vmid);
- my $isodir = get_iso_dir ($cfg, $storeid);
- my $tmpldir = get_vztmpl_dir ($cfg, $storeid);
+ my $imagedir = get_image_dir($cfg, $storeid, $vmid);
+ my $isodir = get_iso_dir($cfg, $storeid);
+ my $tmpldir = get_vztmpl_dir($cfg, $storeid);
+ my $backupdir = get_backup_dir($cfg, $storeid);
if ($vtype eq 'image') {
$path = "$imagedir/$name";
$path = "$isodir/$name";
} elsif ($vtype eq 'vztmpl') {
$path = "$tmpldir/$name";
+ } elsif ($vtype eq 'backup') {
+ $path = "$backupdir/$name";
} else {
die "should not be reached";
}
my $path;
if ($tt eq 'iso') {
- $path = get_iso_dir ($cfg, $sid);
+ $path = get_iso_dir($cfg, $sid);
} elsif ($tt eq 'vztmpl') {
- $path = get_vztmpl_dir ($cfg, $sid);
+ $path = get_vztmpl_dir($cfg, $sid);
} elsif ($tt eq 'backup') {
- $path = $scfg->{path};
+ $path = get_backup_dir($cfg, $sid);
} else {
die "unknown template type '$tt'\n";
}
"directory '$path' does not exist\n" if ! -d $path;
}
- my $imagedir = get_image_dir ($cfg, $storeid);
- my $isodir = get_iso_dir ($cfg, $storeid);
- my $tmpldir = get_vztmpl_dir ($cfg, $storeid);
+ my $imagedir = get_image_dir($cfg, $storeid);
+ my $isodir = get_iso_dir($cfg, $storeid);
+ my $tmpldir = get_vztmpl_dir($cfg, $storeid);
+ my $backupdir = get_backup_dir($cfg, $storeid);
if (defined($scfg->{content})) {
mkpath $imagedir if $scfg->{content}->{images} &&
$isodir ne $path;
mkpath $tmpldir if $scfg->{content}->{vztmpl} &&
$tmpldir ne $path;
+ mkpath $backupdir if $scfg->{content}->{backup} &&
+ $backupdir ne $path;
}
} elsif ($type eq 'lvm') {