diff --git a/instances/models.py b/instances/models.py
index 27dcc3d3..a9aede16 100644
--- a/instances/models.py
+++ b/instances/models.py
@@ -201,6 +201,24 @@ class Instance(models.Model):
def config_boot_order(self) -> dict:
return self.proxy.get_bootorder(config=True)
+ @cached_property
+ def config_boot_devices(self) -> list[dict]:
+ """The disks, CD-ROM drives and NICs the boot order editor lists, those
+ in the boot order first in their position; value is as posted, as in
+ "disk:vda"."""
+ order = [f"{d['dev']}:{d['target']}" for position, d in sorted(self.config_boot_order.items())]
+ devices = (
+ [{"value": f"disk:{d['dev']}", "name": d["dev"], "kind": _("Disk"), "source": d["image"]}
+ for d in self.config_disks]
+ + [{"value": f"cdrom:{d['dev']}", "name": d["dev"], "kind": _("CD-ROM"), "source": d["image"]}
+ for d in self.config_media]
+ + [{"value": f"network:{n['mac']}", "name": n["mac"], "kind": _("NIC"), "source": n["nic"]}
+ for n in self.config_networks]
+ )
+ for device in devices:
+ device["checked"] = device["value"] in order
+ return sorted(devices, key=lambda d: order.index(d["value"]) if d["checked"] else len(order))
+
@cached_property
def config_video_model(self) -> str | None:
"""Video model and console settings of the persistent definition,
diff --git a/instances/templates/instance.html b/instances/templates/instance.html
index f44ddd83..9a37acb6 100644
--- a/instances/templates/instance.html
+++ b/instances/templates/instance.html
@@ -226,63 +226,39 @@
});