Merge "Data migration enabling storage of resource attributes"
This commit is contained in:
commit
a77ef39048
@ -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(
|
sqlalchemy.ForeignKey(
|
||||||
'resource_properties_data.id'))
|
'resource_properties_data.id'))
|
||||||
rsrc_prop_data = relationship(ResourcePropertiesData,
|
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
|
# 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
|
# 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': fields.StringField(nullable=True),
|
||||||
'status_reason': fields.StringField(nullable=True),
|
'status_reason': fields.StringField(nullable=True),
|
||||||
'action': 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),
|
'rsrc_metadata': heat_fields.JsonField(nullable=True),
|
||||||
'data': fields.ListOfObjectsField(
|
'data': fields.ListOfObjectsField(
|
||||||
resource_data.ResourceData,
|
resource_data.ResourceData,
|
||||||
@ -133,6 +136,12 @@ class Resource(
|
|||||||
else:
|
else:
|
||||||
resource._properties_data = {}
|
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._context = context
|
||||||
resource.obj_reset_changes()
|
resource.obj_reset_changes()
|
||||||
return resource
|
return resource
|
||||||
|
@ -733,6 +733,10 @@ class HeatMigrationsCheckers(test_migrations.WalkVersionsMixin,
|
|||||||
'resource_properties_data',
|
'resource_properties_data',
|
||||||
column[0])
|
column[0])
|
||||||
|
|
||||||
|
def _check_080(self, engine, data):
|
||||||
|
self.assertColumnExists(engine, 'resource',
|
||||||
|
'attr_data_id')
|
||||||
|
|
||||||
|
|
||||||
class TestHeatMigrationsMySQL(HeatMigrationsCheckers,
|
class TestHeatMigrationsMySQL(HeatMigrationsCheckers,
|
||||||
test_base.MySQLOpportunisticTestCase):
|
test_base.MySQLOpportunisticTestCase):
|
||||||
|
Loading…
Reference in New Issue
Block a user