#sfc中更新数据库表格属性,利用alembic工具,同时需要其ini文件,拷贝neutron下的ini文件到sfc目录下
cp /usr/lib/python2.7/site-packages/neutron/db/migration/alembic.ini /usr/lib/python2.7/site-packages/networking_sfc/db/migration/
#进入sfc对应的目录
cd /usr/lib/python2.7/site-packages/networking_sfc/db/migration
#添加自己的表格,会在/usr/lib/python2.7/site-packages/networking_sfc/db/migration/alembic_migrations/versions/ 目录下生成对应的文件
alembic revision -m "Add sfc_path_nodes_ppg_n_tuple_mapping table"
[root@controller migration]# alembic revision -m "Add sfc_path_nodes_ppg_n_tuple_mapping table"
Generating /usr/lib/python2.7/site-packages/networking_sfc/db/migration/alembic_migrations/versions/aa0a0e47a482_add_sfc_path_nodes_ppg_n_tuple_mapping_.py ... done
#此例中生成如下文件:aa0a0e47a482_add_sfc_path_nodes_ppg_n_tuple_mapping_.py
#其内容如下:
revision = '61832141fb82'
down_revision = '6185f1633a3d'
from alembic import op
import sqlalchemy as sa
def upgrade():
pass
#此例中我们需要给sfc_path_nodes表格增加属性ppg_n_tuple_mapping
#1.在对应的sfc_path_nodes模型中增加对应的属性,如下:
class PathNode(model_base.BASEV2, model_base.HasId, model_base.HasProject):
__tablename__ = 'sfc_path_nodes'
....
ppg_n_tuple_mapping = sa.Column(sa.String(1024), nullable=True)
此步骤保证正常调用
#2.在生成的文件中,更新表格的属性,如下:
def upgrade():
op.add_column('sfc_path_nodes', sa.Column('ppg_n_tuple_mapping',
sa.String(1024),
nullable=True))
此步骤保证当更新数据库时,会从此文件中更新对应表格的属性,生成新的数据库版本
#更新对应的数据库
neutron-db-manage --subproject networking-sfc upgrade head
#可以发现:
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
Running upgrade for networking-sfc ...
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade 198fd0b55458 -> aa0a0e47a482, Add sfc_path_nodes_ppg_n_tuple_mapping table
OK
cp /usr/lib/python2.7/site-packages/neutron/db/migration/alembic.ini /usr/lib/python2.7/site-packages/networking_sfc/db/migration/
#进入sfc对应的目录
cd /usr/lib/python2.7/site-packages/networking_sfc/db/migration
#添加自己的表格,会在/usr/lib/python2.7/site-packages/networking_sfc/db/migration/alembic_migrations/versions/ 目录下生成对应的文件
alembic revision -m "Add sfc_path_nodes_ppg_n_tuple_mapping table"
[root@controller migration]# alembic revision -m "Add sfc_path_nodes_ppg_n_tuple_mapping table"
Generating /usr/lib/python2.7/site-packages/networking_sfc/db/migration/alembic_migrations/versions/aa0a0e47a482_add_sfc_path_nodes_ppg_n_tuple_mapping_.py ... done
#此例中生成如下文件:aa0a0e47a482_add_sfc_path_nodes_ppg_n_tuple_mapping_.py
#其内容如下:
revision = '61832141fb82'
down_revision = '6185f1633a3d'
from alembic import op
import sqlalchemy as sa
def upgrade():
pass
#此例中我们需要给sfc_path_nodes表格增加属性ppg_n_tuple_mapping
#1.在对应的sfc_path_nodes模型中增加对应的属性,如下:
class PathNode(model_base.BASEV2, model_base.HasId, model_base.HasProject):
__tablename__ = 'sfc_path_nodes'
....
ppg_n_tuple_mapping = sa.Column(sa.String(1024), nullable=True)
此步骤保证正常调用
#2.在生成的文件中,更新表格的属性,如下:
def upgrade():
op.add_column('sfc_path_nodes', sa.Column('ppg_n_tuple_mapping',
sa.String(1024),
nullable=True))
此步骤保证当更新数据库时,会从此文件中更新对应表格的属性,生成新的数据库版本
#更新对应的数据库
neutron-db-manage --subproject networking-sfc upgrade head
#可以发现:
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
Running upgrade for networking-sfc ...
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade 198fd0b55458 -> aa0a0e47a482, Add sfc_path_nodes_ppg_n_tuple_mapping table
OK