Blob Blame History Raw
diff --git a/.gitignore b/.gitignore
index dc28167..e457b03 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,6 @@
 /.tox/
-/dir2module/*.egg-info/
-/dir2module/build/
-/dir2module/dist/
-/repo2module/*.egg-info/
-/repo2module/build/
-/repo2module/dist/
+/*/*.egg-info/
+/*/build/
+/*/dist/
 __pycache__/
+.vscode/
diff --git a/.tito/packages/modulemd-tools b/.tito/packages/modulemd-tools
index ab403cf..9f9c5a0 100644
--- a/.tito/packages/modulemd-tools
+++ b/.tito/packages/modulemd-tools
@@ -1 +1 @@
-0.7-1 ./
+0.7-6 ./
diff --git a/.tito/releasers.conf b/.tito/releasers.conf
index 6ccadd0..62fd4b9 100644
--- a/.tito/releasers.conf
+++ b/.tito/releasers.conf
@@ -1,7 +1,7 @@
 [fedora]
 releaser = tito.release.FedoraGitReleaser
-branches = master f32 f33 epel8
+branches = rawhide f33 f34 f35
 
 [copr]
 releaser = tito.release.CoprReleaser
-project_name = frostyx/modulemd-tools
\ No newline at end of file
+project_name = frostyx/modulemd-tools
diff --git a/.tito/tito.props b/.tito/tito.props
index eab3f19..74b55a4 100644
--- a/.tito/tito.props
+++ b/.tito/tito.props
@@ -1,5 +1,5 @@
 [buildconfig]
-builder = tito.builder.Builder
-tagger = tito.tagger.VersionTagger
+builder = tito.builder.UpstreamBuilder
+tagger = tito.tagger.ReleaseTagger
 changelog_do_not_remove_cherrypick = 0
 changelog_format = %s (%ae)
diff --git a/.travis.yml b/.travis.yml
index ea4a3c1..62c815b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,5 +16,13 @@ jobs:
       script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
     - env: TOXENV=py39 MODULEMD_TOOL=dir2module SITEPACKAGES=true
       script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
+    - env: TOXENV=py39 MODULEMD_TOOL=createrepo_mod SITEPACKAGES=true
+      script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
+    - env: TOXENV=py39 MODULEMD_TOOL=modulemd-merge SITEPACKAGES=true
+      script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
+    - env: TOXENV=py39 MODULEMD_TOOL=modulemd_tools SITEPACKAGES=true
+      script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
+    - env: TOXENV=py39 MODULEMD_TOOL=bld2repo SITEPACKAGES=true
+      script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
     - env: TOXENV=flake8
       script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
diff --git a/README.md b/README.md
index a947860..e7eeb6a 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,6 @@ For more information about `modulemd-merge`, please see
 
 
 ### modulemd-generate-macros
-
 Generate `module-build-macros` SRPM package, which is a central piece
 for building modules. It should be present in the buildroot before any
 other module packages are submitted to be built.
@@ -57,6 +56,50 @@ other tools yet, be cautious.**
 [modulemd_tools/README.md](modulemd_tools/README.md)
 
 
+### bld2repo
+Simple tool for dowloading build required RPMs of a modular build from koji.
+
+For more information about `bld2repo`, please see
+[bld2repo/README.md](bld2repo/README.md)
+
+
+## Installation instructions
+
+The `modulemd-tools` package is available in the official Fedora
+repositories, and RHEL 8.5 and higher. As such, it can be easily
+installed with:
+
+```
+dnf install modulemd-tools
+```
+
+There is also a Copr repository providing up-to-date stable builds for
+EPEL8. It is recommended to use this repository for installing
+`modulemd-tools` on RHEL 8.4 and lower.
+
+```
+dnf copr enable frostyx/modulemd-tools-epel
+dnf install modulemd-tools
+```
+
+If you prefer to install the latest stable package from this
+repository, use
+
+```
+git clone https://github.com/rpm-software-management/modulemd-tools.git
+cd modulemd-tools
+sudo dnf builddep modulemd-tools.spec
+tito build --rpm --install
+```
+
+Alternatively, if you want to build and install a package from the
+latest commit, use
+
+```
+tito build --rpm --test --install
+```
+
+
 ## Use cases
 
 ### Creating a module repository from a regular repository
diff --git a/bld2repo/README.md b/bld2repo/README.md
new file mode 100644
index 0000000..7b5f9b5
--- /dev/null
+++ b/bld2repo/README.md
@@ -0,0 +1,25 @@
+# bld2repo
+
+Simple tool which will download modular build dependencies from a 
+modular build in a koji instance and create a RPM repository out of it.
+
+## usage
+
+Provide a build id of modular build in koji and the cli tool will
+download all the rpms tagged in a build tag of a modular rpm build.
+
+```
+$ bld2repo --build-id 1234
+```
+
+After the download is finished the tool will call createrepo_c on the
+working directory, creating a rpm repository.
+
+The defaults are set to the current fedora koji instance.
+If you are using a different koji instance please adjust those
+values through script arguments. For more information about script
+arguments please run:
+
+```
+$ bld2repo -h
+```
\ No newline at end of file
diff --git a/bld2repo/bld2repo/__init__.py b/bld2repo/bld2repo/__init__.py
new file mode 100644
index 0000000..2a6c071
--- /dev/null
+++ b/bld2repo/bld2repo/__init__.py
@@ -0,0 +1,142 @@
+import os
+import sys
+import urllib.request
+import subprocess
+
+import koji
+
+
+def get_buildrequire_pkgs_from_build(build_id, session, config):
+    """
+    Function which queries koji for pkgs whom belong to a given build tag
+    of a koji build and paires rpms with their respective package.
+
+    :param str build_id: build id of a build in koji.
+    :param koji.ClientSession session: koji connection session object
+    :return: list of pairings of package and rpms.
+    :rtype: list
+    """
+    print("Retriewing build metadata from: ", config.koji_host)
+    build = session.getBuild(build_id)
+    if not build:
+        raise Exception("Build with id '{id}' has not been found.".format(id=build_id))
+
+    print("Build with the ID", build_id, "found.")
+    tags = session.listTags(build["build_id"])
+
+    build_tag = [t["name"] for t in tags if t["name"].endswith("-build")]
+    if not build_tag:
+        raise Exception("Build with id '{id}' is not tagged in a 'build' tag.".format(id=build_id))
+
+    tag_data = session.listTaggedRPMS(build_tag[0], latest=True, inherit=True)
+
+    print("Found the build tag '", build_tag[0], "' associated with the build.")
+    tagged_rpms = tag_data[0]
+    tagged_pkgs = tag_data[1]
+    pkgs = []
+    archs = [config.arch, "noarch"]
+    print("Gathering packages and rpms tagged in '", build_tag[0],"'.")
+    for pkg in tagged_pkgs:
+        pkg_md = {
+            "package": pkg,
+            "rpms": [],
+        }
+
+        for rpm in tagged_rpms:
+            if pkg["build_id"] == rpm["build_id"] and rpm["arch"] in archs:
+                pkg_md["rpms"].append(rpm)
+                tagged_rpms.remove(rpm)
+
+        if pkg_md["rpms"]:
+            pkgs.append(pkg_md)
+    print("Gathering done.")
+    return pkgs
+
+
+def add_rpm_urls(pkgs, config):
+    """
+    For each rpm from a package creates an download url and adds it to the package.
+
+    :param list pkgs: list of packages
+    :return pkgs: list of packages and their rpms
+    :rtype: list
+    :return rpm_num: number of rpms
+    :rtype: int
+    """
+    rpm_num = 0
+    for pkg in pkgs:
+        build_path = koji.pathinfo.build(pkg["package"]).replace(koji.pathinfo.topdir, "")
+        pkg["rpm_urls"] = []
+        for rpm in pkg["rpms"]:
+            rpm_num += 1
+            rpm_filename = "-".join([rpm["name"], rpm["version"],
+                                     rpm["release"]]) + "." + rpm["arch"] + ".rpm"
+            rpm_url = config.koji_storage_host + build_path + "/" + rpm["arch"] + "/" + rpm_filename
+            pkg["rpm_urls"].append(rpm_url)
+
+
+    return pkgs, rpm_num
+
+
+def download_file(url, target_pkg_dir, filename):
+    """
+    Wrapper function for downloading a file
+
+    :param str url: url to a file
+    :param str target_pkg_dir: the dir where the file should be downloaded
+    :param str filename: the name of the downloaded file
+    """
+    abs_file_path = "/".join([target_pkg_dir, filename])
+    try:
+        urllib.request.urlretrieve(url, abs_file_path)
+    except Exception as ex:
+        raise Exception("HTTP error for url: {url}\nError message: {msg}\nHTTP code: {code}".format(
+            url=ex.url, msg=ex.msg, code=ex.code))
+
+
+def rpm_bulk_download(pkgs, rpm_num, working_dir):
+    """
+    Downloads all the rpms from which belong to a package.
+
+    :param list pkgs: list of pkgs with their rpms and urls to those rpms
+    :param int rpm_num: number of all the rpms included in pkgs
+    :param str working_dir: the dir where the rpms will be downloaded
+    """
+    print("Starting bulk download of rpms...")
+    rpm_dwnlded = 0
+
+    for pkg in pkgs:
+        for url in pkg["rpm_urls"]:
+            # we print the status of the download
+            status = "[{done}/{total}]".format(done=rpm_dwnlded, total=rpm_num)
+            print(status, end="\r", flush=True)
+            # we store the rpm in a similar location as it is on the storage server
+            url_parts = url.split("/")
+            filename = url_parts[-1]
+            arch = url_parts[-2]
+            pkg_name = "-".join([url_parts[-5], url_parts[-4], url_parts[-3]])
+            target_pkg_dir = "/".join([working_dir, pkg_name, arch])
+            # we create the package dir if it is not created
+            if not os.path.exists(target_pkg_dir):
+                os.makedirs(target_pkg_dir)
+            else:
+                # if we downloaded the file already we skip
+                file_path = target_pkg_dir + "/" + filename
+                if os.path.exists(file_path):
+                    rpm_dwnlded += 1
+                    continue
+            download_file(url, target_pkg_dir, filename)
+            rpm_dwnlded += 1
+
+    # update the status last time to mark all of the rpms downloaded
+    status = "[{done}/{total}]".format(done=rpm_dwnlded, total=rpm_num)
+    print(status)
+    print("Download successful.")
+
+
+def create_repo(working_dir):
+    print("Calling createrepo_c...")
+    args = ["createrepo_c", working_dir]
+    subprocess.Popen(args, cwd=working_dir).communicate()
+    print("Repo created.")
+
diff --git a/bld2repo/bld2repo/cli.py b/bld2repo/bld2repo/cli.py
new file mode 100644
index 0000000..bdf7197
--- /dev/null
+++ b/bld2repo/bld2repo/cli.py
@@ -0,0 +1,58 @@
+import argparse
+import os
+
+from bld2repo import (get_buildrequire_pkgs_from_build, add_rpm_urls, rpm_bulk_download,
+                      create_repo)
+from bld2repo.config import Config
+from bld2repo.utils import get_koji_session
+
+
+def get_arg_parser():
+    description = (
+        "When provided with a build id it will download all buildrequired RPMs"
+        "of a modular koji build into the provided directory and create a repository out of it."
+    )
+    parser = argparse.ArgumentParser("bld2repo", description=description,
+                                     formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+    parser.add_argument("-b", "--build-id", required=True, type=int, help="ID of a koji build.")
+    parser.add_argument("-d", "--result-dir", help="Directory where the RPMs are downloaded.",
+                        default=".", type=str)
+    parser.add_argument("-a", "--arch", help=("For which architecture the RPMs should be download"
+                                              "ed. The 'noarch' is included automatically."),
+                        default="x86_64", type=str)
+    parser.add_argument("-k", "--koji-host", type=str,
+                        default="https://koji.fedoraproject.org/kojihub",
+                        help="Koji host base url")
+    parser.add_argument("-s", "--koji-storage-host", type=str,
+                        default="https://kojipkgs.fedoraproject.org",
+                        help=("Koji storage storage host base url. Server where the RPMs are "
+                              "stored. Required to be used together with `--koji-host`."))
+    return parser
+
+
+def main():
+    parser = get_arg_parser()
+    args = parser.parse_args()
+
+    koji_host_dflt = parser.get_default("koji_host")
+
+    if args.koji_host != koji_host_dflt:
+        koji_storage_dflt = parser.get_default("koji_storage_host")
+        if args.koji_storage_host == koji_storage_dflt:
+            parser.error("--koji-host and --koji-storage-host need to be used to together.")
+
+    config = Config(args.koji_host, args.koji_storage_host, args.arch, args.result_dir)
+    session = get_koji_session(config)
+
+    pkgs = get_buildrequire_pkgs_from_build(args.build_id, session, config)
+
+    pkgs, rpm_num = add_rpm_urls(pkgs, config)
+
+    rpm_bulk_download(pkgs, rpm_num, config.result_dir)
+
+    create_repo(config.result_dir)
+
+
+if __name__ == "__main__":
+    main()
+
diff --git a/bld2repo/bld2repo/config.py b/bld2repo/bld2repo/config.py
new file mode 100644
index 0000000..6e53742
--- /dev/null
+++ b/bld2repo/bld2repo/config.py
@@ -0,0 +1,8 @@
+class Config():
+
+    def __init__(self, koji_host, koji_storage_host, arch, result_dir):
+        self.koji_host = koji_host
+        self.koji_storage_host = koji_storage_host
+        self.arch = arch
+        self.result_dir = result_dir
+
diff --git a/bld2repo/bld2repo/utils.py b/bld2repo/bld2repo/utils.py
new file mode 100644
index 0000000..9d3a2e1
--- /dev/null
+++ b/bld2repo/bld2repo/utils.py
@@ -0,0 +1,9 @@
+import koji
+
+
+def get_koji_session(config):
+
+    session = koji.ClientSession(config.koji_host)
+
+    return session
+
diff --git a/bld2repo/requirements.txt b/bld2repo/requirements.txt
new file mode 100644
index 0000000..5dd5f84
--- /dev/null
+++ b/bld2repo/requirements.txt
@@ -0,0 +1 @@
+koji
\ No newline at end of file
diff --git a/bld2repo/setup.py b/bld2repo/setup.py
new file mode 100644
index 0000000..5c6a6be
--- /dev/null
+++ b/bld2repo/setup.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+import os.path
+
+from setuptools import setup, find_packages
+
+dirname = os.path.dirname(os.path.realpath(__file__))
+
+with open(os.path.join(dirname, "README.md"), "r") as fh:
+    long_description = fh.read()
+
+with open(os.path.join(dirname, 'requirements.txt'), "r") as f:
+    requires = f.read().splitlines()
+
+setup(
+    name='bld2repo',
+    version='0.1',
+    packages=find_packages(exclude=("tests",)),
+    url='https://github.com/rpm-software-management/modulemd-tools',
+    license='MIT',
+    author='Martin Čurlej',
+    author_email='mcurlej@redhat.com',
+    description=('Tool to download modular build dependencies of '
+                 'a modular build from koji.'),
+    long_description=long_description,
+    long_description_content_type='text/markdown',
+    install_requires=requires,
+    entry_points={
+        'console_scripts': [
+            'bld2repo=bld2repo.cli:main'],
+    },
+    classifiers=[
+        "Programming Language :: Python :: 3",
+        "License :: OSI Approved :: MIT License",
+        "Operating System :: POSIX :: Linux",
+    ],
+    include_package_data=True,
+)
+
diff --git a/bld2repo/test-requirements.txt b/bld2repo/test-requirements.txt
new file mode 100644
index 0000000..55b033e
--- /dev/null
+++ b/bld2repo/test-requirements.txt
@@ -0,0 +1 @@
+pytest
\ No newline at end of file
diff --git a/bld2repo/tests/__init__.py b/bld2repo/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/bld2repo/tests/test_bld2repo.py b/bld2repo/tests/test_bld2repo.py
new file mode 100644
index 0000000..9255014
--- /dev/null
+++ b/bld2repo/tests/test_bld2repo.py
@@ -0,0 +1,276 @@
+import os
+from unittest import mock
+import tempfile
+
+import pytest
+
+from bld2repo import (get_buildrequire_pkgs_from_build, add_rpm_urls, rpm_bulk_download, 
+                      create_repo)
+from bld2repo.config import Config
+from tests.utils import load_test_data
+
+
+def test_get_buildrequire_pkgs_from_build_default():
+    """ Test for gathering x86_64 build dependencies."""
+
+    config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+    build = load_test_data("pki_core_build")
+    tags = load_test_data("pki_core_tags")
+    build_tag_md = load_test_data("pki_core_build_tag")
+
+    mock_session = mock.Mock()
+
+    mock_session.getBuild.return_value = build
+    mock_session.listTags.return_value = tags
+    mock_session.listTaggedRPMS.return_value = build_tag_md
+
+    pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+
+    assert type(pkgs) == list
+    assert len(pkgs) == 50
+    for pkg in pkgs:
+        for rpm in pkg["rpms"]:
+            assert rpm["arch"] in ["x86_64", "noarch"]
+
+
+def test_get_buildrequire_pkgs_from_build_aarch64():
+    """ Test for gathering aarch64 build dependencies."""
+
+    config = Config("koji_fake_url", "koji_fake_storage", "aarch64", ".")
+    build = load_test_data("pki_core_build")
+    tags = load_test_data("pki_core_tags")
+    build_tag_md = load_test_data("pki_core_build_tag")
+
+    mock_session = mock.Mock()
+
+    mock_session.getBuild.return_value = build
+    mock_session.listTags.return_value = tags
+    mock_session.listTaggedRPMS.return_value = build_tag_md
+
+    pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+
+    assert type(pkgs) == list
+    assert len(pkgs) == 50
+    for pkg in pkgs:
+        for rpm in pkg["rpms"]:
+            assert rpm["arch"] in ["aarch64", "noarch"]
+
+
+
+def test_add_rpm_urls():
+    """ Test for adding rpm urls to the pkgs dict for each package """
+
+    config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+    build = load_test_data("pki_core_build")
+    tags = load_test_data("pki_core_tags")
+    build_tag_md = load_test_data("pki_core_build_tag")
+
+    mock_session = mock.Mock()
+
+    mock_session.getBuild.return_value = build
+    mock_session.listTags.return_value = tags
+    mock_session.listTaggedRPMS.return_value = build_tag_md
+
+    pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+    pkgs, rpm_num = add_rpm_urls(pkgs, config)
+
+    expected_rpm_num = 0
+    for pkg in pkgs:
+        assert len(pkg["rpms"]) == len(pkg["rpm_urls"])
+        expected_rpm_num += len(pkg["rpms"])
+        for rpm in pkg["rpms"]:
+            rpm_filename = ("-".join([rpm["name"], rpm["version"], rpm["release"]]) +
+                            "." + rpm["arch"])
+            pkg_md = pkg["package"]
+            expected_url = (config.koji_storage_host + "/vol/" + pkg_md["volume_name"] +
+                            "/packages/" + pkg_md["package_name"] + "/" + pkg_md["version"] + "/" +
+                            pkg_md["release"] + "/" + rpm["arch"] + "/" + rpm_filename + ".rpm")
+            assert expected_url in pkg["rpm_urls"]
+
+    assert expected_rpm_num == rpm_num
+
+
+@mock.patch("bld2repo.download_file")
+def test_rpm_bulk_download(mock_download_file):
+    """ Test if the rpm files are downloaded. """
+
+    tmp_dir = tempfile.TemporaryDirectory()
+    config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+    build = load_test_data("pki_core_build")
+    tags = load_test_data("pki_core_tags")
+    build_tag_md = load_test_data("pki_core_build_tag")
+
+    mock_session = mock.Mock()
+
+    mock_session.getBuild.return_value = build
+    mock_session.listTags.return_value = tags
+    mock_session.listTaggedRPMS.return_value = build_tag_md
+    
+
+    def download_file(url, target_pkg_dir, filename):
+        """ Mock function which fakes rpm downloads """
+        abs_file_path = "/".join([target_pkg_dir, filename])
+        open(abs_file_path, "w").close()
+
+    mock_download_file.side_effect = download_file
+
+    pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+    pkgs, rpm_num = add_rpm_urls(pkgs, config)
+    rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+    # we gather all the files created on disk 
+    created_rpm_files = []
+    for _, _, f in os.walk(tmp_dir.name):
+        created_rpm_files += f
+
+    # test if the number of created files is the same as provided by the metadata
+    assert len(created_rpm_files) == rpm_num
+
+    # test if the filenames are the same as described in the metadata
+    for pkg in pkgs:
+        for rpm_url in pkg["rpm_urls"]:
+            rpm = rpm_url.split("/")[-1]
+            assert rpm in created_rpm_files
+
+
+
+@mock.patch("bld2repo.download_file")
+def test_rpm_bulk_download_pkg_exist(mock_download_file):
+    """ Test if we create each pkg dir only once. """
+
+    tmp_dir = tempfile.TemporaryDirectory()
+    config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+    build = load_test_data("pki_core_build")
+    tags = load_test_data("pki_core_tags")
+    build_tag_md = load_test_data("pki_core_build_tag")
+
+    mock_session = mock.Mock()
+
+    mock_session.getBuild.return_value = build
+    mock_session.listTags.return_value = tags
+    mock_session.listTaggedRPMS.return_value = build_tag_md
+    
+
+    def download_file(url, target_pkg_dir, filename):
+        """ Mock function which fakes rpm downloads """
+        abs_file_path = "/".join([target_pkg_dir, filename])
+        open(abs_file_path, "w").close()
+
+    mock_download_file.side_effect = download_file
+
+    pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+    pkgs, rpm_num = add_rpm_urls(pkgs, config)
+    rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+    with mock.patch("bld2repo.os.makedirs") as mock_makedirs:
+        rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+    assert not mock_makedirs.call_count
+
+
+@mock.patch("bld2repo.download_file")
+def test_rpm_bulk_download_rpm_file_exists(mock_download_file):
+    """ Test if we download each rpm file only once. If the file exists we skip it. """
+
+    tmp_dir = tempfile.TemporaryDirectory()
+    config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+    build = load_test_data("pki_core_build")
+    tags = load_test_data("pki_core_tags")
+    build_tag_md = load_test_data("pki_core_build_tag")
+
+    mock_session = mock.Mock()
+
+    mock_session.getBuild.return_value = build
+    mock_session.listTags.return_value = tags
+    mock_session.listTaggedRPMS.return_value = build_tag_md
+    
+
+    def download_file(url, target_pkg_dir, filename):
+        """ Mock function which fakes rpm downloads """
+        abs_file_path = "/".join([target_pkg_dir, filename])
+        open(abs_file_path, "w").close()
+
+    mock_download_file.side_effect = download_file
+
+    pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+    pkgs, rpm_num = add_rpm_urls(pkgs, config)
+    rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+    rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+    # the call_count should be the same as the number of rpms in the metadata.
+    # we called the rpm_bulk_download function twice, but the second time the download
+    # part should be skipped for the same dir.
+    assert mock_download_file.call_count == rpm_num
+
+
+@mock.patch("bld2repo.download_file")
+def test_create_repo(mock_download_file):
+    """ Test to create a rpm repository of out a dir. """
+    tmp_dir = tempfile.TemporaryDirectory()
+    config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+    build = load_test_data("pki_core_build")
+    tags = load_test_data("pki_core_tags")
+    build_tag_md = load_test_data("pki_core_build_tag")
+
+    mock_session = mock.Mock()
+
+    mock_session.getBuild.return_value = build
+    mock_session.listTags.return_value = tags
+    mock_session.listTaggedRPMS.return_value = build_tag_md
+    
+
+    def download_file(url, target_pkg_dir, filename):
+        """ Mock function which fakes rpm downloads """
+        abs_file_path = "/".join([target_pkg_dir, filename])
+        open(abs_file_path, "w").close()
+
+    mock_download_file.side_effect = download_file
+
+    pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+    pkgs, rpm_num = add_rpm_urls(pkgs, config)
+    rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+    create_repo(tmp_dir.name)
+    assert os.path.exists(tmp_dir.name + "/repodata" )
+
+
+def test_no_build_found_exception():
+    """ Test raise when no build found """
+    mock_session = mock.Mock()
+    config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+    mock_session.getBuild.return_value = {}
+
+    with pytest.raises(Exception) as ex:
+        get_buildrequire_pkgs_from_build("1234", mock_session, config)
+
+    err_msg = ex.value.args[0]
+    assert "1234" in err_msg
+    assert "not been found" in err_msg
+
+
+def test_not_module_exception():
+    """ Test raise when the build does not contain a build tag and is not a module. """
+    mock_session = mock.Mock()
+    config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+    build = load_test_data("pki_core_build")
+    tags = load_test_data("pki_core_tags")
+
+    mock_session.getBuild.return_value = build
+    # we remove the build tag from the tags list
+    tags.pop(1)
+    mock_session.listTags.return_value = tags
+
+    with pytest.raises(Exception) as ex:
+        get_buildrequire_pkgs_from_build("1234", mock_session, config)
+
+    err_msg = ex.value.args[0]
+    assert "1234" in err_msg
+    assert "not tagged" in err_msg
+    assert "'build' tag" in err_msg
+
diff --git a/bld2repo/tests/test_data/pki_core_build.json b/bld2repo/tests/test_data/pki_core_build.json
new file mode 100644
index 0000000..1b0aa1e
--- /dev/null
+++ b/bld2repo/tests/test_data/pki_core_build.json
@@ -0,0 +1,33 @@
+{
+    "build_id": 1557161,
+    "cg_id": null,
+    "completion_time": "2021-03-30 23:30:32.156112",
+    "completion_ts": 1617147032.15611,
+    "creation_event_id": 38240589,
+    "creation_time": "2021-03-30 23:15:00.109509",
+    "creation_ts": 1617146100.10951,
+    "epoch": null,
+    "extra": {
+        "source": {
+            "original_url": "git://pkgs.devel.redhat.com/rpms/pki-core?#026f2b900ad160e096ceec13f43d7bbce45a11ad"
+        }
+    },
+    "id": 1557161,
+    "name": "pki-core",
+    "nvr": "pki-core-10.8.3-6.module+el8.2.0+10554+cf83aa72",
+    "owner_id": 4066,
+    "owner_name": "mbs",
+    "package_id": 31009,
+    "package_name": "pki-core",
+    "release": "6.module+el8.2.0+10554+cf83aa72",
+    "source": "git://pkgs.devel.redhat.com/rpms/pki-core#026f2b900ad160e096ceec13f43d7bbce45a11ad",
+    "start_time": "2021-03-30 23:15:00.102532",
+    "start_ts": 1617146100.10253,
+    "state": 1,
+    "task_id": 35853377,
+    "version": "10.8.3",
+    "volume_id": 9,
+    "volume_name": "rhel-8",
+    "cg_name": null
+}
+
diff --git a/bld2repo/tests/test_data/pki_core_build_tag.json b/bld2repo/tests/test_data/pki_core_build_tag.json
new file mode 100644
index 0000000..9f71b4e
--- /dev/null
+++ b/bld2repo/tests/test_data/pki_core_build_tag.json
@@ -0,0 +1,6647 @@
+[
+    [
+        {
+            "arch": "src",
+            "build_id": 1557147,
+            "buildroot_id": 7226532,
+            "buildtime": 1617143722,
+            "epoch": null,
+            "extra": null,
+            "id": 9520081,
+            "metadata_only": false,
+            "name": "module-build-macros",
+            "payloadhash": "5386efe368f424c16cb2142b1ac4d8ec",
+            "release": "1.module+el8.2.0+10554+cf83aa72",
+            "size": 9095,
+            "version": "0.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1557147,
+            "buildroot_id": 7226532,
+            "buildtime": 1617143723,
+            "epoch": null,
+            "extra": null,
+            "id": 9520082,
+            "metadata_only": false,
+            "name": "module-build-macros",
+            "payloadhash": "b33936c7e1636e0ff7ddc455ea8463f8",
+            "release": "1.module+el8.2.0+10554+cf83aa72",
+            "size": 15695,
+            "version": "0.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 1557155,
+            "buildroot_id": 7226562,
+            "buildtime": 1617144387,
+            "epoch": null,
+            "extra": null,
+            "id": 9520101,
+            "metadata_only": false,
+            "name": "jss",
+            "payloadhash": "5ddd4bb035472c3a797a2f16bf50d922",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 902749,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557155,
+            "buildroot_id": 7226562,
+            "buildtime": 1617144583,
+            "epoch": null,
+            "extra": null,
+            "id": 9520102,
+            "metadata_only": false,
+            "name": "jss",
+            "payloadhash": "21df9049c1a406990a33f473b9e36cc7",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 1111887,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557155,
+            "buildroot_id": 7226562,
+            "buildtime": 1617144583,
+            "epoch": null,
+            "extra": null,
+            "id": 9520103,
+            "metadata_only": false,
+            "name": "jss-javadoc",
+            "payloadhash": "f3b9f8853e34402e05f12f7fa5e9cb6e",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 883271,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557155,
+            "buildroot_id": 7226562,
+            "buildtime": 1617144583,
+            "epoch": null,
+            "extra": null,
+            "id": 9520104,
+            "metadata_only": false,
+            "name": "jss-debugsource",
+            "payloadhash": "86714a8e4b9a304a9a45c2a1fc70f602",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 130171,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557155,
+            "buildroot_id": 7226562,
+            "buildtime": 1617144583,
+            "epoch": null,
+            "extra": null,
+            "id": 9520105,
+            "metadata_only": false,
+            "name": "jss-debuginfo",
+            "payloadhash": "6abefd43420061695119e9c1f4785285",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 244875,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557155,
+            "buildroot_id": 7226564,
+            "buildtime": 1617144536,
+            "epoch": null,
+            "extra": null,
+            "id": 9520106,
+            "metadata_only": false,
+            "name": "jss",
+            "payloadhash": "6246f16398c4edd43fb8526565c28c6a",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 1310315,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557155,
+            "buildroot_id": 7226564,
+            "buildtime": 1617144536,
+            "epoch": null,
+            "extra": null,
+            "id": 9520107,
+            "metadata_only": false,
+            "name": "jss-javadoc",
+            "payloadhash": "2cbd49ffc66a4ae5a4341cd13e1cb87e",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 883359,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557155,
+            "buildroot_id": 7226564,
+            "buildtime": 1617144536,
+            "epoch": null,
+            "extra": null,
+            "id": 9520108,
+            "metadata_only": false,
+            "name": "jss-debugsource",
+            "payloadhash": "e75d2ffd1bedbdcc3022b058ad2f5fc1",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 130191,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557155,
+            "buildroot_id": 7226564,
+            "buildtime": 1617144536,
+            "epoch": null,
+            "extra": null,
+            "id": 9520109,
+            "metadata_only": false,
+            "name": "jss-debuginfo",
+            "payloadhash": "dc9f53777d00419f58c20d6163bc929b",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 198527,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557155,
+            "buildroot_id": 7226561,
+            "buildtime": 1617144738,
+            "epoch": null,
+            "extra": null,
+            "id": 9520110,
+            "metadata_only": false,
+            "name": "jss-debuginfo",
+            "payloadhash": "3bd9cc4657802c82069691adf5d6595c",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 246931,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557155,
+            "buildroot_id": 7226561,
+            "buildtime": 1617144738,
+            "epoch": null,
+            "extra": null,
+            "id": 9520111,
+            "metadata_only": false,
+            "name": "jss",
+            "payloadhash": "40279a6010121f9cf5ce771f0e1b7739",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 1120635,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557155,
+            "buildroot_id": 7226561,
+            "buildtime": 1617144738,
+            "epoch": null,
+            "extra": null,
+            "id": 9520112,
+            "metadata_only": false,
+            "name": "jss-debugsource",
+            "payloadhash": "c66e3119de30bb26aa38077d2174ba0c",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 130187,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557155,
+            "buildroot_id": 7226561,
+            "buildtime": 1617144738,
+            "epoch": null,
+            "extra": null,
+            "id": 9520113,
+            "metadata_only": false,
+            "name": "jss-javadoc",
+            "payloadhash": "6a4f387cf416ec1bee360940e907d3eb",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 883299,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557155,
+            "buildroot_id": 7226563,
+            "buildtime": 1617144917,
+            "epoch": null,
+            "extra": null,
+            "id": 9520114,
+            "metadata_only": false,
+            "name": "jss",
+            "payloadhash": "203f83aadea0c3fb9204f53dc6ee2b10",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 1110355,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557155,
+            "buildroot_id": 7226563,
+            "buildtime": 1617144917,
+            "epoch": null,
+            "extra": null,
+            "id": 9520115,
+            "metadata_only": false,
+            "name": "jss-javadoc",
+            "payloadhash": "fad27d0913b3a3e4da6e09d1852f638a",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 883779,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557155,
+            "buildroot_id": 7226563,
+            "buildtime": 1617144917,
+            "epoch": null,
+            "extra": null,
+            "id": 9520116,
+            "metadata_only": false,
+            "name": "jss-debugsource",
+            "payloadhash": "8519332071e1848015e74376b05b81c2",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 130171,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557155,
+            "buildroot_id": 7226563,
+            "buildtime": 1617144917,
+            "epoch": null,
+            "extra": null,
+            "id": 9520117,
+            "metadata_only": false,
+            "name": "jss-debuginfo",
+            "payloadhash": "64d2feb693135b0ad0572d19e765daf2",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 238115,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557155,
+            "buildroot_id": 7226565,
+            "buildtime": 1617144496,
+            "epoch": null,
+            "extra": null,
+            "id": 9520118,
+            "metadata_only": false,
+            "name": "jss",
+            "payloadhash": "d9dc94b4ae3ccd59b281ea53ff1ed81f",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 1115767,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557155,
+            "buildroot_id": 7226565,
+            "buildtime": 1617144496,
+            "epoch": null,
+            "extra": null,
+            "id": 9520119,
+            "metadata_only": false,
+            "name": "jss-javadoc",
+            "payloadhash": "7b7081ca8e7e0b384d71ad8b6af3ca5c",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 883267,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557155,
+            "buildroot_id": 7226565,
+            "buildtime": 1617144496,
+            "epoch": null,
+            "extra": null,
+            "id": 9520120,
+            "metadata_only": false,
+            "name": "jss-debugsource",
+            "payloadhash": "4fabf8fad06aa6d6cf7a4cd1a85ee8b4",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 130187,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557155,
+            "buildroot_id": 7226565,
+            "buildtime": 1617144496,
+            "epoch": null,
+            "extra": null,
+            "id": 9520121,
+            "metadata_only": false,
+            "name": "jss-debuginfo",
+            "payloadhash": "3706129d68c1450431944459c5102954",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "size": 241983,
+            "version": "4.6.2"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1166093,
+            "buildroot_id": 5854560,
+            "buildtime": 1586891116,
+            "epoch": null,
+            "extra": null,
+            "id": 7968610,
+            "metadata_only": false,
+            "name": "ldapjdk-javadoc",
+            "payloadhash": "e9ee4b8d3729845fe2af81f857b0ab3b",
+            "release": "2.module+el8.2.0+6294+b7db4606",
+            "size": 50011,
+            "version": "4.21.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1166093,
+            "buildroot_id": 5854560,
+            "buildtime": 1586891116,
+            "epoch": null,
+            "extra": null,
+            "id": 7968608,
+            "metadata_only": false,
+            "name": "ldapjdk",
+            "payloadhash": "09639e0b6768d6afae48aceaf3dec167",
+            "release": "2.module+el8.2.0+6294+b7db4606",
+            "size": 329383,
+            "version": "4.21.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 1166093,
+            "buildroot_id": 5854560,
+            "buildtime": 1586891089,
+            "epoch": null,
+            "extra": null,
+            "id": 7968604,
+            "metadata_only": false,
+            "name": "ldapjdk",
+            "payloadhash": "41b57c082cbe2127e599c355e6d921a0",
+            "release": "2.module+el8.2.0+6294+b7db4606",
+            "size": 2968532,
+            "version": "4.21.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1166092,
+            "buildroot_id": 5854561,
+            "buildtime": 1586891113,
+            "epoch": null,
+            "extra": null,
+            "id": 7968606,
+            "metadata_only": false,
+            "name": "tomcatjss",
+            "payloadhash": "42fac238ac917e90f227d9df8e116104",
+            "release": "2.module+el8.2.0+6294+b7db4606",
+            "size": 44619,
+            "version": "7.4.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 1166092,
+            "buildroot_id": 5854561,
+            "buildtime": 1586891089,
+            "epoch": null,
+            "extra": null,
+            "id": 7968603,
+            "metadata_only": false,
+            "name": "tomcatjss",
+            "payloadhash": "200c66e596e8e075466c068814f7fe95",
+            "release": "2.module+el8.2.0+6294+b7db4606",
+            "size": 50428,
+            "version": "7.4.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146163,
+            "epoch": null,
+            "extra": null,
+            "id": 9520138,
+            "metadata_only": false,
+            "name": "pki-core",
+            "payloadhash": "056894c66286bb5df91a34c3b3211b42",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 7358838,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520139,
+            "metadata_only": false,
+            "name": "pki-symkey",
+            "payloadhash": "df6f7cfac55825244b742711d5ff821c",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 50259,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520140,
+            "metadata_only": false,
+            "name": "pki-base",
+            "payloadhash": "d374c978a701d1dbd86df50fc36ff766",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 296567,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520141,
+            "metadata_only": false,
+            "name": "python3-pki",
+            "payloadhash": "568bd0b566fd91604f8d68174c8ce772",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 162515,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520142,
+            "metadata_only": false,
+            "name": "pki-base-java",
+            "payloadhash": "d25a202dacb35eacbb85b24422998a81",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 719671,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520143,
+            "metadata_only": false,
+            "name": "pki-tools",
+            "payloadhash": "2d50fff207a49dcdecb82ec1336a52dd",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 721095,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520144,
+            "metadata_only": false,
+            "name": "pki-server",
+            "payloadhash": "0667da5b31adb35c9c11f66a2e9f5861",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 3128847,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520145,
+            "metadata_only": false,
+            "name": "pki-ca",
+            "payloadhash": "7a69786b9f40b1603d23b01eac350d4b",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 568935,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520146,
+            "metadata_only": false,
+            "name": "pki-kra",
+            "payloadhash": "18ba119caf4b402bb32b3d2e09aa49c3",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 199923,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520147,
+            "metadata_only": false,
+            "name": "pki-core-debugsource",
+            "payloadhash": "747c2604f77944b09dbe0e4efe67c147",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 369975,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520148,
+            "metadata_only": false,
+            "name": "pki-core-debuginfo",
+            "payloadhash": "94e493330d06df137d8783ec5d3399f6",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 50775,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520149,
+            "metadata_only": false,
+            "name": "pki-symkey-debuginfo",
+            "payloadhash": "f0ffbaf996a022f0381c2976a3572d55",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 130455,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1557161,
+            "buildroot_id": 7226589,
+            "buildtime": 1617146420,
+            "epoch": null,
+            "extra": null,
+            "id": 9520150,
+            "metadata_only": false,
+            "name": "pki-tools-debuginfo",
+            "payloadhash": "3bd96f423bb22a6b7bd542b697582641",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 340223,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557161,
+            "buildroot_id": 7226590,
+            "buildtime": 1617146323,
+            "epoch": null,
+            "extra": null,
+            "id": 9520151,
+            "metadata_only": false,
+            "name": "pki-symkey",
+            "payloadhash": "127573a0327fecfa7aa874159b8a6888",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 56731,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557161,
+            "buildroot_id": 7226590,
+            "buildtime": 1617146323,
+            "epoch": null,
+            "extra": null,
+            "id": 9520152,
+            "metadata_only": false,
+            "name": "pki-tools",
+            "payloadhash": "134310e107d937464fe860525844d5e8",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 730143,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557161,
+            "buildroot_id": 7226590,
+            "buildtime": 1617146323,
+            "epoch": null,
+            "extra": null,
+            "id": 9520153,
+            "metadata_only": false,
+            "name": "pki-core-debugsource",
+            "payloadhash": "6e9df82d147e7341f33b51ba8a475d4e",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 369839,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557161,
+            "buildroot_id": 7226590,
+            "buildtime": 1617146323,
+            "epoch": null,
+            "extra": null,
+            "id": 9520154,
+            "metadata_only": false,
+            "name": "pki-core-debuginfo",
+            "payloadhash": "c453f18850fa782c0b96cd23cd0f6b3c",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 51195,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557161,
+            "buildroot_id": 7226590,
+            "buildtime": 1617146323,
+            "epoch": null,
+            "extra": null,
+            "id": 9520155,
+            "metadata_only": false,
+            "name": "pki-symkey-debuginfo",
+            "payloadhash": "a0432de5c6d7c6c1edc75ef41c76c54f",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 120439,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1557161,
+            "buildroot_id": 7226590,
+            "buildtime": 1617146323,
+            "epoch": null,
+            "extra": null,
+            "id": 9520156,
+            "metadata_only": false,
+            "name": "pki-tools-debuginfo",
+            "payloadhash": "7980a783980e44d6ad6eff89f83b48c5",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 288851,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557161,
+            "buildroot_id": 7226593,
+            "buildtime": 1617146989,
+            "epoch": null,
+            "extra": null,
+            "id": 9520157,
+            "metadata_only": false,
+            "name": "pki-core-debuginfo",
+            "payloadhash": "d2e5ab71ee3ebece22d0e0b8a89909c5",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 50891,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557161,
+            "buildroot_id": 7226593,
+            "buildtime": 1617146989,
+            "epoch": null,
+            "extra": null,
+            "id": 9520158,
+            "metadata_only": false,
+            "name": "pki-tools",
+            "payloadhash": "e7fbd1f167b96c13db9a587f22ef270b",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 729307,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557161,
+            "buildroot_id": 7226593,
+            "buildtime": 1617146989,
+            "epoch": null,
+            "extra": null,
+            "id": 9520159,
+            "metadata_only": false,
+            "name": "pki-symkey",
+            "payloadhash": "d8621364f2b5b8a0322244f736ef77d6",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 55467,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557161,
+            "buildroot_id": 7226593,
+            "buildtime": 1617146989,
+            "epoch": null,
+            "extra": null,
+            "id": 9520160,
+            "metadata_only": false,
+            "name": "pki-tools-debuginfo",
+            "payloadhash": "74d3f563beb3a5ad487ac78f6692013d",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 336207,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557161,
+            "buildroot_id": 7226593,
+            "buildtime": 1617146989,
+            "epoch": null,
+            "extra": null,
+            "id": 9520161,
+            "metadata_only": false,
+            "name": "pki-symkey-debuginfo",
+            "payloadhash": "90664838b020243e992ef2f59dc81a1c",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 132579,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1557161,
+            "buildroot_id": 7226593,
+            "buildtime": 1617146989,
+            "epoch": null,
+            "extra": null,
+            "id": 9520162,
+            "metadata_only": false,
+            "name": "pki-core-debugsource",
+            "payloadhash": "e7ba64a58ccd74ff3e01bba22fac449e",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 369991,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557161,
+            "buildroot_id": 7226592,
+            "buildtime": 1617146745,
+            "epoch": null,
+            "extra": null,
+            "id": 9520163,
+            "metadata_only": false,
+            "name": "pki-symkey",
+            "payloadhash": "3c250fe1b110ab722280a6dfe26e1d6f",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 49887,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557161,
+            "buildroot_id": 7226592,
+            "buildtime": 1617146745,
+            "epoch": null,
+            "extra": null,
+            "id": 9520164,
+            "metadata_only": false,
+            "name": "pki-tools",
+            "payloadhash": "b11cbf59eea679e4561f1df50e198451",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 715175,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557161,
+            "buildroot_id": 7226592,
+            "buildtime": 1617146745,
+            "epoch": null,
+            "extra": null,
+            "id": 9520165,
+            "metadata_only": false,
+            "name": "pki-core-debugsource",
+            "payloadhash": "5f13330512e8c94edac04981f4af37cc",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 369851,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557161,
+            "buildroot_id": 7226592,
+            "buildtime": 1617146745,
+            "epoch": null,
+            "extra": null,
+            "id": 9520166,
+            "metadata_only": false,
+            "name": "pki-core-debuginfo",
+            "payloadhash": "e7b00a4eb0a8401a75cd5870d174a293",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 50923,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557161,
+            "buildroot_id": 7226592,
+            "buildtime": 1617146745,
+            "epoch": null,
+            "extra": null,
+            "id": 9520167,
+            "metadata_only": false,
+            "name": "pki-symkey-debuginfo",
+            "payloadhash": "c98a2155b37b49356690119b5e1bbd82",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 128055,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1557161,
+            "buildroot_id": 7226592,
+            "buildtime": 1617146745,
+            "epoch": null,
+            "extra": null,
+            "id": 9520168,
+            "metadata_only": false,
+            "name": "pki-tools-debuginfo",
+            "payloadhash": "7d9a9c18fb60295e3f0314dee0ce450c",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 323555,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557161,
+            "buildroot_id": 7226591,
+            "buildtime": 1617146303,
+            "epoch": null,
+            "extra": null,
+            "id": 9520169,
+            "metadata_only": false,
+            "name": "pki-symkey",
+            "payloadhash": "e4a3ffb739ab0ef25e48857593f7b2d9",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 53727,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557161,
+            "buildroot_id": 7226591,
+            "buildtime": 1617146303,
+            "epoch": null,
+            "extra": null,
+            "id": 9520170,
+            "metadata_only": false,
+            "name": "pki-tools",
+            "payloadhash": "280e699ed4ac01b8c0b58c4de94336da",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 724995,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557161,
+            "buildroot_id": 7226591,
+            "buildtime": 1617146303,
+            "epoch": null,
+            "extra": null,
+            "id": 9520171,
+            "metadata_only": false,
+            "name": "pki-core-debugsource",
+            "payloadhash": "e7e22f5e78358404db49ac6cfff2f105",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 369895,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557161,
+            "buildroot_id": 7226591,
+            "buildtime": 1617146303,
+            "epoch": null,
+            "extra": null,
+            "id": 9520172,
+            "metadata_only": false,
+            "name": "pki-core-debuginfo",
+            "payloadhash": "5f6c99b7d21696d15dbea05e98c72d2e",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 51339,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557161,
+            "buildroot_id": 7226591,
+            "buildtime": 1617146303,
+            "epoch": null,
+            "extra": null,
+            "id": 9520173,
+            "metadata_only": false,
+            "name": "pki-symkey-debuginfo",
+            "payloadhash": "4263e732a2f7b7081672faacdada98b4",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 133491,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1557161,
+            "buildroot_id": 7226591,
+            "buildtime": 1617146303,
+            "epoch": null,
+            "extra": null,
+            "id": 9520174,
+            "metadata_only": false,
+            "name": "pki-tools-debuginfo",
+            "payloadhash": "4a5896467f152a76cf510945e316a293",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "size": 333647,
+            "version": "10.8.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 959046,
+            "buildroot_id": 5142752,
+            "buildtime": 1567154385,
+            "epoch": null,
+            "extra": null,
+            "id": 7305843,
+            "metadata_only": false,
+            "name": "slapi-nis-debugsource",
+            "payloadhash": "f90093708da4100deedc0ca79da65c91",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 133736,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 959046,
+            "buildroot_id": 5142752,
+            "buildtime": 1567154385,
+            "epoch": null,
+            "extra": null,
+            "id": 7305842,
+            "metadata_only": false,
+            "name": "slapi-nis-debuginfo",
+            "payloadhash": "53b8b29332bda6b6fac755dc6abc909e",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 302496,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 959046,
+            "buildroot_id": 5142752,
+            "buildtime": 1567154385,
+            "epoch": null,
+            "extra": null,
+            "id": 7305841,
+            "metadata_only": false,
+            "name": "slapi-nis",
+            "payloadhash": "34aa9b0b8d85caeac3c03795482fd7fe",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 169488,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 959046,
+            "buildroot_id": 5142749,
+            "buildtime": 1567153770,
+            "epoch": null,
+            "extra": null,
+            "id": 7305840,
+            "metadata_only": false,
+            "name": "slapi-nis-debugsource",
+            "payloadhash": "2af51e16f744166094fa7d2d4d8cdc51",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 133752,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 959046,
+            "buildroot_id": 5142749,
+            "buildtime": 1567153770,
+            "epoch": null,
+            "extra": null,
+            "id": 7305839,
+            "metadata_only": false,
+            "name": "slapi-nis",
+            "payloadhash": "63cfeeadb8c3763d0d75ba2c32bedc9d",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 152636,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 959046,
+            "buildroot_id": 5142749,
+            "buildtime": 1567153770,
+            "epoch": null,
+            "extra": null,
+            "id": 7305838,
+            "metadata_only": false,
+            "name": "slapi-nis-debuginfo",
+            "payloadhash": "01d5582f04af40727d412b1b8738779e",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 281388,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 959046,
+            "buildroot_id": 5142757,
+            "buildtime": 1567153793,
+            "epoch": null,
+            "extra": null,
+            "id": 7305837,
+            "metadata_only": false,
+            "name": "slapi-nis",
+            "payloadhash": "6d7940d55ef75f0ea0f1c03d0fc3cd62",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 159844,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 959046,
+            "buildroot_id": 5142757,
+            "buildtime": 1567153793,
+            "epoch": null,
+            "extra": null,
+            "id": 7305836,
+            "metadata_only": false,
+            "name": "slapi-nis-debuginfo",
+            "payloadhash": "0507c68adb336fb4400383111bc3f184",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 290348,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 959046,
+            "buildroot_id": 5142757,
+            "buildtime": 1567153793,
+            "epoch": null,
+            "extra": null,
+            "id": 7305835,
+            "metadata_only": false,
+            "name": "slapi-nis-debugsource",
+            "payloadhash": "92f56dd06b90c9ff21fc8e56b0401705",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 133768,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 959046,
+            "buildroot_id": 5142761,
+            "buildtime": 1567153904,
+            "epoch": null,
+            "extra": null,
+            "id": 7305834,
+            "metadata_only": false,
+            "name": "slapi-nis-debuginfo",
+            "payloadhash": "5b7bbba2ee38d5c730fa0f29e5e8f19e",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 298284,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 959046,
+            "buildroot_id": 5142761,
+            "buildtime": 1567153904,
+            "epoch": null,
+            "extra": null,
+            "id": 7305833,
+            "metadata_only": false,
+            "name": "slapi-nis",
+            "payloadhash": "7468af2ec15374fcd9d277173b9d1bae",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 155404,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 959046,
+            "buildroot_id": 5142761,
+            "buildtime": 1567153904,
+            "epoch": null,
+            "extra": null,
+            "id": 7305832,
+            "metadata_only": false,
+            "name": "slapi-nis-debugsource",
+            "payloadhash": "ef43adb46bfa6e7f92a5243768ed3874",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 133720,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "src",
+            "build_id": 959046,
+            "buildroot_id": 5142761,
+            "buildtime": 1567153851,
+            "epoch": null,
+            "extra": null,
+            "id": 7305831,
+            "metadata_only": false,
+            "name": "slapi-nis",
+            "payloadhash": "bc20464aa5c058a86a5e9ef5998df07d",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "size": 647332,
+            "version": "0.56.3"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1022957,
+            "buildroot_id": 5374897,
+            "buildtime": 1574930685,
+            "epoch": null,
+            "extra": null,
+            "id": 7568333,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debuginfo",
+            "payloadhash": "fd6fe5cff8301f0a98bbb754de648110",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 249704,
+            "version": "11.2"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1022957,
+            "buildroot_id": 5374897,
+            "buildtime": 1574930685,
+            "epoch": null,
+            "extra": null,
+            "id": 7568332,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debugsource",
+            "payloadhash": "71c6010d9891c2ccc652a1c34b23c5d5",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 115964,
+            "version": "11.2"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1022957,
+            "buildroot_id": 5374897,
+            "buildtime": 1574930685,
+            "epoch": null,
+            "extra": null,
+            "id": 7568331,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap",
+            "payloadhash": "a1882d33f317d591e23c9181cd7c77d8",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 137312,
+            "version": "11.2"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1022957,
+            "buildroot_id": 5374888,
+            "buildtime": 1574930563,
+            "epoch": null,
+            "extra": null,
+            "id": 7568330,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap",
+            "payloadhash": "c767f27528e5e44152e862b40e3a6aea",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 142204,
+            "version": "11.2"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1022957,
+            "buildroot_id": 5374888,
+            "buildtime": 1574930563,
+            "epoch": null,
+            "extra": null,
+            "id": 7568329,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debuginfo",
+            "payloadhash": "0f6465da56c0792ea92007372fdd57fc",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 206524,
+            "version": "11.2"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1022957,
+            "buildroot_id": 5374888,
+            "buildtime": 1574930563,
+            "epoch": null,
+            "extra": null,
+            "id": 7568328,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debugsource",
+            "payloadhash": "91e8302402a95150d30b2ad2ac465bf7",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 116004,
+            "version": "11.2"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1022957,
+            "buildroot_id": 5374885,
+            "buildtime": 1574930522,
+            "epoch": null,
+            "extra": null,
+            "id": 7568327,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debugsource",
+            "payloadhash": "fc4468428bc66d73a44d468cca176a6e",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 115960,
+            "version": "11.2"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1022957,
+            "buildroot_id": 5374885,
+            "buildtime": 1574930522,
+            "epoch": null,
+            "extra": null,
+            "id": 7568326,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap",
+            "payloadhash": "f255964ac27cf19100f55b245ea37624",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 124464,
+            "version": "11.2"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1022957,
+            "buildroot_id": 5374885,
+            "buildtime": 1574930522,
+            "epoch": null,
+            "extra": null,
+            "id": 7568325,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debuginfo",
+            "payloadhash": "a6530da31160e009e41c3ba335212d86",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 247200,
+            "version": "11.2"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1022957,
+            "buildroot_id": 5374887,
+            "buildtime": 1574930544,
+            "epoch": null,
+            "extra": null,
+            "id": 7568324,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap",
+            "payloadhash": "acd1720fbc2fa05e19474fc78deb30c2",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 132000,
+            "version": "11.2"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1022957,
+            "buildroot_id": 5374887,
+            "buildtime": 1574930544,
+            "epoch": null,
+            "extra": null,
+            "id": 7568323,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debuginfo",
+            "payloadhash": "b443bff4b09e5edfc885774cbca3066c",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 249744,
+            "version": "11.2"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1022957,
+            "buildroot_id": 5374887,
+            "buildtime": 1574930544,
+            "epoch": null,
+            "extra": null,
+            "id": 7568322,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debugsource",
+            "payloadhash": "fc8a425c7793b78cd1034859a9b67de8",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 115972,
+            "version": "11.2"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1022957,
+            "buildroot_id": 5374884,
+            "buildtime": 1574930653,
+            "epoch": null,
+            "extra": null,
+            "id": 7568321,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap",
+            "payloadhash": "e04196439a7cc492d981a8862be0a894",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 126340,
+            "version": "11.2"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1022957,
+            "buildroot_id": 5374884,
+            "buildtime": 1574930653,
+            "epoch": null,
+            "extra": null,
+            "id": 7568320,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debugsource",
+            "payloadhash": "0170014497a75a7ab4ffbbe83bc59108",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 115948,
+            "version": "11.2"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1022957,
+            "buildroot_id": 5374884,
+            "buildtime": 1574930653,
+            "epoch": null,
+            "extra": null,
+            "id": 7568319,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap-debuginfo",
+            "payloadhash": "b39894204d96979bdcd8d83a8e52a180",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 249296,
+            "version": "11.2"
+        },
+        {
+            "arch": "src",
+            "build_id": 1022957,
+            "buildroot_id": 5374884,
+            "buildtime": 1574930583,
+            "epoch": null,
+            "extra": null,
+            "id": 7568318,
+            "metadata_only": false,
+            "name": "bind-dyndb-ldap",
+            "payloadhash": "d75641df0acdf646f168aff3e9766632",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "size": 375380,
+            "version": "11.2"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 959041,
+            "buildroot_id": 5142729,
+            "buildtime": 1567153609,
+            "epoch": null,
+            "extra": null,
+            "id": 7305712,
+            "metadata_only": false,
+            "name": "python3-qrcode-core",
+            "payloadhash": "92fa61bb05a69197fc9999b1ce35ec18",
+            "release": "12.module+el8.1.0+4107+4a66eb87",
+            "size": 45720,
+            "version": "5.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 959041,
+            "buildroot_id": 5142729,
+            "buildtime": 1567153609,
+            "epoch": null,
+            "extra": null,
+            "id": 7305711,
+            "metadata_only": false,
+            "name": "python3-qrcode",
+            "payloadhash": "b9703404d49f109eed30d2b17c4aadaf",
+            "release": "12.module+el8.1.0+4107+4a66eb87",
+            "size": 16852,
+            "version": "5.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 959041,
+            "buildroot_id": 5142729,
+            "buildtime": 1567153604,
+            "epoch": null,
+            "extra": null,
+            "id": 7305710,
+            "metadata_only": false,
+            "name": "python-qrcode",
+            "payloadhash": "ab5d369595b9410d6c5bf6a4e164119a",
+            "release": "12.module+el8.1.0+4107+4a66eb87",
+            "size": 34334,
+            "version": "5.1"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1093586,
+            "buildroot_id": 5628520,
+            "buildtime": 1581969008,
+            "epoch": null,
+            "extra": null,
+            "id": 7787870,
+            "metadata_only": false,
+            "name": "softhsm-debuginfo",
+            "payloadhash": "7eb77c8d379075bc2fc28911f14128df",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 3325296,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1093586,
+            "buildroot_id": 5628520,
+            "buildtime": 1581969008,
+            "epoch": null,
+            "extra": null,
+            "id": 7787869,
+            "metadata_only": false,
+            "name": "softhsm-debugsource",
+            "payloadhash": "5469a5e312d9bc0973c43bccfe27ac9c",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 198928,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1093586,
+            "buildroot_id": 5628520,
+            "buildtime": 1581969008,
+            "epoch": null,
+            "extra": null,
+            "id": 7787868,
+            "metadata_only": false,
+            "name": "softhsm-devel",
+            "payloadhash": "b4cedc2be7c6302f99723ffbeaaec397",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 20196,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1093586,
+            "buildroot_id": 5628520,
+            "buildtime": 1581969008,
+            "epoch": null,
+            "extra": null,
+            "id": 7787867,
+            "metadata_only": false,
+            "name": "softhsm",
+            "payloadhash": "2761cb844f9bde323472b5edfa2aa336",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 405032,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1093586,
+            "buildroot_id": 5628536,
+            "buildtime": 1581968754,
+            "epoch": null,
+            "extra": null,
+            "id": 7787866,
+            "metadata_only": false,
+            "name": "softhsm-devel",
+            "payloadhash": "fceec29eaf1600f611df16cabbb15cee",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 20248,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1093586,
+            "buildroot_id": 5628536,
+            "buildtime": 1581968754,
+            "epoch": null,
+            "extra": null,
+            "id": 7787865,
+            "metadata_only": false,
+            "name": "softhsm",
+            "payloadhash": "dc82dfbb54003c2b15470c728d802015",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 431392,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1093586,
+            "buildroot_id": 5628536,
+            "buildtime": 1581968754,
+            "epoch": null,
+            "extra": null,
+            "id": 7787864,
+            "metadata_only": false,
+            "name": "softhsm-debugsource",
+            "payloadhash": "0ea441edc957bda88246b9ada22223ea",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 198956,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1093586,
+            "buildroot_id": 5628536,
+            "buildtime": 1581968754,
+            "epoch": null,
+            "extra": null,
+            "id": 7787863,
+            "metadata_only": false,
+            "name": "softhsm-debuginfo",
+            "payloadhash": "f53348b69a34302d095cb606358d7f8f",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 3209084,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1093586,
+            "buildroot_id": 5628513,
+            "buildtime": 1581968643,
+            "epoch": null,
+            "extra": null,
+            "id": 7787862,
+            "metadata_only": false,
+            "name": "softhsm-debuginfo",
+            "payloadhash": "cfe22351236e92e7c36184b92745bcd7",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 3272644,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1093586,
+            "buildroot_id": 5628513,
+            "buildtime": 1581968643,
+            "epoch": null,
+            "extra": null,
+            "id": 7787861,
+            "metadata_only": false,
+            "name": "softhsm-devel",
+            "payloadhash": "a7a828be5a388bf64d2b018fb6bc6b84",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 20200,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1093586,
+            "buildroot_id": 5628513,
+            "buildtime": 1581968643,
+            "epoch": null,
+            "extra": null,
+            "id": 7787860,
+            "metadata_only": false,
+            "name": "softhsm-debugsource",
+            "payloadhash": "6b2884105b125d033d13105a56ef9d4a",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 198932,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1093586,
+            "buildroot_id": 5628513,
+            "buildtime": 1581968643,
+            "epoch": null,
+            "extra": null,
+            "id": 7787859,
+            "metadata_only": false,
+            "name": "softhsm",
+            "payloadhash": "1e118758f556fc86f4035c2d8032a640",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 364956,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1093586,
+            "buildroot_id": 5628529,
+            "buildtime": 1581968701,
+            "epoch": null,
+            "extra": null,
+            "id": 7787858,
+            "metadata_only": false,
+            "name": "softhsm-devel",
+            "payloadhash": "d24b5174ea695d912079cb79a8919d3b",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 20208,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1093586,
+            "buildroot_id": 5628529,
+            "buildtime": 1581968701,
+            "epoch": null,
+            "extra": null,
+            "id": 7787857,
+            "metadata_only": false,
+            "name": "softhsm-debugsource",
+            "payloadhash": "ff87f36d0e990470c5d9118ac717f465",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 198932,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1093586,
+            "buildroot_id": 5628529,
+            "buildtime": 1581968701,
+            "epoch": null,
+            "extra": null,
+            "id": 7787856,
+            "metadata_only": false,
+            "name": "softhsm-debuginfo",
+            "payloadhash": "b1978838c43926f7a971cf83aeeab5d4",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 3364692,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1093586,
+            "buildroot_id": 5628529,
+            "buildtime": 1581968701,
+            "epoch": null,
+            "extra": null,
+            "id": 7787855,
+            "metadata_only": false,
+            "name": "softhsm",
+            "payloadhash": "9085518ff71de3b7a67f135935338fdf",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 413364,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1093586,
+            "buildroot_id": 5628516,
+            "buildtime": 1581968817,
+            "epoch": null,
+            "extra": null,
+            "id": 7787854,
+            "metadata_only": false,
+            "name": "softhsm-devel",
+            "payloadhash": "b1e2cd70d4bfb40c2653efaff9c27259",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 20180,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1093586,
+            "buildroot_id": 5628516,
+            "buildtime": 1581968817,
+            "epoch": null,
+            "extra": null,
+            "id": 7787853,
+            "metadata_only": false,
+            "name": "softhsm-debuginfo",
+            "payloadhash": "ae9490c754a24edc183bedaf97ba2e57",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 3297608,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1093586,
+            "buildroot_id": 5628516,
+            "buildtime": 1581968817,
+            "epoch": null,
+            "extra": null,
+            "id": 7787852,
+            "metadata_only": false,
+            "name": "softhsm",
+            "payloadhash": "b4c0a9ec255ca5b140b7e60b59fb0097",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 374620,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1093586,
+            "buildroot_id": 5628516,
+            "buildtime": 1581968817,
+            "epoch": null,
+            "extra": null,
+            "id": 7787851,
+            "metadata_only": false,
+            "name": "softhsm-debugsource",
+            "payloadhash": "33f220a9dbae3b6cb5ec9b7822188599",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 198916,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 1093586,
+            "buildroot_id": 5628516,
+            "buildtime": 1581968677,
+            "epoch": null,
+            "extra": null,
+            "id": 7787850,
+            "metadata_only": false,
+            "name": "softhsm",
+            "payloadhash": "2d0425a55df2783036c91a0525ba468d",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "size": 1091743,
+            "version": "2.4.0"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1139326,
+            "buildroot_id": 5756014,
+            "buildtime": 1584549559,
+            "epoch": null,
+            "extra": null,
+            "id": 7865697,
+            "metadata_only": false,
+            "name": "ipa-server-debuginfo",
+            "payloadhash": "ffa0a51d2d6b756de03b11d366a72299",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 755296,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1139326,
+            "buildroot_id": 5756014,
+            "buildtime": 1584549559,
+            "epoch": null,
+            "extra": null,
+            "id": 7865696,
+            "metadata_only": false,
+            "name": "ipa-client-debuginfo",
+            "payloadhash": "0189b0c5e014128c0025046b1f9baf84",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 346480,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1139326,
+            "buildroot_id": 5756014,
+            "buildtime": 1584549559,
+            "epoch": null,
+            "extra": null,
+            "id": 7865695,
+            "metadata_only": false,
+            "name": "ipa-server-trust-ad",
+            "payloadhash": "503faf5bb51d6c2d227c03685e80b2e4",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 282836,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1139326,
+            "buildroot_id": 5756014,
+            "buildtime": 1584549559,
+            "epoch": null,
+            "extra": null,
+            "id": 7865694,
+            "metadata_only": false,
+            "name": "ipa-client-samba",
+            "payloadhash": "e0ee70e426f4287e9dfef0e7404ae493",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 172340,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1139326,
+            "buildroot_id": 5756014,
+            "buildtime": 1584549559,
+            "epoch": null,
+            "extra": null,
+            "id": 7865693,
+            "metadata_only": false,
+            "name": "ipa-debugsource",
+            "payloadhash": "401ab56f514b4ea72744f0224935d4dc",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 469800,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1139326,
+            "buildroot_id": 5756014,
+            "buildtime": 1584549559,
+            "epoch": null,
+            "extra": null,
+            "id": 7865692,
+            "metadata_only": false,
+            "name": "ipa-server-trust-ad-debuginfo",
+            "payloadhash": "b03bd63371af22712bb2d05e2143c337",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 390796,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1139326,
+            "buildroot_id": 5756014,
+            "buildtime": 1584549559,
+            "epoch": null,
+            "extra": null,
+            "id": 7865691,
+            "metadata_only": false,
+            "name": "ipa-client",
+            "payloadhash": "a527f474c30d180de856d80433818956",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 282516,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1139326,
+            "buildroot_id": 5756014,
+            "buildtime": 1584549559,
+            "epoch": null,
+            "extra": null,
+            "id": 7865690,
+            "metadata_only": false,
+            "name": "ipa-server",
+            "payloadhash": "928b0bbb2f8cace3496c0ab44073bb6d",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 543532,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 1139326,
+            "buildroot_id": 5756014,
+            "buildtime": 1584549559,
+            "epoch": null,
+            "extra": null,
+            "id": 7865689,
+            "metadata_only": false,
+            "name": "ipa-debuginfo",
+            "payloadhash": "568095cc6cb98b7fddd16139751f4cfb",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 188276,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1139326,
+            "buildroot_id": 5756020,
+            "buildtime": 1584549335,
+            "epoch": null,
+            "extra": null,
+            "id": 7865688,
+            "metadata_only": false,
+            "name": "ipa-client",
+            "payloadhash": "483d6c579511344ba43d81bb3fa142cb",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 277012,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1139326,
+            "buildroot_id": 5756020,
+            "buildtime": 1584549335,
+            "epoch": null,
+            "extra": null,
+            "id": 7865687,
+            "metadata_only": false,
+            "name": "ipa-client-debuginfo",
+            "payloadhash": "2ac7e7730583a7f1b1620c212da27d84",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 336900,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1139326,
+            "buildroot_id": 5756020,
+            "buildtime": 1584549335,
+            "epoch": null,
+            "extra": null,
+            "id": 7865686,
+            "metadata_only": false,
+            "name": "ipa-client-samba",
+            "payloadhash": "af2cb4b435a93c4933ad3ba744666d20",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 172388,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "i686",
+            "build_id": 1139326,
+            "buildroot_id": 5756020,
+            "buildtime": 1584549335,
+            "epoch": null,
+            "extra": null,
+            "id": 7865685,
+            "metadata_only": false,
+            "name": "ipa-debugsource",
+            "payloadhash": "813ef6772e79f527bc2566a1145dae80",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 256432,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1139326,
+            "buildroot_id": 5756012,
+            "buildtime": 1584549272,
+            "epoch": null,
+            "extra": null,
+            "id": 7865684,
+            "metadata_only": false,
+            "name": "ipa-server-trust-ad-debuginfo",
+            "payloadhash": "b5f4dd139cf792962dde2143dfde5458",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 381044,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1139326,
+            "buildroot_id": 5756012,
+            "buildtime": 1584549272,
+            "epoch": null,
+            "extra": null,
+            "id": 7865683,
+            "metadata_only": false,
+            "name": "ipa-debugsource",
+            "payloadhash": "7d0a241e815544da844d4b47c91776c6",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 469756,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1139326,
+            "buildroot_id": 5756012,
+            "buildtime": 1584549272,
+            "epoch": null,
+            "extra": null,
+            "id": 7865682,
+            "metadata_only": false,
+            "name": "ipa-server-debuginfo",
+            "payloadhash": "e899f4a208281ad821d37ae92532e81d",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 733524,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1139326,
+            "buildroot_id": 5756012,
+            "buildtime": 1584549272,
+            "epoch": null,
+            "extra": null,
+            "id": 7865681,
+            "metadata_only": false,
+            "name": "ipa-client",
+            "payloadhash": "6a2585ac0ab1c55faeebdbf1cf3c0d2d",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 269832,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1139326,
+            "buildroot_id": 5756012,
+            "buildtime": 1584549272,
+            "epoch": null,
+            "extra": null,
+            "id": 7865680,
+            "metadata_only": false,
+            "name": "ipa-server",
+            "payloadhash": "7b0df1f267286ed8f4128b38f330ca98",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 501712,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1139326,
+            "buildroot_id": 5756012,
+            "buildtime": 1584549272,
+            "epoch": null,
+            "extra": null,
+            "id": 7865679,
+            "metadata_only": false,
+            "name": "ipa-client-debuginfo",
+            "payloadhash": "2df7e3aa65ed623a2898e50645a4ad34",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 339832,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1139326,
+            "buildroot_id": 5756012,
+            "buildtime": 1584549272,
+            "epoch": null,
+            "extra": null,
+            "id": 7865678,
+            "metadata_only": false,
+            "name": "ipa-server-trust-ad",
+            "payloadhash": "7eb4f5790b1894e8d6b5496d7abbfe63",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 267288,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1139326,
+            "buildroot_id": 5756012,
+            "buildtime": 1584549272,
+            "epoch": null,
+            "extra": null,
+            "id": 7865677,
+            "metadata_only": false,
+            "name": "ipa-debuginfo",
+            "payloadhash": "b9bcdb1617a79578eb3abee3f42134d3",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 188248,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 1139326,
+            "buildroot_id": 5756012,
+            "buildtime": 1584549272,
+            "epoch": null,
+            "extra": null,
+            "id": 7865676,
+            "metadata_only": false,
+            "name": "ipa-client-samba",
+            "payloadhash": "4445685b226efc848e9296342475d522",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 172344,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1139326,
+            "buildroot_id": 5756019,
+            "buildtime": 1584549386,
+            "epoch": null,
+            "extra": null,
+            "id": 7865675,
+            "metadata_only": false,
+            "name": "ipa-server-trust-ad-debuginfo",
+            "payloadhash": "0bfa9eb57a4037a05d9ee05fbe9002d9",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 387380,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1139326,
+            "buildroot_id": 5756019,
+            "buildtime": 1584549386,
+            "epoch": null,
+            "extra": null,
+            "id": 7865674,
+            "metadata_only": false,
+            "name": "ipa-server-debuginfo",
+            "payloadhash": "6105a90ea6071dfc0945a35bcb59335a",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 750100,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1139326,
+            "buildroot_id": 5756019,
+            "buildtime": 1584549386,
+            "epoch": null,
+            "extra": null,
+            "id": 7865673,
+            "metadata_only": false,
+            "name": "ipa-client",
+            "payloadhash": "ebe5e3a21b2f7b6d6bcb2d15433ca0a4",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 273568,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1139326,
+            "buildroot_id": 5756019,
+            "buildtime": 1584549386,
+            "epoch": null,
+            "extra": null,
+            "id": 7865672,
+            "metadata_only": false,
+            "name": "ipa-server-trust-ad",
+            "payloadhash": "0c487a8eac01f79152e126b580310ab6",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 272392,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1139326,
+            "buildroot_id": 5756019,
+            "buildtime": 1584549386,
+            "epoch": null,
+            "extra": null,
+            "id": 7865671,
+            "metadata_only": false,
+            "name": "ipa-debugsource",
+            "payloadhash": "ef699165ba4a4d3faa26cf806855c365",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 469792,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1139326,
+            "buildroot_id": 5756019,
+            "buildtime": 1584549386,
+            "epoch": null,
+            "extra": null,
+            "id": 7865670,
+            "metadata_only": false,
+            "name": "ipa-debuginfo",
+            "payloadhash": "abdc2a1115c51be89dde150f5f374214",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 188312,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1139326,
+            "buildroot_id": 5756019,
+            "buildtime": 1584549386,
+            "epoch": null,
+            "extra": null,
+            "id": 7865669,
+            "metadata_only": false,
+            "name": "ipa-client-debuginfo",
+            "payloadhash": "e53dea82314fe6705300476bd8c2a415",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 343004,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1139326,
+            "buildroot_id": 5756019,
+            "buildtime": 1584549386,
+            "epoch": null,
+            "extra": null,
+            "id": 7865668,
+            "metadata_only": false,
+            "name": "ipa-server",
+            "payloadhash": "a09d47b83601f4673133d9e0422ef7f5",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 522808,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 1139326,
+            "buildroot_id": 5756019,
+            "buildtime": 1584549386,
+            "epoch": null,
+            "extra": null,
+            "id": 7865667,
+            "metadata_only": false,
+            "name": "ipa-client-samba",
+            "payloadhash": "af059e6571bb089540878e4baec1c5c1",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 172352,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865666,
+            "metadata_only": false,
+            "name": "ipa-common",
+            "payloadhash": "94e5ae60c287885f06c9ec389a85ebde",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 782752,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865665,
+            "metadata_only": false,
+            "name": "ipa-server-dns",
+            "payloadhash": "b6ad4b703aca9e6f2ed266395cd38989",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 186424,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865664,
+            "metadata_only": false,
+            "name": "ipa-server-common",
+            "payloadhash": "1a99072a08cfbd6ed4209befbc125296",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 609540,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865663,
+            "metadata_only": false,
+            "name": "ipa-debugsource",
+            "payloadhash": "3b4f3b209f0b710c16900984328ad490",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 469780,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865662,
+            "metadata_only": false,
+            "name": "ipa-client",
+            "payloadhash": "0ad619451775b0f60dc32cff0b754101",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 269380,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865661,
+            "metadata_only": false,
+            "name": "ipa-debuginfo",
+            "payloadhash": "c363e23c0ddb4be57073d5f42d2c2f10",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 188260,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865660,
+            "metadata_only": false,
+            "name": "python3-ipaserver",
+            "payloadhash": "678236bd9416147fb577f0422962ce4c",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 1577588,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865659,
+            "metadata_only": false,
+            "name": "python3-ipaclient",
+            "payloadhash": "b8e4efc498ff4863ccd6805d04153341",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 675988,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865658,
+            "metadata_only": false,
+            "name": "ipa-server",
+            "payloadhash": "f2c91d5db28001a228674f54c972b444",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 509864,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865657,
+            "metadata_only": false,
+            "name": "ipa-client-debuginfo",
+            "payloadhash": "808a47ed4c745312416317558f124c89",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 342140,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865656,
+            "metadata_only": false,
+            "name": "ipa-python-compat",
+            "payloadhash": "71180dc9c37e08c70d1db3d01a7f63db",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 170068,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865655,
+            "metadata_only": false,
+            "name": "ipa-client-samba",
+            "payloadhash": "70c37de6e79e9a60d041ad3f55340419",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 172320,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865654,
+            "metadata_only": false,
+            "name": "ipa-server-debuginfo",
+            "payloadhash": "2d48195b214e2137b81d88b31cefb79f",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 742960,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865653,
+            "metadata_only": false,
+            "name": "ipa-server-trust-ad",
+            "payloadhash": "a1e36114395ebb8273c84cb27748c124",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 267036,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865652,
+            "metadata_only": false,
+            "name": "python3-ipalib",
+            "payloadhash": "530ab32a650e82ffb0deb6c153d7656d",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 723300,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865651,
+            "metadata_only": false,
+            "name": "ipa-client-common",
+            "payloadhash": "b35b2c7abfd517872227d5adb9ee2c0f",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 177620,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549647,
+            "epoch": null,
+            "extra": null,
+            "id": 7865650,
+            "metadata_only": false,
+            "name": "ipa-server-trust-ad-debuginfo",
+            "payloadhash": "7aa1b58bce84fb6623143047f350ae24",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 384480,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "src",
+            "build_id": 1139326,
+            "buildroot_id": 5756013,
+            "buildtime": 1584549222,
+            "epoch": null,
+            "extra": null,
+            "id": 7865649,
+            "metadata_only": false,
+            "name": "ipa",
+            "payloadhash": "56740cbc1789552bacf1cad0086a1d47",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "size": 12755704,
+            "version": "4.8.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 959042,
+            "buildroot_id": 5142731,
+            "buildtime": 1567153754,
+            "epoch": null,
+            "extra": null,
+            "id": 7305744,
+            "metadata_only": false,
+            "name": "opendnssec",
+            "payloadhash": "cb60d0f892d87874597d48ee6dd0d2dd",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 502168,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 959042,
+            "buildroot_id": 5142731,
+            "buildtime": 1567153754,
+            "epoch": null,
+            "extra": null,
+            "id": 7305743,
+            "metadata_only": false,
+            "name": "opendnssec-debuginfo",
+            "payloadhash": "a849a2485fbc22c8008e8e1f989c871e",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 1366588,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 959042,
+            "buildroot_id": 5142731,
+            "buildtime": 1567153754,
+            "epoch": null,
+            "extra": null,
+            "id": 7305742,
+            "metadata_only": false,
+            "name": "opendnssec-debugsource",
+            "payloadhash": "f6087eb44c965076fd642e5e91ac01bb",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 356812,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "i686",
+            "build_id": 959042,
+            "buildroot_id": 5142733,
+            "buildtime": 1567153669,
+            "epoch": null,
+            "extra": null,
+            "id": 7305741,
+            "metadata_only": false,
+            "name": "opendnssec",
+            "payloadhash": "41f2ca6ad5b3eef882c0177fe9e88dab",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 513696,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "i686",
+            "build_id": 959042,
+            "buildroot_id": 5142733,
+            "buildtime": 1567153669,
+            "epoch": null,
+            "extra": null,
+            "id": 7305740,
+            "metadata_only": false,
+            "name": "opendnssec-debuginfo",
+            "payloadhash": "60078eebdfa0303e1caf8b566d3f156d",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 1153776,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "i686",
+            "build_id": 959042,
+            "buildroot_id": 5142733,
+            "buildtime": 1567153669,
+            "epoch": null,
+            "extra": null,
+            "id": 7305739,
+            "metadata_only": false,
+            "name": "opendnssec-debugsource",
+            "payloadhash": "fc1690426a858b02a21f1d6985265efc",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 356788,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 959042,
+            "buildroot_id": 5142730,
+            "buildtime": 1567153632,
+            "epoch": null,
+            "extra": null,
+            "id": 7305738,
+            "metadata_only": false,
+            "name": "opendnssec",
+            "payloadhash": "57681fde4f863cc2cad7fedfc24d5fab",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 440900,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 959042,
+            "buildroot_id": 5142730,
+            "buildtime": 1567153632,
+            "epoch": null,
+            "extra": null,
+            "id": 7305737,
+            "metadata_only": false,
+            "name": "opendnssec-debuginfo",
+            "payloadhash": "06e9084da0becd2f43a95f7a1fe03d0f",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 1294064,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 959042,
+            "buildroot_id": 5142730,
+            "buildtime": 1567153632,
+            "epoch": null,
+            "extra": null,
+            "id": 7305736,
+            "metadata_only": false,
+            "name": "opendnssec-debugsource",
+            "payloadhash": "ad9da763138f1561c3fee0c89a20525a",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 356768,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 959042,
+            "buildroot_id": 5142732,
+            "buildtime": 1567153667,
+            "epoch": null,
+            "extra": null,
+            "id": 7305735,
+            "metadata_only": false,
+            "name": "opendnssec",
+            "payloadhash": "e6b8057bcda539c2dfa78031dcbba7e5",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 481944,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 959042,
+            "buildroot_id": 5142732,
+            "buildtime": 1567153667,
+            "epoch": null,
+            "extra": null,
+            "id": 7305734,
+            "metadata_only": false,
+            "name": "opendnssec-debugsource",
+            "payloadhash": "d184fdad4733bc6db1eaca30e85ee1c9",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 356796,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 959042,
+            "buildroot_id": 5142732,
+            "buildtime": 1567153667,
+            "epoch": null,
+            "extra": null,
+            "id": 7305733,
+            "metadata_only": false,
+            "name": "opendnssec-debuginfo",
+            "payloadhash": "7d151707ef916094ff5a1455603d5021",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 1354072,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 959042,
+            "buildroot_id": 5142734,
+            "buildtime": 1567153822,
+            "epoch": null,
+            "extra": null,
+            "id": 7305732,
+            "metadata_only": false,
+            "name": "opendnssec",
+            "payloadhash": "bbb00958217861b62f061230e02372b3",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 475712,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 959042,
+            "buildroot_id": 5142734,
+            "buildtime": 1567153822,
+            "epoch": null,
+            "extra": null,
+            "id": 7305731,
+            "metadata_only": false,
+            "name": "opendnssec-debuginfo",
+            "payloadhash": "0234dacac54856c6e29e43ea2639105d",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 1376784,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 959042,
+            "buildroot_id": 5142734,
+            "buildtime": 1567153822,
+            "epoch": null,
+            "extra": null,
+            "id": 7305730,
+            "metadata_only": false,
+            "name": "opendnssec-debugsource",
+            "payloadhash": "a2675808d0394f4f435284cf316c605a",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 356788,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "src",
+            "build_id": 959042,
+            "buildroot_id": 5142734,
+            "buildtime": 1567153715,
+            "epoch": null,
+            "extra": null,
+            "id": 7305729,
+            "metadata_only": false,
+            "name": "opendnssec",
+            "payloadhash": "c673e008bd0eb5e6c0eee59279da1197",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 1055303,
+            "version": "1.4.14"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 959051,
+            "buildroot_id": 5142778,
+            "buildtime": 1567154689,
+            "epoch": null,
+            "extra": null,
+            "id": 7305863,
+            "metadata_only": false,
+            "name": "python3-pyusb",
+            "payloadhash": "2f06b1a6396b2deb1e3142ace9f29393",
+            "release": "9.module+el8.1.0+4107+4a66eb87",
+            "size": 89016,
+            "version": "1.0.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 959051,
+            "buildroot_id": 5142778,
+            "buildtime": 1567154678,
+            "epoch": null,
+            "extra": null,
+            "id": 7305862,
+            "metadata_only": false,
+            "name": "pyusb",
+            "payloadhash": "a3b6bf520787a1f0289cdb4fa594654c",
+            "release": "9.module+el8.1.0+4107+4a66eb87",
+            "size": 80859,
+            "version": "1.0.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 959052,
+            "buildroot_id": 5142779,
+            "buildtime": 1567154822,
+            "epoch": null,
+            "extra": null,
+            "id": 7305865,
+            "metadata_only": false,
+            "name": "python3-jwcrypto",
+            "payloadhash": "d7e3b67ac9a9fd7545fadb48ed7b46f3",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 66048,
+            "version": "0.5.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 959052,
+            "buildroot_id": 5142779,
+            "buildtime": 1567154802,
+            "epoch": null,
+            "extra": null,
+            "id": 7305864,
+            "metadata_only": false,
+            "name": "python-jwcrypto",
+            "payloadhash": "011fd8fccca627c86dfaf5f71698aa7a",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "size": 78370,
+            "version": "0.5.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 959056,
+            "buildroot_id": 5142788,
+            "buildtime": 1567155087,
+            "epoch": null,
+            "extra": null,
+            "id": 7305870,
+            "metadata_only": false,
+            "name": "custodia",
+            "payloadhash": "00ca09ffaf44d5bc9906c330e12b16b6",
+            "release": "3.module+el8.1.0+4107+4a66eb87",
+            "size": 33268,
+            "version": "0.6.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 959056,
+            "buildroot_id": 5142788,
+            "buildtime": 1567155087,
+            "epoch": null,
+            "extra": null,
+            "id": 7305869,
+            "metadata_only": false,
+            "name": "python3-custodia",
+            "payloadhash": "3abea9085628c4f7a662ce78ffce4c66",
+            "release": "3.module+el8.1.0+4107+4a66eb87",
+            "size": 123516,
+            "version": "0.6.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 959056,
+            "buildroot_id": 5142788,
+            "buildtime": 1567155069,
+            "epoch": null,
+            "extra": null,
+            "id": 7305867,
+            "metadata_only": false,
+            "name": "custodia",
+            "payloadhash": "1abe9ba3e5d3682a0ac9b580db94d9d3",
+            "release": "3.module+el8.1.0+4107+4a66eb87",
+            "size": 148309,
+            "version": "0.6.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 959057,
+            "buildroot_id": 5142792,
+            "buildtime": 1567155080,
+            "epoch": null,
+            "extra": null,
+            "id": 7305868,
+            "metadata_only": false,
+            "name": "python3-yubico",
+            "payloadhash": "a31ddc3b4209da765b7ed9e760569c8c",
+            "release": "9.module+el8.1.0+4107+4a66eb87",
+            "size": 63820,
+            "version": "1.3.2"
+        },
+        {
+            "arch": "src",
+            "build_id": 959057,
+            "buildroot_id": 5142792,
+            "buildtime": 1567155073,
+            "epoch": null,
+            "extra": null,
+            "id": 7305866,
+            "metadata_only": false,
+            "name": "python-yubico",
+            "payloadhash": "15a0d4d32df1932722723813ab8ae81b",
+            "release": "9.module+el8.1.0+4107+4a66eb87",
+            "size": 52063,
+            "version": "1.3.2"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1062086,
+            "buildroot_id": 5521032,
+            "buildtime": 1579344750,
+            "epoch": null,
+            "extra": null,
+            "id": 7699623,
+            "metadata_only": false,
+            "name": "ipa-healthcheck-core",
+            "payloadhash": "b39fbcaa3e1d36e9c5e93d782693015b",
+            "release": "4.module+el8.2.0+5496+53199ee7",
+            "size": 48820,
+            "version": "0.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1062086,
+            "buildroot_id": 5521032,
+            "buildtime": 1579344750,
+            "epoch": null,
+            "extra": null,
+            "id": 7699622,
+            "metadata_only": false,
+            "name": "ipa-healthcheck",
+            "payloadhash": "b42af8db410adc03dc71feb67ff4f42d",
+            "release": "4.module+el8.2.0+5496+53199ee7",
+            "size": 86016,
+            "version": "0.4"
+        },
+        {
+            "arch": "src",
+            "build_id": 1062086,
+            "buildroot_id": 5521032,
+            "buildtime": 1579344699,
+            "epoch": null,
+            "extra": null,
+            "id": 7699621,
+            "metadata_only": false,
+            "name": "ipa-healthcheck",
+            "payloadhash": "73d844ba7087621b02dfc0244b8522f9",
+            "release": "4.module+el8.2.0+5496+53199ee7",
+            "size": 93648,
+            "version": "0.4"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 909543,
+            "buildroot_id": 4970166,
+            "buildtime": 1560195826,
+            "epoch": null,
+            "extra": null,
+            "id": 7075152,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+            "payloadhash": "91222d6c1c3b2791c7c2800c940ff247",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 563566,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 909543,
+            "buildroot_id": 4970166,
+            "buildtime": 1560195826,
+            "epoch": null,
+            "extra": null,
+            "id": 7075151,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debugsource",
+            "payloadhash": "c79d2396ace24ba292e88e0d687fc3fa",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 45726,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 909543,
+            "buildroot_id": 4970166,
+            "buildtime": 1560195826,
+            "epoch": null,
+            "extra": null,
+            "id": 7075150,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man",
+            "payloadhash": "39a53b085cd2667b0a18e2df482efc9d",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 749426,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "i686",
+            "build_id": 909543,
+            "buildroot_id": 4970164,
+            "buildtime": 1560195759,
+            "epoch": null,
+            "extra": null,
+            "id": 7075149,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debugsource",
+            "payloadhash": "0ed7433635ce5ec37b03c36905b014ae",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 45738,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "i686",
+            "build_id": 909543,
+            "buildroot_id": 4970164,
+            "buildtime": 1560195759,
+            "epoch": null,
+            "extra": null,
+            "id": 7075148,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man",
+            "payloadhash": "32eb260a4218b7ebe1e2345341ea3923",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 789166,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "i686",
+            "build_id": 909543,
+            "buildroot_id": 4970164,
+            "buildtime": 1560195759,
+            "epoch": null,
+            "extra": null,
+            "id": 7075147,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+            "payloadhash": "92fb725a36de13541c74370c6d7b12df",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 584658,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 909543,
+            "buildroot_id": 4970162,
+            "buildtime": 1560195702,
+            "epoch": null,
+            "extra": null,
+            "id": 7075146,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man",
+            "payloadhash": "d03c85cae56c351a05a2d6c81d301230",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 801610,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 909543,
+            "buildroot_id": 4970162,
+            "buildtime": 1560195702,
+            "epoch": null,
+            "extra": null,
+            "id": 7075145,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+            "payloadhash": "22946480024dcece0f050d346a183c06",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 574938,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 909543,
+            "buildroot_id": 4970162,
+            "buildtime": 1560195702,
+            "epoch": null,
+            "extra": null,
+            "id": 7075144,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debugsource",
+            "payloadhash": "679dacf9c2fe06fedb087d4f36212601",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 45698,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 909543,
+            "buildroot_id": 4970163,
+            "buildtime": 1560195727,
+            "epoch": null,
+            "extra": null,
+            "id": 7075143,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+            "payloadhash": "5234b608d707d5d01a214778679b28ed",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 589922,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 909543,
+            "buildroot_id": 4970163,
+            "buildtime": 1560195727,
+            "epoch": null,
+            "extra": null,
+            "id": 7075142,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debugsource",
+            "payloadhash": "d4a98d17df99cbd009c3042ec2798500",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 45726,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 909543,
+            "buildroot_id": 4970163,
+            "buildtime": 1560195727,
+            "epoch": null,
+            "extra": null,
+            "id": 7075141,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man",
+            "payloadhash": "7f7bf097295708b27909c27f62d17028",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 823402,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 909543,
+            "buildroot_id": 4970165,
+            "buildtime": 1560195860,
+            "epoch": null,
+            "extra": null,
+            "id": 7075140,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man",
+            "payloadhash": "66c31b7b54b9edec7fb2f2b9620302bf",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 754750,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 909543,
+            "buildroot_id": 4970165,
+            "buildtime": 1560195860,
+            "epoch": null,
+            "extra": null,
+            "id": 7075139,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debugsource",
+            "payloadhash": "a14edba8b02e0b37ba2b944bee1d08a3",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 45706,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 909543,
+            "buildroot_id": 4970165,
+            "buildtime": 1560195860,
+            "epoch": null,
+            "extra": null,
+            "id": 7075138,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+            "payloadhash": "d552b7b0fa82f2aaae31dca03c439513",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 561446,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "src",
+            "build_id": 909543,
+            "buildroot_id": 4970165,
+            "buildtime": 1560195765,
+            "epoch": null,
+            "extra": null,
+            "id": 7075137,
+            "metadata_only": false,
+            "name": "golang-github-cpuguy83-go-md2man",
+            "payloadhash": "27a42e4a8c996dce517f840d34d1d25b",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "size": 92364,
+            "version": "1.0.7"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910836,
+            "buildroot_id": 4975529,
+            "buildtime": 1560357356,
+            "epoch": null,
+            "extra": null,
+            "id": 7085414,
+            "metadata_only": false,
+            "name": "xsom",
+            "payloadhash": "6a11e1ee314c8ee9b7d80a5e8f4023a8",
+            "release": "19.20110809svn.module+el8.1.0+3366+6dfb954c",
+            "size": 406943,
+            "version": "0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910836,
+            "buildroot_id": 4975529,
+            "buildtime": 1560357356,
+            "epoch": null,
+            "extra": null,
+            "id": 7085413,
+            "metadata_only": false,
+            "name": "xsom-javadoc",
+            "payloadhash": "67a349a58ba9d3569eecdd73257f7322",
+            "release": "19.20110809svn.module+el8.1.0+3366+6dfb954c",
+            "size": 399079,
+            "version": "0"
+        },
+        {
+            "arch": "src",
+            "build_id": 910836,
+            "buildroot_id": 4975529,
+            "buildtime": 1560357318,
+            "epoch": null,
+            "extra": null,
+            "id": 7085412,
+            "metadata_only": false,
+            "name": "xsom",
+            "payloadhash": "2d9d0b08e0fbc7371faa476194062bed",
+            "release": "19.20110809svn.module+el8.1.0+3366+6dfb954c",
+            "size": 397446,
+            "version": "0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1144557,
+            "buildroot_id": 5775388,
+            "buildtime": 1584979939,
+            "epoch": null,
+            "extra": null,
+            "id": 7883876,
+            "metadata_only": false,
+            "name": "xmlstreambuffer-javadoc",
+            "payloadhash": "2f83bd13498529c23bdea22595a02093",
+            "release": "8.module+el8.2.0+5723+4574fbff",
+            "size": 103411,
+            "version": "1.5.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1144557,
+            "buildroot_id": 5775388,
+            "buildtime": 1584979939,
+            "epoch": null,
+            "extra": null,
+            "id": 7883875,
+            "metadata_only": false,
+            "name": "xmlstreambuffer",
+            "payloadhash": "c6b64f7c0024f06cdfa64ab7eabb206e",
+            "release": "8.module+el8.2.0+5723+4574fbff",
+            "size": 88115,
+            "version": "1.5.4"
+        },
+        {
+            "arch": "src",
+            "build_id": 1144557,
+            "buildroot_id": 5775388,
+            "buildtime": 1584979913,
+            "epoch": null,
+            "extra": null,
+            "id": 7883874,
+            "metadata_only": false,
+            "name": "xmlstreambuffer",
+            "payloadhash": "de61e444265fa6385aa350fd9a1879ac",
+            "release": "8.module+el8.2.0+5723+4574fbff",
+            "size": 66264,
+            "version": "1.5.4"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910842,
+            "buildroot_id": 4975556,
+            "buildtime": 1560358106,
+            "epoch": null,
+            "extra": null,
+            "id": 7085440,
+            "metadata_only": false,
+            "name": "glassfish-fastinfoset-javadoc",
+            "payloadhash": "615b4d655f99e3d9010bf8ac22705541",
+            "release": "9.module+el8.1.0+3366+6dfb954c",
+            "size": 384739,
+            "version": "1.2.13"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910842,
+            "buildroot_id": 4975556,
+            "buildtime": 1560358106,
+            "epoch": null,
+            "extra": null,
+            "id": 7085439,
+            "metadata_only": false,
+            "name": "glassfish-fastinfoset",
+            "payloadhash": "cdcf749901a178ba96f7d98ad2a1d311",
+            "release": "9.module+el8.1.0+3366+6dfb954c",
+            "size": 361139,
+            "version": "1.2.13"
+        },
+        {
+            "arch": "src",
+            "build_id": 910842,
+            "buildroot_id": 4975556,
+            "buildtime": 1560357958,
+            "epoch": null,
+            "extra": null,
+            "id": 7085438,
+            "metadata_only": false,
+            "name": "glassfish-fastinfoset",
+            "payloadhash": "ddfbcd3503fc63d43c1b5f061209dbcd",
+            "release": "9.module+el8.1.0+3366+6dfb954c",
+            "size": 1592961,
+            "version": "1.2.13"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085641,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-runtime-parent",
+            "payloadhash": "a2f20686a86a5868c26716897f7c6402",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 11815,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085640,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-runtime",
+            "payloadhash": "a05c4445ab49a3fbbd798b4ce288cad1",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 958491,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085639,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-codemodel-annotation-compiler",
+            "payloadhash": "9fda037b1302bb006ad3e6099f0cebd1",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 22867,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085638,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-bom",
+            "payloadhash": "2655b9eac43c31cfdafba471fe39ca4d",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 28863,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085637,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-core",
+            "payloadhash": "c47d960603ca915b7800bc098d6028a3",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 160731,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085636,
+            "metadata_only": false,
+            "name": "glassfish-jaxb",
+            "payloadhash": "a1496aed9865697178bf09d2fa73ae8a",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 27939,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085635,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-txw2",
+            "payloadhash": "595eccf2607a7567c63af9822a74003b",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 91323,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085634,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-parent",
+            "payloadhash": "67c9ab1a26e29c7e0d051d72cb982e5a",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 15459,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085633,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-codemodel",
+            "payloadhash": "1d8fe4f1cde6b176b0031450b61bb33e",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 165075,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085632,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-external-parent",
+            "payloadhash": "93754edadd2033cac9af893792b6b9c2",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 11795,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085631,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-txw-parent",
+            "payloadhash": "6409edc38dac620781a62e7641456be5",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 11783,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085630,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-bom-ext",
+            "payloadhash": "253717f64501dd65cea9baf8542e6ca1",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 12235,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085629,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-codemodel-parent",
+            "payloadhash": "f1c598b74b476b0ddbf84f05dcdd342c",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 11835,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358486,
+            "epoch": null,
+            "extra": null,
+            "id": 7085628,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-rngom",
+            "payloadhash": "c240f7020303cf1480cf9fda67f6acef",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 306671,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "src",
+            "build_id": 910844,
+            "buildroot_id": 4975564,
+            "buildtime": 1560358365,
+            "epoch": null,
+            "extra": null,
+            "id": 7085627,
+            "metadata_only": false,
+            "name": "glassfish-jaxb",
+            "payloadhash": "202cca1166598be94131a52f8d0a6459",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 4612273,
+            "version": "2.2.11"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1028063,
+            "buildroot_id": 5396389,
+            "buildtime": 1575497271,
+            "epoch": null,
+            "extra": null,
+            "id": 7595160,
+            "metadata_only": false,
+            "name": "jackson-parent",
+            "payloadhash": "3909120d61c10ea90fc37f04e58a4ee6",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 15643,
+            "version": "2.10"
+        },
+        {
+            "arch": "src",
+            "build_id": 1028063,
+            "buildroot_id": 5396389,
+            "buildtime": 1575497201,
+            "epoch": null,
+            "extra": null,
+            "id": 7595159,
+            "metadata_only": false,
+            "name": "jackson-parent",
+            "payloadhash": "24c7a7d9ce539c4ce0e482c73e17fac5",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 17851,
+            "version": "2.10"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1028067,
+            "buildroot_id": 5396424,
+            "buildtime": 1575497963,
+            "epoch": null,
+            "extra": null,
+            "id": 7595174,
+            "metadata_only": false,
+            "name": "jackson-bom",
+            "payloadhash": "050cd824d1f3348276b3d8ccdc3b280c",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 16043,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 1028067,
+            "buildroot_id": 5396424,
+            "buildtime": 1575497911,
+            "epoch": null,
+            "extra": null,
+            "id": 7595173,
+            "metadata_only": false,
+            "name": "jackson-bom",
+            "payloadhash": "1c0cccde10e18d945546011c409caebf",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 22590,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1028074,
+            "buildroot_id": 5396475,
+            "buildtime": 1575499212,
+            "epoch": null,
+            "extra": null,
+            "id": 7595204,
+            "metadata_only": false,
+            "name": "jackson-core-javadoc",
+            "payloadhash": "2d0ae6a265f8f5292885a915ed4f3fb4",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 495683,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1028074,
+            "buildroot_id": 5396475,
+            "buildtime": 1575499212,
+            "epoch": null,
+            "extra": null,
+            "id": 7595203,
+            "metadata_only": false,
+            "name": "jackson-core",
+            "payloadhash": "d59a579e076c0fc68efe780afc1a0d31",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 352427,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 1028074,
+            "buildroot_id": 5396475,
+            "buildtime": 1575499040,
+            "epoch": null,
+            "extra": null,
+            "id": 7595202,
+            "metadata_only": false,
+            "name": "jackson-core",
+            "payloadhash": "87ea48a3c747d142f14002d06ccd51fc",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 450226,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1028078,
+            "buildroot_id": 5396490,
+            "buildtime": 1575500030,
+            "epoch": null,
+            "extra": null,
+            "id": 7595219,
+            "metadata_only": false,
+            "name": "jackson-annotations-javadoc",
+            "payloadhash": "6fb351198e3657cbbf6640f06587755b",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 124103,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1028078,
+            "buildroot_id": 5396490,
+            "buildtime": 1575500030,
+            "epoch": null,
+            "extra": null,
+            "id": 7595218,
+            "metadata_only": false,
+            "name": "jackson-annotations",
+            "payloadhash": "acba186a90620ddff770027842531d58",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 71851,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 1028078,
+            "buildroot_id": 5396490,
+            "buildtime": 1575499891,
+            "epoch": null,
+            "extra": null,
+            "id": 7595217,
+            "metadata_only": false,
+            "name": "jackson-annotations",
+            "payloadhash": "6fa491fd6aa6ef37ae5d00c856dfbea6",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 69495,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1028087,
+            "buildroot_id": 5396523,
+            "buildtime": 1575500533,
+            "epoch": null,
+            "extra": null,
+            "id": 7595222,
+            "metadata_only": false,
+            "name": "jackson-databind-javadoc",
+            "payloadhash": "3b495e1d0fde58519fb666ba52d5ada6",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 1923207,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1028087,
+            "buildroot_id": 5396523,
+            "buildtime": 1575500533,
+            "epoch": null,
+            "extra": null,
+            "id": 7595221,
+            "metadata_only": false,
+            "name": "jackson-databind",
+            "payloadhash": "b738db5a6e462ecc5edfd478a3d42d86",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 1332163,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 1028087,
+            "buildroot_id": 5396523,
+            "buildtime": 1575500474,
+            "epoch": null,
+            "extra": null,
+            "id": 7595220,
+            "metadata_only": false,
+            "name": "jackson-databind",
+            "payloadhash": "198f466dddabd4cdb28cb189b23dc243",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "size": 1311643,
+            "version": "2.10.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910869,
+            "buildroot_id": 4975658,
+            "buildtime": 1560361371,
+            "epoch": null,
+            "extra": null,
+            "id": 7085805,
+            "metadata_only": false,
+            "name": "jackson-module-jaxb-annotations",
+            "payloadhash": "60a25e597045a87b9047cf228f551c47",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 45763,
+            "version": "2.7.6"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910869,
+            "buildroot_id": 4975658,
+            "buildtime": 1560361371,
+            "epoch": null,
+            "extra": null,
+            "id": 7085804,
+            "metadata_only": false,
+            "name": "jackson-module-jaxb-annotations-javadoc",
+            "payloadhash": "10aba002380ba58fb310eee0ffe9f58f",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 48471,
+            "version": "2.7.6"
+        },
+        {
+            "arch": "src",
+            "build_id": 910869,
+            "buildroot_id": 4975658,
+            "buildtime": 1560361336,
+            "epoch": null,
+            "extra": null,
+            "id": 7085803,
+            "metadata_only": false,
+            "name": "jackson-module-jaxb-annotations",
+            "payloadhash": "e74b2038fa5c73b59d1f2f79d438e746",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 55401,
+            "version": "2.7.6"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 941248,
+            "buildroot_id": 5077784,
+            "buildtime": 1564610159,
+            "epoch": null,
+            "extra": null,
+            "id": 7219347,
+            "metadata_only": false,
+            "name": "jackson-jaxrs-providers-javadoc",
+            "payloadhash": "2bbe26ea5dbaaa23089673430a73dba3",
+            "release": "1.module+el8.1.0+3832+9784644d",
+            "size": 86683,
+            "version": "2.9.9"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 941248,
+            "buildroot_id": 5077784,
+            "buildtime": 1564610159,
+            "epoch": null,
+            "extra": null,
+            "id": 7219346,
+            "metadata_only": false,
+            "name": "jackson-jaxrs-providers-parent",
+            "payloadhash": "d7f64f2381d61d7050e2b5c01ba5ea2b",
+            "release": "1.module+el8.1.0+3832+9784644d",
+            "size": 12323,
+            "version": "2.9.9"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 941248,
+            "buildroot_id": 5077784,
+            "buildtime": 1564610159,
+            "epoch": null,
+            "extra": null,
+            "id": 7219345,
+            "metadata_only": false,
+            "name": "jackson-jaxrs-providers-datatypes",
+            "payloadhash": "e5ad82651b7fafdafd835b2fd9700d29",
+            "release": "1.module+el8.1.0+3832+9784644d",
+            "size": 18059,
+            "version": "2.9.9"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 941248,
+            "buildroot_id": 5077784,
+            "buildtime": 1564610159,
+            "epoch": null,
+            "extra": null,
+            "id": 7219344,
+            "metadata_only": false,
+            "name": "jackson-jaxrs-json-provider",
+            "payloadhash": "d5f73c16799f01fe2accf178bda603f5",
+            "release": "1.module+el8.1.0+3832+9784644d",
+            "size": 23819,
+            "version": "2.9.9"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 941248,
+            "buildroot_id": 5077784,
+            "buildtime": 1564610159,
+            "epoch": null,
+            "extra": null,
+            "id": 7219343,
+            "metadata_only": false,
+            "name": "jackson-jaxrs-providers",
+            "payloadhash": "f9aef76f86248c2e5023c5e17024cd71",
+            "release": "1.module+el8.1.0+3832+9784644d",
+            "size": 44719,
+            "version": "2.9.9"
+        },
+        {
+            "arch": "src",
+            "build_id": 941248,
+            "buildroot_id": 5077784,
+            "buildtime": 1564610086,
+            "epoch": null,
+            "extra": null,
+            "id": 7219342,
+            "metadata_only": false,
+            "name": "jackson-jaxrs-providers",
+            "payloadhash": "964f649fb7d235760a767e2856d4b2f4",
+            "release": "1.module+el8.1.0+3832+9784644d",
+            "size": 1272470,
+            "version": "2.9.9"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1144584,
+            "buildroot_id": 5775496,
+            "buildtime": 1584982156,
+            "epoch": null,
+            "extra": null,
+            "id": 7883886,
+            "metadata_only": false,
+            "name": "resteasy-javadoc",
+            "payloadhash": "0be26935ed385e7df6305cbfbb80851c",
+            "release": "3.module+el8.2.0+5723+4574fbff",
+            "size": 1195355,
+            "version": "3.0.26"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1144584,
+            "buildroot_id": 5775496,
+            "buildtime": 1584982156,
+            "epoch": null,
+            "extra": null,
+            "id": 7883885,
+            "metadata_only": false,
+            "name": "resteasy",
+            "payloadhash": "d0cf77aad674eac9b5b07d26901f247d",
+            "release": "3.module+el8.2.0+5723+4574fbff",
+            "size": 1115667,
+            "version": "3.0.26"
+        },
+        {
+            "arch": "src",
+            "build_id": 1144584,
+            "buildroot_id": 5775496,
+            "buildtime": 1584982113,
+            "epoch": null,
+            "extra": null,
+            "id": 7883884,
+            "metadata_only": false,
+            "name": "resteasy",
+            "payloadhash": "87aefc17f4a504d3bf45c96e964ae677",
+            "release": "3.module+el8.2.0+5723+4574fbff",
+            "size": 7816178,
+            "version": "3.0.26"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910796,
+            "buildroot_id": 4975406,
+            "buildtime": 1560355813,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085264,
+            "metadata_only": false,
+            "name": "velocity-javadoc",
+            "payloadhash": "4d867d28d3403b1736dd4b09b0ffcd44",
+            "release": "24.module+el8.1.0+3366+6dfb954c",
+            "size": 496935,
+            "version": "1.7"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910796,
+            "buildroot_id": 4975406,
+            "buildtime": 1560355813,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085263,
+            "metadata_only": false,
+            "name": "velocity",
+            "payloadhash": "f539a3469f3d1e3dca26a55b90ec2d8b",
+            "release": "24.module+el8.1.0+3366+6dfb954c",
+            "size": 446091,
+            "version": "1.7"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910796,
+            "buildroot_id": 4975406,
+            "buildtime": 1560355813,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085262,
+            "metadata_only": false,
+            "name": "velocity-manual",
+            "payloadhash": "aafa87e7eb2fa2530931c79e4924f127",
+            "release": "24.module+el8.1.0+3366+6dfb954c",
+            "size": 643783,
+            "version": "1.7"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910796,
+            "buildroot_id": 4975406,
+            "buildtime": 1560355813,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085261,
+            "metadata_only": false,
+            "name": "velocity-demo",
+            "payloadhash": "f5a5d39f2a63061a898a7a6b8fc35c61",
+            "release": "24.module+el8.1.0+3366+6dfb954c",
+            "size": 111555,
+            "version": "1.7"
+        },
+        {
+            "arch": "src",
+            "build_id": 910796,
+            "buildroot_id": 4975406,
+            "buildtime": 1560355538,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085260,
+            "metadata_only": false,
+            "name": "velocity",
+            "payloadhash": "dae5a51991e342401248c4af0be520fd",
+            "release": "24.module+el8.1.0+3366+6dfb954c",
+            "size": 1584450,
+            "version": "1.7"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1144545,
+            "buildroot_id": 5775341,
+            "buildtime": 1584978871,
+            "epoch": null,
+            "extra": null,
+            "id": 7883860,
+            "metadata_only": false,
+            "name": "glassfish-jax-rs-api",
+            "payloadhash": "f38590be170d682a550d56fb95a60dd0",
+            "release": "6.module+el8.2.0+5723+4574fbff",
+            "size": 110203,
+            "version": "2.0.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1144545,
+            "buildroot_id": 5775341,
+            "buildtime": 1584978871,
+            "epoch": null,
+            "extra": null,
+            "id": 7883859,
+            "metadata_only": false,
+            "name": "glassfish-jax-rs-api-javadoc",
+            "payloadhash": "a7f5044c11b2daa311a4188d9a30b4fc",
+            "release": "6.module+el8.2.0+5723+4574fbff",
+            "size": 266903,
+            "version": "2.0.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 1144545,
+            "buildroot_id": 5775341,
+            "buildtime": 1584978836,
+            "epoch": null,
+            "extra": null,
+            "id": 7883858,
+            "metadata_only": false,
+            "name": "glassfish-jax-rs-api",
+            "payloadhash": "db548a69417c3aadb3bbe305cb272acd",
+            "release": "6.module+el8.2.0+5723+4574fbff",
+            "size": 235872,
+            "version": "2.0.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910805,
+            "buildroot_id": 4975413,
+            "buildtime": 1560355896,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085267,
+            "metadata_only": false,
+            "name": "pki-servlet-4.0-api",
+            "payloadhash": "5147afcccbdf4c9cb50e73222d3d3e42",
+            "release": "16.module+el8.1.0+3366+6dfb954c",
+            "size": 285547,
+            "version": "9.0.7"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910805,
+            "buildroot_id": 4975413,
+            "buildtime": 1560355896,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085266,
+            "metadata_only": false,
+            "name": "pki-servlet-engine",
+            "payloadhash": "4fef9158a717b83186a8000002e4d8c1",
+            "release": "16.module+el8.1.0+3366+6dfb954c",
+            "size": 4773691,
+            "version": "9.0.7"
+        },
+        {
+            "arch": "src",
+            "build_id": 910805,
+            "buildroot_id": 4975413,
+            "buildtime": 1560355541,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085265,
+            "metadata_only": false,
+            "name": "pki-servlet-engine",
+            "payloadhash": "dcfc7f1d5ccb07019e0e059511adc8bb",
+            "release": "16.module+el8.1.0+3366+6dfb954c",
+            "size": 12498686,
+            "version": "9.0.7"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085174,
+            "metadata_only": false,
+            "name": "slf4j-javadoc",
+            "payloadhash": "f937e120576044bf6cc3730b516872ed",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 268659,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085172,
+            "metadata_only": false,
+            "name": "jcl-over-slf4j",
+            "payloadhash": "9204a295309bd63cfd541aec271cfd82",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 31311,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085170,
+            "metadata_only": false,
+            "name": "slf4j-ext",
+            "payloadhash": "9f6af88b474c170ba4b458e07c648322",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 57279,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085169,
+            "metadata_only": false,
+            "name": "slf4j-jcl",
+            "payloadhash": "feb88a5268168663948a66a72f9ed1e2",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 22747,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085168,
+            "metadata_only": false,
+            "name": "slf4j-sources",
+            "payloadhash": "c66b2217ce8b28703d77a22a18f70511",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 345179,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085165,
+            "metadata_only": false,
+            "name": "slf4j-manual",
+            "payloadhash": "29080e4ee21afe086da026c594b75930",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 132975,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085164,
+            "metadata_only": false,
+            "name": "slf4j-log4j12",
+            "payloadhash": "e5ceb10298bbf99d13003bc6a23f121f",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 27971,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085162,
+            "metadata_only": false,
+            "name": "slf4j-jdk14",
+            "payloadhash": "32c537a296550d2ded0b7730c4f2494c",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 24319,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085161,
+            "metadata_only": false,
+            "name": "slf4j",
+            "payloadhash": "d489685b31fc888d1694d0a3a0f7a75d",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 77571,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085160,
+            "metadata_only": false,
+            "name": "log4j-over-slf4j",
+            "payloadhash": "355aedb072fdbbca61b45112b7368ea6",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 36559,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355448,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085159,
+            "metadata_only": false,
+            "name": "jul-to-slf4j",
+            "payloadhash": "976b36a458034e7fc9c395c695b9a996",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 20659,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "src",
+            "build_id": 910788,
+            "buildroot_id": 4975391,
+            "buildtime": 1560355333,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085158,
+            "metadata_only": false,
+            "name": "slf4j",
+            "payloadhash": "4f3d111f920da849d1068e313be814aa",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "size": 3449598,
+            "version": "1.7.25"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910800,
+            "buildroot_id": 4975407,
+            "buildtime": 1560355439,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085157,
+            "metadata_only": false,
+            "name": "xml-commons-resolver-javadoc",
+            "payloadhash": "6a18d36e900dc38e557040db366a720c",
+            "release": "26.module+el8.1.0+3366+6dfb954c",
+            "size": 99247,
+            "version": "1.2"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910800,
+            "buildroot_id": 4975407,
+            "buildtime": 1560355439,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085156,
+            "metadata_only": false,
+            "name": "xml-commons-resolver",
+            "payloadhash": "72db3815a2eb2808fd34d431b2561c8c",
+            "release": "26.module+el8.1.0+3366+6dfb954c",
+            "size": 117151,
+            "version": "1.2"
+        },
+        {
+            "arch": "src",
+            "build_id": 910800,
+            "buildroot_id": 4975407,
+            "buildtime": 1560355406,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085155,
+            "metadata_only": false,
+            "name": "xml-commons-resolver",
+            "payloadhash": "d96242687a4b625591fb5ce7629070bc",
+            "release": "26.module+el8.1.0+3366+6dfb954c",
+            "size": 280185,
+            "version": "1.2"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910803,
+            "buildroot_id": 4975410,
+            "buildtime": 1560356070,
+            "epoch": null,
+            "extra": null,
+            "id": 7085275,
+            "metadata_only": false,
+            "name": "xerces-j2-demo",
+            "payloadhash": "7035cf2ab5b8cd5b9f01df1b89e37ea7",
+            "release": "34.module+el8.1.0+3366+6dfb954c",
+            "size": 177959,
+            "version": "2.11.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910803,
+            "buildroot_id": 4975410,
+            "buildtime": 1560356070,
+            "epoch": null,
+            "extra": null,
+            "id": 7085274,
+            "metadata_only": false,
+            "name": "xerces-j2-javadoc",
+            "payloadhash": "f0c1a4c150a28151a21fbf93fcf3e6b3",
+            "release": "34.module+el8.1.0+3366+6dfb954c",
+            "size": 1129083,
+            "version": "2.11.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910803,
+            "buildroot_id": 4975410,
+            "buildtime": 1560356070,
+            "epoch": null,
+            "extra": null,
+            "id": 7085273,
+            "metadata_only": false,
+            "name": "xerces-j2",
+            "payloadhash": "d2541a2c973ad12c91b34e3c239e664a",
+            "release": "34.module+el8.1.0+3366+6dfb954c",
+            "size": 1214555,
+            "version": "2.11.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 910803,
+            "buildroot_id": 4975410,
+            "buildtime": 1560355730,
+            "epoch": null,
+            "extra": null,
+            "id": 7085272,
+            "metadata_only": false,
+            "name": "xerces-j2",
+            "payloadhash": "461fe024860e749fd2e6e6b0ee41f9ea",
+            "release": "34.module+el8.1.0+3366+6dfb954c",
+            "size": 1823348,
+            "version": "2.11.0"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 910789,
+            "buildroot_id": 4975396,
+            "buildtime": 1560355677,
+            "epoch": null,
+            "extra": null,
+            "id": 7085217,
+            "metadata_only": false,
+            "name": "python3-nss-debuginfo",
+            "payloadhash": "c7754f908877c4b7ca70b9a299c2ef79",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 494111,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 910789,
+            "buildroot_id": 4975396,
+            "buildtime": 1560355677,
+            "epoch": null,
+            "extra": null,
+            "id": 7085216,
+            "metadata_only": false,
+            "name": "python-nss-debugsource",
+            "payloadhash": "eadc3f26709c176852f14bd82de4ea3e",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 210255,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 910789,
+            "buildroot_id": 4975396,
+            "buildtime": 1560355677,
+            "epoch": null,
+            "extra": null,
+            "id": 7085215,
+            "metadata_only": false,
+            "name": "python-nss-doc",
+            "payloadhash": "c86d5ac6ae8f49f1c7409b77d4605ddc",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 323651,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "ppc64le",
+            "build_id": 910789,
+            "buildroot_id": 4975396,
+            "buildtime": 1560355677,
+            "epoch": null,
+            "extra": null,
+            "id": 7085214,
+            "metadata_only": false,
+            "name": "python3-nss",
+            "payloadhash": "5e2c4f53fec92e8010bb22c2dc056fd0",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 300583,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "i686",
+            "build_id": 910789,
+            "buildroot_id": 4975395,
+            "buildtime": 1560355398,
+            "epoch": null,
+            "extra": null,
+            "id": 7085213,
+            "metadata_only": false,
+            "name": "python-nss-doc",
+            "payloadhash": "4b4b46732aec4e344893505cbd97c6fe",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 323687,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "i686",
+            "build_id": 910789,
+            "buildroot_id": 4975395,
+            "buildtime": 1560355398,
+            "epoch": null,
+            "extra": null,
+            "id": 7085212,
+            "metadata_only": false,
+            "name": "python3-nss-debuginfo",
+            "payloadhash": "7dbe3b2fe595a0bbad060119c562f2ed",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 419939,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "i686",
+            "build_id": 910789,
+            "buildroot_id": 4975395,
+            "buildtime": 1560355398,
+            "epoch": null,
+            "extra": null,
+            "id": 7085211,
+            "metadata_only": false,
+            "name": "python3-nss",
+            "payloadhash": "67f3fb608106adbc0210a0a67c1c1185",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 295259,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "i686",
+            "build_id": 910789,
+            "buildroot_id": 4975395,
+            "buildtime": 1560355398,
+            "epoch": null,
+            "extra": null,
+            "id": 7085210,
+            "metadata_only": false,
+            "name": "python-nss-debugsource",
+            "payloadhash": "1efdfec3107233a2908f1bab04d1881e",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 210299,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 910789,
+            "buildroot_id": 4975393,
+            "buildtime": 1560355358,
+            "epoch": null,
+            "extra": null,
+            "id": 7085209,
+            "metadata_only": false,
+            "name": "python3-nss-debuginfo",
+            "payloadhash": "2d9cbf2427910da0be3684c4ba11c407",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 478795,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 910789,
+            "buildroot_id": 4975393,
+            "buildtime": 1560355358,
+            "epoch": null,
+            "extra": null,
+            "id": 7085208,
+            "metadata_only": false,
+            "name": "python3-nss",
+            "payloadhash": "0e876a14f6a56259d8154b07afe130c3",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 280295,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 910789,
+            "buildroot_id": 4975393,
+            "buildtime": 1560355358,
+            "epoch": null,
+            "extra": null,
+            "id": 7085207,
+            "metadata_only": false,
+            "name": "python-nss-doc",
+            "payloadhash": "15ebd7d68a04ff198b69806824cf5c41",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 323647,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "s390x",
+            "build_id": 910789,
+            "buildroot_id": 4975393,
+            "buildtime": 1560355358,
+            "epoch": null,
+            "extra": null,
+            "id": 7085206,
+            "metadata_only": false,
+            "name": "python-nss-debugsource",
+            "payloadhash": "f5177b64f4eb5b0e21327fd27bf4d8fa",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 210251,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 910789,
+            "buildroot_id": 4975394,
+            "buildtime": 1560355392,
+            "epoch": null,
+            "extra": null,
+            "id": 7085205,
+            "metadata_only": false,
+            "name": "python-nss-debugsource",
+            "payloadhash": "f705150882c1edd57a000f0070e54bb1",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 210267,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 910789,
+            "buildroot_id": 4975394,
+            "buildtime": 1560355392,
+            "epoch": null,
+            "extra": null,
+            "id": 7085204,
+            "metadata_only": false,
+            "name": "python-nss-doc",
+            "payloadhash": "154efb2d47a46ca592a248b3141e2cf4",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 323651,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 910789,
+            "buildroot_id": 4975394,
+            "buildtime": 1560355392,
+            "epoch": null,
+            "extra": null,
+            "id": 7085203,
+            "metadata_only": false,
+            "name": "python3-nss-debuginfo",
+            "payloadhash": "f8685725d1795bb4453f7fafb82c89a6",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 481967,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "x86_64",
+            "build_id": 910789,
+            "buildroot_id": 4975394,
+            "buildtime": 1560355392,
+            "epoch": null,
+            "extra": null,
+            "id": 7085202,
+            "metadata_only": false,
+            "name": "python3-nss",
+            "payloadhash": "c8926e322b42110b69ad8ded2059b0d3",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 292187,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 910789,
+            "buildroot_id": 4975399,
+            "buildtime": 1560355581,
+            "epoch": null,
+            "extra": null,
+            "id": 7085201,
+            "metadata_only": false,
+            "name": "python3-nss-debuginfo",
+            "payloadhash": "0ae5d8bbb40cd28c9e4dbb6aab53c94c",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 499579,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 910789,
+            "buildroot_id": 4975399,
+            "buildtime": 1560355581,
+            "epoch": null,
+            "extra": null,
+            "id": 7085200,
+            "metadata_only": false,
+            "name": "python-nss-debugsource",
+            "payloadhash": "b195be9d96317aeb9229bf4ea84375d9",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 210235,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 910789,
+            "buildroot_id": 4975399,
+            "buildtime": 1560355581,
+            "epoch": null,
+            "extra": null,
+            "id": 7085199,
+            "metadata_only": false,
+            "name": "python3-nss",
+            "payloadhash": "4f4c9a0bce27ad8cc8b21c39fc7b323e",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 287687,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "aarch64",
+            "build_id": 910789,
+            "buildroot_id": 4975399,
+            "buildtime": 1560355581,
+            "epoch": null,
+            "extra": null,
+            "id": 7085198,
+            "metadata_only": false,
+            "name": "python-nss-doc",
+            "payloadhash": "008e373b053d3c07e5bd8579406457f3",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 323619,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 910789,
+            "buildroot_id": 4975399,
+            "buildtime": 1560355475,
+            "epoch": null,
+            "extra": null,
+            "id": 7085197,
+            "metadata_only": false,
+            "name": "python-nss",
+            "payloadhash": "360d26e078f21b4a01ea59e0f8e0129d",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 283977,
+            "version": "1.0.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910790,
+            "buildroot_id": 4975392,
+            "buildtime": 1560355442,
+            "epoch": null,
+            "extra": null,
+            "id": 7085167,
+            "metadata_only": false,
+            "name": "javassist-javadoc",
+            "payloadhash": "ad6b45bb4192c6e9c16a47bf066dd36e",
+            "release": "8.module+el8.1.0+3366+6dfb954c",
+            "size": 799951,
+            "version": "3.18.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910790,
+            "buildroot_id": 4975392,
+            "buildtime": 1560355442,
+            "epoch": null,
+            "extra": null,
+            "id": 7085166,
+            "metadata_only": false,
+            "name": "javassist",
+            "payloadhash": "a9c1f2a18b412b517ea57a8ca447b343",
+            "release": "8.module+el8.1.0+3366+6dfb954c",
+            "size": 697527,
+            "version": "3.18.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 910790,
+            "buildroot_id": 4975392,
+            "buildtime": 1560355352,
+            "epoch": null,
+            "extra": null,
+            "id": 7085163,
+            "metadata_only": false,
+            "name": "javassist",
+            "payloadhash": "055564a9807be9471c080dd3f58f6497",
+            "release": "8.module+el8.1.0+3366+6dfb954c",
+            "size": 1188275,
+            "version": "3.18.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910809,
+            "buildroot_id": 4975421,
+            "buildtime": 1560355743,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085222,
+            "metadata_only": false,
+            "name": "jakarta-commons-httpclient-manual",
+            "payloadhash": "831a80c37ef2f7bf4883f5ad21af9060",
+            "release": "28.module+el8.1.0+3366+6dfb954c",
+            "size": 680263,
+            "version": "3.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910809,
+            "buildroot_id": 4975421,
+            "buildtime": 1560355743,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085221,
+            "metadata_only": false,
+            "name": "jakarta-commons-httpclient-javadoc",
+            "payloadhash": "4b735a863005a3f02d618631da94fa70",
+            "release": "28.module+el8.1.0+3366+6dfb954c",
+            "size": 317767,
+            "version": "3.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910809,
+            "buildroot_id": 4975421,
+            "buildtime": 1560355743,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085220,
+            "metadata_only": false,
+            "name": "jakarta-commons-httpclient-demo",
+            "payloadhash": "84d674cbb00b2292a1b5f56756118baa",
+            "release": "28.module+el8.1.0+3366+6dfb954c",
+            "size": 54911,
+            "version": "3.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910809,
+            "buildroot_id": 4975421,
+            "buildtime": 1560355743,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085219,
+            "metadata_only": false,
+            "name": "jakarta-commons-httpclient",
+            "payloadhash": "3d878099e7f5348fffb2594d0837d44d",
+            "release": "28.module+el8.1.0+3366+6dfb954c",
+            "size": 252711,
+            "version": "3.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 910809,
+            "buildroot_id": 4975421,
+            "buildtime": 1560355616,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085218,
+            "metadata_only": false,
+            "name": "jakarta-commons-httpclient",
+            "payloadhash": "4ff5dbaa4683ed023655f475c3aca324",
+            "release": "28.module+el8.1.0+3366+6dfb954c",
+            "size": 1899859,
+            "version": "3.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910799,
+            "buildroot_id": 4975405,
+            "buildtime": 1560355747,
+            "epoch": null,
+            "extra": null,
+            "id": 7085225,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-api-javadoc",
+            "payloadhash": "0970bc477a56e740aa733a9e76f3197f",
+            "release": "8.module+el8.1.0+3366+6dfb954c",
+            "size": 212867,
+            "version": "2.2.12"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910799,
+            "buildroot_id": 4975405,
+            "buildtime": 1560355747,
+            "epoch": null,
+            "extra": null,
+            "id": 7085224,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-api",
+            "payloadhash": "f3e189d5001d224ce51f86aae2df51ab",
+            "release": "8.module+el8.1.0+3366+6dfb954c",
+            "size": 102823,
+            "version": "2.2.12"
+        },
+        {
+            "arch": "src",
+            "build_id": 910799,
+            "buildroot_id": 4975405,
+            "buildtime": 1560355582,
+            "epoch": null,
+            "extra": null,
+            "id": 7085223,
+            "metadata_only": false,
+            "name": "glassfish-jaxb-api",
+            "payloadhash": "a229eb5c8c16046a7d531c081b323f26",
+            "release": "8.module+el8.1.0+3366+6dfb954c",
+            "size": 247856,
+            "version": "2.2.12"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910797,
+            "buildroot_id": 4975404,
+            "buildtime": 1560355487,
+            "epoch": null,
+            "extra": null,
+            "id": 7085182,
+            "metadata_only": false,
+            "name": "bea-stax-api",
+            "payloadhash": "031463ad022495097de4f49f08abc77d",
+            "release": "16.module+el8.1.0+3366+6dfb954c",
+            "size": 36543,
+            "version": "1.2.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910797,
+            "buildroot_id": 4975404,
+            "buildtime": 1560355487,
+            "epoch": null,
+            "extra": null,
+            "id": 7085181,
+            "metadata_only": false,
+            "name": "bea-stax",
+            "payloadhash": "71076d2a3b5335081d51289f34b82df8",
+            "release": "16.module+el8.1.0+3366+6dfb954c",
+            "size": 186679,
+            "version": "1.2.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910797,
+            "buildroot_id": 4975404,
+            "buildtime": 1560355487,
+            "epoch": null,
+            "extra": null,
+            "id": 7085180,
+            "metadata_only": false,
+            "name": "bea-stax-javadoc",
+            "payloadhash": "d4f7c66827294a371c2466a3a648cd18",
+            "release": "16.module+el8.1.0+3366+6dfb954c",
+            "size": 117415,
+            "version": "1.2.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 910797,
+            "buildroot_id": 4975404,
+            "buildtime": 1560355438,
+            "epoch": null,
+            "extra": null,
+            "id": 7085179,
+            "metadata_only": false,
+            "name": "bea-stax",
+            "payloadhash": "d2f3e218d099ecd91c6c89090f5da43b",
+            "release": "16.module+el8.1.0+3366+6dfb954c",
+            "size": 302260,
+            "version": "1.2.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910787,
+            "buildroot_id": 4975390,
+            "buildtime": 1560355352,
+            "epoch": null,
+            "extra": null,
+            "id": 7085154,
+            "metadata_only": false,
+            "name": "fasterxml-oss-parent",
+            "payloadhash": "3fdf1ae0babff5bf4fbbfcad26fed934",
+            "release": "6.module+el8.1.0+3366+6dfb954c",
+            "size": 19579,
+            "version": "26"
+        },
+        {
+            "arch": "src",
+            "build_id": 910787,
+            "buildroot_id": 4975390,
+            "buildtime": 1560355330,
+            "epoch": null,
+            "extra": null,
+            "id": 7085153,
+            "metadata_only": false,
+            "name": "fasterxml-oss-parent",
+            "payloadhash": "aa9f8dad383518ec4a0386dc9bdee8d8",
+            "release": "6.module+el8.1.0+3366+6dfb954c",
+            "size": 21378,
+            "version": "26"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910807,
+            "buildroot_id": 4975419,
+            "buildtime": 1560355650,
+            "epoch": null,
+            "extra": null,
+            "id": 7085195,
+            "metadata_only": false,
+            "name": "apache-commons-lang-javadoc",
+            "payloadhash": "b5ec483eb15d09255e3d0e563d40bfac",
+            "release": "21.module+el8.1.0+3366+6dfb954c",
+            "size": 440335,
+            "version": "2.6"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910807,
+            "buildroot_id": 4975419,
+            "buildtime": 1560355650,
+            "epoch": null,
+            "extra": null,
+            "id": 7085194,
+            "metadata_only": false,
+            "name": "apache-commons-lang",
+            "payloadhash": "9419b773aa18e62b0328fe3f631aa981",
+            "release": "21.module+el8.1.0+3366+6dfb954c",
+            "size": 288231,
+            "version": "2.6"
+        },
+        {
+            "arch": "src",
+            "build_id": 910807,
+            "buildroot_id": 4975419,
+            "buildtime": 1560355611,
+            "epoch": null,
+            "extra": null,
+            "id": 7085193,
+            "metadata_only": false,
+            "name": "apache-commons-lang",
+            "payloadhash": "0f1317e752e923f435c2404efc1ffc16",
+            "release": "21.module+el8.1.0+3366+6dfb954c",
+            "size": 577857,
+            "version": "2.6"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910820,
+            "buildroot_id": 4975468,
+            "buildtime": 1560356513,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085345,
+            "metadata_only": false,
+            "name": "msv-demo",
+            "payloadhash": "f6c242ea890a87c7a2511091ac593233",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 32487,
+            "version": "2013.6.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910820,
+            "buildroot_id": 4975468,
+            "buildtime": 1560356513,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085344,
+            "metadata_only": false,
+            "name": "msv-rngconv",
+            "payloadhash": "8996a507262b9ff1c10e0591d3cb0481",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 21779,
+            "version": "2013.6.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910820,
+            "buildroot_id": 4975468,
+            "buildtime": 1560356513,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085343,
+            "metadata_only": false,
+            "name": "msv-xsdlib",
+            "payloadhash": "055e01e039710739521c616d1418ee6b",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 237275,
+            "version": "2013.6.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910820,
+            "buildroot_id": 4975468,
+            "buildtime": 1560356513,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085342,
+            "metadata_only": false,
+            "name": "msv-msv",
+            "payloadhash": "ed6277b62bf5d8efe25f7236ba61c682",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 662083,
+            "version": "2013.6.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910820,
+            "buildroot_id": 4975468,
+            "buildtime": 1560356513,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085341,
+            "metadata_only": false,
+            "name": "msv-javadoc",
+            "payloadhash": "d6d5bd9dfc802f472caa7ab05ca7b568",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 1258703,
+            "version": "2013.6.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910820,
+            "buildroot_id": 4975468,
+            "buildtime": 1560356513,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085340,
+            "metadata_only": false,
+            "name": "msv-manual",
+            "payloadhash": "c91e911e8a5c26123375b2774d2dc7c9",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 56683,
+            "version": "2013.6.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910820,
+            "buildroot_id": 4975468,
+            "buildtime": 1560356513,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085339,
+            "metadata_only": false,
+            "name": "msv-xmlgen",
+            "payloadhash": "8f6359c6ccb635a56f92b88d458115b0",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 57003,
+            "version": "2013.6.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 910820,
+            "buildroot_id": 4975468,
+            "buildtime": 1560356399,
+            "epoch": 1,
+            "extra": null,
+            "id": 7085338,
+            "metadata_only": false,
+            "name": "msv",
+            "payloadhash": "71d384aac15a313c0e71ba1b3a57e142",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "size": 787060,
+            "version": "2013.6.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910811,
+            "buildroot_id": 4975434,
+            "buildtime": 1560355976,
+            "epoch": null,
+            "extra": null,
+            "id": 7085271,
+            "metadata_only": false,
+            "name": "apache-commons-collections",
+            "payloadhash": "1401c1d8bb40febccbffc110cc56a561",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 549339,
+            "version": "3.2.2"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910811,
+            "buildroot_id": 4975434,
+            "buildtime": 1560355976,
+            "epoch": null,
+            "extra": null,
+            "id": 7085270,
+            "metadata_only": false,
+            "name": "apache-commons-collections-javadoc",
+            "payloadhash": "6392a0b186e0e04382544831c3035be4",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 806803,
+            "version": "3.2.2"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910811,
+            "buildroot_id": 4975434,
+            "buildtime": 1560355976,
+            "epoch": null,
+            "extra": null,
+            "id": 7085269,
+            "metadata_only": false,
+            "name": "apache-commons-collections-testframework",
+            "payloadhash": "e1459253d926625c1a8591d2b3564048",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 112475,
+            "version": "3.2.2"
+        },
+        {
+            "arch": "src",
+            "build_id": 910811,
+            "buildroot_id": 4975434,
+            "buildtime": 1560355693,
+            "epoch": null,
+            "extra": null,
+            "id": 7085268,
+            "metadata_only": false,
+            "name": "apache-commons-collections",
+            "payloadhash": "ddd352323aae700c891b443b02a947ef",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "size": 646872,
+            "version": "3.2.2"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910798,
+            "buildroot_id": 4975403,
+            "buildtime": 1560355538,
+            "epoch": null,
+            "extra": null,
+            "id": 7085190,
+            "metadata_only": false,
+            "name": "xml-stylebook-demo",
+            "payloadhash": "f585b269f25ce8e5f11c7beb758d8e26",
+            "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+            "size": 68943,
+            "version": "1.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910798,
+            "buildroot_id": 4975403,
+            "buildtime": 1560355538,
+            "epoch": null,
+            "extra": null,
+            "id": 7085189,
+            "metadata_only": false,
+            "name": "xml-stylebook-javadoc",
+            "payloadhash": "aa50e9228e83a60ec287bd743fd34054",
+            "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+            "size": 70471,
+            "version": "1.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910798,
+            "buildroot_id": 4975403,
+            "buildtime": 1560355538,
+            "epoch": null,
+            "extra": null,
+            "id": 7085188,
+            "metadata_only": false,
+            "name": "xml-stylebook",
+            "payloadhash": "cf264265bd4e4a782ae7f225a4c69b1f",
+            "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+            "size": 58883,
+            "version": "1.0"
+        },
+        {
+            "arch": "src",
+            "build_id": 910798,
+            "buildroot_id": 4975403,
+            "buildtime": 1560355480,
+            "epoch": null,
+            "extra": null,
+            "id": 7085187,
+            "metadata_only": false,
+            "name": "xml-stylebook",
+            "payloadhash": "1d9ac9c5a61163da965e08608cf822cc",
+            "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+            "size": 1190166,
+            "version": "1.0"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910793,
+            "buildroot_id": 4975400,
+            "buildtime": 1560355507,
+            "epoch": null,
+            "extra": null,
+            "id": 7085186,
+            "metadata_only": false,
+            "name": "xml-commons-apis-javadoc",
+            "payloadhash": "11a62d09579e6424da93d4a05dabd5ff",
+            "release": "25.module+el8.1.0+3366+6dfb954c",
+            "size": 665219,
+            "version": "1.4.01"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910793,
+            "buildroot_id": 4975400,
+            "buildtime": 1560355507,
+            "epoch": null,
+            "extra": null,
+            "id": 7085185,
+            "metadata_only": false,
+            "name": "xml-commons-apis",
+            "payloadhash": "ede4ec6b775464946b6699aa6d1ed8d1",
+            "release": "25.module+el8.1.0+3366+6dfb954c",
+            "size": 239075,
+            "version": "1.4.01"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910793,
+            "buildroot_id": 4975400,
+            "buildtime": 1560355507,
+            "epoch": null,
+            "extra": null,
+            "id": 7085184,
+            "metadata_only": false,
+            "name": "xml-commons-apis-manual",
+            "payloadhash": "85a40348a4ff834a0f0ebd8cb2f75f40",
+            "release": "25.module+el8.1.0+3366+6dfb954c",
+            "size": 415895,
+            "version": "1.4.01"
+        },
+        {
+            "arch": "src",
+            "build_id": 910793,
+            "buildroot_id": 4975400,
+            "buildtime": 1560355370,
+            "epoch": null,
+            "extra": null,
+            "id": 7085183,
+            "metadata_only": false,
+            "name": "xml-commons-apis",
+            "payloadhash": "45e5483b26f6b8aeffab6192d446f6c0",
+            "release": "25.module+el8.1.0+3366+6dfb954c",
+            "size": 963846,
+            "version": "1.4.01"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910795,
+            "buildroot_id": 4975401,
+            "buildtime": 1560355460,
+            "epoch": null,
+            "extra": null,
+            "id": 7085178,
+            "metadata_only": false,
+            "name": "relaxngDatatype-javadoc",
+            "payloadhash": "367a0202ddea916b876d594e19c60a6b",
+            "release": "7.module+el8.1.0+3366+6dfb954c",
+            "size": 45343,
+            "version": "2011.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910795,
+            "buildroot_id": 4975401,
+            "buildtime": 1560355460,
+            "epoch": null,
+            "extra": null,
+            "id": 7085177,
+            "metadata_only": false,
+            "name": "relaxngDatatype",
+            "payloadhash": "5ab56fa7b0124fd8fd9b5a9815b0a532",
+            "release": "7.module+el8.1.0+3366+6dfb954c",
+            "size": 27039,
+            "version": "2011.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 910795,
+            "buildroot_id": 4975401,
+            "buildtime": 1560355430,
+            "epoch": null,
+            "extra": null,
+            "id": 7085175,
+            "metadata_only": false,
+            "name": "relaxngDatatype",
+            "payloadhash": "25d1dadb72b0a2deee892e992fc3a58b",
+            "release": "7.module+el8.1.0+3366+6dfb954c",
+            "size": 22882,
+            "version": "2011.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910821,
+            "buildroot_id": 4975469,
+            "buildtime": 1560356456,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085337,
+            "metadata_only": false,
+            "name": "xalan-j2-xsltc",
+            "payloadhash": "17c7ce492e4aa44a30bfab7953192ed1",
+            "release": "38.module+el8.1.0+3366+6dfb954c",
+            "size": 1312275,
+            "version": "2.7.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910821,
+            "buildroot_id": 4975469,
+            "buildtime": 1560356456,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085336,
+            "metadata_only": false,
+            "name": "xalan-j2-manual",
+            "payloadhash": "1394253c1b433897efee69cb75cc8ff3",
+            "release": "38.module+el8.1.0+3366+6dfb954c",
+            "size": 1843091,
+            "version": "2.7.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910821,
+            "buildroot_id": 4975469,
+            "buildtime": 1560356456,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085335,
+            "metadata_only": false,
+            "name": "xalan-j2-demo",
+            "payloadhash": "8f77f7793d76b6223910bab057bb66c3",
+            "release": "38.module+el8.1.0+3366+6dfb954c",
+            "size": 4130303,
+            "version": "2.7.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910821,
+            "buildroot_id": 4975469,
+            "buildtime": 1560356456,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085334,
+            "metadata_only": false,
+            "name": "xalan-j2",
+            "payloadhash": "8690dbfec4d1087dfe0286f19351d7a1",
+            "release": "38.module+el8.1.0+3366+6dfb954c",
+            "size": 1982295,
+            "version": "2.7.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910821,
+            "buildroot_id": 4975469,
+            "buildtime": 1560356456,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085333,
+            "metadata_only": false,
+            "name": "xalan-j2-javadoc",
+            "payloadhash": "897bbc711d12c2dcf7d3ead4433b5334",
+            "release": "38.module+el8.1.0+3366+6dfb954c",
+            "size": 1853923,
+            "version": "2.7.1"
+        },
+        {
+            "arch": "src",
+            "build_id": 910821,
+            "buildroot_id": 4975469,
+            "buildtime": 1560356384,
+            "epoch": 0,
+            "extra": null,
+            "id": 7085332,
+            "metadata_only": false,
+            "name": "xalan-j2",
+            "payloadhash": "4d365d5aabe0bdf50d0324a6f2c26f43",
+            "release": "38.module+el8.1.0+3366+6dfb954c",
+            "size": 3392377,
+            "version": "2.7.1"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910827,
+            "buildroot_id": 4975503,
+            "buildtime": 1560356894,
+            "epoch": null,
+            "extra": null,
+            "id": 7085402,
+            "metadata_only": false,
+            "name": "relaxngcc-javadoc",
+            "payloadhash": "0676a171c750f809c3838616dda56c64",
+            "release": "14.module+el8.1.0+3366+6dfb954c",
+            "size": 160235,
+            "version": "1.12"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 910827,
+            "buildroot_id": 4975503,
+            "buildtime": 1560356894,
+            "epoch": null,
+            "extra": null,
+            "id": 7085401,
+            "metadata_only": false,
+            "name": "relaxngcc",
+            "payloadhash": "67f7ec9c17ccb61dbbd97ebac2e846cc",
+            "release": "14.module+el8.1.0+3366+6dfb954c",
+            "size": 366155,
+            "version": "1.12"
+        },
+        {
+            "arch": "src",
+            "build_id": 910827,
+            "buildroot_id": 4975503,
+            "buildtime": 1560356832,
+            "epoch": null,
+            "extra": null,
+            "id": 7085400,
+            "metadata_only": false,
+            "name": "relaxngcc",
+            "payloadhash": "5efcba4df3b65845f5a2884cc07384a6",
+            "release": "14.module+el8.1.0+3366+6dfb954c",
+            "size": 2133931,
+            "version": "1.12"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1144552,
+            "buildroot_id": 5775376,
+            "buildtime": 1584979612,
+            "epoch": null,
+            "extra": null,
+            "id": 7883865,
+            "metadata_only": false,
+            "name": "stax-ex",
+            "payloadhash": "9b5656c8c4167f017817f65dcea2050f",
+            "release": "8.module+el8.2.0+5723+4574fbff",
+            "size": 55775,
+            "version": "1.7.7"
+        },
+        {
+            "arch": "noarch",
+            "build_id": 1144552,
+            "buildroot_id": 5775376,
+            "buildtime": 1584979612,
+            "epoch": null,
+            "extra": null,
+            "id": 7883864,
+            "metadata_only": false,
+            "name": "stax-ex-javadoc",
+            "payloadhash": "3059769a5368e04b6b279847de2b7d70",
+            "release": "8.module+el8.2.0+5723+4574fbff",
+            "size": 73323,
+            "version": "1.7.7"
+        },
+        {
+            "arch": "src",
+            "build_id": 1144552,
+            "buildroot_id": 5775376,
+            "buildtime": 1584979588,
+            "epoch": null,
+            "extra": null,
+            "id": 7883863,
+            "metadata_only": false,
+            "name": "stax-ex",
+            "payloadhash": "b42cad1ce475d57336c469a35d76c81d",
+            "release": "8.module+el8.2.0+5723+4574fbff",
+            "size": 50376,
+            "version": "1.7.7"
+        }
+    ],
+    [
+        {
+            "tag_id": 80063,
+            "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+            "id": 1557161,
+            "build_id": 1557161,
+            "version": "10.8.3",
+            "release": "6.module+el8.2.0+10554+cf83aa72",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2021-03-30 23:30:32.156112",
+            "start_time": "2021-03-30 23:15:00.102532",
+            "task_id": 35853377,
+            "creation_event_id": 38240589,
+            "creation_time": "2021-03-30 23:15:00.109509",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 31009,
+            "package_name": "pki-core",
+            "name": "pki-core",
+            "nvr": "pki-core-10.8.3-6.module+el8.2.0+10554+cf83aa72",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 80063,
+            "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+            "id": 1166092,
+            "build_id": 1166092,
+            "version": "7.4.1",
+            "release": "2.module+el8.2.0+6294+b7db4606",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2020-04-14 19:05:27.833927",
+            "start_time": "2020-04-14 19:03:09.327430",
+            "task_id": 27929461,
+            "creation_event_id": 30835934,
+            "creation_time": "2020-04-14 19:03:09.327430",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 3207,
+            "package_name": "tomcatjss",
+            "name": "tomcatjss",
+            "nvr": "tomcatjss-7.4.1-2.module+el8.2.0+6294+b7db4606",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 80063,
+            "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+            "id": 1166093,
+            "build_id": 1166093,
+            "version": "4.21.0",
+            "release": "2.module+el8.2.0+6294+b7db4606",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2020-04-14 19:05:27.838380",
+            "start_time": "2020-04-14 19:03:09.334948",
+            "task_id": 27929462,
+            "creation_event_id": 30835935,
+            "creation_time": "2020-04-14 19:03:09.334948",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 1827,
+            "package_name": "ldapjdk",
+            "name": "ldapjdk",
+            "nvr": "ldapjdk-4.21.0-2.module+el8.2.0+6294+b7db4606",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 80063,
+            "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+            "id": 1557155,
+            "build_id": 1557155,
+            "version": "4.6.2",
+            "release": "12.module+el8.2.0+10554+cf83aa72",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2021-03-30 22:55:43.295439",
+            "start_time": "2021-03-30 22:44:59.531892",
+            "task_id": 35852065,
+            "creation_event_id": 38240172,
+            "creation_time": "2021-03-30 22:44:59.539155",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 3766,
+            "package_name": "jss",
+            "name": "jss",
+            "nvr": "jss-4.6.2-12.module+el8.2.0+10554+cf83aa72",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 80063,
+            "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+            "id": 1557147,
+            "build_id": 1557147,
+            "version": "0.1",
+            "release": "1.module+el8.2.0+10554+cf83aa72",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2021-03-30 22:36:11.143167",
+            "start_time": "2021-03-30 22:34:38.783064",
+            "task_id": 35851170,
+            "creation_event_id": 38239974,
+            "creation_time": "2021-03-30 22:34:38.790361",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 63471,
+            "package_name": "module-build-macros",
+            "name": "module-build-macros",
+            "nvr": "module-build-macros-0.1-1.module+el8.2.0+10554+cf83aa72",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 1062086,
+            "build_id": 1062086,
+            "version": "0.4",
+            "release": "4.module+el8.2.0+5496+53199ee7",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2020-01-18 10:52:42.572941",
+            "start_time": "2020-01-18 10:45:17.842872",
+            "task_id": 25853543,
+            "creation_event_id": 28651716,
+            "creation_time": "2020-01-18 10:45:17.842872",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 71890,
+            "package_name": "ipa-healthcheck",
+            "name": "ipa-healthcheck",
+            "nvr": "ipa-healthcheck-0.4-4.module+el8.2.0+5496+53199ee7",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 959057,
+            "build_id": 959057,
+            "version": "1.3.2",
+            "release": "9.module+el8.1.0+4107+4a66eb87",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-08-30 08:52:00.858675",
+            "start_time": "2019-08-30 08:50:27.937792",
+            "task_id": 23245908,
+            "creation_event_id": 26065866,
+            "creation_time": "2019-08-30 08:50:27.937792",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 48014,
+            "package_name": "python-yubico",
+            "name": "python-yubico",
+            "nvr": "python-yubico-1.3.2-9.module+el8.1.0+4107+4a66eb87",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 959056,
+            "build_id": 959056,
+            "version": "0.6.0",
+            "release": "3.module+el8.1.0+4107+4a66eb87",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-08-30 08:52:00.901940",
+            "start_time": "2019-08-30 08:50:26.423040",
+            "task_id": 23245907,
+            "creation_event_id": 26065865,
+            "creation_time": "2019-08-30 08:50:26.423040",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 57745,
+            "package_name": "custodia",
+            "name": "custodia",
+            "nvr": "custodia-0.6.0-3.module+el8.1.0+4107+4a66eb87",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 959052,
+            "build_id": 959052,
+            "version": "0.5.0",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-08-30 08:47:21.842483",
+            "start_time": "2019-08-30 08:44:58.038593",
+            "task_id": 23245840,
+            "creation_event_id": 26065820,
+            "creation_time": "2019-08-30 08:44:58.038593",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 57746,
+            "package_name": "python-jwcrypto",
+            "name": "python-jwcrypto",
+            "nvr": "python-jwcrypto-0.5.0-1.module+el8.1.0+4107+4a66eb87",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 959051,
+            "build_id": 959051,
+            "version": "1.0.0",
+            "release": "9.module+el8.1.0+4107+4a66eb87",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-08-30 08:45:05.456528",
+            "start_time": "2019-08-30 08:43:31.570198",
+            "task_id": 23245841,
+            "creation_event_id": 26065814,
+            "creation_time": "2019-08-30 08:43:31.570198",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 16872,
+            "package_name": "pyusb",
+            "name": "pyusb",
+            "nvr": "pyusb-1.0.0-9.module+el8.1.0+4107+4a66eb87",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 959042,
+            "build_id": 959042,
+            "version": "1.4.14",
+            "release": "1.module+el8.1.0+4107+4a66eb87",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-08-30 08:30:44.929465",
+            "start_time": "2019-08-30 08:26:10.146887",
+            "task_id": 23245684,
+            "creation_event_id": 26065672,
+            "creation_time": "2019-08-30 08:26:10.146887",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 47997,
+            "package_name": "opendnssec",
+            "name": "opendnssec",
+            "nvr": "opendnssec-1.4.14-1.module+el8.1.0+4107+4a66eb87",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 1139326,
+            "build_id": 1139326,
+            "version": "4.8.4",
+            "release": "7.module+el8.2.0+6047+59605870",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2020-03-18 16:41:10.205454",
+            "start_time": "2020-03-18 16:31:40.883073",
+            "task_id": 27330869,
+            "creation_event_id": 30176561,
+            "creation_time": "2020-03-18 16:31:40.883073",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 4384,
+            "package_name": "ipa",
+            "name": "ipa",
+            "nvr": "ipa-4.8.4-7.module+el8.2.0+6047+59605870",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 1022957,
+            "build_id": 1022957,
+            "version": "11.2",
+            "release": "3.module+el8.2.0+4945+d8a939b5",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-11-28 08:45:15.174888",
+            "start_time": "2019-11-28 08:41:05.791483",
+            "task_id": 25009845,
+            "creation_event_id": 27592282,
+            "creation_time": "2019-11-28 08:41:05.791483",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 12568,
+            "package_name": "bind-dyndb-ldap",
+            "name": "bind-dyndb-ldap",
+            "nvr": "bind-dyndb-ldap-11.2-3.module+el8.2.0+4945+d8a939b5",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 1093586,
+            "build_id": 1093586,
+            "version": "2.4.0",
+            "release": "4.module+el8.2.0+5780+11c8542f",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2020-02-17 19:50:24.871320",
+            "start_time": "2020-02-17 19:42:31.001861",
+            "task_id": 26575317,
+            "creation_event_id": 29360880,
+            "creation_time": "2020-02-17 19:42:31.001861",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 48016,
+            "package_name": "softhsm",
+            "name": "softhsm",
+            "nvr": "softhsm-2.4.0-4.module+el8.2.0+5780+11c8542f",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 959041,
+            "build_id": 959041,
+            "version": "5.1",
+            "release": "12.module+el8.1.0+4107+4a66eb87",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-08-30 08:26:53.234912",
+            "start_time": "2019-08-30 08:26:07.970261",
+            "task_id": 23245686,
+            "creation_event_id": 26065671,
+            "creation_time": "2019-08-30 08:26:07.970261",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 48015,
+            "package_name": "python-qrcode",
+            "name": "python-qrcode",
+            "nvr": "python-qrcode-5.1-12.module+el8.1.0+4107+4a66eb87",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 61343,
+            "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+            "id": 959046,
+            "build_id": 959046,
+            "version": "0.56.3",
+            "release": "2.module+el8.1.0+4107+4a66eb87",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-08-30 08:39:58.938737",
+            "start_time": "2019-08-30 08:28:34.912162",
+            "task_id": 23245688,
+            "creation_event_id": 26065705,
+            "creation_time": "2019-08-30 08:28:34.912162",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 9749,
+            "package_name": "slapi-nis",
+            "name": "slapi-nis",
+            "nvr": "slapi-nis-0.56.3-2.module+el8.1.0+4107+4a66eb87",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 22929,
+            "tag_name": "module-golang-ecosystem-1.0-8010020190610193038-ccff3eb7",
+            "id": 909543,
+            "build_id": 909543,
+            "version": "1.0.7",
+            "release": "13.module+el8.1.0+3342+b2bcedec",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-10 19:44:24.912517",
+            "start_time": "2019-06-10 19:40:37.722776",
+            "task_id": 22093565,
+            "creation_event_id": 25060641,
+            "creation_time": "2019-06-10 19:40:37.722776",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 49920,
+            "package_name": "golang-github-cpuguy83-go-md2man",
+            "name": "golang-github-cpuguy83-go-md2man",
+            "nvr": "golang-github-cpuguy83-go-md2man-1.0.7-13.module+el8.1.0+3342+b2bcedec",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 1144584,
+            "build_id": 1144584,
+            "version": "3.0.26",
+            "release": "3.module+el8.2.0+5723+4574fbff",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2020-03-23 16:49:22.533970",
+            "start_time": "2020-03-23 16:47:47.187681",
+            "task_id": 27427014,
+            "creation_event_id": 30246146,
+            "creation_time": "2020-03-23 16:47:47.187681",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 13085,
+            "package_name": "resteasy",
+            "name": "resteasy",
+            "nvr": "resteasy-3.0.26-3.module+el8.2.0+5723+4574fbff",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 941248,
+            "build_id": 941248,
+            "version": "2.9.9",
+            "release": "1.module+el8.1.0+3832+9784644d",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-07-31 21:56:52.799032",
+            "start_time": "2019-07-31 21:52:57.339380",
+            "task_id": 22859408,
+            "creation_event_id": 25753876,
+            "creation_time": "2019-07-31 21:52:57.339380",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 45351,
+            "package_name": "jackson-jaxrs-providers",
+            "name": "jackson-jaxrs-providers",
+            "nvr": "jackson-jaxrs-providers-2.9.9-1.module+el8.1.0+3832+9784644d",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910869,
+            "build_id": 910869,
+            "version": "2.7.6",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 17:43:12.036872",
+            "start_time": "2019-06-12 17:41:41.564940",
+            "task_id": 22125211,
+            "creation_event_id": 25088144,
+            "creation_time": "2019-06-12 17:41:41.564940",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 45352,
+            "package_name": "jackson-module-jaxb-annotations",
+            "name": "jackson-module-jaxb-annotations",
+            "nvr": "jackson-module-jaxb-annotations-2.7.6-4.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 1028087,
+            "build_id": 1028087,
+            "version": "2.10.0",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-12-04 23:02:55.539209",
+            "start_time": "2019-12-04 22:59:50.165698",
+            "task_id": 25162114,
+            "creation_event_id": 27708627,
+            "creation_time": "2019-12-04 22:59:50.165698",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 43280,
+            "package_name": "jackson-databind",
+            "name": "jackson-databind",
+            "nvr": "jackson-databind-2.10.0-1.module+el8.2.0+5059+3eb3af25",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 1028078,
+            "build_id": 1028078,
+            "version": "2.10.0",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-12-04 22:54:09.385299",
+            "start_time": "2019-12-04 22:46:23.987102",
+            "task_id": 25162058,
+            "creation_event_id": 27708569,
+            "creation_time": "2019-12-04 22:46:23.987102",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 43278,
+            "package_name": "jackson-annotations",
+            "name": "jackson-annotations",
+            "nvr": "jackson-annotations-2.10.0-1.module+el8.2.0+5059+3eb3af25",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 1028074,
+            "build_id": 1028074,
+            "version": "2.10.0",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-12-04 22:40:36.462594",
+            "start_time": "2019-12-04 22:33:13.006789",
+            "task_id": 25161968,
+            "creation_event_id": 27708521,
+            "creation_time": "2019-12-04 22:33:13.006789",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 43279,
+            "package_name": "jackson-core",
+            "name": "jackson-core",
+            "nvr": "jackson-core-2.10.0-1.module+el8.2.0+5059+3eb3af25",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 1028067,
+            "build_id": 1028067,
+            "version": "2.10.0",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-12-04 22:19:26.978961",
+            "start_time": "2019-12-04 22:15:59.673943",
+            "task_id": 25161580,
+            "creation_event_id": 27708363,
+            "creation_time": "2019-12-04 22:15:59.673943",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 68020,
+            "package_name": "jackson-bom",
+            "name": "jackson-bom",
+            "nvr": "jackson-bom-2.10.0-1.module+el8.2.0+5059+3eb3af25",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 1028063,
+            "build_id": 1028063,
+            "version": "2.10",
+            "release": "1.module+el8.2.0+5059+3eb3af25",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-12-04 22:08:12.115745",
+            "start_time": "2019-12-04 22:04:11.784565",
+            "task_id": 25161418,
+            "creation_event_id": 27708221,
+            "creation_time": "2019-12-04 22:04:11.784565",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 50635,
+            "package_name": "jackson-parent",
+            "name": "jackson-parent",
+            "nvr": "jackson-parent-2.10-1.module+el8.2.0+5059+3eb3af25",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910844,
+            "build_id": 910844,
+            "version": "2.2.11",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:55:09.958186",
+            "start_time": "2019-06-12 16:52:08.783199",
+            "task_id": 22124769,
+            "creation_event_id": 25087838,
+            "creation_time": "2019-06-12 16:52:08.783199",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 9726,
+            "package_name": "glassfish-jaxb",
+            "name": "glassfish-jaxb",
+            "nvr": "glassfish-jaxb-2.2.11-11.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910842,
+            "build_id": 910842,
+            "version": "1.2.13",
+            "release": "9.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:48:58.888641",
+            "start_time": "2019-06-12 16:42:56.398154",
+            "task_id": 22124569,
+            "creation_event_id": 25087790,
+            "creation_time": "2019-06-12 16:42:56.398154",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 37969,
+            "package_name": "glassfish-fastinfoset",
+            "name": "glassfish-fastinfoset",
+            "nvr": "glassfish-fastinfoset-1.2.13-9.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 1144557,
+            "build_id": 1144557,
+            "version": "1.5.4",
+            "release": "8.module+el8.2.0+5723+4574fbff",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2020-03-23 16:12:46.524009",
+            "start_time": "2020-03-23 16:11:11.780927",
+            "task_id": 27426620,
+            "creation_event_id": 30245857,
+            "creation_time": "2020-03-23 16:11:11.780927",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 60048,
+            "package_name": "xmlstreambuffer",
+            "name": "xmlstreambuffer",
+            "nvr": "xmlstreambuffer-1.5.4-8.module+el8.2.0+5723+4574fbff",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910836,
+            "build_id": 910836,
+            "version": "0",
+            "release": "19.20110809svn.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:36:05.606122",
+            "start_time": "2019-06-12 16:34:29.942008",
+            "task_id": 22124434,
+            "creation_event_id": 25087679,
+            "creation_time": "2019-06-12 16:34:29.942008",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 37983,
+            "package_name": "xsom",
+            "name": "xsom",
+            "nvr": "xsom-0-19.20110809svn.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 1144552,
+            "build_id": 1144552,
+            "version": "1.7.7",
+            "release": "8.module+el8.2.0+5723+4574fbff",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2020-03-23 16:07:17.200775",
+            "start_time": "2020-03-23 16:05:41.101688",
+            "task_id": 27426549,
+            "creation_event_id": 30245800,
+            "creation_time": "2020-03-23 16:05:41.101688",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 12467,
+            "package_name": "stax-ex",
+            "name": "stax-ex",
+            "nvr": "stax-ex-1.7.7-8.module+el8.2.0+5723+4574fbff",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910827,
+            "build_id": 910827,
+            "version": "1.12",
+            "release": "14.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:28:53.545249",
+            "start_time": "2019-06-12 16:26:36.261882",
+            "task_id": 22124373,
+            "creation_event_id": 25087563,
+            "creation_time": "2019-06-12 16:26:36.261882",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 34342,
+            "package_name": "relaxngcc",
+            "name": "relaxngcc",
+            "nvr": "relaxngcc-1.12-14.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910821,
+            "build_id": 910821,
+            "version": "2.7.1",
+            "release": "38.module+el8.1.0+3366+6dfb954c",
+            "epoch": 0,
+            "state": 1,
+            "completion_time": "2019-06-12 16:21:24.143262",
+            "start_time": "2019-06-12 16:19:01.398195",
+            "task_id": 22124283,
+            "creation_event_id": 25087483,
+            "creation_time": "2019-06-12 16:19:01.398195",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 1100,
+            "package_name": "xalan-j2",
+            "name": "xalan-j2",
+            "nvr": "xalan-j2-2.7.1-38.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910820,
+            "build_id": 910820,
+            "version": "2013.6.1",
+            "release": "11.module+el8.1.0+3366+6dfb954c",
+            "epoch": 1,
+            "state": 1,
+            "completion_time": "2019-06-12 16:22:38.206178",
+            "start_time": "2019-06-12 16:18:51.956217",
+            "task_id": 22124282,
+            "creation_event_id": 25087478,
+            "creation_time": "2019-06-12 16:18:51.956217",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 2199,
+            "package_name": "msv",
+            "name": "msv",
+            "nvr": "msv-2013.6.1-11.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910795,
+            "build_id": 910795,
+            "version": "2011.1",
+            "release": "7.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:04:45.263988",
+            "start_time": "2019-06-12 16:02:22.213666",
+            "task_id": 22123719,
+            "creation_event_id": 25087217,
+            "creation_time": "2019-06-12 16:02:22.213666",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 2686,
+            "package_name": "relaxngDatatype",
+            "name": "relaxngDatatype",
+            "nvr": "relaxngDatatype-2011.1-7.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910793,
+            "build_id": 910793,
+            "version": "1.4.01",
+            "release": "25.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:05:54.069829",
+            "start_time": "2019-06-12 16:01:57.296925",
+            "task_id": 22123699,
+            "creation_event_id": 25087188,
+            "creation_time": "2019-06-12 16:01:57.296925",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 3720,
+            "package_name": "xml-commons-apis",
+            "name": "xml-commons-apis",
+            "nvr": "xml-commons-apis-1.4.01-25.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910800,
+            "build_id": 910800,
+            "version": "1.2",
+            "release": "26.module+el8.1.0+3366+6dfb954c",
+            "epoch": 0,
+            "state": 1,
+            "completion_time": "2019-06-12 16:04:14.369817",
+            "start_time": "2019-06-12 16:02:34.507234",
+            "task_id": 22123700,
+            "creation_event_id": 25087239,
+            "creation_time": "2019-06-12 16:02:34.507234",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 763,
+            "package_name": "xml-commons-resolver",
+            "name": "xml-commons-resolver",
+            "nvr": "xml-commons-resolver-1.2-26.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910798,
+            "build_id": 910798,
+            "version": "1.0",
+            "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:06:17.229810",
+            "start_time": "2019-06-12 16:02:22.601136",
+            "task_id": 22123701,
+            "creation_event_id": 25087220,
+            "creation_time": "2019-06-12 16:02:22.601136",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 759,
+            "package_name": "xml-stylebook",
+            "name": "xml-stylebook",
+            "nvr": "xml-stylebook-1.0-0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910811,
+            "build_id": 910811,
+            "version": "3.2.2",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:13:33.388340",
+            "start_time": "2019-06-12 16:07:24.210737",
+            "task_id": 22123703,
+            "creation_event_id": 25087331,
+            "creation_time": "2019-06-12 16:07:24.210737",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 33807,
+            "package_name": "apache-commons-collections",
+            "name": "apache-commons-collections",
+            "nvr": "apache-commons-collections-3.2.2-10.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910807,
+            "build_id": 910807,
+            "version": "2.6",
+            "release": "21.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:07:47.952306",
+            "start_time": "2019-06-12 16:06:10.260233",
+            "task_id": 22123704,
+            "creation_event_id": 25087303,
+            "creation_time": "2019-06-12 16:06:10.260233",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 33833,
+            "package_name": "apache-commons-lang",
+            "name": "apache-commons-lang",
+            "nvr": "apache-commons-lang-2.6-21.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910787,
+            "build_id": 910787,
+            "version": "26",
+            "release": "6.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:03:05.056755",
+            "start_time": "2019-06-12 16:01:31.536069",
+            "task_id": 22123706,
+            "creation_event_id": 25087166,
+            "creation_time": "2019-06-12 16:01:31.536069",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 43339,
+            "package_name": "fasterxml-oss-parent",
+            "name": "fasterxml-oss-parent",
+            "nvr": "fasterxml-oss-parent-26-6.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910797,
+            "build_id": 910797,
+            "version": "1.2.0",
+            "release": "16.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:05:31.235114",
+            "start_time": "2019-06-12 16:02:22.471697",
+            "task_id": 22123705,
+            "creation_event_id": 25087219,
+            "creation_time": "2019-06-12 16:02:22.471697",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 1468,
+            "package_name": "bea-stax",
+            "name": "bea-stax",
+            "nvr": "bea-stax-1.2.0-16.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910799,
+            "build_id": 910799,
+            "version": "2.2.12",
+            "release": "8.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:09:33.487726",
+            "start_time": "2019-06-12 16:02:24.543154",
+            "task_id": 22123708,
+            "creation_event_id": 25087223,
+            "creation_time": "2019-06-12 16:02:24.543154",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 37970,
+            "package_name": "glassfish-jaxb-api",
+            "name": "glassfish-jaxb-api",
+            "nvr": "glassfish-jaxb-api-2.2.12-8.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910809,
+            "build_id": 910809,
+            "version": "3.1",
+            "release": "28.module+el8.1.0+3366+6dfb954c",
+            "epoch": 1,
+            "state": 1,
+            "completion_time": "2019-06-12 16:09:21.928440",
+            "start_time": "2019-06-12 16:06:18.504802",
+            "task_id": 22123709,
+            "creation_event_id": 25087308,
+            "creation_time": "2019-06-12 16:06:18.504802",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 955,
+            "package_name": "jakarta-commons-httpclient",
+            "name": "jakarta-commons-httpclient",
+            "nvr": "jakarta-commons-httpclient-3.1-28.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910805,
+            "build_id": 910805,
+            "version": "9.0.7",
+            "release": "16.module+el8.1.0+3366+6dfb954c",
+            "epoch": 1,
+            "state": 1,
+            "completion_time": "2019-06-12 16:12:02.094701",
+            "start_time": "2019-06-12 16:05:03.209828",
+            "task_id": 22123713,
+            "creation_event_id": 25087291,
+            "creation_time": "2019-06-12 16:05:03.209828",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 71828,
+            "package_name": "pki-servlet-engine",
+            "name": "pki-servlet-engine",
+            "nvr": "pki-servlet-engine-9.0.7-16.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910790,
+            "build_id": 910790,
+            "version": "3.18.1",
+            "release": "8.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:04:40.971244",
+            "start_time": "2019-06-12 16:01:32.551323",
+            "task_id": 22123710,
+            "creation_event_id": 25087169,
+            "creation_time": "2019-06-12 16:01:32.551323",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 1717,
+            "package_name": "javassist",
+            "name": "javassist",
+            "nvr": "javassist-3.18.1-8.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910789,
+            "build_id": 910789,
+            "version": "1.0.1",
+            "release": "10.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:08:43.230692",
+            "start_time": "2019-06-12 16:01:32.429345",
+            "task_id": 22123716,
+            "creation_event_id": 25087168,
+            "creation_time": "2019-06-12 16:01:32.429345",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 12425,
+            "package_name": "python-nss",
+            "name": "python-nss",
+            "nvr": "python-nss-1.0.1-10.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910803,
+            "build_id": 910803,
+            "version": "2.11.0",
+            "release": "34.module+el8.1.0+3366+6dfb954c",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2019-06-12 16:14:39.929076",
+            "start_time": "2019-06-12 16:03:56.994817",
+            "task_id": 22123725,
+            "creation_event_id": 25087276,
+            "creation_time": "2019-06-12 16:03:56.994817",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 818,
+            "package_name": "xerces-j2",
+            "name": "xerces-j2",
+            "nvr": "xerces-j2-2.11.0-34.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910788,
+            "build_id": 910788,
+            "version": "1.7.25",
+            "release": "4.module+el8.1.0+3366+6dfb954c",
+            "epoch": 0,
+            "state": 1,
+            "completion_time": "2019-06-12 16:04:39.118435",
+            "start_time": "2019-06-12 16:01:32.421713",
+            "task_id": 22123721,
+            "creation_event_id": 25087167,
+            "creation_time": "2019-06-12 16:01:32.421713",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 3565,
+            "package_name": "slf4j",
+            "name": "slf4j",
+            "nvr": "slf4j-1.7.25-4.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 910796,
+            "build_id": 910796,
+            "version": "1.7",
+            "release": "24.module+el8.1.0+3366+6dfb954c",
+            "epoch": 0,
+            "state": 1,
+            "completion_time": "2019-06-12 16:10:57.401027",
+            "start_time": "2019-06-12 16:02:22.399510",
+            "task_id": 22123723,
+            "creation_event_id": 25087218,
+            "creation_time": "2019-06-12 16:02:22.399510",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 1190,
+            "package_name": "velocity",
+            "name": "velocity",
+            "nvr": "velocity-1.7-24.module+el8.1.0+3366+6dfb954c",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        },
+        {
+            "tag_id": 59718,
+            "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+            "id": 1144545,
+            "build_id": 1144545,
+            "version": "2.0.1",
+            "release": "6.module+el8.2.0+5723+4574fbff",
+            "epoch": null,
+            "state": 1,
+            "completion_time": "2020-03-23 15:54:44.540349",
+            "start_time": "2020-03-23 15:52:22.479426",
+            "task_id": 27426349,
+            "creation_event_id": 30245667,
+            "creation_time": "2020-03-23 15:52:22.479426",
+            "volume_id": 9,
+            "volume_name": "rhel-8",
+            "package_id": 59554,
+            "package_name": "glassfish-jax-rs-api",
+            "name": "glassfish-jax-rs-api",
+            "nvr": "glassfish-jax-rs-api-2.0.1-6.module+el8.2.0+5723+4574fbff",
+            "owner_id": 4066,
+            "owner_name": "mbs"
+        }
+    ]
+]
+
diff --git a/bld2repo/tests/test_data/pki_core_tags.json b/bld2repo/tests/test_data/pki_core_tags.json
new file mode 100644
index 0000000..07e93fd
--- /dev/null
+++ b/bld2repo/tests/test_data/pki_core_tags.json
@@ -0,0 +1,33 @@
+[
+    {
+        "arches": "aarch64 i686 ppc64le s390x x86_64",
+        "id": 80062,
+        "locked": false,
+        "maven_include_all": false,
+        "maven_support": false,
+        "name": "module-pki-core-10.6-8020020210330222148-bbc64e6e",
+        "perm": "module-tagger",
+        "perm_id": 64
+    },
+    {
+        "arches": "aarch64 i686 ppc64le s390x x86_64",
+        "id": 80063,
+        "locked": false,
+        "maven_include_all": false,
+        "maven_support": false,
+        "name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+        "perm": "module-tagger",
+        "perm_id": 64
+    },
+    {
+        "arches": "",
+        "id": 80123,
+        "locked": false,
+        "maven_include_all": false,
+        "maven_support": false,
+        "name": "RHSA-2021:69566-pending",
+        "perm": "trusted",
+        "perm_id": 6
+    }
+]
+
diff --git a/bld2repo/tests/utils.py b/bld2repo/tests/utils.py
new file mode 100644
index 0000000..3df45b0
--- /dev/null
+++ b/bld2repo/tests/utils.py
@@ -0,0 +1,13 @@
+import json
+import os
+
+
+def load_test_data(filename):
+    file_path = "test_data/{filename}.json".format(filename=filename)
+    dirname = os.path.dirname(os.path.abspath(__file__))
+    abs_file_path = os.path.join(dirname, file_path)
+    with open(abs_file_path, "r") as fp:
+        data = json.load(fp)
+
+    return data
+
diff --git a/createrepo_mod/createrepo_mod/__init__.py b/createrepo_mod/createrepo_mod/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/createrepo_mod/createrepo_mod.py b/createrepo_mod/createrepo_mod/createrepo_mod.py
similarity index 100%
rename from createrepo_mod/createrepo_mod.py
rename to createrepo_mod/createrepo_mod/createrepo_mod.py
diff --git a/createrepo_mod/requirements.txt b/createrepo_mod/requirements.txt
new file mode 100644
index 0000000..e69de29
diff --git a/createrepo_mod/setup.py b/createrepo_mod/setup.py
new file mode 100644
index 0000000..0f92990
--- /dev/null
+++ b/createrepo_mod/setup.py
@@ -0,0 +1,38 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+from setuptools import setup, find_packages
+
+with open("README.md", "r") as fh:
+    long_description = fh.read()
+
+with open('requirements.txt') as f:
+    requires = f.read().splitlines()
+
+setup(
+    name='createrepo_mod',
+    version='0.1',
+    packages=find_packages(),
+    url='https://github.com/rpm-software-management/modulemd-tools',
+    license='MIT',
+    author='Jakub Kadlcik',
+    author_email='frostyx@email.cz',
+    description=('A small wrapper around `createrepo_c` and `modifyrepo_c` '
+                 'to provide an easy tool for generating module repositories.'),
+    long_description=long_description,
+    long_description_content_type='text/markdown',
+    # createrepo_mod also requires libmodulemd not available on PyPI
+    # and must be installed separately.
+    # On Fedora, this is done with `dnf install python3-libmodulemd`
+    install_requires=requires,
+    entry_points={
+        'console_scripts': [
+            'createrepo_mod=createrepo_mod.createrepo_mod:main'],
+    },
+    classifiers=[
+        "Programming Language :: Python :: 3",
+        "License :: OSI Approved :: MIT License",
+        "Operating System :: POSIX :: Linux",
+    ],
+    include_package_data=True,
+)
diff --git a/createrepo_mod/test-requirements.txt b/createrepo_mod/test-requirements.txt
new file mode 100644
index 0000000..e079f8a
--- /dev/null
+++ b/createrepo_mod/test-requirements.txt
@@ -0,0 +1 @@
+pytest
diff --git a/createrepo_mod/tests/conftest.py b/createrepo_mod/tests/conftest.py
new file mode 100644
index 0000000..a5ba4c9
--- /dev/null
+++ b/createrepo_mod/tests/conftest.py
@@ -0,0 +1,7 @@
+import pytest
+
+
+@pytest.fixture(scope="session")
+def test_output_dir(tmpdir_factory):
+    test_output_dir = tmpdir_factory.mktemp("output")
+    return test_output_dir
diff --git a/createrepo_mod/tests/module_yamls/dummy.yaml b/createrepo_mod/tests/module_yamls/dummy.yaml
new file mode 100644
index 0000000..cf32ceb
--- /dev/null
+++ b/createrepo_mod/tests/module_yamls/dummy.yaml
@@ -0,0 +1,40 @@
+---
+document: modulemd-defaults
+version: 1
+data:
+  module: dummy
+  stream: rolling
+  profiles:
+    rolling: [everything]
+...
+---
+document: modulemd
+version: 2
+data:
+  name: dummy
+  stream: rolling
+  version: 1
+  context: abcdef12
+  summary: <auto-generated module summary>
+  description: >-
+    <auto-generated module description>
+  license:
+    module:
+    - MIT
+    content:
+    - <FILL THIS IN>
+  profiles:
+    everything:
+      rpms:
+      - python-django-bash-completion
+  api:
+    rpms:
+    - python-django-bash-completion
+  components:
+    rpms:
+      python-django:
+        rationale: Present in the repository
+  artifacts:
+    rpms:
+    - python-django-bash-completion-0:3.0.10-3.fc33.noarch
+...
diff --git a/createrepo_mod/tests/test_createrepo_mod.py b/createrepo_mod/tests/test_createrepo_mod.py
new file mode 100644
index 0000000..2cb1fc8
--- /dev/null
+++ b/createrepo_mod/tests/test_createrepo_mod.py
@@ -0,0 +1,49 @@
+import glob
+import logging
+import os.path
+import shutil
+
+import pytest
+
+from createrepo_mod.createrepo_mod import (
+    run_createrepo, run_modifyrepo, find_module_yamls, dump_modules_yaml)
+
+
+logger = logging.getLogger(__name__)
+
+dirname = os.path.dirname(os.path.realpath(__file__))
+test_packages_dir = os.path.join(dirname, "packages")
+test_module_yamls_dir = os.path.join(dirname, "module_yamls")
+
+
+def test_run_createrepo(test_output_dir):
+    # I'd rather use shutil.copytree with dirs_exist_ok=True, but it requires Python 3.8+
+    for package in glob.glob(os.path.join(test_packages_dir, "*.rpm")):
+        shutil.copy(package, test_output_dir)
+    retval = run_createrepo([test_output_dir])
+    assert os.path.isdir(os.path.join(test_output_dir, "repodata"))
+    assert os.path.isfile(os.path.join(test_output_dir, "repodata", "repomd.xml"))
+    assert retval == 0
+
+
+def test_find_module_yamls():
+    assert len(find_module_yamls(test_module_yamls_dir)) > 0
+
+
+@pytest.mark.skipif(shutil.which("modulemd-merge") is None, reason="requires modulemd-merge")
+def test_dump_modules_yaml(test_output_dir):
+    dump_modules_yaml(test_output_dir, find_module_yamls(test_module_yamls_dir))
+    assert os.path.isfile(os.path.join(test_output_dir, "modules.yaml"))
+
+
+def test_run_modifyrepo(test_output_dir):
+    if not os.path.isfile(os.path.join(test_output_dir, "modules.yaml")):
+        logger.info("Seems like test_dump_modules_yaml was skipped. "
+                    "Creating modules.yaml from dummy.yaml.")
+        shutil.copy(os.path.join(test_module_yamls_dir, "dummy.yaml"),
+                    os.path.join(test_output_dir, "modules.yaml"))
+
+    assert os.path.isfile(os.path.join(test_output_dir, "modules.yaml"))
+    retval = run_modifyrepo(test_output_dir)
+    assert glob.glob(os.path.join(test_output_dir, "repodata", "*-modules.yaml.gz"))
+    assert retval == 0
diff --git a/dir2module/dir2module/dir2module.py b/dir2module/dir2module/dir2module.py
index 9902aec..6643a83 100755
--- a/dir2module/dir2module/dir2module.py
+++ b/dir2module/dir2module/dir2module.py
@@ -20,13 +20,13 @@ gi.require_version("Modulemd", "2.0")
 from gi.repository import Modulemd  # noqa: E402
 
 
-class Module(object):
+class ModuleBase:
     """
-    Provide a high-level interface for representing modules and yaml generation
-    based on their values.
+    Base class for modulemd things
     """
+
     def __init__(self, name, stream, version, context, arch, summary,
-                 description, module_license, licenses, package_nevras, requires):
+                 description, module_license, licenses, packages, requires):
         self.name = name
         self.stream = stream
         self.version = version
@@ -36,18 +36,69 @@ class Module(object):
         self.description = description
         self.module_license = module_license
         self.licenses = licenses
-        self.package_nevras = package_nevras
+        self.packages = packages
         self.requires = requires
 
+    @property
+    def filename_format(self):
+        """
+        String format for the modulemd filename. It can contain the following
+        variables:
+        {N} - Module name
+        {S} - Module stream name
+        {V} - Module version
+        {C} - Module context
+        {A} - Module architecture
+        """
+        raise NotImplementedError
+
+    def dumps(self):
+        """
+        Generate YAML based on input parameters and return it as a string
+        """
+        raise NotImplementedError
+
     @property
     def filename(self):
         """
         Generate filename for a module yaml
         """
-        return "{N}:{S}:{V}:{C}:{A}.modulemd.yaml".format(
+        return self.filename_format.format(
             N=self.name, S=self.stream, V=self.version,
             C=self.context, A=self.arch)
 
+    def dump(self):
+        """
+        Generate modulemd yaml based on input parameters write it into file
+        """
+        with open(self.filename, "w") as moduleyaml:
+            moduleyaml.write(self.dumps())
+
+    @property
+    def package_names(self):
+        """
+        Return the list of unique package names within this module
+        """
+        return {package.header.name for package in self.packages}
+
+    @property
+    def package_nevras(self):
+        """
+        Return the list of unique package NEVRAs within this module
+        """
+        return {package.nevra for package in self.packages}
+
+
+class Module(ModuleBase):
+    """
+    Provide a high-level interface for representing modules and yaml generation
+    based on their values.
+    """
+
+    @property
+    def filename_format(self):
+        return "{N}:{S}:{V}:{C}:{A}.modulemd.yaml"
+
     def dumps(self):
         """
         Generate modulemd yaml based on input parameters and return it as a string
@@ -70,16 +121,37 @@ class Module(object):
             dependencies.add_runtime_stream(depname, depstream)
         mod_stream.add_dependencies(dependencies)
 
+        profile = Modulemd.Profile.new("common")
+        for pkgname in self.package_names:
+            profile.add_rpm(pkgname)
+        mod_stream.add_profile(profile)
+
         index = Modulemd.ModuleIndex.new()
         index.add_module_stream(mod_stream)
         return index.dump_to_string()
 
-    def dump(self):
+
+class ModuleDefaults(ModuleBase):
+    """
+    Provide a high-level interface for representing modulemd defaults files
+    """
+
+    @property
+    def filename_format(self):
+        return "{N}:{S}:{V}:{C}:{A}.modulemd-defaults.yaml"
+
+    def dumps(self):
         """
-        Generate modulemd yaml based on input parameters write it into file
+        Generate modulemd_defaults yaml based on input parameters and return it
+        as a string
         """
-        with open(self.filename, "w") as moduleyaml:
-            moduleyaml.write(self.dumps())
+        mod_defaults = Modulemd.DefaultsV1.new(self.name)
+        mod_defaults.set_default_stream(self.stream)
+        mod_defaults.add_default_profile_for_stream(self.stream, "common")
+
+        index = Modulemd.ModuleIndex.new()
+        index.add_defaults(mod_defaults)
+        return index.dump_to_string()
 
 
 class Package(object):
@@ -220,7 +292,6 @@ def main():
 
     packages = [Package(package) for package in packages]
     licenses = {package.license for package in packages}
-    nevras = {package.nevra for package in packages}
 
     requires = parse_dependencies(args.requires)
     description = args.description \
@@ -238,8 +309,10 @@ def main():
         raise RuntimeError("All packages need to contain the `modularitylabel` header. "
                            "To suppress this constraint, use `--force` parameter")
 
-    module = Module(name, stream, version, context, arch, args.summary,
-                    description, args.license, licenses, nevras, requires)
+    modargs = [name, stream, version, context, arch, args.summary, description,
+               args.license, licenses, packages, requires]
+    module = Module(*modargs)
+    module_defaults = ModuleDefaults(*modargs)
 
     if args.stdout:
         print(module.dumps())
@@ -247,6 +320,9 @@ def main():
         module.dump()
         print("Created {0}".format(module.filename))
 
+        module_defaults.dump()
+        print("Created {0}".format(module_defaults.filename))
+
 
 if __name__ == "__main__":
     try:
diff --git a/dir2module/tests/conftest.py b/dir2module/tests/conftest.py
index 9309b44..c6956cb 100644
--- a/dir2module/tests/conftest.py
+++ b/dir2module/tests/conftest.py
@@ -15,7 +15,7 @@ def dummy_module():
         'description': 'One dummy module for your tests',
         'module_license': 'No License',
         'licenses': [],
-        'package_nevras': [],
+        'packages': [],
         'requires': {}
     }
 
diff --git a/man/bld2repo.1 b/man/bld2repo.1
new file mode 100644
index 0000000..ceb158b
--- /dev/null
+++ b/man/bld2repo.1
@@ -0,0 +1,41 @@
+.TH bld2repo "1" Manual
+.SH NAME
+bld2repo
+.SH SYNOPSIS
+.B bld2repo
+[-h] -b BUILD_ID [-d RESULT_DIR] [-a ARCH] [-k KOJI_HOST] [-s KOJI_STORAGE_HOST]
+.SH DESCRIPTION
+When provided with a build id it will download all buildrequired RPMsof a
+modular koji build into the provided directory and create a repository out of
+it.
+.SH OPTIONS
+
+.TP
+\fB\-b\fR \fI\,BUILD_ID\/\fR, \fB\-\-build\-id\fR \fI\,BUILD_ID\/\fR
+ID of a koji build.
+
+.TP
+\fB\-d\fR \fI\,RESULT_DIR\/\fR, \fB\-\-result\-dir\fR \fI\,RESULT_DIR\/\fR
+Directory where the RPMs are downloaded.
+
+.TP
+\fB\-a\fR \fI\,ARCH\/\fR, \fB\-\-arch\fR \fI\,ARCH\/\fR
+For which architecture the RPMs should be downloaded. The 'noarch' is included
+automatically.
+
+.TP
+\fB\-k\fR \fI\,KOJI_HOST\/\fR, \fB\-\-koji\-host\fR \fI\,KOJI_HOST\/\fR
+Koji host base url
+
+.TP
+\fB\-s\fR \fI\,KOJI_STORAGE_HOST\/\fR, \fB\-\-koji\-storage\-host\fR \fI\,KOJI_STORAGE_HOST\/\fR
+Koji storage storage host base url. Server where the RPMs are stored. Required
+to be used together with `\-\-koji\-host`.
+
+.SH AUTHORS
+.B bld2repo
+was written by Martin Čurlej <mcurlej@redhat.com>.
+.SH DISTRIBUTION
+The latest version of bld2repo may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/createrepo_mod.1 b/man/createrepo_mod.1
new file mode 100644
index 0000000..9acdd7d
--- /dev/null
+++ b/man/createrepo_mod.1
@@ -0,0 +1,21 @@
+.TH createrepo_mod "1" Manual
+.SH NAME
+createrepo_mod
+.SH SYNOPSIS
+.B createrepo_mod
+[-h] directory_to_index
+.SH DESCRIPTION
+A small wrapper around createrepo_c and modifyrepo_c toprovide an easy tool
+for generating module repositories
+.SH OPTIONS
+.TP
+\fBdirectory_to_index\fR
+Directory to index
+
+.SH AUTHORS
+.B createrepo_mod
+was written by Jakub Kadlčík <jkadlcik@redhat.com>.
+.SH DISTRIBUTION
+The latest version of createrepo_mod may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/dir2module.1 b/man/dir2module.1
new file mode 100644
index 0000000..728792e
--- /dev/null
+++ b/man/dir2module.1
@@ -0,0 +1,55 @@
+.TH dir2module "1" Manual
+.SH NAME
+dir2module
+.SH SYNOPSIS
+.B dir2module
+[-h] -m SUMMARY [-d DESCRIPTION] [-l LICENSE] [-r REQUIRES] [--force] [--stdout] (--dir DIR | --pkglist PKGLIST) nsvca
+.SH DESCRIPTION
+Recursively read RPMs from DIR or read them from specified pkglist.If any RPM
+is missing on unreadable, error out.Populate artifacts/rpms with RPM
+NEVRAs.Populate license/content with list of RPM licenses.Write
+N:S:V:C:A.modulemd.yaml in the current directory.Make sure the yaml is in
+modulemd v2 format.
+.SH OPTIONS
+.TP
+\fBnsvca\fR
+Module name, stream version, context and architecture in a N:S:V:C:A format
+
+.TP
+\fB\-m\fR \fI\,SUMMARY\/\fR, \fB\-\-summary\fR \fI\,SUMMARY\/\fR
+Module summary
+
+.TP
+\fB\-d\fR \fI\,DESCRIPTION\/\fR, \fB\-\-description\fR \fI\,DESCRIPTION\/\fR
+Module description
+
+.TP
+\fB\-l\fR \fI\,LICENSE\/\fR, \fB\-\-license\fR \fI\,LICENSE\/\fR
+Module license
+
+.TP
+\fB\-r\fR \fI\,REQUIRES\/\fR, \fB\-\-requires\fR \fI\,REQUIRES\/\fR
+Module runtime dependencies in a N:S format. For multiple dependencies, repeat
+this option
+
+.TP
+\fB\-\-force\fR
+Suppress all constraints and hope for the best
+
+.TP
+\fB\-\-stdout\fR
+By defult the output is saved in a file. Use this to suppress it and print to
+the STDOUT
+
+.TP
+\fB\-\-dir\fR \fI\,DIR\/\fR
+.TP
+\fB\-\-pkglist\fR \fI\,PKGLIST\/\fR
+
+.SH AUTHORS
+.B dir2module
+was written by Jakub Kadlčík <jkadlcik@redhat.com>.
+.SH DISTRIBUTION
+The latest version of dir2module may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/generate-manpages.sh b/man/generate-manpages.sh
index 73f38f8..abc0757 100755
--- a/man/generate-manpages.sh
+++ b/man/generate-manpages.sh
@@ -3,10 +3,14 @@
 HOMEPAGE="https://github.com/rpm-software-management/modulemd-tools"
 
 
-python3 repo2module/setup.py \
-    --command-packages=click_man.commands man_pages \
-    --target ./man \
-    &> /dev/null
+argparse-manpage \
+    --pyfile repo2module/repo2module/cli.py \
+    --function get_arg_parser \
+    --author "Stephen Gallagher" \
+    --author-email "sgallagh@redhat.com" \
+    --project-name "repo2module" \
+    --url HOMEPAGE \
+    > ./man/repo2module.1
 
 
 argparse-manpage \
@@ -20,7 +24,7 @@ argparse-manpage \
 
 
 argparse-manpage \
-    --pyfile createrepo_mod/createrepo_mod.py \
+    --pyfile createrepo_mod/createrepo_mod/createrepo_mod.py \
     --function get_arg_parser \
     --author "Jakub Kadlčík" \
     --author-email "jkadlcik@redhat.com" \
@@ -30,7 +34,7 @@ argparse-manpage \
 
 
 argparse-manpage \
-    --pyfile modulemd-merge/modulemd-merge.py \
+    --pyfile modulemd-merge/modulemd_merge/modulemd_merge.py \
     --function get_arg_parser \
     --author "Gerd v. Egidy" \
     --author-email "gerd.von.egidy@intra2net.com" \
@@ -47,3 +51,13 @@ argparse-manpage \
     --project-name "modulemd-generate-macros" \
     --url HOMEPAGE \
     > ./man/modulemd-generate-macros.1
+
+
+argparse-manpage \
+    --pyfile bld2repo/bld2repo/cli.py \
+    --function get_arg_parser \
+    --author "Martin Čurlej" \
+    --author-email "mcurlej@redhat.com" \
+    --project-name "bld2repo" \
+    --url HOMEPAGE \
+    > ./man/bld2repo.1
diff --git a/man/modulemd-generate-macros.1 b/man/modulemd-generate-macros.1
new file mode 100644
index 0000000..36a1e9a
--- /dev/null
+++ b/man/modulemd-generate-macros.1
@@ -0,0 +1,31 @@
+.TH modulemd-generate-macros "1" Manual
+.SH NAME
+modulemd-generate-macros
+.SH SYNOPSIS
+.B modulemd-generate-macros
+[-h] [--disttag DISTTAG] [--conflicts-from-file CONFLICTS_FROM_FILE] yaml
+.SH DESCRIPTION
+Generate `module\-build\-macros` SRPM package, which is a central piece for
+building modules. It should be present in the buildroot before any other
+module packages are submitted to be built.
+.SH OPTIONS
+.TP
+\fByaml\fR
+Path to modulemd YAML file
+
+.TP
+\fB\-\-disttag\fR \fI\,DISTTAG\/\fR
+Disttag
+
+.TP
+\fB\-\-conflicts\-from\-file\fR \fI\,CONFLICTS_FROM_FILE\/\fR
+Path to a file containing conflicts definitions and their reasoning. Content
+of this file gets simply pasted into the specfile
+
+.SH AUTHORS
+.B modulemd\-generate\-macros
+was written by Jakub Kadlčík <jkadlcik@redhat.com>.
+.SH DISTRIBUTION
+The latest version of modulemd\-generate\-macros may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/modulemd-merge.1 b/man/modulemd-merge.1
new file mode 100644
index 0000000..f2e89e3
--- /dev/null
+++ b/man/modulemd-merge.1
@@ -0,0 +1,43 @@
+.TH modulemd-merge "1" Manual
+.SH NAME
+modulemd-merge
+.SH SYNOPSIS
+.B modulemd-merge
+[-h] [-v] [-d] [-i] [-O] input [input ...] output
+.SH DESCRIPTION
+Merge several modules.yaml files (rpm modularity metadata) into one.
+.SH OPTIONS
+.TP
+\fBinput\fR
+input filename(s) or directories.
+repomd.xml files are parsed and modules hrefs contained are merged.
+If a directory is given, it is searched for repodata/repomd.xml
+and repomd.xml
+
+.TP
+\fBoutput\fR
+YAML output filename
+
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+increase output verbosity
+
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+debug output verbosity
+
+.TP
+\fB\-i\fR, \fB\-\-ignore\-no\-input\fR
+ignore non\-existing input files
+
+.TP
+\fB\-O\fR, \fB\-\-to\-stdout\fR
+print YAML output to stdout
+
+.SH AUTHORS
+.B modulemd\-merge
+was written by Gerd v. Egidy <gerd.von.egidy@intra2net.com>.
+.SH DISTRIBUTION
+The latest version of modulemd\-merge may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/repo2module.1 b/man/repo2module.1
new file mode 100644
index 0000000..2a5c1e4
--- /dev/null
+++ b/man/repo2module.1
@@ -0,0 +1,38 @@
+.TH repo2module "1" Manual
+.SH NAME
+repo2module
+.SH SYNOPSIS
+.B repo2module
+[-h] [--debug | --nodebug] [-n MODULE_NAME] [-s MODULE_STREAM] [-v MODULE_VERSION] [-c MODULE_CONTEXT] [-O] repo_path [modules_yaml]
+.SH DESCRIPTION
+Generates modules.yaml file with a module, that provides all RPM packages that
+are available within a repository.
+.SH OPTIONS
+.TP
+\fBrepo_path\fR
+.TP
+\fBmodules_yaml\fR
+.TP
+\fB\-\-debug\fR
+.TP
+\fB\-\-nodebug\fR
+.TP
+\fB\-n\fR \fI\,MODULE_NAME\/\fR, \fB\-\-module\-name\fR \fI\,MODULE_NAME\/\fR
+Default is the current directory name
+
+.TP
+\fB\-s\fR \fI\,MODULE_STREAM\/\fR, \fB\-\-module\-stream\fR \fI\,MODULE_STREAM\/\fR
+.TP
+\fB\-v\fR \fI\,MODULE_VERSION\/\fR, \fB\-\-module\-version\fR \fI\,MODULE_VERSION\/\fR
+.TP
+\fB\-c\fR \fI\,MODULE_CONTEXT\/\fR, \fB\-\-module\-context\fR \fI\,MODULE_CONTEXT\/\fR
+.TP
+\fB\-O\fR, \fB\-\-to\-stdout\fR
+
+.SH AUTHORS
+.B repo2module
+was written by Stephen Gallagher <sgallagh@redhat.com>.
+.SH DISTRIBUTION
+The latest version of repo2module may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/modulemd-merge/modulemd_merge/__init__.py b/modulemd-merge/modulemd_merge/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/modulemd-merge/modulemd-merge.py b/modulemd-merge/modulemd_merge/modulemd_merge.py
similarity index 90%
rename from modulemd-merge/modulemd-merge.py
rename to modulemd-merge/modulemd_merge/modulemd_merge.py
index 65c5fad..89afb87 100755
--- a/modulemd-merge/modulemd-merge.py
+++ b/modulemd-merge/modulemd_merge/modulemd_merge.py
@@ -117,6 +117,8 @@ def get_arg_parser():
                         action="store_true")
     parser.add_argument("-i", "--ignore-no-input", help="ignore non-existing input files",
                         action="store_true")
+    parser.add_argument("-O", "--to-stdout", help="print YAML output to stdout",
+                        action="store_true")
 
     # positional arguments
     parser.add_argument("input", nargs="+", help="input filename(s) or directories.\n"
@@ -154,14 +156,21 @@ def main():
     logging.info("merged result: {} modulemds and {} modulemd-defaults".format(len(modnames),
                                                                                len(defstreams)))
 
-    logging.debug("Writing YAML to {}".format(args.output))
-    with open(args.output, 'w') as output:
-        if len(modnames) == 0 and len(defstreams) == 0:
-            # properly writing a completely empty yaml document
-            logging.debug("Writing an empty YAML")
-            output.write("")
-        else:
-            output.write(merged_index.dump_to_string())
+    if args.to_stdout:
+        output = sys.stdout
+    else:
+        logging.debug("Writing YAML to {}".format(args.output))
+        output = open(args.output, 'w')
+
+    if len(modnames) == 0 and len(defstreams) == 0:
+        # properly writing a completely empty yaml document
+        logging.debug("Writing an empty YAML")
+        output.write("")
+    else:
+        output.write(merged_index.dump_to_string())
+
+    if not args.to_stdout:
+        output.close()
 
 
 if __name__ == "__main__":
diff --git a/modulemd-merge/requirements.txt b/modulemd-merge/requirements.txt
new file mode 100644
index 0000000..e69de29
diff --git a/modulemd-merge/setup.py b/modulemd-merge/setup.py
new file mode 100644
index 0000000..6d88209
--- /dev/null
+++ b/modulemd-merge/setup.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+from setuptools import setup, find_packages
+
+with open("README.md", "r") as fh:
+    long_description = fh.read()
+
+with open('requirements.txt') as f:
+    requires = f.read().splitlines()
+
+setup(
+    name='modulemd-merge',
+    version='0.1',
+    packages=find_packages(),
+    url='https://github.com/rpm-software-management/modulemd-tools',
+    license='MIT',
+    author='Gerd v. Egidy',
+    author_email='gerd.von.egidy@intra2net.com',
+    description='Merge several modules.yaml files (rpm modularity metadata) into one',
+    long_description=long_description,
+    long_description_content_type='text/markdown',
+    # modulemd-merge also requires libmodulemd and createrepo_c which are
+    # not available on PyPI and must be installed separately.
+    # On Fedora, this is done with `dnf install python3-libmodulemd python3-createrepo_c`
+    install_requires=requires,
+    entry_points={
+        'console_scripts': [
+            'modulemd-merge=modulemd_merge.modulemd_merge:main'],
+    },
+    classifiers=[
+        "Programming Language :: Python :: 3",
+        "License :: OSI Approved :: MIT License",
+        "Operating System :: POSIX :: Linux",
+    ],
+    include_package_data=True,
+)
diff --git a/modulemd-merge/test-requirements.txt b/modulemd-merge/test-requirements.txt
new file mode 100644
index 0000000..3ea8172
--- /dev/null
+++ b/modulemd-merge/test-requirements.txt
@@ -0,0 +1,2 @@
+PyYAML
+pytest
diff --git a/modulemd-merge/tests/conftest.py b/modulemd-merge/tests/conftest.py
new file mode 100644
index 0000000..d79b4d0
--- /dev/null
+++ b/modulemd-merge/tests/conftest.py
@@ -0,0 +1,221 @@
+from textwrap import dedent
+
+import pytest
+
+
+@pytest.fixture
+def moduleB_yaml():
+    return dedent("""
+        ---
+        document: modulemd-defaults
+        version: 1
+        data:
+          module: bar
+          stream: stable
+          profiles:
+            stable: [everything]
+        ...
+        ---
+        document: modulemd
+        version: 2
+        data:
+          name: bar
+          stream: stable
+          version: 234
+          context: fc33
+          summary: Let's put some bar's summary here
+          description: >-
+            Let's put some bar's description here
+          license:
+            module:
+            - Bar License
+            content:
+            - A fresh bar license for your test suites
+          profiles:
+            everything:
+              rpms:
+              - bar-utils
+          api:
+            rpms:
+            - bar-utils
+          components:
+            rpms:
+              bar-utils:
+                rationale: Present in the repository
+          artifacts:
+            rpms:
+            - bar-utils-2:3-4.fc33.noarch
+        ...
+    """).lstrip()
+
+
+@pytest.fixture
+def two_modules_merged_yamls():
+    return dedent("""
+        ---
+        document: modulemd-defaults
+        version: 1
+        data:
+          module: bar
+          stream: stable
+          profiles:
+            stable: [everything]
+        ...
+        ---
+        document: modulemd
+        version: 2
+        data:
+          name: bar
+          stream: stable
+          version: 234
+          context: fc33
+          summary: Let's put some bar's summary here
+          description: >-
+            Let's put some bar's description here
+          license:
+            module:
+            - Bar License
+            content:
+            - A fresh bar license for your test suites
+          profiles:
+            everything:
+              rpms:
+              - bar-utils
+          api:
+            rpms:
+            - bar-utils
+          components:
+            rpms:
+              bar-utils:
+                rationale: Present in the repository
+          artifacts:
+            rpms:
+            - bar-utils-2:3-4.fc33.noarch
+        ...
+        ---
+        document: modulemd-defaults
+        version: 1
+        data:
+          module: foo
+          stream: devel
+          profiles:
+            devel: [everything]
+        ...
+        ---
+        document: modulemd
+        version: 2
+        data:
+          name: foo
+          stream: devel
+          version: 123
+          context: fc33
+          summary: Let's put some foo's summary here
+          description: >-
+            Let's put some foo's description here
+          license:
+            module:
+            - Foo License
+            content:
+            - A fresh foo license for your test suites
+          profiles:
+            everything:
+              rpms:
+              - foo-utils
+          api:
+            rpms:
+            - foo-utils
+          components:
+            rpms:
+              foo-utils:
+                rationale: Present in the repository
+          artifacts:
+            rpms:
+            - foo-utils-1:2-3.fc33.noarch
+        ...
+    """).lstrip()
+
+
+@pytest.fixture
+def module_with_repodata_dir():
+    return dedent("""
+        ---
+        document: modulemd-defaults
+        version: 1
+        data:
+          module: dummy
+          stream: rolling
+          profiles:
+            rolling: [everything]
+        ...
+        ---
+        document: modulemd
+        version: 2
+        data:
+          name: dummy
+          stream: rolling
+          version: 1
+          context: abcdef12
+          summary: <auto-generated module summary>
+          description: >-
+            <auto-generated module description>
+          license:
+            module:
+            - MIT
+            content:
+            - <FILL THIS IN>
+          profiles:
+            everything:
+              rpms:
+              - python-django-bash-completion
+          api:
+            rpms:
+            - python-django-bash-completion
+          components:
+            rpms:
+              python-django:
+                rationale: Present in the repository
+          artifacts:
+            rpms:
+            - python-django-bash-completion-0:3.0.10-3.fc33.noarch
+        ...
+        ---
+        document: modulemd-defaults
+        version: 1
+        data:
+          module: foo
+          stream: devel
+          profiles:
+            devel: [everything]
+        ...
+        ---
+        document: modulemd
+        version: 2
+        data:
+          name: foo
+          stream: devel
+          version: 123
+          context: fc33
+          summary: Let's put some foo's summary here
+          description: >-
+            Let's put some foo's description here
+          license:
+            module:
+            - Foo License
+            content:
+            - A fresh foo license for your test suites
+          profiles:
+            everything:
+              rpms:
+              - foo-utils
+          api:
+            rpms:
+            - foo-utils
+          components:
+            rpms:
+              foo-utils:
+                rationale: Present in the repository
+          artifacts:
+            rpms:
+            - foo-utils-1:2-3.fc33.noarch
+        ...
+    """).lstrip()
diff --git a/modulemd-merge/tests/test_modulemd_merge.py b/modulemd-merge/tests/test_modulemd_merge.py
new file mode 100644
index 0000000..25d7537
--- /dev/null
+++ b/modulemd-merge/tests/test_modulemd_merge.py
@@ -0,0 +1,86 @@
+import argparse
+import os.path
+from unittest.mock import patch
+
+import pytest
+import yaml
+
+from modulemd_merge import modulemd_merge
+
+dirname = os.path.dirname(os.path.realpath(__file__))
+test_data_dir = os.path.join(dirname, "testdata")
+test_repodata_dir = os.path.join(dirname, "testdata", "repodata")
+test_repomd_file = os.path.join(dirname, "testdata", "repodata", "repomd.xml")
+
+
+def _testrun_args(inputs, **kwargs):
+    args = {'verbose': True, 'debug': True, 'input': inputs, 'to_stdout': True,
+            'ignore_no_input': False}
+    args.update(kwargs)
+    return argparse.Namespace(**args)
+
+
+def test_modulemd_merge_loading():
+    assert modulemd_merge
+
+
+def test_modulemd_merge_two_yamls(capsys, two_modules_merged_yamls):
+
+    inputs = (os.path.join(test_data_dir, "moduleA.yaml"),
+              os.path.join(test_data_dir, "moduleB.yaml"))
+    with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs)):
+        modulemd_merge.main()
+
+    captured = capsys.readouterr()
+    assert [d for d in yaml.load_all(captured.out, Loader=yaml.SafeLoader)] == [
+        d for d in yaml.load_all(two_modules_merged_yamls, Loader=yaml.SafeLoader)]
+
+
+def test_modulemd_merge_two_yamls_first_missing(capsys):
+
+    inputs = (os.path.join(test_data_dir, "missing-file.yaml"),
+              os.path.join(test_data_dir, "moduleB.yaml"))
+    with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs)):
+        with pytest.raises(ValueError) as excinfo:
+            modulemd_merge.main()
+
+    assert f"input file {test_data_dir}/missing-file.yaml does not exist" in str(excinfo.value)
+
+
+def test_modulemd_merge_two_yamls_first_missing_ignore_no_input(capsys, moduleB_yaml):
+
+    inputs = (os.path.join(test_data_dir, "missing-file.yaml"),
+              os.path.join(test_data_dir, "moduleB.yaml"))
+    kwargs = {"ignore_no_input": True}
+    with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs, **kwargs)):
+        modulemd_merge.main()
+
+    captured = capsys.readouterr()
+    assert [d for d in yaml.load_all(captured.out, Loader=yaml.SafeLoader)] == [
+        d for d in yaml.load_all(moduleB_yaml, Loader=yaml.SafeLoader)]
+
+
+@pytest.mark.skip(reason="Requires binary files in the repo")
+def test_modulemd_merge_module_with_repodata_dir(capsys, module_with_repodata_dir):
+
+    inputs = (os.path.join(test_data_dir, "moduleA.yaml"),
+              test_repodata_dir)
+    with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs)):
+        modulemd_merge.main()
+
+    captured = capsys.readouterr()
+    assert [d for d in yaml.load_all(captured.out, Loader=yaml.SafeLoader)] == [
+        d for d in yaml.load_all(module_with_repodata_dir, Loader=yaml.SafeLoader)]
+
+
+@pytest.mark.skip(reason="Requires binary files in the repo")
+def test_modulemd_merge_module_with_repomd_file(capsys, module_with_repodata_dir):
+
+    inputs = (os.path.join(test_data_dir, "moduleA.yaml"),
+              test_repomd_file)
+    with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs)):
+        modulemd_merge.main()
+
+    captured = capsys.readouterr()
+    assert [d for d in yaml.load_all(captured.out, Loader=yaml.SafeLoader)] == [
+        d for d in yaml.load_all(module_with_repodata_dir, Loader=yaml.SafeLoader)]
diff --git a/modulemd-merge/tests/testdata/moduleA.yaml b/modulemd-merge/tests/testdata/moduleA.yaml
new file mode 100644
index 0000000..97c3806
--- /dev/null
+++ b/modulemd-merge/tests/testdata/moduleA.yaml
@@ -0,0 +1,40 @@
+---
+document: modulemd-defaults
+version: 1
+data:
+  module: foo
+  stream: devel
+  profiles:
+    devel: [everything]
+...
+---
+document: modulemd
+version: 2
+data:
+  name: foo
+  stream: devel
+  version: 123
+  context: fc33
+  summary: Let's put some foo's summary here
+  description: >-
+    Let's put some foo's description here
+  license:
+    module:
+    - Foo License
+    content:
+    - A fresh foo license for your test suites
+  profiles:
+    everything:
+      rpms:
+      - foo-utils
+  api:
+    rpms:
+    - foo-utils
+  components:
+    rpms:
+      foo-utils:
+        rationale: Present in the repository
+  artifacts:
+    rpms:
+    - foo-utils-1:2-3.fc33.noarch
+...
diff --git a/modulemd-merge/tests/testdata/moduleB.yaml b/modulemd-merge/tests/testdata/moduleB.yaml
new file mode 100644
index 0000000..f922b5e
--- /dev/null
+++ b/modulemd-merge/tests/testdata/moduleB.yaml
@@ -0,0 +1,40 @@
+---
+document: modulemd-defaults
+version: 1
+data:
+  module: bar
+  stream: stable
+  profiles:
+    stable: [everything]
+...
+---
+document: modulemd
+version: 2
+data:
+  name: bar
+  stream: stable
+  version: 234
+  context: fc33
+  summary: Let's put some bar's summary here
+  description: >-
+    Let's put some bar's description here
+  license:
+    module:
+    - Bar License
+    content:
+    - A fresh bar license for your test suites
+  profiles:
+    everything:
+      rpms:
+      - bar-utils
+  api:
+    rpms:
+    - bar-utils
+  components:
+    rpms:
+      bar-utils:
+        rationale: Present in the repository
+  artifacts:
+    rpms:
+    - bar-utils-2:3-4.fc33.noarch
+...
diff --git a/modulemd-tools.spec b/modulemd-tools.spec
index 1bf1f59..d8b65f6 100644
--- a/modulemd-tools.spec
+++ b/modulemd-tools.spec
@@ -1,6 +1,6 @@
 Name: modulemd-tools
 Version: 0.7
-Release: 1%{?dist}
+Release: 6%{?dist}
 Summary: Collection of tools for parsing and generating modulemd YAML files
 License: MIT
 BuildArch: noarch
@@ -9,21 +9,16 @@ URL: https://github.com/rpm-software-management/modulemd-tools
 Source0: https://github.com/rpm-software-management/modulemd-tools/archive/%{version}/%{name}-%{version}.tar.gz
 
 BuildRequires: createrepo_c
-BuildRequires: argparse-manpage
 BuildRequires: python3-devel
 BuildRequires: python3-setuptools
 BuildRequires: python3-libmodulemd >= 2.9.3
-BuildRequires: python3-click
-BuildRequires: python3-click-man
 BuildRequires: python3-dnf
 BuildRequires: python3-hawkey
 BuildRequires: python3-createrepo_c
 BuildRequires: python3-pyyaml
-BuildRequires: python3-parameterized
 BuildRequires: python3-pytest
 
 Requires: createrepo_c
-Requires: python3-click
 Requires: python3-dnf
 Requires: python3-hawkey
 Requires: python3-createrepo_c
@@ -52,6 +47,8 @@ modulemd-generate-macros - Generate module-build-macros SRPM package, which is
     a central piece for building modules. It should be present in the buildroot
     before any other module packages are submitted to be built.
 
+bld2repo - Simple tool for dowloading build required RPMs of a modular build from koji.
+
 
 %prep
 %setup -q
@@ -66,7 +63,17 @@ cd dir2module
 %py3_build
 cd ..
 
-PYTHONPATH=./modulemd_tools ./man/generate-manpages.sh
+cd createrepo_mod
+%py3_build
+cd ..
+
+cd modulemd-merge
+%py3_build
+cd ..
+
+cd modulemd_tools
+%py3_build
+cd ..
 
 
 %install
@@ -78,24 +85,46 @@ cd dir2module
 %py3_install
 cd ..
 
-cp createrepo_mod/createrepo_mod.py %{buildroot}%{_bindir}/createrepo_mod
-cp modulemd-merge/modulemd-merge.py %{buildroot}%{_bindir}/modulemd-merge
+cd createrepo_mod
+%py3_install
+cd ..
+
+cd modulemd-merge
+%py3_install
+cd ..
+
+cd modulemd_tools
+%py3_install
+cd ..
+
 cp modulemd-generate-macros/modulemd-generate-macros.py \
     %{buildroot}%{_bindir}/modulemd-generate-macros
 
-cp -r modulemd_tools/modulemd_tools %{buildroot}%{python3_sitelib}/modulemd_tools
-
 install -d %{buildroot}%{_mandir}/man1
 cp man/*.1 %{buildroot}%{_mandir}/man1/
 
 
 %check
+export PATH={buildroot}%{_bindir}:$PATH
+
 cd repo2module
-%{python3} -m pytest
+%{python3} -m pytest -vv
 cd ..
 
 cd dir2module
-%{python3} -m pytest
+%{python3} -m pytest -vv
+cd ..
+
+cd createrepo_mod
+%{python3} -m pytest -vv
+cd ..
+
+cd modulemd-merge
+%{python3} -m pytest -vv -s
+cd ..
+
+cd modulemd_tools
+%{python3} -m pytest -vv
 cd ..
 
 
@@ -106,21 +135,77 @@ cd ..
 %{python3_sitelib}/repo2module-*.egg-info/
 %{python3_sitelib}/dir2module
 %{python3_sitelib}/dir2module-*.egg-info/
+%{python3_sitelib}/createrepo_mod
+%{python3_sitelib}/createrepo_mod-*.egg-info/
+%{python3_sitelib}/modulemd_merge
+%{python3_sitelib}/modulemd_merge-*.egg-info/
+%{python3_sitelib}/modulemd_tools
+%{python3_sitelib}/modulemd_tools-*.egg-info/
 %{_bindir}/repo2module
 %{_bindir}/dir2module
 %{_bindir}/createrepo_mod
 %{_bindir}/modulemd-merge
 %{_bindir}/modulemd-generate-macros
-%{python3_sitelib}/modulemd_tools
 
 %{_mandir}/man1/repo2module.1*
 %{_mandir}/man1/dir2module.1*
 %{_mandir}/man1/createrepo_mod.1*
 %{_mandir}/man1/modulemd-merge.1*
 %{_mandir}/man1/modulemd-generate-macros.1.*
+%{_mandir}/man1/bld2repo.1.*
 
 
 %changelog
+* Fri Aug 27 2021 Jakub Kadlcik <jkadlcik@redhat.com> 0.7-6
+- Do not install bld2repo as RHEL8 doesn't have python3-koji
+  (jkadlcik@redhat.com)
+- Drop the Patch1 and make the change directly in this repository
+  (jkadlcik@redhat.com)
+- Use UpstreamBuilder instead of DistributionBuilder (jkadlcik@redhat.com)
+- Skip some tests because they require binary files (jkadlcik@redhat.com)
+
+* Thu Aug 26 2021 Jakub Kadlcik <jkadlcik@redhat.com> 0.7-5
+- Update to new upstream version
+
+* Mon Aug 23 2021 Jakub Kadlcik <frostyx@email.cz> 0.11-1
+- modulemd_tools: compatibility for upgrade_ext on EPEL8 (frostyx@email.cz)
+- modulemd_tools: compatibility for read_packager_string on EPEL8
+  (frostyx@email.cz)
+- dir2module: generate also profiles and modulemd-defaults file
+  (frostyx@email.cz)
+- modulemd_tools: use upgrade_ext instead of upgrade (frostyx@email.cz)
+- modulemd_tools: use read_packager_string instead of read_string
+  (frostyx@email.cz)
+- Add installation instructions (frostyx@email.cz)
+- bld2repo: do not create empty repos when --result-dir is used
+  (kdudka@redhat.com)
+- bld2repo: print status in a more intuitive format (kdudka@redhat.com)
+- tito: stop releasing for Fedora 32 (frostyx@email.cz)
+
+* Mon Jun 14 2021 Jakub Kadlcik <frostyx@email.cz> 0.10-1
+- Added bld2repo (mcurlej@redhat.com)
+
+* Fri Apr 09 2021 Jakub Kadlcik <frostyx@email.cz> 0.9-1
+- repo2module: drop python-click dependency (frostyx@email.cz)
+
+* Tue Apr 06 2021 Jakub Kadlcik <frostyx@email.cz> 0.8-1
+- modulemd_tools: drop python3-parameterized dependency (frostyx@email.cz)
+- Package modulemd_tools helper lib (fvalder@redhat.com)
+- Add modulemd-merge tests (fvalder@redhat.com)
+- Add createrepo_mod tests (fvalder@redhat.com)
+- Replace master in fedora releaser to rawhide (frostyx@email.cz)
+
+* Tue Mar 02 2021 Jakub Kadlčík <jkadlcik@redhat.com> - 0.7-4
+- Rebuild for 8.5.0
+
+* Thu Feb 11 2021 Jakub Kadlčík <jkadlcik@redhat.com> - 0.7-3
+- Bump spec to rebuild with gating enabled
+
+* Tue Feb 09 2021 Jakub Kadlčík <jkadlcik@redhat.com> - 0.7-2
+- Do not generate manpages on the fly
+- Drop python-parameterized dependency
+- Fix python3 macro for running tests
+
 * Tue Feb 09 2021 Jakub Kadlcik <frostyx@email.cz> 0.7-1
 - Generate manpages on the fly
 - Automated test builds incl. Docker/Travis
@@ -129,7 +214,7 @@ cd ..
 - Drop libmodulemd dependency in favor of python3-libmodulemd
 
 * Sun Nov 22 2020 Jakub Kadlcik <frostyx@email.cz> 0.6-1
-- Generate manpages for all tools in this repository 
+- Generate manpages for all tools in this repository
 - modulemd-generate-macros: add a tool for generating module-build-macros
 - modulemd_tools: add the first pieces of a python library (for internal usage only)
 
diff --git a/modulemd_tools/modulemd_tools/yaml.py b/modulemd_tools/modulemd_tools/yaml.py
index 43f314f..ec964f6 100644
--- a/modulemd_tools/modulemd_tools/yaml.py
+++ b/modulemd_tools/modulemd_tools/yaml.py
@@ -7,6 +7,7 @@ and all transformation functions are `str` -> `str`.
 import os
 import gi
 import yaml
+from distutils.version import StrictVersion
 
 gi.require_version("Modulemd", "2.0")
 from gi.repository import Modulemd  # noqa: E402
@@ -104,14 +105,9 @@ def update(mod_yaml, name=None, stream=None, version=None, context=None,
 
     """
     mod_stream = _yaml2stream(mod_yaml)
-
-    # AFAIK It is not possible to change name and stream of an existing module,
-    # so we need to workaround it by creating a new module with desired N:S and
-    # then update it from the previous yaml
     name = name or mod_stream.get_module_name()
     stream = stream or mod_stream.get_stream_name()
-    mod_stream = Modulemd.ModuleStreamV2.new(name, stream)
-    mod_stream = mod_stream.read_string(mod_yaml, True, name, stream)
+    mod_stream = _modulemd_read_packager_string(mod_yaml, name, stream)
 
     if version:
         mod_stream.set_version(version)
@@ -235,12 +231,12 @@ def upgrade(mod_yaml, version):
     if parsed["version"] > version:
         raise ValueError("Cannot downgrade modulemd version")
 
-    mod_stream = Modulemd.ModuleStream.read_string(
+    mod_stream = _modulemd_read_packager_string(
         mod_yaml,
-        True,
         parsed["data"].get("name", ""),
         parsed["data"].get("stream", ""))
-    mod_stream_upgraded = mod_stream.upgrade(version)
+
+    mod_stream_upgraded = _modulestream_upgrade_ext(mod_stream, version)
     return _stream2yaml(mod_stream_upgraded)
 
 
@@ -295,7 +291,7 @@ def _generate_filename(mod_yaml):
 
 def _yaml2stream(mod_yaml):
     try:
-        return Modulemd.ModuleStream.read_string(mod_yaml, True, None, None)
+        return _modulemd_read_packager_string(mod_yaml)
     except gi.repository.GLib.GError as ex:
         raise ValueError(ex.message)
 
@@ -307,3 +303,36 @@ def _stream2yaml(mod_stream):
         return idx.dump_to_string()
     except gi.repository.GLib.GError as ex:
         raise RuntimeError(ex.message)
+
+
+def _modulemd_read_packager_string(mod_yaml, name=None, stream=None):
+    """
+    For the time being we happen to be in a transition state when
+    `Modulemd.ModuleStream.read_string` is deprecated and throws warnings on
+    Fedora but we still use old libmodulemd (2.9.4) on RHEL8, which doesn't
+    provide its replacement in the form of `Modulemd.read_packager_string`.
+    """
+    if StrictVersion(Modulemd.get_version()) < StrictVersion("2.11"):
+        mod_stream = Modulemd.ModuleStreamV2.new(name, stream)
+        mod_stream = mod_stream.read_string(mod_yaml, True, name, stream)
+        return mod_stream
+
+    return Modulemd.read_packager_string(mod_yaml, name, stream)
+
+
+def _modulestream_upgrade_ext(mod_stream, version):
+    """
+    For the time being we happen to be in a transition state when
+    `Modulemd.ModuleStream.upgrade` is deprecated and throws warnings on
+    Fedora but we still use old libmodulemd (2.9.4) on RHEL8, which doesn't
+    provide its replacement in the form of `Modulemd.ModuleStream.upgrade_ext`.
+    """
+    if StrictVersion(Modulemd.get_version()) < StrictVersion("2.10"):
+        return mod_stream.upgrade(version)
+
+    mod_upgraded = mod_stream.upgrade_ext(version)
+    return mod_upgraded.get_stream_by_NSVCA(
+        mod_stream.get_stream_name(),
+        mod_stream.get_version(),
+        mod_stream.get_context(),
+        mod_stream.get_arch())
diff --git a/modulemd_tools/setup.py b/modulemd_tools/setup.py
new file mode 100644
index 0000000..ac179b4
--- /dev/null
+++ b/modulemd_tools/setup.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+from setuptools import setup, find_packages
+
+with open("README.md", "r") as fh:
+    long_description = fh.read()
+
+with open('requirements.txt') as f:
+    requires = f.read().splitlines()
+
+setup(
+    name='modulemd_tools',
+    version='0.1',
+    packages=find_packages(exclude=("tests",)),
+    url='https://github.com/rpm-software-management/modulemd-tools',
+    license='MIT',
+    author='Jakub Kadlcik',
+    author_email='frostyx@email.cz',
+    description='Helper lib for working with modulemd YAML definitions',
+    long_description=long_description,
+    long_description_content_type='text/markdown',
+    # dir2module also requires libmodulemd and libdnf not available on PyPI
+    # and must be installed separately.
+    # On Fedora, this is done with `dnf install python3-libmodulemd python3-dnf`
+    install_requires=requires,
+    classifiers=[
+        "Programming Language :: Python :: 3",
+        "License :: OSI Approved :: MIT License",
+        "Operating System :: POSIX :: Linux",
+    ],
+    include_package_data=True,
+)
diff --git a/modulemd_tools/tests/test_yaml.py b/modulemd_tools/tests/test_yaml.py
index e33e390..8090a2b 100644
--- a/modulemd_tools/tests/test_yaml.py
+++ b/modulemd_tools/tests/test_yaml.py
@@ -1,7 +1,6 @@
 import os
 import unittest
 from unittest import mock
-from parameterized import parameterized
 import yaml
 from distutils.version import LooseVersion
 from modulemd_tools.yaml import (is_valid, validate, create, update, dump,
@@ -327,11 +326,11 @@ class TestYaml(unittest.TestCase):
         self.assertIn("Cannot downgrade modulemd version",
                       str(context.exception))
 
-    @parameterized.expand([[None], [""], ["foo: bar"]])
-    def test_upgrade_empty_yaml(self, mod_yaml):
-        with self.assertRaises(ValueError) as context:
-            upgrade(mod_yaml, 2)
-        self.assertIn("Missing modulemd version", str(context.exception))
+    def test_upgrade_empty_yaml(self):
+        for mod_yaml in [None, "", "foo: bar"]:
+            with self.assertRaises(ValueError) as context:
+                upgrade(mod_yaml, 2)
+            self.assertIn("Missing modulemd version", str(context.exception))
 
     def test_upgrade_unexpected_version(self):
         # Neither current modulemd version cannot be unexpected
diff --git a/repo2module/repo2module/cli.py b/repo2module/repo2module/cli.py
index c91e08f..1d4ce27 100644
--- a/repo2module/repo2module/cli.py
+++ b/repo2module/repo2module/cli.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-import click
+import argparse
 import createrepo_c as cr
 import gi
 import logging
@@ -71,48 +71,49 @@ def get_source_packages(packages):
 
     return source_packages
 
-
-@click.command(help=("Generates modules.yaml file with a module, "
-                     "that provides all RPM packages that are available "
-                     "within a repository."))
-@click.option('-d', '--debug/--nodebug', default=False)
-@click.option('-n', '--module-name',
-              default=lambda: os.path.basename(os.environ.get('PWD')),
-              show_default='Current directory name')
-@click.option('-s', '--module-stream',
-              default='rolling',
-              show_default=True)
-@click.option('-v', '--module-version',
-              default=1,
-              show_default=True)
-@click.option('-c', '--module-context',
-              default='abcdef12',
-              show_default=True)
-@click.option('-O', '--to-stdout', default=False, is_flag=True)
-@click.argument('repo_path', type=click.Path(exists=True))
-@click.argument('modules_yaml', default='modules.yaml')
-def cli(debug,
-        module_name,
-        module_stream,
-        module_version,
-        module_context,
-        to_stdout,
-        repo_path,
-        modules_yaml):
-
-    if debug:
+def get_arg_parser():
+    description = ("Generates modules.yaml file with a module, "
+                   "that provides all RPM packages that are available "
+                   "within a repository.")
+    parser = argparse.ArgumentParser("repo2module", description=description)
+
+    debug = parser.add_mutually_exclusive_group()
+    debug.add_argument("--debug", action="store_true", default=False)
+    debug.add_argument("--nodebug", action="store_false", dest="debug")
+
+    parser.add_argument("-n", "--module-name",
+                        default=os.path.basename(os.environ.get("PWD")),
+                        help="Default is the current directory name")
+    parser.add_argument("-s", "--module-stream", default="rolling")
+    parser.add_argument("-v", "--module-version", default=1, type=int)
+    parser.add_argument("-c", "--module-context", default="abcdef12")
+    parser.add_argument("-O", "--to-stdout", default=False, action="store_true")
+    parser.add_argument("repo_path")
+    parser.add_argument("modules_yaml", default="modules.yaml", nargs="?")
+    return parser
+
+
+def cli():
+    parser = get_arg_parser()
+    args = parser.parse_args()
+
+    if args.debug:
         logging.basicConfig(level=logging.DEBUG)
 
-    abs_repo_path = os.path.abspath(repo_path)
-    if not to_stdout:
-        abs_modules_yaml = os.path.abspath(modules_yaml)
+    if not os.path.isdir(args.repo_path):
+        logging.error("No such directory: {0}".format(args.repo_path))
+        exit(1)
+
+    abs_repo_path = os.path.abspath(args.repo_path)
+    if not args.to_stdout:
+        abs_modules_yaml = os.path.abspath(args.modules_yaml)
 
     packages = parse_repodata(abs_repo_path)
 
     # Create module stream framework
-    stream = Modulemd.ModuleStreamV2.new(module_name, module_stream)
-    stream.set_version(module_version)
-    stream.set_context(module_context)
+    stream = Modulemd.ModuleStreamV2.new(args.module_name, args.module_stream)
+    stream.set_version(args.module_version)
+    stream.set_context(args.module_context)
     stream.set_summary('<auto-generated module summary>')
     stream.set_description('<auto-generated module description>')
     stream.add_module_license("MIT")
@@ -135,15 +136,15 @@ def cli(debug,
     stream.add_profile(common_profile)
 
     # Add defaults for this module
-    defaults = Modulemd.DefaultsV1.new(module_name)
-    defaults.set_default_stream(module_stream)
-    defaults.add_default_profile_for_stream(module_stream, DEFAULT_PROFILE)
+    defaults = Modulemd.DefaultsV1.new(args.module_name)
+    defaults.set_default_stream(args.module_stream)
+    defaults.add_default_profile_for_stream(args.module_stream, DEFAULT_PROFILE)
 
     index = Modulemd.ModuleIndex.new()
     index.add_module_stream(stream)
     index.add_defaults(defaults)
 
-    if to_stdout:
+    if args.to_stdout:
         sys.stdout.write(index.dump_to_string())
         return
 
diff --git a/repo2module/requirements.txt b/repo2module/requirements.txt
index dca9a90..e69de29 100644
--- a/repo2module/requirements.txt
+++ b/repo2module/requirements.txt
@@ -1 +0,0 @@
-click
diff --git a/repo2module/tests/test_repo2module.py b/repo2module/tests/test_repo2module.py
index 4e7fe26..21d8130 100644
--- a/repo2module/tests/test_repo2module.py
+++ b/repo2module/tests/test_repo2module.py
@@ -1,9 +1,6 @@
 import unittest
 import os.path
-
 import createrepo_c
-from click.testing import CliRunner
-
 import repo2module.cli
 from repo2module.cli import parse_repodata, get_source_packages
 
@@ -31,8 +28,8 @@ def test_get_source_packages():
 
 @unittest.skip("Does not work with the latest libmodulemd (2.12.0)")
 def test_repo2module(module_yaml_output):
-    runner = CliRunner()
-    result = runner.invoke(repo2module.cli.cli, ['-n', 'dummy', '-O', test_repo_dir])
-
-    assert result.exit_code == 0
-    assert result.output == module_yaml_output
+    # runner = CliRunner()
+    # result = runner.invoke(repo2module.cli.cli, ['-n', 'dummy', '-O', test_repo_dir])
+    # assert result.exit_code == 0
+    # assert result.output == module_yaml_output
+    raise NotImplementedError
diff --git a/tox.ini b/tox.ini
index aea2b29..717b47c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -22,3 +22,7 @@ commands = - flake8 createrepo_mod dir2module modulemd-generate-macros modulemd-
 
 [flake8]
 max-line-length = 100
+
+[pytest]
+log_cli = true
+log_cli_level = DEBUG