[pve-devel] [qemu-server] qm: try to use new PVE::CLIFormatter::print_api_result

Dietmar Maurer dietmar at proxmox.com
Tue Jul 10 13:59:37 CEST 2018


Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
---
 PVE/API2/Qemu.pm | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
 PVE/CLI/qm.pm    | 60 ++++++++++++++++-----------------------------
 2 files changed, 91 insertions(+), 44 deletions(-)

diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index c15c71f..655f514 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -365,7 +365,41 @@ __PACKAGE__->register_method({
 	type => 'array',
 	items => {
 	    type => "object",
-	    properties => {},
+	    properties => {
+		vmid => get_standard_option('pve-vmid'),
+		status => {
+		    description => "Qemu process status.",
+		    type => 'string',
+		    enum => ['stopped', 'running'],
+		},
+		maxmem => {
+		    description => "Maximum memory in bytes.",
+		    type => 'integer',
+		    optional => 1,
+		    renderer => 'bytes',
+		},
+		maxdisk => {
+		    description => "Root disk size in bytes.",
+		    type => 'integer',
+		    optional => 1,
+		    renderer => 'bytes',
+		},
+		name => {
+		    description => "VM name.",
+		    type => 'string',
+		    optional => 1,
+		},
+		qmpstatus => {
+		    description => "Qemu QMP agent status.",
+		    type => 'string',
+		    optional => 1,
+		},
+		pid => {
+		    description => "PID of running qemu process.",
+		    type => 'integer',
+		    optional => 1,
+		},
+	    },
 	},
 	links => [ { rel => 'child', href => "{vmid}" } ],
     },
@@ -828,13 +862,14 @@ __PACKAGE__->register_method({
 	},
     },
     returns => {
+	description => "The current VM configuration.",
 	type => "object",
-	properties => {
+	properties => PVE::QemuServer::json_config_properties({
 	    digest => {
 		type => 'string',
 		description => 'SHA1 digest of configuration file. This can be used to prevent concurrent modifications.',
 	    }
-	},
+	}),
     },
     code => sub {
 	my ($param) = @_;
@@ -3319,7 +3354,32 @@ __PACKAGE__->register_method({
 	type => 'array',
 	items => {
 	    type => "object",
-	    properties => {},
+	    properties => {
+		name => {
+		    description => "Snapshot identifier. Value 'current' identifies the current VM.",
+		    type => 'string',
+		},
+		vmstate => {
+		    description => "Snapshot includes RAM.",
+		    type => 'boolean',
+		    optional => 1,
+		},
+		description => {
+		    description => "Snapshot description.",
+		    type => 'string',
+		},
+		snaptime => {
+		    description => "Snapshot creation time",
+		    type => 'integer',
+		    renderer => 'timestamp',
+		    optional => 1,
+		},
+		parent => {
+		    description => "Parent snapshot identifier.",
+		    type => 'string',
+		    optional => 1,
+		},
+	    },
 	},
 	links => [ { rel => 'child', href => "{name}" } ],
     },
@@ -3347,7 +3407,12 @@ __PACKAGE__->register_method({
 	}
 
 	my $running = PVE::QemuServer::check_running($vmid, 1) ? 1 : 0;
-	my $current = { name => 'current', digest => $conf->{digest}, running => $running };
+	my $current = {
+	    name => 'current',
+	    digest => $conf->{digest},
+	    running => $running,
+	    description => "You are here!",
+	};
 	$current->{parent} = $conf->{parent} if $conf->{parent};
 
 	push @$res, $current;
diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm
index 48fbc5f..491d671 100755
--- a/PVE/CLI/qm.pm
+++ b/PVE/CLI/qm.pm
@@ -682,22 +682,9 @@ sub param_mapping {
 our $cmddef = {
     list => [ "PVE::API2::Qemu", 'vmlist', [],
 	     { node => $nodename }, sub {
-		 my $vmlist = shift;
-
-		 exit 0 if (!scalar(@$vmlist));
-
-		 printf "%10s %-20s %-10s %-10s %12s %-10s\n",
-		 qw(VMID NAME STATUS MEM(MB) BOOTDISK(GB) PID);
-
-		 foreach my $rec (sort { $a->{vmid} <=> $b->{vmid} } @$vmlist) {
-		     printf "%10s %-20s %-10s %-10s %12.2f %-10s\n", $rec->{vmid}, $rec->{name},
-		     $rec->{qmpstatus} || $rec->{status},
-		     ($rec->{maxmem} || 0)/(1024*1024),
-		     ($rec->{maxdisk} || 0)/(1024*1024*1024),
-		     $rec->{pid}||0;
-		 }
-
-
+		 my ($data, $schema, $options) = @_;
+		 my $proplist = ['vmid', 'name', 'status', 'qmpstatus', 'maxmem', 'maxdisk', 'pid'];
+		 PVE::CLIFormatter::print_api_result($data, $schema, $proplist, $options);
 	      } ],
 
     create => [ "PVE::API2::Qemu", 'create_vm', ['vmid'], { node => $nodename }, $upid_exit ],
@@ -718,20 +705,15 @@ our $cmddef = {
 
     config => [ "PVE::API2::Qemu", 'vm_config', ['vmid'],
 		{ node => $nodename }, sub {
-		    my $config = shift;
-		    foreach my $k (sort (keys %$config)) {
-			next if $k eq 'digest';
-			my $v = $config->{$k};
-			if ($k eq 'description') {
-			    $v = PVE::Tools::encode_text($v);
-			}
-			print "$k: $v\n";
-		    }
+		    my ($data, $schema, $options) = @_;
+		    PVE::CLIFormatter::print_api_result($data, $schema, undef, $options);
 		}],
 
     pending => [ "PVE::API2::Qemu", 'vm_pending', ['vmid'],
 		{ node => $nodename }, sub {
-		    my $data = shift;
+		    my ($data, $schema, $options) = @_;
+
+		    my $table = [];
 		    foreach my $item (sort { $a->{key} cmp $b->{key}} @$data) {
 			my $k = $item->{key};
 			next if $k eq 'digest';
@@ -743,17 +725,21 @@ our $cmddef = {
 			}
 			if (defined($v)) {
 			    if ($item->{delete}) {
-				print "del $k: $v\n";
+				push @$table, { status => 'del', key => $k, value => $v };
 			    } elsif (defined($p)) {
-				print "cur $k: $v\n";
-				print "new $k: $p\n";
+				push @$table, { status => 'cur', key => $k, value => $v };
+				push @$table, { status => 'new', key => $k, value => $p };
 			    } else {
-				print "cur $k: $v\n";
+				push @$table, { status => 'cur', key => $k, value => $v };
 			    }
 			} elsif (defined($p)) {
-			    print "new $k: $p\n";
+			    push @$table, { status => 'new', key => $k, value => $p };
 			}
 		    }
+
+		    my $proplist = ['status', 'key', 'value'];
+		    my $tableschema = { type => 'array', items => { type => 'object' }};
+		    PVE::CLIFormatter::print_api_result($table, $tableschema, $proplist, $options);
 		}],
 
     showcmd => [ __PACKAGE__, 'showcmd', ['vmid']],
@@ -765,14 +751,10 @@ our $cmddef = {
     delsnapshot => [ "PVE::API2::Qemu", 'delsnapshot', ['vmid', 'snapname'], { node => $nodename } , $upid_exit ],
 
     listsnapshot => [ "PVE::API2::Qemu", 'snapshot_list', ['vmid'], { node => $nodename },
-		    sub {
-			my $res = shift;
-			foreach my $e (@$res) {
-			    my $headline = $e->{description} || 'no-description';
-			    $headline =~ s/\n.*//sg;
-			    my $parent = $e->{parent} // 'no-parent';
-			    printf("%-20s %-20s %s\n", $e->{name}, $parent, $headline);
-			}
+		      sub {
+			  my ($data, $schema, $options) = @_;
+			  my $proplist = ['name', 'snaptime', 'vmstate', 'parent', 'description'];
+			  PVE::CLIFormatter::print_api_result($data, $schema, $proplist, $options);
 		    }],
 
     rollback => [ "PVE::API2::Qemu", 'rollback', ['vmid', 'snapname'], { node => $nodename } , $upid_exit ],
-- 
2.11.0




More information about the pve-devel mailing list