Merge "Data migration enabling storage of resource attributes"
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(
|
||||
'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…
Reference in New Issue