[openstack-dev] [nova] FreeBSD host support, round 2

Roman Bogorodskiy novel at FreeBSD.org
Fri Jun 12 13:36:04 UTC 2015

  Daniel P. Berrange wrote:

> On Tue, Jun 09, 2015 at 07:52:39PM +0300, Roman Bogorodskiy wrote:
> > Hi,
> > 
> > Few months ago I've started a discussion on FreeBSD host support for
> > OpenStack. [1] At a result of discussion it was figured out that there
> > are a number of limitations, mainly on the BHyVe (the FreeBSD hypervisor)
> > side, that make the effort not feasible.
> Do you still intend to add the missing features to BHyve to let it be
> supported in Nova eventually too ?

As I don't take part in bhyve development, it's hard for me to give a
detailed answer on that. I know that bhyve developers are
planning/working on some important improvements like UEFI support,
moving to single step guest boot and some others. I'm just trying to
keep libvirt/bhyve driver up to date.

> > However, some things changed since then. Specifically, FreeBSD's got Xen
> > dom0 support. [2] In context of OpenStack deployment that has a number of
> > benefits over bhyve. Specifically:
> > 
> >  * The stack is more mature and feature-rich
> >  * The toolstack is here already: libxl is available through the FreeBSD
> >    ports tree, libvirt/libxl works there with minimal modifications
> >    (already available in the git master)
> >  * OpenStack libvirt/libxl driver is already here
> > 
> > I was able to setup a proof-of-concept environment on FreeBSD that
> > required quite a small amount of modifications required in OpenStack:
> > 
> >  * Glance and Keystone didn't require any changes
> >  * Nove required some minor modifications mainly in the linux_net.py
> >    area
> > 
> > The summary of Nova modifications:
> > 
> >  * I had to implement FreeBSD version of linux_net.LinuxNetInterfaceDriver.
> >    It currently doesn't support vlans though. 
> > 
> >    https://github.com/novel/bsdstack/blob/master/bsdstack/nova/network/freebsd_net.py
> > 
> >    I keep it as an external package and configure Nova to use it through
> >    linuxnet_interface_driver config option in nova.conf
> >  * I had to create a stub for the IptablesManager class. I also had to
> >    add a config option to be able to override class for that in a way
> >    similar to interface driver.
> >  * I had to fix a minor interface incapability for NullL3 stub, that's
> >    already in the Nova tree: https://review.openstack.org/#/c/189001/
> >  * I added a hack to use 'phy' driver in domain's xml for disks because
> >    for some reason driver='qemu' results in guests not able to access
> >    disk devices (tried both FreeBSD and Linux guests). Need to
> >    investigate
> >  * Dropped some LinuxBridgeInterfaceDriver hardcodes in
> >    virt.libvirt.vif.
> > 
> > Here's a quick overview of my changes:
> > 
> > https://github.com/novel/nova/compare/stable/kilo...novel:stable/kilo_freebsd?expand=1
> > 
> > With this changes I was able to get things working, i.e. VM starting,
> > obtaining IP addresses (with nova-network configured with FlatDHCP) etc.
> > 
> > Having that said I'm wondering if community is interested in integrating
> > FreeBSD support through libvirt/libxl into mainline? Obviously, the
> > changes I provided are shortcuts and the appropriate specs should be
> > create with proposals of proper designs, not quick hacks like that.
> I'd be happy to see FreeBSD support for any of the libvirt hypervisors
> added to Nova. As you point out, the changes to the libvirt code are
> going to be pretty minimal for libxl, so there's not going to be any
> appreciable ongoing maint burden for this. So I see no serious reason
> to reject the changes to Nova libvirt driver code for libxl+FreeBSD.
> The fun bit will be the changes to non-libvirt code in nova...
> > The biggest part of the unportable code, just like it was in bhyve case,
> > is still linux_net.py, so probably it makes sense to revive the old
> > spec:
> > 
> > https://review.openstack.org/#/c/127827/
> > 
> > TBH, IMHO linux_net.py could have a refactor regardless of FreeBSD
> > support. It's approx. 2000 lines long, contains a lot of stuff like
> > dnsmasq handling code, interface handing code and firewall management
> > that could have their own place.
> Yes, that network setup code is really awful and I'd love to see
> it refactored regardless of FreeBSD support.
> With my crystal ball, probably the main question wrt any kind of
> FreeBSD support will be that of 3rd party CI testing. I don't know
> whether there is any company backing your work who has resources
> to provide a CI system, or whether FreeBSD project can manage it
> independently ?

I do all my FreeBSD related activities in my free time, in other words
it's not backed by any company. Anyway, I think it would not be a
problem to arrange virtual machines for running unit tests. As for
integration testing it's going to be harder because it'd need a real
hardware and I need to figure out how I could obtain one.

> The refactoring of the linux_net.py code could be done even without
> CI support of course - that would only block the second part where
> you actually add a FreeBSD implementation

That sounds good. I'll create a new spec for linux_net.py refactoring

As a parallel activity, I'll try to create a CI that would run only unit
tests for the key projects at this point. There are some issues with
that as well, because I have to install some patched versions of the
packages that are not usable as is from pypi.

That sounds like a realistic plan for Liberty to me. If this proofs
itself viable, I guess it'd be time to look into setting up integration
tests and pushing the actual FreeBSD code for the M-release.

Roman Bogorodskiy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20150612/bd8f3e8f/attachment.pgp>

More information about the OpenStack-dev mailing list