¡@

Home 

OpenStack Study: 001_add_initial_tables.py

OpenStack Index

**** CubicPower OpenStack Study ****

def upgrade(migrate_engine):

    # Upgrade operations go here. Don't create your own engine; bind

    # migrate_engine to your metadata

    meta = sql.MetaData()

    meta.bind = migrate_engine

    # catalog

    service_table = sql.Table(

        'service',

        meta,

        sql.Column('id', sql.String(64), primary_key=True),

        sql.Column('type', sql.String(255)),

        sql.Column('extra', sql.Text()))

    service_table.create(migrate_engine, checkfirst=True)

    endpoint_table = sql.Table(

        'endpoint',

        meta,

        sql.Column('id', sql.String(64), primary_key=True),

        sql.Column('region', sql.String(255)),

        sql.Column('service_id',

                   sql.String(64),

                   sql.ForeignKey('service.id'),

                   nullable=False),

        sql.Column('extra', sql.Text()))

    endpoint_table.create(migrate_engine, checkfirst=True)

    # identity

    role_table = sql.Table(

        'role',

        meta,

        sql.Column('id', sql.String(64), primary_key=True),

        sql.Column('name', sql.String(255), unique=True, nullable=False))

    role_table.create(migrate_engine, checkfirst=True)

    if migrate_engine.name == 'ibm_db_sa':

        # NOTE(blk-u): SQLAlchemy for PostgreSQL picks the name tenant_name_key

        # for the unique constraint, but for DB2 doesn't give the UC a name

        # unless we tell it to and there is no DDL to alter a column to drop

        # an unnamed unique constraint, so this code creates a named unique

        # constraint on the name column rather than an unnamed one.

        # (This is used in migration 16.)

        tenant_table = sql.Table(

            'tenant',

            meta,

            sql.Column('id', sql.String(64), primary_key=True),

            sql.Column('name', sql.String(64), nullable=False),

            sql.Column('extra', sql.Text()),

            sql.UniqueConstraint('name', name='tenant_name_key'))

    else:

        tenant_table = sql.Table(

            'tenant',

            meta,

            sql.Column('id', sql.String(64), primary_key=True),

            sql.Column('name', sql.String(64), unique=True, nullable=False),

            sql.Column('extra', sql.Text()))

    tenant_table.create(migrate_engine, checkfirst=True)

    metadata_table = sql.Table(

        'metadata',

        meta,

        sql.Column('user_id', sql.String(64), primary_key=True),

        sql.Column('tenant_id', sql.String(64), primary_key=True),

        sql.Column('data', sql.Text()))

    metadata_table.create(migrate_engine, checkfirst=True)

    ec2_credential_table = sql.Table(

        'ec2_credential',

        meta,

        sql.Column('access', sql.String(64), primary_key=True),

        sql.Column('secret', sql.String(64)),

        sql.Column('user_id', sql.String(64)),

        sql.Column('tenant_id', sql.String(64)))

    ec2_credential_table.create(migrate_engine, checkfirst=True)

    if migrate_engine.name == 'ibm_db_sa':

        # NOTE(blk-u): SQLAlchemy for PostgreSQL picks the name user_name_key

        # for the unique constraint, but for DB2 doesn't give the UC a name

        # unless we tell it to and there is no DDL to alter a column to drop

        # an unnamed unique constraint, so this code creates a named unique

        # constraint on the name column rather than an unnamed one.

        # (This is used in migration 16.)

        user_table = sql.Table(

            'user',

            meta,

            sql.Column('id', sql.String(64), primary_key=True),

            sql.Column('name', sql.String(64), nullable=False),

            sql.Column('extra', sql.Text()),

            sql.UniqueConstraint('name', name='user_name_key'))

    else:

        user_table = sql.Table(

            'user',

            meta,

            sql.Column('id', sql.String(64), primary_key=True),

            sql.Column('name', sql.String(64), unique=True, nullable=False),

            sql.Column('extra', sql.Text()))

    user_table.create(migrate_engine, checkfirst=True)

    user_tenant_membership_table = sql.Table(

        'user_tenant_membership',

        meta,

        sql.Column(

            'user_id',

            sql.String(64),

            sql.ForeignKey('user.id'),

            primary_key=True),

        sql.Column(

            'tenant_id',

            sql.String(64),

            sql.ForeignKey('tenant.id'),

            primary_key=True))

    user_tenant_membership_table.create(migrate_engine, checkfirst=True)

    # token

    token_table = sql.Table(

        'token',

        meta,

        sql.Column('id', sql.String(64), primary_key=True),

        sql.Column('expires', sql.DateTime()),

        sql.Column('extra', sql.Text()))

    token_table.create(migrate_engine, checkfirst=True)

**** CubicPower OpenStack Study ****

def downgrade(migrate_engine):

    # Operations to reverse the above upgrade go here.

    meta = sql.MetaData()

    meta.bind = migrate_engine

    tables = ['user_tenant_membership', 'token', 'user', 'tenant', 'role',

              'metadata', 'ec2_credential', 'endpoint', 'service']

    for t in tables:

        table = sql.Table(t, meta, autoload=True)

        table.drop(migrate_engine, checkfirst=True)