← Back to team overview

curtin-dev team mailing list archive

[Merge] ~alanbach/curtin:lp2090874 into curtin:master

 

Alan Baghumian has proposed merging ~alanbach/curtin:lp2090874 into curtin:master.

Commit message:
Add support for arm64 bootloader artifact
detection support for rpm based distributions.
    
LP: #2090874


Requested reviews:
  curtin developers (curtin-dev)
Related bugs:
  Bug #2090874 in curtin: "find_efi_loader is missing bindings for aarch64 artifacts"
  https://bugs.launchpad.net/curtin/+bug/2090874

For more details, see:
https://code.launchpad.net/~alanbach/curtin/+git/curtin/+merge/478095

This updated the find_efi_loader() to include the following additional artifacts for arm64 machines:

os.path.join(efi_path, bootid, 'shimaa64.efi')
os.path.join(efi_path, 'BOOT', 'BOOTAA64.EFI')
os.path.join(efi_path, bootid, 'grubaa64.efi')

The change also adds 11 new unit tests for the arm64 family of artifacts based off the existing amd64 tests.

Before:

----------------------------------------------------------------------
TOTAL                                11279   3402   5104    566    68%
----------------------------------------------------------------------
Ran 1407 tests in 19.312s

After:

----------------------------------------------------------------------
TOTAL                                11279   3402   5104    566    68%
----------------------------------------------------------------------
Ran 1418 tests in 19.552s

-- 
Your team curtin developers is requested to review the proposed merge of ~alanbach/curtin:lp2090874 into curtin:master.
diff --git a/curtin/commands/install_grub.py b/curtin/commands/install_grub.py
index 18bc33d..3d4b757 100644
--- a/curtin/commands/install_grub.py
+++ b/curtin/commands/install_grub.py
@@ -243,6 +243,9 @@ def find_efi_loader(target, bootid):
         os.path.join(efi_path, bootid, 'shimx64.efi'),
         os.path.join(efi_path, 'BOOT', 'BOOTX64.EFI'),
         os.path.join(efi_path, bootid, 'grubx64.efi'),
+        os.path.join(efi_path, bootid, 'shimaa64.efi'),
+        os.path.join(efi_path, 'BOOT', 'BOOTAA64.EFI'),
+        os.path.join(efi_path, bootid, 'grubaa64.efi'),
     ]
     for loader in possible_loaders:
         tloader = target_path(target, path=loader)
diff --git a/tests/unittests/test_commands_install_grub.py b/tests/unittests/test_commands_install_grub.py
index 0289c4b..7b7b547 100644
--- a/tests/unittests/test_commands_install_grub.py
+++ b/tests/unittests/test_commands_install_grub.py
@@ -578,6 +578,9 @@ class TestFindEfiLoader(CiTestCase):
             os.path.join(self.efi_path, self.bootid, 'shimx64.efi'),
             os.path.join(self.efi_path, 'BOOT', 'BOOTX64.EFI'),
             os.path.join(self.efi_path, self.bootid, 'grubx64.efi'),
+            os.path.join(self.efi_path, self.bootid, 'shimaa64.efi'),
+            os.path.join(self.efi_path, 'BOOT', 'BOOTAA64.EFI'),
+            os.path.join(self.efi_path, self.bootid, 'grubaa64.efi'),
         ]
 
     def test_return_none_with_no_loaders(self):
@@ -624,6 +627,33 @@ class TestFindEfiLoader(CiTestCase):
         self.assertTrue(found.endswith(
             os.path.join(self.efi_path, self.bootid, 'grubx64.efi')))
 
+    def test_prefer_existing_bootx_loader_with_no_shim_arm64(self):
+        # touch all loaders in target filesystem
+        loaders = self._possible_loaders()[4:]
+        for loader in loaders:
+            tloader = os.path.join(self.target, loader)
+            util.ensure_dir(os.path.dirname(tloader))
+            with open(tloader, 'w+') as fh:
+                fh.write('\n')
+
+        found = install_grub.find_efi_loader(self.target, self.bootid)
+        self.assertTrue(found.endswith(
+            os.path.join(self.efi_path, 'BOOT', 'BOOTAA64.EFI')))
+
+    def test_prefer_existing_grub_loader_with_no_other_loader_arm64(self):
+        # touch all loaders in target filesystem
+        loaders = self._possible_loaders()[5:]
+        for loader in loaders:
+            tloader = os.path.join(self.target, loader)
+            util.ensure_dir(os.path.dirname(tloader))
+            with open(tloader, 'w+') as fh:
+                fh.write('\n')
+
+        found = install_grub.find_efi_loader(self.target, self.bootid)
+        print(found)
+        self.assertTrue(found.endswith(
+            os.path.join(self.efi_path, self.bootid, 'grubaa64.efi')))
+
 
 class TestGetGrubInstallCommand(CiTestCase):
 
@@ -808,6 +838,34 @@ class TestGenUefiInstallCommands(CiTestCase):
                 grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
                 devices, self.target))
 
+    def test_redhat_install_arm64(self):
+        self.m_os_release.return_value = {'ID': 'rhel'}
+        distroinfo = install_grub.distro.get_distroinfo()
+        grub_name = 'grub2-efi-aa64'
+        grub_target = 'arm64-efi'
+        grub_cmd = 'grub2-install'
+        update_nvram = True
+        devices = ['/dev/disk-a-part1']
+        disk = '/dev/disk-a'
+        part = '1'
+        self.m_get_disk_part.return_value = (disk, part)
+
+        expected_install = [
+            ['efibootmgr', '-v'],
+            [grub_cmd, '--target=%s' % grub_target,
+             '--efi-directory=/boot/efi',
+             '--bootloader-id=redhat', '--recheck'],
+        ]
+        expected_post = [
+            ['grub2-mkconfig', '-o', '/boot/grub2/grub.cfg'],
+            ['efibootmgr', '-v']
+        ]
+        self.assertEqual(
+            (expected_install, expected_post),
+            install_grub.gen_uefi_install_commands(
+                grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
+                devices, self.target))
+
     def test_redhat_install_existing(self):
         # simulate existing bootloaders already installed in target system
         # by touching the files grub would have installed, including shim
@@ -818,6 +876,9 @@ class TestGenUefiInstallCommands(CiTestCase):
                 os.path.join(target_efi_path, bootid, 'shimx64.efi'),
                 os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
                 os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
             ]
             for loader in loaders:
                 util.ensure_dir(os.path.dirname(loader))
@@ -854,6 +915,55 @@ class TestGenUefiInstallCommands(CiTestCase):
                 grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
                 devices, self.target))
 
+    def test_redhat_install_existing_arm64(self):
+        # simulate existing bootloaders already installed in target system
+        # by touching the files grub would have installed, including shim
+        def _enable_loaders(bootid):
+            efi_path = 'boot/efi/EFI'
+            target_efi_path = os.path.join(self.target, efi_path)
+            loaders = [
+                os.path.join(target_efi_path, bootid, 'shimx64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
+            ]
+            for loader in loaders:
+                util.ensure_dir(os.path.dirname(loader))
+                with open(loader, 'w+') as fh:
+                    fh.write('\n')
+
+        self.m_os_release.return_value = {'ID': 'rhel'}
+        distroinfo = install_grub.distro.get_distroinfo()
+        _enable_loaders("redhat")
+        grub_name = 'grub2-efi-aa64'
+        grub_target = 'arm64-efi'
+        grub_cmd = 'grub2-install'
+        update_nvram = True
+        devices = ['/dev/disk-a-part1']
+        disk = '/dev/disk-a'
+        part = '1'
+        self.m_get_disk_part.return_value = (disk, part)
+
+        expected_loader = '/EFI/redhat/shimx64.efi'
+        expected_install = [
+            ['efibootmgr', '-v'],
+            ['efibootmgr', '--create', '--write-signature',
+             '--label', 'redhat', '--disk', disk, '--part', part,
+             '--loader', expected_loader],
+        ]
+        expected_post = [
+            ['grub2-mkconfig', '-o', '/boot/efi/EFI/redhat/grub.cfg'],
+            ['efibootmgr', '-v']
+        ]
+
+        self.assertEqual(
+            (expected_install, expected_post),
+            install_grub.gen_uefi_install_commands(
+                grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
+                devices, self.target))
+
     def test_redhat_install_existing_no_nvram(self):
         # verify grub install command is not executed if update_nvram is False
         # on redhat.
@@ -864,6 +974,9 @@ class TestGenUefiInstallCommands(CiTestCase):
                 os.path.join(target_efi_path, bootid, 'shimx64.efi'),
                 os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
                 os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
             ]
             for loader in loaders:
                 util.write_file(loader, content="")
@@ -895,6 +1008,50 @@ class TestGenUefiInstallCommands(CiTestCase):
                 grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
                 devices, self.target))
 
+    def test_redhat_install_existing_no_nvram_arm64(self):
+        # verify grub install command is not executed if update_nvram is False
+        # on redhat.
+        def _enable_loaders(bootid):
+            efi_path = 'boot/efi/EFI'
+            target_efi_path = os.path.join(self.target, efi_path)
+            loaders = [
+                os.path.join(target_efi_path, bootid, 'shimx64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
+            ]
+            for loader in loaders:
+                util.write_file(loader, content="")
+
+        self.m_os_release.return_value = {'ID': 'redhat'}
+        distroinfo = install_grub.distro.get_distroinfo()
+        bootid = distroinfo.variant
+        _enable_loaders(bootid)
+        grub_name = 'grub2-efi-aa64'
+        grub_target = 'arm-efi'
+        grub_cmd = 'grub2-install'
+        update_nvram = False
+        devices = ['/dev/disk-a-part1']
+        disk = '/dev/disk-a'
+        part = '1'
+        self.m_get_disk_part.return_value = (disk, part)
+
+        expected_install = [
+            ['efibootmgr', '-v'],
+        ]
+        expected_post = [
+            ['grub2-mkconfig', '-o', '/boot/efi/EFI/%s/grub.cfg' % bootid],
+            ['efibootmgr', '-v']
+        ]
+
+        self.assertEqual(
+            (expected_install, expected_post),
+            install_grub.gen_uefi_install_commands(
+                grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
+                devices, self.target))
+
     def test_suse_install(self):
         self.m_os_release.return_value = {'ID': 'suse'}
         distroinfo = install_grub.distro.get_distroinfo()
@@ -923,6 +1080,34 @@ class TestGenUefiInstallCommands(CiTestCase):
                 grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
                 devices, self.target))
 
+    def test_suse_install_arm64(self):
+        self.m_os_release.return_value = {'ID': 'suse'}
+        distroinfo = install_grub.distro.get_distroinfo()
+        grub_name = 'grub2-efi-aa64'
+        grub_target = 'arm-efi'
+        grub_cmd = 'grub2-install'
+        update_nvram = True
+        devices = ['/dev/disk-a-part1']
+        disk = '/dev/disk-a'
+        part = '1'
+        self.m_get_disk_part.return_value = (disk, part)
+
+        expected_install = [
+            ['efibootmgr', '-v'],
+            [grub_cmd, '--target=%s' % grub_target,
+             '--efi-directory=/boot/efi',
+             '--bootloader-id=suse', '--recheck'],
+        ]
+        expected_post = [
+            ['grub2-mkconfig', '-o', '/boot/grub2/grub.cfg'],
+            ['efibootmgr', '-v']
+        ]
+        self.assertEqual(
+            (expected_install, expected_post),
+            install_grub.gen_uefi_install_commands(
+                grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
+                devices, self.target))
+
     def test_suse_install_existing(self):
         # simulate existing bootloaders already installed in target system
         # by touching the files grub would have installed, including shim
@@ -933,6 +1118,9 @@ class TestGenUefiInstallCommands(CiTestCase):
                 os.path.join(target_efi_path, bootid, 'shimx64.efi'),
                 os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
                 os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
             ]
             for loader in loaders:
                 util.ensure_dir(os.path.dirname(loader))
@@ -969,6 +1157,55 @@ class TestGenUefiInstallCommands(CiTestCase):
                 grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
                 devices, self.target))
 
+    def test_suse_install_existing_arm64(self):
+        # simulate existing bootloaders already installed in target system
+        # by touching the files grub would have installed, including shim
+        def _enable_loaders(bootid):
+            efi_path = 'boot/efi/EFI'
+            target_efi_path = os.path.join(self.target, efi_path)
+            loaders = [
+                os.path.join(target_efi_path, bootid, 'shimx64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
+            ]
+            for loader in loaders:
+                util.ensure_dir(os.path.dirname(loader))
+                with open(loader, 'w+') as fh:
+                    fh.write('\n')
+
+        self.m_os_release.return_value = {'ID': 'suse'}
+        distroinfo = install_grub.distro.get_distroinfo()
+        _enable_loaders("suse")
+        grub_name = 'grub2-efi-aa64'
+        grub_target = 'arm64-efi'
+        grub_cmd = 'grub2-install'
+        update_nvram = True
+        devices = ['/dev/disk-a-part1']
+        disk = '/dev/disk-a'
+        part = '1'
+        self.m_get_disk_part.return_value = (disk, part)
+
+        expected_loader = '/EFI/suse/shimx64.efi'
+        expected_install = [
+            ['efibootmgr', '-v'],
+            ['efibootmgr', '--create', '--write-signature',
+             '--label', 'suse', '--disk', disk, '--part', part,
+             '--loader', expected_loader],
+        ]
+        expected_post = [
+            ['grub2-mkconfig', '-o', '/boot/efi/EFI/suse/grub.cfg'],
+            ['efibootmgr', '-v']
+        ]
+
+        self.assertEqual(
+            (expected_install, expected_post),
+            install_grub.gen_uefi_install_commands(
+                grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
+                devices, self.target))
+
     def test_suse_install_existing_no_nvram(self):
         # verify grub install command is not executed if update_nvram is False
         # on suse.
@@ -979,6 +1216,9 @@ class TestGenUefiInstallCommands(CiTestCase):
                 os.path.join(target_efi_path, bootid, 'shimx64.efi'),
                 os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
                 os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
             ]
             for loader in loaders:
                 util.write_file(loader, content="")
@@ -1010,6 +1250,50 @@ class TestGenUefiInstallCommands(CiTestCase):
                 grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
                 devices, self.target))
 
+    def test_suse_install_existing_no_nvram_arm64(self):
+        # verify grub install command is not executed if update_nvram is False
+        # on suse.
+        def _enable_loaders(bootid):
+            efi_path = 'boot/efi/EFI'
+            target_efi_path = os.path.join(self.target, efi_path)
+            loaders = [
+                os.path.join(target_efi_path, bootid, 'shimx64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
+            ]
+            for loader in loaders:
+                util.write_file(loader, content="")
+
+        self.m_os_release.return_value = {'ID': 'suse'}
+        distroinfo = install_grub.distro.get_distroinfo()
+        bootid = distroinfo.variant
+        _enable_loaders(bootid)
+        grub_name = 'grub2-efi-aa64'
+        grub_target = 'arm-efi'
+        grub_cmd = 'grub2-install'
+        update_nvram = False
+        devices = ['/dev/disk-a-part1']
+        disk = '/dev/disk-a'
+        part = '1'
+        self.m_get_disk_part.return_value = (disk, part)
+
+        expected_install = [
+            ['efibootmgr', '-v'],
+        ]
+        expected_post = [
+            ['grub2-mkconfig', '-o', '/boot/efi/EFI/%s/grub.cfg' % bootid],
+            ['efibootmgr', '-v']
+        ]
+
+        self.assertEqual(
+            (expected_install, expected_post),
+            install_grub.gen_uefi_install_commands(
+                grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
+                devices, self.target))
+
     def test_ol_install(self):
         self.m_os_release.return_value = {'ID': 'ol'}
         distroinfo = install_grub.distro.get_distroinfo()
@@ -1038,6 +1322,34 @@ class TestGenUefiInstallCommands(CiTestCase):
                 grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
                 devices, self.target))
 
+    def test_ol_install_arm64(self):
+        self.m_os_release.return_value = {'ID': 'ol'}
+        distroinfo = install_grub.distro.get_distroinfo()
+        grub_name = 'grub2-efi-aa64'
+        grub_target = 'arm64-efi'
+        grub_cmd = 'grub2-install'
+        update_nvram = True
+        devices = ['/dev/disk-a-part1']
+        disk = '/dev/disk-a'
+        part = '1'
+        self.m_get_disk_part.return_value = (disk, part)
+
+        expected_install = [
+            ['efibootmgr', '-v'],
+            [grub_cmd, '--target=%s' % grub_target,
+             '--efi-directory=/boot/efi',
+             '--bootloader-id=redhat', '--recheck'],
+        ]
+        expected_post = [
+            ['grub2-mkconfig', '-o', '/boot/grub2/grub.cfg'],
+            ['efibootmgr', '-v']
+        ]
+        self.assertEqual(
+            (expected_install, expected_post),
+            install_grub.gen_uefi_install_commands(
+                grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
+                devices, self.target))
+
     def test_ol_install_existing(self):
         # simulate existing bootloaders already installed in target system
         # by touching the files grub would have installed, including shim
@@ -1048,6 +1360,9 @@ class TestGenUefiInstallCommands(CiTestCase):
                 os.path.join(target_efi_path, bootid, 'shimx64.efi'),
                 os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
                 os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
             ]
             for loader in loaders:
                 util.ensure_dir(os.path.dirname(loader))
@@ -1084,6 +1399,55 @@ class TestGenUefiInstallCommands(CiTestCase):
                 grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
                 devices, self.target))
 
+    def test_ol_install_existing_arm64(self):
+        # simulate existing bootloaders already installed in target system
+        # by touching the files grub would have installed, including shim
+        def _enable_loaders(bootid):
+            efi_path = 'boot/efi/EFI'
+            target_efi_path = os.path.join(self.target, efi_path)
+            loaders = [
+                os.path.join(target_efi_path, bootid, 'shimx64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
+            ]
+            for loader in loaders:
+                util.ensure_dir(os.path.dirname(loader))
+                with open(loader, 'w+') as fh:
+                    fh.write('\n')
+
+        self.m_os_release.return_value = {'ID': 'ol'}
+        distroinfo = install_grub.distro.get_distroinfo()
+        _enable_loaders("redhat")
+        grub_name = 'grub2-efi-aa64'
+        grub_target = 'arm64-efi'
+        grub_cmd = 'grub2-install'
+        update_nvram = True
+        devices = ['/dev/disk-a-part1']
+        disk = '/dev/disk-a'
+        part = '1'
+        self.m_get_disk_part.return_value = (disk, part)
+
+        expected_loader = '/EFI/redhat/shimx64.efi'
+        expected_install = [
+            ['efibootmgr', '-v'],
+            ['efibootmgr', '--create', '--write-signature',
+             '--label', 'redhat', '--disk', disk, '--part', part,
+             '--loader', expected_loader],
+        ]
+        expected_post = [
+            ['grub2-mkconfig', '-o', '/boot/efi/EFI/redhat/grub.cfg'],
+            ['efibootmgr', '-v']
+        ]
+
+        self.assertEqual(
+            (expected_install, expected_post),
+            install_grub.gen_uefi_install_commands(
+                grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
+                devices, self.target))
+
     def test_ol_install_existing_no_nvram(self):
         # verify grub install command is not executed if update_nvram is False
         # on ol.
@@ -1094,6 +1458,9 @@ class TestGenUefiInstallCommands(CiTestCase):
                 os.path.join(target_efi_path, bootid, 'shimx64.efi'),
                 os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
                 os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
             ]
             for loader in loaders:
                 util.write_file(loader, content="")
@@ -1124,6 +1491,49 @@ class TestGenUefiInstallCommands(CiTestCase):
                 grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
                 devices, self.target))
 
+    def test_ol_install_existing_no_nvram_arm64(self):
+        # verify grub install command is not executed if update_nvram is False
+        # on ol.
+        def _enable_loaders(bootid):
+            efi_path = 'boot/efi/EFI'
+            target_efi_path = os.path.join(self.target, efi_path)
+            loaders = [
+                os.path.join(target_efi_path, bootid, 'shimx64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTX64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubx64.efi'),
+                os.path.join(target_efi_path, bootid, 'shimaa64.efi'),
+                os.path.join(target_efi_path, 'BOOT', 'BOOTAA64.EFI'),
+                os.path.join(target_efi_path, bootid, 'grubaa64.efi'),
+            ]
+            for loader in loaders:
+                util.write_file(loader, content="")
+
+        self.m_os_release.return_value = {'ID': 'ol'}
+        distroinfo = install_grub.distro.get_distroinfo()
+        _enable_loaders("redhat")
+        grub_name = 'grub2-efi-aa64'
+        grub_target = 'arm64-efi'
+        grub_cmd = 'grub2-install'
+        update_nvram = False
+        devices = ['/dev/disk-a-part1']
+        disk = '/dev/disk-a'
+        part = '1'
+        self.m_get_disk_part.return_value = (disk, part)
+
+        expected_install = [
+            ['efibootmgr', '-v'],
+        ]
+        expected_post = [
+            ['grub2-mkconfig', '-o', '/boot/efi/EFI/redhat/grub.cfg'],
+            ['efibootmgr', '-v']
+        ]
+
+        self.assertEqual(
+            (expected_install, expected_post),
+            install_grub.gen_uefi_install_commands(
+                grub_name, grub_target, grub_cmd, update_nvram, distroinfo,
+                devices, self.target))
+
 
 class TestGenInstallCommands(CiTestCase):
 

Follow ups