From: Richard Jones Date: Tue, 29 Sep 2009 15:40:25 +0000 (+0100) Subject: virt-uname works. X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;ds=inline;h=fee2d525afaa3169da0bf633b2a20cc9dfa4020d;p=virt-tools.git virt-uname works. --- diff --git a/tools/virt-tools-get-transport.pl b/tools/virt-tools-get-transport.pl index b6bf480..1f4a57a 100755 --- a/tools/virt-tools-get-transport.pl +++ b/tools/virt-tools-get-transport.pl @@ -19,10 +19,14 @@ 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 Locale::TextDomain 'virt-tools'; -use Net::SNMP; =encoding utf8 @@ -288,7 +292,42 @@ sub test_transport 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; } diff --git a/tools/virt-uname.pl b/tools/virt-uname.pl index 9a383bb..b1d305b 100755 --- a/tools/virt-uname.pl +++ b/tools/virt-uname.pl @@ -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)>