[Libosinfo] [PATCH osinfo-db 2/6] Add scripts/osinfo-db-add-iso.py

Fabiano Fidêncio fidencio at redhat.com
Fri Mar 29 09:14:48 UTC 2019


On Wed, 2019-03-27 at 21:08 -0400, Cole Robinson wrote:
> This script simplifies the process of adding new iso data to the
> test suite and optionally filling in a <media> block for the <os>.
> Call it like
> 
>   ./scripts/osinfo-db-add-iso.py SHORTID [--arch ARCH] ISOPATH
> 
> It will print a <media> block template to stdout, and generate a
> correctly named data file in tests/isodata/
> 
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  scripts/osinfo-db-add-iso.py | 113
> +++++++++++++++++++++++++++++++++++
>  1 file changed, 113 insertions(+)
>  create mode 100755 scripts/osinfo-db-add-iso.py
> 
> diff --git a/scripts/osinfo-db-add-iso.py b/scripts/osinfo-db-add-
> iso.py
> new file mode 100755
> index 0000000..8a16859
> --- /dev/null
> +++ b/scripts/osinfo-db-add-iso.py
> @@ -0,0 +1,113 @@
> +#!/usr/bin/env python3
> +
> +import argparse
> +import distutils.spawn
> +import os
> +import sys
> +import tempfile
> +import time
> +
> +
> +topdir = os.path.realpath(os.path.join(os.path.dirname(__file__),
> ".."))
> +datadir = os.path.join(topdir, "data")
> +sys.path.insert(0, topdir)
> +os.environ["INTERNAL_OSINFO_DB_DATA_DIR"] = datadir
> +
> +import tests.isodata
> +import tests.util
> +
> +
> +def fail(msg):
> +    print(msg)
> +    sys.exit(1)
> +
> +
> +##############################
> +# main() and option handling #
> +##############################
> +
> +def _parse_args():
> +    desc = ("Helper script for adding iso test data to the test "
> +            "suite, and matching <os> <media> data to the DB")
> +    parser = argparse.ArgumentParser(description=desc)
> +
> +    parser.add_argument("shortid", help="Which <os> short-id "
> +            "the ISO is media for")
> +    parser.add_argument("iso", help="The path to the ISO media")
> +    parser.add_argument("--arch", default="x86_64",
> +            help="The OS architecture the media is for.
> default=x86_64")
> +
> +    options = parser.parse_args()
> +    return options
> +
> +
> +def _main():
> +    """
> +    This is a template for new command line programs. Copy and edit
> it!
> +    """
> +    options = _parse_args()
> +
> +    iso = os.path.realpath(os.path.abspath(options.iso))
> +    isoinfobin = distutils.spawn.find_executable("isoinfo")
> +    if not os.path.exists(iso):
> +        fail("iso does not exist: %s" % iso)
> +    if not isoinfobin:
> +        fail("isoinfo is not installed")
> +
> +    osxml = None
> +    for o in tests.util.DataFiles.oses():
> +        if o.shortid == options.shortid:
> +            osxml = o
> +            break
> +    if not osxml:
> +        fail("Did not find any os shortid=%s" % options.shortid)
> +        return

If I understand correctly, it'd simply abort in case I try to add a new
version of an existing OS, right? For instance, the script would bail
when trying to add the first fedora30 instance.

It's something we can definitely improve in the feature.


> +
> +    destdir = os.path.join(topdir, "tests", "isodata", osxml.distro,
> +            options.shortid)
> +    destpath = os.path.join(destdir, os.path.basename(iso) + ".txt")
> +
> +    tmp = tempfile.NamedTemporaryFile()
> +    ret = os.system("isoinfo -d -i %s > %s" % (iso, tmp.name))
> +    if ret != 0:
> +        fail("Command failed, returncode=%s" % ret)
> +
> +    # parse isoinfo
> +    # output an example media block
> +    isodata = tests.isodata.get_isodatamedia(tmp.name)
> +    print("XML to add to %s :" % osxml.filename[len(topdir) + 1:] +
> ".in")
> +    print()
> +    print("    <media arch=\"%s\">" % options.arch)
> +    print("      <url>XXX</url>")
> +    print("      <iso>")
> +
> +    if isodata.volumeid:
> +        print("        <volume-id>%s</volume-id>" %
> isodata.volumeid)
> +    if isodata.systemid:
> +        print("        <system-id>%s</system-id>" %
> isodata.systemid)
> +    if isodata.publisherid:
> +        print("        <publisher-id>%s</publisher-id>" %
> isodata.publisherid)
> +    if isodata.applicationid:
> +        print("        <application-id>%s</application-id>" %
> +                isodata.applicationid)
> +    if isodata.volumesize:
> +        print("        <volume-size>%s</volume-size>" %
> isodata.volumesize)
> +
> +    print("      </iso>")
> +    print("      <kernel>XXX</kernel>")
> +    print("      <initrd>XXX</initrd>")
> +    print("    </media>")
> +    print()
> +
> +    print("\n\nSleeping 5 seconds before writing test data to:\n%s"
> % destpath)
> +    time.sleep(5)
> +    if not os.path.exists(destdir):
> +        os.system("mkdir -p %s" % destdir)
> +    os.system("cp %s %s" % (tmp.name, destpath))
> +    print("Done.")
> +
> +    return 0
> +
> +
> +if __name__ == '__main__':
> +    sys.exit(_main())




More information about the Libosinfo mailing list