[virt-tools-list] [virt-manager PATCH 2/2] cli: fix cpu secure option to actually work

Cole Robinson crobinso at redhat.com
Wed May 22 14:24:47 UTC 2019


On 5/22/19 8:15 AM, Pavel Hrdina wrote:
> The 'secure' option is processed after the model is already set.
> CPU security options are resolved while setting CPU model so we need
> to know the 'secure' option value before we set the CPU model.
> 
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
> 

The cli options are applied to the XMLBuilder object in the order they
are listed in the parser class. So rather than peak into optdict, this
works in my testing:

diff --git a/virtinst/cli.py b/virtinst/cli.py
index e137fb14..7b27e390 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -1923,9 +1923,6 @@ class ParserCPU(VirtCLIParser):
         return cb(inst, *args, **kwargs)

     def set_model_cb(self, inst, val, virtarg):
-        if "secure" in self.optdict:
-            inst.secure = _on_off_convert("secure", self.optdict["secure"])
-
         if val == "host":
             val = inst.SPECIAL_MODE_HOST_MODEL
         if val == "none":
@@ -1954,11 +1951,11 @@ class ParserCPU(VirtCLIParser):
     @classmethod
     def _init_class(cls, **kwargs):
         VirtCLIParser._init_class(**kwargs)
+        cls.add_arg("secure", "secure", is_onoff=True)
         cls.add_arg("model", "model", cb=cls.set_model_cb)
         cls.add_arg("mode", "mode")
         cls.add_arg("match", "match")
         cls.add_arg("vendor", "vendor")
-        cls.add_arg("secure", "secure", is_onoff=True)
         cls.add_arg("cache.mode", "cache.mode")
         cls.add_arg("cache.level", "cache.level")

> The ideal fix would be to refactor CLI parsing to introduce some
> post-parse callback where we could properly set everything based
> on the user input.
> 

Yeah in general option ordering can't fix all issues, we can use
set_defaults to sort some complex deps out too. The big problem is using
virt-xml, lots of our option interactions are really only correctly
handled at XML build time and not XML edit time, but I haven't really
figured out a general way to resolve that

>  tests/cli-test-xml/compare/virt-install-cpu-disable-sec.xml | 4 ----
>  virtinst/cli.py                                             | 3 +++
>  2 files changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/tests/cli-test-xml/compare/virt-install-cpu-disable-sec.xml b/tests/cli-test-xml/compare/virt-install-cpu-disable-sec.xml
> index de73803b..a86d6926 100644
> --- a/tests/cli-test-xml/compare/virt-install-cpu-disable-sec.xml
> +++ b/tests/cli-test-xml/compare/virt-install-cpu-disable-sec.xml
> @@ -14,8 +14,6 @@
>    </features>
>    <cpu mode="custom" match="exact">
>      <model>qemu64</model>
> -    <feature policy="require" name="spec-ctrl"/>
> -    <feature policy="require" name="ssbd"/>
>    </cpu>
>    <clock offset="utc">
>      <timer name="rtc" tickpolicy="catchup"/>
> @@ -63,8 +61,6 @@
>    </features>
>    <cpu mode="custom" match="exact">
>      <model>qemu64</model>
> -    <feature policy="require" name="spec-ctrl"/>
> -    <feature policy="require" name="ssbd"/>
>    </cpu>
>    <clock offset="utc">
>      <timer name="rtc" tickpolicy="catchup"/>
> diff --git a/virtinst/cli.py b/virtinst/cli.py
> index 5356e7b4..e137fb14 100644
> --- a/virtinst/cli.py
> +++ b/virtinst/cli.py
> @@ -1923,6 +1923,9 @@ class ParserCPU(VirtCLIParser):
>          return cb(inst, *args, **kwargs)
>  
>      def set_model_cb(self, inst, val, virtarg):
> +        if "secure" in self.optdict:
> +            inst.secure = _on_off_convert("secure", self.optdict["secure"])
> +
>          if val == "host":
>              val = inst.SPECIAL_MODE_HOST_MODEL
>          if val == "none":
> 


- Cole




More information about the virt-tools-list mailing list