From 6123c29c1a8caa29e4df34282550890325ef3e01 Mon Sep 17 00:00:00 2001 From: Brian Waldon Date: Tue, 28 May 2013 15:21:48 -0700 Subject: [PATCH] Add arg to keystone-manage db_sync This optional argument allows a client of db_sync to indicate to which database version to upgrade or downgrade. Change-Id: I3ccf45eb572a3897e5d3bc5bd17566493a55f393 --- keystone/catalog/backends/sql.py | 4 ++-- keystone/cli.py | 12 +++++++++++- keystone/credential/backends/sql.py | 4 ++-- keystone/identity/backends/sql.py | 4 ++-- keystone/policy/backends/sql.py | 4 ++-- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/keystone/catalog/backends/sql.py b/keystone/catalog/backends/sql.py index 63a2ec019a..1dad5a8017 100644 --- a/keystone/catalog/backends/sql.py +++ b/keystone/catalog/backends/sql.py @@ -50,8 +50,8 @@ class Endpoint(sql.ModelBase, sql.DictBase): class Catalog(sql.Base, catalog.Driver): - def db_sync(self): - migration.db_sync() + def db_sync(self, version=None): + migration.db_sync(version=version) # Services def list_services(self): diff --git a/keystone/cli.py b/keystone/cli.py index e1060fda3f..287410e97d 100644 --- a/keystone/cli.py +++ b/keystone/cli.py @@ -47,12 +47,22 @@ class DbSync(BaseApp): name = 'db_sync' + @classmethod + def add_argument_parser(cls, subparsers): + parser = super(DbSync, cls).add_argument_parser(subparsers) + parser.add_argument('version', default=None, nargs='?', + help=('Migrate the database up to a specified ' + 'version. If not provided, db_sync will ' + 'migrate the database to the latest known ' + 'version.')) + return parser + @staticmethod def main(): for k in ['identity', 'catalog', 'policy', 'token', 'credential']: driver = importutils.import_object(getattr(CONF, k).driver) if hasattr(driver, 'db_sync'): - driver.db_sync() + driver.db_sync(CONF.command.version) class BaseCertificateSetup(BaseApp): diff --git a/keystone/credential/backends/sql.py b/keystone/credential/backends/sql.py index cf8d4bd3e7..eab9dfea04 100644 --- a/keystone/credential/backends/sql.py +++ b/keystone/credential/backends/sql.py @@ -34,8 +34,8 @@ class CredentialModel(sql.ModelBase, sql.DictBase): class Credential(sql.Base, credential.Driver): # Internal interface to manage the database - def db_sync(self): - migration.db_sync() + def db_sync(self, version=None): + migration.db_sync(version=version) # credential crud diff --git a/keystone/identity/backends/sql.py b/keystone/identity/backends/sql.py index 670ebb659d..71cab057f1 100644 --- a/keystone/identity/backends/sql.py +++ b/keystone/identity/backends/sql.py @@ -138,8 +138,8 @@ class UserGroupMembership(sql.ModelBase, sql.DictBase): class Identity(sql.Base, identity.Driver): # Internal interface to manage the database - def db_sync(self): - migration.db_sync() + def db_sync(self, version=None): + migration.db_sync(version=version) def _check_password(self, password, user_ref): """Check the specified password against the data store. diff --git a/keystone/policy/backends/sql.py b/keystone/policy/backends/sql.py index c1eff268b8..267d3fa48f 100644 --- a/keystone/policy/backends/sql.py +++ b/keystone/policy/backends/sql.py @@ -31,8 +31,8 @@ class PolicyModel(sql.ModelBase, sql.DictBase): class Policy(sql.Base, rules.Policy): # Internal interface to manage the database - def db_sync(self): - migration.db_sync() + def db_sync(self, version=None): + migration.db_sync(version=version) @sql.handle_conflicts(type='policy') def create_policy(self, policy_id, policy):