Merge "Add hardware type 'irmc' for FUJITSU PRIMERGY servers"

This commit is contained in:
Jenkins 2017-02-02 13:18:04 +00:00 committed by Gerrit Code Review
commit 217ad9d2c1
4 changed files with 110 additions and 0 deletions

View File

@ -21,13 +21,17 @@ from oslo_utils import importutils
from ironic.common import exception from ironic.common import exception
from ironic.common.i18n import _ from ironic.common.i18n import _
from ironic.drivers import base from ironic.drivers import base
from ironic.drivers import generic
from ironic.drivers.modules import agent from ironic.drivers.modules import agent
from ironic.drivers.modules import inspector
from ironic.drivers.modules import ipmitool from ironic.drivers.modules import ipmitool
from ironic.drivers.modules.irmc import boot from ironic.drivers.modules.irmc import boot
from ironic.drivers.modules.irmc import inspect from ironic.drivers.modules.irmc import inspect
from ironic.drivers.modules.irmc import management from ironic.drivers.modules.irmc import management
from ironic.drivers.modules.irmc import power from ironic.drivers.modules.irmc import power
from ironic.drivers.modules import iscsi_deploy from ironic.drivers.modules import iscsi_deploy
from ironic.drivers.modules import noop
from ironic.drivers.modules import pxe
class IRMCVirtualMediaIscsiDriver(base.BaseDriver): class IRMCVirtualMediaIscsiDriver(base.BaseDriver):
@ -75,3 +79,38 @@ class IRMCVirtualMediaAgentDriver(base.BaseDriver):
self.console = ipmitool.IPMIShellinaboxConsole() self.console = ipmitool.IPMIShellinaboxConsole()
self.management = management.IRMCManagement() self.management = management.IRMCManagement()
self.inspect = inspect.IRMCInspect() self.inspect = inspect.IRMCInspect()
class IRMCHardware(generic.GenericHardware):
"""iRMC hardware type.
iRMC hardware type is targeted for FUJITSU PRIMERGY servers which
have iRMC S4 management system.
"""
@property
def supported_boot_interfaces(self):
"""List of supported boot interfaces."""
return [boot.IRMCVirtualMediaBoot, pxe.PXEBoot]
@property
def supported_console_interfaces(self):
"""List of supported console interfaces."""
return [ipmitool.IPMISocatConsole, ipmitool.IPMIShellinaboxConsole,
noop.NoConsole]
@property
def supported_inspect_interfaces(self):
"""List of supported inspect interfaces."""
return [inspect.IRMCInspect, inspector.Inspector,
noop.NoInspect]
@property
def supported_management_interfaces(self):
"""List of supported management interfaces."""
return [management.IRMCManagement]
@property
def supported_power_interfaces(self):
"""List of supported power interfaces."""
return [power.IRMCPower]

View File

@ -20,9 +20,15 @@ import mock
import testtools import testtools
from ironic.common import exception from ironic.common import exception
from ironic.conductor import task_manager
from ironic.drivers import irmc from ironic.drivers import irmc
from ironic.drivers.modules import agent from ironic.drivers.modules import agent
from ironic.drivers.modules import inspector
from ironic.drivers.modules import ipmitool
from ironic.drivers.modules import iscsi_deploy from ironic.drivers.modules import iscsi_deploy
from ironic.drivers.modules import noop
from ironic.tests.unit.db import base as db_base
from ironic.tests.unit.objects import utils as obj_utils
class IRMCVirtualMediaIscsiTestCase(testtools.TestCase): class IRMCVirtualMediaIscsiTestCase(testtools.TestCase):
@ -107,3 +113,60 @@ class IRMCVirtualMediaAgentTestCase(testtools.TestCase):
self.assertRaises(exception.IRMCSharedFileSystemNotMounted, self.assertRaises(exception.IRMCSharedFileSystemNotMounted,
irmc.IRMCVirtualMediaAgentDriver) irmc.IRMCVirtualMediaAgentDriver)
class IRMCHardwareTestCase(db_base.DbTestCase):
def setUp(self):
irmc.boot.check_share_fs_mounted_patcher.start()
self.addCleanup(irmc.boot.check_share_fs_mounted_patcher.stop)
super(IRMCHardwareTestCase, self).setUp()
self.config(enabled_hardware_types=['irmc'],
enabled_boot_interfaces=['irmc-virtual-media'],
enabled_console_interfaces=['ipmitool-socat'],
enabled_deploy_interfaces=['iscsi', 'direct'],
enabled_inspect_interfaces=['irmc'],
enabled_management_interfaces=['irmc'],
enabled_power_interfaces=['irmc'],
enabled_raid_interfaces=['no-raid', 'agent'])
def test_default_interfaces(self):
node = obj_utils.create_test_node(self.context, driver='irmc')
with task_manager.acquire(self.context, node.id) as task:
self.assertIsInstance(task.driver.boot,
irmc.boot.IRMCVirtualMediaBoot)
self.assertIsInstance(task.driver.console,
ipmitool.IPMISocatConsole)
self.assertIsInstance(task.driver.deploy,
iscsi_deploy.ISCSIDeploy)
self.assertIsInstance(task.driver.inspect,
irmc.inspect.IRMCInspect)
self.assertIsInstance(task.driver.management,
irmc.management.IRMCManagement)
self.assertIsInstance(task.driver.power,
irmc.power.IRMCPower)
self.assertIsInstance(task.driver.raid,
noop.NoRAID)
def test_override_with_inspector(self):
self.config(enabled_inspect_interfaces=['inspector', 'irmc'])
node = obj_utils.create_test_node(
self.context, driver='irmc',
deploy_interface='direct',
inspect_interface='inspector',
raid_interface='agent')
with task_manager.acquire(self.context, node.id) as task:
self.assertIsInstance(task.driver.boot,
irmc.boot.IRMCVirtualMediaBoot)
self.assertIsInstance(task.driver.console,
ipmitool.IPMISocatConsole)
self.assertIsInstance(task.driver.deploy,
agent.AgentDeploy)
self.assertIsInstance(task.driver.inspect,
inspector.Inspector)
self.assertIsInstance(task.driver.management,
irmc.management.IRMCManagement)
self.assertIsInstance(task.driver.power,
irmc.power.IRMCPower)
self.assertIsInstance(task.driver.raid,
agent.AgentRAID)

View File

@ -0,0 +1,3 @@
---
features:
- Adds new hardware type 'irmc' for FUJITSU PRIMERGY servers.

View File

@ -92,6 +92,7 @@ ironic.drivers =
ironic.hardware.interfaces.boot = ironic.hardware.interfaces.boot =
fake = ironic.drivers.modules.fake:FakeBoot fake = ironic.drivers.modules.fake:FakeBoot
pxe = ironic.drivers.modules.pxe:PXEBoot pxe = ironic.drivers.modules.pxe:PXEBoot
irmc-virtual-media = ironic.drivers.modules.irmc.boot:IRMCVirtualMediaBoot
ironic.hardware.interfaces.console = ironic.hardware.interfaces.console =
fake = ironic.drivers.modules.fake:FakeConsole fake = ironic.drivers.modules.fake:FakeConsole
@ -108,10 +109,12 @@ ironic.hardware.interfaces.inspect =
fake = ironic.drivers.modules.fake:FakeInspect fake = ironic.drivers.modules.fake:FakeInspect
inspector = ironic.drivers.modules.inspector:Inspector inspector = ironic.drivers.modules.inspector:Inspector
no-inspect = ironic.drivers.modules.noop:NoInspect no-inspect = ironic.drivers.modules.noop:NoInspect
irmc = ironic.drivers.modules.irmc.inspect:IRMCInspect
ironic.hardware.interfaces.management = ironic.hardware.interfaces.management =
fake = ironic.drivers.modules.fake:FakeManagement fake = ironic.drivers.modules.fake:FakeManagement
ipmitool = ironic.drivers.modules.ipmitool:IPMIManagement ipmitool = ironic.drivers.modules.ipmitool:IPMIManagement
irmc = ironic.drivers.modules.irmc.management:IRMCManagement
ironic.hardware.interfaces.network = ironic.hardware.interfaces.network =
flat = ironic.drivers.modules.network.flat:FlatNetwork flat = ironic.drivers.modules.network.flat:FlatNetwork
@ -121,6 +124,7 @@ ironic.hardware.interfaces.network =
ironic.hardware.interfaces.power = ironic.hardware.interfaces.power =
fake = ironic.drivers.modules.fake:FakePower fake = ironic.drivers.modules.fake:FakePower
ipmitool = ironic.drivers.modules.ipmitool:IPMIPower ipmitool = ironic.drivers.modules.ipmitool:IPMIPower
irmc = ironic.drivers.modules.irmc.power:IRMCPower
ironic.hardware.interfaces.raid = ironic.hardware.interfaces.raid =
agent = ironic.drivers.modules.agent:AgentRAID agent = ironic.drivers.modules.agent:AgentRAID
@ -142,6 +146,7 @@ ironic.hardware.types =
fake-hardware = ironic.drivers.fake_hardware:FakeHardware fake-hardware = ironic.drivers.fake_hardware:FakeHardware
manual-management = ironic.drivers.generic:ManualManagementHardware manual-management = ironic.drivers.generic:ManualManagementHardware
ipmi = ironic.drivers.ipmi:IPMIHardware ipmi = ironic.drivers.ipmi:IPMIHardware
irmc = ironic.drivers.irmc:IRMCHardware
ironic.database.migration_backend = ironic.database.migration_backend =
sqlalchemy = ironic.db.sqlalchemy.migration sqlalchemy = ironic.db.sqlalchemy.migration