diff --git a/heat/db/api.py b/heat/db/api.py index 0540fa93fb..6c23ee2f5b 100644 --- a/heat/db/api.py +++ b/heat/db/api.py @@ -55,8 +55,8 @@ def raw_template_create(context, values): return IMPL.raw_template_create(context, values) -def resource_data_get_all(resource): - return IMPL.resource_data_get_all(resource) +def resource_data_get_all(resource, data=None): + return IMPL.resource_data_get_all(resource, data) def resource_data_get(resource, key): diff --git a/heat/db/sqlalchemy/api.py b/heat/db/sqlalchemy/api.py index b05b45a076..86973b30ea 100644 --- a/heat/db/sqlalchemy/api.py +++ b/heat/db/sqlalchemy/api.py @@ -138,20 +138,21 @@ def resource_get_all(context): return results -def resource_data_get_all(resource): +def resource_data_get_all(resource, data=None): """ Looks up resource_data by resource.id. If data is encrypted, this method will decrypt the results. """ - result = (model_query(resource.context, models.ResourceData) - .filter_by(resource_id=resource.id)) + if data is None: + data = (model_query(resource.context, models.ResourceData) + .filter_by(resource_id=resource.id)) - if not result: + if not data: raise exception.NotFound(_('no resource data found')) ret = {} - for res in result: + for res in data: if res.redact: ret[res.key] = _decrypt(res.value, res.decrypt_method) else: diff --git a/heat/tests/test_sqlalchemy_api.py b/heat/tests/test_sqlalchemy_api.py index 849ef4644d..15f749f9c8 100644 --- a/heat/tests/test_sqlalchemy_api.py +++ b/heat/tests/test_sqlalchemy_api.py @@ -1399,11 +1399,18 @@ class DBAPIResourceDataTest(HeatTestCase): val = db_api.resource_data_get(self.resource, 'encryped_resource_key') self.assertEqual('test_value', val) + # get all by querying for data vals = db_api.resource_data_get_all(self.resource) self.assertEqual(2, len(vals)) self.assertEqual('foo', vals.get('test_resource_key')) self.assertEqual('test_value', vals.get('encryped_resource_key')) + # get all by using associated resource data + vals = db_api.resource_data_get_all(None, self.resource.data) + self.assertEqual(2, len(vals)) + self.assertEqual('foo', vals.get('test_resource_key')) + self.assertEqual('test_value', vals.get('encryped_resource_key')) + def test_resource_data_delete(self): create_resource_data(self.ctx, self.resource) res_data = db_api.resource_data_get_by_key(self.ctx, self.resource.id,