]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Squash Grizzly database migrations
authorZane Bitter <zbitter@redhat.com>
Tue, 12 Mar 2013 09:03:29 +0000 (10:03 +0100)
committerZane Bitter <zbitter@redhat.com>
Tue, 12 Mar 2013 09:03:37 +0000 (10:03 +0100)
Fixes bug #1072949

Change-Id: I07e4d1454141c9011aacdec3a4eb01a3ea1936c9

17 files changed:
heat/db/migration.py
heat/db/sqlalchemy/migrate_repo/versions/001_norwhal.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/002_Add_event_data.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/003_add_missing_cols.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/004_guest_watch.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/005_user_creds.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/006_nested_stacks.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/007_resource_work.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/008_user_parameters.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/009_remove_parsed_template.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/010_add_stack_timeout_col.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/011_stack_tenant.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/012_stack_id_uuid.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/013_owner_id_uuid.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/014_watch_stackid.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/015_add_stack_rollback_col.py [deleted file]
heat/db/sqlalchemy/migrate_repo/versions/015_grizzly.py [new file with mode: 0644]

index fb44022179bcd9c25091a94536a3f2898ba6410d..73c9cfd9dd62026dd5214a1aa17b2c64d1dfeb87 100644 (file)
@@ -20,7 +20,7 @@ from heat.db import utils
 IMPL = utils.LazyPluggable('db_backend',
                            sqlalchemy='heat.db.sqlalchemy.migration')
 
-INIT_VERSION = 0
+INIT_VERSION = 14
 
 
 def db_sync(version=None):
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/001_norwhal.py b/heat/db/sqlalchemy/migrate_repo/versions/001_norwhal.py
deleted file mode 100644 (file)
index 84d901c..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData()
-    meta.bind = migrate_engine
-
-    rawtemplate = Table(
-        'raw_template', meta,
-        Column('id', Integer, primary_key=True),
-        Column('created_at', DateTime(timezone=False)),
-        Column('updated_at', DateTime(timezone=False)),
-        Column('template', Text()),
-    )
-
-    stack = Table(
-        'stack', meta,
-        Column('id', Integer, primary_key=True),
-        Column('created_at', DateTime(timezone=False)),
-        Column('updated_at', DateTime(timezone=False)),
-        Column('name', String(
-            length=255,
-            convert_unicode=False,
-            assert_unicode=None,
-            unicode_error=None,
-            _warn_on_bytestring=False)),
-        Column('raw_template_id', Integer, ForeignKey("raw_template.id"),
-               nullable=False),
-    )
-
-    event = Table(
-        'event', meta,
-        Column('id', Integer, primary_key=True),
-        Column('stack_id', Integer, ForeignKey("stack.id"), nullable=False),
-        Column('created_at', DateTime(timezone=False)),
-        Column('updated_at', DateTime(timezone=False)),
-        Column('name', String(
-            length=255,
-            convert_unicode=False,
-            assert_unicode=None,
-            unicode_error=None,
-            _warn_on_bytestring=False)),
-    )
-
-    resource = Table(
-        'resource', meta,
-        Column('id', Integer, primary_key=True),
-        Column('nova_instance', String(
-            length=255,
-            convert_unicode=False,
-            assert_unicode=None,
-            unicode_error=None,
-            _warn_on_bytestring=False)),
-        Column('name', String(
-            length=255,
-            convert_unicode=False,
-            assert_unicode=None,
-            unicode_error=None,
-            _warn_on_bytestring=False)),
-        Column('created_at', DateTime(timezone=False)),
-        Column('updated_at', DateTime(timezone=False)),
-        Column('state', String(
-            length=255,
-            convert_unicode=False,
-            assert_unicode=None,
-            unicode_error=None,
-            _warn_on_bytestring=False)),
-        Column('state_description', String(length=255, convert_unicode=False,
-                                           assert_unicode=None,
-                                           unicode_error=None,
-                                           _warn_on_bytestring=False)),
-        Column('parsed_template_id', Integer, ForeignKey("parsed_template.id"),
-               nullable=True),
-        Column('stack_id', Integer, ForeignKey("stack.id"), nullable=False),
-        Column('depends_on', Integer),
-    )
-
-    parsedtemplate = Table(
-        'parsed_template', meta,
-        Column('id', Integer, primary_key=True),
-        Column('raw_template_id', Integer, ForeignKey("raw_template.id"),
-               nullable=False),
-        Column('template', Text()),
-    )
-
-    tables = [rawtemplate, stack, event, parsedtemplate, resource]
-    for table in tables:
-        try:
-            table.create()
-        except Exception:
-            meta.drop_all(tables=tables)
-            raise
-
-
-def downgrade(migrate_engine):
-    meta = MetaData()
-    meta.bind = migrate_engine
-
-    rawtemplate = Table('raw_template', meta, autoload=True)
-    event = Table('event', meta, autoload=True)
-    resource = Table('resource', meta, autoload=True)
-    parsedtemplate = Table('parsed_template', meta, autoload=True)
-    stack = Table('stack', meta, autoload=True)
-
-    for table in (event, stack, resource, parsedtemplate, rawtemplate):
-        table.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/002_Add_event_data.py b/heat/db/sqlalchemy/migrate_repo/versions/002_Add_event_data.py
deleted file mode 100644 (file)
index a0d0647..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-    event = Table('event', meta, autoload=True)
-
-    Column('logical_resource_id', String(255)).create(event)
-    Column('physical_resource_id', String(255)).create(event)
-    Column('resource_status_reason', String(255)).create(event)
-    Column('resource_type', String(255)).create(event)
-    Column('resource_properties', PickleType).create(event)
-
-
-def downgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-    event = Table('event', meta, autoload=True)
-
-    event.c.logical_resource_id.drop()
-    event.c.physical_resource_id.drop()
-    event.c.resource_status_reason.drop()
-    event.c.resource_type.drop()
-    event.c.resource_properties.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/003_add_missing_cols.py b/heat/db/sqlalchemy/migrate_repo/versions/003_add_missing_cols.py
deleted file mode 100644 (file)
index a62af7e..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-    parsed_template = Table('parsed_template', meta, autoload=True)
-
-    Column('created_at', DateTime(timezone=False)).create(parsed_template)
-    Column('updated_at', DateTime(timezone=False)).create(parsed_template)
-
-
-def downgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-    parsed_template = Table('parsed_template', meta, autoload=True)
-
-    parsed_template.c.created_at.drop()
-    parsed_template.c.updated_at.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/004_guest_watch.py b/heat/db/sqlalchemy/migrate_repo/versions/004_guest_watch.py
deleted file mode 100644 (file)
index ed93612..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData()
-    meta.bind = migrate_engine
-
-    watch_rule = Table(
-        'watch_rule', meta,
-        Column('id', Integer, primary_key=True),
-        Column('created_at', DateTime(timezone=False)),
-        Column('updated_at', DateTime(timezone=False)),
-        Column('stack_name', String(length=255,
-                                    convert_unicode=False,
-                                    assert_unicode=None,
-                                    unicode_error=None,
-                                    _warn_on_bytestring=False)),
-        Column('name', String(length=255, convert_unicode=False,
-                              assert_unicode=None,
-                              unicode_error=None, _warn_on_bytestring=False)),
-        Column('state', String(length=255, convert_unicode=False,
-                               assert_unicode=None,
-                               unicode_error=None, _warn_on_bytestring=False)),
-        Column('rule', Text()),
-        Column('last_evaluated', DateTime(timezone=False)),
-    )
-
-    try:
-        watch_rule.create()
-    except Exception:
-        meta.drop_all(tables=tables)
-        raise
-
-    watch_data = Table(
-        'watch_data', meta,
-        Column('id', Integer, primary_key=True),
-        Column('created_at', DateTime(timezone=False)),
-        Column('updated_at', DateTime(timezone=False)),
-        Column('data', Text()),
-        Column('watch_rule_id', Integer, ForeignKey("watch_rule.id"),
-               nullable=False),
-    )
-
-    try:
-        watch_data.create()
-    except Exception:
-        meta.drop_all(tables=tables)
-        raise
-
-
-def downgrade(migrate_engine):
-    meta = MetaData()
-    meta.bind = migrate_engine
-
-    watch_rule = Table('watch_rule', meta, autoload=True)
-    watch_rule.drop()
-    watch_data = Table('watch_data', meta, autoload=True)
-    watch_data.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/005_user_creds.py b/heat/db/sqlalchemy/migrate_repo/versions/005_user_creds.py
deleted file mode 100644 (file)
index 705862e..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    user_creds = Table(
-        'user_creds', meta,
-        Column('id', Integer, primary_key=True),
-        Column('created_at', DateTime(timezone=False)),
-        Column('updated_at', DateTime(timezone=False)),
-        Column('username', String(length=255, convert_unicode=False,
-                                  assert_unicode=None,
-                                  unicode_error=None,
-                                  _warn_on_bytestring=False)),
-        Column('password', String(length=255, convert_unicode=False,
-                                  assert_unicode=None,
-                                  unicode_error=None,
-                                  _warn_on_bytestring=False)),
-        Column('service_user', String(length=255, convert_unicode=False,
-                                      assert_unicode=None,
-                                      unicode_error=None,
-                                      _warn_on_bytestring=False)),
-        Column('service_password', String(length=255, convert_unicode=False,
-                                          assert_unicode=None,
-                                          unicode_error=None,
-                                          _warn_on_bytestring=False)),
-        Column('tenant', String(length=1024, convert_unicode=False,
-                                assert_unicode=None,
-                                unicode_error=None,
-                                _warn_on_bytestring=False)),
-        Column('auth_url', Text()),
-        Column('aws_auth_url', Text()),
-        Column('tenant_id', String(length=256, convert_unicode=False,
-                                   assert_unicode=None,
-                                   unicode_error=None,
-                                   _warn_on_bytestring=False)),
-        Column('aws_creds', Text())
-    )
-
-    user_creds.create()
-
-    stack = Table('stack', meta, autoload=True)
-
-    try:
-        Column('user_creds_id', Integer, ForeignKey("user_creds.id"),
-               nullable=False).create(stack)
-    except sqlalchemy.exc.IntegrityError:
-        stack.c.user_creds_id.drop()
-        user_creds.drop()
-        raise
-
-    Column('username', String(length=256, convert_unicode=False,
-                              assert_unicode=None,
-                              unicode_error=None,
-                              _warn_on_bytestring=False)).create(stack)
-
-
-def downgrade(migrate_engine):
-    meta = MetaData()
-    meta.bind = migrate_engine
-
-    stack = Table('stack', meta, autoload=True)
-    user_creds = Table('user_creds', meta, autoload=True)
-
-    stack.c.username.drop()
-
-    def fk_name(table, ref_column):
-        for fk in table.foreign_keys:
-            if fk.column == ref_column:
-                return fk.name
-
-    fkc = ForeignKeyConstraint([stack.c.user_creds_id], [user_creds.c.id],
-                               name=fk_name(stack, user_creds.c.id))
-    fkc.drop()
-
-    stack.c.user_creds_id.drop()
-    user_creds.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/006_nested_stacks.py b/heat/db/sqlalchemy/migrate_repo/versions/006_nested_stacks.py
deleted file mode 100644 (file)
index 1dd989a..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    # This was unused
-    resource = Table('resource', meta, autoload=True)
-    resource.c.depends_on.drop()
-
-    stack = Table('stack', meta, autoload=True)
-    Column('owner_id', Integer, nullable=True).create(stack)
-
-
-def downgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    resource = Table('resource', meta, autoload=True)
-    Column('depends_on', Integer).create(resource)
-
-    stack = Table('stack', meta, autoload=True)
-    stack.c.owner_id.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/007_resource_work.py b/heat/db/sqlalchemy/migrate_repo/versions/007_resource_work.py
deleted file mode 100644 (file)
index 02bf553..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    resource = Table('resource', meta, autoload=True)
-    Column('rsrc_metadata', Text()).create(resource)
-
-    stack = Table('stack', meta, autoload=True)
-    Column('status', String(length=255,
-                            convert_unicode=False,
-                            assert_unicode=None,
-                            unicode_error=None,
-                            _warn_on_bytestring=False)).create(stack)
-    Column('status_reason', String(length=255,
-                                   convert_unicode=False,
-                                   assert_unicode=None,
-                                   unicode_error=None,
-                                   _warn_on_bytestring=False)).create(stack)
-
-
-def downgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    resource = Table('resource', meta, autoload=True)
-    resource.c.rsrc_metadata.drop()
-
-    stack = Table('stack', meta, autoload=True)
-    stack.c.status.drop()
-    stack.c.status_reason.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/008_user_parameters.py b/heat/db/sqlalchemy/migrate_repo/versions/008_user_parameters.py
deleted file mode 100644 (file)
index 6511b14..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    stack = Table('stack', meta, autoload=True)
-    Column('parameters', Text()).create(stack)
-
-
-def downgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    stack = Table('stack', meta, autoload=True)
-    stack.c.parameters.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/009_remove_parsed_template.py b/heat/db/sqlalchemy/migrate_repo/versions/009_remove_parsed_template.py
deleted file mode 100644 (file)
index 8b48546..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    def fk_name(table, ref_column):
-        for fk in table.foreign_keys:
-            if fk.column == ref_column:
-                return fk.name
-
-    resource = Table('resource', meta, autoload=True)
-    parsed_template = Table('parsed_template', meta, autoload=True)
-
-    res_kc = ForeignKeyConstraint([resource.c.parsed_template_id],
-                                  [parsed_template.c.id],
-                                  name=fk_name(resource,
-                                               parsed_template.c.id))
-    try:
-        res_kc.drop()
-    except NotSupportedError:
-        # SQLite (used in unit tests) cannot drop a Foreign Key constraint
-        pass
-
-    resource.c.parsed_template_id.drop()
-
-    parsed_template.drop()
-
-
-def downgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    raw_template = Table('raw_template', meta, autoload=True)
-
-    parsed_template = Table(
-        'parsed_template', meta,
-        Column('id', Integer, primary_key=True),
-        Column('created_at', DateTime(timezone=False)),
-        Column('updated_at', DateTime(timezone=False)),
-        Column('raw_template_id', Integer, ForeignKey("raw_template.id"),
-               nullable=False),
-        Column('template', Text())
-    )
-    parsed_template.create()
-
-    resource = Table('resource', meta, autoload=True)
-    Column('parsed_template_id', Integer, ForeignKey('parsed_template.id'),
-           nullable=True).create(resource)
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/010_add_stack_timeout_col.py b/heat/db/sqlalchemy/migrate_repo/versions/010_add_stack_timeout_col.py
deleted file mode 100644 (file)
index 49b97ff..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-    stack = Table('stack', meta, autoload=True)
-
-    # Note hard-coded default 60 (minutes) here from the value in the
-    # engine, means we can upgrade and populate existing rows
-    try:
-        col = Column('timeout', Integer, nullable=False, default=60)
-        col.create(stack, populate_default=True)
-    except Exception as ex:
-        print "Caught exception adding timeout column to stacks %s" % ex
-        # *Hack-alert* Sqlite in the unit tests can't handle the above
-        # approach to nullable=False, so retry with nullable=True
-        Column('timeout', Integer, nullable=True, default=60).create(stack)
-
-
-def downgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-    stack = Table('stack', meta, autoload=True)
-
-    stack.c.timeout.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/011_stack_tenant.py b/heat/db/sqlalchemy/migrate_repo/versions/011_stack_tenant.py
deleted file mode 100644 (file)
index 70721c4..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    stack = Table('stack', meta, autoload=True)
-
-    Column('tenant', String(length=256, convert_unicode=False,
-                            assert_unicode=None,
-                            unicode_error=None,
-                            _warn_on_bytestring=False)).create(stack)
-
-
-def downgrade(migrate_engine):
-    meta = MetaData()
-    meta.bind = migrate_engine
-    stack = Table('stack', meta, autoload=True)
-    stack.c.tenant.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/012_stack_id_uuid.py b/heat/db/sqlalchemy/migrate_repo/versions/012_stack_id_uuid.py
deleted file mode 100644 (file)
index b2127f7..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-from heat.openstack.common import uuidutils
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    stack = Table('stack', meta, autoload=True)
-    event = Table('event', meta, autoload=True)
-    resource = Table('resource', meta, autoload=True)
-
-    dialect = migrate_engine.url.get_dialect().name
-
-    if not dialect.startswith('sqlite'):
-        fkeys = list(event.c.stack_id.foreign_keys)
-        if fkeys:
-            fkey_name = fkeys[0].constraint.name
-            ForeignKeyConstraint(
-                columns=[event.c.stack_id],
-                refcolumns=[stack.c.id],
-                name=fkey_name).drop()
-
-        fkeys = list(resource.c.stack_id.foreign_keys)
-        if fkeys:
-            fkey_name = fkeys[0].constraint.name
-            ForeignKeyConstraint(
-                columns=[resource.c.stack_id],
-                refcolumns=[stack.c.id],
-                name=fkey_name).drop()
-
-    stack.c.id.alter(
-        String(36), primary_key=True,
-        default=uuidutils.generate_uuid)
-    event.c.stack_id.alter(String(36), nullable=False)
-    resource.c.stack_id.alter(String(36), nullable=False)
-
-    fkeys = list(event.c.stack_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[event.c.stack_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).create()
-
-    fkeys = list(resource.c.stack_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[resource.c.stack_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).create()
-
-
-def downgrade(migrate_engine):
-    meta = MetaData()
-    meta.bind = migrate_engine
-
-    dialect = migrate_engine.url.get_dialect().name
-
-    if dialect.startswith('sqlite'):
-        return
-
-    stack = Table('stack', meta, autoload=True)
-    event = Table('event', meta, autoload=True)
-    resource = Table('resource', meta, autoload=True)
-
-    fkeys = list(event.c.stack_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[event.c.stack_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).drop()
-
-    fkeys = list(resource.c.stack_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[resource.c.stack_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).drop()
-
-    stack.c.id.alter(
-        Integer, primary_key=True,
-        default=utils.generate_uuid)
-    event.c.stack_id.alter(Integer, nullable=False)
-    resource.c.stack_id.alter(Integer, nullable=False)
-
-    fkeys = list(event.c.stack_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[event.c.stack_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).create()
-
-    fkeys = list(resource.c.stack_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[resource.c.stack_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).create()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/013_owner_id_uuid.py b/heat/db/sqlalchemy/migrate_repo/versions/013_owner_id_uuid.py
deleted file mode 100644 (file)
index e0825c4..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    stack = Table('stack', meta, autoload=True)
-
-    dialect = migrate_engine.url.get_dialect().name
-
-    if not dialect.startswith('sqlite'):
-        fkeys = list(stack.c.owner_id.foreign_keys)
-        if fkeys:
-            fkey_name = fkeys[0].constraint.name
-            ForeignKeyConstraint(columns=[
-                stack.c.owner_id],
-                refcolumns=[stack.c.id],
-                name=fkey_name).drop()
-
-    stack.c.owner_id.alter(String(36), nullable=True)
-
-    fkeys = list(stack.c.owner_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[stack.c.owner_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).create()
-
-
-def downgrade(migrate_engine):
-    meta = MetaData()
-    meta.bind = migrate_engine
-
-    dialect = migrate_engine.url.get_dialect().name
-
-    if dialect.startswith('sqlite'):
-        return
-
-    stack = Table('stack', meta, autoload=True)
-
-    fkeys = list(stack.c.owner_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[stack.c.owner_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).drop()
-
-    stack.c.owner_id.alter(Integer, nullable=True)
-
-    fkeys = list(event.c.stack_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[event.c.stack_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).create()
-
-    fkeys = list(stack.c.owner_id.foreign_keys)
-    if fkeys:
-        fkey_name = fkeys[0].constraint.name
-        ForeignKeyConstraint(
-            columns=[stack.c.owner_id],
-            refcolumns=[stack.c.id],
-            name=fkey_name).create()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/014_watch_stackid.py b/heat/db/sqlalchemy/migrate_repo/versions/014_watch_stackid.py
deleted file mode 100644 (file)
index 707928d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    stack = Table('stack', meta, autoload=True)
-    watch_rule = Table('watch_rule', meta, autoload=True)
-
-    Column('stack_id', String(length=36), ForeignKey("stack.id"),
-           nullable=False).create(watch_rule)
-
-    watch_rule.c.stack_name.drop()
-
-
-def downgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-
-    watch_rule = Table('watch_rule', meta, autoload=True)
-
-    watch_rule.c.stack_id.drop()
-    Column('stack_name', String(length=255), convert_unicode=False,
-           assert_unicode=None, unicode_error=None,
-           _warn_on_bytestring=False).create(watch_rule)
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/015_add_stack_rollback_col.py b/heat/db/sqlalchemy/migrate_repo/versions/015_add_stack_rollback_col.py
deleted file mode 100644 (file)
index 2856fef..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-def upgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-    stack = Table('stack', meta, autoload=True)
-
-    # Note hard-coded default 60 (minutes) here from the value in the
-    # engine, means we can upgrade and populate existing rows
-    try:
-        col = Column('disable_rollback', Boolean, nullable=False, default=True)
-        col.create(stack, populate_default=True)
-    except Exception as ex:
-        print "Caught exception adding disable_rollback column %s" % ex
-        # *Hack-alert* Sqlite in the unit tests can't handle the above
-        # approach to nullable=False, so retry with nullable=True
-        Column('disable_rollback', Boolean, nullable=True,
-               default=60).create(stack)
-
-
-def downgrade(migrate_engine):
-    meta = MetaData(bind=migrate_engine)
-    stack = Table('stack', meta, autoload=True)
-
-    stack.c.disable_rollback.drop()
diff --git a/heat/db/sqlalchemy/migrate_repo/versions/015_grizzly.py b/heat/db/sqlalchemy/migrate_repo/versions/015_grizzly.py
new file mode 100644 (file)
index 0000000..066f689
--- /dev/null
@@ -0,0 +1,140 @@
+# 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
+#
+#         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 sqlalchemy import *
+from migrate import *
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    raw_template = Table(
+        'raw_template', meta,
+        Column('id', Integer, primary_key=True, nullable=False),
+        Column('created_at', DateTime),
+        Column('updated_at', DateTime),
+        Column('template', Text),
+    )
+
+    user_creds = Table(
+        'user_creds', meta,
+        Column('id', Integer, primary_key=True, nullable=False),
+        Column('created_at', DateTime),
+        Column('updated_at', DateTime),
+        Column('username', String(255)),
+        Column('password', String(255)),
+        Column('service_user', String(255)),
+        Column('service_password', String(255)),
+        Column('tenant', String(1024)),
+        Column('auth_url', Text),
+        Column('aws_auth_url', Text),
+        Column('tenant_id', String(256)),
+        Column('aws_creds', Text),
+    )
+
+    stack = Table(
+        'stack', meta,
+        Column('id', String(36), primary_key=True, nullable=False),
+        Column('created_at', DateTime),
+        Column('updated_at', DateTime),
+        Column('name', String(255)),
+        Column('raw_template_id', Integer, ForeignKey('raw_template.id'),
+               nullable=False),
+        Column('user_creds_id', Integer, ForeignKey('user_creds.id'),
+               nullable=False),
+        Column('username', String(256)),
+        Column('owner_id', String(36)),
+        Column('status', String(255)),
+        Column('status_reason', String(255)),
+        Column('parameters', Text),
+        Column('timeout', Integer, nullable=False),
+        Column('tenant', String(256)),
+        Column('disable_rollback', Boolean, nullable=False),
+    )
+
+    resource = Table(
+        'resource', meta,
+        Column('id', Integer, primary_key=True, nullable=False),
+        Column('nova_instance', String(255)),
+        Column('name', String(255)),
+        Column('created_at', DateTime),
+        Column('updated_at', DateTime),
+        Column('state', String(255)),
+        Column('state_description', String(255)),
+        Column('stack_id', String(36), ForeignKey('stack.id'),
+               nullable=False),
+        Column('rsrc_metadata', Text),
+    )
+
+    event = Table(
+        'event', meta,
+        Column('id', Integer, primary_key=True, nullable=False),
+        Column('stack_id', String(36), ForeignKey('stack.id'),
+               nullable=False),
+        Column('created_at', DateTime),
+        Column('updated_at', DateTime),
+        Column('name', String(255)),
+        Column('logical_resource_id', String(255)),
+        Column('physical_resource_id', String(255)),
+        Column('resource_status_reason', String(255)),
+        Column('resource_type', String(255)),
+        Column('resource_properties', PickleType),
+    )
+
+    watch_rule = Table(
+        'watch_rule', meta,
+        Column('id', Integer, primary_key=True, nullable=False),
+        Column('created_at', DateTime),
+        Column('updated_at', DateTime),
+        Column('name', String(255)),
+        Column('state', String(255)),
+        Column('rule', Text),
+        Column('last_evaluated', DateTime),
+        Column('stack_id', String(36), ForeignKey('stack.id'),
+               nullable=False),
+    )
+
+    watch_data = Table(
+        'watch_data', meta,
+        Column('id', Integer, primary_key=True, nullable=False),
+        Column('created_at', DateTime),
+        Column('updated_at', DateTime),
+        Column('data', Text),
+        Column('watch_rule_id', Integer, ForeignKey('watch_rule.id'),
+               nullable=False),
+    )
+
+    tables = (
+        raw_template,
+        user_creds,
+        stack,
+        resource,
+        event,
+        watch_rule,
+        watch_data,
+    )
+
+    for index, table in enumerate(tables):
+        try:
+            table.create()
+        except:
+            # If an error occurs, drop all tables created so far to return
+            # to the previously existing state.
+            meta.drop_all(tables=tables[:index])
+            raise
+
+
+def downgrade(migrate_engine):
+    raise Exception('Database downgrade not supported - would drop all tables')