Merge "Data migration enabling storage of resource attributes"

changes/75/439875/1
Jenkins 6 years ago committed by Gerrit Code Review
commit a77ef39048
  1. 31
      heat/db/sqlalchemy/migrate_repo/versions/080_resource_attrs_data.py
  2. 7
      heat/db/sqlalchemy/models.py
  3. 9
      heat/objects/resource.py
  4. 4
      heat/tests/db/test_migrations.py

@ -0,0 +1,31 @@
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from migrate.changeset import constraint
import sqlalchemy
def upgrade(migrate_engine):
meta = sqlalchemy.MetaData(bind=migrate_engine)
resource = sqlalchemy.Table('resource', meta, autoload=True)
resource_properties_data = sqlalchemy.Table('resource_properties_data',
meta, autoload=True)
attr_data_id = sqlalchemy.Column('attr_data_id',
sqlalchemy.Integer)
attr_data_id.create(resource)
res_fkey = constraint.ForeignKeyConstraint(
columns=[resource.c.attr_data_id],
refcolumns=[resource_properties_data.c.id],
name='rsrc_attr_data_ref')
res_fkey.create()

@ -278,7 +278,12 @@ class Resource(BASE, HeatBase, StateAware):
sqlalchemy.ForeignKey(
'resource_properties_data.id'))
rsrc_prop_data = relationship(ResourcePropertiesData,
backref=backref('resource'))
foreign_keys=[rsrc_prop_data_id])
attr_data_id = sqlalchemy.Column(sqlalchemy.Integer,
sqlalchemy.ForeignKey(
'resource_properties_data.id'))
attr_data = relationship(ResourcePropertiesData,
foreign_keys=[attr_data_id])
# Override timestamp column to store the correct value: it should be the
# time the create/update call was issued, not the time the DB entry is

@ -78,6 +78,9 @@ class Resource(
'status': fields.StringField(nullable=True),
'status_reason': fields.StringField(nullable=True),
'action': fields.StringField(nullable=True),
'attr_data': fields.ObjectField(
rpd.ResourcePropertiesData, nullable=True),
'attr_data_id': fields.IntegerField(nullable=True),
'rsrc_metadata': heat_fields.JsonField(nullable=True),
'data': fields.ListOfObjectsField(
resource_data.ResourceData,
@ -133,6 +136,12 @@ class Resource(
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

@ -733,6 +733,10 @@ class HeatMigrationsCheckers(test_migrations.WalkVersionsMixin,
'resource_properties_data',
column[0])
def _check_080(self, engine, data):
self.assertColumnExists(engine, 'resource',
'attr_data_id')
class TestHeatMigrationsMySQL(HeatMigrationsCheckers,
test_base.MySQLOpportunisticTestCase):

Loading…
Cancel
Save