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:
Shivanand Tendulker 2015-09-29 21:11:27 -07:00
parent 7ec5a06c3c
commit 229baafaf3
6 changed files with 126 additions and 32 deletions

View File

@ -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()

View File

@ -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)

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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)