1
from sqlalchemy import Column, Integer, MetaData, String, Table
2
from nova import log as logging
7
def upgrade(migrate_engine):
8
meta.bind = migrate_engine
9
instances = Table('instances', meta, autoload=True,
10
autoload_with=migrate_engine)
13
for instance in migrate_engine.execute(instances.select()):
14
if instance.instance_type_id is None:
15
types[instance.id] = None
18
types[instance.id] = int(instance.instance_type_id)
20
logging.warn("Instance %s did not have instance_type_id "
21
"converted to an integer because its value is %s" %
22
(instance.id, instance.instance_type_id))
23
types[instance.id] = None
25
integer_column = Column('instance_type_id_int', Integer(), nullable=True)
26
string_column = instances.c.instance_type_id
28
integer_column.create(instances)
29
for instance_id, instance_type_id in types.iteritems():
30
update = instances.update().\
31
where(instances.c.id == instance_id).\
32
values(instance_type_id_int=instance_type_id)
33
migrate_engine.execute(update)
35
string_column.alter(name='instance_type_id_str')
36
integer_column.alter(name='instance_type_id')
40
def downgrade(migrate_engine):
41
meta.bind = migrate_engine
42
instances = Table('instances', meta, autoload=True,
43
autoload_with=migrate_engine)
45
integer_column = instances.c.instance_type_id
46
string_column = Column('instance_type_id_str',
47
String(length=255, convert_unicode=False,
48
assert_unicode=None, unicode_error=None,
49
_warn_on_bytestring=False),
53
for instance in migrate_engine.execute(instances.select()):
54
if instance.instance_type_id is None:
55
types[instance.id] = None
57
types[instance.id] = str(instance.instance_type_id)
59
string_column.create(instances)
60
for instance_id, instance_type_id in types.iteritems():
61
update = instances.update().\
62
where(instances.c.id == instance_id).\
63
values(instance_type_id_str=instance_type_id)
64
migrate_engine.execute(update)
66
integer_column.alter(name='instance_type_id_int')
67
string_column.alter(name='instance_type_id')