summaryrefslogtreecommitdiff
path: root/heat/objects
diff options
context:
space:
mode:
authorCrag Wolfe <cwolfe@redhat.com>2016-08-30 00:02:27 -0400
committerCrag Wolfe <cwolfe@redhat.com>2016-12-22 10:59:01 -0800
commit791c245c140046b58ecef43aeeaed35776f8a1c2 (patch)
tree9b30436ff5a58cf2c3396f31b1f3d33cf6f93992 /heat/objects
parent1ea6bb8bf62e5d98d71afff0bf4a1b93af3dfddd (diff)
downloadheat-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.py19
-rw-r--r--heat/objects/resource.py41
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,