[Libguestfs] Crafted OVAs and handling non-existing (empty) disks in OVF
Richard W.M. Jones
rjones at redhat.com
Wed Feb 24 10:25:33 UTC 2021
On Tue, Feb 23, 2021 at 06:43:19PM +0100, Tomáš Golembiovský wrote:
> On Mon, Feb 22, 2021 at 04:45:09PM +0000, Richard W.M. Jones wrote:
> > On Mon, Feb 22, 2021 at 02:51:32PM +0100, Tomáš Golembiovský wrote:
> > > Hi,
> > >
> > > from time to time we get a request [1] to import appliance with crafted
> > > OVF (from Cisco or Gigamon) into oVirt. The common denominator is that
> > > some disks are missing and are supposed to be created during import of
> > > the appliance.
> > >
> > > Doing the import properly would require not only solving of the problem
> > > with missing disks, but also implementing multiple concepts -- notably
> > > concept of configurations [2] (for Cisco appliance) or concept of
> > > properties [3] (for Gigamon appliance). This would be quite complex
> > > change to oVirt as well as to virt-v2v and at the moment we don't feel
> > > that such effort is justifiable. But by solving the problem with disks
> > > we can at least provide a helping hand to those requiring the crafted
> > > appliances.
> >
> > Some immediate questions: Can virt-v2v do anything useful for these
> > appliances?
>
> Probably same as for any foreign Linux VM. The Cisco appliance is
> RHEL 7. I don't have access to the Gigamon appliance but from
> metadata it looks like some CentOS.
>
> > Does libguestfs inspection find anything inside the
> > appliances?
>
> I am not sure what you are asking here.
Virt-v2v performs inspection on the guest (like virt-inspector) and
can only handles guests which it knows about. However you answered
this above - RHEL and CentOS can be inspected.
> > Is installing virtio drivers useful? Do they not have virtio drivers
> > already?
>
> It is (fairly recent) Linux, so there's no need to install anything.
> But if you're asking if it makes sense for the appliance to switch to
> virtio devices then I would say yes.
For RHEL virt-v2v would rebuild the initramfs so it contains virtio
drivers and make edits to /etc files if they contain direct block
device references.
In summary virt-v2v could do something with these appliances.
Rich.
> > Where are they supposed to run originally?
>
> On VMware.
>
> Tomas
>
> >
> > > The idea here is that virt-v2v would ignore the non-existing disks and
> > > user would be required to add those manually after conversion. As for
> > > OVFs using the configurations virt-v2v would pick some settings from OVF
> > > (random from users perspective) and user would be responsible for
> > > editing the VM's configuration after conversion (CPUs, memory, etc.) to
> > > size the VM properly based on the expected use. We could further
> > > constrain this to only work with -o vdsm, but this may not be needed
> > > unless we hit some issues with implementing the feature. It is also
> > > possible that ignoring the disks may not work for some reasons that
> > > we have not yet discovered and we'll se once we try.
> > >
> > > There is one more problem with the Cisco OVA that it contains .cert file
> > > which is not specified in manifest. But the file is not needed during
> > > conversion. So this could be possibly handled by enforcing virt-v2v to
> > > use only files listed in manifest instead of complaining.
> > >
> > > Before I invest any time into this I wanted to make sure that such
> > > approach would be acceptable to the upstream. So would this be good
> > > enough?
> >
> > Does the proposed virt-v2v split help here?
> >
> > https://listman.redhat.com/archives/libguestfs/2020-November/msg00022.html
> >
> > With this kind of split, you could set up the disks however you liked
> > -- for example creating dummy input disks (nbdkit-null-plugin
> > instances probably) -- for the missing disks. Then run just the
> > virt-v2v conversion component to carry out the conversion.
> >
> > Rich.
> >
> > > ***
> > >
> > > The topics for discussions are above. What follows are the technical
> > > details for those interested in gain deeper understanding of the
> > > problem. You may be wondering why would we want to ignore the empty
> > > disks if we can create them for most of the output backends. The problem
> > > is, that we cannot. Either we don't know which disks are of the interest
> > > because not all should be used (configurations) or we have no idea how
> > > big the disk should be (properties).
> > >
> > > ### Configurations
> > >
> > > The OVF can define several configurations in DeploymentOptionSection.
> > > A short (simplified) example may look like this:
> > >
> > > <DeploymentOptionSection>
> > > <Configuration ovf:default="true" ovf:id="Standard" />
> > > <Configuration ovf:id="Express" />
> > > ...
> > > </DeploymentOptionSection>
> > >
> > > Then in the VirtualHardwareSection there can be duplicate settings
> > > distinguished only by the ovf:configuration attribute. For example 2 different
> > > vCPU configurations:
> > >
> > > <Item ovf:configuration="Express">
> > > ...
> > > <rasd:Description>Number of Virtual CPUs</rasd:Description>
> > > <rasd:ResourceType>3</rasd:ResourceType>
> > > <rasd:VirtualQuantity>4</rasd:VirtualQuantity>
> > > </Item>
> > > <Item ovf:configuration="Standard">
> > > ...
> > > <rasd:Description>Number of Virtual CPUs</rasd:Description>
> > > <rasd:ResourceType>3</rasd:ResourceType>
> > > <rasd:VirtualQuantity>16</rasd:VirtualQuantity>
> > > </Item>
> > >
> > > In terms of disks this means that only some of the disks get used. Specifically
> > > the Cisco Appliance has 4 disks listed in the DiskSection -- 1 system disk A
> > > and 3 empty disks B,C,D. But the created VM never has all four. It has either
> > > only A or it has A+B or A+C or A+D. Without understanding configurations we
> > > cannot tell whether to use B, C, D or none.
> > >
> > >
> > > ### Properties
> > >
> > > The OVF can define various properties in ProductSection element. Like this:
> > >
> > >
> > > <ProductSection>
> > > ...
> > > <Property ovf:key="datadisksize" ovf:qualifiers="MinValue(20),MaxValue(1000)" ovf:type="int" ovf:userConfigurable="true">
> > > <Label>02. Size of Data Disk</Label>
> > > <Description>The size of the Data Disk in gigabytes.</Description>
> > > <Value ovf:value="40"/>
> > > </Property>
> > > ...
> > > </ProductSection
> > >
> > > Then, the ovf:key value of the property can be used as a variable on
> > > other places in the OVF. For example like this:
> > >
> > > <DiskSection>
> > > ...
> > > <Disk ovf:capacity="${datadisksize}" ovf:fileRef="" ... />
> > > ...
> > > </DiskSection>
> > >
> > > And as before, without understanding the concept virt-v2v has no idea
> > > how to size the disk. The Value element is optional (if the property is
> > > userConfigurable) so relying on the default in OVF may not work. I can
> > > imagine some OVFs may even use a property to specify vCPU count or
> > > memory which could bring up a question how to handle those. Possibly
> > > default to 0 or 1 (where 1 may be better default in my opinion).
> > >
> > > Tomas
> > >
> > >
> > > [1] https://bugzilla.redhat.com/1705600
> > > [2] Open Virtualization Format Specification (DSP0243) Version 2.1.1,
> > > Chapter 9.8 -- DeploymentOptionSection
> > > [3] Open Virtualization Format Specification (DSP0243) Version 2.1.1,
> > > Chapter 9.5.1 -- Property elements
> > >
> > > --
> > > Tomáš Golembiovský <tgolembi at redhat.com>
> > >
> > > _______________________________________________
> > > Libguestfs mailing list
> > > Libguestfs at redhat.com
> > > https://listman.redhat.com/mailman/listinfo/libguestfs
> >
> > --
> > Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
> > Read my programming and virtualization blog: http://rwmj.wordpress.com
> > libguestfs lets you edit virtual machines. Supports shell scripting,
> > bindings from many languages. http://libguestfs.org
> >
>
> --
> Tomáš Golembiovský <tgolembi at redhat.com>
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW
More information about the Libguestfs
mailing list