Beispiel #1
0
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)
Beispiel #2
0
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(migration.INIT_VERSION)
        return versioning_api.db_version(get_engine(), repository)
Beispiel #3
0
def purge_deleted(age):
    if age is not None:
        try:
            age = int(age)
        except ValueError:
            raise exception.Error(_("age should be an integer"))
        if age < 0:
            raise exception.Error(_("age should be a positive integer"))
    else:
        age = 90

    time_line = datetime.now() - timedelta(days=age)
    engine = get_engine()
    meta = sqlalchemy.MetaData()
    meta.bind = engine

    stack = sqlalchemy.Table("stack", meta, autoload=True)
    event = sqlalchemy.Table("event", meta, autoload=True)
    raw_template = sqlalchemy.Table("raw_template", meta, autoload=True)
    user_creds = sqlalchemy.Table("user_creds", meta, autoload=True)

    stmt = sqlalchemy.select([stack.c.id, stack.c.raw_template_id, stack.c.user_creds_id]).where(
        stack.c.deleted_at < time_line
    )
    deleted_stacks = engine.execute(stmt)

    for s in deleted_stacks:
        event_del = event.delete().where(event.c.stack_id == s[0])
        engine.execute(event_del)
        stack_del = stack.delete().where(stack.c.id == s[0])
        engine.execute(stack_del)
        raw_template_del = raw_template.delete().where(raw_template.c.id == s[1])
        engine.execute(raw_template_del)
        user_creds_del = user_creds.delete().where(user_creds.c.id == s[2])
        engine.execute(user_creds_del)
Beispiel #4
0
def reset_dummy_db():
    engine = get_engine()
    meta = sqlalchemy.MetaData()
    meta.reflect(bind=engine)

    for table in reversed(meta.sorted_tables):
        if table.name == 'migrate_version':
            continue
        engine.execute(table.delete())
Beispiel #5
0
def db_version():
    repository = _find_migrate_repo()
    try:
        return versioning_api.db_version(get_engine(), repository)
    except versioning_exceptions.DatabaseNotControlledError:
        # If we aren't version controlled we may already have the database
        # in the state from before we started version control, check for that
        # and set up version_control appropriately
        meta = sqlalchemy.MetaData()
        engine = get_engine()
        meta.reflect(bind=engine)
        try:
            for table in ('stack', 'resource', 'event',
                          'parsed_template', 'raw_template'):
                assert table in meta.tables
            return db_version_control(1)
        except AssertionError:
            return db_version_control(0)
Beispiel #6
0
def setup():
    import mox  # pyflakes_bypass   Workaround for bug 810424
    from heat.db import migration
    from heat import db  # pyflakes_bypass review 23102

    reset_db()
    migration.db_sync()
    engine = get_engine()
    conn = engine.connect()
Beispiel #7
0
def reset_dummy_db():
    engine = get_engine()
    meta = sqlalchemy.MetaData()
    meta.reflect(bind=engine)

    for table in reversed(meta.sorted_tables):
        if table.name == 'migrate_version':
            continue
        engine.execute(table.delete())
Beispiel #8
0
def db_version():
    repository = _find_migrate_repo()
    try:
        return versioning_api.db_version(get_engine(), repository)
    except versioning_exceptions.DatabaseNotControlledError:
        # If we aren't version controlled we may already have the database
        # in the state from before we started version control, check for that
        # and set up version_control appropriately
        meta = sqlalchemy.MetaData()
        engine = get_engine()
        meta.reflect(bind=engine)
        try:
            for table in ('stack', 'resource', 'event', 'parsed_template',
                          'raw_template'):
                assert table in meta.tables
            return db_version_control(1)
        except AssertionError:
            return db_version_control(0)
Beispiel #9
0
def setup():
    import mox  # Fail fast if you don't have mox. Workaround for bug 810424

    from heat import db
    from heat.db import migration

    reset_db()
    migration.db_sync()
    engine = get_engine()
    conn = engine.connect()
Beispiel #10
0
def setup():
    import mox  # Fail fast if you don't have mox. Workaround for bug 810424

    from heat import db
    from heat.db import migration

    reset_db()
    migration.db_sync()
    engine = get_engine()
    conn = engine.connect()
Beispiel #11
0
def purge_deleted(age):
    if age is not None:
        try:
            age = int(age)
        except ValueError:
            raise exception.Error(_("age should be an integer"))
        if age < 0:
            raise exception.Error(_("age should be a positive integer"))
    else:
        age = 90

    time_line = datetime.now() - timedelta(days=age)
    engine = get_engine()
    meta = sqlalchemy.MetaData()
    meta.bind = engine

    stack = sqlalchemy.Table('stack', meta, autoload=True)
    event = sqlalchemy.Table('event', meta, autoload=True)
    raw_template = sqlalchemy.Table('raw_template', meta, autoload=True)
    user_creds = sqlalchemy.Table('user_creds', meta, autoload=True)

    stmt = sqlalchemy.select([stack.c.id,
                              stack.c.raw_template_id,
                              stack.c.user_creds_id]).\
        where(stack.c.deleted_at < time_line)
    deleted_stacks = engine.execute(stmt)

    for s in deleted_stacks:
        event_del = event.delete().where(event.c.stack_id == s[0])
        engine.execute(event_del)
        stack_del = stack.delete().where(stack.c.id == s[0])
        engine.execute(stack_del)
        raw_template_del = raw_template.delete().\
            where(raw_template.c.id == s[1])
        engine.execute(raw_template_del)
        user_creds_del = user_creds.delete().where(user_creds.c.id == s[2])
        engine.execute(user_creds_del)
Beispiel #12
0
def setup_dummy_db():
    migration.db_sync()
    engine = get_engine()
    engine.connect()
Beispiel #13
0
def db_version_control(version=None):
    repository = _find_migrate_repo()
    versioning_api.version_control(get_engine(), repository, version)
    return version
Beispiel #14
0
def db_version_control(version=None):
    repository = _find_migrate_repo()
    versioning_api.version_control(get_engine(), repository, version)
    return version