Add parameter for filtering nodes by maintenance mode
Boolean parameter 'maintenance' added to API for filtering nodes by maintenance mode, example: /nodes?maintenance=false strutils.bool_from_string() used for converting 'associated' and 'maintenance' parameters, accepted values now for True ('1', 't', 'true', 'on', 'y', 'yes'), for False ('0', 'f', 'false', 'off', 'n', 'no') case-insensitive. Refactored dbapi method get_node_list with filters used for _get_nodes_collection in nodes controller. Partial-Bug: #1260099 Partial-Bug: #1271291 Change-Id: I01a62eb641316e890d191cf569bb3cf00b7619f2
This commit is contained in:
@@ -183,18 +183,14 @@ class Connection(api.Connection):
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def get_nodeinfo_list(self, columns=None, filters=None, limit=None,
|
||||
marker=None, sort_key=None, sort_dir=None):
|
||||
# list-ify columns and filters default values because it is bad form
|
||||
# to include a mutable list in function definitions.
|
||||
def _add_nodes_filters(self, query, filters):
|
||||
if filters is None:
|
||||
filters = []
|
||||
if columns is None:
|
||||
columns = [models.Node.id]
|
||||
else:
|
||||
columns = [getattr(models.Node, c) for c in columns]
|
||||
|
||||
query = model_query(*columns, base_model=models.Node)
|
||||
if 'chassis_uuid' in filters:
|
||||
# get_chassis() to raise an exception if the chassis is not found
|
||||
chassis_obj = self.get_chassis(filters['chassis_uuid'])
|
||||
query = query.filter_by(chassis_id=chassis_obj.id)
|
||||
if 'associated' in filters:
|
||||
if filters['associated']:
|
||||
query = query.filter(models.Node.instance_uuid != None)
|
||||
@@ -205,40 +201,32 @@ class Connection(api.Connection):
|
||||
query = query.filter(models.Node.reservation != None)
|
||||
else:
|
||||
query = query.filter(models.Node.reservation == None)
|
||||
if 'maintenance' in filters:
|
||||
query = query.filter_by(maintenance=filters['maintenance'])
|
||||
if 'driver' in filters:
|
||||
query = query.filter(models.Node.driver == filters['driver'])
|
||||
query = query.filter_by(driver=filters['driver'])
|
||||
|
||||
return query
|
||||
|
||||
def get_nodeinfo_list(self, columns=None, filters=None, limit=None,
|
||||
marker=None, sort_key=None, sort_dir=None):
|
||||
# list-ify columns default values because it is bad form
|
||||
# to include a mutable list in function definitions.
|
||||
if columns is None:
|
||||
columns = [models.Node.id]
|
||||
else:
|
||||
columns = [getattr(models.Node, c) for c in columns]
|
||||
|
||||
query = model_query(*columns, base_model=models.Node)
|
||||
query = self._add_nodes_filters(query, filters)
|
||||
return _paginate_query(models.Node, limit, marker,
|
||||
sort_key, sort_dir, query)
|
||||
|
||||
@objects.objectify(objects.Node)
|
||||
def get_node_list(self, limit=None, marker=None,
|
||||
def get_node_list(self, filters=None, limit=None, marker=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
return _paginate_query(models.Node, limit, marker,
|
||||
sort_key, sort_dir)
|
||||
|
||||
@objects.objectify(objects.Node)
|
||||
def get_nodes_by_chassis(self, chassis_id, limit=None, marker=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
# get_chassis() to raise an exception if the chassis is not found
|
||||
chassis_obj = self.get_chassis(chassis_id)
|
||||
query = model_query(models.Node)
|
||||
query = query.filter_by(chassis_id=chassis_obj.id)
|
||||
return _paginate_query(models.Node, limit, marker,
|
||||
sort_key, sort_dir, query)
|
||||
|
||||
@objects.objectify(objects.Node)
|
||||
def get_associated_nodes(self, limit=None, marker=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
query = model_query(models.Node).\
|
||||
filter(models.Node.instance_uuid != None)
|
||||
return _paginate_query(models.Node, limit, marker,
|
||||
sort_key, sort_dir, query)
|
||||
|
||||
@objects.objectify(objects.Node)
|
||||
def get_unassociated_nodes(self, limit=None, marker=None,
|
||||
sort_key=None, sort_dir=None):
|
||||
query = model_query(models.Node).\
|
||||
filter(models.Node.instance_uuid == None)
|
||||
query = self._add_nodes_filters(query, filters)
|
||||
return _paginate_query(models.Node, limit, marker,
|
||||
sort_key, sort_dir, query)
|
||||
|
||||
|
Reference in New Issue
Block a user