X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=inspector%2Fvirt-inspector.pl;h=bd8de7034ed2d53c38738c6e7bc04fc0797868ff;hb=b2ed0f4c55c2bd3d07341ba2207f0cb238eb4e18;hp=8417675ea1e182f6c0e8fcf6f17d30cfa8119cbc;hpb=247225c4415b28d02a82b7fc4dfdd35728437711;p=libguestfs.git
diff --git a/inspector/virt-inspector.pl b/inspector/virt-inspector.pl
index 8417675..bd8de70 100755
--- a/inspector/virt-inspector.pl
+++ b/inspector/virt-inspector.pl
@@ -24,6 +24,7 @@ use Pod::Usage;
use Getopt::Long;
use Data::Dumper;
use File::Temp qw/tempdir/;
+use XML::Writer;
# Optional:
eval "use Sys::Virt;";
@@ -1078,55 +1079,61 @@ sub output_text_os
sub output_xml
{
- print "\n";
- output_xml_os ($oses{$_}) foreach sort keys %oses;
- print "\n";
+ my $xml = new XML::Writer(DATA_MODE => 1, DATA_INDENT => 2);
+
+ $xml->startTag("operatingsystems");
+ output_xml_os ($oses{$_}, $xml) foreach sort keys %oses;
+ $xml->endTag("operatingsystems");
+
+ $xml->end();
}
sub output_xml_os
{
- my $os = shift;
+ my ($os, $xml) = @_;
- print "\n";
+ $xml->startTag("operatingsystem");
- print "", $os->{os}, "\n" if exists $os->{os};
- print "", $os->{distro}, "\n" if exists $os->{distro};
- print "", $os->{version}, "\n" if exists $os->{version};
- print "", $os->{root_device}, "\n";
+ foreach ( [ "name" => "os" ],
+ [ "distro" => "distro" ],
+ [ "version" => "version" ],
+ [ "root" => "root_device" ] ) {
+ $xml->dataElement($_->[0], $os->{$_->[1]}) if exists $os->{$_->[1]};
+ }
- print "\n";
+ $xml->startTag("mountpoints");
my $mounts = $os->{mounts};
foreach (sort keys %$mounts) {
- printf "%s\n",
- $mounts->{$_}, $_
+ $xml->dataElement("mountpoint", $_, "dev" => $mounts->{$_});
}
- print "\n";
+ $xml->endTag("mountpoints");
- print "\n";
+ $xml->startTag("filesystems");
my $filesystems = $os->{filesystems};
foreach (sort keys %$filesystems) {
- print "\n";
- print "\n"
- if exists $filesystems->{$_}{label};
- print "$filesystems->{$_}{uuid}\n"
- if exists $filesystems->{$_}{uuid};
- print "$filesystems->{$_}{fstype}\n"
- if exists $filesystems->{$_}{fstype};
- print "$filesystems->{$_}{content}\n"
- if exists $filesystems->{$_}{content};
- print "\n";
+ $xml->startTag("filesystem", "dev" => $_);
+
+ foreach my $field ( [ "label" => "label" ],
+ [ "uuid" => "uuid" ],
+ [ "type" => "fstype" ],
+ [ "content" => "content" ] ) {
+ $xml->dataElement($field->[0], $filesystems->{$_}{$field->[1]})
+ if exists $filesystems->{$_}{$field->[1]};
+ }
+
+ $xml->endTag("filesystem");
}
- print "\n";
+ $xml->endTag("filesystems");
if (exists $os->{modprobe_aliases}) {
my %aliases = %{$os->{modprobe_aliases}};
my @keys = sort keys %aliases;
if (@keys) {
- print "\n";
+ $xml->startTag("modprobealiases");
foreach (@keys) {
- printf "%s\n", $_, $aliases{$_}
+ $xml->dataElement("alias", $aliases{$_}, "device" => $_);
}
- print "\n";
+ $xml->endTag("modprobealiases");
}
}
@@ -1134,63 +1141,51 @@ sub output_xml_os
my %modvers = %{$os->{initrd_modules}};
my @keys = sort keys %modvers;
if (@keys) {
- print "\n";
+ $xml->startTag("initrds");
foreach (@keys) {
my @modules = @{$modvers{$_}};
- print "\n";
- print "$_\n" foreach @modules;
- print "\n";
+ $xml->startTag("initrd", "version" => $_);
+ $xml->dataElement("module", $_) foreach @modules;
+ $xml->endTag("initrd");
}
- print "\n";
+ $xml->endTag("initrds");
}
}
- print "\n";
+ $xml->startTag("applications");
my @apps = @{$os->{apps}};
foreach (@apps) {
- print "\n";
- print "$_->{name}$_->{version}\n";
- print "\n";
+ $xml->startTag("application");
+ $xml->dataElement("name", $_->{name});
+ $xml->dataElement("version", $_->{version});
+ $xml->endTag("application");
}
- print "\n";
+ $xml->endTag("applications");
- print "\n";
+ $xml->startTag("kernels");
my @kernels = @{$os->{kernels}};
foreach (@kernels) {
- print "\n";
- print "$_->{version}\n";
- print "\n";
+ $xml->startTag("kernel", "version" => $_->{version});
+ $xml->startTag("modules");
my @modules = @{$_->{modules}};
foreach (@modules) {
- print "$_\n";
+ $xml->dataElement("module", $_);
}
- print "\n";
- print "\n";
+ $xml->endTag("modules");
+ $xml->endTag("kernel");
}
- print "\n";
+ $xml->endTag("kernels");
if (exists $os->{root}->{registry}) {
- print "\n";
+ $xml->startTag("windowsregistryentries");
# These are just lumps of text - dump them out.
foreach (@{$os->{root}->{registry}}) {
- print "\n";
- print escape_xml($_), "\n";
- print "\n";
+ $xml->dataElement("windowsregistryentry", $_);
}
- print "\n";
+ $xml->endTag("windowsregistryentries");
}
- print "\n";
-}
-
-sub escape_xml
-{
- local $_ = shift;
-
- s/&/&/g;
- s/</g;
- s/>/>/g;
- return $_;
+ $xml->endTag("operatingsystem");
}
=head1 QUERY MODE