Remove the iDRAC classic drivers
This removes the pxe_drac and pxe_drac_inspector classic drivers. Change-Id: I2837bc626425869008d9222523b05e2ce5175c19
This commit is contained in:
parent
5b199fa3dc
commit
09e89c09d1
@ -113,7 +113,7 @@ IRONIC_HW_ARCH=${IRONIC_HW_ARCH:-x86_64}
|
||||
# *_oneview:
|
||||
# <Server Hardware URI> <Server Hardware Type URI> <Enclosure Group URI> <Server Profile Template URI> <MAC of primary connection> <Applied Server Profile URI>
|
||||
#
|
||||
# *_drac:
|
||||
# idrac:
|
||||
# <BMC address> <MAC address> <BMC username> <BMC password>
|
||||
#
|
||||
# * irmc:
|
||||
@ -293,7 +293,7 @@ fi
|
||||
#
|
||||
# Additional valid choices if IRONIC_IS_HARDWARE == true are:
|
||||
# ``pxe_iscsi_cimc``, ``pxe_agent_cimc``, ``pxe_ucs``, ``pxe_cimc``,
|
||||
# ``*_pxe_oneview`` and ``pxe_drac``
|
||||
# ``*_pxe_oneview`` and ``idrac``
|
||||
IRONIC_DEPLOY_DRIVER=${IRONIC_DEPLOY_DRIVER:-pxe_ipmitool}
|
||||
|
||||
# If the requested driver is not yet enable, enable it, if it is not it will fail anyway
|
||||
@ -639,7 +639,7 @@ function is_deployed_by_ilo {
|
||||
}
|
||||
|
||||
function is_deployed_by_drac {
|
||||
[[ -z "${IRONIC_DEPLOY_DRIVER##*_drac}" ]] && return 0
|
||||
[[ "${IRONIC_DEPLOY_DRIVER}" == idrac ]] && return 0
|
||||
return 1
|
||||
}
|
||||
|
||||
@ -659,7 +659,7 @@ function is_deployed_by_irmc {
|
||||
}
|
||||
|
||||
function is_drac_enabled {
|
||||
[[ -z "${IRONIC_ENABLED_DRIVERS##*_drac}" ]] && return 0
|
||||
[[ -z "${IRONIC_ENABLED_HARDWARE_TYPES%%*idrac*}" ]] && return 0
|
||||
return 1
|
||||
}
|
||||
|
||||
|
@ -5,22 +5,17 @@ iDRAC drivers
|
||||
Overview
|
||||
========
|
||||
|
||||
iDRAC_ hardware is supported by the ``idrac`` hardware type and the following
|
||||
classic drivers:
|
||||
|
||||
* ``pxe_drac`` (using out-of-band inspection)
|
||||
* ``pxe_drac_inspector`` (using in-band inspection via **ironic-inspector**)
|
||||
|
||||
It is also supported by the standard ``ipmi`` hardware type, though with
|
||||
a smaller feature set.
|
||||
iDRAC_ hardware is supported by the ``idrac`` hardware type. It is also
|
||||
supported by the standard ``ipmi`` hardware type, though with a smaller
|
||||
feature set.
|
||||
|
||||
.. TODO(dtantsur): supported hardware
|
||||
|
||||
Enabling
|
||||
========
|
||||
|
||||
All iDRAC drivers require the ``python-dracclient`` library to be installed,
|
||||
for example::
|
||||
The ``idrac`` hardware type requires the ``python-dracclient`` library to be
|
||||
installed, for example::
|
||||
|
||||
sudo pip install 'python-dracclient>=1.3.0'
|
||||
|
||||
|
@ -311,7 +311,7 @@ option, for example:
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
enabled_drivers = pxe_ipmitool,pxe_drac
|
||||
enabled_drivers = pxe_ipmitool
|
||||
|
||||
The names in this comma-separated list are entry point names of the drivers.
|
||||
They have to be available at conductor start-up, and all dependencies must
|
||||
|
@ -16,11 +16,7 @@ DRAC Driver for remote system management using Dell Remote Access Card.
|
||||
"""
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_utils import importutils
|
||||
|
||||
from ironic.common import exception
|
||||
from ironic.common.i18n import _
|
||||
from ironic.drivers import base
|
||||
from ironic.drivers import generic
|
||||
from ironic.drivers.modules.drac import inspect as drac_inspect
|
||||
from ironic.drivers.modules.drac import management
|
||||
@ -28,9 +24,7 @@ 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 iscsi_deploy
|
||||
from ironic.drivers.modules import noop
|
||||
from ironic.drivers.modules import pxe
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
@ -70,57 +64,3 @@ class IDRACHardware(generic.GenericHardware):
|
||||
def supported_vendor_interfaces(self):
|
||||
"""List of supported vendor interfaces."""
|
||||
return [vendor_passthru.DracVendorPassthru, noop.NoVendor]
|
||||
|
||||
|
||||
class PXEDracDriver(base.BaseDriver):
|
||||
"""DRAC driver using PXE for deploy."""
|
||||
|
||||
def __init__(self):
|
||||
if not importutils.try_import('dracclient'):
|
||||
raise exception.DriverLoadError(
|
||||
driver=self.__class__.__name__,
|
||||
reason=_('Unable to import python-dracclient library'))
|
||||
|
||||
self.power = power.DracPower()
|
||||
self.boot = pxe.PXEBoot()
|
||||
self.deploy = iscsi_deploy.ISCSIDeploy()
|
||||
self.management = management.DracManagement()
|
||||
self.raid = raid.DracRAID()
|
||||
self.vendor = vendor_passthru.DracVendorPassthru()
|
||||
self.inspect = drac_inspect.DracInspect()
|
||||
|
||||
@classmethod
|
||||
def to_hardware_type(cls):
|
||||
return 'idrac', {'boot': 'pxe',
|
||||
'deploy': 'iscsi',
|
||||
'inspect': 'idrac',
|
||||
'management': 'idrac',
|
||||
'power': 'idrac',
|
||||
'raid': 'idrac',
|
||||
'vendor': 'idrac'}
|
||||
|
||||
|
||||
class PXEDracInspectorDriver(PXEDracDriver):
|
||||
"""Drac driver using PXE for deploy and OOB inspection interface."""
|
||||
|
||||
def __init__(self):
|
||||
super(PXEDracInspectorDriver, self).__init__()
|
||||
self.inspect = inspector.Inspector.create_if_enabled(
|
||||
'PXEDracInspectorDriver')
|
||||
|
||||
@classmethod
|
||||
def to_hardware_type(cls):
|
||||
# NOTE(dtantsur): classic drivers are not affected by the
|
||||
# enabled_inspect_interfaces configuration option.
|
||||
if CONF.inspector.enabled:
|
||||
inspect_interface = 'inspector'
|
||||
else:
|
||||
inspect_interface = 'no-inspect'
|
||||
|
||||
return 'idrac', {'boot': 'pxe',
|
||||
'deploy': 'iscsi',
|
||||
'inspect': inspect_interface,
|
||||
'management': 'idrac',
|
||||
'power': 'idrac',
|
||||
'raid': 'idrac',
|
||||
'vendor': 'idrac'}
|
||||
|
@ -66,7 +66,7 @@ class DracPeriodicTaskTestCase(db_base.DbTestCase):
|
||||
self.node.save()
|
||||
# mock manager
|
||||
mock_manager = mock.Mock()
|
||||
node_list = [(self.node.uuid, 'pxe_drac',
|
||||
node_list = [(self.node.uuid, 'idrac',
|
||||
{'raid_config_job_ids': ['42']})]
|
||||
mock_manager.iter_nodes.return_value = node_list
|
||||
# mock task_manager.acquire
|
||||
@ -85,7 +85,7 @@ class DracPeriodicTaskTestCase(db_base.DbTestCase):
|
||||
def test__query_raid_config_job_status_no_config_jobs(self, mock_acquire):
|
||||
# mock manager
|
||||
mock_manager = mock.Mock()
|
||||
node_list = [(self.node.uuid, 'pxe_drac', {})]
|
||||
node_list = [(self.node.uuid, 'idrac', {})]
|
||||
mock_manager.iter_nodes.return_value = node_list
|
||||
# mock task_manager.acquire
|
||||
task = mock.Mock(node=self.node, driver=mock.Mock(raid=self.raid))
|
||||
|
@ -12,14 +12,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import inspect
|
||||
|
||||
import mock
|
||||
from oslo_utils import importutils
|
||||
|
||||
from ironic.common import exception
|
||||
from ironic.conductor import task_manager
|
||||
from ironic.drivers import drac as drac_drivers
|
||||
from ironic.drivers.modules import agent
|
||||
from ironic.drivers.modules import drac
|
||||
from ironic.drivers.modules import inspector
|
||||
@ -32,10 +25,18 @@ from ironic.tests.unit.db import base as db_base
|
||||
from ironic.tests.unit.objects import utils as obj_utils
|
||||
|
||||
|
||||
class BaseIDRACTestCase(db_base.DbTestCase):
|
||||
class IDRACHardwareTestCase(db_base.DbTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(BaseIDRACTestCase, self).setUp()
|
||||
super(IDRACHardwareTestCase, self).setUp()
|
||||
self.config(enabled_hardware_types=['idrac'],
|
||||
enabled_management_interfaces=['idrac'],
|
||||
enabled_power_interfaces=['idrac'],
|
||||
enabled_inspect_interfaces=[
|
||||
'idrac', 'inspector', 'no-inspect'],
|
||||
enabled_network_interfaces=['flat', 'neutron', 'noop'],
|
||||
enabled_raid_interfaces=['idrac', 'no-raid'],
|
||||
enabled_vendor_interfaces=['idrac', 'no-vendor'])
|
||||
|
||||
def _validate_interfaces(self, driver, **kwargs):
|
||||
self.assertIsInstance(
|
||||
@ -51,64 +52,40 @@ class BaseIDRACTestCase(db_base.DbTestCase):
|
||||
driver.power,
|
||||
kwargs.get('power', drac.power.DracPower))
|
||||
|
||||
# Console interface of iDRAC classic drivers is None.
|
||||
console_interface = kwargs.get('console', None)
|
||||
|
||||
# None is not a class or type.
|
||||
if inspect.isclass(console_interface):
|
||||
self.assertIsInstance(driver.console, console_interface)
|
||||
else:
|
||||
self.assertIs(driver.console, console_interface)
|
||||
self.assertIsInstance(
|
||||
driver.console,
|
||||
kwargs.get('console', noop.NoConsole))
|
||||
|
||||
self.assertIsInstance(
|
||||
driver.inspect,
|
||||
kwargs.get('inspect', drac.inspect.DracInspect))
|
||||
|
||||
# iDRAC classic drivers do not have a network interface.
|
||||
if 'network' in driver.all_interfaces:
|
||||
self.assertIsInstance(
|
||||
driver.network,
|
||||
kwargs.get('network', flat_net.FlatNetwork))
|
||||
self.assertIsInstance(
|
||||
driver.network,
|
||||
kwargs.get('network', flat_net.FlatNetwork))
|
||||
|
||||
self.assertIsInstance(
|
||||
driver.raid,
|
||||
kwargs.get('raid', drac.raid.DracRAID))
|
||||
|
||||
# iDRAC classic drivers do not have a storage interface.
|
||||
if 'storage' in driver.all_interfaces:
|
||||
self.assertIsInstance(
|
||||
driver.storage,
|
||||
kwargs.get('storage', noop_storage.NoopStorage))
|
||||
self.assertIsInstance(
|
||||
driver.storage,
|
||||
kwargs.get('storage', noop_storage.NoopStorage))
|
||||
|
||||
self.assertIsInstance(
|
||||
driver.vendor,
|
||||
kwargs.get('vendor', drac.vendor_passthru.DracVendorPassthru))
|
||||
|
||||
|
||||
class IDRACHardwareTestCase(BaseIDRACTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(IDRACHardwareTestCase, self).setUp()
|
||||
self.config(enabled_hardware_types=['idrac'],
|
||||
enabled_management_interfaces=['idrac'],
|
||||
enabled_power_interfaces=['idrac'],
|
||||
enabled_inspect_interfaces=[
|
||||
'idrac', 'inspector', 'no-inspect'],
|
||||
enabled_network_interfaces=['flat', 'neutron', 'noop'],
|
||||
enabled_raid_interfaces=['idrac', 'no-raid'],
|
||||
enabled_vendor_interfaces=['idrac', 'no-vendor'])
|
||||
|
||||
def test_default_interfaces(self):
|
||||
node = obj_utils.create_test_node(self.context, driver='idrac')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(task.driver, console=noop.NoConsole)
|
||||
self._validate_interfaces(task.driver)
|
||||
|
||||
def test_override_with_inspector(self):
|
||||
node = obj_utils.create_test_node(self.context, driver='idrac',
|
||||
inspect_interface='inspector')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(task.driver,
|
||||
console=noop.NoConsole,
|
||||
inspect=inspector.Inspector)
|
||||
|
||||
def test_override_with_agent(self):
|
||||
@ -117,7 +94,6 @@ class IDRACHardwareTestCase(BaseIDRACTestCase):
|
||||
inspect_interface='inspector')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(task.driver,
|
||||
console=noop.NoConsole,
|
||||
deploy=agent.AgentDeploy,
|
||||
inspect=inspector.Inspector)
|
||||
|
||||
@ -126,7 +102,6 @@ class IDRACHardwareTestCase(BaseIDRACTestCase):
|
||||
raid_interface='no-raid')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(task.driver,
|
||||
console=noop.NoConsole,
|
||||
raid=noop.NoRAID)
|
||||
|
||||
def test_override_no_vendor(self):
|
||||
@ -134,31 +109,4 @@ class IDRACHardwareTestCase(BaseIDRACTestCase):
|
||||
vendor_interface='no-vendor')
|
||||
with task_manager.acquire(self.context, node.id) as task:
|
||||
self._validate_interfaces(task.driver,
|
||||
console=noop.NoConsole,
|
||||
vendor=noop.NoVendor)
|
||||
|
||||
|
||||
@mock.patch.object(importutils, 'try_import', spec_set=True, autospec=True)
|
||||
class DracClassicDriversTestCase(BaseIDRACTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(DracClassicDriversTestCase, self).setUp()
|
||||
|
||||
def test_pxe_drac_driver(self, mock_try_import):
|
||||
mock_try_import.return_value = True
|
||||
|
||||
driver = drac_drivers.PXEDracDriver()
|
||||
self._validate_interfaces(driver)
|
||||
|
||||
def test___init___try_import_dracclient_failure(self, mock_try_import):
|
||||
mock_try_import.return_value = False
|
||||
|
||||
self.assertRaises(exception.DriverLoadError,
|
||||
drac_drivers.PXEDracDriver)
|
||||
|
||||
def test_pxe_drac_inspector_driver(self, mock_try_import):
|
||||
self.config(enabled=True, group='inspector')
|
||||
mock_try_import.return_value = True
|
||||
|
||||
driver = drac_drivers.PXEDracInspectorDriver()
|
||||
self._validate_interfaces(driver, inspect=inspector.Inspector)
|
||||
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
upgrade:
|
||||
- |
|
||||
The deprecated iDRAC classic drivers ``pxe_drac`` and
|
||||
``pxe_drac_inspector`` have been removed. Please use the ``idrac``
|
||||
hardware type.
|
@ -62,8 +62,6 @@ ironic.drivers =
|
||||
iscsi_pxe_oneview = ironic.drivers.oneview:ISCSIPXEOneViewDriver
|
||||
pxe_ipmitool = ironic.drivers.ipmi:PXEAndIPMIToolDriver
|
||||
pxe_ipmitool_socat = ironic.drivers.ipmi:PXEAndIPMIToolAndSocatDriver
|
||||
pxe_drac = ironic.drivers.drac:PXEDracDriver
|
||||
pxe_drac_inspector = ironic.drivers.drac:PXEDracInspectorDriver
|
||||
pxe_snmp = ironic.drivers.pxe:PXEAndSNMPDriver
|
||||
pxe_irmc = ironic.drivers.pxe:PXEAndIRMCDriver
|
||||
pxe_ucs = ironic.drivers.pxe:PXEAndUcsDriver
|
||||
|
Loading…
x
Reference in New Issue
Block a user