my $path = PVE::QemuServer::vnc_socket($vmid);
+ my $c;
+ while ( ++$c < 10 && !-e $path ) { sleep(1); }
+
my $s = IO::Socket::UNIX->new(Peer => $path, Timeout => 120);
die "unable to connect to socket '$path' - $!" if !$s;
code => sub {
my ($param) = @_;
- my $cfg = PVE::Cluster::cfs_read_file("storage.cfg");
-
- my $info = PVE::Storage::vdisk_list($cfg, undef, $param->{vmid});
-
- my $volid_hash = {};
- foreach my $storeid (keys %$info) {
- foreach my $item (@{$info->{$storeid}}) {
- next if !($item->{volid} && $item->{size});
- $volid_hash->{$item->{volid}} = $item;
- }
- }
-
- my $updatefn = sub {
- my ($vmid) = @_;
-
- my $conf = PVE::QemuServer::load_config($vmid);
-
- PVE::QemuServer::check_lock($conf);
-
- my $changes;
-
- my $used = {};
-
- # update size info
- foreach my $opt (keys %$conf) {
- if (PVE::QemuServer::valid_drivename($opt)) {
- my $drive = PVE::QemuServer::parse_drive($opt, $conf->{$opt});
- my $volid = $drive->{file};
- next if !$volid;
-
- $used->{$volid} = 1;
-
- next if PVE::QemuServer::drive_is_cdrom($drive);
- next if !$volid_hash->{$volid};
-
- $drive->{size} = $volid_hash->{$volid}->{size};
- $changes = 1;
- $conf->{$opt} = PVE::QemuServer::print_drive($vmid, $drive);
- }
- }
-
- # add unused volumes
- foreach my $storeid (keys %$info) {
- foreach my $item (@{$info->{$storeid}}) {
- next if !($item->{volid} && $item->{vmid});
- next if $item->{vmid} ne $vmid;
- next if $used->{$item->{volid}};
- $changes = 1;
- PVE::QemuServer::add_unused_volume($conf, $item->{volid});
- }
- }
-
- PVE::QemuServer::update_config_nolock($vmid, $conf, 1) if $changes;
- };
-
- if (defined($param->{vmid})) {
- PVE::QemuServer::lock_config($param->{vmid}, $updatefn, $param->{vmid});
- } else {
- my $vmlist = PVE::QemuServer::config_list();
- foreach my $vmid (keys %$vmlist) {
- PVE::QemuServer::lock_config($vmid, $updatefn, $vmid);
- }
- }
+ PVE::QemuServer::rescan($param->{vmid});
return undef;
}});
destroy => [ "PVE::API2::Qemu", 'destroy_vm', ['vmid'], { node => $nodename }, $upid_exit ],
+ clone => [ "PVE::API2::Qemu", 'clone_vm', ['vmid', 'newid'], { node => $nodename }, $upid_exit ],
+
migrate => [ "PVE::API2::Qemu", 'migrate_vm', ['vmid', 'target'], { node => $nodename }, $upid_exit ],
set => [ "PVE::API2::Qemu", 'update_vm', ['vmid'], { node => $nodename } ],
resize => [ "PVE::API2::Qemu", 'resize_vm', ['vmid', 'disk', 'size'], { node => $nodename } ],
+ move_disk => [ "PVE::API2::Qemu", 'move_vm_disk', ['vmid', 'disk', 'storage'], { node => $nodename }, $upid_exit ],
+
unlink => [ "PVE::API2::Qemu", 'unlink', ['vmid', 'idlist'], { node => $nodename } ],
config => [ "PVE::API2::Qemu", 'vm_config', ['vmid'],
rollback => [ "PVE::API2::Qemu", 'rollback', ['vmid', 'snapname'], { node => $nodename } , $upid_exit ],
+ template => [ "PVE::API2::Qemu", 'template', ['vmid'], { node => $nodename }],
+
start => [ "PVE::API2::Qemu", 'vm_start', ['vmid'], { node => $nodename } , $upid_exit ],
stop => [ "PVE::API2::Qemu", 'vm_stop', ['vmid'], { node => $nodename }, $upid_exit ],