Scripts for upgrade/downgrade tuningbox DB added

Console scripts added to tuningbox entry points.
DB migration scripts support external configuration, provided
through variable TUNINGBOX_SETTINGS

Change-Id: I86ddd32a1db351510ca742b69a0bc78a3d09e6a3
Closes-Bug: #1584668
This commit is contained in:
Alexander Kislitsky 2016-05-25 17:06:13 +03:00 committed by Yuriy Taraday
parent 5213a7d39a
commit daa9536cd7
4 changed files with 46 additions and 8 deletions

View File

@ -56,3 +56,6 @@ fuelclient =
config_get = tuning_box.fuelclient:Get
config_set = tuning_box.fuelclient:Set
config_override = tuning_box.fuelclient:Override
console_scripts =
tuningbox_db_upgrade = tuning_box.migration:upgrade
tuningbox_db_downgrade = tuning_box.migration:downgrade

View File

@ -44,6 +44,8 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root)
%{python_sitelib}/tuning_box/
%{python_sitelib}/tuning_box-%{version}*.egg-info/
/usr/bin/tuningbox_db_downgrade
/usr/bin/tuningbox_db_upgrade
%changelog
* Fri Mar 18 2016 Oleg Gelbukh <ogelbukh@mirantis.com> 9.0.0

39
tuning_box/migration.py Normal file
View File

@ -0,0 +1,39 @@
# 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 alembic import command as alembic_command
from alembic import config as alembic_config
import tuning_box
from tuning_box import app
from tuning_box import db
def get_alembic_config(engine):
config = alembic_config.Config()
config.set_main_option('sqlalchemy.url', str(engine.url))
config.set_main_option(
'script_location', tuning_box.get_migrations_dir())
config.set_main_option('version_table', 'alembic_version')
return config
def upgrade():
with app.build_app().app_context():
config = get_alembic_config(db.db.engine)
alembic_command.upgrade(config, 'head')
def downgrade():
with app.build_app().app_context():
config = get_alembic_config(db.db.engine)
alembic_command.downgrade(config, 'base')

View File

@ -17,7 +17,6 @@ import os
os.environ.setdefault("OS_TEST_DBAPI_ADMIN_CONNECTION", "sqlite:///testdb")
from alembic import command as alembic_command
from alembic import config as alembic_config
from alembic import script as alembic_script
import flask
from oslo_db.sqlalchemy import test_base
@ -26,8 +25,8 @@ import sqlalchemy as sa
import testscenarios
from werkzeug import exceptions
import tuning_box
from tuning_box import db
from tuning_box import migration
from tuning_box.tests import base
@ -153,12 +152,7 @@ class _RealDBTest(testscenarios.WithScenarios,
]
def get_alembic_config(self, engine):
config = alembic_config.Config()
config.set_main_option('sqlalchemy.url', str(engine.url))
config.set_main_option(
'script_location', tuning_box.get_migrations_dir())
config.set_main_option('version_table', 'alembic_version')
return config
return migration.get_alembic_config(engine)
class _RealDBPrefixedTest(base.PrefixedTestCaseMixin,