[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