diff options
author | Crag Wolfe <cwolfe@redhat.com> | 2016-08-30 00:02:27 -0400 |
---|---|---|
committer | Crag Wolfe <cwolfe@redhat.com> | 2016-12-22 10:59:01 -0800 |
commit | 791c245c140046b58ecef43aeeaed35776f8a1c2 (patch) | |
tree | 9b30436ff5a58cf2c3396f31b1f3d33cf6f93992 /heat/objects | |
parent | 1ea6bb8bf62e5d98d71afff0bf4a1b93af3dfddd (diff) | |
download | heat-791c245c140046b58ecef43aeeaed35776f8a1c2.tar.gz |
Add resource_properties_data assoc. to resource, event objs
Add the resource_properties_data association to resource and event
objects. The resource and event engine objects do not use yet
it but will soon.
Change-Id: Idecaafffbc5e9bfcd2355e2a165836a5ed89b16f
Diffstat (limited to 'heat/objects')
-rw-r--r-- | heat/objects/event.py | 19 | ||||
-rw-r--r-- | heat/objects/resource.py | 41 |
2 files changed, 52 insertions, 8 deletions
diff --git a/heat/objects/event.py b/heat/objects/event.py index 7b1ef7bc2..2d5676a9e 100644 --- a/heat/objects/event.py +++ b/heat/objects/event.py @@ -20,7 +20,7 @@ from oslo_versionedobjects import fields from heat.common import identifier from heat.db.sqlalchemy import api as db_api from heat.objects import base as heat_base -from heat.objects import fields as heat_fields +from heat.objects import resource_properties_data as rpd class Event( @@ -37,7 +37,8 @@ class Event( 'physical_resource_id': fields.StringField(nullable=True), 'resource_status_reason': fields.StringField(nullable=True), 'resource_type': fields.StringField(nullable=True), - 'resource_properties': heat_fields.JsonField(nullable=True), + 'rsrc_prop_data': fields.ObjectField( + rpd.ResourcePropertiesData), 'created_at': fields.DateTimeField(read_only=True), 'updated_at': fields.DateTimeField(nullable=True), } @@ -45,11 +46,23 @@ class Event( @staticmethod def _from_db_object(context, event, db_event): for field in event.fields: - event[field] = db_event[field] + event[field] = db_event[field] + if db_event['rsrc_prop_data']: + event['rsrc_prop_data'] = \ + rpd.ResourcePropertiesData._from_db_object( + rpd.ResourcePropertiesData(context), context, + db_event['rsrc_prop_data']) + event._resource_properties = event['rsrc_prop_data'].data + else: + event._resource_properties = db_event['resource_properties'] or {} event._context = context event.obj_reset_changes() return event + @property + def resource_properties(self): + return self._resource_properties + @classmethod def get_by_id(cls, context, event_id): db_event = db_api.event_get(context, event_id) diff --git a/heat/objects/resource.py b/heat/objects/resource.py index 7530bc35c..c1a365c2f 100644 --- a/heat/objects/resource.py +++ b/heat/objects/resource.py @@ -18,6 +18,7 @@ import collections from oslo_config import cfg +from oslo_log import log as logging from oslo_versionedobjects import base from oslo_versionedobjects import fields import six @@ -26,13 +27,17 @@ import tenacity from heat.common import crypt from heat.common import exception from heat.common.i18n import _ +from heat.common.i18n import _LE from heat.db.sqlalchemy import api as db_api from heat.objects import base as heat_base from heat.objects import fields as heat_fields from heat.objects import resource_data +from heat.objects import resource_properties_data as rpd cfg.CONF.import_opt('encrypt_parameters_and_properties', 'heat.common.config') +LOG = logging.getLogger(__name__) + def retry_on_conflict(func): wrapper = tenacity.retry( @@ -74,12 +79,14 @@ class Resource( 'status_reason': fields.StringField(nullable=True), 'action': fields.StringField(nullable=True), 'rsrc_metadata': heat_fields.JsonField(nullable=True), - 'properties_data': heat_fields.JsonField(nullable=True), - 'properties_data_encrypted': fields.BooleanField(default=False), 'data': fields.ListOfObjectsField( resource_data.ResourceData, nullable=True ), + 'rsrc_prop_data': fields.ObjectField( + rpd.ResourcePropertiesData, nullable=True), + 'rsrc_prop_data_id': fields.ObjectField( + fields.IntegerField(nullable=True)), 'engine_id': fields.StringField(nullable=True), 'atomic_key': fields.IntegerField(nullable=True), 'current_template_id': fields.IntegerField(), @@ -102,14 +109,38 @@ class Resource( else: resource[field] = db_resource[field] - if resource.properties_data_encrypted and resource.properties_data: - decrypted_data = crypt.decrypted_dict(resource.properties_data) - resource.properties_data = decrypted_data + if db_resource['rsrc_prop_data'] is not None: + resource['rsrc_prop_data'] = \ + rpd.ResourcePropertiesData._from_db_object( + rpd.ResourcePropertiesData(context), context, + db_resource['rsrc_prop_data']) + resource._properties_data = resource['rsrc_prop_data'].data + if db_resource['properties_data']: + LOG.error( + _LE('Unexpected condition where resource.rsrc_prop_data ' + 'and resource.properties_data are both not null. ' + 'rsrc_prop_data.id: %(rsrc_prop_data_id)s ,' + 'resource id: %(res_id)s') + % {'rsrc_prop_data_id': resource['rsrc_prop_data'].id, + 'res_id': resource['id']}) + elif db_resource['properties_data']: # legacy field + if db_resource['properties_data_encrypted']: + decrypted_data = crypt.decrypted_dict( + db_resource['properties_data']) + resource._properties_data = decrypted_data + else: + resource._properties_data = db_resource['properties_data'] + else: + resource._properties_data = {} resource._context = context resource.obj_reset_changes() return resource + @property + def properties_data(self): + return self._properties_data + @classmethod def get_obj(cls, context, resource_id, refresh=False): resource_db = db_api.resource_get(context, resource_id, |