From ed3f00f07ab610960a41691cd55a28b2d7af0457 Mon Sep 17 00:00:00 2001 From: Dmitry Tantsur Date: Mon, 8 Jun 2020 15:10:05 +0200 Subject: [PATCH] Make the install_bootloader command asynchronous It does not return anything, so it makes no point for it to be synchronous. Ironic always calls it with wait=True, so there is no problem with backward compatibility either. Change-Id: I44fec2e0cb54486328ce71263613d8592e384870 (cherry picked from commit 7e5fe1121e23fad43a7c6b418bdad9fbe69981a1) --- ironic_python_agent/extensions/image.py | 2 +- .../tests/unit/extensions/test_image.py | 23 ++++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/ironic_python_agent/extensions/image.py b/ironic_python_agent/extensions/image.py index ab5721386..7362ebe34 100644 --- a/ironic_python_agent/extensions/image.py +++ b/ironic_python_agent/extensions/image.py @@ -687,7 +687,7 @@ def _install_grub2(device, root_uuid, efi_system_part_uuid=None, class ImageExtension(base.BaseAgentExtension): - @base.sync_command('install_bootloader') + @base.async_command('install_bootloader') def install_bootloader(self, root_uuid, efi_system_part_uuid=None, prep_boot_part_uuid=None, target_boot_mode='bios'): diff --git a/ironic_python_agent/tests/unit/extensions/test_image.py b/ironic_python_agent/tests/unit/extensions/test_image.py index 546d18199..9dbec95e6 100644 --- a/ironic_python_agent/tests/unit/extensions/test_image.py +++ b/ironic_python_agent/tests/unit/extensions/test_image.py @@ -54,7 +54,8 @@ class TestImageExtension(base.IronicAgentTest): mock_dispatch.side_effect = [ self.fake_dev, hardware.BootInfo(current_boot_mode='bios') ] - self.agent_extension.install_bootloader(root_uuid=self.fake_root_uuid) + self.agent_extension.install_bootloader( + root_uuid=self.fake_root_uuid).join() mock_dispatch.assert_any_call('get_os_install_device') mock_dispatch.assert_any_call('get_boot_info') self.assertEqual(2, mock_dispatch.call_count) @@ -79,7 +80,7 @@ class TestImageExtension(base.IronicAgentTest): root_uuid=self.fake_root_uuid, efi_system_part_uuid=self.fake_efi_system_part_uuid, target_boot_mode='uefi' - ) + ).join() mock_dispatch.assert_any_call('get_os_install_device') mock_dispatch.assert_any_call('get_boot_info') self.assertEqual(2, mock_dispatch.call_count) @@ -131,7 +132,7 @@ class TestImageExtension(base.IronicAgentTest): self.agent_extension.install_bootloader( root_uuid=self.fake_root_uuid, - efi_system_part_uuid=self.fake_efi_system_part_uuid) + efi_system_part_uuid=self.fake_efi_system_part_uuid).join() mock_dispatch.assert_any_call('get_os_install_device') mock_dispatch.assert_any_call('get_boot_info') @@ -179,7 +180,7 @@ class TestImageExtension(base.IronicAgentTest): self.agent_extension.install_bootloader( root_uuid=self.fake_root_uuid, - efi_system_part_uuid=None) + efi_system_part_uuid=None).join() mock_dispatch.assert_any_call('get_os_install_device') mock_dispatch.assert_any_call('get_boot_info') @@ -234,7 +235,7 @@ efibootmgr: ** Warning ** : Boot0005 has same label ironic1\n self.agent_extension.install_bootloader( root_uuid=self.fake_root_uuid, - efi_system_part_uuid=None) + efi_system_part_uuid=None).join() mock_dispatch.assert_any_call('get_os_install_device') mock_dispatch.assert_any_call('get_boot_info') @@ -289,7 +290,7 @@ efibootmgr: ** Warning ** : Boot0005 has same label ironic1\n self.agent_extension.install_bootloader( root_uuid=self.fake_root_uuid, - efi_system_part_uuid=None) + efi_system_part_uuid=None).join() mock_dispatch.assert_any_call('get_os_install_device') mock_dispatch.assert_any_call('get_boot_info') @@ -309,7 +310,7 @@ efibootmgr: ** Warning ** : Boot0005 has same label ironic1\n self.agent_extension.install_bootloader( root_uuid=self.fake_root_uuid, efi_system_part_uuid=None, - prep_boot_part_uuid=self.fake_prep_boot_part_uuid) + prep_boot_part_uuid=self.fake_prep_boot_part_uuid).join() mock_dispatch.assert_any_call('get_os_install_device') mock_dispatch.assert_any_call('get_boot_info') self.assertEqual(2, mock_dispatch.call_count) @@ -331,10 +332,10 @@ efibootmgr: ** Warning ** : Boot0005 has same label ironic1\n self.fake_dev, hardware.BootInfo(current_boot_mode='uefi') ] mock_execute.side_effect = FileNotFoundError - self.assertRaises(FileNotFoundError, - self.agent_extension.install_bootloader, - root_uuid=self.fake_root_uuid, - efi_system_part_uuid=None) + result = self.agent_extension.install_bootloader( + root_uuid=self.fake_root_uuid, + efi_system_part_uuid=None).join() + self.assertIsNotNone(result.command_error) expected = [mock.call('efibootmgr', '--version')] mock_execute.assert_has_calls(expected)