Add list_by_node_id() to Port object

What it says. Also make the code and tests use them vs direct calls
to dbapi.

Change-Id: I5bfa6ec93be0d6f7460d5b1c45a057cc7ab3bc9b
Partial-Bug: #1314732
This commit is contained in:
Lucas Alvares Gomes 2014-09-10 14:50:20 +01:00
parent a04eddbbcd
commit 2856ef26d2
5 changed files with 51 additions and 25 deletions

View File

@ -195,10 +195,10 @@ class PortsController(rest.RestController):
# for that column. This will get cleaned up
# as we move to the object interface.
node = objects.Node.get_by_uuid(pecan.request.context, node_uuid)
ports = pecan.request.dbapi.get_ports_by_node_id(node.id, limit,
marker_obj,
sort_key=sort_key,
sort_dir=sort_dir)
ports = objects.Port.list_by_node_id(pecan.request.context,
node.id, limit, marker_obj,
sort_key=sort_key,
sort_dir=sort_dir)
elif address:
ports = self._get_ports_by_address(address)
else:

View File

@ -186,7 +186,7 @@ class TaskManager(object):
reserve_node()
else:
self.node = objects.Node.get(context, node_id)
self.ports = self._dbapi.get_ports_by_node_id(self.node.id)
self.ports = objects.Port.list_by_node_id(context, self.node.id)
self.driver = driver_factory.get_driver(driver_name or
self.node.driver)
except Exception:

View File

@ -383,7 +383,6 @@ class Connection(api.Connection):
return _paginate_query(models.Port, limit, marker,
sort_key, sort_dir)
@objects.objectify(objects.Port)
def get_ports_by_node_id(self, node_id, limit=None, marker=None,
sort_key=None, sort_dir=None):
query = model_query(models.Port)

View File

@ -26,7 +26,8 @@ class Port(base.IronicObject):
# make get_by_uuid() only work with a uuid
# Version 1.2: Add create() and destroy()
# Version 1.3: Add list()
VERSION = '1.3'
# Version 1.4: Add list_by_node_id()
VERSION = '1.4'
dbapi = dbapi.get_instance()
@ -47,6 +48,18 @@ class Port(base.IronicObject):
port.obj_reset_changes()
return port
@staticmethod
def _from_db_object_list(db_objects, cls, context):
"""Converts a list of database entities to a list of formal objects."""
port_list = []
for obj in db_objects:
port = Port._from_db_object(cls(), obj)
# FIXME(comstud): Setting of the context should be moved to
# _from_db_object().
port._context = context
port_list.append(port)
return port_list
@base.remotable_classmethod
def get(cls, context, port_id):
"""Find a port based on its id or uuid and return a Port object.
@ -120,18 +133,31 @@ class Port(base.IronicObject):
:returns: a list of :class:`Port` object.
"""
port_list = []
db_ports = cls.dbapi.get_port_list(limit=limit,
marker=marker,
sort_key=sort_key,
sort_dir=sort_dir)
for obj in db_ports:
port = Port._from_db_object(cls(), obj)
# FIXME(comstud): Setting of the context should be moved to
# _from_db_object().
port._context = context
port_list.append(port)
return port_list
return Port._from_db_object_list(db_ports, cls, context)
@base.remotable_classmethod
def list_by_node_id(cls, context, node_id, limit=None, marker=None,
sort_key=None, sort_dir=None):
"""Return a list of Port objects associated with a given node ID.
:param context: Security context.
:param node_id: the ID of the node.
:param limit: maximum number of resources to return in a single result.
:param marker: pagination marker for large data sets.
:param sort_key: column to sort results by.
:param sort_dir: direction to sort. "asc" or "desc".
:returns: a list of :class:`Port` object.
"""
db_ports = cls.dbapi.get_ports_by_node_id(node_id, limit=limit,
marker=marker,
sort_key=sort_key,
sort_dir=sort_dir)
return Port._from_db_object_list(db_ports, cls, context)
@base.remotable
def create(self, context=None):

View File

@ -33,7 +33,7 @@ from ironic.tests import base as tests_base
@mock.patch.object(dbapi.IMPL, 'release_node')
@mock.patch.object(dbapi.IMPL, 'reserve_node')
@mock.patch.object(driver_factory, 'get_driver')
@mock.patch.object(dbapi.IMPL, 'get_ports_by_node_id')
@mock.patch.object(objects.Port, 'list_by_node_id')
class TaskManagerTestCase(tests_base.TestCase):
def setUp(self):
super(TaskManagerTestCase, self).setUp()
@ -55,7 +55,7 @@ class TaskManagerTestCase(tests_base.TestCase):
self.assertFalse(task.shared)
reserve_mock.assert_called_once_with(self.host, 'fake-node-id')
get_ports_mock.assert_called_once_with(self.node.id)
get_ports_mock.assert_called_once_with(self.context, self.node.id)
get_driver_mock.assert_called_once_with(self.node.driver)
release_mock.assert_called_once_with(self.host, self.node.id)
self.assertFalse(node_get_mock.called)
@ -73,7 +73,7 @@ class TaskManagerTestCase(tests_base.TestCase):
self.assertFalse(task.shared)
reserve_mock.assert_called_once_with(self.host, 'fake-node-id')
get_ports_mock.assert_called_once_with(self.node.id)
get_ports_mock.assert_called_once_with(self.context, self.node.id)
get_driver_mock.assert_called_once_with('fake-driver')
release_mock.assert_called_once_with(self.host, self.node.id)
self.assertFalse(node_get_mock.called)
@ -106,7 +106,8 @@ class TaskManagerTestCase(tests_base.TestCase):
self.assertEqual([mock.call(self.host, 'node-id1'),
mock.call(self.host, 'node-id2')],
reserve_mock.call_args_list)
self.assertEqual([mock.call(self.node.id), mock.call(node2.id)],
self.assertEqual([mock.call(self.context, self.node.id),
mock.call(self.context, node2.id)],
get_ports_mock.call_args_list)
self.assertEqual([mock.call(self.node.driver),
mock.call(node2.driver)],
@ -168,7 +169,7 @@ class TaskManagerTestCase(tests_base.TestCase):
'fake-node-id')
reserve_mock.assert_called_once_with(self.host, 'fake-node-id')
get_ports_mock.assert_called_once_with(self.node.id)
get_ports_mock.assert_called_once_with(self.context, self.node.id)
self.assertFalse(get_driver_mock.called)
release_mock.assert_called_once_with(self.host, self.node.id)
self.assertFalse(node_get_mock.called)
@ -186,7 +187,7 @@ class TaskManagerTestCase(tests_base.TestCase):
'fake-node-id')
reserve_mock.assert_called_once_with(self.host, 'fake-node-id')
get_ports_mock.assert_called_once_with(self.node.id)
get_ports_mock.assert_called_once_with(self.context, self.node.id)
get_driver_mock.assert_called_once_with(self.node.driver)
release_mock.assert_called_once_with(self.host, self.node.id)
self.assertFalse(node_get_mock.called)
@ -205,7 +206,7 @@ class TaskManagerTestCase(tests_base.TestCase):
self.assertFalse(reserve_mock.called)
self.assertFalse(release_mock.called)
node_get_mock.assert_called_once_with(self.context, 'fake-node-id')
get_ports_mock.assert_called_once_with(self.node.id)
get_ports_mock.assert_called_once_with(self.context, self.node.id)
get_driver_mock.assert_called_once_with(self.node.driver)
def test_shared_lock_with_driver(self, get_ports_mock, get_driver_mock,
@ -225,7 +226,7 @@ class TaskManagerTestCase(tests_base.TestCase):
self.assertFalse(reserve_mock.called)
self.assertFalse(release_mock.called)
node_get_mock.assert_called_once_with(self.context, 'fake-node-id')
get_ports_mock.assert_called_once_with(self.node.id)
get_ports_mock.assert_called_once_with(self.context, self.node.id)
get_driver_mock.assert_called_once_with('fake-driver')
def test_shared_lock_node_get_exception(self, get_ports_mock,
@ -260,7 +261,7 @@ class TaskManagerTestCase(tests_base.TestCase):
self.assertFalse(reserve_mock.called)
self.assertFalse(release_mock.called)
node_get_mock.assert_called_once_with(self.context, 'fake-node-id')
get_ports_mock.assert_called_once_with(self.node.id)
get_ports_mock.assert_called_once_with(self.context, self.node.id)
self.assertFalse(get_driver_mock.called)
def test_shared_lock_get_driver_exception(self, get_ports_mock,
@ -279,7 +280,7 @@ class TaskManagerTestCase(tests_base.TestCase):
self.assertFalse(reserve_mock.called)
self.assertFalse(release_mock.called)
node_get_mock.assert_called_once_with(self.context, 'fake-node-id')
get_ports_mock.assert_called_once_with(self.node.id)
get_ports_mock.assert_called_once_with(self.context, self.node.id)
get_driver_mock.assert_called_once_with(self.node.driver)
def test_spawn_after(self, get_ports_mock, get_driver_mock,