#!/usr/bin/env python # Copyright (c) 2015 Mirantis, Inc. # All Rights Reserved. # # 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. """ Command-line utility for database manage """ import sys from oslo_config import cfg from oslo_log import log from refstack.db import migration LOG = log.getLogger(__name__) CONF = cfg.CONF log.register_options(CONF) class DatabaseManager(object): def version(self): print(migration.version()) def upgrade(self): migration.upgrade(CONF.command.revision) def downgrade(self): migration.downgrade(CONF.command.revision) def stamp(self): migration.stamp(CONF.command.revision) def revision(self): migration.revision(CONF.command.message, CONF.command.autogenerate) def add_command_parsers(subparsers): db_manager = DatabaseManager() parser = subparsers.add_parser('version', help='show current database version') parser.set_defaults(func=db_manager.version) parser = subparsers.add_parser('upgrade', help='upgrade database to ' 'the specified version') parser.set_defaults(func=db_manager.upgrade) parser.add_argument('--revision', nargs='?', help='desired database version') parser = subparsers.add_parser('downgrade', help='downgrade database ' 'to the specified version') parser.set_defaults(func=db_manager.downgrade) parser.add_argument('--revision', nargs='?', help='desired database version') parser = subparsers.add_parser('stamp', help='stamp database with provided ' 'revision. Don\'t run any migrations') parser.add_argument('--revision', nargs='?', help='should match one from repository or head - ' 'to stamp database with most recent revision') parser.set_defaults(func=db_manager.stamp) parser = subparsers.add_parser('revision', help='create template for migration') parser.add_argument('-m', '--message', help='text that will be used for migration title') parser.add_argument('--autogenerate', action='store_true', help='if True - generates diff based ' 'on current database state (True by default)') parser.set_defaults(func=db_manager.revision) command_opt = cfg.SubCommandOpt('command', title='Available commands', handler=add_command_parsers) CONF.register_cli_opt(command_opt) if __name__ == '__main__': CONF(sys.argv[1:], project='refstack') log.setup(CONF, 'refstack') CONF.command.func()