Merge "Replace DB API call to object's method in iLO drivers"
This commit is contained in:
commit
7b3f3ec2f8
@ -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"),
|
||||||
|
@ -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'])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user