virt-uname works.
authorRichard Jones <rjones@trick.home.annexia.org>
Tue, 29 Sep 2009 15:40:25 +0000 (16:40 +0100)
committerRichard Jones <rjones@trick.home.annexia.org>
Tue, 29 Sep 2009 15:40:25 +0000 (16:40 +0100)
tools/virt-tools-get-transport.pl
tools/virt-uname.pl

index b6bf480..1f4a57a 100755 (executable)
 use Sys::Virt;
 use Sys::Guestfs;
 use Sys::Guestfs::Lib qw(open_guest get_partitions);
 use Sys::Virt;
 use Sys::Guestfs;
 use Sys::Guestfs::Lib qw(open_guest get_partitions);
+use Net::SNMP;
+
+use Data::Dumper;
+
 use Pod::Usage;
 use Getopt::Long;
 use Pod::Usage;
 use Getopt::Long;
+
 use Locale::TextDomain 'virt-tools';
 use Locale::TextDomain 'virt-tools';
-use Net::SNMP;
 
 =encoding utf8
 
 
 =encoding utf8
 
@@ -288,7 +292,42 @@ sub test_transport
        close PIPE;
     }
 
        close PIPE;
     }
 
-    print "XXX PING XXX\n";
+    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,
+       );
+    return 0 unless $session;
+
+    my $sysUpTime = "1.3.6.1.2.1.1.3.0";
+    my $r = $session->get_request (-varbindlist => [$sysUpTime])
+       or return 0;
+    print STDERR "test_transport: sysUpTime = $r->{$sysUpTime}\n" if $verbose;
+
+    $session->close ();
 
     1;
 }
 
     1;
 }
index 9a383bb..b1d305b 100755 (executable)
@@ -198,7 +198,7 @@ the guest.
 
 sub title_uname
 {
 
 sub title_uname
 {
-    print_row (__"Guest");
+    print_row (__"Guest", __"System name");
 }
 
 sub do_uname
 }
 
 sub do_uname
@@ -207,8 +207,12 @@ sub do_uname
     my $key = shift;
     my $transport = shift;
 
     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
 }
 
 =head1 virt-ps
@@ -271,12 +275,12 @@ sub print_row
     my $comma = 0;
 
     foreach (@fields) {
     my $comma = 0;
 
     foreach (@fields) {
-       print "," if $comma;
-       $comma = 1;
-
        if (!$csv) {
            printf "%-16s ", $_
        } else {
        if (!$csv) {
            printf "%-16s ", $_
        } else {
+           print "," if $comma;
+           $comma = 1;
+
            # XXX Use Text::CSV here.
            if ($_ =~ /"/) {
                s/"/""/;
            # 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.
 
 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)>
 =head2 RUNNING YOUR OWN SNMP SERVER IN A GUEST
 
 I<(To be written)>