84 lines
2.7 KiB
Python
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",
|
|
]
|
|
}
|