From 7dc26e20312bf85f15f0cebe123df87d4e09a39b Mon Sep 17 00:00:00 2001 From: Jakub Libosvar Date: Tue, 8 Apr 2014 12:41:11 +0200 Subject: [PATCH] add engine parameter for offline migrations Offline migration required config file containing connection string. In that case only engine from URL was used. With this patch engine can be passed from command line (or config file) along with plugins which sql script will be generated accordingly. DocImpact Change-Id: Ib667a71960b833fd981f97fe7d6b1856084ef5c8 Closes-Bug: #1304326 --- etc/neutron.conf | 4 ++++ neutron/db/migration/alembic_migrations/env.py | 13 ++++++++----- neutron/db/migration/cli.py | 7 +++++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/etc/neutron.conf b/etc/neutron.conf index 8da95c9702..2455f2fd75 100644 --- a/etc/neutron.conf +++ b/etc/neutron.conf @@ -414,6 +414,10 @@ admin_password = %SERVICE_PASSWORD% # main neutron server. (Leave it as is if the database runs on this host.) # connection = sqlite:// +# Database engine for which script will be generated when using offline +# migration +# engine = + # The SQLAlchemy connection string used to connect to the slave database # slave_connection = diff --git a/neutron/db/migration/alembic_migrations/env.py b/neutron/db/migration/alembic_migrations/env.py index 98352ffb75..8850277928 100644 --- a/neutron/db/migration/alembic_migrations/env.py +++ b/neutron/db/migration/alembic_migrations/env.py @@ -48,16 +48,19 @@ target_metadata = model_base.BASEV2.metadata def run_migrations_offline(): """Run migrations in 'offline' mode. - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. + This configures the context with either a URL + or an Engine. Calls to context.execute() here emit the given string to the script output. """ - context.configure(url=neutron_config.database.connection) + kwargs = dict() + if neutron_config.database.connection: + kwargs['url'] = neutron_config.database.connection + else: + kwargs['dialect_name'] = neutron_config.database.engine + context.configure(**kwargs) with context.begin_transaction(): context.run_migrations(active_plugins=active_plugins, diff --git a/neutron/db/migration/cli.py b/neutron/db/migration/cli.py index 850806e898..6a5da8baeb 100644 --- a/neutron/db/migration/cli.py +++ b/neutron/db/migration/cli.py @@ -46,11 +46,14 @@ _db_opts = [ deprecated_name='sql_connection', default='', help=_('URL to database')), + cfg.StrOpt('engine', + default='', + help=_('Database engine')), ] CONF = cfg.ConfigOpts() -CONF.register_opts(_core_opts) -CONF.register_opts(_db_opts, 'database') +CONF.register_cli_opts(_core_opts) +CONF.register_cli_opts(_db_opts, 'database') CONF.register_opts(_quota_opts, 'QUOTAS')