[Libguestfs] [PATCH 1/2] Move augeas error reporting into new Sys::VirtV2V::Util

Matthew Booth mbooth at redhat.com
Wed Jul 28 13:56:35 UTC 2010


_augeas_error from GuestOS::RedHat is useful in other modules which use augeas.
Pull it into a new module, Sys::VirtV2V::Util, and update all uses.

Additionally, use the new function in Converter::Linux.
---
 MANIFEST                           |   21 ++++----
 lib/Sys/VirtV2V/Converter/Linux.pm |    6 ++-
 lib/Sys/VirtV2V/GuestOS/RedHat.pm  |   99 +++++++----------------------------
 3 files changed, 36 insertions(+), 90 deletions(-)

diff --git a/MANIFEST b/MANIFEST
index fb6a2fc..0673eb7 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -2,26 +2,27 @@ Build.PL
 ChangeLog
 COPYING
 COPYING.LIB
-lib/Sys/VirtV2V.pm
+lib/Sys/VirtV2V/Config.pm
+lib/Sys/VirtV2V/Connection/LibVirt.pm
+lib/Sys/VirtV2V/Connection/LibVirtXML.pm
+lib/Sys/VirtV2V/Connection.pm
+lib/Sys/VirtV2V/Converter/Linux.pm
+lib/Sys/VirtV2V/Converter.pm
+lib/Sys/VirtV2V/Converter/Windows.pm
 lib/Sys/VirtV2V/ExecHelper.pm
 lib/Sys/VirtV2V/GuestfsHandle.pm
 lib/Sys/VirtV2V/GuestOS.pm
 lib/Sys/VirtV2V/GuestOS/RedHat.pm
-lib/Sys/VirtV2V/Config.pm
-lib/Sys/VirtV2V/Converter.pm
-lib/Sys/VirtV2V/Converter/Linux.pm
-lib/Sys/VirtV2V/Converter/Windows.pm
-lib/Sys/VirtV2V/Connection.pm
-lib/Sys/VirtV2V/Connection/LibVirt.pm
-lib/Sys/VirtV2V/Connection/LibVirtXML.pm
-lib/Sys/VirtV2V/UserMessage.pm
+lib/Sys/VirtV2V.pm
 lib/Sys/VirtV2V/Target/LibVirt.pm
 lib/Sys/VirtV2V/Target/RHEV.pm
 lib/Sys/VirtV2V/Transfer/ESX.pm
 lib/Sys/VirtV2V/Transfer/LocalCopy.pm
 lib/Sys/VirtV2V/Transfer/SSH.pm
-MANIFEST			This list of files
+lib/Sys/VirtV2V/UserMessage.pm
+lib/Sys/VirtV2V/Util.pm
 MANIFEST.SKIP
+MANIFEST			This list of files
 META.yml
 po/es.po
 po/it.po
diff --git a/lib/Sys/VirtV2V/Converter/Linux.pm b/lib/Sys/VirtV2V/Converter/Linux.pm
index ffcf9eb..82e7ba4 100644
--- a/lib/Sys/VirtV2V/Converter/Linux.pm
+++ b/lib/Sys/VirtV2V/Converter/Linux.pm
@@ -27,6 +27,7 @@ use XML::DOM;
 use XML::DOM::XPath;
 
 use Sys::VirtV2V::UserMessage qw(user_message);
+use Sys::VirtV2V::Util qw(augeas_error);
 
 use Carp;
 
@@ -236,7 +237,10 @@ sub _configure_console
         }
     }
 
-    $g->aug_save();
+    eval {
+        $g->aug_save();
+    };
+    augeas_error($g, $@) if ($@);
 }
 
 sub _configure_display_driver
diff --git a/lib/Sys/VirtV2V/GuestOS/RedHat.pm b/lib/Sys/VirtV2V/GuestOS/RedHat.pm
index 563e6f1..54ae483 100644
--- a/lib/Sys/VirtV2V/GuestOS/RedHat.pm
+++ b/lib/Sys/VirtV2V/GuestOS/RedHat.pm
@@ -26,6 +26,8 @@ use Sys::Guestfs::Lib qw(inspect_linux_kernel);
 use Sys::VirtV2V::GuestOS;
 use Sys::VirtV2V::UserMessage qw(user_message);
 
+use Sys::VirtV2V::Util qw(augeas_error);
+
 use Locale::TextDomain 'virt-v2v';
 
 @Sys::VirtV2V::GuestOS::RedHat::ISA = qw(Sys::VirtV2V::GuestOS);
@@ -93,67 +95,6 @@ sub new
     return $self;
 }
 
-sub _augeas_error
-{
-    my $self = shift;
-    my ($err) = @_; # The original error message. We will emit this if there
-                    # were no augeas errors.
-
-    my $g = $self->{g};
-
-    my $msg = "";
-
-    eval {
-        foreach my $error ($g->aug_match('/augeas/files//error')) {
-            $error =~ /^\/augeas\/files(\/.*)\/error$/
-                or die("Unexpected return from aug_match: $error");
-            my $file = $1;
-
-            my %detail;
-            foreach my $detail_path ($g->aug_match("$error//*")) {
-                $detail_path =~ /^$error\/(.*)$/
-                    or die("Unexpected return from aug_match: $detail_path");
-                $detail{$1} = $g->aug_get($detail_path);
-            }
-
-            if (defined($detail{message})) {
-                $msg .= __x("augeas error for {file}: {error}",
-                           file => $file,
-                           error => $detail{message})."\n";
-            } else {
-                $msg .= __x("augeas error for {file}",
-                           file => $file)."\n";
-            }
-
-            if (defined($detail{pos}) && defined($detail{line}) &&
-                defined($detail{char}))
-            {
-                $msg .= __x("error at line {line}, char {char}, file ".
-                                 "position {pos}",
-                                 line => $detail{line},
-                                 char => $detail{char},
-                                 pos => $detail{pos})."\n";
-            }
-
-            if (defined($detail{lens})) {
-                $msg .= __x("augeas lens: {lens}",
-                            lens => $detail{lens})."\n";
-            }
-        }
-    };
-
-    # Check for failures above
-    if ($@) {
-        die("error generating pretty augeas error: $@\n".
-            "Original error was: $err");
-    }
-
-    chomp($msg);
-
-    die(user_message($msg)) if (length($msg) > 0);
-    die($err);
-}
-
 # Handle SELinux for the guest
 sub _init_selinux
 {
@@ -246,7 +187,7 @@ sub _init_augeas
     };
 
     # The augeas calls will die() on any error.
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 }
 
 =item enable_kernel_module(device, module)
@@ -270,7 +211,7 @@ sub enable_kernel_module
     };
 
     # Propagate augeas errors
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 }
 
 =item update_kernel_module(device, module)
@@ -303,7 +244,7 @@ sub update_kernel_module
     };
 
     # Propagate augeas errors
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 }
 
 =item disable_kernel_module(device)
@@ -336,7 +277,7 @@ sub disable_kernel_module
     };
 
     # Propagate augeas errors
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 }
 
 =item update_display_driver(driver)
@@ -364,7 +305,7 @@ sub update_display_driver
     };
 
     # Propagate augeas errors
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 }
 
 # We can't rely on the index in the augeas path because it will change if
@@ -394,7 +335,7 @@ sub _check_augeas_device
     };
 
     # Propagate augeas errors
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 
     return $augeas;
 }
@@ -430,7 +371,7 @@ sub list_kernels
             if defined($default);
         push(@paths, $g->aug_match('/files/boot/grub/menu.lst/title/kernel'));
     };
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 
     my @kernels;
     my %checked;
@@ -442,7 +383,7 @@ sub list_kernels
         eval {
             $kernel = $g->aug_get($path);
         };
-        $self->_augeas_error($@) if ($@);
+        augeas_error($g, $@) if ($@);
 
         # Prepend the grub filesystem to the kernel path
         $kernel = "$grub$kernel" if(defined($grub));
@@ -737,7 +678,7 @@ sub _install_any
     eval {
         $g->aug_load();
     };
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 
     return $success;
 }
@@ -986,7 +927,7 @@ sub _check_grub
             return if ($g->aug_get($augpath) eq $kernel);
         }
     };
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 
     my $prefix;
     if ($self->{desc}->{boot}->{grub_fs} eq "/boot") {
@@ -1074,7 +1015,7 @@ sub _check_grub
 
         $g->aug_save();
     };
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 }
 
 # Inspect the guest description to work out what kernel package is in use
@@ -1159,7 +1100,7 @@ sub remove_kernel
     eval {
         $g->aug_load();
     };
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 }
 
 sub _get_nevra
@@ -1457,7 +1398,7 @@ sub remove_application
         $g->aug_load();
     };
 
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 }
 
 =item get_application_owner(file)
@@ -1500,7 +1441,7 @@ sub _install_rpms
         $g->aug_load();
     };
 
-    $self->_augeas_error($@) if($@);
+    augeas_error($g, $@) if($@);
 }
 
 =item remap_block_devices(devices, virtio)
@@ -1568,7 +1509,7 @@ sub remap_block_devices
             }
         };
 
-        $self->_augeas_error($@) if ($@);
+        augeas_error($g, $@) if ($@);
 
         # If guest config contains references to sdX, these could refer to IDE
         # or SCSI devices. We may need to update them.
@@ -1661,7 +1602,7 @@ sub remap_block_devices
         $g->aug_save();
     };
 
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 
     # Delete cached (and now out of date) blkid info if it exists
     foreach my $blkidtab ('/etc/blkid/blkid.tab', '/etc/blkid.tab') {
@@ -1742,7 +1683,7 @@ sub prepare_bootable
     };
 
     # Propagate augeas failure
-    $self->_augeas_error($@) if ($@);
+    augeas_error($g, $@) if ($@);
 
     if(!defined($initrd)) {
         warn user_message(__x("WARNING: Kernel version {version} ".
@@ -1766,7 +1707,7 @@ sub prepare_bootable
             $g->aug_save();
         };
 
-        $self->_augeas_error($@) if ($@);
+        augeas_error($g, $@) if ($@);
 
         # We explicitly modprobe ext2 here. This is required by mkinitrd on RHEL
         # 3, and shouldn't hurt on other OSs. We don't care if this fails.
-- 
1.7.2




More information about the Libguestfs mailing list