diff --git a/src/lifted/config.py b/src/lifted/config.py new file mode 100644 index 00000000..0ab0817a --- /dev/null +++ b/src/lifted/config.py @@ -0,0 +1,35 @@ +# +# Copyright (C) 2019 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +from pylorax.sysutils import joinpaths + +def configure(conf): + """Add lifted settings to the configuration + + :param conf: configuration object + :type conf: ComposerConfig + :returns: None + + This uses the composer.share_dir and composer.lib_dir as the base + directories for the settings. + """ + share_dir = conf.get("composer", "share_dir") + lib_dir = conf.get("composer", "lib_dir") + + conf.add_section("upload") + conf.set("upload", "providers_dir", joinpaths(share_dir, "/lifted/providers/")) + conf.set("upload", "queue_dir", joinpaths(lib_dir, "/upload/queue/")) + conf.set("upload", "settings_dir", joinpaths(lib_dir, "/upload/settings/")) diff --git a/src/pylorax/api/config.py b/src/pylorax/api/config.py index 1662ac4f..fa81cdf4 100644 --- a/src/pylorax/api/config.py +++ b/src/pylorax/api/config.py @@ -38,6 +38,8 @@ def configure(conf_file="/etc/lorax/composer.conf", root_dir="/", test_config=Fa :type root_dir: str :param test_config: Set to True to skip reading conf_file :type test_config: bool + :returns: Configuration + :rtype: ComposerConfig """ conf = ComposerConfig() @@ -54,11 +56,6 @@ def configure(conf_file="/etc/lorax/composer.conf", root_dir="/", test_config=Fa conf.add_section("users") conf.set("users", "root", "1") - conf.add_section("upload") - conf.set("upload", "providers_dir", os.path.realpath(joinpaths(root_dir, "/usr/share/lorax/lifted/providers/"))) - conf.set("upload", "queue_dir", os.path.realpath(joinpaths(root_dir, "/var/lib/lorax/upload/queue"))) - conf.set("upload", "settings_dir", os.path.realpath(joinpaths(root_dir, "/var/lib/lorax/upload/settings"))) - # Enable all available repo files by default conf.add_section("repos") conf.set("repos", "use_system_repos", "1") diff --git a/src/sbin/lorax-composer b/src/sbin/lorax-composer index 9fff5781..f3ecb6cd 100755 --- a/src/sbin/lorax-composer +++ b/src/sbin/lorax-composer @@ -44,6 +44,7 @@ from pylorax.api.queue import start_queue_monitor from pylorax.api.recipes import open_or_create_repo, commit_recipe_directory from pylorax.api.server import server, GitLock +import lifted.config from lifted.queue import start_upload_monitor VERSION = "{0}-{1}".format(os.path.basename(sys.argv[0]), vernum) @@ -208,6 +209,9 @@ if __name__ == '__main__': if opts.no_system_repos: server.config["COMPOSER_CFG"].set("repos", "use_system_repos", "0") + # Setup the lifted configuration settings + lifted.config.configure(server.config["COMPOSER_CFG"]) + # Make sure the queue paths are setup correctly, exit on errors errors = make_queue_dirs(server.config["COMPOSER_CFG"], gid) if errors: diff --git a/tests/pylorax/test_compose.py b/tests/pylorax/test_compose.py index d2c7b1e5..d58db0ce 100644 --- a/tests/pylorax/test_compose.py +++ b/tests/pylorax/test_compose.py @@ -20,6 +20,7 @@ import shutil import tempfile import unittest +import lifted.config from pylorax import get_buildarch from pylorax.api.compose import add_customizations, get_extra_pkgs, compose_types from pylorax.api.compose import timezone_cmd, get_timezone_settings @@ -804,6 +805,7 @@ class ExtraPkgsTest(unittest.TestCase): def setUpClass(self): self.tmp_dir = tempfile.mkdtemp(prefix="lorax.test.repo.") self.config = configure(root_dir=self.tmp_dir, test_config=True) + lifted.config.configure(self.config) make_dnf_dirs(self.config, os.getuid(), os.getgid()) self.dbo = get_base_object(self.config) diff --git a/tests/pylorax/test_dnfbase.py b/tests/pylorax/test_dnfbase.py index bfc19fa2..560fd019 100644 --- a/tests/pylorax/test_dnfbase.py +++ b/tests/pylorax/test_dnfbase.py @@ -21,6 +21,7 @@ import unittest import configparser +import lifted.config from pylorax.api.config import configure, make_dnf_dirs from pylorax.api.dnfbase import get_base_object @@ -42,6 +43,7 @@ use_system_repos = False # will read the above configuration config = configure(conf_file=conf_file, root_dir=self.tmp_dir) + lifted.config.configure(config) make_dnf_dirs(config, os.getuid(), os.getgid()) # will read composer config and store a dnf config file @@ -76,6 +78,7 @@ class DnfbaseSystemReposTest(unittest.TestCase): # will read the above configuration config = configure(root_dir=self.tmp_dir) + lifted.config.configure(config) make_dnf_dirs(config, os.getuid(), os.getgid()) # will read composer config and store a dnf config file @@ -105,6 +108,7 @@ class CreateDnfDirsTest(unittest.TestCase): def test_creates_missing_dnf_root_directory(self): config = configure(test_config=True, root_dir=self.tmp_dir) + lifted.config.configure(config) # will create the above directory if missing make_dnf_dirs(config, os.getuid(), os.getgid()) diff --git a/tests/pylorax/test_projects.py b/tests/pylorax/test_projects.py index ba404cfb..abe88d20 100644 --- a/tests/pylorax/test_projects.py +++ b/tests/pylorax/test_projects.py @@ -22,6 +22,7 @@ import tempfile import time import unittest +import lifted.config from pylorax.sysutils import joinpaths from pylorax.api.config import configure, make_dnf_dirs from pylorax.api.projects import api_time, api_changelog, pkg_to_project, pkg_to_project_info, pkg_to_dep @@ -49,6 +50,7 @@ class ProjectsTest(unittest.TestCase): def setUpClass(self): self.tmp_dir = tempfile.mkdtemp(prefix="lorax.test.repo.") self.config = configure(root_dir=self.tmp_dir, test_config=True) + lifted.config.configure(self.config) make_dnf_dirs(self.config, os.getuid(), os.getgid()) self.dbo = get_base_object(self.config) os.environ["TZ"] = "UTC" @@ -215,10 +217,12 @@ class ConfigureTest(unittest.TestCase): def test_configure_reads_existing_file(self): config = configure(conf_file=self.conf_file) + lifted.config.configure(config) self.assertEqual(config.get('composer', 'cache_dir'), '/tmp/cache-test') def test_configure_reads_non_existing_file(self): config = configure(conf_file=self.conf_file + '.non-existing') + lifted.config.configure(config) self.assertEqual(config.get('composer', 'cache_dir'), '/var/tmp/composer/cache') def fakerepo_baseurl_v0(): diff --git a/tests/pylorax/test_queue.py b/tests/pylorax/test_queue.py index 10dc001d..a6c4a236 100644 --- a/tests/pylorax/test_queue.py +++ b/tests/pylorax/test_queue.py @@ -20,6 +20,7 @@ import tempfile import unittest from uuid import uuid4 +import lifted.config from pylorax.api.config import configure, make_queue_dirs from pylorax.api.queue import check_queues from pylorax.base import DataHolder @@ -36,6 +37,7 @@ class QueueTestCase(unittest.TestCase): self.config["REPO_DIR"] = repo_dir self.config["COMPOSER_CFG"] = configure(root_dir=repo_dir, test_config=True) + lifted.config.configure(self.config["COMPOSER_CFG"]) os.makedirs(joinpaths(self.config["COMPOSER_CFG"].get("composer", "share_dir"), "composer")) errors = make_queue_dirs(self.config["COMPOSER_CFG"], os.getgid()) if errors: diff --git a/tests/pylorax/test_server.py b/tests/pylorax/test_server.py index 31b59eeb..ceff69ff 100644 --- a/tests/pylorax/test_server.py +++ b/tests/pylorax/test_server.py @@ -29,6 +29,7 @@ import unittest from flask import json from ..lib import create_git_repo +import lifted.config from pylorax.api.config import configure, make_dnf_dirs, make_queue_dirs from pylorax.api.errors import * # pylint: disable=wildcard-import from pylorax.api.queue import start_queue_monitor @@ -112,6 +113,7 @@ class ServerAPIV0TestCase(unittest.TestCase): server.config["GITLOCK"] = GitLock(repo=repo, lock=Lock(), dir=repo_dir) server.config["COMPOSER_CFG"] = configure(root_dir=repo_dir, test_config=True) + lifted.config.configure(server.config["COMPOSER_CFG"]) os.makedirs(joinpaths(server.config["COMPOSER_CFG"].get("composer", "share_dir"), "composer")) errors = make_queue_dirs(server.config["COMPOSER_CFG"], os.getgid()) if errors: @@ -1758,6 +1760,7 @@ class ServerAPIV1TestCase(unittest.TestCase): server.config["GITLOCK"] = GitLock(repo=repo, lock=Lock(), dir=repo_dir) server.config["COMPOSER_CFG"] = configure(root_dir=repo_dir, test_config=True) + lifted.config.configure(server.config["COMPOSER_CFG"]) os.makedirs(joinpaths(server.config["COMPOSER_CFG"].get("composer", "share_dir"), "composer")) errors = make_queue_dirs(server.config["COMPOSER_CFG"], os.getgid()) if errors: @@ -3517,6 +3520,7 @@ class RepoCacheAPIV0TestCase(unittest.TestCase): server.config["GITLOCK"] = GitLock(repo=repo, lock=Lock(), dir=repo_dir) server.config["COMPOSER_CFG"] = configure(root_dir=repo_dir, test_config=True) + lifted.config.configure(server.config["COMPOSER_CFG"]) os.makedirs(joinpaths(server.config["COMPOSER_CFG"].get("composer", "share_dir"), "composer")) errors = make_queue_dirs(server.config["COMPOSER_CFG"], os.getgid()) if errors: @@ -3656,6 +3660,7 @@ class RepoCacheAPIV1TestCase(unittest.TestCase): server.config["GITLOCK"] = GitLock(repo=repo, lock=Lock(), dir=repo_dir) server.config["COMPOSER_CFG"] = configure(root_dir=repo_dir, test_config=True) + lifted.config.configure(server.config["COMPOSER_CFG"]) os.makedirs(joinpaths(server.config["COMPOSER_CFG"].get("composer", "share_dir"), "composer")) errors = make_queue_dirs(server.config["COMPOSER_CFG"], os.getgid()) if errors: @@ -3797,6 +3802,7 @@ class GitRPMBlueprintTestCase(unittest.TestCase): server.config["GITLOCK"] = GitLock(repo=repo, lock=Lock(), dir=repo_dir) server.config["COMPOSER_CFG"] = configure(root_dir=repo_dir, test_config=True) + lifted.config.configure(server.config["COMPOSER_CFG"]) os.makedirs(joinpaths(server.config["COMPOSER_CFG"].get("composer", "share_dir"), "composer")) errors = make_queue_dirs(server.config["COMPOSER_CFG"], os.getgid()) if errors: