From d9e2101b080871a5ebd60300d870fd0d333c72bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Wed, 4 Apr 2018 15:22:28 +0200 Subject: [PATCH] buildinstall: Add extra repos MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A new configuration option is added that allows users to point lorax to extra repositories. This can be handy if some tools to create the bootable image are not part of the product itself. Signed-off-by: Lubomír Sedlář JIRA: COMPOSE-2253 --- doc/configuration.rst | 10 ++++ pungi/checks.py | 4 ++ pungi/phases/buildinstall.py | 5 +- tests/test_buildinstall.py | 99 +++++++++++++++++++++++++++++++----- 4 files changed, 104 insertions(+), 14 deletions(-) diff --git a/doc/configuration.rst b/doc/configuration.rst index e5f1e9e0..bd1031a7 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -493,6 +493,9 @@ Options * ``add_arch_template`` -- *[str]* (default empty) * ``add_template_var`` -- *[str]* (default empty) * ``add_arch_template_var`` -- *[str]* (default empty) +**lorax_extra_sources** + (*list*) -- a variant/arch mapping with urls for extra source repositories + added to Lorax command line. Either one repo or a list can be specified. **buildinstall_kickstart** (:ref:`scm_dict `) -- If specified, this kickstart file will be copied into each file and pointed to in boot configuration. @@ -537,6 +540,13 @@ Example }) ] + # Add another repository for lorax to install packages from + lorax_extra_sources = [ + ('^Simple$', { + '*': 'https://example.com/repo/$basearch/', + }) + ] + .. note:: diff --git a/pungi/checks.py b/pungi/checks.py index 6233d5d7..77ca640f 100644 --- a/pungi/checks.py +++ b/pungi/checks.py @@ -1027,6 +1027,10 @@ def make_schema(): "additionalProperties": False, }), + "lorax_extra_sources": _variant_arch_mapping({ + "$ref": "#/definitions/strings", + }), + "signing_key_id": {"type": "string"}, "signing_key_password_file": {"type": "string"}, "signing_command": {"type": "string"}, diff --git a/pungi/phases/buildinstall.py b/pungi/phases/buildinstall.py index 3ec523bf..b311ac93 100644 --- a/pungi/phases/buildinstall.py +++ b/pungi/phases/buildinstall.py @@ -95,11 +95,14 @@ class BuildinstallPhase(PhaseBase): log_dir = os.path.join(log_dir, "logs") output_dir = os.path.join(output_dir, "results") + repos = [repo_baseurl] + get_arch_variant_data(self.compose.conf, + 'lorax_extra_sources', arch, variant) + lorax = LoraxWrapper() lorax_cmd = lorax.get_lorax_cmd(self.compose.conf["release_name"], self.compose.conf["release_version"], self.compose.conf["release_version"], - repo_baseurl, + repos, output_dir, variant=variant.uid, buildinstallpackages=variant.buildinstallpackages, diff --git a/tests/test_buildinstall.py b/tests/test_buildinstall.py index aa8f527b..1757fbbb 100644 --- a/tests/test_buildinstall.py +++ b/tests/test_buildinstall.py @@ -113,7 +113,8 @@ class TestBuildinstallPhase(PungiTestCase): # Obtained correct lorax commands. self.assertItemsEqual( loraxCls.return_value.get_lorax_cmd.mock_calls, - [mock.call('Test', '1', '1', self.topdir + '/work/x86_64/repo', + [mock.call('Test', '1', '1', + [self.topdir + '/work/x86_64/repo'], self.topdir + '/work/x86_64/buildinstall/Server', buildarch='x86_64', is_final=True, nomacboot=True, noupgrade=True, volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], @@ -121,7 +122,8 @@ class TestBuildinstallPhase(PungiTestCase): add_template=[], add_arch_template=[], add_template_var=[], add_arch_template_var=[], log_dir=self.topdir + '/logs/x86_64/buildinstall-Server-logs'), - mock.call('Test', '1', '1', self.topdir + '/work/amd64/repo', + mock.call('Test', '1', '1', + [self.topdir + '/work/amd64/repo'], self.topdir + '/work/amd64/buildinstall/Server', buildarch='amd64', is_final=True, nomacboot=True, noupgrade=True, volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], @@ -129,7 +131,8 @@ class TestBuildinstallPhase(PungiTestCase): add_template=[], add_arch_template=[], add_template_var=[], add_arch_template_var=[], log_dir=self.topdir + '/logs/amd64/buildinstall-Server-logs'), - mock.call('Test', '1', '1', self.topdir + '/work/amd64/repo', + mock.call('Test', '1', '1', + [self.topdir + '/work/amd64/repo'], self.topdir + '/work/amd64/buildinstall/Client', buildarch='amd64', is_final=True, nomacboot=True, noupgrade=True, volid='vol_id', variant='Client', buildinstallpackages=[], @@ -173,7 +176,8 @@ class TestBuildinstallPhase(PungiTestCase): # Obtained correct lorax command. lorax = loraxCls.return_value lorax.get_lorax_cmd.assert_has_calls( - [mock.call('Test', '1', '1', self.topdir + '/work/amd64/repo', + [mock.call('Test', '1', '1', + [self.topdir + '/work/amd64/repo'], self.topdir + '/work/amd64/buildinstall/Client', buildarch='amd64', is_final=True, nomacboot=True, noupgrade=True, volid='vol_id', variant='Client', buildinstallpackages=[], @@ -272,7 +276,8 @@ class TestBuildinstallPhase(PungiTestCase): # Obtained correct lorax commands. self.assertItemsEqual( loraxCls.return_value.get_lorax_cmd.mock_calls, - [mock.call('Test', '1', '1', self.topdir + '/work/x86_64/repo', + [mock.call('Test', '1', '1', + [self.topdir + '/work/x86_64/repo'], self.topdir + '/work/x86_64/buildinstall/Server', buildarch='x86_64', is_final=True, nomacboot=True, noupgrade=True, volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], @@ -280,7 +285,8 @@ class TestBuildinstallPhase(PungiTestCase): add_template_var=['baz=1'], add_arch_template_var=['quux=2'], bugurl='http://example.com', log_dir=self.topdir + '/logs/x86_64/buildinstall-Server-logs'), - mock.call('Test', '1', '1', self.topdir + '/work/amd64/repo', + mock.call('Test', '1', '1', + [self.topdir + '/work/amd64/repo'], self.topdir + '/work/amd64/buildinstall/Server', buildarch='amd64', is_final=True, nomacboot=True, noupgrade=False, volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], @@ -288,7 +294,8 @@ class TestBuildinstallPhase(PungiTestCase): add_template=[], add_arch_template=[], add_template_var=[], add_arch_template_var=[], log_dir=self.topdir + '/logs/amd64/buildinstall-Server-logs'), - mock.call('Test', '1', '1', self.topdir + '/work/amd64/repo', + mock.call('Test', '1', '1', + [self.topdir + '/work/amd64/repo'], self.topdir + '/work/amd64/buildinstall/Client', buildarch='amd64', is_final=True, nomacboot=False, noupgrade=True, volid='vol_id', variant='Client', buildinstallpackages=[], @@ -341,7 +348,8 @@ class TestBuildinstallPhase(PungiTestCase): # Obtained correct lorax commands. self.assertItemsEqual( loraxCls.return_value.get_lorax_cmd.mock_calls, - [mock.call('Test', '1', '1', self.topdir + '/work/x86_64/repo', + [mock.call('Test', '1', '1', + [self.topdir + '/work/x86_64/repo'], self.topdir + '/work/x86_64/buildinstall/Server', buildarch='x86_64', is_final=True, nomacboot=False, noupgrade=False, volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], @@ -349,7 +357,8 @@ class TestBuildinstallPhase(PungiTestCase): add_template=[], add_arch_template=[], add_template_var=[], add_arch_template_var=[], log_dir=self.topdir + '/logs/x86_64/buildinstall-Server-logs'), - mock.call('Test', '1', '1', self.topdir + '/work/amd64/repo', + mock.call('Test', '1', '1', + [self.topdir + '/work/amd64/repo'], self.topdir + '/work/amd64/buildinstall/Server', buildarch='amd64', is_final=True, nomacboot=True, noupgrade=False, volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], @@ -357,7 +366,8 @@ class TestBuildinstallPhase(PungiTestCase): add_template=[], add_arch_template=[], add_template_var=[], add_arch_template_var=[], log_dir=self.topdir + '/logs/amd64/buildinstall-Server-logs'), - mock.call('Test', '1', '1', self.topdir + '/work/amd64/repo', + mock.call('Test', '1', '1', + [self.topdir + '/work/amd64/repo'], self.topdir + '/work/amd64/buildinstall/Client', buildarch='amd64', is_final=True, nomacboot=True, noupgrade=False, volid='vol_id', variant='Client', buildinstallpackages=[], @@ -410,7 +420,8 @@ class TestBuildinstallPhase(PungiTestCase): # Obtained correct lorax commands. self.assertItemsEqual( loraxCls.return_value.get_lorax_cmd.mock_calls, - [mock.call('Test', '1', '1', 'http://localhost/work/x86_64/repo', + [mock.call('Test', '1', '1', + ['http://localhost/work/x86_64/repo'], buildinstall_topdir + '/x86_64/Server/results', buildarch='x86_64', is_final=True, nomacboot=True, noupgrade=True, volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], @@ -418,7 +429,8 @@ class TestBuildinstallPhase(PungiTestCase): add_template_var=[], add_arch_template_var=[], bugurl=None, log_dir=buildinstall_topdir + '/x86_64/Server/logs'), - mock.call('Test', '1', '1', 'http://localhost/work/amd64/repo', + mock.call('Test', '1', '1', + ['http://localhost/work/amd64/repo'], buildinstall_topdir + '/amd64/Server/results', buildarch='amd64', is_final=True, nomacboot=True, noupgrade=True, volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], @@ -426,7 +438,8 @@ class TestBuildinstallPhase(PungiTestCase): add_template=[], add_arch_template=[], add_template_var=[], add_arch_template_var=[], log_dir=buildinstall_topdir + '/amd64/Server/logs'), - mock.call('Test', '1', '1', 'http://localhost/work/amd64/repo', + mock.call('Test', '1', '1', + ['http://localhost/work/amd64/repo'], buildinstall_topdir + '/amd64/Client/results', buildarch='amd64', is_final=True, nomacboot=True, noupgrade=True, volid='vol_id', variant='Client', buildinstallpackages=[], @@ -440,6 +453,66 @@ class TestBuildinstallPhase(PungiTestCase): mock.call(compose, 'amd64', variant=compose.variants['Client'], disc_type='dvd'), mock.call(compose, 'amd64', variant=compose.variants['Server'], disc_type='dvd')]) + @mock.patch('pungi.phases.buildinstall.ThreadPool') + @mock.patch('pungi.phases.buildinstall.LoraxWrapper') + @mock.patch('pungi.phases.buildinstall.get_volid') + def test_uses_lorax_extra_repos(self, get_volid, loraxCls, poolCls): + compose = BuildInstallCompose(self.topdir, { + 'bootable': True, + 'release_name': 'Test', + 'release_short': 't', + 'release_version': '1', + 'release_is_layered': False, + 'buildinstall_method': 'lorax', + 'lorax_extra_sources': [ + ('^Server$', { + 'x86_64': "http://example.com/repo1", + }), + ('^Client$', { + '*': ["http://example.com/repo2", "http://example.com/repo3"], + }), + ] + }) + + get_volid.return_value = 'vol_id' + loraxCls.return_value.get_lorax_cmd.return_value = ['lorax', '...'] + + phase = BuildinstallPhase(compose) + + phase.run() + + self.assertItemsEqual( + loraxCls.return_value.get_lorax_cmd.mock_calls, + [mock.call('Test', '1', '1', + [self.topdir + '/work/x86_64/repo', "http://example.com/repo1"], + self.topdir + '/work/x86_64/buildinstall/Server', + buildarch='x86_64', is_final=True, nomacboot=True, noupgrade=True, + volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], + add_template=[], add_arch_template=[], + add_template_var=[], add_arch_template_var=[], + bugurl=None, + log_dir=self.topdir + '/logs/x86_64/buildinstall-Server-logs'), + mock.call('Test', '1', '1', + [self.topdir + '/work/amd64/repo'], + self.topdir + '/work/amd64/buildinstall/Server', + buildarch='amd64', is_final=True, nomacboot=True, noupgrade=True, + volid='vol_id', variant='Server', buildinstallpackages=['bash', 'vim'], + bugurl=None, + add_template=[], add_arch_template=[], + add_template_var=[], add_arch_template_var=[], + log_dir=self.topdir + '/logs/amd64/buildinstall-Server-logs'), + mock.call('Test', '1', '1', + [self.topdir + '/work/amd64/repo', + "http://example.com/repo2", + "http://example.com/repo3"], + self.topdir + '/work/amd64/buildinstall/Client', + buildarch='amd64', is_final=True, nomacboot=True, noupgrade=True, + volid='vol_id', variant='Client', buildinstallpackages=[], + bugurl=None, + add_template=[], add_arch_template=[], + add_template_var=[], add_arch_template_var=[], + log_dir=self.topdir + '/logs/amd64/buildinstall-Client-logs')]) + class TestCopyFiles(PungiTestCase):