[pve-devel] r5119 - in qemu-server/pve2: . PVE/API2
svn-commits at proxmox.com
svn-commits at proxmox.com
Fri Sep 10 17:50:47 CEST 2010
Author: dietmar
Date: 2010-09-10 15:50:47 +0000 (Fri, 10 Sep 2010)
New Revision: 5119
Modified:
qemu-server/pve2/ChangeLog
qemu-server/pve2/PVE/API2/QemuServer.pm
qemu-server/pve2/QemuServer.pm
qemu-server/pve2/nqm
qemu-server/pve2/qm
Log:
* nqm: implement wait, showcmd and startall
Modified: qemu-server/pve2/ChangeLog
===================================================================
--- qemu-server/pve2/ChangeLog 2010-09-10 15:48:20 UTC (rev 5118)
+++ qemu-server/pve2/ChangeLog 2010-09-10 15:50:47 UTC (rev 5119)
@@ -1,5 +1,7 @@
2010-09-10 Proxmox Support Team <support at proxmox.com>
+ * nqm: implement wait, showcmd and startall
+
* QemuServer.pm: register all options with
PVE::JSONSchema::register_standard_option()
Modified: qemu-server/pve2/PVE/API2/QemuServer.pm
===================================================================
--- qemu-server/pve2/PVE/API2/QemuServer.pm 2010-09-10 15:48:20 UTC (rev 5118)
+++ qemu-server/pve2/PVE/API2/QemuServer.pm 2010-09-10 15:50:47 UTC (rev 5119)
@@ -10,6 +10,7 @@
use PVE::JSONSchema qw(get_standard_option);
use PVE::RESTHandler;
use PVE::QemuServer;
+use PVE::RPCEnvironment;
use Data::Dumper; # fixme: remove
@@ -69,7 +70,7 @@
__PACKAGE__->register_method ({
name => 'vmlist',
- path => '{node}',
+ path => 'config/{node}',
method => 'GET',
description => "Virtual machine index.",
parameters => {
@@ -97,7 +98,7 @@
__PACKAGE__->register_method ({
name => 'create_vm',
- path => '{node}',
+ path => 'config/{node}',
method => 'POST',
description => "Create new virtual machine.",
parameters => {
@@ -177,7 +178,7 @@
__PACKAGE__->register_method ({
name => 'update_vm',
- path => '{node}/{vmid}',
+ path => 'config/{node}/{vmid}',
method => 'PUT',
description => "Set virtual machine options.",
parameters => {
@@ -202,14 +203,20 @@
code => sub {
my ($param) = @_;
+ my $rpcenv = PVE::RPCEnvironment::get();
+ my $user = $rpcenv->get_user();
+
my $node = extract_param($param, 'node');
# fixme: proxy to correct node
# fixme: fork worker?
my $vmid = extract_param($param, 'vmid');
+
my $skiplock = extract_param($param, 'skiplock');
+ raise_param_exc({ skiplock => "Only root may use this option." }) if $user ne 'root';
+
my $delete = extract_param($param, 'delete');
die "no options specified\n" if !$delete && !scalar(keys %$param);
@@ -255,7 +262,7 @@
__PACKAGE__->register_method ({
name => 'vm_config',
- path => '{node}/{vmid}',
+ path => 'config/{node}/{vmid}',
method => 'GET',
description => "Get virtual machine configuration.",
parameters => {
Modified: qemu-server/pve2/QemuServer.pm
===================================================================
--- qemu-server/pve2/QemuServer.pm 2010-09-10 15:48:20 UTC (rev 5118)
+++ qemu-server/pve2/QemuServer.pm 2010-09-10 15:50:47 UTC (rev 5119)
@@ -1322,7 +1322,11 @@
my $filename = config_file ($vmid);
- return read_file($filename);
+ my $conf = read_file($filename);
+
+ die "no such VM ('$vmid')\n" if !defined($conf);
+
+ return $conf;
}
sub parse_config {
@@ -1670,7 +1674,6 @@
$d->{disk} = 0;
$d->{cpus} = ($conf->{sockets} || 1) * ($conf->{cores} || 1);
$d->{name} = $conf->{name} || "VM$veid";
-
$d->{maxmem} = $conf->{memory} ? $conf->{memory} : 0;
$d->{maxdisk} = $conf->{disksize} ? int($conf->{disksize}*1024) : 0;
@@ -2277,7 +2280,8 @@
});
}
-sub vm_wait {
+# fixme: remove
+sub vm_wait_old {
my ($self, $vmid, $timeout, $nolog) = @_;
my $pid = check_running ($vmid);
@@ -2498,7 +2502,8 @@
});
}
-sub vm_startall {
+# fixme: remove
+sub vm_startall_old {
my ($self) = @_;
my $vzlist = vzlist();
@@ -2507,7 +2512,7 @@
next if $vzlist->{$vmid}->{pid}; # already running
eval {
- my $conf = load_config ($vmid);
+ my $conf = load_config ($vmid);
if ($conf->{onboot}) {
print STDERR "Starting Qemu VM $vmid\n";
$self->vm_start ($vmid);
Modified: qemu-server/pve2/nqm
===================================================================
--- qemu-server/pve2/nqm 2010-09-10 15:48:20 UTC (rev 5118)
+++ qemu-server/pve2/nqm 2010-09-10 15:50:47 UTC (rev 5119)
@@ -9,6 +9,7 @@
use PVE::RPCEnvironment;
use PVE::QemuServer;
use PVE::API2::QemuServer;
+use PVE::JSONSchema qw(get_standard_option);
use PVE::CLIHandler;
@@ -28,6 +29,99 @@
my $hostname = read_file('hostname');
+__PACKAGE__->register_method ({
+ name => 'showcmd',
+ path => 'showcmd',
+ method => 'GET',
+ description => "Show command line which is used to start the VM (debug info).",
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ vmid => get_standard_option('pve-vmid'),
+ },
+ },
+ returns => { type => 'null'},
+ code => sub {
+ my ($param) = @_;
+
+ my $qm = PVE::QemuServer->new();
+ print $qm->vm_commandline ($param->{vmid}) . "\n";
+
+ return undef;
+ }});
+
+__PACKAGE__->register_method ({
+ name => 'startall',
+ path => 'startall',
+ method => 'POST',
+ description => "Start all virtual machines (when onboot=1).",
+ parameters => {
+ additionalProperties => 0,
+ properties => {},
+ },
+ returns => { type => 'null'},
+ code => sub {
+ my ($param) = @_;
+
+ my $vzlist = PVE::QemuServer::vzlist();
+
+ foreach my $vmid (keys %$vzlist) {
+ next if $vzlist->{$vmid}->{pid}; # already running
+
+ eval {
+ my $conf = PVE::QemuServer::load_config ($vmid);
+ if ($conf->{onboot}) {
+ print STDERR "Starting Qemu VM $vmid\n";
+ my $qm = PVE::QemuServer->new();
+ $qm->vm_start ($vmid);
+ }
+ };
+ print STDERR $@ if $@;
+ }
+
+ return undef;
+ }});
+
+__PACKAGE__->register_method ({
+ name => 'wait',
+ path => 'wait',
+ method => 'GET',
+ description => "Wait until the VM is stopped.",
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ vmid => get_standard_option('pve-vmid'),
+ timeout => {
+ description => "Timeout in seconds. Default is to wait forever.",
+ type => 'integer',
+ minimum => 1,
+ optional => 1,
+ }
+ },
+ },
+ returns => { type => 'null'},
+ code => sub {
+ my ($param) = @_;
+
+ my $vmid = $param->{vmid};
+ my $timeout = $param->{timeout};
+
+ my $pid = PVE::QemuServer::check_running ($vmid);
+ return if !$pid;
+
+ print "waiting until VM $vmid stopps (PID $pid)\n";
+
+ my $count = 0;
+ while ((!$timeout || ($count < $timeout)) && PVE::QemuServer::check_running ($vmid)) {
+ $count++;
+ sleep 1;
+ }
+
+ die "wait failed - got timeout\n" if PVE::QemuServer::check_running ($vmid);
+
+ return undef;
+ }});
+
my $cmddef = {
list => [ "PVE::API2::QemuServer", 'vmlist', [],
{ node => $hostname }, sub {
@@ -58,7 +152,13 @@
print "$k: $v\n";
}
}],
-
+
+ showcmd => [ __PACKAGE__, 'showcmd', ['vmid']],
+
+ wait => [ __PACKAGE__, 'wait', ['vmid']],
+
+ startall => [ __PACKAGE__, 'startall', []],
+
};
my $cmd = shift;
Modified: qemu-server/pve2/qm
===================================================================
--- qemu-server/pve2/qm 2010-09-10 15:48:20 UTC (rev 5118)
+++ qemu-server/pve2/qm 2010-09-10 15:50:47 UTC (rev 5119)
@@ -485,7 +485,7 @@
exit (-1);
}
- $qm->vm_startall ();
+ $qm->vm_startall_old ();
} elsif ($cmd eq 'reset') {
if (scalar (@ARGV) != 0) {
@@ -516,7 +516,7 @@
exit (-1);
}
- $qm->vm_wait ($vmid, $timeout);
+ $qm->vm_wait_old ($vmid, $timeout);
} elsif ($cmd eq 'stopall') {
my $timeout = shift || 0;
More information about the pve-devel
mailing list