Use oslo db.migration script

Turn Heat's migration script into a simple wrapper around olso's.
The api is a bit different so for now keep ours inplace.
All that our script does is find the path to the migration_repo
and call the oslo code. No point having two implementations in the
same codebase.

Change-Id: I0aa3e10890f924d77268f4118dae53b446e193eb
This commit is contained in:
Angus Salkeld
2014-01-03 10:54:49 +11:00
parent b15954c02e
commit 0a6d0b8b40
2 changed files with 11 additions and 58 deletions

View File

@@ -1,5 +1,3 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# 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
@@ -13,72 +11,26 @@
# under the License.
import os
import sys
from migrate import exceptions as versioning_exceptions
from migrate.versioning import api as versioning_api
from migrate.versioning.repository import Repository
import sqlalchemy
from heat.openstack.common.db.sqlalchemy import migration as oslo_migration
from heat.common import exception
from heat.openstack.common.db.sqlalchemy.session import get_engine
from heat.openstack.common.gettextutils import _
_REPOSITORY = None
INIT_VERSION = 14
def get_backend():
"""The backend is this module itself."""
return sys.modules[__name__]
def db_sync(version=None):
if version is not None:
try:
version = int(version)
except ValueError:
raise exception.Error(_("version should be an integer"))
current_version = db_version()
repository = _find_migrate_repo()
if version is None or version > current_version:
return versioning_api.upgrade(get_engine(), repository, version)
else:
return versioning_api.downgrade(get_engine(), repository,
version)
path = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'migrate_repo')
return oslo_migration.db_sync(path, version, init_version=INIT_VERSION)
def db_version():
repository = _find_migrate_repo()
try:
return versioning_api.db_version(get_engine(), repository)
except versioning_exceptions.DatabaseNotControlledError as exc:
# If we aren't version controlled there may be an existing,
# non-version controlled database present.
meta = sqlalchemy.MetaData()
engine = get_engine()
meta.reflect(bind=engine)
tables = meta.tables
if len(tables):
raise exc
db_version_control(INIT_VERSION)
return versioning_api.db_version(get_engine(), repository)
path = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'migrate_repo')
return oslo_migration.db_version(path, INIT_VERSION)
def db_version_control(version=None):
repository = _find_migrate_repo()
versioning_api.version_control(get_engine(), repository, version)
return version
def _find_migrate_repo():
"""Get the path for the migrate repository."""
path = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'migrate_repo')
assert os.path.exists(path)
global _REPOSITORY
if _REPOSITORY is None:
_REPOSITORY = Repository(path)
return _REPOSITORY
return oslo_migration.db_version_control(path, version)