From 37ae59cbc13bce1ff5e5ccb57c3f722cfcf9116a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Sch=C3=A4fer?= Date: Sun, 21 Feb 2016 15:14:57 +0100 Subject: [PATCH] Added metadata rpm files to all builders rpm packages and verification information is now added to all builder results. Fixes #13 --- kiwi/archive_builder.py | 16 +++++++++++++++ kiwi/container_builder.py | 17 ++++++++++++++++ kiwi/disk_builder.py | 14 +++++++++++++ kiwi/filesystem_builder.py | 17 ++++++++++++++++ kiwi/live_image_builder.py | 12 +++++++++++ kiwi/pxe_builder.py | 25 ++++++++++++++++++++++- test/unit/archive_builder_test.py | 11 ++++++++++ test/unit/container_builder_test.py | 30 +++++++++++++++++++++++++--- test/unit/disk_builder_test.py | 18 +++++++++++------ test/unit/filesystem_builder_test.py | 18 +++++++++++++++++ test/unit/live_image_builder_test.py | 20 ++++++++++++++----- test/unit/pxe_builder_test.py | 20 +++++++++++++++---- 12 files changed, 199 insertions(+), 19 deletions(-) diff --git a/kiwi/archive_builder.py b/kiwi/archive_builder.py index 125f8b24..f284fd5d 100644 --- a/kiwi/archive_builder.py +++ b/kiwi/archive_builder.py @@ -20,6 +20,7 @@ import platform # project from .defaults import Defaults from .archive_tar import ArchiveTar +from .system_setup import SystemSetup from .checksum import Checksum from .logger import log from .result import Result @@ -39,6 +40,9 @@ class ArchiveBuilder(object): self.xml_state = xml_state self.requested_archive_type = xml_state.get_build_type_name() self.result = Result(xml_state) + self.system_setup = SystemSetup( + xml_state=xml_state, description_dir=None, root_dir=self.root_dir + ) self.filename = self.__target_file_for('tar.xz') self.checksum = self.__target_file_for('md5') @@ -64,6 +68,18 @@ class ArchiveBuilder(object): self.result.add( 'root_archive_md5', self.checksum ) + self.result.add( + 'image_packages', + self.system_setup.export_rpm_package_list( + self.target_dir + ) + ) + self.result.add( + 'image_verified', + self.system_setup.export_rpm_package_verification( + self.target_dir + ) + ) return self.result def __target_file_for(self, suffix): diff --git a/kiwi/container_builder.py b/kiwi/container_builder.py index 5d213528..936a806d 100644 --- a/kiwi/container_builder.py +++ b/kiwi/container_builder.py @@ -20,6 +20,7 @@ import platform # project from .container_image import ContainerImage from .container_setup import ContainerSetup +from .system_setup import SystemSetup from .logger import log from .result import Result @@ -30,8 +31,12 @@ class ContainerBuilder(object): """ def __init__(self, xml_state, target_dir, root_dir): self.root_dir = root_dir + self.target_dir = target_dir self.requested_container_name = xml_state.build_type.get_container() self.requested_container_type = xml_state.get_build_type_name() + self.system_setup = SystemSetup( + xml_state=xml_state, description_dir=None, root_dir=self.root_dir + ) self.filename = ''.join( [ target_dir, '/', @@ -69,4 +74,16 @@ class ContainerBuilder(object): self.result.add( 'container', self.filename ) + self.result.add( + 'image_packages', + self.system_setup.export_rpm_package_list( + self.target_dir + ) + ) + self.result.add( + 'image_verified', + self.system_setup.export_rpm_package_verification( + self.target_dir + ) + ) return self.result diff --git a/kiwi/disk_builder.py b/kiwi/disk_builder.py index f00a4513..b3e3c8d8 100644 --- a/kiwi/disk_builder.py +++ b/kiwi/disk_builder.py @@ -293,6 +293,20 @@ class DiskBuilder(object): disk_format.get_target_name_for_format(self.image_format) ) + # create image root metadata + self.result.add( + 'image_packages', + self.system_setup.export_rpm_package_list( + self.target_dir + ) + ) + self.result.add( + 'image_verified', + self.system_setup.export_rpm_package_verification( + self.target_dir + ) + ) + return self.result def __install_image_requested(self): diff --git a/kiwi/filesystem_builder.py b/kiwi/filesystem_builder.py index bfc5e808..ba82b083 100644 --- a/kiwi/filesystem_builder.py +++ b/kiwi/filesystem_builder.py @@ -22,6 +22,7 @@ from .filesystem import FileSystem from .loop_device import LoopDevice from .device_provider import DeviceProvider from .filesystem_setup import FileSystemSetup +from .system_setup import SystemSetup from .defaults import Defaults from .logger import log from .result import Result @@ -39,6 +40,7 @@ class FileSystemBuilder(object): self.custom_args = None self.label = None self.root_dir = root_dir + self.target_dir = target_dir self.requested_image_type = xml_state.get_build_type_name() if self.requested_image_type == 'pxe': self.requested_filesystem = xml_state.build_type.get_filesystem() @@ -49,6 +51,9 @@ class FileSystemBuilder(object): 'No filesystem configured in %s type' % self.requested_image_type ) + self.system_setup = SystemSetup( + xml_state=xml_state, description_dir=None, root_dir=self.root_dir + ) self.filename = ''.join( [ target_dir, '/', @@ -81,6 +86,18 @@ class FileSystemBuilder(object): self.result.add( 'filesystem_image', self.filename ) + self.result.add( + 'image_packages', + self.system_setup.export_rpm_package_list( + self.target_dir + ) + ) + self.result.add( + 'image_verified', + self.system_setup.export_rpm_package_verification( + self.target_dir + ) + ) return self.result def __operate_on_loop(self): diff --git a/kiwi/live_image_builder.py b/kiwi/live_image_builder.py index d4559bde..cbec682d 100644 --- a/kiwi/live_image_builder.py +++ b/kiwi/live_image_builder.py @@ -196,6 +196,18 @@ class LiveImageBuilder(object): self.result.add( 'live_image', self.isoname ) + self.result.add( + 'image_packages', + self.system_setup.export_rpm_package_list( + self.target_dir + ) + ) + self.result.add( + 'image_verified', + self.system_setup.export_rpm_package_verification( + self.target_dir + ) + ) return self.result def __create_live_iso_kernel_and_initrd(self): diff --git a/kiwi/pxe_builder.py b/kiwi/pxe_builder.py index 3610df98..bc91e0e1 100644 --- a/kiwi/pxe_builder.py +++ b/kiwi/pxe_builder.py @@ -15,6 +15,8 @@ # You should have received a copy of the GNU General Public License # along with kiwi. If not, see # +import platform + # project from .internal_boot_image_task import BootImageTask from .filesystem_builder import FileSystemBuilder @@ -40,7 +42,6 @@ class PxeBuilder(object): def __init__(self, xml_state, target_dir, root_dir): self.target_dir = target_dir self.compressed = xml_state.build_type.get_compressed() - self.image_name = xml_state.xml_data.get_name() self.machine = xml_state.get_build_type_machine_section() self.pxedeploy = xml_state.get_build_type_pxedeploy_section() self.filesystem = FileSystemBuilder( @@ -52,6 +53,14 @@ class PxeBuilder(object): self.boot_image_task = BootImageTask( 'kiwi', xml_state, target_dir ) + self.image_name = ''.join( + [ + target_dir, '/', + xml_state.xml_data.get_name(), + '.' + platform.machine(), + '-' + xml_state.get_image_version(), + ] + ) self.kernel_filename = None self.hypervisor_filename = None self.result = Result(xml_state) @@ -130,6 +139,20 @@ class PxeBuilder(object): 'filesystem_md5', self.filesystem_checksum ) + # create image root metadata + self.result.add( + 'image_packages', + self.system_setup.export_rpm_package_list( + self.target_dir + ) + ) + self.result.add( + 'image_verified', + self.system_setup.export_rpm_package_verification( + self.target_dir + ) + ) + if self.pxedeploy: log.warning( 'Creation of client config file from pxedeploy not implemented' diff --git a/test/unit/archive_builder_test.py b/test/unit/archive_builder_test.py index 346ed6c6..960189a9 100644 --- a/test/unit/archive_builder_test.py +++ b/test/unit/archive_builder_test.py @@ -2,6 +2,7 @@ from nose.tools import * from mock import patch import mock +import kiwi from . import nose_helper @@ -23,6 +24,10 @@ class TestArchiveBuilder(object): self.xml_state.xml_data.get_name = mock.Mock( return_value='myimage' ) + self.setup = mock.Mock() + kiwi.archive_builder.SystemSetup = mock.Mock( + return_value=self.setup + ) self.archive = ArchiveBuilder( self.xml_state, 'target_dir', 'root_dir' ) @@ -66,3 +71,9 @@ class TestArchiveBuilder(object): checksum.md5.assert_called_once_with( 'target_dir/myimage.x86_64-1.2.3.md5' ) + self.setup.export_rpm_package_verification.assert_called_once_with( + 'target_dir' + ) + self.setup.export_rpm_package_list.assert_called_once_with( + 'target_dir' + ) diff --git a/test/unit/container_builder_test.py b/test/unit/container_builder_test.py index a27de5b9..c4493cd8 100644 --- a/test/unit/container_builder_test.py +++ b/test/unit/container_builder_test.py @@ -1,7 +1,8 @@ from nose.tools import * from mock import patch - +from mock import call import mock +import kiwi from . import nose_helper @@ -25,6 +26,10 @@ class TestContainerBuilder(object): xml_state.xml_data.get_name = mock.Mock( return_value='image_name' ) + self.setup = mock.Mock() + kiwi.container_builder.SystemSetup = mock.Mock( + return_value=self.setup + ) self.container = ContainerBuilder( xml_state, 'target_dir', 'root_dir' ) @@ -37,6 +42,8 @@ class TestContainerBuilder(object): mock_setup.return_value = container_setup container_image = mock.Mock() mock_image.return_value = container_image + self.setup.export_rpm_package_verification.return_value = '.verified' + self.setup.export_rpm_package_list.return_value = '.packages' self.container.create() mock_setup.assert_called_once_with( 'docker', 'root_dir', {'container_name': 'my-container'} @@ -48,6 +55,23 @@ class TestContainerBuilder(object): container_image.create.assert_called_once_with( 'target_dir/image_name.x86_64-1.2.3.docker.tar.xz' ) - self.container.result.add.assert_called_once_with( - 'container', 'target_dir/image_name.x86_64-1.2.3.docker.tar.xz' + assert self.container.result.add.call_args_list == [ + call( + 'container', + 'target_dir/image_name.x86_64-1.2.3.docker.tar.xz' + ), + call( + 'image_packages', + self.setup.export_rpm_package_list.return_value + ), + call( + 'image_verified', + self.setup.export_rpm_package_verification.return_value + ) + ] + self.setup.export_rpm_package_verification.assert_called_once_with( + 'target_dir' + ) + self.setup.export_rpm_package_list.assert_called_once_with( + 'target_dir' ) diff --git a/test/unit/disk_builder_test.py b/test/unit/disk_builder_test.py index 3f0e84f3..98ad4567 100644 --- a/test/unit/disk_builder_test.py +++ b/test/unit/disk_builder_test.py @@ -116,9 +116,9 @@ class TestDiskBuilder(object): kiwi.disk_builder.FirmWare = mock.Mock( return_value=self.firmware ) - self.system_setup = mock.Mock() + self.setup = mock.Mock() kiwi.disk_builder.SystemSetup = mock.Mock( - return_value=self.system_setup + return_value=self.setup ) self.install_image = mock.Mock() kiwi.disk_builder.InstallImageBuilder = mock.Mock( @@ -174,8 +174,8 @@ class TestDiskBuilder(object): self.disk_builder.create() - self.system_setup.create_recovery_archive.assert_called_once_with() - self.system_setup.export_modprobe_setup.assert_called_once_with( + self.setup.create_recovery_archive.assert_called_once_with() + self.setup.export_modprobe_setup.assert_called_once_with( 'boot_dir' ) self.disk_setup.get_disksize_mbytes.assert_called_once_with() @@ -200,11 +200,11 @@ class TestDiskBuilder(object): self.bootloader_config.setup_disk_image_config.assert_called_once_with( '0815' ) - self.system_setup.call_edit_boot_config_script.assert_called_once_with( + self.setup.call_edit_boot_config_script.assert_called_once_with( 'btrfs', 1 ) self.bootloader_install.install.assert_called_once_with() - self.system_setup.call_edit_boot_install_script.assert_called_once_with( + self.setup.call_edit_boot_install_script.assert_called_once_with( 'target_dir/LimeJeOS-openSUSE-13.2.x86_64-1.13.2.raw', '/dev/boot-device' ) @@ -254,6 +254,12 @@ class TestDiskBuilder(object): self.kernel.copy_xen_hypervisor.assert_called_once_with( 'root_dir', '/boot/xen.gz' ) + self.setup.export_rpm_package_list.assert_called_once_with( + 'target_dir' + ) + self.setup.export_rpm_package_verification.assert_called_once_with( + 'target_dir' + ) @patch('kiwi.disk_builder.FileSystem') @patch('builtins.open') diff --git a/test/unit/filesystem_builder_test.py b/test/unit/filesystem_builder_test.py index aa5c4a50..131afbf9 100644 --- a/test/unit/filesystem_builder_test.py +++ b/test/unit/filesystem_builder_test.py @@ -2,6 +2,7 @@ from nose.tools import * from mock import patch import mock +import kiwi from . import nose_helper @@ -44,6 +45,11 @@ class TestFileSystemBuilder(object): return_value=42 ) + self.setup = mock.Mock() + kiwi.filesystem_builder.SystemSetup = mock.Mock( + return_value=self.setup + ) + @raises(KiwiFileSystemSetupError) def test_create_unknown_filesystem(self): self.xml_state.get_build_type_name = mock.Mock( @@ -92,6 +98,12 @@ class TestFileSystemBuilder(object): self.filesystem.sync_data.assert_called_once_with( ['image', '.profile', '.kconfig', 'var/cache/kiwi'] ) + self.setup.export_rpm_package_verification.assert_called_once_with( + 'target_dir' + ) + self.setup.export_rpm_package_list.assert_called_once_with( + 'target_dir' + ) @patch('kiwi.filesystem_builder.FileSystem') @patch('kiwi.filesystem_builder.DeviceProvider') @@ -116,3 +128,9 @@ class TestFileSystemBuilder(object): self.filesystem.create_on_file.assert_called_once_with( 'target_dir/myimage.x86_64-1.2.3.squashfs', None ) + self.setup.export_rpm_package_verification.assert_called_once_with( + 'target_dir' + ) + self.setup.export_rpm_package_list.assert_called_once_with( + 'target_dir' + ) diff --git a/test/unit/live_image_builder_test.py b/test/unit/live_image_builder_test.py index 60f9e8ac..f803e298 100644 --- a/test/unit/live_image_builder_test.py +++ b/test/unit/live_image_builder_test.py @@ -21,9 +21,9 @@ class TestLiveImageBuilder(object): kiwi.live_image_builder.FirmWare = mock.Mock( return_value=self.firmware ) - self.system_setup = mock.Mock() + self.setup = mock.Mock() kiwi.live_image_builder.SystemSetup = mock.Mock( - return_value=self.system_setup + return_value=self.setup ) self.boot_image_task = mock.Mock() self.boot_image_task.boot_root_directory = 'initrd_dir' @@ -128,11 +128,13 @@ class TestLiveImageBuilder(object): return_value=8192 ) mock_size.return_value = rootsize + self.setup.export_rpm_package_verification.return_value = '.verified' + self.setup.export_rpm_package_list.return_value = '.packages' self.live_image.create() self.live_image.boot_image_task.prepare.assert_called_once_with() - self.system_setup.export_modprobe_setup.assert_called_once_with( + self.setup.export_modprobe_setup.assert_called_once_with( 'initrd_dir' ) mock_fs.assert_called_once_with( @@ -210,8 +212,16 @@ class TestLiveImageBuilder(object): mock_hybrid.assert_called_once_with( 'offset', self.mbrid, 'target_dir/result-image.x86_64-1.2.3.iso' ) - self.result.add.assert_called_once_with( - 'live_image', 'target_dir/result-image.x86_64-1.2.3.iso' + assert self.result.add.call_args_list == [ + call('live_image', 'target_dir/result-image.x86_64-1.2.3.iso'), + call('image_packages', '.packages'), + call('image_verified', '.verified') + ] + self.setup.export_rpm_package_verification.assert_called_once_with( + 'target_dir' + ) + self.setup.export_rpm_package_list.assert_called_once_with( + 'target_dir' ) @patch('kiwi.live_image_builder.mkdtemp') diff --git a/test/unit/pxe_builder_test.py b/test/unit/pxe_builder_test.py index 07dc7866..a18a8067 100644 --- a/test/unit/pxe_builder_test.py +++ b/test/unit/pxe_builder_test.py @@ -17,9 +17,9 @@ class TestPxeBuilder(object): @patch('kiwi.pxe_builder.FileSystemBuilder') @patch('kiwi.pxe_builder.BootImageTask') def setup(self, mock_boot, mock_filesystem): - self.system_setup = mock.Mock() + self.setup = mock.Mock() kiwi.pxe_builder.SystemSetup = mock.Mock( - return_value=self.system_setup + return_value=self.setup ) self.boot_image_task = mock.MagicMock() self.boot_image_task.boot_root_directory = 'initrd_dir' @@ -27,7 +27,13 @@ class TestPxeBuilder(object): self.filesystem = mock.MagicMock() self.filesystem.filename = 'myimage' mock_filesystem.return_value = self.filesystem - self.xml_state = mock.MagicMock() + self.xml_state = mock.Mock() + self.xml_state.get_image_version = mock.Mock( + return_value='1.2.3' + ) + self.xml_state.xml_data.get_name = mock.Mock( + return_value='some-image' + ) kernel_type = namedtuple( 'kernel', ['filename', 'version'] ) @@ -70,10 +76,16 @@ class TestPxeBuilder(object): compress.xz.assert_called_once_with() checksum.md5.assert_called_once_with('myimage.md5') self.boot_image_task.prepare.assert_called_once_with() - self.system_setup.export_modprobe_setup.assert_called_once_with( + self.setup.export_modprobe_setup.assert_called_once_with( 'initrd_dir' ) self.boot_image_task.create_initrd.assert_called_once_with() + self.setup.export_rpm_package_list.assert_called_once_with( + 'target_dir' + ) + self.setup.export_rpm_package_verification.assert_called_once_with( + 'target_dir' + ) # warning for not implemented pxedeploy handling assert mock_log_warn.called