Bug 1839808

Summary: Configuring 'e1000e' VIF type results in 'UnsupportedHardware' exception
Product: Red Hat OpenStack Reporter: Stan Toporek <stoporek>
Component: openstack-novaAssignee: Stephen Finucane <stephenfin>
Status: CLOSED ERRATA QA Contact: OSP DFG:Compute <osp-dfg-compute>
Severity: medium Docs Contact:
Priority: medium    
Version: 13.0 (Queens)CC: ailan, amoralej, dasmith, eglynn, jhakimra, kchamart, knoel, lyarwood, mdean, sbauza, sgordon, stephenfin, vromanso, yvugenfi
Target Milestone: z13Keywords: Patch, Triaged, ZStream
Target Release: 13.0 (Queens)   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: openstack-nova-17.0.13-21.el7ost Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-10-28 18:32:07 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Stan Toporek 2020-05-25 15:55:00 UTC
Description of problem:
Instance failed to spawn: UnsupportedHardware: Requested hardware 'e1000e' is not supported by the 'kvm' virt driver

Version-Release number of selected component (if applicable):
qemu/kvm version 2.12.0-18.el7_6.1

How reproducible:
Every time you try and run a windows server 2012 or windows server 2016

Steps to Reproduce:
1.Start win2012 instance
2.
3.

Actual results:
2020-05-22 16:54:52.886 1 INFO nova.virt.libvirt.driver [req-25aeea48-0db8-4d1e-bcf0-8eab4ae44a79 60ff6613541a554c5924cd66912b877b50ce354929ca546d4ea13210f084095c d441429d70a04daf869a3d701460c712 - b9cfb7d35ccf4d2f877dbf533b4c764d b9cfb7d35ccf4d2f877dbf533b4c764d] Configuring timezone for windows instance to localtime
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [req-25aeea48-0db8-4d1e-bcf0-8eab4ae44a79 60ff6613541a554c5924cd66912b877b50ce354929ca546d4ea13210f084095c d441429d70a04daf869a3d701460c712 - b9cfb7d35ccf4d2f877dbf533b4c764d b9cfb7d35ccf4d2f877dbf533b4c764d] [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df] Instance failed to spawn: UnsupportedHardware: Requested hardware 'e1000e' is not supported by the 'kvm' virt driver
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df] Traceback (most recent call last):
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]   File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 2273, in _build_resources
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]     yield resources
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]   File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 2053, in _build_and_run_instance
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]     block_device_info=block_device_info)
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 3110, in spawn
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]     mdevs=mdevs)
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 5429, in _get_guest_xml
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]     context, mdevs)
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 5226, in _get_guest_config
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]     flavor, virt_type, self._host)
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/vif.py", line 680, in get_config
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]     vnic_type)
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/vif.py", line 640, in _get_config_os_vif
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]     host)
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]   File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/vif.py", line 156, in get_base_config
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]     virt=virt_type)
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df] UnsupportedHardware: Requested hardware 'e1000e' is not supported by the 'kvm' virt driver
2020-05-22 16:54:53.266 1 ERROR nova.compute.manager [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df]
2020-05-22 16:54:53.268 1 INFO nova.compute.manager [req-25aeea48-0db8-4d1e-bcf0-8eab4ae44a79 60ff6613541a554c5924cd66912b877b50ce354929ca546d4ea13210f084095c d441429d70a04daf869a3d701460c712 - b9cfb7d35ccf4d2f877dbf533b4c764d b9cfb7d35ccf4d2f877dbf533b4c764d] [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df] Terminating instance
2020-05-22 16:54:53.302 1 INFO nova.virt.libvirt.driver [-] [instance: dfc6f01a-d5d4-4bbe-a2d9-dd89b89f64df] Instance destroyed successfully.
2020-05-22 16:54:53.401 1 INFO os_vif [req-25aeea48-0db8-4d1e-bcf0-8eab4ae44a79 60ff6613541a554c5924cd66912b877b50ce354929ca546d4ea13210f084095c d441429d70a04daf869a3d701460c712 - b9cfb7d35ccf4d2f877dbf533b4c764d b9cfb7d35ccf4d2f877dbf533b4c764d] Successfully unplugged vif VIFBridge(active=False,address=fa:16:3e:26:c7:24,bridge_name='qbr783e39d1-d9',has_traffic_filtering=True,id=783e39d1-d9af-4e69-9ad1-d3835a48529c,network=Network(e15c9d6c-6fa6-45b1-a39f-49e5ff071a56),plugin='ovs',port_profile=VIFPortProfileOpenVSwitch,preserve_on_delete=False,vif_name='tap783e39d1-d9')

Expected results:
Running Windows server 2012 instance

Additional info:

Comment 2 Yvugenfi@redhat.com 2020-06-07 07:16:25 UTC
It looks like nova internal test for supported network device models in qemu\kvm is failing:

Those are the supported models (E1000E is not one of them for some reason):
nova/virt/libvirt/vif.py:92

SUPPORTED_VIF_MODELS = {
    'qemu': [
        network_model.VIF_MODEL_VIRTIO,
        network_model.VIF_MODEL_NE2K_PCI,
        network_model.VIF_MODEL_PCNET,
        network_model.VIF_MODEL_RTL8139,
        network_model.VIF_MODEL_E1000,
        network_model.VIF_MODEL_LAN9118,
        network_model.VIF_MODEL_SPAPR_VLAN],
    'kvm': [
        network_model.VIF_MODEL_VIRTIO,
        network_model.VIF_MODEL_NE2K_PCI,
        network_model.VIF_MODEL_PCNET,
        network_model.VIF_MODEL_RTL8139,
        network_model.VIF_MODEL_E1000,
        network_model.VIF_MODEL_SPAPR_VLAN],
    'xen': [
        network_model.VIF_MODEL_NETFRONT,
        network_model.VIF_MODEL_NE2K_PCI,
        network_model.VIF_MODEL_PCNET,
        network_model.VIF_MODEL_RTL8139,
        network_model.VIF_MODEL_E1000],
    'lxc': [],
    'uml': [],
    'parallels': [
        network_model.VIF_MODEL_VIRTIO,
        network_model.VIF_MODEL_RTL8139,
        network_model.VIF_MODEL_E1000],
}

Then, I assume, for some reason, Windows Server guests are configured to use e1000e and are failing the following test:
nova/virt/libvirt/vif.py:199

 if not is_vif_model_valid_for_virt(virt_type, model):
            raise exception.UnsupportedHardware(model=model, virt=virt_type)


Also, it looks like there was some similar case (it is marked as “Solution verified”). Unfortunately, I don’t have the credentials to access full information.
https://access.redhat.com/solutions/3947641

So either e1000e should be added as a supported network device for QEMU\KVM or Window Server configuration should be edited to use virtio or e1000.

Comment 4 Stephen Finucane 2020-06-10 10:24:06 UTC
This appears to a valid issue. For reference, based on a quick bit of research, libosinfo is configuring VIF type because Windows does not provide virtio drivers out-of-the-box. The e1000e is the PCIe variant of the e1000 NIC and therefore requires the Q35 machine type. Since libvirt supports this for the QEMU/KVM backend, there should be no reason nova does not. The fact we don't appears to have been an oversight.

Comment 5 Stephen Finucane 2020-06-10 10:33:37 UTC
(In reply to Yan Vugenfirer from comment #2)
...
> Also, it looks like there was some similar case (it is marked as “Solution
> verified”). Unfortunately, I don’t have the credentials to access full
> information.
> https://access.redhat.com/solutions/3947641

The solution suggests editing instance records in the DB as a workaround. This should be a last-resort and I'll seek to have this advice removed. The correct solution is to address the issue at root, as you've suggested. This is in progress now.

Comment 13 errata-xmlrpc 2020-10-28 18:32:07 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (openstack-nova bug fix advisory), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2020:4393