diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index eba65b51..b8bd5dac 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -804,6 +804,12 @@ __PACKAGE__->register_method({ node => get_standard_option('pve-node'), vmid => get_standard_option('pve-vmid'), skiplock => get_standard_option('skiplock'), + timeout => { + description => "Wait maximal timeout seconds.", + type => 'integer', + minimum => 0, + optional => 1, + } }, }, returns => { @@ -831,6 +837,21 @@ __PACKAGE__->register_method({ PVE::QemuServer::vm_stop($vmid, $skiplock); + my $pid = PVE::QemuServer::check_running ($vmid); + + if ($pid && $param->{timeout}) { + print "waiting until VM $vmid stopps (PID $pid)\n"; + + my $count = 0; + while (($count < $param->{timeout}) && + PVE::QemuServer::check_running($vmid)) { + $count++; + sleep 1; + } + + die "wait failed - got timeout\n" if PVE::QemuServer::check_running($vmid); + } + return; }; @@ -896,6 +917,12 @@ __PACKAGE__->register_method({ node => get_standard_option('pve-node'), vmid => get_standard_option('pve-vmid'), skiplock => get_standard_option('skiplock'), + timeout => { + description => "Wait maximal timeout seconds.", + type => 'integer', + minimum => 0, + optional => 1, + } }, }, returns => { @@ -923,6 +950,21 @@ __PACKAGE__->register_method({ PVE::QemuServer::vm_shutdown($vmid, $skiplock); + my $pid = PVE::QemuServer::check_running ($vmid); + + if ($pid && $param->{timeout}) { + print "waiting until VM $vmid stopps (PID $pid)\n"; + + my $count = 0; + while (($count < $param->{timeout}) && + PVE::QemuServer::check_running($vmid)) { + $count++; + sleep 1; + } + + die "wait failed - got timeout\n" if PVE::QemuServer::check_running($vmid); + } + return; };