[pve-devel] r5452 - in qemu-server/pve2: . PVE/API2/Qemu

svn-commits at proxmox.com svn-commits at proxmox.com
Fri Jan 28 06:12:25 CET 2011


Author: dietmar
Date: 2011-01-28 06:12:25 +0100 (Fri, 28 Jan 2011)
New Revision: 5452

Modified:
   qemu-server/pve2/PVE/API2/Qemu/Config.pm
   qemu-server/pve2/PVE/API2/Qemu/Status.pm
   qemu-server/pve2/PVE/API2/Qemu/VNC.pm
   qemu-server/pve2/control.in
   qemu-server/pve2/qm
Log:
start using new PVE::Cluster code


Modified: qemu-server/pve2/PVE/API2/Qemu/Config.pm
===================================================================
--- qemu-server/pve2/PVE/API2/Qemu/Config.pm	2011-01-27 13:28:52 UTC (rev 5451)
+++ qemu-server/pve2/PVE/API2/Qemu/Config.pm	2011-01-28 05:12:25 UTC (rev 5452)
@@ -3,6 +3,7 @@
 use strict;
 use warnings;
 
+use PVE::Cluster;
 use PVE::SafeSyslog;
 use PVE::Tools qw(extract_param);
 use PVE::Exception qw(raise raise_param_exc);
@@ -25,7 +26,6 @@
 # PUT    /vms/qemu/config/{node}/{vmid}  set VM config
 # DELETE /vms/qemu/config/{node}/{vmid}  destroy VM
 
-# GET    /vms/qemu/status  status of all Qemu VMs (cluster wide)
 # GET    /vms/qemu/status/{node}/  status of all Qemu VMs (per node)
 # GET    /vms/qemu/status/{node}/{vmid}  get VM status
 # PUT    /vms/qemu/status/{node}/{vmid}  set VM status
@@ -67,7 +67,7 @@
 	my ($param) = @_;
 
 	my $rpcenv = PVE::RPCEnvironment::get();
-	return $rpcenv->get_nodelist();
+	return PVE::Cluster::get_nodelist();
     }});
 
 __PACKAGE__->register_method ({

Modified: qemu-server/pve2/PVE/API2/Qemu/Status.pm
===================================================================
--- qemu-server/pve2/PVE/API2/Qemu/Status.pm	2011-01-27 13:28:52 UTC (rev 5451)
+++ qemu-server/pve2/PVE/API2/Qemu/Status.pm	2011-01-28 05:12:25 UTC (rev 5452)
@@ -3,6 +3,7 @@
 use strict;
 use warnings;
 
+use PVE::Cluster;
 use PVE::SafeSyslog;
 use PVE::Tools qw(extract_param);
 use PVE::Exception qw(raise raise_param_exc);
@@ -37,7 +38,7 @@
 	my ($param) = @_;
 
 	my $rpcenv = PVE::RPCEnvironment::get();
-	return $rpcenv->get_nodelist();
+	return PVE::Cluster::get_nodelist();
     }});
 
 __PACKAGE__->register_method ({

Modified: qemu-server/pve2/PVE/API2/Qemu/VNC.pm
===================================================================
--- qemu-server/pve2/PVE/API2/Qemu/VNC.pm	2011-01-27 13:28:52 UTC (rev 5451)
+++ qemu-server/pve2/PVE/API2/Qemu/VNC.pm	2011-01-28 05:12:25 UTC (rev 5452)
@@ -2,7 +2,6 @@
 
 use strict;
 use warnings;
-use Digest::SHA1;
 
 use PVE::SafeSyslog;
 use PVE::Tools qw(extract_param);
@@ -12,9 +11,12 @@
 use PVE::RESTHandler;
 use PVE::QemuServer;
 use PVE::RPCEnvironment;
+use PVE::AccessControl;
 
 use base qw(PVE::RESTHandler);
 
+my $sslcert;
+
 __PACKAGE__->register_method ({
     name => 'vncproxy', 
     path => '',  
@@ -31,8 +33,11 @@
     returns => { 
     	additionalProperties => 0,
 	properties => {
+	    user => { type => 'string' },
+	    ticket => { type => 'string' },
+	    cert => { type => 'string' },
 	    port => { type => 'integer' },
-	    ticket => { type => 'string' },
+	    upid => { type => 'string' },
 	},
     },
     code => sub {
@@ -41,26 +46,32 @@
 	my $rpcenv = PVE::RPCEnvironment::get();
 
 	my $user = $rpcenv->get_user();
+	# fixme: creat eticket witch short timeout
+	my $ticket = PVE::AccessControl::assemble_ticket($user);
 
-	my $vmid = $param->{vmid};
+	my ($vmid) = $param->{vmid} =~ m/^(\d+)$/; #untaint
 	my $node = $param->{node};
 
-	# generate ticket, olny first 8 character used by vnc
-	my $ticket = Digest::SHA1::sha1_base64 ($user, rand(), time());
+	$sslcert = PVE::Tools::file_get_contents("/etc/pve/pve-root-ca.pem", 8192)
+	    if !$sslcert;
 
 	my $port = PVE::QemuServer::next_vnc_port();
 
-	my $remip = $rpcenv->get_remote_node_ip($node);
+	# fixme:
+	#my $remip = $rpcenv->get_remote_node_ip($node);
+	my $remip = undef;
+
+	# fixme: select fastest chipher (none?)
 	my $remcmd = $remip ? ['/usr/bin/ssh', '-T', '-o', 'BatchMode=yes', $remip] : [];
 
-	my $timeout = 30; 
+	my $timeout = 1; 
 
 	my $realcmd = sub {
 	    my $upid = shift;
 
 	    syslog ('info', "starting vnc proxy $upid\n");
 
-	    my $qmcmd = [@$remcmd, "/usr/sbin/qm", 'vncproxy', $vmid , $ticket];
+	    my $qmcmd = [@$remcmd, "/usr/sbin/qm", 'vncproxy', $vmid];
 
 	    my $qmstr = join (' ', @$qmcmd);
 
@@ -68,20 +79,28 @@
 	    my @cmd = ('/bin/nc', '-l', '-p', $port, '-w', $timeout, '-c', "$qmstr 2>/dev/null");
 
 	    my $cmdstr = join (' ', @cmd);
-	    syslog ('info', "CMD: $cmdstr");
+	    syslog ('info', "CMD3: $cmdstr");
 
 	    if (system (@cmd) != 0) {
 		my $msg = "VM $vmid vnc proxy failed - $?";
 		syslog ('err', $msg);
-		exit (-1);
+		return;
 	    }
 
-	    exit (0);
+	    return;
 	};
 
-	my $upid = $rpcenv->fork_worker('vncproxy', "", $realcmd);
+	#my $upid = $rpcenv->fork_worker('vncproxy', "", $realcmd);
+	my $upid = "TESTID";
+	$port = 5910;
 
-	return { port => $port, ticket => $ticket};
+	return {
+	    user => $user,
+	    ticket => $ticket,
+	    port => $port, 
+	    upid => $upid, 
+	    cert => $sslcert, 
+	};
     }});
 
 1;

Modified: qemu-server/pve2/control.in
===================================================================
--- qemu-server/pve2/control.in	2011-01-27 13:28:52 UTC (rev 5451)
+++ qemu-server/pve2/control.in	2011-01-28 05:12:25 UTC (rev 5452)
@@ -3,7 +3,7 @@
 Section: admin
 Priority: optional
 Architecture: @@ARCH@@
-Depends: libc6 (>= 2.7-18), perl (>= 5.10.0-19), libterm-readline-gnu-perl, libio-multiplex-perl, libdigest-sha1-perl, pve-qemu-kvm (>= 0.11.1) | pve-qemu-kvm-2.6.18, netcat-traditional, libpve-storage-perl
+Depends: libc6 (>= 2.7-18), perl (>= 5.10.0-19), libterm-readline-gnu-perl, libdigest-sha1-perl, pve-qemu-kvm (>= 0.11.1) | pve-qemu-kvm-2.6.18, netcat-traditional, libpve-storage-perl
 Conflicts: netcat-openbsd
 Maintainer: Proxmox Support Team <support at proxmox.com>
 Description: Qemu Server Tools

Modified: qemu-server/pve2/qm
===================================================================
--- qemu-server/pve2/qm	2011-01-27 13:28:52 UTC (rev 5451)
+++ qemu-server/pve2/qm	2011-01-28 05:12:25 UTC (rev 5452)
@@ -32,7 +32,7 @@
 
 $rpcenv->set_user('root'); 
 
-my $hostname = $rpcenv->get_hostname();
+my $hostname = PVE::INotify::nodename();
 
 sub run_vnc_proxy {
     my ($vmid) = @_;



More information about the pve-devel mailing list