$res->{$ds} = PVE::QemuServer::print_drive($vmid, $disk);
} else {
my $path = $rpcenv->check_volume_access($authuser, $storecfg, $vmid, $volid);
- PVE::Storage::activate_volumes($storecfg, [ $volid ]);
- die "image '$path' does not exists\n" if (!(-f $path || -b $path));
+ PVE::Storage::activate_volumes($storecfg, [ $volid ])
+ if PVE::Storage::parse_volume_id ($volid, 1);
+
+ my ($storeid, $volname) = PVE::Storage::parse_volume_id($volid);
+ my $dl = PVE::Storage::vdisk_list($storecfg, $storeid, undef);
+ my $foundvolid = undef;
+
+ PVE::Storage::foreach_volid($dl, sub {
+ my ($volumeid) = @_;
+ if($volumeid eq $volid) {
+ $foundvolid = 1;
+ return;
+ }
+ });
+
+ die "image '$path' does not exists\n" if (!(-f $path || -b $path || $foundvolid));
$res->{$ds} = $settings->{$ds};
}
});
if (defined($pool)) {
$rpcenv->check_pool_exist($pool);
- $rpcenv->check_perm_modify($authuser, "/pool/$pool");
}
$rpcenv->check($authuser, "/storage/$storage", ['Datastore.AllocateSpace'])
if ($archive eq '-') {
die "pipe requires cli environment\n"
- && $rpcenv->{type} ne 'cli';
+ if $rpcenv->{type} ne 'cli';
} else {
my $path = $rpcenv->check_volume_access($authuser, $storecfg, $vmid, $archive);
- PVE::Storage::activate_volumes($storecfg, [ $archive ]);
+
+ PVE::Storage::activate_volumes($storecfg, [ $archive ])
+ if PVE::Storage::parse_volume_id ($archive, 1);
+
die "can't find archive file '$archive'\n" if !($path && -f $path);
$archive = $path;
}
if (&$vm_is_volid_owner($storecfg, $vmid, $volid)) {
if ($force || $key =~ m/^unused/) {
eval { PVE::Storage::vdisk_free($storecfg, $volid); };
- warn $@ if $@;
+ die $@ if $@;
} else {
PVE::QemuServer::add_unused_volume($conf, $volid, $vmid);
}
&$vmconfig_delete_option($rpcenv, $authuser, $conf, $storecfg, $vmid, $opt, $force);
$conf = PVE::QemuServer::load_config($vmid); # update/reload
}
+
+ if($drive->{bps} != $old_drive->{bps} ||
+ $drive->{bps_rd} != $old_drive->{bps_rd} ||
+ $drive->{bps_wr} != $old_drive->{bps_wr} ||
+ $drive->{iops} != $old_drive->{iops} ||
+ $drive->{iops_rd} != $old_drive->{iops_rd} ||
+ $drive->{iops_wr} != $old_drive->{iops_wr} ) {
+ PVE::QemuServer::qemu_block_set_io_throttle($vmid,"drive-$opt",$drive->{bps}, $drive->{bps_rd}, $drive->{bps_wr}, $drive->{iops}, $drive->{iops_rd}, $drive->{iops_wr}) if !PVE::QemuServer::drive_is_cdrom($drive);
+ }
}
}
if (PVE::QemuServer::check_running($vmid)) {
if ($drive->{file} eq 'none') {
- PVE::QemuServer::vm_monitor_command($vmid, "eject -f drive-$opt", 0);
+ PVE::QemuServer::vm_mon_cmd($vmid, "eject",force => JSON::true,device => "drive-$opt");
} else {
my $path = PVE::QemuServer::get_iso_path($storecfg, $vmid, $drive->{file});
- PVE::QemuServer::vm_monitor_command($vmid, "eject -f drive-$opt", 0); #force eject if locked
- PVE::QemuServer::vm_monitor_command($vmid, "change drive-$opt \"$path\"", 0) if $path;
+ PVE::QemuServer::vm_mon_cmd($vmid, "eject",force => JSON::true,device => "drive-$opt"); #force eject if locked
+ PVE::QemuServer::vm_mon_cmd($vmid, "change",device => "drive-$opt",target => "$path") if $path;
}
}
my $delVMfromPoolFn = sub {
my $usercfg = cfs_read_file("user.cfg");
- my $pool = $usercfg->{vms}->{$vmid};
- if (my $data = $usercfg->{pools}->{$pool}) {
- delete $data->{vms}->{$vmid};
- delete $usercfg->{vms}->{$vmid};
- cfs_write_file("user.cfg", $usercfg);
+ if (my $pool = $usercfg->{vms}->{$vmid}) {
+ if (my $data = $usercfg->{pools}->{$pool}) {
+ delete $data->{vms}->{$vmid};
+ delete $usercfg->{vms}->{$vmid};
+ cfs_write_file("user.cfg", $usercfg);
+ }
}
};
# test if VM exists
my $conf = PVE::QemuServer::load_config($param->{vmid});
- my $vmstatus = PVE::QemuServer::vmstatus($param->{vmid});
+ my $vmstatus = PVE::QemuServer::vmstatus($param->{vmid}, 1);
my $status = $vmstatus->{$param->{vmid}};
$status->{ha} = &$vm_is_ha_managed($param->{vmid});
if !$param->{online};
}
+ my $storecfg = PVE::Storage::config();
+ PVE::QemuServer::check_storage_availability($storecfg, $conf, $target);
+
if (&$vm_is_ha_managed($vmid) && $rpcenv->{type} ne 'ha') {
my $hacmd = sub {
my $res = '';
eval {
- $res = PVE::QemuServer::vm_monitor_command($vmid, $param->{command});
+ $res = PVE::QemuServer::vm_human_monitor_command($vmid, $param->{command});
};
$res = "ERROR: $@" if $@;