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 import base
from ironic.drivers.modules import agent from ironic.drivers.modules import agent
from ironic.drivers.modules.ilo import boot 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 deploy
from ironic.drivers.modules.ilo import inspect from ironic.drivers.modules.ilo import inspect
from ironic.drivers.modules.ilo import management from ironic.drivers.modules.ilo import management
@ -48,7 +49,7 @@ class IloVirtualMediaIscsiDriver(base.BaseDriver):
self.power = power.IloPower() self.power = power.IloPower()
self.boot = boot.IloVirtualMediaBoot() self.boot = boot.IloVirtualMediaBoot()
self.deploy = deploy.IloVirtualMediaIscsiDeploy() self.deploy = deploy.IloVirtualMediaIscsiDeploy()
self.console = deploy.IloConsoleInterface() self.console = console.IloConsoleInterface()
self.management = management.IloManagement() self.management = management.IloManagement()
self.vendor = vendor.VendorPassthru() self.vendor = vendor.VendorPassthru()
self.inspect = inspect.IloInspect() self.inspect = inspect.IloInspect()
@ -72,7 +73,7 @@ class IloVirtualMediaAgentDriver(base.BaseDriver):
self.power = power.IloPower() self.power = power.IloPower()
self.deploy = deploy.IloVirtualMediaAgentDeploy() self.deploy = deploy.IloVirtualMediaAgentDeploy()
self.console = deploy.IloConsoleInterface() self.console = console.IloConsoleInterface()
self.management = management.IloManagement() self.management = management.IloManagement()
self.vendor = vendor.IloVirtualMediaAgentVendorInterface() self.vendor = vendor.IloVirtualMediaAgentVendorInterface()
self.inspect = inspect.IloInspect() 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 import deploy_utils
from ironic.drivers.modules.ilo import boot as ilo_boot from ironic.drivers.modules.ilo import boot as ilo_boot
from ironic.drivers.modules.ilo import common as ilo_common 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 iscsi_deploy
from ironic.drivers.modules import pxe from ironic.drivers.modules import pxe
@ -361,29 +360,3 @@ class IloPXEDeploy(iscsi_deploy.ISCSIDeploy):
manager_utils.node_power_action(task, states.POWER_OFF) manager_utils.node_power_action(task, states.POWER_OFF)
_disable_secure_boot_if_supported(task) _disable_secure_boot_if_supported(task)
return super(IloPXEDeploy, self).tear_down(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 management as cimc_mgmt
from ironic.drivers.modules.cimc import power as cimc_power from ironic.drivers.modules.cimc import power as cimc_power
from ironic.drivers.modules import iboot 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 deploy as ilo_deploy
from ironic.drivers.modules.ilo import inspect as ilo_inspect 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 management as ilo_management
@ -212,7 +213,7 @@ class PXEAndIloDriver(base.BaseDriver):
self.boot = pxe.PXEBoot() self.boot = pxe.PXEBoot()
self.deploy = ilo_deploy.IloPXEDeploy() self.deploy = ilo_deploy.IloPXEDeploy()
self.vendor = ilo_vendor.VendorPassthru() self.vendor = ilo_vendor.VendorPassthru()
self.console = ilo_deploy.IloConsoleInterface() self.console = ilo_console.IloConsoleInterface()
self.management = ilo_management.IloManagement() self.management = ilo_management.IloManagement()
self.inspect = ilo_inspect.IloInspect() self.inspect = ilo_inspect.IloInspect()
self.raid = agent.AgentRAID() 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 management as cimc_management
from ironic.drivers.modules.cimc import power as cimc_power from ironic.drivers.modules.cimc import power as cimc_power
from ironic.drivers.modules import iboot 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 inspect as ilo_inspect
from ironic.drivers.modules.ilo import management as ilo_management from ironic.drivers.modules.ilo import management as ilo_management
from ironic.drivers.modules.ilo import power as ilo_power 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.deploy, iscsi_deploy.ISCSIDeploy)
self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru) self.assertIsInstance(driver.vendor, iscsi_deploy.VendorPassthru)
self.assertIsInstance(driver.console, self.assertIsInstance(driver.console,
ilo_deploy.IloConsoleInterface) ilo_console.IloConsoleInterface)
self.assertIsInstance(driver.management, self.assertIsInstance(driver.management,
ilo_management.IloManagement) ilo_management.IloManagement)
self.assertIsInstance(driver.inspect, ilo_inspect.IloInspect) self.assertIsInstance(driver.inspect, ilo_inspect.IloInspect)