Merge "Add list() to Chassis, Node, Port objects"

This commit is contained in:
Jenkins 2014-08-13 17:51:33 +00:00 committed by Gerrit Code Review
commit a020a8c9ee
10 changed files with 120 additions and 16 deletions

View File

@ -156,9 +156,9 @@ class ChassisController(rest.RestController):
if marker:
marker_obj = objects.Chassis.get_by_uuid(pecan.request.context,
marker)
chassis = pecan.request.dbapi.get_chassis_list(limit, marker_obj,
sort_key=sort_key,
sort_dir=sort_dir)
chassis = objects.Chassis.list(pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
return ChassisCollection.convert_with_links(chassis, limit,
url=resource_url,
expand=expand,

View File

@ -610,10 +610,9 @@ class NodesController(rest.RestController):
if maintenance is not None:
filters['maintenance'] = maintenance
nodes = pecan.request.dbapi.get_node_list(filters, limit,
marker_obj,
sort_key=sort_key,
sort_dir=sort_dir)
nodes = objects.Node.list(pecan.request.context, limit, marker_obj,
sort_key=sort_key, sort_dir=sort_dir,
filters=filters)
parameters = {'sort_key': sort_key, 'sort_dir': sort_dir}
if associated:

View File

@ -201,9 +201,9 @@ class PortsController(rest.RestController):
elif address:
ports = self._get_ports_by_address(address)
else:
ports = pecan.request.dbapi.get_port_list(limit, marker_obj,
sort_key=sort_key,
sort_dir=sort_dir)
ports = objects.Port.list(pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
return PortCollection.convert_with_links(ports, limit,
url=resource_url,

View File

@ -205,7 +205,6 @@ class Connection(api.Connection):
return _paginate_query(models.Node, limit, marker,
sort_key, sort_dir, query)
@objects.objectify(objects.Node)
def get_node_list(self, filters=None, limit=None, marker=None,
sort_key=None, sort_dir=None):
query = model_query(models.Node)
@ -383,7 +382,6 @@ class Connection(api.Connection):
def get_port_by_vif(self, vif):
pass
@objects.objectify(objects.Port)
def get_port_list(self, limit=None, marker=None,
sort_key=None, sort_dir=None):
return _paginate_query(models.Port, limit, marker,
@ -458,7 +456,6 @@ class Connection(api.Connection):
except NoResultFound:
raise exception.ChassisNotFound(chassis=chassis_uuid)
@objects.objectify(objects.Chassis)
def get_chassis_list(self, limit=None, marker=None,
sort_key=None, sort_dir=None):
return _paginate_query(models.Chassis, limit, marker,

View File

@ -25,7 +25,8 @@ class Chassis(base.IronicObject):
# Version 1.1: Add get() and get_by_id() and make get_by_uuid()
# only work with a uuid
# Version 1.2: Add create() and destroy()
VERSION = '1.2'
# Version 1.3: Add list()
VERSION = '1.3'
dbapi = dbapi.get_instance()
@ -93,6 +94,32 @@ class Chassis(base.IronicObject):
chassis._context = context
return chassis
@base.remotable_classmethod
def list(cls, context, limit=None, marker=None,
sort_key=None, sort_dir=None):
"""Return a list of Chassis objects.
:param context: Security context.
: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:`Chassis` object.
"""
chassis_list = []
db_chassis = cls.dbapi.get_chassis_list(limit=limit,
marker=marker,
sort_key=sort_key,
sort_dir=sort_dir)
for obj in db_chassis:
chassis = Chassis._from_db_object(cls(), obj)
# FIXME(comstud): Setting of the context should be moved to
# _from_db_object().
chassis._context = context
chassis_list.append(chassis)
return chassis_list
@base.remotable
def create(self, context=None):
"""Create a Chassis record in the DB.

View File

@ -27,7 +27,8 @@ class Node(base.IronicObject):
# only work with a uuid
# Version 1.3: Add create() and destroy()
# Version 1.4: Add get_by_instance_uuid()
VERSION = '1.4'
# Version 1.5: Add list()
VERSION = '1.5'
dbapi = db_api.get_instance()
@ -131,6 +132,32 @@ class Node(base.IronicObject):
node._context = context
return node
@base.remotable_classmethod
def list(cls, context, limit=None, marker=None, sort_key=None,
sort_dir=None, filters=None):
"""Return a list of Node objects.
:param context: Security context.
: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".
:param filters: Filters to apply.
:returns: a list of :class:`Node` object.
"""
node_list = []
db_nodes = cls.dbapi.get_node_list(filters=filters, limit=limit,
marker=marker, sort_key=sort_key,
sort_dir=sort_dir)
for obj in db_nodes:
node = Node._from_db_object(cls(), obj)
# FIXME(comstud): Setting of the context should be moved to
# _from_db_object().
node._context = context
node_list.append(node)
return node_list
@base.remotable
def create(self, context=None):
"""Create a Node record in the DB.

View File

@ -25,7 +25,8 @@ class Port(base.IronicObject):
# Version 1.1: Add get() and get_by_id() and get_by_address() and
# make get_by_uuid() only work with a uuid
# Version 1.2: Add create() and destroy()
VERSION = '1.2'
# Version 1.3: Add list()
VERSION = '1.3'
dbapi = dbapi.get_instance()
@ -106,6 +107,32 @@ class Port(base.IronicObject):
port._context = context
return port
@base.remotable_classmethod
def list(cls, context, limit=None, marker=None,
sort_key=None, sort_dir=None):
"""Return a list of Port objects.
:param context: Security context.
: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.
"""
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
@base.remotable
def create(self, context=None):
"""Create a Port record in the DB.

View File

@ -14,6 +14,7 @@
# under the License.
import mock
from testtools.matchers import HasLength
from ironic.common import exception
from ironic.common import utils as ironic_utils
@ -117,3 +118,11 @@ class TestChassisObject(base.DbTestCase):
self.assertIsInstance(c, models.Chassis)
for c in _convert_many_db_chassis():
self.assertIsInstance(c, objects.Chassis)
def test_list(self):
with mock.patch.object(self.dbapi, 'get_chassis_list',
autospec=True) as mock_get_list:
mock_get_list.return_value = [self.fake_chassis]
chassis = objects.Chassis.list(self.context)
self.assertThat(chassis, HasLength(1))
self.assertIsInstance(chassis[0], objects.Chassis)

View File

@ -17,6 +17,7 @@ import datetime
import mock
from oslo.utils import timeutils
from testtools.matchers import HasLength
from ironic.common import exception
from ironic.db import api as db_api
@ -133,3 +134,11 @@ class TestNodeObject(base.DbTestCase):
self.assertIsInstance(n, models.Node)
for n in _convert_db_nodes():
self.assertIsInstance(n, objects.Node)
def test_list(self):
with mock.patch.object(self.dbapi, 'get_node_list',
autospec=True) as mock_get_list:
mock_get_list.return_value = [self.fake_node]
nodes = objects.Node.list(self.context)
self.assertThat(nodes, HasLength(1))
self.assertIsInstance(nodes[0], objects.Node)

View File

@ -14,6 +14,7 @@
# under the License.
import mock
from testtools.matchers import HasLength
from ironic.common import exception
from ironic.db import api as db_api
@ -124,3 +125,11 @@ class TestPortObject(base.DbTestCase):
self.assertIsInstance(p, models.Port)
for p in _convert_db_nodes():
self.assertIsInstance(p, objects.Port)
def test_list(self):
with mock.patch.object(self.dbapi, 'get_port_list',
autospec=True) as mock_get_list:
mock_get_list.return_value = [self.fake_port]
ports = objects.Port.list(self.context)
self.assertThat(ports, HasLength(1))
self.assertIsInstance(ports[0], objects.Port)