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:
parent
a04eddbbcd
commit
2856ef26d2
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue