diff options
| author | Tushar Patil <tushar.vitthal.patil@gmail.com> | 2011-08-16 16:18:48 -0700 |
|---|---|---|
| committer | Tushar Patil <tushar.vitthal.patil@gmail.com> | 2011-08-16 16:18:48 -0700 |
| commit | 982427040554d3cfcee25abab981215f73650b3e (patch) | |
| tree | 17fdd26910568059637e6b203f3284d64402579a /nova/db | |
| parent | 9081e8b62ea01828238ecaebdcf3e627ada3fe9a (diff) | |
| parent | 6dbcc60d5f8d4995a706f0de449756ecea4ebaa0 (diff) | |
| download | nova-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.py | 21 |
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).\ |
