summaryrefslogtreecommitdiffstats
path: root/nova/db
diff options
context:
space:
mode:
authorTushar Patil <tushar.vitthal.patil@gmail.com>2011-08-16 16:18:48 -0700
committerTushar Patil <tushar.vitthal.patil@gmail.com>2011-08-16 16:18:48 -0700
commit982427040554d3cfcee25abab981215f73650b3e (patch)
tree17fdd26910568059637e6b203f3284d64402579a /nova/db
parent9081e8b62ea01828238ecaebdcf3e627ada3fe9a (diff)
parent6dbcc60d5f8d4995a706f0de449756ecea4ebaa0 (diff)
downloadnova-982427040554d3cfcee25abab981215f73650b3e.tar.gz
nova-982427040554d3cfcee25abab981215f73650b3e.tar.xz
nova-982427040554d3cfcee25abab981215f73650b3e.zip
Resolved conflicts and merged with trunk
Diffstat (limited to 'nova/db')
-rw-r--r--nova/db/sqlalchemy/api.py21
1 files changed, 20 insertions, 1 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 21eb85b2c..2f9cab1ab 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -1212,6 +1212,19 @@ def instance_get_all_by_filters(context, filters):
return True
return False
+ def _regexp_filter_by_metadata(instance, meta):
+ inst_metadata = [{node['key']: node['value']} \
+ for node in instance['metadata']]
+ if isinstance(meta, list):
+ for node in meta:
+ if node not in inst_metadata:
+ return False
+ elif isinstance(meta, dict):
+ for k, v in meta.iteritems():
+ if {k: v} not in inst_metadata:
+ return False
+ return True
+
def _regexp_filter_by_column(instance, filter_name, filter_re):
try:
v = getattr(instance, filter_name)
@@ -1270,7 +1283,9 @@ def instance_get_all_by_filters(context, filters):
query_prefix = _exact_match_filter(query_prefix, filter_name,
filters.pop(filter_name))
- instances = query_prefix.all()
+ instances = query_prefix.\
+ filter_by(deleted=can_read_deleted(context)).\
+ all()
if not instances:
return []
@@ -1286,6 +1301,9 @@ def instance_get_all_by_filters(context, filters):
filter_re = re.compile(str(filters[filter_name]))
if filter_func:
filter_l = lambda instance: filter_func(instance, filter_re)
+ elif filter_name == 'metadata':
+ filter_l = lambda instance: _regexp_filter_by_metadata(instance,
+ filters[filter_name])
else:
filter_l = lambda instance: _regexp_filter_by_column(instance,
filter_name, filter_re)
@@ -2021,6 +2039,7 @@ def quota_get(context, project_id, resource, session=None):
@require_context
def quota_get_all_by_project(context, project_id):
+ authorize_project_context(context, project_id)
session = get_session()
result = {'project_id': project_id}
rows = session.query(models.Quota).\