Merge "Replace DB API call to object's method in iLO drivers"

This commit is contained in:
Jenkins 2016-08-22 19:23:17 +00:00 committed by Gerrit Code Review
commit 7b3f3ec2f8
2 changed files with 33 additions and 28 deletions

View File

@ -22,9 +22,9 @@ from ironic.common.i18n import _LW
from ironic.common import states from ironic.common import states
from ironic.common import utils from ironic.common import utils
from ironic.conductor import utils as conductor_utils from ironic.conductor import utils as conductor_utils
from ironic.db import api as dbapi
from ironic.drivers import base from ironic.drivers import base
from ironic.drivers.modules.ilo import common as ilo_common from ironic.drivers.modules.ilo import common as ilo_common
from ironic import objects
ilo_error = importutils.try_import('proliantutils.exception') ilo_error = importutils.try_import('proliantutils.exception')
@ -35,24 +35,24 @@ CAPABILITIES_KEYS = {'BootMode', 'secure_boot', 'rom_firmware_version',
'pci_gpu_devices', 'sr_iov_devices', 'nic_capacity'} 'pci_gpu_devices', 'sr_iov_devices', 'nic_capacity'}
def _create_ports_if_not_exist(node, macs): def _create_ports_if_not_exist(task, macs):
"""Create ironic ports for the mac addresses. """Create ironic ports for the mac addresses.
Creates ironic ports for the mac addresses returned with inspection Creates ironic ports for the mac addresses returned with inspection
or as requested by operator. or as requested by operator.
:param node: node object. :param task: a TaskManager instance.
:param macs: A dictionary of port numbers to mac addresses :param macs: A dictionary of port numbers to mac addresses
returned by node inspection. returned by node inspection.
""" """
node_id = node.id node = task.node
sql_dbapi = dbapi.get_instance()
for mac in macs.values(): for mac in macs.values():
port_dict = {'address': mac, 'node_id': node_id} port_dict = {'address': mac, 'node_id': node.id}
port = objects.Port(task.context, **port_dict)
try: try:
sql_dbapi.create_port(port_dict) port.create()
LOG.info(_LI("Port created for MAC address %(address)s for node " LOG.info(_LI("Port created for MAC address %(address)s for node "
"%(node)s"), {'address': mac, 'node': node.uuid}) "%(node)s"), {'address': mac, 'node': node.uuid})
except exception.MACAlreadyExists: except exception.MACAlreadyExists:
@ -237,7 +237,7 @@ class IloInspect(base.InspectInterface):
task.node.save() task.node.save()
# Create ports for the nics detected. # Create ports for the nics detected.
_create_ports_if_not_exist(task.node, result['macs']) _create_ports_if_not_exist(task, result['macs'])
LOG.debug(("Node properties for %(node)s are updated as " LOG.debug(("Node properties for %(node)s are updated as "
"%(properties)s"), "%(properties)s"),

View File

@ -23,10 +23,10 @@ from ironic.common import states
from ironic.common import utils from ironic.common import utils
from ironic.conductor import task_manager from ironic.conductor import task_manager
from ironic.conductor import utils as conductor_utils from ironic.conductor import utils as conductor_utils
from ironic.db import api as dbapi
from ironic.drivers.modules.ilo import common as ilo_common from ironic.drivers.modules.ilo import common as ilo_common
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 power as ilo_power from ironic.drivers.modules.ilo import power as ilo_power
from ironic import objects
from ironic.tests.unit.conductor import mgr_utils from ironic.tests.unit.conductor import mgr_utils
from ironic.tests.unit.db import base as db_base from ironic.tests.unit.db import base as db_base
from ironic.tests.unit.db import utils as db_utils from ironic.tests.unit.db import utils as db_utils
@ -92,7 +92,7 @@ class IloInspectTestCase(db_base.DbTestCase):
ilo_object_mock) ilo_object_mock)
get_capabilities_mock.assert_called_once_with(task.node, get_capabilities_mock.assert_called_once_with(task.node,
ilo_object_mock) ilo_object_mock)
create_port_mock.assert_called_once_with(task.node, macs) create_port_mock.assert_called_once_with(task, macs)
@mock.patch.object(ilo_inspect, '_get_capabilities', spec_set=True, @mock.patch.object(ilo_inspect, '_get_capabilities', spec_set=True,
autospec=True) autospec=True)
@ -131,7 +131,7 @@ class IloInspectTestCase(db_base.DbTestCase):
ilo_object_mock) ilo_object_mock)
get_capabilities_mock.assert_called_once_with(task.node, get_capabilities_mock.assert_called_once_with(task.node,
ilo_object_mock) ilo_object_mock)
create_port_mock.assert_called_once_with(task.node, macs) create_port_mock.assert_called_once_with(task, macs)
@mock.patch.object(ilo_inspect, '_get_capabilities', spec_set=True, @mock.patch.object(ilo_inspect, '_get_capabilities', spec_set=True,
autospec=True) autospec=True)
@ -170,7 +170,7 @@ class IloInspectTestCase(db_base.DbTestCase):
ilo_object_mock) ilo_object_mock)
get_capabilities_mock.assert_called_once_with(task.node, get_capabilities_mock.assert_called_once_with(task.node,
ilo_object_mock) ilo_object_mock)
create_port_mock.assert_called_once_with(task.node, macs) create_port_mock.assert_called_once_with(task, macs)
@mock.patch.object(ilo_inspect, '_get_capabilities', spec_set=True, @mock.patch.object(ilo_inspect, '_get_capabilities', spec_set=True,
autospec=True) autospec=True)
@ -216,7 +216,7 @@ class IloInspectTestCase(db_base.DbTestCase):
ilo_object_mock) ilo_object_mock)
get_capabilities_mock.assert_called_once_with(task.node, get_capabilities_mock.assert_called_once_with(task.node,
ilo_object_mock) ilo_object_mock)
create_port_mock.assert_called_once_with(task.node, macs) create_port_mock.assert_called_once_with(task, macs)
class TestInspectPrivateMethods(db_base.DbTestCase): class TestInspectPrivateMethods(db_base.DbTestCase):
@ -228,31 +228,36 @@ class TestInspectPrivateMethods(db_base.DbTestCase):
self.context, driver='fake_ilo', driver_info=INFO_DICT) self.context, driver='fake_ilo', driver_info=INFO_DICT)
@mock.patch.object(ilo_inspect.LOG, 'info', spec_set=True, autospec=True) @mock.patch.object(ilo_inspect.LOG, 'info', spec_set=True, autospec=True)
@mock.patch.object(dbapi, 'get_instance', spec_set=True, autospec=True) @mock.patch.object(objects, 'Port', spec_set=True, autospec=True)
def test__create_ports_if_not_exist(self, instance_mock, log_mock): def test__create_ports_if_not_exist(self, port_mock, log_mock):
db_obj = instance_mock.return_value
macs = {'Port 1': 'aa:aa:aa:aa:aa:aa', 'Port 2': 'bb:bb:bb:bb:bb:bb'} macs = {'Port 1': 'aa:aa:aa:aa:aa:aa', 'Port 2': 'bb:bb:bb:bb:bb:bb'}
node_id = self.node.id node_id = self.node.id
port_dict1 = {'address': 'aa:aa:aa:aa:aa:aa', 'node_id': node_id} port_dict1 = {'address': 'aa:aa:aa:aa:aa:aa', 'node_id': node_id}
port_dict2 = {'address': 'bb:bb:bb:bb:bb:bb', 'node_id': node_id} port_dict2 = {'address': 'bb:bb:bb:bb:bb:bb', 'node_id': node_id}
ilo_inspect._create_ports_if_not_exist(self.node, macs) port_obj1, port_obj2 = mock.MagicMock(), mock.MagicMock()
instance_mock.assert_called_once_with() port_mock.side_effect = [port_obj1, port_obj2]
with task_manager.acquire(self.context, self.node.uuid,
shared=False) as task:
ilo_inspect._create_ports_if_not_exist(task, macs)
self.assertTrue(log_mock.called) self.assertTrue(log_mock.called)
db_obj.create_port.assert_any_call(port_dict1) expected_calls = [mock.call(task.context, **port_dict1),
db_obj.create_port.assert_any_call(port_dict2) mock.call(task.context, **port_dict2)]
port_mock.assert_has_calls(expected_calls, any_order=True)
port_obj1.create.assert_called_once_with()
port_obj2.create.assert_called_once_with()
@mock.patch.object(ilo_inspect.LOG, 'warning', @mock.patch.object(ilo_inspect.LOG, 'warning',
spec_set=True, autospec=True) spec_set=True, autospec=True)
@mock.patch.object(dbapi, 'get_instance', spec_set=True, autospec=True) @mock.patch.object(objects.Port, 'create', spec_set=True, autospec=True)
def test__create_ports_if_not_exist_mac_exception(self, def test__create_ports_if_not_exist_mac_exception(self,
instance_mock, create_mock,
log_mock): log_mock):
dbapi_mock = instance_mock.return_value create_mock.side_effect = exception.MACAlreadyExists('f')
dbapi_mock.create_port.side_effect = exception.MACAlreadyExists('f')
macs = {'Port 1': 'aa:aa:aa:aa:aa:aa', 'Port 2': 'bb:bb:bb:bb:bb:bb'} macs = {'Port 1': 'aa:aa:aa:aa:aa:aa', 'Port 2': 'bb:bb:bb:bb:bb:bb'}
ilo_inspect._create_ports_if_not_exist(self.node, macs) with task_manager.acquire(self.context, self.node.uuid,
instance_mock.assert_called_once_with() shared=False) as task:
self.assertTrue(log_mock.called) ilo_inspect._create_ports_if_not_exist(task, macs)
self.assertEqual(2, log_mock.call_count)
def test__get_essential_properties_ok(self): def test__get_essential_properties_ok(self):
ilo_mock = mock.MagicMock(spec=['get_essential_properties']) ilo_mock = mock.MagicMock(spec=['get_essential_properties'])