openstack neutron数据库的版本化管理

发表于 2017-05-26   |   分类于 技术

openstack使用neutron-db-manage这个工具来管理neutron的数据库。如果我们对neutron的数据库要做一些修改,比如简单的增加一张表,删除一张表等,就需要使用这个工具了。
下面简单介绍一下如何使用这个工具:

1.neutron-db-manager current

通过使用这个命令来查看当前neutron数据库的版本状况

# neutron-db-manage current
  Running current for neutron ...
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
5b1229d495d7 (head)
644861cf5d9f (head)
  OK
  Running current for neutron-fwaas ...
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
4b47ea298795 (head)
67c8e8d61d5 (head)
  OK

上述结果中显示了两个subproject的版本信息,分别是neutron和neutron-fwaas。
结果中每个subproject都有两条版本号信息,我们拿neutron这个subproject为例简单说明一下。

5b1229d495d7 (head)

这个是expand分支的版本信息,后面的(head)表明当前版本是最新版本。
expand这个分支代表的是所有对数据库进行的扩充操作。
比如你给数据库增加了一张表,那么这个操作引起的版本号变更就会体现在这个分支上。

644861cf5d9f (head)

这个是contract分支的版本信息,后面一样的,(head)表明当前版本是最新版本。
contract这个分支代表的是所有对数据库进行的缩减操作(例如删除表操作)。

2.neutron-db-manager revision

这个命令是为数据库变更创建一个修订文件,同时它也会生成一个新的版本和版本号,所以在应用该修订文件之前前,对应分支的版本号不再显示为head状态(有更新的版本未应用)。
它有几个参数

  1. -m
    为新版本设定一些备注信息,方便版本管理
  2. --autogenerate/--expand/--contract(三选一,无法同时存在)
    --autogenerate表示让工具自动创建修订文件,包括填充修订文件中对应的修改内容(会去自动比较当前数据库和neutron的数据库模板文件)。
    使用该参数后,工具会自动识别分支类型(expand/contract),但是如果扩充和缩减操作同时存在,那么使用该参数会报错,需要分别使用--expand和--contract。
    --expand,创建一个空修订文件,为expand分支生成新的版本和版本号,用户需要手动添加修改内容到修订文件中。
    --contract,创建一个空修订文件,为contract分支生成新的版本和版本号,用户需要手动添加修改内容到修订文件中。

3.neutron-db-manager upgrade

这条命令是应用修订文件,并更新版本号。
upgrade后面可以跟三个参数:heads/--expand/--contract

  1. heads
    例如:

    neutron-db-manager upgrade heads

    这会应用所有的修订文件,包括expand分支和contract分支,并更新到最新版本。

  2. --expand
    应用expand分支的修订文件,并更新到最新版本
  3. --contract
    应用contract分支的修订文件,并更新到最新版本

4.其他

如果有多个subproject的情况下,上述的命令都可以使用subproject参数来选择,例如:

neutron-db-manager --subproject neutron current

发表新评论

© 2017 Powered by Typecho
苏ICP备15035969号-3