Removes downgrade from db migration scripts
downgrade is not to be supported from kilo release onwards and is good to clean up the code. Closes-bug: #1668887 Change-Id: I4b3f264d8691b74d602df466752eccbea533c209
This commit is contained in:
parent
868bc0d971
commit
3ca19f068e
tacker
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
The migrations in the alembic/versions contain the changes needed to migrate
|
The migrations in the alembic/versions contain the changes needed to migrate
|
||||||
from older Tacker releases to newer versions. A migration occurs by executing
|
from older Tacker releases to newer versions. A migration occurs by executing
|
||||||
a script that details the changes needed to upgrade/downgrade the database. The
|
a script that details the changes needed to upgrade the database. The
|
||||||
migration scripts are ordered so that multiple scripts can run sequentially to
|
migration scripts are ordered so that multiple scripts can run sequentially to
|
||||||
update the database. The scripts are executed by Tacker's migration wrapper
|
update the database. The scripts are executed by Tacker's migration wrapper
|
||||||
which uses the Alembic library to manage the migration. Tacker supports
|
which uses the Alembic library to manage the migration. Tacker supports
|
||||||
@ -50,15 +50,11 @@ Upgrade the database incrementally:
|
|||||||
$ tacker-db-manage --config-file /path/to/tacker.conf \
|
$ tacker-db-manage --config-file /path/to/tacker.conf \
|
||||||
--config-file /path/to/plugin/config.ini upgrade --delta <# of revs>
|
--config-file /path/to/plugin/config.ini upgrade --delta <# of revs>
|
||||||
|
|
||||||
Downgrade the database by a certain number of revisions:
|
|
||||||
$ tacker-db-manage --config-file /path/to/tacker.conf \
|
|
||||||
--config-file /path/to/plugin/config.ini downgrade --delta <# of revs>
|
|
||||||
|
|
||||||
|
|
||||||
DEVELOPERS:
|
DEVELOPERS:
|
||||||
A database migration script is required when you submit a change to Tacker
|
A database migration script is required when you submit a change to Tacker
|
||||||
that alters the database model definition. The migration script is a special
|
that alters the database model definition. The migration script is a special
|
||||||
python file that includes code to update/downgrade the database to match the
|
python file that includes code to upgrade the database to match the
|
||||||
changes in the model definition. Alembic will execute these scripts in order to
|
changes in the model definition. Alembic will execute these scripts in order to
|
||||||
provide a linear migration path between revision. The tacker-db-manage command
|
provide a linear migration path between revision. The tacker-db-manage command
|
||||||
can be used to generate migration template for you to complete. The operations
|
can be used to generate migration template for you to complete. The operations
|
||||||
@ -74,7 +70,7 @@ database state with the models. You should inspect the autogenerated template
|
|||||||
to ensure that the proper models have been altered.
|
to ensure that the proper models have been altered.
|
||||||
|
|
||||||
In rare circumstances, you may want to start with an empty migration template
|
In rare circumstances, you may want to start with an empty migration template
|
||||||
and manually author the changes necessary for an upgrade/downgrade. You can
|
and manually author the changes necessary for an upgrade. You can
|
||||||
create a blank file via:
|
create a blank file via:
|
||||||
|
|
||||||
$ tacker-db-manage --config-file /path/to/tacker.conf \
|
$ tacker-db-manage --config-file /path/to/tacker.conf \
|
||||||
@ -82,8 +78,7 @@ $ tacker-db-manage --config-file /path/to/tacker.conf \
|
|||||||
-m "description of revision"
|
-m "description of revision"
|
||||||
|
|
||||||
The migration timeline should remain linear so that there is a clear path when
|
The migration timeline should remain linear so that there is a clear path when
|
||||||
upgrading/downgrading. To verify that the timeline does branch, you can run
|
upgrading. To verify that the timeline does branch, you can run this command:
|
||||||
this command:
|
|
||||||
$ tacker-db-manage --config-file /path/to/tacker.conf \
|
$ tacker-db-manage --config-file /path/to/tacker.conf \
|
||||||
--config-file /path/to/plugin/config.ini check_migration
|
--config-file /path/to/plugin/config.ini check_migration
|
||||||
|
|
||||||
|
@ -34,7 +34,3 @@ from tacker.db import migration
|
|||||||
|
|
||||||
def upgrade(active_plugins=None, options=None):
|
def upgrade(active_plugins=None, options=None):
|
||||||
${upgrades if upgrades else "pass"}
|
${upgrades if upgrades else "pass"}
|
||||||
|
|
||||||
|
|
||||||
def downgrade(active_plugins=None, options=None):
|
|
||||||
${downgrades if downgrades else "pass"}
|
|
||||||
|
@ -96,13 +96,3 @@ def upgrade(active_plugins=None, options=None):
|
|||||||
mysql_engine='InnoDB'
|
mysql_engine='InnoDB'
|
||||||
)
|
)
|
||||||
# end Alembic commands #
|
# end Alembic commands #
|
||||||
|
|
||||||
|
|
||||||
def downgrade(active_plugins=None, options=None):
|
|
||||||
# commands auto generated by Alembic - please adjust! #
|
|
||||||
op.drop_table('servicedevicebindings')
|
|
||||||
op.drop_table('servicecontexts')
|
|
||||||
op.drop_table('serviceinstances')
|
|
||||||
op.drop_table('deviceservicecontexts')
|
|
||||||
op.drop_table('servicetypes')
|
|
||||||
# end Alembic commands #
|
|
||||||
|
@ -40,14 +40,3 @@ def upgrade(active_plugins=None, options=None):
|
|||||||
op.alter_column(u'devices', 'status', existing_type=mysql.VARCHAR(
|
op.alter_column(u'devices', 'status', existing_type=mysql.VARCHAR(
|
||||||
length=255), nullable=False)
|
length=255), nullable=False)
|
||||||
# end Alembic commands #s
|
# end Alembic commands #s
|
||||||
|
|
||||||
|
|
||||||
def downgrade(active_plugins=None, options=None):
|
|
||||||
# commands auto generated by Alembic - please adjust! #
|
|
||||||
op.alter_column(u'devices', 'status',
|
|
||||||
existing_type=mysql.VARCHAR(length=255),
|
|
||||||
nullable=True)
|
|
||||||
op.alter_column(u'deviceattributes', 'device_id',
|
|
||||||
existing_type=mysql.VARCHAR(length=255),
|
|
||||||
nullable=True)
|
|
||||||
# end Alembic commands #
|
|
||||||
|
@ -33,7 +33,3 @@ def upgrade(active_plugins=None, options=None):
|
|||||||
op.drop_table('proxymgmtports')
|
op.drop_table('proxymgmtports')
|
||||||
op.drop_table('proxyserviceports')
|
op.drop_table('proxyserviceports')
|
||||||
# end Alembic commands #
|
# end Alembic commands #
|
||||||
|
|
||||||
|
|
||||||
def downgrade(active_plugins=None, options=None):
|
|
||||||
pass
|
|
||||||
|
@ -26,8 +26,6 @@ revision = '2774a42c7163'
|
|||||||
down_revision = '12a57080b278'
|
down_revision = '12a57080b278'
|
||||||
|
|
||||||
from alembic import op
|
from alembic import op
|
||||||
import sqlalchemy as sa
|
|
||||||
from sqlalchemy.dialects import mysql
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade(active_plugins=None, options=None):
|
def upgrade(active_plugins=None, options=None):
|
||||||
@ -37,79 +35,3 @@ def upgrade(active_plugins=None, options=None):
|
|||||||
op.drop_table('servicedevicebindings')
|
op.drop_table('servicedevicebindings')
|
||||||
op.drop_table('serviceinstances')
|
op.drop_table('serviceinstances')
|
||||||
# end Alembic commands #
|
# end Alembic commands #
|
||||||
|
|
||||||
|
|
||||||
def downgrade(active_plugins=None, options=None):
|
|
||||||
# commands auto generated by Alembic - please adjust! #
|
|
||||||
op.create_table(
|
|
||||||
'deviceservicecontexts',
|
|
||||||
sa.Column('id', mysql.VARCHAR(length=36), nullable=False),
|
|
||||||
sa.Column('device_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('network_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('subnet_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('port_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('router_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('role', mysql.VARCHAR(length=255), nullable=True),
|
|
||||||
sa.Column('index', mysql.INTEGER(display_width=11),
|
|
||||||
autoincrement=False, nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(['device_id'], [u'devices.id'],
|
|
||||||
name=u'deviceservicecontexts_ibfk_1'),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
mysql_default_charset=u'utf8',
|
|
||||||
mysql_engine=u'InnoDB'
|
|
||||||
)
|
|
||||||
|
|
||||||
op.create_table(
|
|
||||||
'serviceinstances',
|
|
||||||
sa.Column('tenant_id', mysql.VARCHAR(length=255), nullable=True),
|
|
||||||
sa.Column('id', mysql.VARCHAR(length=36), nullable=False),
|
|
||||||
sa.Column('name', mysql.VARCHAR(length=255), nullable=True),
|
|
||||||
sa.Column('service_type_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('service_table_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('managed_by_user', mysql.TINYINT(display_width=1),
|
|
||||||
autoincrement=False, nullable=True),
|
|
||||||
sa.Column('mgmt_driver', mysql.VARCHAR(length=255), nullable=True),
|
|
||||||
sa.Column('mgmt_url', mysql.VARCHAR(length=255), nullable=True),
|
|
||||||
sa.Column('status', mysql.VARCHAR(length=255), nullable=False),
|
|
||||||
sa.ForeignKeyConstraint(['service_type_id'], [u'servicetypes.id'],
|
|
||||||
name=u'serviceinstances_ibfk_1'),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
mysql_default_charset=u'utf8',
|
|
||||||
mysql_engine=u'InnoDB'
|
|
||||||
)
|
|
||||||
|
|
||||||
op.create_table(
|
|
||||||
'servicedevicebindings',
|
|
||||||
sa.Column('service_instance_id', mysql.VARCHAR(length=36),
|
|
||||||
nullable=False),
|
|
||||||
sa.Column('device_id', mysql.VARCHAR(length=36), nullable=False),
|
|
||||||
sa.ForeignKeyConstraint(['device_id'], [u'devices.id'],
|
|
||||||
name=u'servicedevicebindings_ibfk_1'),
|
|
||||||
sa.ForeignKeyConstraint(['service_instance_id'],
|
|
||||||
[u'serviceinstances.id'],
|
|
||||||
name=u'servicedevicebindings_ibfk_2'),
|
|
||||||
sa.PrimaryKeyConstraint('service_instance_id', 'device_id'),
|
|
||||||
mysql_default_charset=u'utf8',
|
|
||||||
mysql_engine=u'InnoDB'
|
|
||||||
)
|
|
||||||
|
|
||||||
op.create_table(
|
|
||||||
'servicecontexts',
|
|
||||||
sa.Column('id', mysql.VARCHAR(length=36), nullable=False),
|
|
||||||
sa.Column('service_instance_id', mysql.VARCHAR(length=36),
|
|
||||||
nullable=True),
|
|
||||||
sa.Column('network_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('subnet_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('port_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('router_id', mysql.VARCHAR(length=36), nullable=True),
|
|
||||||
sa.Column('role', mysql.VARCHAR(length=255), nullable=True),
|
|
||||||
sa.Column('index', mysql.INTEGER(display_width=11),
|
|
||||||
autoincrement=False, nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(['service_instance_id'],
|
|
||||||
[u'serviceinstances.id'],
|
|
||||||
name=u'servicecontexts_ibfk_1'),
|
|
||||||
sa.PrimaryKeyConstraint('id'),
|
|
||||||
mysql_default_charset=u'utf8',
|
|
||||||
mysql_engine=u'InnoDB'
|
|
||||||
)
|
|
||||||
# end Alembic commands #
|
|
||||||
|
@ -58,11 +58,3 @@ def upgrade(active_plugins=None, options=None):
|
|||||||
op.add_column(u'devices', sa.Column('vim_id', sa.String(length=36),
|
op.add_column(u'devices', sa.Column('vim_id', sa.String(length=36),
|
||||||
nullable=False))
|
nullable=False))
|
||||||
op.create_foreign_key(None, 'devices', 'vims', ['vim_id'], ['id'])
|
op.create_foreign_key(None, 'devices', 'vims', ['vim_id'], ['id'])
|
||||||
|
|
||||||
|
|
||||||
def downgrade(active_plugins=None, options=None):
|
|
||||||
op.drop_constraint(None, 'devices', type_='foreignkey')
|
|
||||||
op.drop_column(u'devices', 'vim_id')
|
|
||||||
op.drop_column(u'devices', 'placement_attr')
|
|
||||||
op.drop_table('vimauths')
|
|
||||||
op.drop_table('vims')
|
|
||||||
|
@ -26,14 +26,7 @@ revision = '8f7145914cb0'
|
|||||||
down_revision = '0ae5b1ce3024'
|
down_revision = '0ae5b1ce3024'
|
||||||
|
|
||||||
from alembic import op
|
from alembic import op
|
||||||
import sqlalchemy as sa
|
|
||||||
from sqlalchemy.dialects import mysql
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade(active_plugins=None, options=None):
|
def upgrade(active_plugins=None, options=None):
|
||||||
op.drop_column('vnfd', 'infra_driver')
|
op.drop_column('vnfd', 'infra_driver')
|
||||||
|
|
||||||
|
|
||||||
def downgrade(active_plugins=None, options=None):
|
|
||||||
op.add_column('vnfd', sa.Column('infra_driver', mysql.VARCHAR(length=255),
|
|
||||||
nullable=True))
|
|
||||||
|
@ -32,7 +32,3 @@ import sqlalchemy as sa
|
|||||||
def upgrade(active_plugins=None, options=None):
|
def upgrade(active_plugins=None, options=None):
|
||||||
op.add_column('devices', sa.Column('error_reason',
|
op.add_column('devices', sa.Column('error_reason',
|
||||||
sa.Text(), nullable=True))
|
sa.Text(), nullable=True))
|
||||||
|
|
||||||
|
|
||||||
def downgrade(active_plugins=None, options=None):
|
|
||||||
op.drop_column('devices', 'error_reason')
|
|
||||||
|
@ -32,7 +32,3 @@ from tacker.db.types import Json
|
|||||||
|
|
||||||
def upgrade(active_plugins=None, options=None):
|
def upgrade(active_plugins=None, options=None):
|
||||||
op.add_column('vnffgs', sa.Column('attributes', Json))
|
op.add_column('vnffgs', sa.Column('attributes', Json))
|
||||||
|
|
||||||
|
|
||||||
def downgrade(active_plugins=None, options=None):
|
|
||||||
op.drop_column('vnffgs', 'attributes')
|
|
||||||
|
@ -53,15 +53,14 @@ def do_check_migration(config, cmd):
|
|||||||
validate_head_file(config)
|
validate_head_file(config)
|
||||||
|
|
||||||
|
|
||||||
def do_upgrade_downgrade(config, cmd):
|
def do_upgrade(config, cmd):
|
||||||
if not CONF.command.revision and not CONF.command.delta:
|
if not CONF.command.revision and not CONF.command.delta:
|
||||||
raise SystemExit(_('You must provide a revision or relative delta'))
|
raise SystemExit(_('You must provide a revision or relative delta'))
|
||||||
|
|
||||||
revision = CONF.command.revision
|
revision = CONF.command.revision
|
||||||
|
|
||||||
if CONF.command.delta:
|
if CONF.command.delta:
|
||||||
sign = '+' if CONF.command.name == 'upgrade' else '-'
|
revision = '+%s' % str(CONF.command.delta)
|
||||||
revision = sign + str(CONF.command.delta)
|
|
||||||
else:
|
else:
|
||||||
revision = CONF.command.revision
|
revision = CONF.command.revision
|
||||||
|
|
||||||
@ -121,12 +120,11 @@ def add_command_parsers(subparsers):
|
|||||||
parser = subparsers.add_parser('check_migration')
|
parser = subparsers.add_parser('check_migration')
|
||||||
parser.set_defaults(func=do_check_migration)
|
parser.set_defaults(func=do_check_migration)
|
||||||
|
|
||||||
for name in ['upgrade', 'downgrade']:
|
parser = subparsers.add_parser('upgrade')
|
||||||
parser = subparsers.add_parser(name)
|
|
||||||
parser.add_argument('--delta', type=int)
|
parser.add_argument('--delta', type=int)
|
||||||
parser.add_argument('--sql', action='store_true')
|
parser.add_argument('--sql', action='store_true')
|
||||||
parser.add_argument('revision', nargs='?')
|
parser.add_argument('revision', nargs='?')
|
||||||
parser.set_defaults(func=do_upgrade_downgrade)
|
parser.set_defaults(func=do_upgrade)
|
||||||
|
|
||||||
parser = subparsers.add_parser('stamp')
|
parser = subparsers.add_parser('stamp')
|
||||||
parser.add_argument('--sql', action='store_true')
|
parser.add_argument('--sql', action='store_true')
|
||||||
|
@ -108,21 +108,6 @@ class TestCli(base.BaseTestCase):
|
|||||||
{'sql': False}
|
{'sql': False}
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_downgrade(self):
|
|
||||||
self._main_test_helper(
|
|
||||||
['prog', 'downgrade', '--sql', 'folsom'],
|
|
||||||
'downgrade',
|
|
||||||
('folsom',),
|
|
||||||
{'sql': True}
|
|
||||||
)
|
|
||||||
|
|
||||||
self._main_test_helper(
|
|
||||||
['prog', 'downgrade', '--delta', '2'],
|
|
||||||
'downgrade',
|
|
||||||
('-2',),
|
|
||||||
{'sql': False}
|
|
||||||
)
|
|
||||||
|
|
||||||
def _test_validate_head_file_helper(self, heads, file_content=None):
|
def _test_validate_head_file_helper(self, heads, file_content=None):
|
||||||
with mock.patch('alembic.script.ScriptDirectory.from_config') as fc:
|
with mock.patch('alembic.script.ScriptDirectory.from_config') as fc:
|
||||||
fc.return_value.get_heads.return_value = heads
|
fc.return_value.get_heads.return_value = heads
|
||||||
|
Loading…
x
Reference in New Issue
Block a user