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@xxxxxxxxxx> > --- > 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()) _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo