[Libguestfs] [PATCH] Initial drop of virt-v2v
Matthew Booth
mbooth at redhat.com
Sun Jul 26 18:18:05 UTC 2009
On 26/07/09 18:50, Richard W.M. Jones wrote:
> On Fri, Jul 24, 2009 at 10:34:21PM +0100, Matthew Booth wrote:
>> diff --git a/perl/lib/Sys/Guestfs/GuestOS/RedHat.pm b/perl/lib/Sys/Guestfs/GuestOS/RedHat.pm
>> +=head1 SYNOPSIS
>> +
>> + use Sys::Guestfs::GuestOS;
>> +
>> + $guestos = Sys::Guestfs::GuestOS->get_instance($os, $distro, $version)
>> +
>> +=head1 DESCRIPTION
>> +
>> +Sys::Guestfs::GuestOS provides a mechanism for querying and manipulating a
>> +specific guest operating system.
> [...]
>
> This documentation is just duplicated from the parent class.
Yeah, ignore the POD. I was putting it in to start with, but I kept
changing interfaces and keeping the POD up to date was becoming a drag.
Eventually I just removed most of it on the premise that inaccurate
documentation is worse than no documentation.
It will have total coverage before I submit.
>
>> +sub enable_driver
>
> Is this an internal function? Test::Pod::Coverage will complain
> unless internal function names are prefixed by underscore. (It
> enforces POD documentation on all external functions).
No, this is an external function. However, there are a couple of
internal functions, so thanks for the tip.
>> + # XXX: The following save should not be required, but is
>> + # If this save is omitted, by the time save is called just before
>> + # mkinitrd, these changes will have been lost.
>> + $g->aug_save();
>
> We ought to ask David Lutterkort what's going on here, because I'm
> quite sure that Augeas isn't supposed to behave like this.
>
>> +sub disable_driver
> [...]
>> + $g->aug_rm($augeas);
>
> Missing a path parameter.
Nope. The path parameter is $augeas ;)
>> +# We can't rely on the index in the augeas path because it will change if
>> +# something has been inserted or removed before it.
>> +# Look for the alias again in the same file which contained it on the first
>> +# pass.
>
> I'm sure that Augeas must provide a mechanism to name nodes. Ask
> Augeas upstream about it?
Leave this one for the moment. I haven't tried removing this since I
twigged that I was mounting rw drives which had been added to qemu ro. I
could be that it works in the absence of underlying storage snafu.
>> +sub add_kernel
>> +{
>> + my $self = shift;
>> + my $kernel_arch = "i386"; # XXX: Need to get this from inspection!
>
> Yup - it's on the TODO list, and does need to be fixed.
>
>> +sub remap_block_devices
>> +{
>> + my $self = shift;
>> + my %map = @_;
>> +
>> + my $g = $self->{g};
>> +
>> + # Iterate over fstab. Any entries with a spec in the the map, replace them
>> + # with their mapped values
>> + eval {
>> + foreach my $spec ($g->aug_match('/etc/fstab/*/spec')) {
>> + my $device = $g->aug_get($spec);
>> + if(exists($map{$device})) {
>> + $g->aug_set($spec, $map{$device});
>> + }
>> + }
>> + };
>> +
>> + # Propagate augeas failure
>> + die($@) if($@);
>> +}
>
> I'll ask a nasty question at this point: What happens if we are using
> libguestfs with an IDE-based appliance (ie. devices named /dev/sd*),
> but our target system will have virtio drivers (devices named
> /dev/vd*)?
This function just takes a map passed to it from elsewhere. It should be
passed from HVTarget (did I miss that off the TODO list)? Anyway, the
nastiness is handled there.
> We should probably use a neutral name instead of actual device names
> in the internal structures ("HD(a,1)"), then map those on the way out.
> Hopefully it won't matter too much since all modern distros use UUIDs
> or labels, but beware of RHEL 3 guests.
In the grand scheme this isn't a huge issue. The additional code in
HVTarget will probably amount to a line or two. I'm not sure I'd bother.
> [I checked all the other modules here but didn't have any particular
> comments about them].
>
>> diff --git a/v2v/virt-v2v.pl b/v2v/virt-v2v.pl
> [...]
>> +# Create a squashfs filesystem containing all files given on the command line
>
> I think you were right about ISO vs squashfs ... If you do use
> squashfs, then note that RHEL 5 cannot mount it unless you use a
> special mount_vfs call. See:
>
> http://git.et.redhat.com/?p=libguestfs.git;a=commitdiff;h=9af502eff08017941a58ad676d0cbb867f83a341
>
> ---
>
> OK there's not as much duplicate code as I feared. In fact, your code
> builds nicely on top of the inspection done in Lib.pm. How about we
> leave Lib.pm alone?
Updating Lib.pm certainly isn't a priority because it's there and it
works. However, it's not pleasant or particularly understandable as an
API, or to extend. As a simple example, if there were a
GuestOS->getApplications() api, not only would the Red Hat and Debian
implementations have an obvious separation, but it could be populated
lazily, and it would be considerably more intuitive.
Matt
--
Matthew Booth, RHCA, RHCSS
Red Hat Engineering, Virtualisation Team
M: +44 (0)7977 267231
GPG ID: D33C3490
GPG FPR: 3733 612D 2D05 5458 8A8A 1600 3441 EA19 D33C 3490
More information about the Libguestfs
mailing list