From 20b4b1b17d63f3db57900c7426f380f886f8e60e Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Jan 11 2024 14:56:01 +0000 Subject: PR#3929: Read config file on image build indirection Merges #3929 https://pagure.io/koji/pull-request/3929 Fixes: #3928 https://pagure.io/koji/issue/3928 Read '--config' on indirection image build --- diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index 3cb4772..3981d25 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -5830,6 +5830,21 @@ def handle_image_build_indirection(options, session, args): help="Do not display progress of the upload") (task_options, args) = parser.parse_args(args) + if task_options.config: + section = 'image-build-indirection' + config = koji.read_config_files([(task_options.config, True)]) + if not config.has_section(section): + parser.error("single section called [%s] is required" % section) + + # We avoid manually listing options + parser_options = [opt.dest for opt in parser.option_list] + parser_options.remove(None) # --help has a dest of None, remove it to avoid errors + for opt in parser_options: + if not config.has_option(section, opt): + continue + + setattr(task_options, opt, config.get(section, opt)) + _build_image_indirection(options, task_options, session, args) diff --git a/tests/test_cli/data/image-build-indirection-config.conf b/tests/test_cli/data/image-build-indirection-config.conf new file mode 100644 index 0000000..8673223 --- /dev/null +++ b/tests/test_cli/data/image-build-indirection-config.conf @@ -0,0 +1,12 @@ +[image-build-indirection] +name = fedora-server-docker +version = 26 +release = 1 +target = f26-candidate +arch = x86_64 + +base_image_build = fedora-base +utility_image_build = fedora-utility +indirection_template = fedora-indirection.tdl +indirection_template_url = git://git.fedorahosted.org/git/indirection-templates.git?fedora26#68c40eb7 +results_loc = fedora-indirection.tar diff --git a/tests/test_cli/test_image_build_indirection.py b/tests/test_cli/test_image_build_indirection.py index 0610c0f..fd556bb 100644 --- a/tests/test_cli/test_image_build_indirection.py +++ b/tests/test_cli/test_image_build_indirection.py @@ -1,13 +1,20 @@ from __future__ import absolute_import + +import os +import unittest + import mock import six -import unittest import koji - from koji_cli.commands import handle_image_build_indirection, _build_image_indirection from . import utils +if six.PY2: + ConfigParser = six.moves.configparser.SafeConfigParser +else: + ConfigParser = six.moves.configparser.ConfigParser + TASK_OPTIONS = { "background": True, @@ -67,6 +74,8 @@ class TestBuildImageIndirection(utils.CliTestCase): self.session.buildImageIndirection.return_value = self.task_id self.unique_path.return_value = '/path/to/cli-image-indirection' + self.configparser = mock.patch('six.moves.configparser.ConfigParser').start() + def tearDown(self): mock.patch.stopall() @@ -183,6 +192,32 @@ class TestBuildImageIndirection(utils.CliTestCase): self.assertEqual(str(cm.exception), expected) self.activate_session.assert_called_with(self.session, self.options) + @mock.patch('koji_cli.commands._build_image_indirection') + def test_image_build_indirection_configuration(self, build_image_indirection_mock): + """Test handle_image_build.""" + self.configparser.return_value = ConfigParser() + + config_file = os.path.join( + os.path.dirname(__file__), + 'data/image-build-indirection-config.conf' + ) + TASK_OPTIONS['config'] = config_file + + handle_image_build_indirection( + self.options, + self.session, + ['--config', config_file, + '--arch', 'x386'] + ) + + args, _ = build_image_indirection_mock.call_args + merged_options = args[1].__dict__ + + self.assertEqual("x86_64", merged_options["arch"]) # Overrides command line + self.assertEqual("fedora-base", merged_options["base_image_build"]) + self.assertEqual("fedora-indirection.tdl", merged_options["indirection_template"]) + self.session.activate_session_mock.assert_not_called() + class TestImageBuildIndirection(utils.CliTestCase): def setUp(self):