예제 #1
0
    def _from_db_object(resource, context, db_resource, only_fields=None):
        if db_resource is None:
            return None
        for field in resource.fields:
            if (only_fields is not None and field not in only_fields
                    and field != 'id'):
                continue
            if field == 'data':
                resource['data'] = [
                    resource_data.ResourceData._from_db_object(
                        resource_data.ResourceData(context), resd)
                    for resd in db_resource.data
                ]
            elif field != 'attr_data':
                resource[field] = db_resource[field]

        if db_resource['rsrc_prop_data_id'] is not None:
            if hasattr(db_resource, '__dict__'):
                rpd_obj = db_resource.__dict__.get('rsrc_prop_data')
            else:
                rpd_obj = None
            if rpd_obj is not None:
                # Object is already eager loaded
                rpd_obj = (rpd.ResourcePropertiesData._from_db_object(
                    rpd.ResourcePropertiesData(), context, rpd_obj))
                resource._properties_data = rpd_obj.data
            else:
                resource._properties_data = {}
            if db_resource['properties_data']:
                LOG.error(
                    '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 = None

        if db_resource['attr_data'] is not None:
            resource._attr_data = rpd.ResourcePropertiesData._from_db_object(
                rpd.ResourcePropertiesData(context), context,
                db_resource['attr_data']).data
        else:
            resource._attr_data = None

        resource._context = context
        resource.obj_reset_changes()
        return resource
예제 #2
0
파일: event.py 프로젝트: sdake/heat
 def _from_db_object(context, event, db_event):
     event._resource_properties = None
     for field in event.fields:
         if field == 'resource_status_reason':
             # this works whether db_event is a dict or db ref
             event[field] = db_event['_resource_status_reason']
         else:
             event[field] = db_event[field]
     if db_event['rsrc_prop_data_id'] is None:
         event._resource_properties = db_event['resource_properties'] or {}
     else:
         if hasattr(db_event, '__dict__'):
             rpd_obj = db_event.__dict__.get('rsrc_prop_data')
         elif hasattr(db_event, 'rsrc_prop_data'):
             rpd_obj = db_event['rsrc_prop_data']
         else:
             rpd_obj = None
         if rpd_obj is not None:
             # Object is already eager loaded
             rpd_obj = (
                 rpd.ResourcePropertiesData._from_db_object(
                     rpd.ResourcePropertiesData(),
                     context,
                     rpd_obj))
             event._resource_properties = rpd_obj.data
     event._context = context
     event.obj_reset_changes()
     return event
예제 #3
0
 def _get_rpd_and_db_obj(self):
     rpd_obj = rpd_object.ResourcePropertiesData().create(self.ctx,
                                                          self.data)
     db_obj = self.ctx.session.query(
         models.ResourcePropertiesData).get(rpd_obj.id)
     self.assertEqual(len(self.data), len(db_obj['data']))
     return rpd_obj, db_obj
예제 #4
0
파일: resource.py 프로젝트: mhe5423914/heat
    def _from_db_object(resource, context, db_resource):
        if db_resource is None:
            return None
        for field in resource.fields:
            if field == 'data':
                resource['data'] = [
                    resource_data.ResourceData._from_db_object(
                        resource_data.ResourceData(context), resd)
                    for resd in db_resource.data
                ]
            else:
                resource[field] = db_resource[field]

        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(
                    '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 = {}

        if db_resource['attr_data'] is not None:
            resource['attr_data'] = \
                rpd.ResourcePropertiesData._from_db_object(
                    rpd.ResourcePropertiesData(context), context,
                    db_resource['attr_data'])

        resource._context = context
        resource.obj_reset_changes()
        return resource
예제 #5
0
 def test_event_object_resource_properties_data(self):
     cfg.CONF.set_override('encrypt_parameters_and_properties', True)
     data = {'p1': 'hello', 'p2': 'too soon?'}
     rpd_obj = rpd_object.ResourcePropertiesData().create(self.ctx, data)
     e_obj = event_object.Event().create(
         self.ctx, {
             'stack_id': self.stack.id,
             'uuid': str(uuid.uuid4()),
             'rsrc_prop_data_id': rpd_obj.id
         })
     e_obj = event_object.Event.get_all_by_stack(utils.dummy_context(),
                                                 self.stack.id)[0]
     # properties data appears unencrypted to event object
     self.assertEqual(data, e_obj.resource_properties)
예제 #6
0
 def _from_db_object(context, event, db_event):
     for field in event.fields:
             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
예제 #7
0
    def test_rsrc_prop_data_encrypt(self):
        cfg.CONF.set_override('encrypt_parameters_and_properties', True)
        rpd_obj, db_obj = self._get_rpd_and_db_obj()

        # verify data is encrypted in the db
        self.assertNotEqual(db_obj['data'], self.data)
        for key in self.data:
            self.assertEqual('cryptography_decrypt_v1', db_obj['data'][key][0])

        # verify rpd_obj data is unencrypted
        self.assertEqual(self.data, rpd_obj['data'])

        # verify loading a fresh rpd_obj has decrypted data
        rpd_obj = rpd_object.ResourcePropertiesData._from_db_object(
            rpd_object.ResourcePropertiesData(self.ctx), self.ctx, db_obj)
        self.assertEqual(self.data, rpd_obj['data'])
예제 #8
0
 def test_event_object_resource_properties_data(self):
     cfg.CONF.set_override('encrypt_parameters_and_properties',
                           True,
                           enforce_type=True)
     data = {'p1': 'hello', 'p2': 'too soon?'}
     rpd_obj = rpd_object.ResourcePropertiesData().create(self.ctx, data)
     rpd_db_obj = self.ctx.session.query(models.ResourcePropertiesData).get(
         rpd_obj.id)
     e_obj = event_object.Event().create(
         self.ctx, {
             'stack_id': self.stack.id,
             'uuid': str(uuid.uuid4()),
             'rsrc_prop_data': rpd_db_obj
         })
     e_obj = event_object.Event().get_by_id(utils.dummy_context(), e_obj.id)
     # properties data appears unencrypted to event object
     self.assertEqual(data, e_obj.rsrc_prop_data.data)