diff --git a/ceilometer/api/controllers/v2.py b/ceilometer/api/controllers/v2.py index 5fbec2143..584dad7c6 100644 --- a/ceilometer/api/controllers/v2.py +++ b/ceilometer/api/controllers/v2.py @@ -256,6 +256,8 @@ def _query_to_kwargs(query, db_func): stamp['search_offset'] = i.value elif i.field.startswith('metadata.'): metaquery[i.field] = i._get_value_as_type() + elif i.field.startswith('resource_metadata.'): + metaquery[i.field[9:]] = i._get_value_as_type() else: trans[translation.get(i.field, i.field)] = i.value diff --git a/tests/api/v2/test_list_meters_scenarios.py b/tests/api/v2/test_list_meters_scenarios.py index d35f73680..abd3f999e 100644 --- a/tests/api/v2/test_list_meters_scenarios.py +++ b/tests/api/v2/test_list_meters_scenarios.py @@ -173,6 +173,20 @@ class TestListMeters(FunctionalTest, self.assertEqual(set(r['counter_name'] for r in data), set(['meter.test'])) + def test_list_meters_resource_metadata_query(self): + # NOTE(jd) Same test as above, but with the alias resource_metadata + # as query field + data = self.get_json('/meters/meter.test', + q=[{'field': 'resource_metadata.tag', + 'op': 'eq', + 'value': 'self.sample1', + }],) + self.assertEqual(1, len(data)) + self.assertEqual(set(r['resource_id'] for r in data), + set(['resource-id'])) + self.assertEqual(set(r['counter_name'] for r in data), + set(['meter.test'])) + def test_list_meters_multi_metadata_query(self): data = self.get_json('/meters/meter.test', q=[{'field': 'metadata.tag',