mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
devicepanic: use model instead of address.type
There are multiple models of the panic device, the address type is only
one and is valid only for "isa" model.
To not break the virt-install/virt-xml the command line parser needs to
be updated. Before this patch there was only one parameter that
configured the "iobase". Now the first parameter configures a model
but to keep it backward compatible it follows these rules:
1. there is only one parameter and it matches known model:
--panic isa
<panic model='isa'>
<address iobase='0x505' type='isa'/>
</panic>
2. there is only one parameter and it doesn't match any model:
--panic 0x505
<panic model='isa'>
<address iobase='0x505' type='isa'/>
</panic>
3. there are two parameters:
--panic isa,iobase=0x505
<panic model='isa'>
<address iobase='0x505' type='isa'/>
</panic>
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
@@ -1589,7 +1589,7 @@ Use --rng=? to see a list of all available sub options. Complete details at L<ht
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=item B<--panic> OPTS
|
=item B<--panic> MODEL[,OPTS]
|
||||||
|
|
||||||
Attach a panic notifier device to the guest. For the recommended settings, use:
|
Attach a panic notifier device to the guest. For the recommended settings, use:
|
||||||
|
|
||||||
|
|||||||
@@ -369,7 +369,7 @@
|
|||||||
<source mode="connect" host="127.0.0.1" service="8000"/>
|
<source mode="connect" host="127.0.0.1" service="8000"/>
|
||||||
</backend>
|
</backend>
|
||||||
</rng>
|
</rng>
|
||||||
<panic>
|
<panic model="isa">
|
||||||
<address iobase="507" type="isa"/>
|
<address iobase="507" type="isa"/>
|
||||||
</panic>
|
</panic>
|
||||||
</devices>
|
</devices>
|
||||||
|
|||||||
35
tests/cli-test-xml/compare/virt-install-panic-default.xml
Normal file
35
tests/cli-test-xml/compare/virt-install-panic-default.xml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<domain type="kvm">
|
||||||
|
<name>foobar</name>
|
||||||
|
<uuid>00000000-1111-2222-3333-444444444444</uuid>
|
||||||
|
<memory>65536</memory>
|
||||||
|
<currentMemory>65536</currentMemory>
|
||||||
|
<vcpu>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch="x86_64">hvm</type>
|
||||||
|
<boot dev="hd"/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/>
|
||||||
|
<apic/>
|
||||||
|
</features>
|
||||||
|
<cpu mode="custom" match="exact">
|
||||||
|
<model>Opteron_G4</model>
|
||||||
|
</cpu>
|
||||||
|
<clock offset="utc">
|
||||||
|
<timer name="rtc" tickpolicy="catchup"/>
|
||||||
|
<timer name="pit" tickpolicy="delay"/>
|
||||||
|
<timer name="hpet" present="no"/>
|
||||||
|
</clock>
|
||||||
|
<pm>
|
||||||
|
<suspend-to-mem enabled="no"/>
|
||||||
|
<suspend-to-disk enabled="no"/>
|
||||||
|
</pm>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-kvm</emulator>
|
||||||
|
<controller type="usb" index="0" model="none"/>
|
||||||
|
<console type="pty"/>
|
||||||
|
<panic model="isa">
|
||||||
|
<address type="isa" iobase="0x505"/>
|
||||||
|
</panic>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
||||||
35
tests/cli-test-xml/compare/virt-install-panic-isa-iobase.xml
Normal file
35
tests/cli-test-xml/compare/virt-install-panic-isa-iobase.xml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<domain type="kvm">
|
||||||
|
<name>foobar</name>
|
||||||
|
<uuid>00000000-1111-2222-3333-444444444444</uuid>
|
||||||
|
<memory>65536</memory>
|
||||||
|
<currentMemory>65536</currentMemory>
|
||||||
|
<vcpu>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch="x86_64">hvm</type>
|
||||||
|
<boot dev="hd"/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/>
|
||||||
|
<apic/>
|
||||||
|
</features>
|
||||||
|
<cpu mode="custom" match="exact">
|
||||||
|
<model>Opteron_G4</model>
|
||||||
|
</cpu>
|
||||||
|
<clock offset="utc">
|
||||||
|
<timer name="rtc" tickpolicy="catchup"/>
|
||||||
|
<timer name="pit" tickpolicy="delay"/>
|
||||||
|
<timer name="hpet" present="no"/>
|
||||||
|
</clock>
|
||||||
|
<pm>
|
||||||
|
<suspend-to-mem enabled="no"/>
|
||||||
|
<suspend-to-disk enabled="no"/>
|
||||||
|
</pm>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-kvm</emulator>
|
||||||
|
<controller type="usb" index="0" model="none"/>
|
||||||
|
<console type="pty"/>
|
||||||
|
<panic model="isa">
|
||||||
|
<address iobase="0x505" type="isa"/>
|
||||||
|
</panic>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
||||||
35
tests/cli-test-xml/compare/virt-install-panic-isa.xml
Normal file
35
tests/cli-test-xml/compare/virt-install-panic-isa.xml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<domain type="kvm">
|
||||||
|
<name>foobar</name>
|
||||||
|
<uuid>00000000-1111-2222-3333-444444444444</uuid>
|
||||||
|
<memory>65536</memory>
|
||||||
|
<currentMemory>65536</currentMemory>
|
||||||
|
<vcpu>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch="x86_64">hvm</type>
|
||||||
|
<boot dev="hd"/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/>
|
||||||
|
<apic/>
|
||||||
|
</features>
|
||||||
|
<cpu mode="custom" match="exact">
|
||||||
|
<model>Opteron_G4</model>
|
||||||
|
</cpu>
|
||||||
|
<clock offset="utc">
|
||||||
|
<timer name="rtc" tickpolicy="catchup"/>
|
||||||
|
<timer name="pit" tickpolicy="delay"/>
|
||||||
|
<timer name="hpet" present="no"/>
|
||||||
|
</clock>
|
||||||
|
<pm>
|
||||||
|
<suspend-to-mem enabled="no"/>
|
||||||
|
<suspend-to-disk enabled="no"/>
|
||||||
|
</pm>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-kvm</emulator>
|
||||||
|
<controller type="usb" index="0" model="none"/>
|
||||||
|
<console type="pty"/>
|
||||||
|
<panic model="isa">
|
||||||
|
<address type="isa" iobase="0x505"/>
|
||||||
|
</panic>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
<rng model="virtio">
|
<rng model="virtio">
|
||||||
<backend model="random">/dev/random</backend>
|
<backend model="random">/dev/random</backend>
|
||||||
</rng>
|
</rng>
|
||||||
<panic>
|
<panic model="isa">
|
||||||
<address type="isa" iobase="0x505"/>
|
<address type="isa" iobase="0x505"/>
|
||||||
</panic>
|
</panic>
|
||||||
</devices>
|
</devices>
|
||||||
|
|||||||
@@ -140,7 +140,7 @@
|
|||||||
<source mode="connect" host="foo" service="708"/>
|
<source mode="connect" host="foo" service="708"/>
|
||||||
</backend>
|
</backend>
|
||||||
</rng>
|
</rng>
|
||||||
<panic>
|
<panic model="isa">
|
||||||
<address iobase="0x506" type="isa"/>
|
<address iobase="0x506" type="isa"/>
|
||||||
</panic>
|
</panic>
|
||||||
</devices>
|
</devices>
|
||||||
@@ -294,7 +294,7 @@
|
|||||||
<source mode="connect" host="foo" service="708"/>
|
<source mode="connect" host="foo" service="708"/>
|
||||||
</backend>
|
</backend>
|
||||||
</rng>
|
</rng>
|
||||||
<panic>
|
<panic model="isa">
|
||||||
<address iobase="0x506" type="isa"/>
|
<address iobase="0x506" type="isa"/>
|
||||||
</panic>
|
</panic>
|
||||||
</devices>
|
</devices>
|
||||||
|
|||||||
@@ -645,6 +645,15 @@ c.add_invalid("--disk source_pool=default-pool,source_volume=idontexist") # try
|
|||||||
c.add_invalid("--disk size=1 --security model=foo,type=bar") # Libvirt will error on the invalid security params, which should trigger the code path to clean up the disk images we created.
|
c.add_invalid("--disk size=1 --security model=foo,type=bar") # Libvirt will error on the invalid security params, which should trigger the code path to clean up the disk images we created.
|
||||||
|
|
||||||
|
|
||||||
|
################
|
||||||
|
# Panic device #
|
||||||
|
################
|
||||||
|
|
||||||
|
c = vinst.add_category("panic", "--connect %(URI-KVM)s --noautoconsole --import --disk none --graphics none --controller usb,model=none --network none")
|
||||||
|
c.add_compare("--panic default", "panic-default")
|
||||||
|
c.add_compare("--panic isa", "panic-isa")
|
||||||
|
c.add_compare("--panic isa,iobase=0x505", "panic-isa-iobase")
|
||||||
|
|
||||||
|
|
||||||
################################################
|
################################################
|
||||||
# Invalid devices that hit virtinst code paths #
|
# Invalid devices that hit virtinst code paths #
|
||||||
@@ -838,6 +847,7 @@ c.add_valid("--bridge mybr0 --mac 22:22:33:44:55:AF") # Old bridge w/ mac
|
|||||||
c.add_valid("--network bridge:mybr0,model=e1000") # --network bridge:
|
c.add_valid("--network bridge:mybr0,model=e1000") # --network bridge:
|
||||||
c.add_valid("--network network:default --mac RANDOM") # VirtualNetwork with a random macaddr
|
c.add_valid("--network network:default --mac RANDOM") # VirtualNetwork with a random macaddr
|
||||||
c.add_valid("--vnc --keymap=local") # --keymap local
|
c.add_valid("--vnc --keymap=local") # --keymap local
|
||||||
|
c.add_valid("--panic 0x505") # ISA panic with iobase specified
|
||||||
c.add_invalid("--nonetworks") # no networks
|
c.add_invalid("--nonetworks") # no networks
|
||||||
c.add_invalid("--graphics vnc --vnclisten 1.2.3.4") # mixing old and new
|
c.add_invalid("--graphics vnc --vnclisten 1.2.3.4") # mixing old and new
|
||||||
c.add_invalid("--network=FOO") # Nonexistent network
|
c.add_invalid("--network=FOO") # Nonexistent network
|
||||||
|
|||||||
@@ -1720,13 +1720,13 @@
|
|||||||
<property name="row_spacing">6</property>
|
<property name="row_spacing">6</property>
|
||||||
<property name="column_spacing">6</property>
|
<property name="column_spacing">6</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="panic-type-label">
|
<object class="GtkLabel" id="panic-model-label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="label" translatable="yes">Address _Type:</property>
|
<property name="label" translatable="yes">_Model:</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<property name="mnemonic_widget">panic-type</property>
|
<property name="mnemonic_widget">panic-model</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">0</property>
|
<property name="left_attach">0</property>
|
||||||
@@ -1734,7 +1734,7 @@
|
|||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkComboBox" id="panic-type">
|
<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>
|
||||||
</object>
|
</object>
|
||||||
|
|||||||
@@ -5660,13 +5660,13 @@ if you know what you are doing.</small></property>
|
|||||||
<property name="row_spacing">4</property>
|
<property name="row_spacing">4</property>
|
||||||
<property name="column_spacing">8</property>
|
<property name="column_spacing">8</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkLabel" id="label95">
|
<object class="GtkLabel" id="panic-model-label">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="margin_top">3</property>
|
<property name="margin_top">3</property>
|
||||||
<property name="margin_bottom">3</property>
|
<property name="margin_bottom">3</property>
|
||||||
<property name="label" translatable="yes">Address Type:</property>
|
<property name="label" translatable="yes">Model:</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">0</property>
|
<property name="left_attach">0</property>
|
||||||
@@ -5674,12 +5674,11 @@ if you know what you are doing.</small></property>
|
|||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<child>
|
<object class="GtkLabel" id="panic-model">
|
||||||
<object class="GtkLabel" id="panic-type">
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="halign">start</property>
|
<property name="halign">start</property>
|
||||||
<property name="label" translatable="yes">panic-address-type</property>
|
<property name="label" translatable="yes">panic-model</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
|
|||||||
@@ -317,8 +317,8 @@ class vmmAddHardware(vmmGObjectUI):
|
|||||||
self._build_rng_backend_mode_combo(combo)
|
self._build_rng_backend_mode_combo(combo)
|
||||||
|
|
||||||
# Panic widgets
|
# Panic widgets
|
||||||
combo = self.widget("panic-type")
|
combo = self.widget("panic-model")
|
||||||
self._build_panic_address_type(combo)
|
self._build_panic_models(combo)
|
||||||
|
|
||||||
# Controller widgets
|
# Controller widgets
|
||||||
combo = self.widget("controller-type")
|
combo = self.widget("controller-type")
|
||||||
@@ -976,13 +976,13 @@ class vmmAddHardware(vmmGObjectUI):
|
|||||||
self._build_combo_with_values(combo, types, default)
|
self._build_combo_with_values(combo, types, default)
|
||||||
|
|
||||||
|
|
||||||
def _build_panic_address_type(self, combo):
|
def _build_panic_models(self, combo):
|
||||||
types = []
|
models = []
|
||||||
for t in virtinst.VirtualPanicDevice.TYPES:
|
for m in virtinst.VirtualPanicDevice.MODELS:
|
||||||
types.append([t, virtinst.VirtualPanicDevice.get_pretty_type(t)])
|
models.append([m, virtinst.VirtualPanicDevice.get_pretty_model(m)])
|
||||||
|
|
||||||
self._build_combo_with_values(combo, types,
|
self._build_combo_with_values(combo, models,
|
||||||
virtinst.VirtualPanicDevice.ADDRESS_TYPE_ISA)
|
virtinst.VirtualPanicDevice.MODEL_ISA)
|
||||||
|
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
@@ -1755,11 +1755,11 @@ class vmmAddHardware(vmmGObjectUI):
|
|||||||
def _validate_page_panic(self):
|
def _validate_page_panic(self):
|
||||||
conn = self.conn.get_backend()
|
conn = self.conn.get_backend()
|
||||||
|
|
||||||
type = uiutil.get_list_selection(self.widget("panic-type"))
|
model = uiutil.get_list_selection(self.widget("panic-model"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self._dev = VirtualPanicDevice(conn)
|
self._dev = VirtualPanicDevice(conn)
|
||||||
self._dev.type = type
|
self._dev.model = model
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return self.err.val_err(_("Panic device parameter error"), e)
|
return self.err.val_err(_("Panic device parameter error"), e)
|
||||||
|
|
||||||
|
|||||||
@@ -2795,8 +2795,8 @@ class vmmDetails(vmmGObjectUI):
|
|||||||
if not dev:
|
if not dev:
|
||||||
return
|
return
|
||||||
|
|
||||||
ptyp = virtinst.VirtualPanicDevice.get_pretty_type(dev.type)
|
pmodel = virtinst.VirtualPanicDevice.get_pretty_model(dev.model)
|
||||||
self.widget("panic-type").set_text(ptyp)
|
self.widget("panic-model").set_text(pmodel)
|
||||||
|
|
||||||
def refresh_rng_page(self):
|
def refresh_rng_page(self):
|
||||||
dev = self.get_hw_selection(HW_LIST_COL_DEVICE)
|
dev = self.get_hw_selection(HW_LIST_COL_DEVICE)
|
||||||
|
|||||||
@@ -2518,15 +2518,26 @@ ParserMemballoon.add_arg("model", "model")
|
|||||||
class ParserPanic(VirtCLIParser):
|
class ParserPanic(VirtCLIParser):
|
||||||
cli_arg_name = "panic"
|
cli_arg_name = "panic"
|
||||||
objclass = VirtualPanicDevice
|
objclass = VirtualPanicDevice
|
||||||
remove_first = "iobase"
|
remove_first = "model"
|
||||||
|
compat_mode = False
|
||||||
|
|
||||||
def set_iobase_cb(self, inst, val, virtarg):
|
def set_model_cb(self, inst, val, virtarg):
|
||||||
if val == "default":
|
if self.compat_mode and val.startswith("0x"):
|
||||||
return
|
inst.model = VirtualPanicDevice.MODEL_ISA
|
||||||
inst.iobase = val
|
inst.iobase = val
|
||||||
|
else:
|
||||||
|
inst.model = val
|
||||||
|
|
||||||
|
def _parse(self, inst):
|
||||||
|
if (len(self.optstr.split(",")) == 1 and
|
||||||
|
not self.optstr.startswith("model=")):
|
||||||
|
self.compat_mode = True
|
||||||
|
return VirtCLIParser._parse(self, inst)
|
||||||
|
|
||||||
_register_virt_parser(ParserPanic)
|
_register_virt_parser(ParserPanic)
|
||||||
ParserPanic.add_arg(None, "iobase", cb=ParserPanic.set_iobase_cb)
|
ParserPanic.add_arg(None, "model", cb=ParserPanic.set_model_cb,
|
||||||
|
ignore_default=True)
|
||||||
|
ParserPanic.add_arg("iobase", "iobase")
|
||||||
|
|
||||||
|
|
||||||
######################################################
|
######################################################
|
||||||
|
|||||||
@@ -24,20 +24,31 @@ from .xmlbuilder import XMLProperty
|
|||||||
class VirtualPanicDevice(VirtualDevice):
|
class VirtualPanicDevice(VirtualDevice):
|
||||||
|
|
||||||
virtual_device_type = VirtualDevice.VIRTUAL_DEV_PANIC
|
virtual_device_type = VirtualDevice.VIRTUAL_DEV_PANIC
|
||||||
ADDRESS_TYPE_ISA = "isa"
|
|
||||||
TYPES = [ADDRESS_TYPE_ISA]
|
MODEL_DEFAULT = "default"
|
||||||
|
MODEL_ISA = "isa"
|
||||||
|
MODELS = [MODEL_ISA]
|
||||||
|
|
||||||
|
ISA_ADDRESS_TYPE = "isa"
|
||||||
IOBASE_DEFAULT = "0x505"
|
IOBASE_DEFAULT = "0x505"
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_pretty_type(panic_type):
|
def get_pretty_model(panic_model):
|
||||||
if panic_type == VirtualPanicDevice.ADDRESS_TYPE_ISA:
|
if panic_model == VirtualPanicDevice.MODEL_ISA:
|
||||||
return _("ISA")
|
return _("ISA")
|
||||||
return panic_type
|
return panic_model
|
||||||
|
|
||||||
|
def _get_default_address_type(self):
|
||||||
|
if self.iobase:
|
||||||
|
return VirtualPanicDevice.ISA_ADDRESS_TYPE
|
||||||
|
return None
|
||||||
|
|
||||||
|
model = XMLProperty("./@model",
|
||||||
|
default_cb=lambda s: VirtualPanicDevice.MODEL_ISA,
|
||||||
|
default_name=MODEL_DEFAULT)
|
||||||
type = XMLProperty("./address/@type",
|
type = XMLProperty("./address/@type",
|
||||||
default_cb=lambda s: s.ADDRESS_TYPE_ISA)
|
default_cb=_get_default_address_type)
|
||||||
iobase = XMLProperty("./address/@iobase",
|
iobase = XMLProperty("./address/@iobase",
|
||||||
default_cb=lambda s: s.IOBASE_DEFAULT)
|
default_cb=lambda s: s.IOBASE_DEFAULT)
|
||||||
|
|
||||||
VirtualPanicDevice.register_type()
|
VirtualPanicDevice.register_type()
|
||||||
|
|||||||
Reference in New Issue
Block a user