diff --git a/docs/conf.py b/docs/conf.py index a3ecc7fb..84acc2f1 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -33,7 +33,8 @@ extensions = [ 'sphinx.ext.viewcode', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', - 'sphinx.ext.coverage' + 'sphinx.ext.coverage', + 'sphinxarg.ext' ] # Add any paths that contain templates here, relative to this directory. diff --git a/src/pylorax/cmdline.py b/src/pylorax/cmdline.py new file mode 100644 index 00000000..0a2d94e7 --- /dev/null +++ b/src/pylorax/cmdline.py @@ -0,0 +1,286 @@ +# +# cmdline.py +# +# Copyright (C) 2016 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Red Hat Author(s): Brian C. Lane + +import os +import sys +import argparse + +def lorax_parser(): + """ Return the ArgumentParser for lorax""" + + # get lorax version + try: + from pylorax import version + vernum = version.num + except ImportError: + vernum = "devel" + + version = "{0}-{1}".format(os.path.basename(sys.argv[0]), vernum) + + parser = argparse.ArgumentParser(description="Create the Anaconda boot.iso") + + # required arguments for image creation + required = parser.add_argument_group("required arguments") + required.add_argument("-p", "--product", help="product name", required=True, metavar="PRODUCT") + required.add_argument("-v", "--version", help="version identifier", required=True, metavar="VERSION") + required.add_argument("-r", "--release", help="release information", required=True, metavar="RELEASE") + required.add_argument("-s", "--source", help="source repository (may be listed multiple times)", + metavar="REPOSITORY", action="append", default=[]) + required.add_argument("--repo", help="source dnf repository file", type=os.path.abspath, + dest="repos", metavar="REPOSITORY", action="append", default=[]) + + # optional arguments + optional = parser.add_argument_group("optional arguments") + optional.add_argument("-m", "--mirrorlist", + help="mirrorlist repository (may be listed multiple times)", + metavar="REPOSITORY", action="append", default=[]) + optional.add_argument("-t", "--variant", + help="variant name", metavar="VARIANT") + optional.add_argument("-b", "--bugurl", + help="bug reporting URL for the product", metavar="URL", + default="your distribution provided bug reporting tool") + optional.add_argument("--isfinal", help="", + action="store_true", default=False, dest="isfinal") + optional.add_argument("-c", "--config", default="/etc/lorax/lorax.conf", + help="config file", metavar="CONFIGFILE") + optional.add_argument("--proxy", default=None, + help="repo proxy url:port", metavar="HOST") + optional.add_argument("-i", "--installpkgs", default=[], + action="append", metavar="PACKAGE", + help="package glob to install before runtime-install.tmpl runs. (may be listed multiple times)") + optional.add_argument("--buildarch", default=None, + help="build architecture", metavar="ARCH") + optional.add_argument("--volid", default=None, + help="volume id", metavar="VOLID") + optional.add_argument("--macboot", help="", + action="store_true", default=True, dest="domacboot") + optional.add_argument("--nomacboot", help="", + action="store_false", dest="domacboot") + optional.add_argument("--noupgrade", help="", + action="store_false", default=True, dest="doupgrade") + optional.add_argument("--logfile", default="./lorax.log", type=os.path.abspath, + help="Path to logfile") + optional.add_argument("--tmp", default="/var/tmp", + help="Top level temporary directory" ) + optional.add_argument("--cachedir", default=None, type=os.path.abspath, + help="DNF cache directory. Default is a temporary dir.") + optional.add_argument("--workdir", default=None, type=os.path.abspath, + help="Work directory, overrides --tmp. Default is a temporary dir under /var/tmp") + optional.add_argument("--force", default=False, action="store_true", + help="Run even when the destination directory exists") + optional.add_argument("--add-template", dest="add_templates", + action="append", help="Additional template for runtime image", + default=[]) + optional.add_argument("--add-template-var", dest="add_template_vars", + action="append", help="Set variable for runtime image template", + default=[]) + optional.add_argument("--add-arch-template", dest="add_arch_templates", + action="append", help="Additional template for architecture-specific image", + default=[]) + optional.add_argument("--add-arch-template-var", dest="add_arch_template_vars", + action="append", help="Set variable for architecture-specific image", + default=[]) + optional.add_argument("--noverify", action="store_false", default=True, dest="verify", + help="Do not verify the install root") + optional.add_argument("--sharedir", metavar="SHAREDIR", type=os.path.abspath, + help="Directory containing all the templates. Overrides config file sharedir") + optional.add_argument("--enablerepo", action="append", default=[], dest="enablerepos", + metavar="[repo]", help="Names of repos to enable") + optional.add_argument("--disablerepo", action="append", default=[], dest="disablerepos", + metavar="[repo]", help="Names of repos to disable") + + # add the show version option + parser.add_argument("-V", help="show program's version number and exit", + action="version", version=version) + + parser.add_argument("outputdir", help="Output directory", metavar="OUTPUTDIR", type=os.path.abspath) + + return parser + + +def lmc_parser(dracut_default=""): + """ Return a ArgumentParser object for live-media-creator.""" + parser = argparse.ArgumentParser(description="Create Live Install Media", + fromfile_prefix_chars="@") + + # These are mutually exclusive, one is required + action = parser.add_mutually_exclusive_group(required=True) + action.add_argument("--make-iso", action="store_true", + help="Build a live iso") + action.add_argument("--make-disk", action="store_true", + help="Build a partitioned disk image") + action.add_argument("--make-fsimage", action="store_true", + help="Build a filesystem image") + action.add_argument("--make-appliance", action="store_true", + help="Build an appliance image and XML description") + action.add_argument("--make-ami", action="store_true", + help="Build an ami image") + action.add_argument("--make-tar", action="store_true", + help="Build a tar of the root filesystem") + action.add_argument("--make-pxe-live", action="store_true", + help="Build a live pxe boot squashfs image") + action.add_argument("--make-ostree-live", action="store_true", + help="Build a live pxe boot squashfs image of Atomic Host") + action.add_argument("--make-oci", action="store_true", + help="Build an Open Container Initiative image") + action.add_argument("--make-vagrant", action="store_true", + help="Build a Vagrant Box image") + + parser.add_argument("--iso", type=os.path.abspath, + help="Anaconda installation .iso path to use for qemu") + parser.add_argument("--iso-only", action="store_true", + help="Remove all iso creation artifacts except the boot.iso, " + "combine with --iso-name to rename the boot.iso") + parser.add_argument("--iso-name", default=None, + help="Name of output iso file for --iso-only. Default is boot.iso") + parser.add_argument("--ks", action="append", type=os.path.abspath, + help="Kickstart file defining the install.") + parser.add_argument("--image-only", action="store_true", + help="Exit after creating fs/disk image.") + + parser.add_argument("--no-virt", action="store_true", + help="Run anaconda directly on host instead of using qemu") + parser.add_argument("--proxy", + help="proxy URL to use for the install") + parser.add_argument("--anaconda-arg", action="append", dest="anaconda_args", + help="Additional argument to pass to anaconda (no-virt " + "mode). Pass once for each argument") + parser.add_argument("--armplatform", + help="the platform to use when creating images for ARM, " + "i.e., highbank, mvebu, omap, tegra, etc.") + parser.add_argument("--location", default=None, type=os.path.abspath, + help="location of iso directory tree with initrd.img " + "and vmlinuz. Used to run qemu with a newer initrd " + "than the iso.") + + parser.add_argument("--logfile", default="./livemedia.log", + type=os.path.abspath, + help="Name and path for primary logfile, other logs will " + "be created in the same directory.") + parser.add_argument("--lorax-templates", default=None, + type=os.path.abspath, + help="Path to mako templates for lorax") + parser.add_argument("--tmp", default="/var/tmp", type=os.path.abspath, + help="Top level temporary directory") + parser.add_argument("--resultdir", default=None, dest="result_dir", + type=os.path.abspath, + help="Directory to copy the resulting images and iso into. " + "Defaults to the temporary working directory") + + parser.add_argument("--macboot", action="store_true", default=True, + dest="domacboot") + parser.add_argument("--nomacboot", action="store_false", + dest="domacboot") + + image_group = parser.add_argument_group("disk/fs image arguments") + image_group.add_argument("--disk-image", type=os.path.abspath, + help="Path to existing disk image to use for creating final image.") + image_group.add_argument("--keep-image", action="store_true", + help="Keep raw disk image after .iso creation") + image_group.add_argument("--fs-image", type=os.path.abspath, + help="Path to existing filesystem image to use for creating final image.") + image_group.add_argument("--image-name", default=None, + help="Name of output file to create. Used for tar, fs and disk image. Default is a random name.") + image_group.add_argument("--fs-label", default="Anaconda", + help="Label to set on fsimage, default is 'Anaconda'") + image_group.add_argument("--image-type", default=None, + help="Create an image with qemu-img. See qemu-img --help for supported formats.") + image_group.add_argument("--qemu-arg", action="append", dest="qemu_args", default=[], + help="Arguments to pass to qemu-img. Pass once for each argument, they will be used for ALL calls to qemu-img.") + image_group.add_argument("--qcow2", action="store_true", + help="Create qcow2 image instead of raw sparse image when making disk images.") + image_group.add_argument("--qcow2-arg", action="append", dest="qemu_args", default=[], + help="Arguments to pass to qemu-img. Pass once for each argument, they will be used for ALL calls to qemu-img.") + image_group.add_argument("--compression", default="xz", + help="Compression binary for make-tar. xz, lzma, gzip, and bzip2 are supported. xz is the default.") + image_group.add_argument("--compress-arg", action="append", dest="compress_args", default=[], + help="Arguments to pass to compression. Pass once for each argument") + # Group of arguments for appliance creation + app_group = parser.add_argument_group("appliance arguments") + app_group.add_argument("--app-name", default=None, + help="Name of appliance to pass to template") + app_group.add_argument("--app-template", default=None, + help="Path to template to use for appliance data.") + app_group.add_argument("--app-file", default="appliance.xml", + help="Appliance template results file.") + + # Group of arguments to pass to qemu + virt_group = parser.add_argument_group("qemu arguments") + virt_group.add_argument("--ram", metavar="MEMORY", type=int, default=1024, + help="Memory to allocate for installer in megabytes.") + virt_group.add_argument("--vcpus", type=int, default=None, + help="Passed to qemu -smp command") + virt_group.add_argument("--vnc", + help="Passed to qemu -display command. eg. vnc=127.0.0.1:5, default is to " + "choose the first unused vnc port.") + virt_group.add_argument("--arch", default=None, + help="System arch to build for. Used to select qemu-system-* command. " + "Defaults to qemu-system-") + virt_group.add_argument("--kernel-args", + help="Additional argument to pass to the installation kernel") + virt_group.add_argument("--ovmf-path", default="/usr/share/OVMF/", + help="Path to OVMF firmware") + virt_group.add_argument("--virt-uefi", action="store_true", default=False, + help="Use OVMF firmware to boot the VM in UEFI mode") + virt_group.add_argument("--no-kvm", action="store_true", default=False, + help="Skip using kvm with qemu even if it is available.") + + # dracut arguments + dracut_group = parser.add_argument_group("dracut arguments") + dracut_group.add_argument("--dracut-arg", action="append", dest="dracut_args", + help="Argument to pass to dracut when " + "rebuilding the initramfs. Pass this " + "once for each argument. NOTE: this " + "overrides the default. (default: %s)" % dracut_default) + + # pxe to live arguments + pxelive_group = parser.add_argument_group("pxe to live arguments") + pxelive_group.add_argument("--live-rootfs-size", type=int, default=0, + help="Size of root filesystem of live image in GiB") + pxelive_group.add_argument("--live-rootfs-keep-size", action="store_true", + help="Keep the original size of root filesystem in live image") + + # OCI specific commands + oci_group = parser.add_argument_group("OCI arguments") + oci_group.add_argument("--oci-config", + help="config.json OCI configuration file") + oci_group.add_argument("--oci-runtime", + help="runtime.json OCI configuration file") + + # Vagrant specific commands + vagrant_group = parser.add_argument_group("Vagrant arguments") + vagrant_group.add_argument("--vagrant-metadata", + help="optional metadata.json file") + vagrant_group.add_argument("--vagrantfile", + help="optional vagrantfile") + + parser.add_argument("--title", default="Linux Live Media", + help="Substituted for @TITLE@ in bootloader config files") + parser.add_argument("--project", default="Linux", + help="substituted for @PROJECT@ in bootloader config files") + parser.add_argument("--releasever", default="25", + help="substituted for @VERSION@ in bootloader config files") + parser.add_argument("--volid", default=None, help="volume id") + parser.add_argument("--squashfs_args", + help="additional squashfs args") + parser.add_argument("--timeout", default=None, type=int, + help="Cancel installer after X minutes") + + return parser diff --git a/src/sbin/livemedia-creator b/src/sbin/livemedia-creator index 971b48a3..12f7de56 100755 --- a/src/sbin/livemedia-creator +++ b/src/sbin/livemedia-creator @@ -27,7 +27,6 @@ import sys import tempfile import subprocess import shutil -import argparse import hashlib import glob import json @@ -56,6 +55,7 @@ from pylorax.imgutils import copytree, mkcpio from pylorax.executils import execWithRedirect, execReadlines, runcmd from pylorax.monitor import LogMonitor from pylorax.mount import IsoMountpoint +from pylorax.cmdline import lmc_parser # Default parameters for rebuilding initramfs, override with --dracut-args DRACUT_DEFAULT = ["--xz", "--add", "livenet dmsquash-live convertfs pollcdrom qemu qemu-net", @@ -1099,172 +1099,7 @@ def make_live_images(opts, work_dir, root_dir, rootfs_image=None, size=None): def main(): - parser = argparse.ArgumentParser(description="Create Live Install Media", - fromfile_prefix_chars="@") - - # These are mutually exclusive, one is required - action = parser.add_mutually_exclusive_group(required=True) - action.add_argument("--make-iso", action="store_true", - help="Build a live iso") - action.add_argument("--make-disk", action="store_true", - help="Build a partitioned disk image") - action.add_argument("--make-fsimage", action="store_true", - help="Build a filesystem image") - action.add_argument("--make-appliance", action="store_true", - help="Build an appliance image and XML description") - action.add_argument("--make-ami", action="store_true", - help="Build an ami image") - action.add_argument("--make-tar", action="store_true", - help="Build a tar of the root filesystem") - action.add_argument("--make-pxe-live", action="store_true", - help="Build a live pxe boot squashfs image") - action.add_argument("--make-ostree-live", action="store_true", - help="Build a live pxe boot squashfs image of Atomic Host") - action.add_argument("--make-oci", action="store_true", - help="Build an Open Container Initiative image") - action.add_argument("--make-vagrant", action="store_true", - help="Build a Vagrant Box image") - - parser.add_argument("--iso", type=os.path.abspath, - help="Anaconda installation .iso path to use for qemu") - parser.add_argument("--iso-only", action="store_true", - help="Remove all iso creation artifacts except the boot.iso, " - "combine with --iso-name to rename the boot.iso") - parser.add_argument("--iso-name", default=None, - help="Name of output iso file for --iso-only. Default is boot.iso") - parser.add_argument("--ks", action="append", type=os.path.abspath, - help="Kickstart file defining the install.") - parser.add_argument("--image-only", action="store_true", - help="Exit after creating fs/disk image.") - - parser.add_argument("--no-virt", action="store_true", - help="Run anaconda directly on host instead of using qemu") - parser.add_argument("--proxy", - help="proxy URL to use for the install") - parser.add_argument("--anaconda-arg", action="append", dest="anaconda_args", - help="Additional argument to pass to anaconda (no-virt " - "mode). Pass once for each argument") - parser.add_argument("--armplatform", - help="the platform to use when creating images for ARM, " - "i.e., highbank, mvebu, omap, tegra, etc.") - parser.add_argument("--location", default=None, type=os.path.abspath, - help="location of iso directory tree with initrd.img " - "and vmlinuz. Used to run qemu with a newer initrd " - "than the iso.") - - parser.add_argument("--logfile", default="./livemedia.log", - type=os.path.abspath, - help="Name and path for primary logfile, other logs will " - "be created in the same directory.") - parser.add_argument("--lorax-templates", default=None, - type=os.path.abspath, - help="Path to mako templates for lorax") - parser.add_argument("--tmp", default="/var/tmp", type=os.path.abspath, - help="Top level temporary directory") - parser.add_argument("--resultdir", default=None, dest="result_dir", - type=os.path.abspath, - help="Directory to copy the resulting images and iso into. " - "Defaults to the temporary working directory") - - parser.add_argument("--macboot", action="store_true", default=True, - dest="domacboot") - parser.add_argument("--nomacboot", action="store_false", - dest="domacboot") - - image_group = parser.add_argument_group("disk/fs image arguments") - image_group.add_argument("--disk-image", type=os.path.abspath, - help="Path to existing disk image to use for creating final image.") - image_group.add_argument("--keep-image", action="store_true", - help="Keep raw disk image after .iso creation") - image_group.add_argument("--fs-image", type=os.path.abspath, - help="Path to existing filesystem image to use for creating final image.") - image_group.add_argument("--image-name", default=None, - help="Name of output file to create. Used for tar, fs and disk image. Default is a random name.") - image_group.add_argument("--fs-label", default="Anaconda", - help="Label to set on fsimage, default is 'Anaconda'") - image_group.add_argument("--image-type", default=None, - help="Create an image with qemu-img. See qemu-img --help for supported formats.") - image_group.add_argument("--qemu-arg", action="append", dest="qemu_args", default=[], - help="Arguments to pass to qemu-img. Pass once for each argument, they will be used for ALL calls to qemu-img.") - image_group.add_argument("--qcow2", action="store_true", - help="Create qcow2 image instead of raw sparse image when making disk images.") - image_group.add_argument("--qcow2-arg", action="append", dest="qemu_args", default=[], - help="Arguments to pass to qemu-img. Pass once for each argument, they will be used for ALL calls to qemu-img.") - image_group.add_argument("--compression", default="xz", - help="Compression binary for make-tar. xz, lzma, gzip, and bzip2 are supported. xz is the default.") - image_group.add_argument("--compress-arg", action="append", dest="compress_args", default=[], - help="Arguments to pass to compression. Pass once for each argument") - # Group of arguments for appliance creation - app_group = parser.add_argument_group("appliance arguments") - app_group.add_argument("--app-name", default=None, - help="Name of appliance to pass to template") - app_group.add_argument("--app-template", default=None, - help="Path to template to use for appliance data.") - app_group.add_argument("--app-file", default="appliance.xml", - help="Appliance template results file.") - - # Group of arguments to pass to qemu - virt_group = parser.add_argument_group("qemu arguments") - virt_group.add_argument("--ram", metavar="MEMORY", type=int, default=1024, - help="Memory to allocate for installer in megabytes.") - virt_group.add_argument("--vcpus", type=int, default=None, - help="Passed to qemu -smp command") - virt_group.add_argument("--vnc", - help="Passed to qemu -display command. eg. vnc=127.0.0.1:5, default is to " - "choose the first unused vnc port.") - virt_group.add_argument("--arch", default=None, - help="System arch to build for. Used to select qemu-system-* command. " - "Defaults to qemu-system-") - virt_group.add_argument("--kernel-args", - help="Additional argument to pass to the installation kernel") - virt_group.add_argument("--ovmf-path", default="/usr/share/OVMF/", - help="Path to OVMF firmware") - virt_group.add_argument("--virt-uefi", action="store_true", default=False, - help="Use OVMF firmware to boot the VM in UEFI mode") - virt_group.add_argument("--no-kvm", action="store_true", default=False, - help="Skip using kvm with qemu even if it is available.") - - # dracut arguments - dracut_group = parser.add_argument_group("dracut arguments") - dracut_group.add_argument("--dracut-arg", action="append", dest="dracut_args", - help="Argument to pass to dracut when " - "rebuilding the initramfs. Pass this " - "once for each argument. NOTE: this " - "overrides the default. (default: %s)" % (DRACUT_DEFAULT,)) - - # pxe to live arguments - pxelive_group = parser.add_argument_group("pxe to live arguments") - pxelive_group.add_argument("--live-rootfs-size", type=int, default=0, - help="Size of root filesystem of live image in GiB") - pxelive_group.add_argument("--live-rootfs-keep-size", action="store_true", - help="Keep the original size of root filesystem in live image") - - # OCI specific commands - oci_group = parser.add_argument_group("OCI arguments") - oci_group.add_argument("--oci-config", - help="config.json OCI configuration file") - oci_group.add_argument("--oci-runtime", - help="runtime.json OCI configuration file") - - # Vagrant specific commands - vagrant_group = parser.add_argument_group("Vagrant arguments") - vagrant_group.add_argument("--vagrant-metadata", - help="optional metadata.json file") - vagrant_group.add_argument("--vagrantfile", - help="optional vagrantfile") - - parser.add_argument("--title", default="Linux Live Media", - help="Substituted for @TITLE@ in bootloader config files") - parser.add_argument("--project", default="Linux", - help="substituted for @PROJECT@ in bootloader config files") - parser.add_argument("--releasever", default="25", - help="substituted for @VERSION@ in bootloader config files") - parser.add_argument("--volid", default=None, help="volume id") - parser.add_argument("--squashfs_args", - help="additional squashfs args") - parser.add_argument("--timeout", default=None, type=int, - help="Cancel installer after X minutes") - + parser = lmc_parser() opts = parser.parse_args() setup_logging(opts.logfile, log) diff --git a/src/sbin/lorax b/src/sbin/lorax index 84d48c33..40284a9a 100755 --- a/src/sbin/lorax +++ b/src/sbin/lorax @@ -27,11 +27,11 @@ dnf_log = logging.getLogger("dnf") import sys import os import tempfile -import argparse import shutil import dnf import pylorax +from pylorax.cmdline import lorax_parser def setup_logging(opts): pylorax.setup_logging(opts.logfile, log) @@ -44,94 +44,8 @@ def setup_logging(opts): dnf_log.addHandler(fh) -def main(args): - # get lorax version - try: - from pylorax import version - vernum = version.num - except ImportError: - vernum = "devel" - - version = "{0}-{1}".format(os.path.basename(args[0]), vernum) - parser = argparse.ArgumentParser(description="Create the Anaconda boot.iso") - - # required arguments for image creation - required = parser.add_argument_group("required arguments") - required.add_argument("-p", "--product", help="product name", required=True, metavar="PRODUCT") - required.add_argument("-v", "--version", help="version identifier", required=True, metavar="VERSION") - required.add_argument("-r", "--release", help="release information", required=True, metavar="RELEASE") - required.add_argument("-s", "--source", help="source repository (may be listed multiple times)", - metavar="REPOSITORY", action="append", default=[]) - required.add_argument("--repo", help="source dnf repository file", type=os.path.abspath, - dest="repos", metavar="REPOSITORY", action="append", default=[]) - - # optional arguments - optional = parser.add_argument_group("optional arguments") - optional.add_argument("-m", "--mirrorlist", - help="mirrorlist repository (may be listed multiple times)", - metavar="REPOSITORY", action="append", default=[]) - optional.add_argument("-t", "--variant", - help="variant name", metavar="VARIANT") - optional.add_argument("-b", "--bugurl", - help="bug reporting URL for the product", metavar="URL", - default="your distribution provided bug reporting tool") - optional.add_argument("--isfinal", help="", - action="store_true", default=False, dest="isfinal") - optional.add_argument("-c", "--config", default="/etc/lorax/lorax.conf", - help="config file", metavar="CONFIGFILE") - optional.add_argument("--proxy", default=None, - help="repo proxy url:port", metavar="HOST") - optional.add_argument("-i", "--installpkgs", default=[], - action="append", metavar="PACKAGE", - help="package glob to install before runtime-install.tmpl runs. (may be listed multiple times)") - optional.add_argument("--buildarch", default=None, - help="build architecture", metavar="ARCH") - optional.add_argument("--volid", default=None, - help="volume id", metavar="VOLID") - optional.add_argument("--macboot", help="", - action="store_true", default=True, dest="domacboot") - optional.add_argument("--nomacboot", help="", - action="store_false", dest="domacboot") - optional.add_argument("--noupgrade", help="", - action="store_false", default=True, dest="doupgrade") - optional.add_argument("--logfile", default="./lorax.log", type=os.path.abspath, - help="Path to logfile") - optional.add_argument("--tmp", default="/var/tmp", - help="Top level temporary directory" ) - optional.add_argument("--cachedir", default=None, type=os.path.abspath, - help="DNF cache directory. Default is a temporary dir.") - optional.add_argument("--workdir", default=None, type=os.path.abspath, - help="Work directory, overrides --tmp. Default is a temporary dir under /var/tmp") - optional.add_argument("--force", default=False, action="store_true", - help="Run even when the destination directory exists") - optional.add_argument("--add-template", dest="add_templates", - action="append", help="Additional template for runtime image", - default=[]) - optional.add_argument("--add-template-var", dest="add_template_vars", - action="append", help="Set variable for runtime image template", - default=[]) - optional.add_argument("--add-arch-template", dest="add_arch_templates", - action="append", help="Additional template for architecture-specific image", - default=[]) - optional.add_argument("--add-arch-template-var", dest="add_arch_template_vars", - action="append", help="Set variable for architecture-specific image", - default=[]) - optional.add_argument("--noverify", action="store_false", default=True, dest="verify", - help="Do not verify the install root") - optional.add_argument("--sharedir", metavar="SHAREDIR", type=os.path.abspath, - help="Directory containing all the templates. Overrides config file sharedir") - optional.add_argument("--enablerepo", action="append", default=[], dest="enablerepos", - metavar="[repo]", help="Names of repos to enable") - optional.add_argument("--disablerepo", action="append", default=[], dest="disablerepos", - metavar="[repo]", help="Names of repos to disable") - - # add the show version option - parser.add_argument("-V", help="show program's version number and exit", - action="version", version=version) - - parser.add_argument("outputdir", help="Output directory", metavar="OUTPUTDIR", type=os.path.abspath) - - # parse the arguments +def main(): + parser = lorax_parser() opts = parser.parse_args() if not opts.source and not opts.repos: @@ -350,4 +264,4 @@ def get_dnf_base_object(installroot, sources, mirrorlists=None, repos=None, if __name__ == "__main__": - main(sys.argv) + main()