Blame SOURCES/virt-manager-cli-Drop-clear_attr-property.patch

3d61c0
From 47900382a546f810d1b18d3db9806d63cc03f1d1 Mon Sep 17 00:00:00 2001
3d61c0
Message-Id: <47900382a546f810d1b18d3db9806d63cc03f1d1@dist-git>
3d61c0
From: Pavel Hrdina <phrdina@redhat.com>
3d61c0
Date: Wed, 21 Mar 2018 05:32:36 -0400
3d61c0
Subject: [PATCH] cli: Drop clear_attr property
3d61c0
3d61c0
From: Cole Robinson <crobinso@redhat.com>
3d61c0
3d61c0
It slightly complicates the generic machinery, and the one usage we
3d61c0
can handle directly
3d61c0
3d61c0
(cherry picked from commit 3b88bfb1ee81f5e8c39a1a95e99c28acbd778402)
3d61c0
3d61c0
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1550513
3d61c0
3d61c0
Reviewed-by: Cole Robinson <crobinso@redhat.com>
3d61c0
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
3d61c0
---
3d61c0
 .../virt-install-singleton-config-2.xml       |  4 +-
3d61c0
 tests/clitest.py                              |  2 +-
3d61c0
 virt-xml                                      | 17 +---
3d61c0
 virtinst/cli.py                               | 80 +++++++++----------
3d61c0
 4 files changed, 44 insertions(+), 59 deletions(-)
3d61c0
3d61c0
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
3d61c0
index b25d8c60..16f15894 100644
3d61c0
--- a/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
3d61c0
+++ b/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
3d61c0
@@ -119,7 +119,7 @@
3d61c0
     <suspend-to-disk enabled="no"/>
3d61c0
   </pm>
3d61c0
   <devices>
3d61c0
-    <emulator>/usr/bin/qemu-kvm</emulator>
3d61c0
+    <emulator>/new/emu</emulator>
3d61c0
     <controller type="usb" index="0" model="nec-xhci"/>
3d61c0
     <controller type="virtio-scsi" index="0"/>
3d61c0
     <filesystem type="mount" accessmode="mapped">
3d61c0
@@ -287,7 +287,7 @@
3d61c0
     <suspend-to-disk enabled="no"/>
3d61c0
   </pm>
3d61c0
   <devices>
3d61c0
-    <emulator>/usr/bin/qemu-kvm</emulator>
3d61c0
+    <emulator>/new/emu</emulator>
3d61c0
     <controller type="usb" index="0" model="nec-xhci"/>
3d61c0
     <controller type="virtio-scsi" index="0"/>
3d61c0
     <filesystem type="mount" accessmode="mapped">
3d61c0
diff --git a/tests/clitest.py b/tests/clitest.py
3d61c0
index a6d995fe..b869ef55 100644
3d61c0
--- a/tests/clitest.py
3d61c0
+++ b/tests/clitest.py
3d61c0
@@ -432,7 +432,7 @@ cell1.distances.sibling1.id=1,cell1.distances.sibling1.value=10,\
3d61c0
 cache.mode=emulate,cache.level=3 \
3d61c0
 --cputune vcpupin0.vcpu=0,vcpupin0.cpuset=0-3 \
3d61c0
 --metadata title=my-title,description=my-description,uuid=00000000-1111-2222-3333-444444444444 \
3d61c0
---boot cdrom,fd,hd,network,menu=off,loader=/foo/bar \
3d61c0
+--boot cdrom,fd,hd,network,menu=off,loader=/foo/bar,emulator=/new/emu \
3d61c0
 --idmap uid_start=0,uid_target=1000,uid_count=10,gid_start=0,gid_target=1000,gid_count=10 \
3d61c0
 --security type=static,label='system_u:object_r:svirt_image_t:s0:c100,c200',relabel=yes \
3d61c0
 --numatune 1-3,4,mode=strict \
3d61c0
diff --git a/virt-xml b/virt-xml
3d61c0
index b7d78fe2..314e068d 100755
3d61c0
--- a/virt-xml
3d61c0
+++ b/virt-xml
3d61c0
@@ -221,22 +221,13 @@ def action_remove_device(guest, options, parserclass):
3d61c0
 
3d61c0
 
3d61c0
 def action_build_xml(conn, options, parserclass):
3d61c0
-    guest = virtinst.Guest(conn)
3d61c0
-    ret_inst = None
3d61c0
-    inst = None
3d61c0
-
3d61c0
-    if parserclass.objclass:
3d61c0
-        inst = parserclass.objclass(conn)
3d61c0
-    elif parserclass.clear_attr:
3d61c0
-        ret_inst = getattr(guest, parserclass.clear_attr)
3d61c0
-    else:
3d61c0
+    if not parserclass.objclass:
3d61c0
         fail(_("--build-xml not supported for --%s") %
3d61c0
              parserclass.cli_arg_name)
3d61c0
 
3d61c0
-    ret = cli.parse_option_strings(options, guest, inst)
3d61c0
-    if ret_inst:
3d61c0
-        return ret_inst
3d61c0
-    return ret
3d61c0
+    guest = virtinst.Guest(conn)
3d61c0
+    inst = parserclass.objclass(conn)
3d61c0
+    return cli.parse_option_strings(options, guest, inst)
3d61c0
 
3d61c0
 
3d61c0
 def setup_device(dev):
3d61c0
diff --git a/virtinst/cli.py b/virtinst/cli.py
3d61c0
index 0d9d0044..71cba4cf 100644
3d61c0
--- a/virtinst/cli.py
3d61c0
+++ b/virtinst/cli.py
3d61c0
@@ -1074,10 +1074,6 @@ class VirtCLIParser(object):
3d61c0
     @support_cb: An extra support check function for further validation.
3d61c0
         Called before the virtinst object is altered. Take arguments
3d61c0
         (inst, attrname, cliname)
3d61c0
-    @clear_attr: If the user requests to clear the XML (--disk clearxml),
3d61c0
-        this is the property name we grab from inst to actually clear
3d61c0
-        (so 'security' to get guest.security). If it's True, then
3d61c0
-        clear inst (in the case of devices)
3d61c0
     @cli_arg_name: The command line argument this maps to, so
3d61c0
         "hostdev" for --hostdev
3d61c0
     """
3d61c0
@@ -1085,7 +1081,6 @@ class VirtCLIParser(object):
3d61c0
     remove_first = None
3d61c0
     stub_none = True
3d61c0
     support_cb = None
3d61c0
-    clear_attr = None
3d61c0
     cli_arg_name = None
3d61c0
     _virtargs = []
3d61c0
 
3d61c0
@@ -1120,16 +1115,12 @@ class VirtCLIParser(object):
3d61c0
         """
3d61c0
         Callback that handles virt-xml clearxml=yes|no magic
3d61c0
         """
3d61c0
-        if not self.objclass and not self.clear_attr:
3d61c0
+        if not self.objclass:
3d61c0
             raise RuntimeError("Don't know how to clearxml --%s" %
3d61c0
                                self.cli_arg_name)
3d61c0
         if val is not True:
3d61c0
             return
3d61c0
 
3d61c0
-        clear_inst = inst
3d61c0
-        if self.clear_attr:
3d61c0
-            clear_inst = getattr(inst, self.clear_attr)
3d61c0
-
3d61c0
         # If there's any opts remaining, leave the root stub element
3d61c0
         # in place with leave_stub=True, so virt-xml updates are done
3d61c0
         # in place.
3d61c0
@@ -1139,7 +1130,7 @@ class VirtCLIParser(object):
3d61c0
         # a <cpu> stub in place, so that it gets model=foo in place,
3d61c0
         # otherwise the newly created cpu block gets appended to the
3d61c0
         # end of the domain XML, which gives an ugly diff
3d61c0
-        clear_inst.clear(leave_stub="," in self.optstr)
3d61c0
+        inst.clear(leave_stub=("," in self.optstr))
3d61c0
 
3d61c0
     def _make_find_inst_cb(self, cliarg, objpropname, objaddfn):
3d61c0
         """
3d61c0
@@ -1651,26 +1642,29 @@ ParserVCPU.add_arg("vcpu_placement", "placement")
3d61c0
 
3d61c0
 class ParserBoot(VirtCLIParser):
3d61c0
     cli_arg_name = "boot"
3d61c0
-    clear_attr = "os"
3d61c0
+    objclass = OSXML
3d61c0
 
3d61c0
-    def set_uefi(self, inst, val, virtarg):
3d61c0
-        ignore = virtarg
3d61c0
-        ignore = val
3d61c0
-        inst.set_uefi_default()
3d61c0
+    def set_uefi_cb(self, inst, val, virtarg):
3d61c0
+        self.guest.set_uefi_default()
3d61c0
 
3d61c0
     def set_initargs_cb(self, inst, val, virtarg):
3d61c0
-        inst.os.set_initargs_string(val)
3d61c0
+        inst.set_initargs_string(val)
3d61c0
 
3d61c0
     def set_smbios_mode_cb(self, inst, val, virtarg):
3d61c0
-        inst.os.smbios_mode = val
3d61c0
+        inst.smbios_mode = val
3d61c0
         self.optdict["smbios_mode"] = val
3d61c0
 
3d61c0
     def set_loader_secure_cb(self, inst, val, virtarg):
3d61c0
         if not inst.conn.check_support(inst.conn.SUPPORT_DOMAIN_LOADER_SECURE):
3d61c0
             raise RuntimeError("secure attribute for loader is not supported "
3d61c0
                                "by libvirt.")
3d61c0
-        inst.os.loader_secure = val
3d61c0
-        return val
3d61c0
+        inst.loader_secure = val
3d61c0
+
3d61c0
+    def set_domain_type_cb(self, inst, val, virtarg):
3d61c0
+        self.guest.type = val
3d61c0
+
3d61c0
+    def set_emulator_cb(self, inst, val, virtarg):
3d61c0
+        self.guest.emulator = val
3d61c0
 
3d61c0
     def noset_cb(self, inst, val, virtarg):
3d61c0
         pass
3d61c0
@@ -1679,7 +1673,7 @@ class ParserBoot(VirtCLIParser):
3d61c0
         # Build boot order
3d61c0
         boot_order = []
3d61c0
         for cliname in self.optdict.keys():
3d61c0
-            if cliname not in inst.os.BOOT_DEVICES:
3d61c0
+            if cliname not in inst.BOOT_DEVICES:
3d61c0
                 continue
3d61c0
 
3d61c0
             del(self.optdict[cliname])
3d61c0
@@ -1687,37 +1681,37 @@ class ParserBoot(VirtCLIParser):
3d61c0
                 boot_order.append(cliname)
3d61c0
 
3d61c0
         if boot_order:
3d61c0
-            inst.os.bootorder = boot_order
3d61c0
+            inst.bootorder = boot_order
3d61c0
 
3d61c0
         VirtCLIParser._parse(self, inst)
3d61c0
 
3d61c0
 
3d61c0
 _register_virt_parser(ParserBoot)
3d61c0
 # UEFI depends on these bits, so set them first
3d61c0
-ParserBoot.add_arg("os.arch", "arch")
3d61c0
-ParserBoot.add_arg("type", "domain_type")
3d61c0
-ParserBoot.add_arg("os.os_type", "os_type")
3d61c0
-ParserBoot.add_arg("emulator", "emulator")
3d61c0
-ParserBoot.add_arg(None, "uefi", cb=ParserBoot.set_uefi, is_novalue=True)
3d61c0
+ParserBoot.add_arg("arch", "arch")
3d61c0
+ParserBoot.add_arg(None, "domain_type", cb=ParserBoot.set_domain_type_cb)
3d61c0
+ParserBoot.add_arg("os_type", "os_type")
3d61c0
+ParserBoot.add_arg(None, "emulator", cb=ParserBoot.set_emulator_cb)
3d61c0
+ParserBoot.add_arg(None, "uefi", cb=ParserBoot.set_uefi_cb, is_novalue=True)
3d61c0
 
3d61c0
-ParserBoot.add_arg("os.useserial", "useserial", is_onoff=True)
3d61c0
-ParserBoot.add_arg("os.enable_bootmenu", "menu", is_onoff=True)
3d61c0
-ParserBoot.add_arg("os.kernel", "kernel")
3d61c0
-ParserBoot.add_arg("os.initrd", "initrd")
3d61c0
-ParserBoot.add_arg("os.dtb", "dtb")
3d61c0
-ParserBoot.add_arg("os.loader", "loader")
3d61c0
-ParserBoot.add_arg("os.loader_ro", "loader_ro", is_onoff=True)
3d61c0
-ParserBoot.add_arg("os.loader_type", "loader_type")
3d61c0
-ParserBoot.add_arg("os.loader_secure", "loader_secure", is_onoff=True,
3d61c0
+ParserBoot.add_arg("useserial", "useserial", is_onoff=True)
3d61c0
+ParserBoot.add_arg("enable_bootmenu", "menu", is_onoff=True)
3d61c0
+ParserBoot.add_arg("kernel", "kernel")
3d61c0
+ParserBoot.add_arg("initrd", "initrd")
3d61c0
+ParserBoot.add_arg("dtb", "dtb")
3d61c0
+ParserBoot.add_arg("loader", "loader")
3d61c0
+ParserBoot.add_arg("loader_ro", "loader_ro", is_onoff=True)
3d61c0
+ParserBoot.add_arg("loader_type", "loader_type")
3d61c0
+ParserBoot.add_arg("loader_secure", "loader_secure", is_onoff=True,
3d61c0
                    cb=ParserBoot.set_loader_secure_cb)
3d61c0
-ParserBoot.add_arg("os.nvram", "nvram")
3d61c0
-ParserBoot.add_arg("os.nvram_template", "nvram_template")
3d61c0
-ParserBoot.add_arg("os.kernel_args", "kernel_args",
3d61c0
+ParserBoot.add_arg("nvram", "nvram")
3d61c0
+ParserBoot.add_arg("nvram_template", "nvram_template")
3d61c0
+ParserBoot.add_arg("kernel_args", "kernel_args",
3d61c0
                    aliases=["extra_args"], can_comma=True)
3d61c0
-ParserBoot.add_arg("os.init", "init")
3d61c0
-ParserBoot.add_arg("os.machine", "machine")
3d61c0
-ParserBoot.add_arg("os.initargs", "initargs", cb=ParserBoot.set_initargs_cb)
3d61c0
-ParserBoot.add_arg("os.smbios_mode", "smbios_mode")
3d61c0
+ParserBoot.add_arg("init", "init")
3d61c0
+ParserBoot.add_arg("machine", "machine")
3d61c0
+ParserBoot.add_arg("initargs", "initargs", cb=ParserBoot.set_initargs_cb)
3d61c0
+ParserBoot.add_arg("smbios_mode", "smbios_mode")
3d61c0
 
3d61c0
 # This is simply so the boot options are advertised with --boot help,
3d61c0
 # actual processing is handled by _parse
3d61c0
-- 
3d61c0
2.20.1
3d61c0