[Libosinfo] [PATCH osinfo-db 2/6] Add scripts/osinfo-db-add-iso.py
Cole Robinson
crobinso at redhat.com
Thu Mar 28 01:08:59 UTC 2019
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
+
+ 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())
--
2.21.0
More information about the Libosinfo
mailing list