neutron/neutron/db/migration/alembic_migrations/versions/stein/expand/d72db3e25539_modify_uniq_po...

84 lines
2.7 KiB
Python

# Copyright 2018 OpenStack Foundation
#
# 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.
#
"""modify uniq port forwarding
Revision ID: d72db3e25539
Revises: 867d39095bf4
Create Date: 2018-10-12 19:51:11.981394
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.engine import reflection
from neutron.db import migration
# revision identifiers, used by Alembic.
revision = 'd72db3e25539'
down_revision = '867d39095bf4'
TABLE_NAME = 'portforwardings'
def upgrade():
inspector = reflection.Inspector.from_engine(op.get_bind())
foreign_keys = inspector.get_foreign_keys(TABLE_NAME)
migration.remove_foreign_keys(TABLE_NAME, foreign_keys)
unique_constraints = inspector.get_unique_constraints(TABLE_NAME)
for constraint in unique_constraints:
op.drop_constraint(
constraint_name=constraint['name'],
table_name=TABLE_NAME,
type_="unique"
)
op.create_unique_constraint(
constraint_name=('uniq_port_forwardings0floatingip_id0'
'external_port0protocol'),
table_name=TABLE_NAME,
columns=['floatingip_id', 'external_port', 'protocol']
)
op.create_unique_constraint(
constraint_name=('uniq_port_forwardings0internal_neutron_port_id0'
'socket0protocol'),
table_name=TABLE_NAME,
columns=['internal_neutron_port_id', 'socket', 'protocol']
)
migration.create_foreign_keys(TABLE_NAME, foreign_keys)
def expand_drop_exceptions():
"""Drop and replace the unique constraints for table portforwardings
Drop the existing portforwardings foreign key uniq constraints and then
replace them with new unique constraints with column ``protocol``.
This is needed to use drop in expand migration to pass test_branches.
"""
return {
sa.Constraint: [
"portforwardings_ibfk_1",
"portforwardings_ibfk_2",
"uniq_port_forwardings0floatingip_id0external_port",
"uniq_port_forwardings0internal_neutron_port_id0socket",
"portforwardings_floatingip_id_fkey",
"portforwardings_internal_neutron_port_id_fkey",
]
}