summaryrefslogtreecommitdiff
path: root/virtinst
diff options
context:
space:
mode:
authorCole Robinson <crobinso@redhat.com>2022-08-03 11:23:23 -0400
committerCole Robinson <crobinso@redhat.com>2022-08-03 12:34:47 -0400
commit02e6abad48400c8a6106c47ff4c20587ca9f41bd (patch)
tree6fbdbc3f5aafac7099c4c75ff260f0bcfd3c7954 /virtinst
parente2dfbf9bd9a7b95c0912d3bf712d1118769f52f1 (diff)
downloadvirt-manager-02e6abad48400c8a6106c47ff4c20587ca9f41bd.tar.gz
cli: Break up parse_option_strings
Into run_parser and run_all_parsers. Opencode some of the special case handling in virtxml Signed-off-by: Cole Robinson <crobinso@redhat.com>
Diffstat (limited to 'virtinst')
-rw-r--r--virtinst/cli.py38
-rw-r--r--virtinst/virtinstall.py4
-rw-r--r--virtinst/virtxml.py9
3 files changed, 23 insertions, 28 deletions
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 6179c436..c4dffd34 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -4812,35 +4812,27 @@ class ParserLaunchSecurity(VirtCLIParser):
# Public virt parser APIs #
###########################
-def parse_option_strings(options, guest, instlist, editing=False):
+def run_parser(options, guest, parserclass, editinst=None):
"""
- Iterate over VIRT_PARSERS, and launch the associated parser
- function for every value that was filled in on 'options', which
- came from argparse/the command line.
-
- @editing: If we are updating an existing guest, like from virt-xml
+ Lookup the cli options.* string associated with the passed in Parser*
+ class, and parse its values into the passed guest instance, or editinst
+ for some virt-xml usage.
"""
- instlist = xmlutil.listify(instlist)
- if not instlist:
- instlist = [None]
-
ret = []
- for parserclass in VIRT_PARSERS:
- optlist = xmlutil.listify(getattr(options, parserclass.cli_arg_name))
- if not optlist:
- continue
+ optstr_list = xmlutil.listify(getattr(options, parserclass.cli_arg_name))
+
+ for optstr in optstr_list:
+ parserobj = parserclass(optstr, guest=guest, editing=bool(editinst))
+ parseret = parserobj.parse(editinst)
+ ret += xmlutil.listify(parseret)
- for inst in instlist:
- if inst and optlist:
- # If an object is passed in, we are updating it in place, and
- # only use the last command line occurrence, eg. from virt-xml
- optlist = [optlist[-1]]
+ return ret
- for optstr in optlist:
- parserobj = parserclass(optstr, guest=guest, editing=editing)
- parseret = parserobj.parse(inst)
- ret += xmlutil.listify(parseret)
+def run_all_parsers(options, guest):
+ ret = []
+ for parserclass in VIRT_PARSERS:
+ ret += run_parser(options, guest, parserclass)
return ret
diff --git a/virtinst/virtinstall.py b/virtinst/virtinstall.py
index 34f5a7fa..35261148 100644
--- a/virtinst/virtinstall.py
+++ b/virtinst/virtinstall.py
@@ -618,12 +618,12 @@ def _build_options_guest(conn, options):
# Fill in guest from the command line content
set_explicit_guest_options(options, guest)
- cli.parse_option_strings(options, guest, None)
+ cli.run_all_parsers(options, guest)
cli.parse_xmlcli(guest, options)
# Call set_capabilities_defaults explicitly here rather than depend
# on set_defaults calling it. Installer setup needs filled in values.
- # However we want to do it after parse_option_strings to ensure
+ # However we want to do it after run_all_parsers to ensure
# we are operating on any arch/os/type values passed in with --boot
guest.set_capabilities_defaults()
diff --git a/virtinst/virtxml.py b/virtinst/virtxml.py
index b9554d2c..234115b0 100644
--- a/virtinst/virtxml.py
+++ b/virtinst/virtxml.py
@@ -156,7 +156,10 @@ def action_edit(guest, options, parserclass):
if options.os_variant is not None:
fail(_("--os-variant/--osinfo is not supported with --edit"))
- return cli.parse_option_strings(options, guest, inst, editing=True)
+ devs = []
+ for editinst in xmlutil.listify(inst):
+ devs += cli.run_parser(options, guest, parserclass, editinst=editinst)
+ return devs
def action_add_device(guest, options, parserclass, devs):
@@ -168,7 +171,7 @@ def action_add_device(guest, options, parserclass, devs):
for dev in devs:
guest.add_device(dev)
else:
- devs = cli.parse_option_strings(options, guest, None)
+ devs = cli.run_parser(options, guest, parserclass)
for dev in devs:
dev.set_defaults(guest)
@@ -205,7 +208,7 @@ def action_build_xml(options, parserclass, guest):
if options.os_variant is not None:
fail(_("--os-variant/--osinfo is not supported with --build-xml"))
- devs = cli.parse_option_strings(options, guest, None)
+ devs = cli.run_parser(options, guest, parserclass)
for dev in devs:
dev.set_defaults(guest)
return devs