addhardware: panic: default to asking libvirt for default model

Drop our hardcoded model lists, and just ask libvirt to fill in
a model for us. Add an entry to the combo box so users can type
in a non-default value if they want one.

Long term libvirt should be providing all this info to us via
domcapabilities

Signed-off-by: Cole Robinson <crobinso@redhat.com>
This commit is contained in:
Cole Robinson 2024-11-12 09:55:20 -05:00
parent ebeb80073e
commit c5a4664676
4 changed files with 12 additions and 67 deletions

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 --> <!-- Generated with glade 3.40.0 -->
<interface> <interface>
<requires lib="gtk+" version="3.22"/> <requires lib="gtk+" version="3.22"/>
<object class="GtkAdjustment" id="adjustment1"> <object class="GtkAdjustment" id="adjustment1">
@ -1294,7 +1294,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<!-- n-columns=3 n-rows=3 --> <!-- n-columns=2 n-rows=1 -->
<object class="GtkGrid" id="grid2"> <object class="GtkGrid" id="grid2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -1318,33 +1318,18 @@
<object class="GtkComboBox" id="panic-model"> <object class="GtkComboBox" id="panic-model">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="has-entry">True</property>
<child internal-child="entry">
<object class="GtkEntry">
<property name="can-focus">True</property>
</object>
</child>
</object> </object>
<packing> <packing>
<property name="left-attach">1</property> <property name="left-attach">1</property>
<property name="top-attach">0</property> <property name="top-attach">0</property>
</packing> </packing>
</child> </child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child internal-child="accessible"> <child internal-child="accessible">
<object class="AtkObject" id="grid2-atkobject"> <object class="AtkObject" id="grid2-atkobject">
<property name="AtkObject::accessible-name">panic-tab</property> <property name="AtkObject::accessible-name">panic-tab</property>

View File

@ -270,8 +270,7 @@ class vmmAddHardware(vmmGObjectUI):
True, None) True, None)
add_hw_option(_("RNG"), "system-run", PAGE_RNG, True, None) add_hw_option(_("RNG"), "system-run", PAGE_RNG, True, None)
add_hw_option(_("Panic Notifier"), "system-run", PAGE_PANIC, add_hw_option(_("Panic Notifier"), "system-run", PAGE_PANIC,
bool(DevicePanic.get_models(self.vm.get_xmlobj())), True, None)
_("Not supported for this hypervisor/libvirt/arch combination."))
add_hw_option(_("VirtIO VSOCK"), "network-idle", PAGE_VSOCK, add_hw_option(_("VirtIO VSOCK"), "network-idle", PAGE_VSOCK,
self.vm.is_hvm(), self.vm.is_hvm(),
_("Not supported for this hypervisor/libvirt/arch combination.")) _("Not supported for this hypervisor/libvirt/arch combination."))
@ -512,16 +511,6 @@ class vmmAddHardware(vmmGObjectUI):
} }
return bus_mappings.get(bus, bus) return bus_mappings.get(bus, bus)
@staticmethod
def panic_pretty_model(val):
labels = {
DevicePanic.MODEL_ISA: _("ISA"),
DevicePanic.MODEL_PSERIES: _("pSeries"),
DevicePanic.MODEL_HYPERV: _("Hyper-V"),
DevicePanic.MODEL_S390: _("s390"),
}
return labels.get(val, val)
@staticmethod @staticmethod
def rng_pretty_type(val): def rng_pretty_type(val):
labels = { labels = {
@ -871,12 +860,8 @@ class vmmAddHardware(vmmGObjectUI):
def _build_panic_model_combo(self): def _build_panic_model_combo(self):
values = [] values = [[None, _("Hypervisor default")]]
for m in DevicePanic.get_models(self.vm.get_xmlobj()): uiutil.build_simple_combo(self.widget("panic-model"), values)
values.append([m, vmmAddHardware.panic_pretty_model(m)])
default = DevicePanic.get_default_model(self.vm.get_xmlobj())
uiutil.build_simple_combo(self.widget("panic-model"), values, default_value=default)
def _build_controller_type_combo(self): def _build_controller_type_combo(self):

View File

@ -2058,9 +2058,7 @@ class vmmDetails(vmmGObjectUI):
self.tpmdetails.set_dev(tpmdev) self.tpmdetails.set_dev(tpmdev)
def _refresh_panic_page(self, dev): def _refresh_panic_page(self, dev):
model = dev.model or "isa" self.widget("panic-model").set_text(dev.model or "")
pmodel = vmmAddHardware.panic_pretty_model(model)
self.widget("panic-model").set_text(pmodel)
def _refresh_rng_page(self, dev): def _refresh_rng_page(self, dev):
is_random = dev.backend_model == "random" is_random = dev.backend_model == "random"

View File

@ -12,11 +12,6 @@ from ..xmlbuilder import XMLProperty
class DevicePanic(Device): class DevicePanic(Device):
XML_NAME = "panic" XML_NAME = "panic"
MODEL_ISA = "isa"
MODEL_PSERIES = "pseries"
MODEL_HYPERV = "hyperv"
MODEL_S390 = "s390"
model = XMLProperty("./@model") model = XMLProperty("./@model")
set_stub = XMLProperty(".", is_bool=True) set_stub = XMLProperty(".", is_bool=True)
@ -25,24 +20,6 @@ class DevicePanic(Device):
# Default config # # Default config #
################## ##################
@staticmethod
def get_models(guest):
if guest.os.is_x86():
return [DevicePanic.MODEL_ISA,
DevicePanic.MODEL_HYPERV]
elif guest.os.is_pseries():
return [DevicePanic.MODEL_PSERIES]
elif guest.os.is_s390x():
return [DevicePanic.MODEL_S390]
return []
@staticmethod
def get_default_model(guest):
models = DevicePanic.get_models(guest)
if models:
return models[0]
return None
def set_defaults(self, guest): def set_defaults(self, guest):
if not self.address.type and self.address.iobase: if not self.address.type and self.address.iobase:
self.address.type = "isa" self.address.type = "isa"