Refactor iLO driver console interface into new module
This commit moves IloConsoleInterface class to separate file. Change-Id: I143064efdba9f3056c7f980d36a88ef1e9a793fa Implements: blueprint ilo-driver-uses-boot-interface
This commit is contained in:
parent
7ec5a06c3c
commit
229baafaf3
|
@ -22,6 +22,7 @@ from ironic.common.i18n import _
|
|||
from ironic.drivers import base
|
||||
from ironic.drivers.modules import agent
|
||||
from ironic.drivers.modules.ilo import boot
|
||||
from ironic.drivers.modules.ilo import console
|
||||
from ironic.drivers.modules.ilo import deploy
|
||||
from ironic.drivers.modules.ilo import inspect
|
||||
from ironic.drivers.modules.ilo import management
|
||||
|
@ -48,7 +49,7 @@ class IloVirtualMediaIscsiDriver(base.BaseDriver):
|
|||
self.power = power.IloPower()
|
||||
self.boot = boot.IloVirtualMediaBoot()
|
||||
self.deploy = deploy.IloVirtualMediaIscsiDeploy()
|
||||
self.console = deploy.IloConsoleInterface()
|
||||
self.console = console.IloConsoleInterface()
|
||||
self.management = management.IloManagement()
|
||||
self.vendor = vendor.VendorPassthru()
|
||||
self.inspect = inspect.IloInspect()
|
||||
|
@ -72,7 +73,7 @@ class IloVirtualMediaAgentDriver(base.BaseDriver):
|
|||
|
||||
self.power = power.IloPower()
|
||||
self.deploy = deploy.IloVirtualMediaAgentDeploy()
|
||||
self.console = deploy.IloConsoleInterface()
|
||||
self.console = console.IloConsoleInterface()
|
||||
self.management = management.IloManagement()
|
||||
self.vendor = vendor.IloVirtualMediaAgentVendorInterface()
|
||||
self.inspect = inspect.IloInspect()
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
# Copyright 2015 Hewlett-Packard Development Company, L.P.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
"""
|
||||
iLO Deploy Driver(s) and supporting methods.
|
||||
"""
|
||||
|
||||
from ironic.common import exception
|
||||
from ironic.common.i18n import _
|
||||
from ironic.drivers.modules.ilo import common as ilo_common
|
||||
from ironic.drivers.modules import ipmitool
|
||||
|
||||
|
||||
class IloConsoleInterface(ipmitool.IPMIShellinaboxConsole):
|
||||
"""A ConsoleInterface that uses ipmitool and shellinabox."""
|
||||
|
||||
def get_properties(self):
|
||||
props = ilo_common.REQUIRED_PROPERTIES.copy()
|
||||
props.update(ilo_common.CONSOLE_PROPERTIES)
|
||||
return props
|
||||
|
||||
def validate(self, task):
|
||||
"""Validate the Node console info.
|
||||
|
||||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
|
||||
"""
|
||||
node = task.node
|
||||
driver_info_dict = ilo_common.parse_driver_info(node)
|
||||
if 'console_port' not in driver_info_dict:
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Missing 'console_port' parameter in node's driver_info."))
|
||||
|
||||
ilo_common.update_ipmi_properties(task)
|
||||
super(IloConsoleInterface, self).validate(task)
|
|
@ -31,7 +31,6 @@ from ironic.drivers.modules import agent
|
|||
from ironic.drivers.modules import deploy_utils
|
||||
from ironic.drivers.modules.ilo import boot as ilo_boot
|
||||
from ironic.drivers.modules.ilo import common as ilo_common
|
||||
from ironic.drivers.modules import ipmitool
|
||||
from ironic.drivers.modules import iscsi_deploy
|
||||
from ironic.drivers.modules import pxe
|
||||
|
||||
|
@ -361,29 +360,3 @@ class IloPXEDeploy(iscsi_deploy.ISCSIDeploy):
|
|||
manager_utils.node_power_action(task, states.POWER_OFF)
|
||||
_disable_secure_boot_if_supported(task)
|
||||
return super(IloPXEDeploy, self).tear_down(task)
|
||||
|
||||
|
||||
class IloConsoleInterface(ipmitool.IPMIShellinaboxConsole):
|
||||
"""A ConsoleInterface that uses ipmitool and shellinabox."""
|
||||
|
||||
def get_properties(self):
|
||||
d = ilo_common.REQUIRED_PROPERTIES.copy()
|
||||
d.update(ilo_common.CONSOLE_PROPERTIES)
|
||||
return d
|
||||
|
||||
def validate(self, task):
|
||||
"""Validate the Node console info.
|
||||
|
||||
:param task: a task from TaskManager.
|
||||
:raises: InvalidParameterValue
|
||||
:raises: MissingParameterValue when a required parameter is missing
|
||||
|
||||
"""
|
||||
node = task.node
|
||||
driver_info = ilo_common.parse_driver_info(node)
|
||||
if 'console_port' not in driver_info:
|
||||
raise exception.MissingParameterValue(_(
|
||||
"Missing 'console_port' parameter in node's driver_info."))
|
||||
|
||||
ilo_common.update_ipmi_properties(task)
|
||||
super(IloConsoleInterface, self).validate(task)
|
||||
|
|
|
@ -29,6 +29,7 @@ from ironic.drivers.modules.amt import vendor as amt_vendor
|
|||
from ironic.drivers.modules.cimc import management as cimc_mgmt
|
||||
from ironic.drivers.modules.cimc import power as cimc_power
|
||||
from ironic.drivers.modules import iboot
|
||||
from ironic.drivers.modules.ilo import console as ilo_console
|
||||
from ironic.drivers.modules.ilo import deploy as ilo_deploy
|
||||
from ironic.drivers.modules.ilo import inspect as ilo_inspect
|
||||
from ironic.drivers.modules.ilo import management as ilo_management
|
||||
|
@ -212,7 +213,7 @@ class PXEAndIloDriver(base.BaseDriver):
|
|||
self.boot = pxe.PXEBoot()
|
||||
self.deploy = ilo_deploy.IloPXEDeploy()
|
||||
self.vendor = ilo_vendor.VendorPassthru()
|
||||
self.console = ilo_deploy.IloConsoleInterface()
|
||||
self.console = ilo_console.IloConsoleInterface()
|
||||
self.management = ilo_management.IloManagement()
|
||||
self.inspect = ilo_inspect.IloInspect()
|
||||
self.raid = agent.AgentRAID()
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
# Copyright 2015 Hewlett-Packard Development Company, L.P.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""Test class for common methods used by iLO modules."""
|
||||
|
||||
import mock
|
||||
from oslo_config import cfg
|
||||
import six
|
||||
|
||||
from ironic.common import exception
|
||||
from ironic.conductor import task_manager
|
||||
from ironic.drivers.modules.ilo import common as ilo_common
|
||||
from ironic.drivers.modules import ipmitool
|
||||
from ironic.tests.unit.conductor import mgr_utils
|
||||
from ironic.tests.unit.db import base as db_base
|
||||
from ironic.tests.unit.db import utils as db_utils
|
||||
from ironic.tests.unit.objects import utils as obj_utils
|
||||
|
||||
|
||||
if six.PY3:
|
||||
import io
|
||||
file = io.BytesIO
|
||||
|
||||
INFO_DICT = db_utils.get_test_ilo_info()
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
class IloConsoleInterfaceTestCase(db_base.DbTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(IloConsoleInterfaceTestCase, self).setUp()
|
||||
mgr_utils.mock_the_extension_manager(driver="iscsi_ilo")
|
||||
self.node = obj_utils.create_test_node(
|
||||
self.context, driver='iscsi_ilo', driver_info=INFO_DICT)
|
||||
|
||||
@mock.patch.object(ipmitool.IPMIShellinaboxConsole, 'validate',
|
||||
spec_set=True, autospec=True)
|
||||
@mock.patch.object(ilo_common, 'update_ipmi_properties', spec_set=True,
|
||||
autospec=True)
|
||||
def test_validate(self, update_ipmi_mock,
|
||||
ipmi_validate_mock):
|
||||
with task_manager.acquire(self.context, self.node.uuid,
|
||||
shared=False) as task:
|
||||
task.node.driver_info['console_port'] = 60
|
||||
task.driver.console.validate(task)
|
||||
update_ipmi_mock.assert_called_once_with(task)
|
||||
ipmi_validate_mock.assert_called_once_with(mock.ANY, task)
|
||||
|
||||
@mock.patch.object(ipmitool.IPMIShellinaboxConsole, 'validate',
|
||||
spec_set=True, autospec=True)
|
||||
@mock.patch.object(ilo_common, 'update_ipmi_properties', spec_set=True,
|
||||
autospec=True)
|
||||
def test_validate_exc(self, update_ipmi_mock,
|
||||
ipmi_validate_mock):
|
||||
with task_manager.acquire(self.context, self.node.uuid,
|
||||
shared=False) as task:
|
||||
self.assertRaises(exception.MissingParameterValue,
|
||||
task.driver.console.validate, task)
|
||||
self.assertEqual(0, update_ipmi_mock.call_count)
|
||||
self.assertEqual(0, ipmi_validate_mock.call_count)
|
|
@ -27,7 +27,7 @@ from ironic.drivers.modules.amt import vendor as amt_vendor
|
|||
from ironic.drivers.modules.cimc import management as cimc_management
|
||||
from ironic.drivers.modules.cimc import power as cimc_power
|
||||
from ironic.drivers.modules import iboot
|
||||
from ironic.drivers.modules.ilo import deploy as ilo_deploy
|
||||
from ironic.drivers.modules.ilo import console as ilo_console
|
||||
from ironic.drivers.modules.ilo import inspect as ilo_inspect
|
||||
from ironic.drivers.modules.ilo import management as ilo_management
|
||||
from ironic.drivers.modules.ilo import power as ilo_power
|
||||
|
@ -159,7 +159,7 @@ class PXEDriversTestCase(testtools.TestCase):
|
|||
self.assertIsInstance(driver.deploy, iscsi_deploy.ISCSIDeploy)
|
||||
self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru)
|
||||
self.assertIsInstance(driver.console,
|
||||
ilo_deploy.IloConsoleInterface)
|
||||
ilo_console.IloConsoleInterface)
|
||||
self.assertIsInstance(driver.management,
|
||||
ilo_management.IloManagement)
|
||||
self.assertIsInstance(driver.inspect, ilo_inspect.IloInspect)
|
||||
|
|
Loading…
Reference in New Issue