keystone/keystone/common/sql/contract_repo/versions/047_contract_expand_update_...

64 lines
2.8 KiB
Python

# 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.
import migrate
import sqlalchemy as sql
def upgrade(migrate_engine):
meta = sql.MetaData()
meta.bind = migrate_engine
# For Mysql and PostgreSQL, drop the FK in limit table, drop the unique
# constraint in registered limit and limit tables.
#
# For SQLite, drop the old tables, then rename the new tables.
limit_table = sql.Table('limit', meta, autoload=True)
registered_limit_table = sql.Table('registered_limit', meta, autoload=True)
if migrate_engine.name != 'sqlite':
project_table = sql.Table('project', meta, autoload=True)
inspector = sql.inspect(migrate_engine)
for fk in inspector.get_foreign_keys('limit'):
fkey = migrate.ForeignKeyConstraint(
[limit_table.c.project_id],
[project_table.c.id],
name=fk['name'])
fkey.drop()
for uc in inspector.get_unique_constraints('limit'):
if set(uc['column_names']) == set(['project_id', 'service_id',
'region_id', 'resource_name']):
uc = migrate.UniqueConstraint(limit_table.c.project_id,
limit_table.c.service_id,
limit_table.c.region_id,
limit_table.c.resource_name,
name=uc['name'])
uc.drop()
for uc in inspector.get_unique_constraints('registered_limit'):
if set(uc['column_names']) == set(['service_id', 'region_id',
'resource_name']):
uc = migrate.UniqueConstraint(
registered_limit_table.c.service_id,
registered_limit_table.c.region_id,
registered_limit_table.c.resource_name,
name=uc['name'])
uc.drop()
else:
registered_limit_table_new = sql.Table('registered_limit_new', meta,
autoload=True)
limit_table_new = sql.Table('limit_new', meta, autoload=True)
limit_table.drop()
limit_table_new.rename('limit')
registered_limit_table.drop()
registered_limit_table_new.rename('registered_limit')