diff --git a/ironic/drivers/modules/drac/inspect.py b/ironic/drivers/modules/drac/inspect.py index b452da6b03..a8e5a6cde4 100644 --- a/ironic/drivers/modules/drac/inspect.py +++ b/ironic/drivers/modules/drac/inspect.py @@ -23,6 +23,7 @@ from oslo_utils import units from ironic.common import exception from ironic.common.i18n import _ from ironic.common import states +from ironic.common import utils from ironic.drivers import base from ironic.drivers.modules.drac import common as drac_common from ironic import objects @@ -84,6 +85,14 @@ class DracInspect(base.InspectInterface): [self._calculate_cpus(cpu) for cpu in cpus]) properties['cpu_arch'] = 'x86_64' if cpus[0].arch64 else 'x86' + bios_settings = client.list_bios_settings() + current_capabilities = node.properties.get('capabilities', '') + new_capabilities = { + 'boot_mode': bios_settings["BootMode"].current_value.lower()} + capabilties = utils.get_updated_capabilities(current_capabilities, + new_capabilities) + properties['capabilities'] = capabilties + virtual_disks = client.list_virtual_disks() root_disk = self._guess_root_disk(virtual_disks) if root_disk: diff --git a/ironic/tests/unit/drivers/modules/drac/test_inspect.py b/ironic/tests/unit/drivers/modules/drac/test_inspect.py index 9ab83939f8..e76b351f28 100644 --- a/ironic/tests/unit/drivers/modules/drac/test_inspect.py +++ b/ironic/tests/unit/drivers/modules/drac/test_inspect.py @@ -159,7 +159,8 @@ class DracInspectionTestCase(test_utils.BaseDracTest): 'memory_mb': 32768, 'local_gb': 1116, 'cpus': 18, - 'cpu_arch': 'x86_64'} + 'cpu_arch': 'x86_64', + 'capabilities': 'boot_mode:uefi'} mock_client = mock.Mock() mock_get_drac_client.return_value = mock_client mock_client.list_memory.return_value = self.memory @@ -188,6 +189,7 @@ class DracInspectionTestCase(test_utils.BaseDracTest): mock_client.list_cpus.return_value = self.cpus mock_client.list_virtual_disks.side_effect = ( drac_exceptions.BaseClientException('boom')) + mock_client.list_bios_settings.return_value = self.bios_boot_settings with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: @@ -203,7 +205,8 @@ class DracInspectionTestCase(test_utils.BaseDracTest): 'memory_mb': 32768, 'local_gb': 279, 'cpus': 18, - 'cpu_arch': 'x86_64'} + 'cpu_arch': 'x86_64', + 'capabilities': 'boot_mode:uefi'} mock_client = mock.Mock() mock_get_drac_client.return_value = mock_client mock_client.list_memory.return_value = self.memory @@ -234,6 +237,7 @@ class DracInspectionTestCase(test_utils.BaseDracTest): mock_client.list_virtual_disks.return_value = [] mock_client.list_physical_disks.return_value = self.physical_disks mock_client.list_nics.return_value = self.nics + mock_client.list_bios_settings.return_value = self.uefi_boot_settings with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: @@ -249,7 +253,8 @@ class DracInspectionTestCase(test_utils.BaseDracTest): 'memory_mb': 32768, 'local_gb': 1116, 'cpus': 18, - 'cpu_arch': 'x86_64'} + 'cpu_arch': 'x86_64', + 'capabilities': 'boot_mode:uefi'} mock_client = mock.Mock() mock_get_drac_client.return_value = mock_client mock_client.list_memory.return_value = self.memory diff --git a/releasenotes/notes/set-boot-mode-4c42b3fd0b5f5b37.yaml b/releasenotes/notes/set-boot-mode-4c42b3fd0b5f5b37.yaml new file mode 100644 index 0000000000..2345d9379c --- /dev/null +++ b/releasenotes/notes/set-boot-mode-4c42b3fd0b5f5b37.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Set boot_mode in node properties during OOB Introspection + for ``idrac`` hardware type.