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:
|
# *_oneview:
|
||||||
# <Server Hardware URI> <Server Hardware Type URI> <Enclosure Group URI> <Server Profile Template URI> <MAC of primary connection> <Applied Server Profile URI>
|
# <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>
|
# <BMC address> <MAC address> <BMC username> <BMC password>
|
||||||
#
|
#
|
||||||
# * irmc:
|
# * irmc:
|
||||||
@ -293,7 +293,7 @@ fi
|
|||||||
#
|
#
|
||||||
# Additional valid choices if IRONIC_IS_HARDWARE == true are:
|
# Additional valid choices if IRONIC_IS_HARDWARE == true are:
|
||||||
# ``pxe_iscsi_cimc``, ``pxe_agent_cimc``, ``pxe_ucs``, ``pxe_cimc``,
|
# ``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}
|
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
|
# 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 {
|
function is_deployed_by_drac {
|
||||||
[[ -z "${IRONIC_DEPLOY_DRIVER##*_drac}" ]] && return 0
|
[[ "${IRONIC_DEPLOY_DRIVER}" == idrac ]] && return 0
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -659,7 +659,7 @@ function is_deployed_by_irmc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function is_drac_enabled {
|
function is_drac_enabled {
|
||||||
[[ -z "${IRONIC_ENABLED_DRIVERS##*_drac}" ]] && return 0
|
[[ -z "${IRONIC_ENABLED_HARDWARE_TYPES%%*idrac*}" ]] && return 0
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,22 +5,17 @@ iDRAC drivers
|
|||||||
Overview
|
Overview
|
||||||
========
|
========
|
||||||
|
|
||||||
iDRAC_ hardware is supported by the ``idrac`` hardware type and the following
|
iDRAC_ hardware is supported by the ``idrac`` hardware type. It is also
|
||||||
classic drivers:
|
supported by the standard ``ipmi`` hardware type, though with a smaller
|
||||||
|
feature set.
|
||||||
* ``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.
|
|
||||||
|
|
||||||
.. TODO(dtantsur): supported hardware
|
.. TODO(dtantsur): supported hardware
|
||||||
|
|
||||||
Enabling
|
Enabling
|
||||||
========
|
========
|
||||||
|
|
||||||
All iDRAC drivers require the ``python-dracclient`` library to be installed,
|
The ``idrac`` hardware type requires the ``python-dracclient`` library to be
|
||||||
for example::
|
installed, for example::
|
||||||
|
|
||||||
sudo pip install 'python-dracclient>=1.3.0'
|
sudo pip install 'python-dracclient>=1.3.0'
|
||||||
|
|
||||||
|
@ -311,7 +311,7 @@ option, for example:
|
|||||||
.. code-block:: ini
|
.. code-block:: ini
|
||||||
|
|
||||||
[DEFAULT]
|
[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.
|
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
|
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_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 import generic
|
||||||
from ironic.drivers.modules.drac import inspect as drac_inspect
|
from ironic.drivers.modules.drac import inspect as drac_inspect
|
||||||
from ironic.drivers.modules.drac import management
|
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 raid
|
||||||
from ironic.drivers.modules.drac import vendor_passthru
|
from ironic.drivers.modules.drac import vendor_passthru
|
||||||
from ironic.drivers.modules import inspector
|
from ironic.drivers.modules import inspector
|
||||||
from ironic.drivers.modules import iscsi_deploy
|
|
||||||
from ironic.drivers.modules import noop
|
from ironic.drivers.modules import noop
|
||||||
from ironic.drivers.modules import pxe
|
|
||||||
|
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
@ -70,57 +64,3 @@ class IDRACHardware(generic.GenericHardware):
|
|||||||
def supported_vendor_interfaces(self):
|
def supported_vendor_interfaces(self):
|
||||||
"""List of supported vendor interfaces."""
|
"""List of supported vendor interfaces."""
|
||||||
return [vendor_passthru.DracVendorPassthru, noop.NoVendor]
|
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()
|
self.node.save()
|
||||||
# mock manager
|
# mock manager
|
||||||
mock_manager = mock.Mock()
|
mock_manager = mock.Mock()
|
||||||
node_list = [(self.node.uuid, 'pxe_drac',
|
node_list = [(self.node.uuid, 'idrac',
|
||||||
{'raid_config_job_ids': ['42']})]
|
{'raid_config_job_ids': ['42']})]
|
||||||
mock_manager.iter_nodes.return_value = node_list
|
mock_manager.iter_nodes.return_value = node_list
|
||||||
# mock task_manager.acquire
|
# 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):
|
def test__query_raid_config_job_status_no_config_jobs(self, mock_acquire):
|
||||||
# mock manager
|
# mock manager
|
||||||
mock_manager = mock.Mock()
|
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_manager.iter_nodes.return_value = node_list
|
||||||
# mock task_manager.acquire
|
# mock task_manager.acquire
|
||||||
task = mock.Mock(node=self.node, driver=mock.Mock(raid=self.raid))
|
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
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# 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.conductor import task_manager
|
||||||
from ironic.drivers import drac as drac_drivers
|
|
||||||
from ironic.drivers.modules import agent
|
from ironic.drivers.modules import agent
|
||||||
from ironic.drivers.modules import drac
|
from ironic.drivers.modules import drac
|
||||||
from ironic.drivers.modules import inspector
|
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
|
from ironic.tests.unit.objects import utils as obj_utils
|
||||||
|
|
||||||
|
|
||||||
class BaseIDRACTestCase(db_base.DbTestCase):
|
class IDRACHardwareTestCase(db_base.DbTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
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):
|
def _validate_interfaces(self, driver, **kwargs):
|
||||||
self.assertIsInstance(
|
self.assertIsInstance(
|
||||||
@ -51,64 +52,40 @@ class BaseIDRACTestCase(db_base.DbTestCase):
|
|||||||
driver.power,
|
driver.power,
|
||||||
kwargs.get('power', drac.power.DracPower))
|
kwargs.get('power', drac.power.DracPower))
|
||||||
|
|
||||||
# Console interface of iDRAC classic drivers is None.
|
self.assertIsInstance(
|
||||||
console_interface = kwargs.get('console', None)
|
driver.console,
|
||||||
|
kwargs.get('console', noop.NoConsole))
|
||||||
# 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(
|
self.assertIsInstance(
|
||||||
driver.inspect,
|
driver.inspect,
|
||||||
kwargs.get('inspect', drac.inspect.DracInspect))
|
kwargs.get('inspect', drac.inspect.DracInspect))
|
||||||
|
|
||||||
# iDRAC classic drivers do not have a network interface.
|
self.assertIsInstance(
|
||||||
if 'network' in driver.all_interfaces:
|
driver.network,
|
||||||
self.assertIsInstance(
|
kwargs.get('network', flat_net.FlatNetwork))
|
||||||
driver.network,
|
|
||||||
kwargs.get('network', flat_net.FlatNetwork))
|
|
||||||
|
|
||||||
self.assertIsInstance(
|
self.assertIsInstance(
|
||||||
driver.raid,
|
driver.raid,
|
||||||
kwargs.get('raid', drac.raid.DracRAID))
|
kwargs.get('raid', drac.raid.DracRAID))
|
||||||
|
|
||||||
# iDRAC classic drivers do not have a storage interface.
|
self.assertIsInstance(
|
||||||
if 'storage' in driver.all_interfaces:
|
driver.storage,
|
||||||
self.assertIsInstance(
|
kwargs.get('storage', noop_storage.NoopStorage))
|
||||||
driver.storage,
|
|
||||||
kwargs.get('storage', noop_storage.NoopStorage))
|
|
||||||
|
|
||||||
self.assertIsInstance(
|
self.assertIsInstance(
|
||||||
driver.vendor,
|
driver.vendor,
|
||||||
kwargs.get('vendor', drac.vendor_passthru.DracVendorPassthru))
|
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):
|
def test_default_interfaces(self):
|
||||||
node = obj_utils.create_test_node(self.context, driver='idrac')
|
node = obj_utils.create_test_node(self.context, driver='idrac')
|
||||||
with task_manager.acquire(self.context, node.id) as task:
|
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):
|
def test_override_with_inspector(self):
|
||||||
node = obj_utils.create_test_node(self.context, driver='idrac',
|
node = obj_utils.create_test_node(self.context, driver='idrac',
|
||||||
inspect_interface='inspector')
|
inspect_interface='inspector')
|
||||||
with task_manager.acquire(self.context, node.id) as task:
|
with task_manager.acquire(self.context, node.id) as task:
|
||||||
self._validate_interfaces(task.driver,
|
self._validate_interfaces(task.driver,
|
||||||
console=noop.NoConsole,
|
|
||||||
inspect=inspector.Inspector)
|
inspect=inspector.Inspector)
|
||||||
|
|
||||||
def test_override_with_agent(self):
|
def test_override_with_agent(self):
|
||||||
@ -117,7 +94,6 @@ class IDRACHardwareTestCase(BaseIDRACTestCase):
|
|||||||
inspect_interface='inspector')
|
inspect_interface='inspector')
|
||||||
with task_manager.acquire(self.context, node.id) as task:
|
with task_manager.acquire(self.context, node.id) as task:
|
||||||
self._validate_interfaces(task.driver,
|
self._validate_interfaces(task.driver,
|
||||||
console=noop.NoConsole,
|
|
||||||
deploy=agent.AgentDeploy,
|
deploy=agent.AgentDeploy,
|
||||||
inspect=inspector.Inspector)
|
inspect=inspector.Inspector)
|
||||||
|
|
||||||
@ -126,7 +102,6 @@ class IDRACHardwareTestCase(BaseIDRACTestCase):
|
|||||||
raid_interface='no-raid')
|
raid_interface='no-raid')
|
||||||
with task_manager.acquire(self.context, node.id) as task:
|
with task_manager.acquire(self.context, node.id) as task:
|
||||||
self._validate_interfaces(task.driver,
|
self._validate_interfaces(task.driver,
|
||||||
console=noop.NoConsole,
|
|
||||||
raid=noop.NoRAID)
|
raid=noop.NoRAID)
|
||||||
|
|
||||||
def test_override_no_vendor(self):
|
def test_override_no_vendor(self):
|
||||||
@ -134,31 +109,4 @@ class IDRACHardwareTestCase(BaseIDRACTestCase):
|
|||||||
vendor_interface='no-vendor')
|
vendor_interface='no-vendor')
|
||||||
with task_manager.acquire(self.context, node.id) as task:
|
with task_manager.acquire(self.context, node.id) as task:
|
||||||
self._validate_interfaces(task.driver,
|
self._validate_interfaces(task.driver,
|
||||||
console=noop.NoConsole,
|
|
||||||
vendor=noop.NoVendor)
|
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
|
iscsi_pxe_oneview = ironic.drivers.oneview:ISCSIPXEOneViewDriver
|
||||||
pxe_ipmitool = ironic.drivers.ipmi:PXEAndIPMIToolDriver
|
pxe_ipmitool = ironic.drivers.ipmi:PXEAndIPMIToolDriver
|
||||||
pxe_ipmitool_socat = ironic.drivers.ipmi:PXEAndIPMIToolAndSocatDriver
|
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_snmp = ironic.drivers.pxe:PXEAndSNMPDriver
|
||||||
pxe_irmc = ironic.drivers.pxe:PXEAndIRMCDriver
|
pxe_irmc = ironic.drivers.pxe:PXEAndIRMCDriver
|
||||||
pxe_ucs = ironic.drivers.pxe:PXEAndUcsDriver
|
pxe_ucs = ironic.drivers.pxe:PXEAndUcsDriver
|
||||||
|
Loading…
Reference in New Issue
Block a user