refactor finding next diskname for all plugins

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
This commit is contained in:
Stoiko Ivanov
2018-09-07 15:08:42 +02:00
committed by Thomas Lamprecht
parent 59fa9fd6a3
commit c4a29df483
8 changed files with 34 additions and 113 deletions

View File

@ -569,23 +569,16 @@ sub get_next_vm_diskname {
}
my $find_free_diskname = sub {
my ($imgdir, $vmid, $fmt) = @_;
my ($imgdir, $vmid, $fmt, $scfg) = @_;
my $disk_ids = {};
PVE::Tools::dir_glob_foreach($imgdir,
qr!(vm|base)-$vmid-disk-(\d+)\..*!,
sub {
my ($fn, $type, $disk) = @_;
$disk_ids->{$disk} = 1;
});
my $disk_list = [];
for (my $i = 1; $i < 100; $i++) {
if (!$disk_ids->{$i}) {
return "vm-$vmid-disk-$i.$fmt";
}
if (defined(my $dh = IO::Dir->new($imgdir))) {
@$disk_list = $dh->read();
$dh->close();
}
die "unable to allocate a new image name for VM $vmid in '$imgdir'\n";
return get_next_vm_diskname($disk_list, $imgdir, $vmid, $fmt, $scfg, 1);
};
sub clone_image {
@ -610,7 +603,7 @@ sub clone_image {
mkpath $imagedir;
my $name = &$find_free_diskname($imagedir, $vmid, "qcow2");
my $name = $find_free_diskname->($imagedir, $vmid, "qcow2", $scfg);
warn "clone $volname: $vtype, $name, $vmid to $name (base=../$basevmid/$basename)\n";
@ -642,7 +635,7 @@ sub alloc_image {
mkpath $imagedir;
$name = &$find_free_diskname($imagedir, $vmid, $fmt) if !$name;
$name = $find_free_diskname->($imagedir, $vmid, $fmt, $scfg) if !$name;
my (undef, $tmpfmt) = parse_name_dir($name);