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(a)redhat.com>
> >
> > _______________________________________________
> > Libguestfs mailing list
> > Libguestfs(a)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(a)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