From 30f30136f1c41cdbdad6e74183be2233255ad527 Mon Sep 17 00:00:00 2001 From: Imre Farkas Date: Wed, 7 Sep 2016 16:18:13 +0200 Subject: [PATCH] Fix nits on DRAC OOB inspection patch This is a follow-up on da93b01f32e1b9d6efe435c16c9996c3cc45823a. Change-Id: I310d8d3e899567d44b42908a26f7f0779775c11b --- ironic/drivers/modules/drac/inspect.py | 16 +++++++++--- .../unit/drivers/modules/drac/test_inspect.py | 26 +++++++++++++++++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/ironic/drivers/modules/drac/inspect.py b/ironic/drivers/modules/drac/inspect.py index 1357652465..679873a529 100644 --- a/ironic/drivers/modules/drac/inspect.py +++ b/ironic/drivers/modules/drac/inspect.py @@ -77,8 +77,9 @@ class DracInspect(base.InspectInterface): properties['memory_mb'] = sum( [memory.size_mb for memory in client.list_memory()]) cpus = client.list_cpus() - properties['cpus'] = len(cpus) - properties['cpu_arch'] = 'x86_64' if cpus[0].arch64 else 'x86' + if cpus: + properties['cpus'] = len(cpus) + properties['cpu_arch'] = 'x86_64' if cpus[0].arch64 else 'x86' virtual_disks = client.list_virtual_disks() root_disk = self._guess_root_disk(virtual_disks) @@ -133,8 +134,15 @@ class DracInspect(base.InspectInterface): LOG.info(_LI('Node %s successfully inspected.'), node.uuid) return states.MANAGEABLE - def _guess_root_disk(self, disks, min_size_required=4 * units.Ki): + def _guess_root_disk(self, disks, min_size_required_mb=4 * units.Ki): + """Find a root disk. + + :param disks: list of disks. + :param min_size_required_mb: minimum required size of the root disk in + megabytes. + :returns: root disk. + """ disks.sort(key=lambda disk: disk.size_mb) for disk in disks: - if disk.size_mb >= min_size_required: + if disk.size_mb >= min_size_required_mb: return disk diff --git a/ironic/tests/unit/drivers/modules/drac/test_inspect.py b/ironic/tests/unit/drivers/modules/drac/test_inspect.py index 34786e90e2..5456344c57 100644 --- a/ironic/tests/unit/drivers/modules/drac/test_inspect.py +++ b/ironic/tests/unit/drivers/modules/drac/test_inspect.py @@ -207,6 +207,24 @@ class DracInspectionTestCase(db_base.DbTestCase): self.assertEqual(states.MANAGEABLE, return_value) self.assertEqual(2, mock_port_create.call_count) + @mock.patch.object(drac_common, 'get_drac_client', spec_set=True, + autospec=True) + @mock.patch.object(objects.Port, 'create', spec_set=True, autospec=True) + def test_inspect_hardware_no_cpu( + self, mock_port_create, mock_get_drac_client): + mock_client = mock.Mock() + mock_get_drac_client.return_value = mock_client + mock_client.list_memory.return_value = self.memory + mock_client.list_cpus.return_value = [] + 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 + + with task_manager.acquire(self.context, self.node.uuid, + shared=True) as task: + self.assertRaises(exception.HardwareInspectionFailure, + task.driver.inspect.inspect_hardware, task) + @mock.patch.object(drac_common, 'get_drac_client', spec_set=True, autospec=True) @mock.patch.object(objects.Port, 'create', spec_set=True, autospec=True) @@ -233,3 +251,11 @@ class DracInspectionTestCase(db_base.DbTestCase): self.assertEqual(expected_node_properties, self.node.properties) self.assertEqual(states.MANAGEABLE, return_value) self.assertEqual(2, mock_port_create.call_count) + + def test__guess_root_disk(self): + with task_manager.acquire(self.context, self.node.uuid, + shared=True) as task: + root_disk = task.driver.inspect._guess_root_disk( + self.physical_disks) + + self.assertEqual(285888, root_disk.size_mb)