virt-uname works.
[virt-tools.git] / tools / virt-uname.pl
index 9a383bb..b1d305b 100755 (executable)
@@ -198,7 +198,7 @@ the guest.
 
 sub title_uname
 {
-    print_row (__"Guest");
+    print_row (__"Guest", __"System name");
 }
 
 sub do_uname
@@ -207,8 +207,12 @@ sub do_uname
     my $key = shift;
     my $transport = shift;
 
-
-
+    my $session = get_snmp_session ($key, $transport);
+    my $sysDescr = "1.3.6.1.2.1.1.1.0";
+    my $r = $session->get_request (-varbindlist => [$sysDescr])
+       or die __x("SNMP error: {e}", $session->error);
+    print_row ($domname, $r->{$sysDescr});
+    $session->close;
 }
 
 =head1 virt-ps
@@ -271,12 +275,12 @@ sub print_row
     my $comma = 0;
 
     foreach (@fields) {
-       print "," if $comma;
-       $comma = 1;
-
        if (!$csv) {
            printf "%-16s ", $_
        } else {
+           print "," if $comma;
+           $comma = 1;
+
            # XXX Use Text::CSV here.
            if ($_ =~ /"/) {
                s/"/""/;
@@ -533,6 +537,46 @@ machine in a form which is a de facto standard).
 To determine what precise queries are sent, run the tools in verbose
 mode or examine the source.
 
+=cut
+
+sub get_snmp_session
+{
+    my $key = shift;
+    my $transport = shift;
+
+    my ($hostname, $port, $domain);
+    if ($transport =~ /^udp:(.*):(.*)/) {
+       $domain = "udp";
+       $hostname = $1;
+       $port = $2;
+    } elsif ($transport =~ /^tcp:(.*):(.*)/) {
+       $domain = "tcp";
+       $hostname = $1;
+       $port = $2;
+    } else {
+       die __x("unknown transport type: {t}", t => $transport);
+    }
+
+    if ($verbose) {
+       print STDERR "creating Net::SNMP session to $domain:$hostname:$port with key $key\n"
+    }
+
+    my ($session, $error) = Net::SNMP->session (
+       -version => 3,
+       -username => "virttools",
+       -authpassword => $key,
+       -authprotocol => "sha",
+       -privpassword => $key,
+       -privprotocol => "aes",
+       -hostname => $hostname,
+       -port => $port,
+       -domain => $domain,
+       );
+    die __x("SNMP failure: {e}", e => $error) unless $session;
+
+    $session;
+}
+
 =head2 RUNNING YOUR OWN SNMP SERVER IN A GUEST
 
 I<(To be written)>