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): def aarch_get_config_defaults(vmcls):
"""Set the defaults for current version of QEMU.""" """Set the defaults for current version of QEMU."""
config = CURRENT_CONFIG 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_path = basevm.get_qemu_path(vmcls.arch, args.build_path)
qemu_version = basevm.get_qemu_version(qemu_path) qemu_version = basevm.get_qemu_version(qemu_path)
if qemu_version < QEMU_AARCH64_MIN_VERSION: if qemu_version < QEMU_AARCH64_MIN_VERSION:

View File

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