Can nova-lxd launch an virtual machine?

I saw below documents about nova-lxd:

The “nova-lxd” project provides an OpenStack Nova plugin that seemlessly integrates system containers into a regular OpenStack deployment.

With this, users will either get a virtual machine or a container, simply depending on what image or instance type they select. It’s completely transparent and works with the regular OpenStack APIs.

To learn more about LXD and OpenStack, take a look at our getting started with OpenStack page.

it says that users can get a virtual machine throw nova-lxd, how does this work?

OpenStack uses many small computers to separate and split the tasks.
These small computers can be Virtual Machines (VMs) or even containers.
When you configure OpenStack, you select whether it will be through VMs or containers.

To get OpenStack with LXD Containers, see

yes, I have built an OpenStack cluster with nova-lxd, it looks great by now

what the document makes me confused is that it tells that I can launch an virtual machine or a container depending on image format throw nova-lxd while I can only launch containers now.

My understanding of the state of things with nova-lxd is that you can have a mixed OpenStack deployment where some nodes run nova-lxd and some other run nova-libvirt (for kvm).

Then when a user deploys a container image they’ll get a container instance, if they deploy a VM image, they get a virtual machine.

I don’t believe you can have a host do both in a sane way as that’d seriously mess with nova’s scheduling abilities.

I understand now, as the nova has a retry-filter, it will try to launch instance(container or vm) on all available nova-compute nodes until one instance is launched successfully(or return failure after try all nodes).

Many thanks