From 6ce12286729395250fca86eebdfcaaf8aca69f33 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Fri, 20 Nov 2009 18:20:28 +0000 Subject: [PATCH] perl: Add Sys::Guestfs::Lib::feature_available This is a nicer Perl wrapper around $g->available call. Update the other code in Sys::Guestfs::Lib to use it before using LVM, Augeas. --- perl/lib/Sys/Guestfs/Lib.pm | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm index 549916f..c97fae3 100644 --- a/perl/lib/Sys/Guestfs/Lib.pm +++ b/perl/lib/Sys/Guestfs/Lib.pm @@ -64,7 +64,8 @@ require Exporter; use vars qw(@EXPORT_OK @ISA); @ISA = qw(Exporter); -@EXPORT_OK = qw(open_guest get_partitions resolve_windows_path +@EXPORT_OK = qw(open_guest feature_available + get_partitions resolve_windows_path inspect_all_partitions inspect_partition inspect_operating_systems mount_operating_system inspect_in_detail inspect_linux_kernel); @@ -208,6 +209,30 @@ sub open_guest return wantarray ? ($g, $conn, $dom, @images) : $g } +=head2 feature_available + + $bool = feature_available ($g, $feature [, $feature ...]); + +This function is a useful wrapper around the basic +C<$g-Eavailable> call. + +C<$g-Eavailable> tests for availability of a list of features and +dies with an error if any is not available. + +This call tests for the list of features and returns true if all are +available, or false otherwise. + +For a list of features you can test for, see L. + +=cut + +sub feature_available { + my $g = shift; + + eval { $g->available (\@_); }; + return $@ ? 0 : 1; +} + =head2 get_partitions @partitions = get_partitions ($g); @@ -230,7 +255,8 @@ sub get_partitions my @pvs = $g->pvs (); @partitions = grep { ! _is_pv ($_, @pvs) } @partitions; - my @lvs = $g->lvs (); + my @lvs; + @lvs = $g->lvs () if feature_available ($g, "lvm2"); return sort (@lvs, @partitions); } @@ -1478,7 +1504,7 @@ sub _check_for_kernels { my ($g, $os) = @_; - if ($os->{os} eq "linux") { + if ($os->{os} eq "linux" && feature_available ($g, "augeas")) { # Iterate over entries in grub.conf, populating $os->{boot} # For every kernel we find, inspect it and add to $os->{kernels} -- 1.8.3.1