Creation of UEFI ISO fails with efiboot.img
Creation for UEFI boot mode when efiboot.img file is provided and the directory of location of grub.cfg file set using config ``[DEFAULT]/grub_config_path`` is not same as that of efiboot.img file. Change-Id: I55b85d52ec905150322633b07ecdacd293bf1a57 Story: 2006218 Task: 35811
This commit is contained in:
parent
691d3e4992
commit
13dcb33faa
@ -273,8 +273,13 @@ def create_isolinux_image_for_uefi(output_file, kernel, ramdisk,
|
|||||||
grub_rel_path = CONF.grub_config_path.lstrip(' ' + os.sep)
|
grub_rel_path = CONF.grub_config_path.lstrip(' ' + os.sep)
|
||||||
grub_cfg = os.path.join(tmpdir, grub_rel_path)
|
grub_cfg = os.path.join(tmpdir, grub_rel_path)
|
||||||
|
|
||||||
|
# Create an empty grub config file by copying /dev/null.
|
||||||
|
# This is to avoid write failures when actual write of
|
||||||
|
# config file happens. Write failures are caused if grub
|
||||||
|
# config path does not exist on root file system.
|
||||||
uefi_path_info = {
|
uefi_path_info = {
|
||||||
esp_image: e_img_rel_path
|
esp_image: e_img_rel_path,
|
||||||
|
'/dev/null': grub_rel_path
|
||||||
}
|
}
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -536,23 +536,25 @@ class FsImageTestCase(base.TestCase):
|
|||||||
'path/to/efiboot.img', '-no-emul-boot', '-o', 'tgt_file', 'tmpdir')
|
'path/to/efiboot.img', '-no-emul-boot', '-o', 'tgt_file', 'tmpdir')
|
||||||
umount_mock.assert_called_once_with('mountdir')
|
umount_mock.assert_called_once_with('mountdir')
|
||||||
|
|
||||||
@mock.patch.object(images, '_create_root_fs', autospec=True)
|
|
||||||
@mock.patch.object(utils, 'write_to_file', autospec=True)
|
@mock.patch.object(utils, 'write_to_file', autospec=True)
|
||||||
|
@mock.patch.object(images, '_create_root_fs', autospec=True)
|
||||||
@mock.patch.object(utils, 'execute', autospec=True)
|
@mock.patch.object(utils, 'execute', autospec=True)
|
||||||
@mock.patch.object(utils, 'tempdir', autospec=True)
|
@mock.patch.object(utils, 'tempdir', autospec=True)
|
||||||
@mock.patch.object(images, '_generate_cfg', autospec=True)
|
@mock.patch.object(images, '_generate_cfg', autospec=True)
|
||||||
def test_create_isolinux_image_for_uefi_with_esp_image(
|
def test_create_isolinux_image_for_uefi_with_esp_image(
|
||||||
self, gen_cfg_mock, tempdir_mock, execute_mock,
|
self, gen_cfg_mock, tempdir_mock, execute_mock,
|
||||||
write_to_file_mock, create_root_fs_mock):
|
create_root_fs_mock, write_to_file_mock):
|
||||||
|
|
||||||
files_info = {
|
files_info = {
|
||||||
'path/to/kernel': 'vmlinuz',
|
'path/to/kernel': 'vmlinuz',
|
||||||
'path/to/ramdisk': 'initrd',
|
'path/to/ramdisk': 'initrd',
|
||||||
'sourceabspath/to/efiboot.img': 'boot/grub/efiboot.img',
|
'sourceabspath/to/efiboot.img': 'boot/grub/efiboot.img',
|
||||||
|
'/dev/null': 'EFI/MYBOOT/grub.cfg',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_cfg_file = '/EFI/MYBOOT/grub.cfg'
|
||||||
|
CONF.set_override('grub_config_path', grub_cfg_file)
|
||||||
grubcfg = "grubcfg"
|
grubcfg = "grubcfg"
|
||||||
grub_file = 'tmpdir/boot/grub/grub.cfg'
|
|
||||||
gen_cfg_mock.side_effect = (grubcfg,)
|
gen_cfg_mock.side_effect = (grubcfg,)
|
||||||
|
|
||||||
params = ['a=b', 'c']
|
params = ['a=b', 'c']
|
||||||
@ -564,6 +566,7 @@ class FsImageTestCase(base.TestCase):
|
|||||||
mock_file_handle1 = mock.MagicMock(spec=file)
|
mock_file_handle1 = mock.MagicMock(spec=file)
|
||||||
mock_file_handle1.__enter__.return_value = 'mountdir'
|
mock_file_handle1.__enter__.return_value = 'mountdir'
|
||||||
tempdir_mock.side_effect = mock_file_handle, mock_file_handle1
|
tempdir_mock.side_effect = mock_file_handle, mock_file_handle1
|
||||||
|
mountdir_grub_cfg_path = 'tmpdir' + grub_cfg_file
|
||||||
|
|
||||||
images.create_isolinux_image_for_uefi(
|
images.create_isolinux_image_for_uefi(
|
||||||
'tgt_file', 'path/to/kernel', 'path/to/ramdisk',
|
'tgt_file', 'path/to/kernel', 'path/to/ramdisk',
|
||||||
@ -572,7 +575,7 @@ class FsImageTestCase(base.TestCase):
|
|||||||
create_root_fs_mock.assert_called_once_with('tmpdir', files_info)
|
create_root_fs_mock.assert_called_once_with('tmpdir', files_info)
|
||||||
gen_cfg_mock.assert_any_call(params, CONF.grub_config_template,
|
gen_cfg_mock.assert_any_call(params, CONF.grub_config_template,
|
||||||
grub_options)
|
grub_options)
|
||||||
write_to_file_mock.assert_any_call(grub_file, grubcfg)
|
write_to_file_mock.assert_any_call(mountdir_grub_cfg_path, grubcfg)
|
||||||
execute_mock.assert_called_once_with(
|
execute_mock.assert_called_once_with(
|
||||||
'mkisofs', '-r', '-V', 'VMEDIA_BOOT_ISO', '-l', '-e',
|
'mkisofs', '-r', '-V', 'VMEDIA_BOOT_ISO', '-l', '-e',
|
||||||
'boot/grub/efiboot.img', '-no-emul-boot', '-o', 'tgt_file',
|
'boot/grub/efiboot.img', '-no-emul-boot', '-o', 'tgt_file',
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixes an issue in ISO creation for UEFI boot mode when efiboot.img
|
||||||
|
file is provided and the directory of location of grub.cfg file
|
||||||
|
set using config ``[DEFAULT]/grub_config_path`` is not same as
|
||||||
|
that of efiboot.img file. See `story 2006218
|
||||||
|
<https://storyboard.openstack.org/#!/story/2006218>`__ for details.
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user