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 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()
|
||||||
|
|
|
@ -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 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)
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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 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)
|
||||||
|
|
Loading…
Reference in New Issue