From 298012697fdad8868bed306a88bba472cfaa498b Mon Sep 17 00:00:00 2001 From: Brandon Logan Date: Tue, 9 Dec 2014 14:41:30 -0600 Subject: [PATCH] Initializing alembic for separate chain Change-Id: I260f80b57945ab3263d7f561678c3c9494a61b7c --- neutron_lbaas/db/migration/__init__.py | 0 neutron_lbaas/db/migration/alembic.ini | 59 +++++++++++++ .../db/migration/alembic_migrations/README | 1 + .../migration/alembic_migrations/__init__.py | 0 .../db/migration/alembic_migrations/env.py | 88 +++++++++++++++++++ .../alembic_migrations/script.py.mako | 22 +++++ .../alembic_migrations/versions/HEAD | 1 + .../versions/start_neutron_lbaas.py | 34 +++++++ 8 files changed, 205 insertions(+) create mode 100644 neutron_lbaas/db/migration/__init__.py create mode 100644 neutron_lbaas/db/migration/alembic.ini create mode 100644 neutron_lbaas/db/migration/alembic_migrations/README create mode 100644 neutron_lbaas/db/migration/alembic_migrations/__init__.py create mode 100644 neutron_lbaas/db/migration/alembic_migrations/env.py create mode 100644 neutron_lbaas/db/migration/alembic_migrations/script.py.mako create mode 100644 neutron_lbaas/db/migration/alembic_migrations/versions/HEAD create mode 100644 neutron_lbaas/db/migration/alembic_migrations/versions/start_neutron_lbaas.py diff --git a/neutron_lbaas/db/migration/__init__.py b/neutron_lbaas/db/migration/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutron_lbaas/db/migration/alembic.ini b/neutron_lbaas/db/migration/alembic.ini new file mode 100644 index 000000000..c7875e740 --- /dev/null +++ b/neutron_lbaas/db/migration/alembic.ini @@ -0,0 +1,59 @@ +# A generic, single database configuration. + +[alembic] +# path to migration scripts +script_location = alembic_migrations + +# template used to generate migration files +# file_template = %%(rev)s_%%(slug)s + +# max length of characters to apply to the +# "slug" field +#truncate_slug_length = 40 + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + +# set to 'true' to allow .pyc and .pyo files without +# a source .py file to be detected as revisions in the +# versions/ directory +# sourceless = false + +sqlalchemy.url = + + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/neutron_lbaas/db/migration/alembic_migrations/README b/neutron_lbaas/db/migration/alembic_migrations/README new file mode 100644 index 000000000..98e4f9c44 --- /dev/null +++ b/neutron_lbaas/db/migration/alembic_migrations/README @@ -0,0 +1 @@ +Generic single-database configuration. \ No newline at end of file diff --git a/neutron_lbaas/db/migration/alembic_migrations/__init__.py b/neutron_lbaas/db/migration/alembic_migrations/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutron_lbaas/db/migration/alembic_migrations/env.py b/neutron_lbaas/db/migration/alembic_migrations/env.py new file mode 100644 index 000000000..d9f44abf9 --- /dev/null +++ b/neutron_lbaas/db/migration/alembic_migrations/env.py @@ -0,0 +1,88 @@ +# 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 + +from neutron.db.migration.models import head # noqa +from neutron.db.migration.cli import * # noqa + + +MYSQL_ENGINE = None +LBAAS_VERSION_TABLE = 'alembic_version_lbaas' +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'] = LBAAS_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=LBAAS_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() \ No newline at end of file diff --git a/neutron_lbaas/db/migration/alembic_migrations/script.py.mako b/neutron_lbaas/db/migration/alembic_migrations/script.py.mako new file mode 100644 index 000000000..95702017e --- /dev/null +++ b/neutron_lbaas/db/migration/alembic_migrations/script.py.mako @@ -0,0 +1,22 @@ +"""${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"} + + +def downgrade(): + ${downgrades if downgrades else "pass"} diff --git a/neutron_lbaas/db/migration/alembic_migrations/versions/HEAD b/neutron_lbaas/db/migration/alembic_migrations/versions/HEAD new file mode 100644 index 000000000..ca49272db --- /dev/null +++ b/neutron_lbaas/db/migration/alembic_migrations/versions/HEAD @@ -0,0 +1 @@ +465b2dcea7c \ No newline at end of file diff --git a/neutron_lbaas/db/migration/alembic_migrations/versions/start_neutron_lbaas.py b/neutron_lbaas/db/migration/alembic_migrations/versions/start_neutron_lbaas.py new file mode 100644 index 000000000..e1075c933 --- /dev/null +++ b/neutron_lbaas/db/migration/alembic_migrations/versions/start_neutron_lbaas.py @@ -0,0 +1,34 @@ +# Copyright 2014 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. +# + +"""start neutron-lbaas chain + +Revision ID: start_neutron_lbaas +Revises: None +Create Date: 2014-12-09 11:06:18.196062 + +""" + +# revision identifiers, used by Alembic. +revision = 'start_neutron_lbaas' +down_revision = None + + +def upgrade(): + pass + + +def downgrade(): + pass