diff --git a/tests/cli-test-xml/compare/virt-install-many-devices.xml b/tests/cli-test-xml/compare/virt-install-many-devices.xml
index 7b9bb7c74..a45d87b3b 100644
--- a/tests/cli-test-xml/compare/virt-install-many-devices.xml
+++ b/tests/cli-test-xml/compare/virt-install-many-devices.xml
@@ -227,6 +227,7 @@
+
@@ -389,6 +390,7 @@
+
diff --git a/tests/clitest.py b/tests/clitest.py
index 693659878..279cb8936 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -500,10 +500,12 @@ c.add_compare(""" \
\
--smartcard passthrough,type=spicevmc \
--smartcard type=host \
+--smartcard default \
\
--redirdev usb,type=spicevmc \
--redirdev usb,type=tcp,server=localhost:4000 \
--redirdev usb,type=tcp,server=127.0.0.1:4002,boot_order=3 \
+--redirdev default \
\
--rng egd,backend_host=127.0.0.1,backend_service=8000,backend_type=tcp \
\
diff --git a/virtManager/domain.py b/virtManager/domain.py
index 236d888e8..f62ef254f 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -897,7 +897,8 @@ class vmmDomain(vmmLibvirtObject):
if model != _SENTINEL:
editdev.mode = model
- editdev.type = editdev.TYPE_DEFAULT
+ editdev.type = None
+ editdev.type = editdev.default_type()
if do_hotplug:
self.hotplug(device=editdev)
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 3b7b8dbc7..fe70547a8 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -2384,8 +2384,8 @@ class ParserSmartcard(VirtCLIParser):
_register_virt_parser(ParserSmartcard)
_add_device_address_args(ParserSmartcard)
-ParserSmartcard.add_arg("mode", "mode")
-ParserSmartcard.add_arg("type", "type")
+ParserSmartcard.add_arg("mode", "mode", ignore_default=True)
+ParserSmartcard.add_arg("type", "type", ignore_default=True)
######################
@@ -2409,8 +2409,8 @@ class ParserRedir(VirtCLIParser):
_register_virt_parser(ParserRedir)
_add_device_address_args(ParserRedir)
-ParserRedir.add_arg("bus", "bus")
-ParserRedir.add_arg("type", "type")
+ParserRedir.add_arg("bus", "bus", ignore_default=True)
+ParserRedir.add_arg("type", "type", ignore_default=True)
ParserRedir.add_arg("boot.order", "boot_order")
ParserRedir.add_arg(None, "server", cb=ParserRedir.set_server_cb)
diff --git a/virtinst/devices/memballoon.py b/virtinst/devices/memballoon.py
index 63c0e4411..573247d71 100644
--- a/virtinst/devices/memballoon.py
+++ b/virtinst/devices/memballoon.py
@@ -13,9 +13,13 @@ from ..xmlbuilder import XMLProperty
class DeviceMemballoon(Device):
XML_NAME = "memballoon"
- MODEL_DEFAULT = "default"
- MODELS = ["virtio", "xen", "none"]
+ model = XMLProperty("./@model")
- model = XMLProperty("./@model",
- default_name=MODEL_DEFAULT,
- default_cb=lambda s: "virtio")
+
+ ##################
+ # Default config #
+ ##################
+
+ def set_defaults(self, guest):
+ if not self.model:
+ self.model = "virtio"
diff --git a/virtinst/devices/redirdev.py b/virtinst/devices/redirdev.py
index 01bc50966..e90f50089 100644
--- a/virtinst/devices/redirdev.py
+++ b/virtinst/devices/redirdev.py
@@ -13,12 +13,6 @@ from ..xmlbuilder import XMLProperty
class DeviceRedirdev(Device):
XML_NAME = "redirdev"
- BUS_DEFAULT = "default"
- BUSES = ["usb"]
-
- TYPE_DEFAULT = "default"
- TYPES = ["tcp", "spicevmc"]
-
@staticmethod
def pretty_type(typ):
if typ == "tcp":
@@ -36,12 +30,19 @@ class DeviceRedirdev(Device):
_XML_PROP_ORDER = ["bus", "type"]
- bus = XMLProperty("./@bus",
- default_cb=lambda s: "usb",
- default_name=BUS_DEFAULT)
- type = XMLProperty("./@type",
- default_cb=lambda s: "spicevmc",
- default_name=TYPE_DEFAULT)
+ bus = XMLProperty("./@bus")
+ type = XMLProperty("./@type")
host = XMLProperty("./source/@host")
service = XMLProperty("./source/@service", is_int=True)
+
+
+ ##################
+ # Default config #
+ ##################
+
+ def set_defaults(self, guest):
+ if not self.bus:
+ self.bus = "usb"
+ if not self.type:
+ self.type = "spicevmc"
diff --git a/virtinst/devices/rng.py b/virtinst/devices/rng.py
index 184003042..e525b186b 100644
--- a/virtinst/devices/rng.py
+++ b/virtinst/devices/rng.py
@@ -14,15 +14,12 @@ class DeviceRng(Device):
TYPE_RANDOM = "random"
TYPE_EGD = "egd"
- TYPES = [TYPE_RANDOM, TYPE_EGD]
BACKEND_TYPE_UDP = "udp"
BACKEND_TYPE_TCP = "tcp"
- BACKEND_TYPES = [BACKEND_TYPE_UDP, BACKEND_TYPE_TCP]
BACKEND_MODE_BIND = "bind"
BACKEND_MODE_CONNECT = "connect"
- BACKEND_MODES = [BACKEND_MODE_BIND, BACKEND_MODE_CONNECT]
@staticmethod
def get_pretty_type(rng_type):
@@ -86,7 +83,7 @@ class DeviceRng(Device):
return val
type = XMLProperty("./backend/@model")
- model = XMLProperty("./@model", default_cb=lambda s: "virtio")
+ model = XMLProperty("./@model")
backend_type = XMLProperty("./backend/@type")
@@ -104,3 +101,12 @@ class DeviceRng(Device):
rate_period = XMLProperty("./rate/@period")
device = XMLProperty("./backend[@model='random']")
+
+
+ ##################
+ # Default config #
+ ##################
+
+ def set_defaults(self, guest):
+ if not self.model:
+ self.model = "virtio"
diff --git a/virtinst/devices/smartcard.py b/virtinst/devices/smartcard.py
index 499ef7495..d0eab8bcb 100644
--- a/virtinst/devices/smartcard.py
+++ b/virtinst/devices/smartcard.py
@@ -12,25 +12,21 @@ from ..xmlbuilder import XMLProperty
class DeviceSmartcard(Device):
XML_NAME = "smartcard"
-
- # Default models list
- MODE_DEFAULT = "default"
- MODES = ["passthrough", "host-certificates", "host"]
-
- TYPE_DEFAULT = "default"
- TYPES = ["tcp", "spicevmc", "default"]
-
-
_XML_PROP_ORDER = ["mode", "type"]
- mode = XMLProperty("./@mode",
- default_cb=lambda s: "passthrough",
- default_name=MODE_DEFAULT)
+ mode = XMLProperty("./@mode")
+ type = XMLProperty("./@type")
- def _default_type(self):
- if self.mode == self.MODE_DEFAULT or self.mode == "passthrough":
- return "spicevmc"
- return "tcp"
- type = XMLProperty("./@type",
- default_cb=_default_type,
- default_name=TYPE_DEFAULT)
+
+ ##################
+ # Default config #
+ ##################
+
+ def default_type(self):
+ return self.mode == "passthrough" and "spicevmc" or "tcp"
+
+ def set_defaults(self, guest):
+ if not self.mode:
+ self.mode = "passthrough"
+ if not self.type:
+ self.type = self.default_type()