diff --git a/neutron_taas/db/migration/alembic_migration/README b/neutron_taas/db/migration/alembic_migration/README new file mode 100644 index 00000000..98e4f9c4 --- /dev/null +++ b/neutron_taas/db/migration/alembic_migration/README @@ -0,0 +1 @@ +Generic single-database configuration. \ No newline at end of file diff --git a/neutron_taas/db/migration/alembic_migration/__init__.py b/neutron_taas/db/migration/alembic_migration/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/neutron_taas/db/migration/alembic_migration/env.py b/neutron_taas/db/migration/alembic_migration/env.py new file mode 100644 index 00000000..f182fab3 --- /dev/null +++ b/neutron_taas/db/migration/alembic_migration/env.py @@ -0,0 +1,86 @@ +# Copyright 2015 Midokura SARL +# +# 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 logging import config as logging_config + +from alembic import context +from neutron.db import model_base +from oslo_config import cfg +from oslo_db.sqlalchemy import session +import sqlalchemy as sa +from sqlalchemy import event + + +MYSQL_ENGINE = None +TAAS_VERSION_TABLE = 'alembic_version_taas' +config = context.config +neutron_config = config.neutron_config +logging_config.fileConfig(config.config_file_name) +target_metadata = model_base.BASEV2.metadata + + +def set_mysql_engine(): + try: + mysql_engine = neutron_config.command.mysql_engine + except cfg.NoSuchOptError: + mysql_engine = None + + global MYSQL_ENGINE + MYSQL_ENGINE = (mysql_engine or + model_base.BASEV2.__table_args__['mysql_engine']) + + +def run_migrations_offline(): + set_mysql_engine() + + kwargs = dict() + if neutron_config.database.connection: + kwargs['url'] = neutron_config.database.connection + else: + kwargs['dialect_name'] = neutron_config.database.engine + kwargs['version_table'] = TAAS_VERSION_TABLE + context.configure(**kwargs) + + with context.begin_transaction(): + context.run_migrations() + + +@event.listens_for(sa.Table, 'after_parent_attach') +def set_storage_engine(target, parent): + if MYSQL_ENGINE: + target.kwargs['mysql_engine'] = MYSQL_ENGINE + + +def run_migrations_online(): + set_mysql_engine() + engine = session.create_engine(neutron_config.database.connection) + + connection = engine.connect() + context.configure( + connection=connection, + target_metadata=target_metadata, + version_table=TAAS_VERSION_TABLE + ) + try: + with context.begin_transaction(): + context.run_migrations() + finally: + connection.close() + engine.dispose() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/neutron_taas/db/migration/alembic_migration/script.py.mako b/neutron_taas/db/migration/alembic_migration/script.py.mako new file mode 100644 index 00000000..3b1c960c --- /dev/null +++ b/neutron_taas/db/migration/alembic_migration/script.py.mako @@ -0,0 +1,18 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision} +Create Date: ${create_date} + +""" + +# revision identifiers, used by Alembic. +revision = ${repr(up_revision)} +down_revision = ${repr(down_revision)} + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +def upgrade(): + ${upgrades if upgrades else "pass"} diff --git a/neutron_taas/db/migration/alembic_migration/versions/start_neutron_taas.py b/neutron_taas/db/migration/alembic_migration/versions/start_neutron_taas.py new file mode 100644 index 00000000..817516d9 --- /dev/null +++ b/neutron_taas/db/migration/alembic_migration/versions/start_neutron_taas.py @@ -0,0 +1,32 @@ +# Copyright 2015 Midokura SARL +# +# 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. + +"""start neutron-taas chain + +Revision ID: start_neutron_taas +Revises: None +Create Date: 2015-11-11 02:36:00.209301 + +""" + +# revision identifiers, used by Alembic. +revision = 'start_neutron_taas' +down_revision = None + + +from neutron_taas.db.migration import taas_init_ops + + +def upgrade(): + taas_init_ops.upgrade() diff --git a/setup.cfg b/setup.cfg index 47350f5e..d7a4726a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -50,3 +50,5 @@ console_scripts = neutron-taas-openvswitch-agent = neutron_taas.services.taas.agents.ovs.agent:main neutron.service_plugins = taas = neutron_taas.services.taas.taas_plugin:TaasPlugin +neutron.db.alembic_migrations = + tap-as-a-service = neutron_taas.db.migration:alembic_migration