[virt-tools-list] [PATCH virt-manager] cli: add codec support

Anya Harter aharter at redhat.com
Mon Jun 11 15:48:30 UTC 2018


Add codec support to virt-install so that it can accommodate
multiple instances of codec configuration.

The commandline argument:

  --sound codec0.type=micro,codec1.type=duplex,codec2.type=output

maps to the sound XML below:

    <sound model="es1370">
      <codec type="micro"/>
      <codec type="duplex"/>
      <codec type="output"/>
    </sound>

Signed-off-by: Anya Harter <aharter at redhat.com>
---
 .../compare/virt-install-singleton-config-2.xml    | 10 ++++++++++
 tests/clitest.py                                   |  1 +
 virtinst/cli.py                                    |  9 +++++++++
 virtinst/devices/sound.py                          | 14 +++++++++++++-
 4 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml b/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
index ec36f215..f4cd21ab 100644
--- a/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
+++ b/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
@@ -144,6 +144,11 @@
       </backend>
     </tpm>
     <graphics type="vnc" port="-1"/>
+    <sound model="ich6">
+      <codec type="micro"/>
+      <codec type="duplex"/>
+      <codec type="output"/>
+    </sound>
     <watchdog model="ib700" action="pause"/>
     <memballoon model="virtio"/>
     <rng model="virtio">
@@ -313,6 +318,11 @@
       </backend>
     </tpm>
     <graphics type="vnc" port="-1"/>
+    <sound model="ich6">
+      <codec type="micro"/>
+      <codec type="duplex"/>
+      <codec type="output"/>
+    </sound>
     <watchdog model="ib700" action="pause"/>
     <memballoon model="virtio"/>
     <rng model="virtio">
diff --git a/tests/clitest.py b/tests/clitest.py
index c84156f9..1985c32d 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -445,6 +445,7 @@ cache.mode=emulate,cache.level=3 \
 --controller usb3 \
 --controller virtio-scsi \
 --graphics vnc \
+--sound codec0.type=micro,codec1.type=duplex,codec2.type=output \
 --filesystem /foo/source,/bar/target \
 --memballoon virtio \
 --watchdog ib700,action=pause \
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 0bee94a9..00c4f1b4 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -2754,9 +2754,18 @@ class ParserSound(VirtCLIParser):
             return
         return VirtCLIParser._parse(self, inst)
 
+    def codec_find_inst_cb(self, *args, **kwargs):
+        cliarg = "codec"  # codec[0-9]*
+        objpropname = "codecs"
+        cb = self._make_find_inst_cb(cliarg, objpropname)
+        return cb(*args, **kwargs)
+
 _register_virt_parser(ParserSound)
 _add_device_address_args(ParserSound)
 ParserSound.add_arg("model", "model", ignore_default=True)
+# Options for sound.codecs config
+ParserSound.add_arg("type", "codec[0-9]*.type",
+                  find_inst_cb=ParserSound.codec_find_inst_cb)
 
 
 #####################
diff --git a/virtinst/devices/sound.py b/virtinst/devices/sound.py
index e0f710a8..7ac50914 100644
--- a/virtinst/devices/sound.py
+++ b/virtinst/devices/sound.py
@@ -6,7 +6,17 @@
 # See the COPYING file in the top-level directory.
 
 from .device import Device
-from ..xmlbuilder import XMLProperty
+from ..xmlbuilder import XMLBuilder, XMLProperty, XMLChildProperty
+
+
+class _Codec(XMLBuilder):
+    """
+    Class for generating <sound> child <codec> XML
+    """
+    XML_NAME = "codec"
+    _XML_PROP_ORDER = ["type"]
+
+    type = XMLProperty("./@type")
 
 
 class DeviceSound(Device):
@@ -25,3 +35,5 @@ class DeviceSound(Device):
     model = XMLProperty("./@model",
                         default_cb=lambda s: "es1370",
                         default_name=MODEL_DEFAULT)
+
+    codecs = XMLChildProperty(_Codec)
-- 
2.17.1




More information about the virt-tools-list mailing list