mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-08-06 15:47:12 +00:00
clone: repeat more checks after locking
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
parent
3b53c47155
commit
4df8fe45b2
@ -3046,7 +3046,6 @@ __PACKAGE__->register_method({
|
|||||||
my $vmid = extract_param($param, 'vmid');
|
my $vmid = extract_param($param, 'vmid');
|
||||||
my $newid = extract_param($param, 'newid');
|
my $newid = extract_param($param, 'newid');
|
||||||
my $pool = extract_param($param, 'pool');
|
my $pool = extract_param($param, 'pool');
|
||||||
$rpcenv->check_pool_exist($pool) if defined($pool);
|
|
||||||
|
|
||||||
my $snapname = extract_param($param, 'snapname');
|
my $snapname = extract_param($param, 'snapname');
|
||||||
my $storage = extract_param($param, 'storage');
|
my $storage = extract_param($param, 'storage');
|
||||||
@ -3059,27 +3058,29 @@ __PACKAGE__->register_method({
|
|||||||
undef $target;
|
undef $target;
|
||||||
}
|
}
|
||||||
|
|
||||||
PVE::Cluster::check_node_exists($target) if $target;
|
|
||||||
|
|
||||||
my $storecfg = PVE::Storage::config();
|
|
||||||
|
|
||||||
if ($storage) {
|
|
||||||
# check if storage is enabled on local node
|
|
||||||
PVE::Storage::storage_check_enabled($storecfg, $storage);
|
|
||||||
if ($target) {
|
|
||||||
# check if storage is available on target node
|
|
||||||
PVE::Storage::storage_check_enabled($storecfg, $storage, $target);
|
|
||||||
# clone only works if target storage is shared
|
|
||||||
my $scfg = PVE::Storage::storage_config($storecfg, $storage);
|
|
||||||
die "can't clone to non-shared storage '$storage'\n" if !$scfg->{shared};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PVE::Cluster::check_cfs_quorum();
|
|
||||||
|
|
||||||
my $running = PVE::QemuServer::check_running($vmid) || 0;
|
my $running = PVE::QemuServer::check_running($vmid) || 0;
|
||||||
|
|
||||||
my $load_and_check = sub {
|
my $load_and_check = sub {
|
||||||
|
$rpcenv->check_pool_exist($pool) if defined($pool);
|
||||||
|
PVE::Cluster::check_node_exists($target) if $target;
|
||||||
|
|
||||||
|
my $storecfg = PVE::Storage::config();
|
||||||
|
|
||||||
|
if ($storage) {
|
||||||
|
# check if storage is enabled on local node
|
||||||
|
PVE::Storage::storage_check_enabled($storecfg, $storage);
|
||||||
|
if ($target) {
|
||||||
|
# check if storage is available on target node
|
||||||
|
PVE::Storage::storage_check_enabled($storecfg, $storage, $target);
|
||||||
|
# clone only works if target storage is shared
|
||||||
|
my $scfg = PVE::Storage::storage_config($storecfg, $storage);
|
||||||
|
die "can't clone to non-shared storage '$storage'\n"
|
||||||
|
if !$scfg->{shared};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PVE::Cluster::check_cfs_quorum();
|
||||||
|
|
||||||
my $conf = PVE::QemuConfig->load_config($vmid);
|
my $conf = PVE::QemuConfig->load_config($vmid);
|
||||||
PVE::QemuConfig->check_lock($conf);
|
PVE::QemuConfig->check_lock($conf);
|
||||||
|
|
||||||
@ -3159,6 +3160,7 @@ __PACKAGE__->register_method({
|
|||||||
|
|
||||||
my $clonefn = sub {
|
my $clonefn = sub {
|
||||||
my ($conffile, $newconf, $oldconf, $vollist, $drives, $fullclone) = $load_and_check->();
|
my ($conffile, $newconf, $oldconf, $vollist, $drives, $fullclone) = $load_and_check->();
|
||||||
|
my $storecfg = PVE::Storage::config();
|
||||||
|
|
||||||
# auto generate a new uuid
|
# auto generate a new uuid
|
||||||
my $smbios1 = PVE::QemuServer::parse_smbios1($newconf->{smbios1} || '');
|
my $smbios1 = PVE::QemuServer::parse_smbios1($newconf->{smbios1} || '');
|
||||||
|
Loading…
Reference in New Issue
Block a user