From a4311fb70479619169d4e34c487acb0c1587129a Mon Sep 17 00:00:00 2001 From: Dmitry Tantsur Date: Tue, 14 Jul 2020 16:26:16 +0200 Subject: [PATCH] Add missing agent RAID compatibility for ilo5 and idrac Software RAID relies on it. Change-Id: Id220ce3a2c2821ad1841add20f2138e65d1786bf (cherry picked from commit c376cb32196fdd6c8be6806395479ea8d0db13ff) --- ironic/drivers/drac.py | 8 +++--- ironic/drivers/ilo.py | 8 +++--- ironic/tests/unit/drivers/test_drac.py | 17 ++++++++----- ironic/tests/unit/drivers/test_ilo.py | 25 +++++++++++-------- .../missing-sw-raid-b7fdc9259612970d.yaml | 5 ++++ 5 files changed, 38 insertions(+), 25 deletions(-) create mode 100644 releasenotes/notes/missing-sw-raid-b7fdc9259612970d.yaml diff --git a/ironic/drivers/drac.py b/ironic/drivers/drac.py index 430105eae5..453f178764 100644 --- a/ironic/drivers/drac.py +++ b/ironic/drivers/drac.py @@ -25,7 +25,6 @@ from ironic.drivers.modules.drac import management from ironic.drivers.modules.drac import power from ironic.drivers.modules.drac import raid from ironic.drivers.modules.drac import vendor_passthru -from ironic.drivers.modules import inspector from ironic.drivers.modules import ipxe from ironic.drivers.modules import noop from ironic.drivers.modules import pxe @@ -69,13 +68,14 @@ class IDRACHardware(generic.GenericHardware): # if it is enabled by an operator (implying that the service is # installed). return [drac_inspect.DracWSManInspect, drac_inspect.DracInspect, - drac_inspect.DracRedfishInspect, inspector.Inspector, - noop.NoInspect] + drac_inspect.DracRedfishInspect] + super( + IDRACHardware, self).supported_inspect_interfaces @property def supported_raid_interfaces(self): """List of supported raid interfaces.""" - return [raid.DracWSManRAID, raid.DracRAID, noop.NoRAID] + return [raid.DracWSManRAID, raid.DracRAID] + super( + IDRACHardware, self).supported_raid_interfaces @property def supported_vendor_interfaces(self): diff --git a/ironic/drivers/ilo.py b/ironic/drivers/ilo.py index 87fb19cba2..4b824fffcc 100644 --- a/ironic/drivers/ilo.py +++ b/ironic/drivers/ilo.py @@ -24,7 +24,6 @@ from ironic.drivers.modules.ilo import management from ironic.drivers.modules.ilo import power from ironic.drivers.modules.ilo import raid from ironic.drivers.modules.ilo import vendor -from ironic.drivers.modules import inspector from ironic.drivers.modules import noop @@ -53,8 +52,8 @@ class IloHardware(generic.GenericHardware): @property def supported_inspect_interfaces(self): """List of supported inspect interfaces.""" - return [inspect.IloInspect, inspector.Inspector, - noop.NoInspect] + return [inspect.IloInspect] + super( + IloHardware, self).supported_inspect_interfaces @property def supported_management_interfaces(self): @@ -81,7 +80,8 @@ class Ilo5Hardware(IloHardware): @property def supported_raid_interfaces(self): """List of supported raid interfaces.""" - return [raid.Ilo5RAID, noop.NoRAID] + return [raid.Ilo5RAID] + super( + Ilo5Hardware, self).supported_raid_interfaces @property def supported_management_interfaces(self): diff --git a/ironic/tests/unit/drivers/test_drac.py b/ironic/tests/unit/drivers/test_drac.py index 748c5e4661..8a551070b9 100644 --- a/ironic/tests/unit/drivers/test_drac.py +++ b/ironic/tests/unit/drivers/test_drac.py @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +from oslo_utils import uuidutils + from ironic.conductor import task_manager from ironic.drivers.modules import agent from ironic.drivers.modules import drac @@ -42,7 +44,7 @@ class IDRACHardwareTestCase(db_base.DbTestCase): 'no-inspect'], enabled_network_interfaces=['flat', 'neutron', 'noop'], enabled_raid_interfaces=[ - 'idrac', 'idrac-wsman', 'no-raid'], + 'idrac', 'idrac-wsman', 'no-raid', 'agent'], enabled_vendor_interfaces=[ 'idrac', 'idrac-wsman', 'no-vendor'], enabled_bios_interfaces=[ @@ -108,11 +110,14 @@ class IDRACHardwareTestCase(db_base.DbTestCase): inspect=inspector.Inspector) def test_override_with_raid(self): - node = obj_utils.create_test_node(self.context, driver='idrac', - raid_interface='no-raid') - with task_manager.acquire(self.context, node.id) as task: - self._validate_interfaces(task.driver, - raid=noop.NoRAID) + for iface, impl in [('agent', agent.AgentRAID), + ('no-raid', noop.NoRAID)]: + node = obj_utils.create_test_node(self.context, + uuid=uuidutils.generate_uuid(), + driver='idrac', + raid_interface=iface) + with task_manager.acquire(self.context, node.id) as task: + self._validate_interfaces(task.driver, raid=impl) def test_override_no_vendor(self): node = obj_utils.create_test_node(self.context, driver='idrac', diff --git a/ironic/tests/unit/drivers/test_ilo.py b/ironic/tests/unit/drivers/test_ilo.py index ac719b763c..3e85264363 100644 --- a/ironic/tests/unit/drivers/test_ilo.py +++ b/ironic/tests/unit/drivers/test_ilo.py @@ -16,10 +16,11 @@ Test class for iLO Drivers """ +from oslo_utils import uuidutils + from ironic.conductor import task_manager from ironic.drivers import ilo from ironic.drivers.modules import agent -from ironic.drivers.modules.ilo import management from ironic.drivers.modules.ilo import raid from ironic.drivers.modules import inspector from ironic.drivers.modules import iscsi_deploy @@ -187,16 +188,6 @@ class Ilo5HardwareTestCase(db_base.DbTestCase): def test_default_interfaces(self): node = obj_utils.create_test_node(self.context, driver='ilo5') with task_manager.acquire(self.context, node.id) as task: - self.assertIsInstance(task.driver.raid, raid.Ilo5RAID) - self.assertIsInstance(task.driver.management, - management.Ilo5Management) - - def test_override_with_no_raid(self): - self.config(enabled_raid_interfaces=['no-raid', 'ilo5']) - node = obj_utils.create_test_node(self.context, driver='ilo5', - raid_interface='no-raid') - with task_manager.acquire(self.context, node.id) as task: - self.assertIsInstance(task.driver.raid, noop.NoRAID) self.assertIsInstance(task.driver.boot, ilo.boot.IloVirtualMediaBoot) self.assertIsInstance(task.driver.console, @@ -209,7 +200,19 @@ class Ilo5HardwareTestCase(db_base.DbTestCase): ilo.management.IloManagement) self.assertIsInstance(task.driver.power, ilo.power.IloPower) + self.assertIsInstance(task.driver.raid, raid.Ilo5RAID) self.assertIsInstance(task.driver.rescue, noop.NoRescue) self.assertIsInstance(task.driver.vendor, ilo.vendor.VendorPassthru) + + def test_override_raid(self): + self.config(enabled_raid_interfaces=['agent', 'no-raid', 'ilo5']) + for iface, impl in [('agent', agent.AgentRAID), + ('no-raid', noop.NoRAID)]: + node = obj_utils.create_test_node(self.context, + uuid=uuidutils.generate_uuid(), + driver='ilo5', + raid_interface=iface) + with task_manager.acquire(self.context, node.id) as task: + self.assertIsInstance(task.driver.raid, impl) diff --git a/releasenotes/notes/missing-sw-raid-b7fdc9259612970d.yaml b/releasenotes/notes/missing-sw-raid-b7fdc9259612970d.yaml new file mode 100644 index 0000000000..0b90cfda78 --- /dev/null +++ b/releasenotes/notes/missing-sw-raid-b7fdc9259612970d.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixes missing ``agent`` RAID compatibility for the ``ilo5`` and ``idrac`` + hardware type preventing software RAID for working with them.