mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-09 19:56:48 +00:00
fix(instances): the create page offers the UEFI loader of the chosen machine
create_instance passed the loader list where find_uefi_path_for_arch expects the machine type. The domain capabilities were then read for the default machine (pc) instead of the chosen one: on a RHEL host a q35 VM was offered /usr/share/OVMF/OVMF_CODE.secboot.fd, which q35 does not list, instead of /usr/share/edk2/ovmf/OVMF_CODE.fd. The machine type is passed now. The page also read dom_caps["loader_enums"] into an unused variable; on a host without loader support the key is missing and the page failed with a KeyError. The line is removed. A unit test covers the call and the host without loader support (it fails on the previous code). A live test creates a q35 VM with the offered UEFI firmware, checks that libvirt lists that loader for q35 and starts the VM; it fails on the previous code.
This commit is contained in:
parent
16e1a334d0
commit
cdbff38223
3 changed files with 45 additions and 2 deletions
|
|
@ -11,6 +11,7 @@ from computes.models import Compute
|
|||
from django.contrib.auth import get_user_model
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
from lxml import etree
|
||||
from vrtManager.connection import connection_manager
|
||||
|
||||
from . import livetest
|
||||
|
|
@ -111,6 +112,22 @@ class LiveCreateTestCase(TestCase):
|
|||
self.assertTrue(self.domain_exists(P + "cr-ok"))
|
||||
self.assertEqual(len(self.volumes()), 1)
|
||||
|
||||
def test_offered_uefi_firmware_boots_on_q35(self):
|
||||
page = self.client.get(reverse("instances:create_instance", args=[self.compute.id, "x86_64", "q35"]))
|
||||
uefi = [f for f in page.context["firmwares"] if f.startswith("UEFI")]
|
||||
self.assertTrue(uefi, "no UEFI firmware offered for q35")
|
||||
|
||||
self.create("cr-uefi-ok", firmware=uefi[0])
|
||||
|
||||
dom = self.conn.lookupByName(P + "cr-uefi-ok")
|
||||
loader = etree.fromstring(dom.XMLDesc(0)).findtext("os/loader")
|
||||
self.assertEqual(loader, uefi[0].split(":", 1)[1].strip())
|
||||
# Listed by libvirt for q35, so the domain starts with it
|
||||
caps = etree.fromstring(self.conn.getDomainCapabilities(None, "x86_64", "q35", "kvm"))
|
||||
self.assertIn(loader, caps.xpath("os/loader/value/text()"))
|
||||
dom.create()
|
||||
self.assertTrue(dom.isActive())
|
||||
|
||||
def test_api_rejected_definition_removes_the_new_disk(self):
|
||||
response = self.client.post(
|
||||
f"/api/v1/computes/{self.compute.id}/instances/create/x86_64/q35/",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue