tests/vm: switch from optsparse to argparse

optparse has been deprecated since version 3.2 and argparse is the
blessed replacement. Take the opportunity to enhance our help output
showing defaults when called.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Robert Foley <robert.foley@linaro.org>

Message-Id: <20200701135652.1366-15-alex.bennee@linaro.org>
This commit is contained in:
Alex Bennée 2020-07-01 14:56:26 +01:00
parent ff14ab0c13
commit 2fea3a125d
2 changed files with 49 additions and 46 deletions

View file

@ -46,7 +46,7 @@ def get_config_defaults(vmcls, default_config):
def aarch_get_config_defaults(vmcls):
"""Set the defaults for current version of QEMU."""
config = CURRENT_CONFIG
args, argv = basevm.parse_args(vmcls)
args = basevm.parse_args(vmcls)
qemu_path = basevm.get_qemu_path(vmcls.arch, args.build_path)
qemu_version = basevm.get_qemu_version(qemu_path)
if qemu_version < QEMU_AARCH64_MIN_VERSION:

View file

@ -23,7 +23,7 @@
from qemu.machine import QEMUMachine
import subprocess
import hashlib
import optparse
import argparse
import atexit
import tempfile
import shutil
@ -556,54 +556,57 @@ def get_default_jobs():
else:
return 1
parser = optparse.OptionParser(
description="VM test utility. Exit codes: "
"0 = success, "
"1 = command line error, "
"2 = environment initialization failed, "
"3 = test command failed")
parser.add_option("--debug", "-D", action="store_true",
help="enable debug output")
parser.add_option("--image", "-i", default="%s.img" % vmcls.name,
help="image file name")
parser.add_option("--force", "-f", action="store_true",
help="force build image even if image exists")
parser.add_option("--jobs", type=int, default=get_default_jobs(),
help="number of virtual CPUs")
parser.add_option("--verbose", "-V", action="store_true",
help="Pass V=1 to builds within the guest")
parser.add_option("--build-image", "-b", action="store_true",
help="build image")
parser.add_option("--build-qemu",
help="build QEMU from source in guest")
parser.add_option("--build-target",
help="QEMU build target", default="check")
parser.add_option("--build-path", default=None,
help="Path of build directory, "\
"for using build tree QEMU binary. ")
parser.add_option("--interactive", "-I", action="store_true",
help="Interactively run command")
parser.add_option("--snapshot", "-s", action="store_true",
help="run tests with a snapshot")
parser.add_option("--genisoimage", default="genisoimage",
help="iso imaging tool")
parser.add_option("--config", "-c", default=None,
help="Provide config yaml for configuration. "\
"See config_example.yaml for example.")
parser.add_option("--efi-aarch64",
default="/usr/share/qemu-efi-aarch64/QEMU_EFI.fd",
help="Path to efi image for aarch64 VMs.")
parser.add_option("--log-console", action="store_true",
help="Log console to file.")
parser.disable_interspersed_args()
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description="Utility for provisioning VMs and running builds",
epilog="""Remaining arguments are passed to the command.
Exit codes: 0 = success, 1 = command line error,
2 = environment initialization failed,
3 = test command failed""")
parser.add_argument("--debug", "-D", action="store_true",
help="enable debug output")
parser.add_argument("--image", "-i", default="%s.img" % vmcls.name,
help="image file name")
parser.add_argument("--force", "-f", action="store_true",
help="force build image even if image exists")
parser.add_argument("--jobs", type=int, default=get_default_jobs(),
help="number of virtual CPUs")
parser.add_argument("--verbose", "-V", action="store_true",
help="Pass V=1 to builds within the guest")
parser.add_argument("--build-image", "-b", action="store_true",
help="build image")
parser.add_argument("--build-qemu",
help="build QEMU from source in guest")
parser.add_argument("--build-target",
help="QEMU build target", default="check")
parser.add_argument("--build-path", default=None,
help="Path of build directory, "\
"for using build tree QEMU binary. ")
parser.add_argument("--interactive", "-I", action="store_true",
help="Interactively run command")
parser.add_argument("--snapshot", "-s", action="store_true",
help="run tests with a snapshot")
parser.add_argument("--genisoimage", default="genisoimage",
help="iso imaging tool")
parser.add_argument("--config", "-c", default=None,
help="Provide config yaml for configuration. "\
"See config_example.yaml for example.")
parser.add_argument("--efi-aarch64",
default="/usr/share/qemu-efi-aarch64/QEMU_EFI.fd",
help="Path to efi image for aarch64 VMs.")
parser.add_argument("--log-console", action="store_true",
help="Log console to file.")
parser.add_argument("commands", nargs="*", help="""Remaining
commands after -- are passed to command inside the VM""")
return parser.parse_args()
def main(vmcls, config=None):
try:
if config == None:
config = DEFAULT_CONFIG
args, argv = parse_args(vmcls)
if not argv and not args.build_qemu and not args.build_image:
args = parse_args(vmcls)
if not args.commands and not args.build_qemu and not args.build_image:
print("Nothing to do?")
return 1
config = parse_config(config, args)
@ -619,12 +622,12 @@ def main(vmcls, config=None):
if args.build_qemu:
vm.add_source_dir(args.build_qemu)
cmd = [vm.BUILD_SCRIPT.format(
configure_opts = " ".join(argv),
configure_opts = " ".join(args.commands),
jobs=int(args.jobs),
target=args.build_target,
verbose = "V=1" if args.verbose else "")]
else:
cmd = argv
cmd = args.commands
img = args.image
if args.snapshot:
img += ",snapshot=on"