¡@

Home 

OpenStack Study: 033_add_location_status.py

OpenStack Index

**** CubicPower OpenStack Study ****

def upgrade(migrate_engine):

    meta = sqlalchemy.schema.MetaData()

    meta.bind = migrate_engine

    images_table = sqlalchemy.Table('images', meta, autoload=True)

    image_locations_table = sqlalchemy.Table('image_locations', meta,

                                             autoload=True)

    # Create 'status' column for image_locations table

    status = sqlalchemy.Column('status', schema.String(30),

                               server_default='active', nullable=False)

    status.create(image_locations_table)

    # Set 'status' column initial value for image_locations table

    mapping = {'active': 'active', 'pending_delete': 'pending_delete',

               'deleted': 'deleted', 'killed': 'deleted'}

    for src, dst in mapping.iteritems():

        subq = sqlalchemy.sql.select([images_table.c.id])\

            .where(images_table.c.status == src)

        image_locations_table.update(values={'status': dst})\

            .where(image_locations_table.c.image_id.in_(subq))\

            .execute()

**** CubicPower OpenStack Study ****

def downgrade(migrate_engine):

    meta = sqlalchemy.schema.MetaData()

    meta.bind = migrate_engine

    image_locations_table = sqlalchemy.Table('image_locations', meta,

                                             autoload=True)

    # Remove 'status' column from image_locations table

    image_locations_table.columns['status'].drop()